PageSourceSearch

https://ghodaghodimun.gov.np/js/app.js?id=b0397026d3696963426c4bf41d98070b

js ghodaghodimun.gov.np collected 2026-09-25 01:17:18 UTC 2,470,461 bytes, 59,581 lines download raw bytes

vendor: 78 bytes, lines 1-3
1/******/ (() => { // webpackBootstrap
2/******/ 	var __webpack_modules__ = ({
3
vendor: 342 bytes, lines 4-13
4/***/ "./node_modules/axios/index.js":
5/*!*************************************!*\
6  !*** ./node_modules/axios/index.js ***!
7  \*************************************/
8/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
9
10module.exports = __webpack_require__(/*! ./lib/axios */ "./node_modules/axios/lib/axios.js");
11
12/***/ }),
13
vendor: 6,639 bytes, lines 14-204
14/***/ "./node_modules/axios/lib/adapters/xhr.js":
15/*!************************************************!*\
16  !*** ./node_modules/axios/lib/adapters/xhr.js ***!
17  \************************************************/
18/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
19
20"use strict";
21
22
23var utils = __webpack_require__(/*! ./../utils */ "./node_modules/axios/lib/utils.js");
24var settle = __webpack_require__(/*! ./../core/settle */ "./node_modules/axios/lib/core/settle.js");
25var buildURL = __webpack_require__(/*! ./../helpers/buildURL */ "./node_modules/axios/lib/helpers/buildURL.js");
26var buildFullPath = __webpack_require__(/*! ../core/buildFullPath */ "./node_modules/axios/lib/core/buildFullPath.js");
27var parseHeaders = __webpack_require__(/*! ./../helpers/parseHeaders */ "./node_modules/axios/lib/helpers/parseHeaders.js");
28var isURLSameOrigin = __webpack_require__(/*! ./../helpers/isURLSameOrigin */ "./node_modules/axios/lib/helpers/isURLSameOrigin.js");
29var createError = __webpack_require__(/*! ../core/createError */ "./node_modules/axios/lib/core/createError.js");
30
31module.exports = function xhrAdapter(config) {
32  return new Promise(function dispatchXhrRequest(resolve, reject) {
33    var requestData = config.data;
34    var requestHeaders = config.headers;
35
36    if (utils.isFormData(requestData)) {
37      delete requestHeaders['Content-Type']; // Let the browser set it
38    }
39
40    var request = new XMLHttpRequest();
41
42    // HTTP basic authentication
43    if (config.auth) {
44      var username = config.auth.username || '';
45      var password = config.auth.password || '';
46      requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);
47    }
48
49    var fullPath = buildFullPath(config.baseURL, config.url);
50    request.open(config.method.toUpperCase(), buildURL(fullPath, config.params, config.paramsSerializer), true);
51
52    // Set the request timeout in MS
53    request.timeout = config.timeout;
54
55    // Listen for ready state
56    request.onreadystatechange = function handleLoad() {
57      if (!request || request.readyState !== 4) {
58        return;
59      }
60
61      // The request errored out and we didn't get a response, this will be
62      // handled by onerror instead
63      // With one exception: request that using file: protocol, most browsers
64      // will return status as 0 even though it's a successful request
65      if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {
66        return;
67      }
68
69      // Prepare the response
70      var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;
71      var responseData = !config.responseType || config.responseType === 'text' ? request.responseText : request.response;
72      var response = {
73        data: responseData,
74        status: request.status,
75        statusText: request.statusText,
76        headers: responseHeaders,
77        config: config,
78        request: request
79      };
80
81      settle(resolve, reject, response);
82
83      // Clean up request
84      request = null;
85    };
86
87    // Handle browser request cancellation (as opposed to a manual cancellation)
88    request.onabort = function handleAbort() {
89      if (!request) {
90        return;
91      }
92
93      reject(createError('Request aborted', config, 'ECONNABORTED', request));
94
95      // Clean up request
96      request = null;
97    };
98
99    // Handle low level network errors
100    request.onerror = function handleError() {
101      // Real errors are hidden from us by the browser
102      // onerror should only fire if it's a network error
103      reject(createError('Network Error', config, null, request));
104
105      // Clean up request
106      request = null;
107    };
108
109    // Handle timeout
110    request.ontimeout = function handleTimeout() {
111      var timeoutErrorMessage = 'timeout of ' + config.timeout + 'ms exceeded';
112      if (config.timeoutErrorMessage) {
113        timeoutErrorMessage = config.timeoutErrorMessage;
114      }
115      reject(createError(timeoutErrorMessage, config, 'ECONNABORTED',
116        request));
117
118      // Clean up request
119      request = null;
120    };
121
122    // Add xsrf header
123    // This is only done if running in a standard browser environment.
124    // Specifically not if we're in a web worker, or react-native.
125    if (utils.isStandardBrowserEnv()) {
126      var cookies = __webpack_require__(/*! ./../helpers/cookies */ "./node_modules/axios/lib/helpers/cookies.js");
127
128      // Add xsrf header
129      var xsrfValue = (config.withCredentials || isURLSameOrigin(fullPath)) && config.xsrfCookieName ?
130        cookies.read(config.xsrfCookieName) :
131        undefined;
132
133      if (xsrfValue) {
134        requestHeaders[config.xsrfHeaderName] = xsrfValue;
135      }
136    }
137
138    // Add headers to the request
139    if ('setRequestHeader' in request) {
140      utils.forEach(requestHeaders, function setRequestHeader(val, key) {
141        if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {
142          // Remove Content-Type if data is undefined
143          delete requestHeaders[key];
144        } else {
145          // Otherwise add header to the request
146          request.setRequestHeader(key, val);
147        }
148      });
149    }
150
151    // Add withCredentials to request if needed
152    if (!utils.isUndefined(config.withCredentials)) {
153      request.withCredentials = !!config.withCredentials;
154    }
155
156    // Add responseType to request if needed
157    if (config.responseType) {
158      try {
159        request.responseType = config.responseType;
160      } catch (e) {
161        // Expected DOMException thrown by browsers not compatible XMLHttpRequest Level 2.
162        // But, this can be suppressed for 'json' type as it can be parsed by default 'transformResponse' function.
163        if (config.responseType !== 'json') {
164          throw e;
165        }
166      }
167    }
168
169    // Handle progress if needed
170    if (typeof config.onDownloadProgress === 'function') {
171      request.addEventListener('progress', config.onDownloadProgress);
172    }
173
174    // Not all browsers support upload events
175    if (typeof config.onUploadProgress === 'function' && request.upload) {
176      request.upload.addEventListener('progress', config.onUploadProgress);
177    }
178
179    if (config.cancelToken) {
180      // Handle cancellation
181      config.cancelToken.promise.then(function onCanceled(cancel) {
182        if (!request) {
183          return;
184        }
185
186        request.abort();
187        reject(cancel);
188        // Clean up request
189        request = null;
190      });
191    }
192
193    if (requestData === undefined) {
194      requestData = null;
195    }
196
197    // Send the request
198    request.send(requestData);
199  });
200};
201
202
203/***/ }),
204
vendor: 2,235 bytes, lines 205-268
205/***/ "./node_modules/axios/lib/axios.js":
206/*!*****************************************!*\
207  !*** ./node_modules/axios/lib/axios.js ***!
208  \*****************************************/
209/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
210
211"use strict";
212
213
214var utils = __webpack_require__(/*! ./utils */ "./node_modules/axios/lib/utils.js");
215var bind = __webpack_require__(/*! ./helpers/bind */ "./node_modules/axios/lib/helpers/bind.js");
216var Axios = __webpack_require__(/*! ./core/Axios */ "./node_modules/axios/lib/core/Axios.js");
217var mergeConfig = __webpack_require__(/*! ./core/mergeConfig */ "./node_modules/axios/lib/core/mergeConfig.js");
218var defaults = __webpack_require__(/*! ./defaults */ "./node_modules/axios/lib/defaults.js");
219
220/**
221 * Create an instance of Axios
222 *
223 * @param {Object} defaultConfig The default config for the instance
224 * @return {Axios} A new instance of Axios
225 */
226function createInstance(defaultConfig) {
227  var context = new Axios(defaultConfig);
228  var instance = bind(Axios.prototype.request, context);
229
230  // Copy axios.prototype to instance
231  utils.extend(instance, Axios.prototype, context);
232
233  // Copy context to instance
234  utils.extend(instance, context);
235
236  return instance;
237}
238
239// Create the default instance to be exported
240var axios = createInstance(defaults);
241
242// Expose Axios class to allow class inheritance
243axios.Axios = Axios;
244
245// Factory for creating new instances
246axios.create = function create(instanceConfig) {
247  return createInstance(mergeConfig(axios.defaults, instanceConfig));
248};
249
250// Expose Cancel & CancelToken
251axios.Cancel = __webpack_require__(/*! ./cancel/Cancel */ "./node_modules/axios/lib/cancel/Cancel.js");
252axios.CancelToken = __webpack_require__(/*! ./cancel/CancelToken */ "./node_modules/axios/lib/cancel/CancelToken.js");
253axios.isCancel = __webpack_require__(/*! ./cancel/isCancel */ "./node_modules/axios/lib/cancel/isCancel.js");
254
255// Expose all/spread
256axios.all = function all(promises) {
257  return Promise.all(promises);
258};
259axios.spread = __webpack_require__(/*! ./helpers/spread */ "./node_modules/axios/lib/helpers/spread.js");
260
261module.exports = axios;
262
263// Allow use of default import syntax in TypeScript
264module.exports["default"] = axios;
265
266
267/***/ }),
268
vendor: 636 bytes, lines 269-298
269/***/ "./node_modules/axios/lib/cancel/Cancel.js":
270/*!*************************************************!*\
271  !*** ./node_modules/axios/lib/cancel/Cancel.js ***!
272  \*************************************************/
273/***/ ((module) => {
274
275"use strict";
276
277
278/**
279 * A `Cancel` is an object that is thrown when an operation is canceled.
280 *
281 * @class
282 * @param {string=} message The message.
283 */
284function Cancel(message) {
285  this.message = message;
286}
287
288Cancel.prototype.toString = function toString() {
289  return 'Cancel' + (this.message ? ': ' + this.message : '');
290};
291
292Cancel.prototype.__CANCEL__ = true;
293
294module.exports = Cancel;
295
296
297/***/ }),
298
vendor: 1,619 bytes, lines 299-366
299/***/ "./node_modules/axios/lib/cancel/CancelToken.js":
300/*!******************************************************!*\
301  !*** ./node_modules/axios/lib/cancel/CancelToken.js ***!
302  \******************************************************/
303/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
304
305"use strict";
306
307
308var Cancel = __webpack_require__(/*! ./Cancel */ "./node_modules/axios/lib/cancel/Cancel.js");
309
310/**
311 * A `CancelToken` is an object that can be used to request cancellation of an operation.
312 *
313 * @class
314 * @param {Function} executor The executor function.
315 */
316function CancelToken(executor) {
317  if (typeof executor !== 'function') {
318    throw new TypeError('executor must be a function.');
319  }
320
321  var resolvePromise;
322  this.promise = new Promise(function promiseExecutor(resolve) {
323    resolvePromise = resolve;
324  });
325
326  var token = this;
327  executor(function cancel(message) {
328    if (token.reason) {
329      // Cancellation has already been requested
330      return;
331    }
332
333    token.reason = new Cancel(message);
334    resolvePromise(token.reason);
335  });
336}
337
338/**
339 * Throws a `Cancel` if cancellation has been requested.
340 */
341CancelToken.prototype.throwIfRequested = function throwIfRequested() {
342  if (this.reason) {
343    throw this.reason;
344  }
345};
346
347/**
348 * Returns an object that contains a new `CancelToken` and a function that, when called,
349 * cancels the `CancelToken`.
350 */
351CancelToken.source = function source() {
352  var cancel;
353  var token = new CancelToken(function executor(c) {
354    cancel = c;
355  });
356  return {
357    token: token,
358    cancel: cancel
359  };
360};
361
362module.exports = CancelToken;
363
364
365/***/ }),
366
vendor: 361 bytes, lines 367-382
367/***/ "./node_modules/axios/lib/cancel/isCancel.js":
368/*!***************************************************!*\
369  !*** ./node_modules/axios/lib/cancel/isCancel.js ***!
370  \***************************************************/
371/***/ ((module) => {
372
373"use strict";
374
375
376module.exports = function isCancel(value) {
377  return !!(value && value.__CANCEL__);
378};
379
380
381/***/ }),
382
vendor: 3,221 bytes, lines 383-487
383/***/ "./node_modules/axios/lib/core/Axios.js":
384/*!**********************************************!*\
385  !*** ./node_modules/axios/lib/core/Axios.js ***!
386  \**********************************************/
387/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
388
389"use strict";
390
391
392var utils = __webpack_require__(/*! ./../utils */ "./node_modules/axios/lib/utils.js");
393var buildURL = __webpack_require__(/*! ../helpers/buildURL */ "./node_modules/axios/lib/helpers/buildURL.js");
394var InterceptorManager = __webpack_require__(/*! ./InterceptorManager */ "./node_modules/axios/lib/core/InterceptorManager.js");
395var dispatchRequest = __webpack_require__(/*! ./dispatchRequest */ "./node_modules/axios/lib/core/dispatchRequest.js");
396var mergeConfig = __webpack_require__(/*! ./mergeConfig */ "./node_modules/axios/lib/core/mergeConfig.js");
397
398/**
399 * Create a new instance of Axios
400 *
401 * @param {Object} instanceConfig The default config for the instance
402 */
403function Axios(instanceConfig) {
404  this.defaults = instanceConfig;
405  this.interceptors = {
406    request: new InterceptorManager(),
407    response: new InterceptorManager()
408  };
409}
410
411/**
412 * Dispatch a request
413 *
414 * @param {Object} config The config specific for this request (merged with this.defaults)
415 */
416Axios.prototype.request = function request(config) {
417  /*eslint no-param-reassign:0*/
418  // Allow for axios('example/url'[, config]) a la fetch API
419  if (typeof config === 'string') {
420    config = arguments[1] || {};
421    config.url = arguments[0];
422  } else {
423    config = config || {};
424  }
425
426  config = mergeConfig(this.defaults, config);
427
428  // Set config.method
429  if (config.method) {
430    config.method = config.method.toLowerCase();
431  } else if (this.defaults.method) {
432    config.method = this.defaults.method.toLowerCase();
433  } else {
434    config.method = 'get';
435  }
436
437  // Hook up interceptors middleware
438  var chain = [dispatchRequest, undefined];
439  var promise = Promise.resolve(config);
440
441  this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {
442    chain.unshift(interceptor.fulfilled, interceptor.rejected);
443  });
444
445  this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {
446    chain.push(interceptor.fulfilled, interceptor.rejected);
447  });
448
449  while (chain.length) {
450    promise = promise.then(chain.shift(), chain.shift());
451  }
452
453  return promise;
454};
455
456Axios.prototype.getUri = function getUri(config) {
457  config = mergeConfig(this.defaults, config);
458  return buildURL(config.url, config.params, config.paramsSerializer).replace(/^\?/, '');
459};
460
461// Provide aliases for supported request methods
462utils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {
463  /*eslint func-names:0*/
464  Axios.prototype[method] = function(url, config) {
465    return this.request(utils.merge(config || {}, {
466      method: method,
467      url: url
468    }));
469  };
470});
471
472utils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {
473  /*eslint func-names:0*/
474  Axios.prototype[method] = function(url, data, config) {
475    return this.request(utils.merge(config || {}, {
476      method: method,
477      url: url,
478      data: data
479    }));
480  };
481});
482
483module.exports = Axios;
484
485
486/***/ }),
487
vendor: 1,642 bytes, lines 488-550
488/***/ "./node_modules/axios/lib/core/InterceptorManager.js":
489/*!***********************************************************!*\
490  !*** ./node_modules/axios/lib/core/InterceptorManager.js ***!
491  \***********************************************************/
492/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
493
494"use strict";
495
496
497var utils = __webpack_require__(/*! ./../utils */ "./node_modules/axios/lib/utils.js");
498
499function InterceptorManager() {
500  this.handlers = [];
501}
502
503/**
504 * Add a new interceptor to the stack
505 *
506 * @param {Function} fulfilled The function to handle `then` for a `Promise`
507 * @param {Function} rejected The function to handle `reject` for a `Promise`
508 *
509 * @return {Number} An ID used to remove interceptor later
510 */
511InterceptorManager.prototype.use = function use(fulfilled, rejected) {
512  this.handlers.push({
513    fulfilled: fulfilled,
514    rejected: rejected
515  });
516  return this.handlers.length - 1;
517};
518
519/**
520 * Remove an interceptor from the stack
521 *
522 * @param {Number} id The ID that was returned by `use`
523 */
524InterceptorManager.prototype.eject = function eject(id) {
525  if (this.handlers[id]) {
526    this.handlers[id] = null;
527  }
528};
529
530/**
531 * Iterate over all the registered interceptors
532 *
533 * This method is particularly useful for skipping over any
534 * interceptors that may have become `null` calling `eject`.
535 *
536 * @param {Function} fn The function to call for each interceptor
537 */
538InterceptorManager.prototype.forEach = function forEach(fn) {
539  utils.forEach(this.handlers, function forEachHandler(h) {
540    if (h !== null) {
541      fn(h);
542    }
543  });
544};
545
546module.exports = InterceptorManager;
547
548
549/***/ }),
550
vendor: 1,149 bytes, lines 551-581
551/***/ "./node_modules/axios/lib/core/buildFullPath.js":
552/*!******************************************************!*\
553  !*** ./node_modules/axios/lib/core/buildFullPath.js ***!
554  \******************************************************/
555/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
556
557"use strict";
558
559
560var isAbsoluteURL = __webpack_require__(/*! ../helpers/isAbsoluteURL */ "./node_modules/axios/lib/helpers/isAbsoluteURL.js");
561var combineURLs = __webpack_require__(/*! ../helpers/combineURLs */ "./node_modules/axios/lib/helpers/combineURLs.js");
562
563/**
564 * Creates a new URL by combining the baseURL with the requestedURL,
565 * only when the requestedURL is not already an absolute URL.
566 * If the requestURL is absolute, this function returns the requestedURL untouched.
567 *
568 * @param {string} baseURL The base URL
569 * @param {string} requestedURL Absolute or relative URL to combine
570 * @returns {string} The combined full path
571 */
572module.exports = function buildFullPath(baseURL, requestedURL) {
573  if (baseURL && !isAbsoluteURL(requestedURL)) {
574    return combineURLs(baseURL, requestedURL);
575  }
576  return requestedURL;
577};
578
579
580/***/ }),
581
vendor: 1,000 bytes, lines 582-610
582/***/ "./node_modules/axios/lib/core/createError.js":
583/*!****************************************************!*\
584  !*** ./node_modules/axios/lib/core/createError.js ***!
585  \****************************************************/
586/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
587
588"use strict";
589
590
591var enhanceError = __webpack_require__(/*! ./enhanceError */ "./node_modules/axios/lib/core/enhanceError.js");
592
593/**
594 * Create an Error with the specified message, config, error code, request and response.
595 *
596 * @param {string} message The error message.
597 * @param {Object} config The config.
598 * @param {string} [code] The error code (for example, 'ECONNABORTED').
599 * @param {Object} [request] The request.
600 * @param {Object} [response] The response.
601 * @returns {Error} The created error.
602 */
603module.exports = function createError(message, config, code, request, response) {
604  var error = new Error(message);
605  return enhanceError(error, config, code, request, response);
606};
607
608
609/***/ }),
610
vendor: 2,498 bytes, lines 611-700
611/***/ "./node_modules/axios/lib/core/dispatchRequest.js":
612/*!********************************************************!*\
613  !*** ./node_modules/axios/lib/core/dispatchRequest.js ***!
614  \********************************************************/
615/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
616
617"use strict";
618
619
620var utils = __webpack_require__(/*! ./../utils */ "./node_modules/axios/lib/utils.js");
621var transformData = __webpack_require__(/*! ./transformData */ "./node_modules/axios/lib/core/transformData.js");
622var isCancel = __webpack_require__(/*! ../cancel/isCancel */ "./node_modules/axios/lib/cancel/isCancel.js");
623var defaults = __webpack_require__(/*! ../defaults */ "./node_modules/axios/lib/defaults.js");
624
625/**
626 * Throws a `Cancel` if cancellation has been requested.
627 */
628function throwIfCancellationRequested(config) {
629  if (config.cancelToken) {
630    config.cancelToken.throwIfRequested();
631  }
632}
633
634/**
635 * Dispatch a request to the server using the configured adapter.
636 *
637 * @param {object} config The config that is to be used for the request
638 * @returns {Promise} The Promise to be fulfilled
639 */
640module.exports = function dispatchRequest(config) {
641  throwIfCancellationRequested(config);
642
643  // Ensure headers exist
644  config.headers = config.headers || {};
645
646  // Transform request data
647  config.data = transformData(
648    config.data,
649    config.headers,
650    config.transformRequest
651  );
652
653  // Flatten headers
654  config.headers = utils.merge(
655    config.headers.common || {},
656    config.headers[config.method] || {},
657    config.headers
658  );
659
660  utils.forEach(
661    ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],
662    function cleanHeaderConfig(method) {
663      delete config.headers[method];
664    }
665  );
666
667  var adapter = config.adapter || defaults.adapter;
668
669  return adapter(config).then(function onAdapterResolution(response) {
670    throwIfCancellationRequested(config);
671
672    // Transform response data
673    response.data = transformData(
674      response.data,
675      response.headers,
676      config.transformResponse
677    );
678
679    return response;
680  }, function onAdapterRejection(reason) {
681    if (!isCancel(reason)) {
682      throwIfCancellationRequested(config);
683
684      // Transform response data
685      if (reason && reason.response) {
686        reason.response.data = transformData(
687          reason.response.data,
688          reason.response.headers,
689          config.transformResponse
690        );
691      }
692    }
693
694    return Promise.reject(reason);
695  });
696};
697
698
699/***/ }),
700
vendor: 1,309 bytes, lines 701-753
701/***/ "./node_modules/axios/lib/core/enhanceError.js":
702/*!*****************************************************!*\
703  !*** ./node_modules/axios/lib/core/enhanceError.js ***!
704  \*****************************************************/
705/***/ ((module) => {
706
707"use strict";
708
709
710/**
711 * Update an Error with the specified config, error code, and response.
712 *
713 * @param {Error} error The error to update.
714 * @param {Object} config The config.
715 * @param {string} [code] The error code (for example, 'ECONNABORTED').
716 * @param {Object} [request] The request.
717 * @param {Object} [response] The response.
718 * @returns {Error} The error.
719 */
720module.exports = function enhanceError(error, config, code, request, response) {
721  error.config = config;
722  if (code) {
723    error.code = code;
724  }
725
726  error.request = request;
727  error.response = response;
728  error.isAxiosError = true;
729
730  error.toJSON = function() {
731    return {
732      // Standard
733      message: this.message,
734      name: this.name,
735      // Microsoft
736      description: this.description,
737      number: this.number,
738      // Mozilla
739      fileName: this.fileName,
740      lineNumber: this.lineNumber,
741      columnNumber: this.columnNumber,
742      stack: this.stack,
743      // Axios
744      config: this.config,
745      code: this.code
746    };
747  };
748  return error;
749};
750
751
752/***/ }),
753
vendor: 2,773 bytes, lines 754-837
754/***/ "./node_modules/axios/lib/core/mergeConfig.js":
755/*!****************************************************!*\
756  !*** ./node_modules/axios/lib/core/mergeConfig.js ***!
757  \****************************************************/
758/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
759
760"use strict";
761
762
763var utils = __webpack_require__(/*! ../utils */ "./node_modules/axios/lib/utils.js");
764
765/**
766 * Config-specific merge-function which creates a new config-object
767 * by merging two configuration objects together.
768 *
769 * @param {Object} config1
770 * @param {Object} config2
771 * @returns {Object} New object resulting from merging config2 to config1
772 */
773module.exports = function mergeConfig(config1, config2) {
774  // eslint-disable-next-line no-param-reassign
775  config2 = config2 || {};
776  var config = {};
777
778  var valueFromConfig2Keys = ['url', 'method', 'params', 'data'];
779  var mergeDeepPropertiesKeys = ['headers', 'auth', 'proxy'];
780  var defaultToConfig2Keys = [
781    'baseURL', 'url', 'transformRequest', 'transformResponse', 'paramsSerializer',
782    'timeout', 'withCredentials', 'adapter', 'responseType', 'xsrfCookieName',
783    'xsrfHeaderName', 'onUploadProgress', 'onDownloadProgress',
784    'maxContentLength', 'validateStatus', 'maxRedirects', 'httpAgent',
785    'httpsAgent', 'cancelToken', 'socketPath'
786  ];
787
788  utils.forEach(valueFromConfig2Keys, function valueFromConfig2(prop) {
789    if (typeof config2[prop] !== 'undefined') {
790      config[prop] = config2[prop];
791    }
792  });
793
794  utils.forEach(mergeDeepPropertiesKeys, function mergeDeepProperties(prop) {
795    if (utils.isObject(config2[prop])) {
796      config[prop] = utils.deepMerge(config1[prop], config2[prop]);
797    } else if (typeof config2[prop] !== 'undefined') {
798      config[prop] = config2[prop];
799    } else if (utils.isObject(config1[prop])) {
800      config[prop] = utils.deepMerge(config1[prop]);
801    } else if (typeof config1[prop] !== 'undefined') {
802      config[prop] = config1[prop];
803    }
804  });
805
806  utils.forEach(defaultToConfig2Keys, function defaultToConfig2(prop) {
807    if (typeof config2[prop] !== 'undefined') {
808      config[prop] = config2[prop];
809    } else if (typeof config1[prop] !== 'undefined') {
810      config[prop] = config1[prop];
811    }
812  });
813
814  var axiosKeys = valueFromConfig2Keys
815    .concat(mergeDeepPropertiesKeys)
816    .concat(defaultToConfig2Keys);
817
818  var otherKeys = Object
819    .keys(config2)
820    .filter(function filterAxiosKeys(key) {
821      return axiosKeys.indexOf(key) === -1;
822    });
823
824  utils.forEach(otherKeys, function otherKeysDefaultToConfig2(prop) {
825    if (typeof config2[prop] !== 'undefined') {
826      config[prop] = config2[prop];
827    } else if (typeof config1[prop] !== 'undefined') {
828      config[prop] = config1[prop];
829    }
830  });
831
832  return config;
833};
834
835
836/***/ }),
837
vendor: 1,040 bytes, lines 838-873
838/***/ "./node_modules/axios/lib/core/settle.js":
839/*!***********************************************!*\
840  !*** ./node_modules/axios/lib/core/settle.js ***!
841  \***********************************************/
842/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
843
844"use strict";
845
846
847var createError = __webpack_require__(/*! ./createError */ "./node_modules/axios/lib/core/createError.js");
848
849/**
850 * Resolve or reject a Promise based on response status.
851 *
852 * @param {Function} resolve A function that resolves the promise.
853 * @param {Function} reject A function that rejects the promise.
854 * @param {object} response The response.
855 */
856module.exports = function settle(resolve, reject, response) {
857  var validateStatus = response.config.validateStatus;
858  if (!validateStatus || validateStatus(response.status)) {
859    resolve(response);
860  } else {
861    reject(createError(
862      'Request failed with status code ' + response.status,
863      response.config,
864      null,
865      response.request,
866      response
867    ));
868  }
869};
870
871
872/***/ }),
873
vendor: 921 bytes, lines 874-904
874/***/ "./node_modules/axios/lib/core/transformData.js":
875/*!******************************************************!*\
876  !*** ./node_modules/axios/lib/core/transformData.js ***!
877  \******************************************************/
878/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
879
880"use strict";
881
882
883var utils = __webpack_require__(/*! ./../utils */ "./node_modules/axios/lib/utils.js");
884
885/**
886 * Transform the data for a request or a response
887 *
888 * @param {Object|String} data The data to be transformed
889 * @param {Array} headers The headers for the request or response
890 * @param {Array|Function} fns A single function or Array of functions
891 * @returns {*} The resulting transformed data
892 */
893module.exports = function transformData(data, headers, fns) {
894  /*eslint no-param-reassign:0*/
895  utils.forEach(fns, function transform(fn) {
896    data = fn(data, headers);
897  });
898
899  return data;
900};
901
902
903/***/ }),
904
vendor: 3,192 bytes, lines 905-1013
905/***/ "./node_modules/axios/lib/defaults.js":
906/*!********************************************!*\
907  !*** ./node_modules/axios/lib/defaults.js ***!
908  \********************************************/
909/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
910
911"use strict";
912/* provided dependency */ var process = __webpack_require__(/*! process/browser.js */ "./node_modules/process/browser.js");
913
914
915var utils = __webpack_require__(/*! ./utils */ "./node_modules/axios/lib/utils.js");
916var normalizeHeaderName = __webpack_require__(/*! ./helpers/normalizeHeaderName */ "./node_modules/axios/lib/helpers/normalizeHeaderName.js");
917
918var DEFAULT_CONTENT_TYPE = {
919  'Content-Type': 'application/x-www-form-urlencoded'
920};
921
922function setContentTypeIfUnset(headers, value) {
923  if (!utils.isUndefined(headers) && utils.isUndefined(headers['Content-Type'])) {
924    headers['Content-Type'] = value;
925  }
926}
927
928function getDefaultAdapter() {
929  var adapter;
930  if (typeof XMLHttpRequest !== 'undefined') {
931    // For browsers use XHR adapter
932    adapter = __webpack_require__(/*! ./adapters/xhr */ "./node_modules/axios/lib/adapters/xhr.js");
933  } else if (typeof process !== 'undefined' && Object.prototype.toString.call(process) === '[object process]') {
934    // For node use HTTP adapter
935    adapter = __webpack_require__(/*! ./adapters/http */ "./node_modules/axios/lib/adapters/xhr.js");
936  }
937  return adapter;
938}
939
940var defaults = {
941  adapter: getDefaultAdapter(),
942
943  transformRequest: [function transformRequest(data, headers) {
944    normalizeHeaderName(headers, 'Accept');
945    normalizeHeaderName(headers, 'Content-Type');
946    if (utils.isFormData(data) ||
947      utils.isArrayBuffer(data) ||
948      utils.isBuffer(data) ||
949      utils.isStream(data) ||
950      utils.isFile(data) ||
951      utils.isBlob(data)
952    ) {
953      return data;
954    }
955    if (utils.isArrayBufferView(data)) {
956      return data.buffer;
957    }
958    if (utils.isURLSearchParams(data)) {
959      setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8');
960      return data.toString();
961    }
962    if (utils.isObject(data)) {
963      setContentTypeIfUnset(headers, 'application/json;charset=utf-8');
964      return JSON.stringify(data);
965    }
966    return data;
967  }],
968
969  transformResponse: [function transformResponse(data) {
970    /*eslint no-param-reassign:0*/
971    if (typeof data === 'string') {
972      try {
973        data = JSON.parse(data);
974      } catch (e) { /* Ignore */ }
975    }
976    return data;
977  }],
978
979  /**
980   * A timeout in milliseconds to abort a request. If set to 0 (default) a
981   * timeout is not created.
982   */
983  timeout: 0,
984
985  xsrfCookieName: 'XSRF-TOKEN',
986  xsrfHeaderName: 'X-XSRF-TOKEN',
987
988  maxContentLength: -1,
989
990  validateStatus: function validateStatus(status) {
991    return status >= 200 && status < 300;
992  }
993};
994
995defaults.headers = {
996  common: {
997    'Accept': 'application/json, text/plain, */*'
998  }
999};
1000
1001utils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {
1002  defaults.headers[method] = {};
1003});
1004
1005utils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {
1006  defaults.headers[method] = utils.merge(DEFAULT_CONTENT_TYPE);
1007});
1008
1009module.exports = defaults;
1010
1011
1012/***/ }),
1013
vendor: 503 bytes, lines 1014-1035
1014/***/ "./node_modules/axios/lib/helpers/bind.js":
1015/*!************************************************!*\
1016  !*** ./node_modules/axios/lib/helpers/bind.js ***!
1017  \************************************************/
1018/***/ ((module) => {
1019
1020"use strict";
1021
1022
1023module.exports = function bind(fn, thisArg) {
1024  return function wrap() {
1025    var args = new Array(arguments.length);
1026    for (var i = 0; i < args.length; i++) {
1027      args[i] = arguments[i];
1028    }
1029    return fn.apply(thisArg, args);
1030  };
1031};
1032
1033
1034/***/ }),
1035
vendor: 2,034 bytes, lines 1036-1117
1036/***/ "./node_modules/axios/lib/helpers/buildURL.js":
1037/*!****************************************************!*\
1038  !*** ./node_modules/axios/lib/helpers/buildURL.js ***!
1039  \****************************************************/
1040/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
1041
1042"use strict";
1043
1044
1045var utils = __webpack_require__(/*! ./../utils */ "./node_modules/axios/lib/utils.js");
1046
1047function encode(val) {
1048  return encodeURIComponent(val).
1049    replace(/%40/gi, '@').
1050    replace(/%3A/gi, ':').
1051    replace(/%24/g, '$').
1052    replace(/%2C/gi, ',').
1053    replace(/%20/g, '+').
1054    replace(/%5B/gi, '[').
1055    replace(/%5D/gi, ']');
1056}
1057
1058/**
1059 * Build a URL by appending params to the end
1060 *
1061 * @param {string} url The base of the url (e.g., http://www.google.com)
1062 * @param {object} [params] The params to be appended
1063 * @returns {string} The formatted url
1064 */
1065module.exports = function buildURL(url, params, paramsSerializer) {
1066  /*eslint no-param-reassign:0*/
1067  if (!params) {
1068    return url;
1069  }
1070
1071  var serializedParams;
1072  if (paramsSerializer) {
1073    serializedParams = paramsSerializer(params);
1074  } else if (utils.isURLSearchParams(params)) {
1075    serializedParams = params.toString();
1076  } else {
1077    var parts = [];
1078
1079    utils.forEach(params, function serialize(val, key) {
1080      if (val === null || typeof val === 'undefined') {
1081        return;
1082      }
1083
1084      if (utils.isArray(val)) {
1085        key = key + '[]';
1086      } else {
1087        val = [val];
1088      }
1089
1090      utils.forEach(val, function parseValue(v) {
1091        if (utils.isDate(v)) {
1092          v = v.toISOString();
1093        } else if (utils.isObject(v)) {
1094          v = JSON.stringify(v);
1095        }
1096        parts.push(encode(key) + '=' + encode(v));
1097      });
1098    });
1099
1100    serializedParams = parts.join('&');
1101  }
1102
1103  if (serializedParams) {
1104    var hashmarkIndex = url.indexOf('#');
1105    if (hashmarkIndex !== -1) {
1106      url = url.slice(0, hashmarkIndex);
1107    }
1108
1109    url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;
1110  }
1111
1112  return url;
1113};
1114
1115
1116/***/ }),
1117
vendor: 655 bytes, lines 1118-1142
1118/***/ "./node_modules/axios/lib/helpers/combineURLs.js":
1119/*!*******************************************************!*\
1120  !*** ./node_modules/axios/lib/helpers/combineURLs.js ***!
1121  \*******************************************************/
1122/***/ ((module) => {
1123
1124"use strict";
1125
1126
1127/**
1128 * Creates a new URL by combining the specified URLs
1129 *
1130 * @param {string} baseURL The base URL
1131 * @param {string} relativeURL The relative URL
1132 * @returns {string} The combined URL
1133 */
1134module.exports = function combineURLs(baseURL, relativeURL) {
1135  return relativeURL
1136    ? baseURL.replace(/\/+$/, '') + '/' + relativeURL.replace(/^\/+/, '')
1137    : baseURL;
1138};
1139
1140
1141/***/ }),
1142
vendor: 1,794 bytes, lines 1143-1206
1143/***/ "./node_modules/axios/lib/helpers/cookies.js":
1144/*!***************************************************!*\
1145  !*** ./node_modules/axios/lib/helpers/cookies.js ***!
1146  \***************************************************/
1147/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
1148
1149"use strict";
1150
1151
1152var utils = __webpack_require__(/*! ./../utils */ "./node_modules/axios/lib/utils.js");
1153
1154module.exports = (
1155  utils.isStandardBrowserEnv() ?
1156
1157  // Standard browser envs support document.cookie
1158    (function standardBrowserEnv() {
1159      return {
1160        write: function write(name, value, expires, path, domain, secure) {
1161          var cookie = [];
1162          cookie.push(name + '=' + encodeURIComponent(value));
1163
1164          if (utils.isNumber(expires)) {
1165            cookie.push('expires=' + new Date(expires).toGMTString());
1166          }
1167
1168          if (utils.isString(path)) {
1169            cookie.push('path=' + path);
1170          }
1171
1172          if (utils.isString(domain)) {
1173            cookie.push('domain=' + domain);
1174          }
1175
1176          if (secure === true) {
1177            cookie.push('secure');
1178          }
1179
1180          document.cookie = cookie.join('; ');
1181        },
1182
1183        read: function read(name) {
1184          var match = document.cookie.match(new RegExp('(^|;\\s*)(' + name + ')=([^;]*)'));
1185          return (match ? decodeURIComponent(match[3]) : null);
1186        },
1187
1188        remove: function remove(name) {
1189          this.write(name, '', Date.now() - 86400000);
1190        }
1191      };
1192    })() :
1193
1194  // Non standard browser env (web workers, react-native) lack needed support.
1195    (function nonStandardBrowserEnv() {
1196      return {
1197        write: function write() {},
1198        read: function read() { return null; },
1199        remove: function remove() {}
1200      };
1201    })()
1202);
1203
1204
1205/***/ }),
1206
vendor: 846 bytes, lines 1207-1231
1207/***/ "./node_modules/axios/lib/helpers/isAbsoluteURL.js":
1208/*!*********************************************************!*\
1209  !*** ./node_modules/axios/lib/helpers/isAbsoluteURL.js ***!
1210  \*********************************************************/
1211/***/ ((module) => {
1212
1213"use strict";
1214
1215
1216/**
1217 * Determines whether the specified URL is absolute
1218 *
1219 * @param {string} url The URL to test
1220 * @returns {boolean} True if the specified URL is absolute, otherwise false
1221 */
1222module.exports = function isAbsoluteURL(url) {
1223  // A URL is considered absolute if it begins with "<scheme>://" or "//" (protocol-relative URL).
1224  // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed
1225  // by any combination of letters, digits, plus, period, or hyphen.
1226  return /^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(url);
1227};
1228
1229
1230/***/ }),
1231
vendor: 2,696 bytes, lines 1232-1310
1232/***/ "./node_modules/axios/lib/helpers/isURLSameOrigin.js":
1233/*!***********************************************************!*\
1234  !*** ./node_modules/axios/lib/helpers/isURLSameOrigin.js ***!
1235  \***********************************************************/
1236/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
1237
1238"use strict";
1239
1240
1241var utils = __webpack_require__(/*! ./../utils */ "./node_modules/axios/lib/utils.js");
1242
1243module.exports = (
1244  utils.isStandardBrowserEnv() ?
1245
1246  // Standard browser envs have full support of the APIs needed to test
1247  // whether the request URL is of the same origin as current location.
1248    (function standardBrowserEnv() {
1249      var msie = /(msie|trident)/i.test(navigator.userAgent);
1250      var urlParsingNode = document.createElement('a');
1251      var originURL;
1252
1253      /**
1254    * Parse a URL to discover it's components
1255    *
1256    * @param {String} url The URL to be parsed
1257    * @returns {Object}
1258    */
1259      function resolveURL(url) {
1260        var href = url;
1261
1262        if (msie) {
1263        // IE needs attribute set twice to normalize properties
1264          urlParsingNode.setAttribute('href', href);
1265          href = urlParsingNode.href;
1266        }
1267
1268        urlParsingNode.setAttribute('href', href);
1269
1270        // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils
1271        return {
1272          href: urlParsingNode.href,
1273          protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',
1274          host: urlParsingNode.host,
1275          search: urlParsingNode.search ? urlParsingNode.search.replace(/^\?/, '') : '',
1276          hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',
1277          hostname: urlParsingNode.hostname,
1278          port: urlParsingNode.port,
1279          pathname: (urlParsingNode.pathname.charAt(0) === '/') ?
1280            urlParsingNode.pathname :
1281            '/' + urlParsingNode.pathname
1282        };
1283      }
1284
1285      originURL = resolveURL(window.location.href);
1286
1287      /**
1288    * Determine if a URL shares the same origin as the current location
1289    *
1290    * @param {String} requestURL The URL to test
1291    * @returns {boolean} True if URL shares the same origin, otherwise false
1292    */
1293      return function isURLSameOrigin(requestURL) {
1294        var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;
1295        return (parsed.protocol === originURL.protocol &&
1296            parsed.host === originURL.host);
1297      };
1298    })() :
1299
1300  // Non standard browser envs (web workers, react-native) lack needed support.
1301    (function nonStandardBrowserEnv() {
1302      return function isURLSameOrigin() {
1303        return true;
1304      };
1305    })()
1306);
1307
1308
1309/***/ }),
1310
vendor: 764 bytes, lines 1311-1333
1311/***/ "./node_modules/axios/lib/helpers/normalizeHeaderName.js":
1312/*!***************************************************************!*\
1313  !*** ./node_modules/axios/lib/helpers/normalizeHeaderName.js ***!
1314  \***************************************************************/
1315/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
1316
1317"use strict";
1318
1319
1320var utils = __webpack_require__(/*! ../utils */ "./node_modules/axios/lib/utils.js");
1321
1322module.exports = function normalizeHeaderName(headers, normalizedName) {
1323  utils.forEach(headers, function processHeader(value, name) {
1324    if (name !== normalizedName && name.toUpperCase() === normalizedName.toUpperCase()) {
1325      headers[normalizedName] = value;
1326      delete headers[name];
1327    }
1328  });
1329};
1330
1331
1332/***/ }),
1333
vendor: 1,772 bytes, lines 1334-1397
1334/***/ "./node_modules/axios/lib/helpers/parseHeaders.js":
1335/*!********************************************************!*\
1336  !*** ./node_modules/axios/lib/helpers/parseHeaders.js ***!
1337  \********************************************************/
1338/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
1339
1340"use strict";
1341
1342
1343var utils = __webpack_require__(/*! ./../utils */ "./node_modules/axios/lib/utils.js");
1344
1345// Headers whose duplicates are ignored by node
1346// c.f. https://nodejs.org/api/http.html#http_message_headers
1347var ignoreDuplicateOf = [
1348  'age', 'authorization', 'content-length', 'content-type', 'etag',
1349  'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since',
1350  'last-modified', 'location', 'max-forwards', 'proxy-authorization',
1351  'referer', 'retry-after', 'user-agent'
1352];
1353
1354/**
1355 * Parse headers into an object
1356 *
1357 * ```
1358 * Date: Wed, 27 Aug 2014 08:58:49 GMT
1359 * Content-Type: application/json
1360 * Connection: keep-alive
1361 * Transfer-Encoding: chunked
1362 * ```
1363 *
1364 * @param {String} headers Headers needing to be parsed
1365 * @returns {Object} Headers parsed into an object
1366 */
1367module.exports = function parseHeaders(headers) {
1368  var parsed = {};
1369  var key;
1370  var val;
1371  var i;
1372
1373  if (!headers) { return parsed; }
1374
1375  utils.forEach(headers.split('\n'), function parser(line) {
1376    i = line.indexOf(':');
1377    key = utils.trim(line.substr(0, i)).toLowerCase();
1378    val = utils.trim(line.substr(i + 1));
1379
1380    if (key) {
1381      if (parsed[key] && ignoreDuplicateOf.indexOf(key) >= 0) {
1382        return;
1383      }
1384      if (key === 'set-cookie') {
1385        parsed[key] = (parsed[key] ? parsed[key] : []).concat([val]);
1386      } else {
1387        parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;
1388      }
1389    }
1390  });
1391
1392  return parsed;
1393};
1394
1395
1396/***/ }),
1397
vendor: 819 bytes, lines 1398-1435
1398/***/ "./node_modules/axios/lib/helpers/spread.js":
1399/*!**************************************************!*\
1400  !*** ./node_modules/axios/lib/helpers/spread.js ***!
1401  \**************************************************/
1402/***/ ((module) => {
1403
1404"use strict";
1405
1406
1407/**
1408 * Syntactic sugar for invoking a function and expanding an array for arguments.
1409 *
1410 * Common use case would be to use `Function.prototype.apply`.
1411 *
1412 *  ```js
1413 *  function f(x, y, z) {}
1414 *  var args = [1, 2, 3];
1415 *  f.apply(null, args);
1416 *  ```
1417 *
1418 * With `spread` this example can be re-written.
1419 *
1420 *  ```js
1421 *  spread(function(x, y, z) {})([1, 2, 3]);
1422 *  ```
1423 *
1424 * @param {Function} callback
1425 * @returns {Function}
1426 */
1427module.exports = function spread(callback) {
1428  return function wrap(arr) {
1429    return callback.apply(null, arr);
1430  };
1431};
1432
1433
1434/***/ }),
1435
vendor: 115,381 bytes, lines 1436-4008
1436/***/ "./node_modules/axios/lib/utils.js":
1437/*!*****************************************!*\
1438  !*** ./node_modules/axios/lib/utils.js ***!
1439  \*****************************************/
1440/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
1441
1442"use strict";
1443
1444
1445var bind = __webpack_require__(/*! ./helpers/bind */ "./node_modules/axios/lib/helpers/bind.js");
1446
1447/*global toString:true*/
1448
1449// utils is a library of generic helper functions non-specific to axios
1450
1451var toString = Object.prototype.toString;
1452
1453/**
1454 * Determine if a value is an Array
1455 *
1456 * @param {Object} val The value to test
1457 * @returns {boolean} True if value is an Array, otherwise false
1458 */
1459function isArray(val) {
1460  return toString.call(val) === '[object Array]';
1461}
1462
1463/**
1464 * Determine if a value is undefined
1465 *
1466 * @param {Object} val The value to test
1467 * @returns {boolean} True if the value is undefined, otherwise false
1468 */
1469function isUndefined(val) {
1470  return typeof val === 'undefined';
1471}
1472
1473/**
1474 * Determine if a value is a Buffer
1475 *
1476 * @param {Object} val The value to test
1477 * @returns {boolean} True if value is a Buffer, otherwise false
1478 */
1479function isBuffer(val) {
1480  return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor)
1481    && typeof val.constructor.isBuffer === 'function' && val.constructor.isBuffer(val);
1482}
1483
1484/**
1485 * Determine if a value is an ArrayBuffer
1486 *
1487 * @param {Object} val The value to test
1488 * @returns {boolean} True if value is an ArrayBuffer, otherwise false
1489 */
1490function isArrayBuffer(val) {
1491  return toString.call(val) === '[object ArrayBuffer]';
1492}
1493
1494/**
1495 * Determine if a value is a FormData
1496 *
1497 * @param {Object} val The value to test
1498 * @returns {boolean} True if value is an FormData, otherwise false
1499 */
1500function isFormData(val) {
1501  return (typeof FormData !== 'undefined') && (val instanceof FormData);
1502}
1503
1504/**
1505 * Determine if a value is a view on an ArrayBuffer
1506 *
1507 * @param {Object} val The value to test
1508 * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false
1509 */
1510function isArrayBufferView(val) {
1511  var result;
1512  if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {
1513    result = ArrayBuffer.isView(val);
1514  } else {
1515    result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);
1516  }
1517  return result;
1518}
1519
1520/**
1521 * Determine if a value is a String
1522 *
1523 * @param {Object} val The value to test
1524 * @returns {boolean} True if value is a String, otherwise false
1525 */
1526function isString(val) {
1527  return typeof val === 'string';
1528}
1529
1530/**
1531 * Determine if a value is a Number
1532 *
1533 * @param {Object} val The value to test
1534 * @returns {boolean} True if value is a Number, otherwise false
1535 */
1536function isNumber(val) {
1537  return typeof val === 'number';
1538}
1539
1540/**
1541 * Determine if a value is an Object
1542 *
1543 * @param {Object} val The value to test
1544 * @returns {boolean} True if value is an Object, otherwise false
1545 */
1546function isObject(val) {
1547  return val !== null && typeof val === 'object';
1548}
1549
1550/**
1551 * Determine if a value is a Date
1552 *
1553 * @param {Object} val The value to test
1554 * @returns {boolean} True if value is a Date, otherwise false
1555 */
1556function isDate(val) {
1557  return toString.call(val) === '[object Date]';
1558}
1559
1560/**
1561 * Determine if a value is a File
1562 *
1563 * @param {Object} val The value to test
1564 * @returns {boolean} True if value is a File, otherwise false
1565 */
1566function isFile(val) {
1567  return toString.call(val) === '[object File]';
1568}
1569
1570/**
1571 * Determine if a value is a Blob
1572 *
1573 * @param {Object} val The value to test
1574 * @returns {boolean} True if value is a Blob, otherwise false
1575 */
1576function isBlob(val) {
1577  return toString.call(val) === '[object Blob]';
1578}
1579
1580/**
1581 * Determine if a value is a Function
1582 *
1583 * @param {Object} val The value to test
1584 * @returns {boolean} True if value is a Function, otherwise false
1585 */
1586function isFunction(val) {
1587  return toString.call(val) === '[object Function]';
1588}
1589
1590/**
1591 * Determine if a value is a Stream
1592 *
1593 * @param {Object} val The value to test
1594 * @returns {boolean} True if value is a Stream, otherwise false
1595 */
1596function isStream(val) {
1597  return isObject(val) && isFunction(val.pipe);
1598}
1599
1600/**
1601 * Determine if a value is a URLSearchParams object
1602 *
1603 * @param {Object} val The value to test
1604 * @returns {boolean} True if value is a URLSearchParams object, otherwise false
1605 */
1606function isURLSearchParams(val) {
1607  return typeof URLSearchParams !== 'undefined' && val instanceof URLSearchParams;
1608}
1609
1610/**
1611 * Trim excess whitespace off the beginning and end of a string
1612 *
1613 * @param {String} str The String to trim
1614 * @returns {String} The String freed of excess whitespace
1615 */
1616function trim(str) {
1617  return str.replace(/^\s*/, '').replace(/\s*$/, '');
1618}
1619
1620/**
1621 * Determine if we're running in a standard browser environment
1622 *
1623 * This allows axios to run in a web worker, and react-native.
1624 * Both environments support XMLHttpRequest, but not fully standard globals.
1625 *
1626 * web workers:
1627 *  typeof window -> undefined
1628 *  typeof document -> undefined
1629 *
1630 * react-native:
1631 *  navigator.product -> 'ReactNative'
1632 * nativescript
1633 *  navigator.product -> 'NativeScript' or 'NS'
1634 */
1635function isStandardBrowserEnv() {
1636  if (typeof navigator !== 'undefined' && (navigator.product === 'ReactNative' ||
1637                                           navigator.product === 'NativeScript' ||
1638                                           navigator.product === 'NS')) {
1639    return false;
1640  }
1641  return (
1642    typeof window !== 'undefined' &&
1643    typeof document !== 'undefined'
1644  );
1645}
1646
1647/**
1648 * Iterate over an Array or an Object invoking a function for each item.
1649 *
1650 * If `obj` is an Array callback will be called passing
1651 * the value, index, and complete array for each item.
1652 *
1653 * If 'obj' is an Object callback will be called passing
1654 * the value, key, and complete object for each property.
1655 *
1656 * @param {Object|Array} obj The object to iterate
1657 * @param {Function} fn The callback to invoke for each item
1658 */
1659function forEach(obj, fn) {
1660  // Don't bother if no value provided
1661  if (obj === null || typeof obj === 'undefined') {
1662    return;
1663  }
1664
1665  // Force an array if not already something iterable
1666  if (typeof obj !== 'object') {
1667    /*eslint no-param-reassign:0*/
1668    obj = [obj];
1669  }
1670
1671  if (isArray(obj)) {
1672    // Iterate over array values
1673    for (var i = 0, l = obj.length; i < l; i++) {
1674      fn.call(null, obj[i], i, obj);
1675    }
1676  } else {
1677    // Iterate over object keys
1678    for (var key in obj) {
1679      if (Object.prototype.hasOwnProperty.call(obj, key)) {
1680        fn.call(null, obj[key], key, obj);
1681      }
1682    }
1683  }
1684}
1685
1686/**
1687 * Accepts varargs expecting each argument to be an object, then
1688 * immutably merges the properties of each object and returns result.
1689 *
1690 * When multiple objects contain the same key the later object in
1691 * the arguments list will take precedence.
1692 *
1693 * Example:
1694 *
1695 * ```js
1696 * var result = merge({foo: 123}, {foo: 456});
1697 * console.log(result.foo); // outputs 456
1698 * ```
1699 *
1700 * @param {Object} obj1 Object to merge
1701 * @returns {Object} Result of all merge properties
1702 */
1703function merge(/* obj1, obj2, obj3, ... */) {
1704  var result = {};
1705  function assignValue(val, key) {
1706    if (typeof result[key] === 'object' && typeof val === 'object') {
1707      result[key] = merge(result[key], val);
1708    } else {
1709      result[key] = val;
1710    }
1711  }
1712
1713  for (var i = 0, l = arguments.length; i < l; i++) {
1714    forEach(arguments[i], assignValue);
1715  }
1716  return result;
1717}
1718
1719/**
1720 * Function equal to merge with the difference being that no reference
1721 * to original objects is kept.
1722 *
1723 * @see merge
1724 * @param {Object} obj1 Object to merge
1725 * @returns {Object} Result of all merge properties
1726 */
1727function deepMerge(/* obj1, obj2, obj3, ... */) {
1728  var result = {};
1729  function assignValue(val, key) {
1730    if (typeof result[key] === 'object' && typeof val === 'object') {
1731      result[key] = deepMerge(result[key], val);
1732    } else if (typeof val === 'object') {
1733      result[key] = deepMerge({}, val);
1734    } else {
1735      result[key] = val;
1736    }
1737  }
1738
1739  for (var i = 0, l = arguments.length; i < l; i++) {
1740    forEach(arguments[i], assignValue);
1741  }
1742  return result;
1743}
1744
1745/**
1746 * Extends object a by mutably adding to it the properties of object b.
1747 *
1748 * @param {Object} a The object to be extended
1749 * @param {Object} b The object to copy properties from
1750 * @param {Object} thisArg The object to bind function to
1751 * @return {Object} The resulting value of object a
1752 */
1753function extend(a, b, thisArg) {
1754  forEach(b, function assignValue(val, key) {
1755    if (thisArg && typeof val === 'function') {
1756      a[key] = bind(val, thisArg);
1757    } else {
1758      a[key] = val;
1759    }
1760  });
1761  return a;
1762}
1763
1764module.exports = {
1765  isArray: isArray,
1766  isArrayBuffer: isArrayBuffer,
1767  isBuffer: isBuffer,
1768  isFormData: isFormData,
1769  isArrayBufferView: isArrayBufferView,
1770  isString: isString,
1771  isNumber: isNumber,
1772  isObject: isObject,
1773  isUndefined: isUndefined,
1774  isDate: isDate,
1775  isFile: isFile,
1776  isBlob: isBlob,
1777  isFunction: isFunction,
1778  isStream: isStream,
1779  isURLSearchParams: isURLSearchParams,
1780  isStandardBrowserEnv: isStandardBrowserEnv,
1781  forEach: forEach,
1782  merge: merge,
1783  deepMerge: deepMerge,
1784  extend: extend,
1785  trim: trim
1786};
1787
1788
1789/***/ }),
1790
1791/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/charts/RecomendationChart.vue?vue&type=script&lang=js":
1792/*!********************************************************************************************************************************************************************************************************!*\
1793  !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/charts/RecomendationChart.vue?vue&type=script&lang=js ***!
1794  \********************************************************************************************************************************************************************************************************/
1795/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
1796
1797"use strict";
1798__webpack_require__.r(__webpack_exports__);
1799/* harmony export */ __webpack_require__.d(__webpack_exports__, {
1800/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
1801/* harmony export */ });
1802/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue */ "./node_modules/vue/dist/vue.esm.js");
1803/* harmony import */ var chart_js_auto__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! chart.js/auto */ "./node_modules/chart.js/auto/auto.mjs");
1804
1805
1806/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({
1807  name: 'RecommendationBarChart',
1808  props: {
1809    fiscalYearId: {
1810      type: [Number, String],
1811      required: true
1812    },
1813    month: {
1814      type: [Number, String],
1815      required: true
1816    },
1817    recommendationTypes: {
1818      type: Array,
1819      required: true
1820    }
1821  },
1822  setup: function setup(props) {
1823    var chartInstance = (0,vue__WEBPACK_IMPORTED_MODULE_1__.ref)(null);
1824    var chartCanvas = (0,vue__WEBPACK_IMPORTED_MODULE_1__.ref)(null);
1825    var fetchDataAndRenderChart = function fetchDataAndRenderChart() {
1826      if (!props.fiscalYearId || !props.month) return;
1827      fetch("/ward-recommendations/data?fiscal_year_id=".concat(props.fiscalYearId, "&month=").concat(props.month)).then(function (res) {
1828        return res.json();
1829      }).then(function (data) {
1830        var labels = props.recommendationTypes.map(function (t) {
1831          return t.name;
1832        });
1833        var ids = props.recommendationTypes.map(function (t) {
1834          return t.id;
1835        });
1836        var totalApplications = [];
1837        var totalRecommended = [];
1838        var totalDarta = [];
1839        var totalChalani = [];
1840        ids.forEach(function (id) {
1841          var _rec$total_applicatio, _rec$total_recomended, _rec$total_darta, _rec$total_chalani;
1842          var rec = data[id] || {};
1843          totalApplications.push((_rec$total_applicatio = rec.total_application) !== null && _rec$total_applicatio !== void 0 ? _rec$total_applicatio : 0);
1844          totalRecommended.push((_rec$total_recomended = rec.total_recomended) !== null && _rec$total_recomended !== void 0 ? _rec$total_recomended : 0);
1845          totalDarta.push((_rec$total_darta = rec.total_darta) !== null && _rec$total_darta !== void 0 ? _rec$total_darta : 0);
1846          totalChalani.push((_rec$total_chalani = rec.total_chalani) !== null && _rec$total_chalani !== void 0 ? _rec$total_chalani : 0);
1847        });
1848        var chartData = {
1849          labels: labels,
1850          datasets: [{
1851            label: 'निवेदन संख्या (Applications)',
1852            data: totalApplications,
1853            backgroundColor: 'rgba(54, 162, 235, 0.7)'
1854          }, {
1855            label: 'सिफारिस संख्या (Recommended)',
1856            data: totalRecommended,
1857            backgroundColor: 'rgba(75, 192, 192, 0.7)'
1858          }, {
1859            label: 'दर्ता संख्या (Darta)',
1860            data: totalDarta,
1861            backgroundColor: 'rgba(255, 206, 86, 0.7)'
1862          }, {
1863            label: 'चलानी संख्या (Chalani)',
1864            data: totalChalani,
1865            backgroundColor: 'rgba(255, 99, 132, 0.7)'
1866          }]
1867        };
1868        var chartOptions = {
1869          responsive: true,
1870          scales: {
1871            y: {
1872              beginAtZero: true,
1873              ticks: {
1874                stepSize: 1
1875              }
1876            }
1877          },
1878          plugins: {
1879            legend: {
1880              position: 'top'
1881            },
1882            title: {
1883              display: true,
1884              text: 'वडा सिफारिस तथ्यांक (Ward Recommendation Statistics)'
1885            }
1886          }
1887        };
1888        if (chartInstance.value) {
1889          chartInstance.value.data = chartData;
1890          chartInstance.value.options = chartOptions;
1891          chartInstance.value.update();
1892        } else {
1893          chartInstance.value = new chart_js_auto__WEBPACK_IMPORTED_MODULE_0__["default"](chartCanvas.value, {
1894            type: 'bar',
1895            data: chartData,
1896            options: chartOptions
1897          });
1898        }
1899      })["catch"](function () {
1900        // Handle error or reset chart data to zeros
1901        if (chartInstance.value) {
1902          chartInstance.value.data.datasets.forEach(function (dataset) {
1903            return dataset.data.fill(0);
1904          });
1905          chartInstance.value.update();
1906        }
1907      });
1908    };
1909    (0,vue__WEBPACK_IMPORTED_MODULE_1__.watch)(function () {
1910      return [props.fiscalYearId, props.month];
1911    }, fetchDataAndRenderChart, {
1912      immediate: true
1913    });
1914    (0,vue__WEBPACK_IMPORTED_MODULE_1__.onMounted)(function () {
1915      fetchDataAndRenderChart();
1916    });
1917    return {
1918      chartCanvas: chartCanvas
1919    };
1920  }
1921});
1922
1923/***/ }),
1924
1925/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/NewsList.vue?vue&type=script&lang=js":
1926/*!**************************************************************************************************************************************************************************************************!*\
1927  !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/NewsList.vue?vue&type=script&lang=js ***!
1928  \**************************************************************************************************************************************************************************************************/
1929/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
1930
1931"use strict";
1932__webpack_require__.r(__webpack_exports__);
1933/* harmony export */ __webpack_require__.d(__webpack_exports__, {
1934/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
1935/* harmony export */ });
1936function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
1937function _regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return e; }; var t, e = {}, r = Object.prototype, n = r.hasOwnProperty, o = Object.defineProperty || function (t, e, r) { t[e] = r.value; }, i = "function" == typeof Symbol ? Symbol : {}, a = i.iterator || "@@iterator", c = i.asyncIterator || "@@asyncIterator", u = i.toStringTag || "@@toStringTag"; function define(t, e, r) { return Object.defineProperty(t, e, { value: r, enumerable: !0, configurable: !0, writable: !0 }), t[e]; } try { define({}, ""); } catch (t) { define = function define(t, e, r) { return t[e] = r; }; } function wrap(t, e, r, n) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype), c = new Context(n || []); return o(a, "_invoke", { value: makeInvokeMethod(t, r, c) }), a; } function tryCatch(t, e, r) { try { return { type: "normal", arg: t.call(e, r) }; } catch (t) { return { type: "throw", arg: t }; } } e.wrap = wrap; var h = "suspendedStart", l = "suspendedYield", f = "executing", s = "completed", y = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var p = {}; define(p, a, function () { return this; }); var d = Object.getPrototypeOf, v = d && d(d(values([]))); v && v !== r && n.call(v, a) && (p = v); var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p); function defineIteratorMethods(t) { ["next", "throw", "return"].forEach(function (e) { define(t, e, function (t) { return this._invoke(e, t); }); }); } function AsyncIterator(t, e) { function invoke(r, o, i, a) { var c = tryCatch(t[r], t, o); if ("throw" !== c.type) { var u = c.arg, h = u.value; return h && "object" == _typeof(h) && n.call(h, "__await") ? e.resolve(h.__await).then(function (t) { invoke("next", t, i, a); }, function (t) { invoke("throw", t, i, a); }) : e.resolve(h).then(function (t) { u.value = t, i(u); }, function (t) { return invoke("throw", t, i, a); }); } a(c.arg); } var r; o(this, "_invoke", { value: function value(t, n) { function callInvokeWithMethodAndArg() { return new e(function (e, r) { invoke(t, n, e, r); }); } return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(e, r, n) { var o = h; return function (i, a) { if (o === f) throw Error("Generator is already running"); if (o === s) { if ("throw" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var c = n.delegate; if (c) { var u = maybeInvokeDelegate(c, n); if (u) { if (u === y) continue; return u; } } if ("next" === n.method) n.sent = n._sent = n.arg;else if ("throw" === n.method) { if (o === h) throw o = s, n.arg; n.dispatchException(n.arg); } else "return" === n.method && n.abrupt("return", n.arg); o = f; var p = tryCatch(e, r, n); if ("normal" === p.type) { if (o = n.done ? s : l, p.arg === y) continue; return { value: p.arg, done: n.done }; } "throw" === p.type && (o = s, n.method = "throw", n.arg = p.arg); } }; } function maybeInvokeDelegate(e, r) { var n = r.method, o = e.iterator[n]; if (o === t) return r.delegate = null, "throw" === n && e.iterator["return"] && (r.method = "return", r.arg = t, maybeInvokeDelegate(e, r), "throw" === r.method) || "return" !== n && (r.method = "throw", r.arg = new TypeError("The iterator does not provide a '" + n + "' method")), y; var i = tryCatch(o, e.iterator, r.arg); if ("throw" === i.type) return r.method = "throw", r.arg = i.arg, r.delegate = null, y; var a = i.arg; return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, "return" !== r.method && (r.method = "next", r.arg = t), r.delegate = null, y) : a : (r.method = "throw", r.arg = new TypeError("iterator result is not an object"), r.delegate = null, y); } function pushTryEntry(t) { var e = { tryLoc: t[0] }; 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e); } function resetTryEntry(t) { var e = t.completion || {}; e.type = "normal", delete e.arg, t.completion = e; } function Context(t) { this.tryEntries = [{ tryLoc: "root" }], t.forEach(pushTryEntry, this), this.reset(!0); } function values(e) { if (e || "" === e) { var r = e[a]; if (r) return r.call(e); if ("function" == typeof e.next) return e; if (!isNaN(e.length)) { var o = -1, i = function next() { for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next; return next.value = t, next.done = !0, next; }; return i.next = i; } } throw new TypeError(_typeof(e) + " is not iterable"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, "constructor", { value: GeneratorFunctionPrototype, configurable: !0 }), o(GeneratorFunctionPrototype, "constructor", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, "GeneratorFunction"), e.isGeneratorFunction = function (t) { var e = "function" == typeof t && t.constructor; return !!e && (e === GeneratorFunction || "GeneratorFunction" === (e.displayName || e.name)); }, e.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, "GeneratorFunction")), t.prototype = Object.create(g), t; }, e.awrap = function (t) { return { __await: t }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () { return this; }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(wrap(t, r, n, o), i); return e.isGeneratorFunction(r) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, defineIteratorMethods(g), define(g, u, "Generator"), define(g, a, function () { return this; }), define(g, "toString", function () { return "[object Generator]"; }), e.keys = function (t) { var e = Object(t), r = []; for (var n in e) r.push(n); return r.reverse(), function next() { for (; r.length;) { var t = r.pop(); if (t in e) return next.value = t, next.done = !1, next; } return next.done = !0, next; }; }, e.values = values, Context.prototype = { constructor: Context, reset: function reset(e) { if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = "next", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) "t" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0].completion; if ("throw" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(e) { if (this.done) throw e; var r = this; function handle(n, o) { return a.type = "throw", a.arg = e, r.next = n, o && (r.method = "next", r.arg = t), !!o; } for (var o = this.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i.completion; if ("root" === i.tryLoc) return handle("end"); if (i.tryLoc <= this.prev) { var c = n.call(i, "catchLoc"), u = n.call(i, "finallyLoc"); if (c && u) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } else if (c) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); } else { if (!u) throw Error("try statement without catch or finally"); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } } } }, abrupt: function abrupt(t, e) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var o = this.tryEntries[r]; if (o.tryLoc <= this.prev && n.call(o, "finallyLoc") && this.prev < o.finallyLoc) { var i = o; break; } } i && ("break" === t || "continue" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null); var a = i ? i.completion : {}; return a.type = t, a.arg = e, i ? (this.method = "next", this.next = i.finallyLoc, y) : this.complete(a); }, complete: function complete(t, e) { if ("throw" === t.type) throw t.arg; return "break" === t.type || "continue" === t.type ? this.next = t.arg : "return" === t.type ? (this.rval = this.arg = t.arg, this.method = "return", this.next = "end") : "normal" === t.type && e && (this.next = e), y; }, finish: function finish(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y; } }, "catch": function _catch(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.tryLoc === t) { var n = r.completion; if ("throw" === n.type) { var o = n.arg; resetTryEntry(r); } return o; } } throw Error("illegal catch attempt"); }, delegateYield: function delegateYield(e, r, n) { return this.delegate = { iterator: values(e), resultName: r, nextLoc: n }, "next" === this.method && (this.arg = t), y; } }, e; }
1938function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }
1939function _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }
1940/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({
1941  props: {
1942    baseUrl: {
1943      type: String,
1944      required: true
1945    }
1946  },
1947  data: function data() {
1948    return {
1949      postCategories: [],
1950      selectedCategoryId: "all",
1951      // ✅ IMPORTANT
1952      posts: []
1953    };
1954  },
1955  mounted: function mounted() {
1956    this.fetchCategories();
1957    this.fetchPosts(); // load ALL immediately
1958  },
1959  methods: {
1960    // Get categories
1961    fetchCategories: function fetchCategories() {
1962      var _this = this;
1963      return _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
1964        var res;
1965        return _regeneratorRuntime().wrap(function _callee$(_context) {
1966          while (1) switch (_context.prev = _context.next) {
1967            case 0:
1968              _context.prev = 0;
1969              _context.next = 3;
1970              return fetch("".concat(_this.baseUrl));
1971            case 3:
1972              res = _context.sent;
1973              _context.next = 6;
1974              return res.json();
1975            case 6:
1976              _this.postCategories = _context.sent;
1977              _context.next = 12;
1978              break;
1979            case 9:
1980              _context.prev = 9;
1981              _context.t0 = _context["catch"](0);
1982              console.error(_context.t0);
1983            case 12:
1984            case "end":
1985              return _context.stop();
1986          }
1987        }, _callee, null, [[0, 9]]);
1988      }))();
1989    },
1990    // Get posts (ALL or category)
1991    fetchPosts: function fetchPosts() {
1992      var _this2 = this;
1993      return _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee2() {
1994        var url, res;
1995        return _regeneratorRuntime().wrap(function _callee2$(_context2) {
1996          while (1) switch (_context2.prev = _context2.next) {
1997            case 0:
1998              _context2.prev = 0;
1999              url = "api/posts?limit=5";
2000              if (_this2.selectedCategoryId !== "all") {
2001                url += "&post_category_id=".concat(_this2.selectedCategoryId);
2002              }
2003              _context2.next = 5;
2004              return fetch(url);
2005            case 5:
2006              res = _context2.sent;
2007              _context2.next = 8;
2008              return res.json();
2009            case 8:
2010              _this2.posts = _context2.sent;
2011              _context2.next = 14;
2012              break;
2013            case 11:
2014              _context2.prev = 11;
2015              _context2.t0 = _context2["catch"](0);
2016              console.error(_context2.t0);
2017            case 14:
2018            case "end":
2019              return _context2.stop();
2020          }
2021        }, _callee2, null, [[0, 11]]);
2022      }))();
2023    },
2024    // Select category
2025    selectCategory: function selectCategory(id) {
2026      this.selectedCategoryId = id;
2027      this.fetchPosts();
2028    },
2029    // Date format
2030    formatDate: function formatDate(dateStr) {
2031      return new Date(dateStr).toLocaleDateString("ne-NP");
2032    }
2033  }
2034});
2035
2036/***/ }),
2037
2038/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/QrCode.vue?vue&type=script&lang=js":
2039/*!************************************************************************************************************************************************************************************************!*\
2040  !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/QrCode.vue?vue&type=script&lang=js ***!
2041  \************************************************************************************************************************************************************************************************/
2042/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
2043
2044"use strict";
2045__webpack_require__.r(__webpack_exports__);
2046/* harmony export */ __webpack_require__.d(__webpack_exports__, {
2047/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
2048/* harmony export */ });
2049/* harmony import */ var qrcode_vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! qrcode.vue */ "./node_modules/qrcode.vue/dist/qrcode.vue.esm.js");
2050
2051/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({
2052  components: {
2053    QrcodeVue: qrcode_vue__WEBPACK_IMPORTED_MODULE_0__["default"]
2054  },
2055  props: {
2056    value: {
2057      type: String,
2058      required: true
2059    },
2060    size: {
2061      type: Number,
2062      "default": 200
2063    }
2064  }
2065});
2066
2067/***/ }),
2068
2069/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/RegisterSuchiModal.vue?vue&type=script&lang=js":
2070/*!************************************************************************************************************************************************************************************************************!*\
2071  !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/RegisterSuchiModal.vue?vue&type=script&lang=js ***!
2072  \************************************************************************************************************************************************************************************************************/
2073/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
2074
2075"use strict";
2076__webpack_require__.r(__webpack_exports__);
2077/* harmony export */ __webpack_require__.d(__webpack_exports__, {
2078/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
2079/* harmony export */ });
2080/* harmony import */ var form_backend_validation__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! form-backend-validation */ "./node_modules/form-backend-validation/dist/index.js");
2081
2082/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({
2083  props: {
2084    suchi: {
2085      required: true
2086    }
2087  },
2088  data: function data() {
2089    return {
2090      form: new form_backend_validation__WEBPACK_IMPORTED_MODULE_0__["default"]({
2091        _method: "patch",
2092        receipt_no: "",
2093        receipt_amount: ""
2094      }, {
2095        resetOnSuccess: false
2096      })
2097    };
2098  },
2099  methods: {
2100    submit: function submit() {
2101      var _this = this;
2102      this.form.patch("/suchi/".concat(this.suchi.hash_id, "/register")).then(function (response) {
2103        _this.$swal(response.message).then(function () {
2104          window.location.reload();
2105        });
2106      })["catch"](function (error) {
2107        return console.log(error);
2108      });
2109    }
2110  }
2111});
2112
2113/***/ }),
2114
2115/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/RegisteredSuchiList.vue?vue&type=script&lang=js":
2116/*!*************************************************************************************************************************************************************************************************************!*\
2117  !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/RegisteredSuchiList.vue?vue&type=script&lang=js ***!
2118  \*************************************************************************************************************************************************************************************************************/
2119/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
2120
2121"use strict";
2122__webpack_require__.r(__webpack_exports__);
2123/* harmony export */ __webpack_require__.d(__webpack_exports__, {
2124/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
2125/* harmony export */ });
2126/* harmony import */ var _SuchiListView_vue__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./SuchiListView.vue */ "./resources/js/components/SuchiListView.vue");
2127
2128/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({
2129  components: {
2130    SuchiListView: _SuchiListView_vue__WEBPACK_IMPORTED_MODULE_0__["default"]
2131  },
2132  data: function data() {
2133    return {
2134      suchis: []
2135    };
2136  },
2137  mounted: function mounted() {
2138    this.loadSuchis();
2139  },
2140  methods: {
2141    loadSuchis: function loadSuchis() {
2142      var _this = this;
2143      axios.get("/api/suchi").then(function (response) {
2144        _this.suchis = response.data;
2145      })["catch"](function (error) {
2146        return console.log(error);
2147      });
2148    }
2149  }
2150});
2151
2152/***/ }),
2153
2154/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/SuchiForm.vue?vue&type=script&lang=js":
2155/*!***************************************************************************************************************************************************************************************************!*\
2156  !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/SuchiForm.vue?vue&type=script&lang=js ***!
2157  \***************************************************************************************************************************************************************************************************/
2158/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
2159
2160"use strict";
2161__webpack_require__.r(__webpack_exports__);
2162/* harmony export */ __webpack_require__.d(__webpack_exports__, {
2163/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
2164/* harmony export */ });
2165/* harmony import */ var form_backend_validation__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! form-backend-validation */ "./node_modules/form-backend-validation/dist/index.js");
2166/* harmony import */ var vue2_quill_editor__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue2-quill-editor */ "./node_modules/vue2-quill-editor/dist/index.js");
2167/* harmony import */ var vue2_quill_editor__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(vue2_quill_editor__WEBPACK_IMPORTED_MODULE_1__);
2168
2169
2170/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({
2171  components: {
2172    VueEditor: vue2_quill_editor__WEBPACK_IMPORTED_MODULE_1__.VueEditor
2173  },
2174  props: {
2175    suchi: {
2176      "default": function _default() {
2177        return {};
2178      }
2179    },
2180    suchiTypes: {
2181      "default": function _default() {},
2182      type: Array
2183    },
2184    guestMode: {
2185      type: Boolean,
2186      "default": true
2187    }
2188  },
2189  data: function data() {
2190    return {
2191      updateMode: false,
2192      form: new form_backend_validation__WEBPACK_IMPORTED_MODULE_0__["default"]({
2193        reg_date: "",
2194        name: "",
2195        address: "",
2196        contact_person: "",
2197        contact: "",
2198        email: "",
2199        mobile: "",
2200        suchi_type_id: "",
2201        product_type: "",
2202        receipt_no: "",
2203        receipt_amount: "",
2204        reg_cert: "",
2205        renew_cert: "",
2206        pan_cert: "",
2207        tax_cert: "",
2208        license_cert: "",
2209        receipt: ""
2210      }, {
2211        resetOnSuccess: false
2212      })
2213    };
2214  },
2215  mounted: function mounted() {
2216    this.form.reg_date = this.suchi.reg_date;
2217    if (this.suchi.id) {
2218      this.updateMode = true;
2219      // this.form.reg_no = this.suchi.reg_no;
2220      this.form.name = this.suchi.name;
2221      this.form.address = this.suchi.address;
2222      this.form.contact_person = this.suchi.contact_person;
2223      this.form.contact = this.suchi.contact;
2224      this.form.email = this.suchi.email;
2225      this.form.mobile = this.suchi.mobile;
2226      this.form.suchi_type_id = this.suchi.suchi_type_id;
2227      this.form.product_type = this.suchi.product_type;
2228      this.form.receipt_no = this.suchi.receipt_no;
2229      this.form.receipt_amount = this.suchi.receipt_amount;
2230    }
2231  },
2232  methods: {
2233    submit: function submit() {
2234      this.updateMode ? this.update() : this.create();
2235    },
2236    create: function create() {
2237      var _this = this;
2238      this.form.post("/suchi").then(function (response) {
2239        if (_this.guestMode) {
2240          window.location.href = "/application-submitted/".concat(response.hash_id);
2241        } else {
2242          _this.$swal(response.message).then(function () {
2243            return window.location.href = "/suchi/".concat(response.hash_id);
2244          });
2245        }
2246      });
2247    },
2248    update: function update() {
2249      var _this2 = this;
2250      this.form.post("/suchi/".concat(this.suchi.hash_id, "/update")).then(function (response) {
2251        _this2.$swal(response.message).then(function () {
2252          return window.location.href = "/suchi/".concat(_this2.suchi.hash_id);
2253        });
2254      });
2255    },
2256    handleFileUpload: function handleFileUpload(event, field) {
2257      this.form[field] = event.target.files[0];
2258    }
2259  }
2260});
2261
2262/***/ }),
2263
2264/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/SuchiListView.vue?vue&type=script&lang=js":
2265/*!*******************************************************************************************************************************************************************************************************!*\
2266  !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/SuchiListView.vue?vue&type=script&lang=js ***!
2267  \*******************************************************************************************************************************************************************************************************/
2268/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
2269
2270"use strict";
2271__webpack_require__.r(__webpack_exports__);
2272/* harmony export */ __webpack_require__.d(__webpack_exports__, {
2273/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
2274/* harmony export */ });
2275/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({
2276  props: {
2277    suchis: {
2278      type: Object,
2279      required: true
2280    },
2281    type: {
2282      type: String,
2283      required: false,
2284      "default": "registered"
2285    }
2286  },
2287  data: function data() {
2288    return {};
2289  }
2290});
2291
2292/***/ }),
2293
2294/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/TokenSearch.vue?vue&type=script&lang=js":
2295/*!*****************************************************************************************************************************************************************************************************!*\
2296  !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/TokenSearch.vue?vue&type=script&lang=js ***!
2297  \*****************************************************************************************************************************************************************************************************/
2298/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
2299
2300"use strict";
2301__webpack_require__.r(__webpack_exports__);
2302/* harmony export */ __webpack_require__.d(__webpack_exports__, {
2303/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
2304/* harmony export */ });
2305/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({
2306  data: function data() {
2307    return {
2308      tokenNumber: "",
2309      suchi: null
2310    };
2311  },
2312  methods: {
2313    search: function search() {
2314      var _this = this;
2315      axios.get("/api/suchi-by-token/".concat(this.tokenNumber)).then(function (response) {
2316        console.table(response.data.data);
2317        _this.suchi = response.data.data;
2318      })["catch"](function (error) {
2319        return console.log(error);
2320      });
2321    },
2322    clearSearch: function clearSearch() {
2323      this.tokenNumber = "";
2324      this.suchi = null;
2325    }
2326  }
2327});
2328
2329/***/ }),
2330
2331/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/gallery/Albums.vue?vue&type=script&lang=js":
2332/*!*********************************************************************************************************************************************************************************************!*\
2333  !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/gallery/Albums.vue?vue&type=script&lang=js ***!
2334  \*********************************************************************************************************************************************************************************************/
2335/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
2336
2337"use strict";
2338__webpack_require__.r(__webpack_exports__);
2339/* harmony export */ __webpack_require__.d(__webpack_exports__, {
2340/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
2341/* harmony export */ });
2342/* harmony import */ var axios__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! axios */ "./node_modules/axios/index.js");
2343/* harmony import */ var axios__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(axios__WEBPACK_IMPORTED_MODULE_0__);
2344/* harmony import */ var _components_Spinner_vue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../components/Spinner.vue */ "./resources/js/components/Spinner.vue");
2345
2346
2347/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({
2348  components: {
2349    Spinner: _components_Spinner_vue__WEBPACK_IMPORTED_MODULE_1__["default"]
2350  },
2351  data: function data() {
2352    return {
2353      albums: [],
2354      loading: false
2355    };
2356  },
2357  mounted: function mounted() {
2358    this.fetchAlbums();
2359  },
2360  methods: {
2361    fetchAlbums: function fetchAlbums() {
2362      var _this = this;
2363      this.loading = true;
2364      axios__WEBPACK_IMPORTED_MODULE_0___default().get("/backend/albums/getAlbums").then(function (response) {
2365        _this.albums = response.data.data;
2366        _this.loading = false;
2367      })["catch"](function (error) {
2368        return console.log(error);
2369      });
2370    },
2371    handleDelete: function handleDelete(album) {
2372      var _this2 = this;
2373      Vue.swal({
2374        title: 'Delete Album',
2375        html: "Are you sure you want to delete:  <strong>".concat(album.name, "</strong>. It will also delete all photos within it.?"),
2376        icon: 'question',
2377        showCancelButton: true,
2378        confirmButtonColor: '#3085d6',
2379        cancelButtonColor: '#d33',
2380        confirmButtonText: 'Yes, delete it!'
2381      }).then(function (result) {
2382        if (result.isConfirmed) {
2383          axios__WEBPACK_IMPORTED_MODULE_0___default()["delete"]("/backend/albums/".concat(album.id)).then(function (response) {
2384            var index = _this2.albums.indexOf(album);
2385            _this2.albums.splice(index, 1);
2386          }).error(function (error) {
2387            return console.log(error);
2388          });
2389        }
2390      });
2391    }
2392  }
2393});
2394
2395/***/ }),
2396
2397/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/gallery/FrontendAlbums.vue?vue&type=script&lang=js":
2398/*!*****************************************************************************************************************************************************************************************************!*\
2399  !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/gallery/FrontendAlbums.vue?vue&type=script&lang=js ***!
2400  \*****************************************************************************************************************************************************************************************************/
2401/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
2402
2403"use strict";
2404__webpack_require__.r(__webpack_exports__);
2405/* harmony export */ __webpack_require__.d(__webpack_exports__, {
2406/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
2407/* harmony export */ });
2408/* harmony import */ var axios__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! axios */ "./node_modules/axios/index.js");
2409/* harmony import */ var axios__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(axios__WEBPACK_IMPORTED_MODULE_0__);
2410/* harmony import */ var _components_Spinner_vue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../components/Spinner.vue */ "./resources/js/components/Spinner.vue");
2411
2412
2413/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({
2414  components: {
2415    Spinner: _components_Spinner_vue__WEBPACK_IMPORTED_MODULE_1__["default"]
2416  },
2417  data: function data() {
2418    return {
2419      albums: [],
2420      loading: false
2421    };
2422  },
2423  mounted: function mounted() {
2424    this.fetchAlbums();
2425  },
2426  methods: {
2427    fetchAlbums: function fetchAlbums() {
2428      var _this = this;
2429      this.loading = true;
2430      axios__WEBPACK_IMPORTED_MODULE_0___default().get("/gallery/getAlbums").then(function (response) {
2431        _this.albums = response.data.data;
2432        _this.loading = false;
2433      })["catch"](function (error) {
2434        return console.log(error);
2435      });
2436    }
2437  }
2438});
2439
2440/***/ }),
2441
2442/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/gallery/Uploader.vue?vue&type=script&lang=js":
2443/*!***********************************************************************************************************************************************************************************************!*\
2444  !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/gallery/Uploader.vue?vue&type=script&lang=js ***!
2445  \***********************************************************************************************************************************************************************************************/
2446/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
2447
2448"use strict";
2449__webpack_require__.r(__webpack_exports__);
2450/* harmony export */ __webpack_require__.d(__webpack_exports__, {
2451/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
2452/* harmony export */ });
2453/* harmony import */ var axios__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! axios */ "./node_modules/axios/index.js");
2454/* harmony import */ var axios__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(axios__WEBPACK_IMPORTED_MODULE_0__);
2455/* harmony import */ var vue2_dropzone__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue2-dropzone */ "./node_modules/vue2-dropzone/dist/vue2Dropzone.js");
2456/* harmony import */ var vue2_dropzone__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(vue2_dropzone__WEBPACK_IMPORTED_MODULE_1__);
2457/* harmony import */ var vue2_dropzone_dist_vue2Dropzone_min_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! vue2-dropzone/dist/vue2Dropzone.min.css */ "./node_modules/vue2-dropzone/dist/vue2Dropzone.min.css");
2458
2459
2460
2461/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({
2462  components: {
2463    vueDropzone: (vue2_dropzone__WEBPACK_IMPORTED_MODULE_1___default())
2464  },
2465  props: {
2466    album: {
2467      "default": function _default() {
2468        return {};
2469      }
2470    }
2471  },
2472  data: function data() {
2473    return {
2474      dropzoneOptions: {
2475        url: "/backend/album/".concat(this.album.id, "/photos"),
2476        thumbnailWidth: 150,
2477        maxFilesize: 2,
2478        headers: {
2479          "X-CSRF-TOKEN": document.querySelector('meta[name="csrf-token"]').getAttribute('content')
2480        },
2481        acceptedFiles: 'image/*'
2482      },
2483      photos: [],
2484      selectedPhoto: null
2485    };
2486  },
2487  mounted: function mounted() {
2488    this.fetchPhotos();
2489  },
2490  methods: {
2491    fetchPhotos: function fetchPhotos() {
2492      var _this = this;
2493      console.log('fetching photos');
2494      axios__WEBPACK_IMPORTED_MODULE_0___default().get("/backend/album/".concat(this.album.id, "/getPhotos")).then(function (response) {
2495        console.log(response.data);
2496        _this.photos = response.data.data;
2497      })["catch"](function (error) {
2498        return console.log(error);
2499      });
2500    },
2501    handleFileUploaded: function handleFileUploaded(file, response) {
2502      this.photos.unshift(response);
2503      this.$refs.myVueDropzone.removeFile(file);
2504    },
2505    handlePhotSelected: function handlePhotSelected(id) {
2506      var _this$selectedPhoto;
2507      if (((_this$selectedPhoto = this.selectedPhoto) === null || _this$selectedPhoto === void 0 ? void 0 : _this$selectedPhoto.id) == id) {
2508        this.selectedPhoto = null;
2509      } else {
2510        this.selectedPhoto = this.photos.find(function (photo) {
2511          return photo.id == id;
2512        });
2513      }
2514    },
2515    handleDelete: function handleDelete() {
2516      var _this2 = this;
2517      Vue.swal({
2518        title: 'Delete Photo',
2519        html: "Are you sure you want to delete: <strong>".concat(this.selectedPhoto.name, "</strong>?"),
2520        icon: 'question',
2521        showCancelButton: true,
2522        confirmButtonColor: '#3085d6',
2523        cancelButtonColor: '#d33',
2524        confirmButtonText: 'Yes, delete it!'
2525      }).then(function (result) {
2526        if (result.isConfirmed) {
2527          axios__WEBPACK_IMPORTED_MODULE_0___default()["delete"]("/backend/photos/".concat(_this2.selectedPhoto.id)).then(function (response) {
2528            var index = _this2.photos.indexOf(_this2.selectedPhoto);
2529            _this2.photos.splice(index, 1);
2530            _this2.selectedPhoto = null;
2531          }).error(function (error) {
2532            return console.log(error);
2533          });
2534        }
2535      });
2536    }
2537  }
2538});
2539
2540/***/ }),
2541
2542/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/gallery/ViewAlbum.vue?vue&type=script&lang=js":
2543/*!************************************************************************************************************************************************************************************************!*\
2544  !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/gallery/ViewAlbum.vue?vue&type=script&lang=js ***!
2545  \************************************************************************************************************************************************************************************************/
2546/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
2547
2548"use strict";
2549__webpack_require__.r(__webpack_exports__);
2550/* harmony export */ __webpack_require__.d(__webpack_exports__, {
2551/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
2552/* harmony export */ });
2553/* harmony import */ var axios__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! axios */ "./node_modules/axios/index.js");
2554/* harmony import */ var axios__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(axios__WEBPACK_IMPORTED_MODULE_0__);
2555/* harmony import */ var vue_cool_lightbox__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-cool-lightbox */ "./node_modules/vue-cool-lightbox/dist/vue-cool-lightbox.esm.js");
2556/* harmony import */ var vue_cool_lightbox_dist_vue_cool_lightbox_min_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! vue-cool-lightbox/dist/vue-cool-lightbox.min.css */ "./node_modules/vue-cool-lightbox/dist/vue-cool-lightbox.min.css");
2557
2558
2559
2560/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({
2561  components: {
2562    CoolLightBox: vue_cool_lightbox__WEBPACK_IMPORTED_MODULE_1__["default"]
2563  },
2564  props: {
2565    album: {
2566      "default": function _default() {
2567        return {};
2568      }
2569    }
2570  },
2571  data: function data() {
2572    return {
2573      photos: [],
2574      selectedPhoto: null,
2575      index: null
2576    };
2577  },
2578  mounted: function mounted() {
2579    this.fetchPhotos();
2580  },
2581  methods: {
2582    fetchPhotos: function fetchPhotos() {
2583      var _this = this;
2584      console.log("fetching photos");
2585      axios__WEBPACK_IMPORTED_MODULE_0___default().get("/gallery/".concat(this.album.id, "/getPhotos")).then(function (response) {
2586        console.log(response.data);
2587        var data = response.data.data.map(function (photo) {
2588          return {
2589            id: photo.id,
2590            title: photo.name,
2591            descirption: null,
2592            src: photo.url
2593          };
2594        });
2595        _this.photos = data;
2596      })["catch"](function (error) {
2597        return console.log(error);
2598      });
2599    },
2600    handlePhotoClick: function handlePhotoClick(index) {
2601      this.index = index;
2602    } // handlePhotSelected(id) {
2603    //   if (this.selectedPhoto?.id == id) {
2604    //     this.selectedPhoto = null
2605    //   } else {
2606    //     this.selectedPhoto = this.photos.find((photo) => photo.id == id)
2607    //   }
2608    // },
2609  }
2610});
2611
2612/***/ }),
2613
2614/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/video/VideoGallery.vue?vue&type=script&lang=js":
2615/*!*************************************************************************************************************************************************************************************************!*\
2616  !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/video/VideoGallery.vue?vue&type=script&lang=js ***!
2617  \*************************************************************************************************************************************************************************************************/
2618/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
2619
2620"use strict";
2621__webpack_require__.r(__webpack_exports__);
2622/* harmony export */ __webpack_require__.d(__webpack_exports__, {
2623/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
2624/* harmony export */ });
2625/* harmony import */ var vue_youtube__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! vue-youtube */ "./node_modules/vue-youtube/dist/vue-youtube.js");
2626/* harmony import */ var vue_youtube__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(vue_youtube__WEBPACK_IMPORTED_MODULE_0__);
2627
2628/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({
2629  components: {
2630    VueYoutube: (vue_youtube__WEBPACK_IMPORTED_MODULE_0___default())
2631  },
2632  props: {
2633    videos: {
2634      "default": function _default() {
2635        return {};
2636      }
2637    }
2638  },
2639  data: function data() {
2640    return {
2641      playerVars: {
2642        autoplay: false
2643      }
2644    };
2645  },
2646  methods: {
2647    playing: function playing() {
2648      console.log('\o/ we are watching!!!');
2649    }
2650  }
2651});
2652
2653/***/ }),
2654
2655/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/charts/RecomendationChart.vue?vue&type=template&id=f2b1363c":
2656/*!*******************************************************************************************************************************************************************************************************************************************************************************************!*\
2657  !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/charts/RecomendationChart.vue?vue&type=template&id=f2b1363c ***!
2658  \*******************************************************************************************************************************************************************************************************************************************************************************************/
2659/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
2660
2661"use strict";
2662__webpack_require__.r(__webpack_exports__);
2663/* harmony export */ __webpack_require__.d(__webpack_exports__, {
2664/* harmony export */   render: () => (/* binding */ render),
2665/* harmony export */   staticRenderFns: () => (/* binding */ staticRenderFns)
2666/* harmony export */ });
2667var render = function render() {
2668  var _vm = this,
2669    _c = _vm._self._c;
2670  return _c("div", [_c("canvas", {
2671    ref: "chartCanvas",
2672    attrs: {
2673      height: "150"
2674    }
2675  })]);
2676};
2677var staticRenderFns = [];
2678render._withStripped = true;
2679
2680
2681/***/ }),
2682
2683/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/NewsList.vue?vue&type=template&id=b8a09a08&scoped=true":
2684/*!*************************************************************************************************************************************************************************************************************************************************************************************************!*\
2685  !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/NewsList.vue?vue&type=template&id=b8a09a08&scoped=true ***!
2686  \*************************************************************************************************************************************************************************************************************************************************************************************************/
2687/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
2688
2689"use strict";
2690__webpack_require__.r(__webpack_exports__);
2691/* harmony export */ __webpack_require__.d(__webpack_exports__, {
2692/* harmony export */   render: () => (/* binding */ render),
2693/* harmony export */   staticRenderFns: () => (/* binding */ staticRenderFns)
2694/* harmony export */ });
2695var render = function render() {
2696  var _vm = this,
2697    _c = _vm._self._c;
2698  return _c("div", [_c("div", {
2699    staticClass: "categories"
2700  }, [_c("button", {
2701    staticClass: "category-button",
2702    "class": {
2703      selected: _vm.selectedCategoryId == "all"
2704    },
2705    on: {
2706      click: function click($event) {
2707        return _vm.selectCategory("all");
2708      }
2709    }
2710  }, [_vm._v("\n            सबै\n        ")]), _vm._v(" "), _vm._l(_vm.postCategories, function (category) {
2711    return _c("button", {
2712      key: category.id,
2713      "class": ["category-button", _vm.selectedCategoryId === category.id ? "selected" : ""],
2714      on: {
2715        click: function click($event) {
2716          return _vm.selectCategory(category.id);
2717        }
2718      }
2719    }, [_vm._v("\n            " + _vm._s(category.name) + "\n        ")]);
2720  })], 2), _vm._v(" "), _c("ul", {
2721    staticClass: "posts-list"
2722  }, [_vm._l(_vm.posts, function (post) {
2723    return _c("li", {
2724      key: post.id,
2725      staticClass: "post-item"
2726    }, [_c("a", {
2727      staticClass: "post-header",
2728      attrs: {
2729        href: "/posts/".concat(post.slug)
2730      }
2731    }, [_c("div", {
2732      staticClass: "post-details"
2733    }, [_c("div", {
2734      staticClass: "post-title"
2735    }, [_vm._v("\n                        " + _vm._s(post.title) + "\n                    ")]), _vm._v(" "), _c("div", {
2736      staticClass: "post-date"
2737    }, [_vm._v("\n                        " + _vm._s(_vm.formatDate(post.created_at)) + "\n                    ")])]), _vm._v(" "), _vm._m(0, true)])]);
2738  }), _vm._v(" "), _vm.posts.length === 0 ? _c("li", {
2739    staticClass: "no-posts"
2740  }, [_vm._v("\n            कुनैपनि सूचना छैन !!!\n        ")]) : _vm._e()], 2), _vm._v(" "), _c("div", {
2741    staticClass: "d-flex justify-content-end mt-2"
2742  }, [_vm.selectedCategoryId !== "all" ? _c("a", {
2743    staticClass: "read-more",
2744    attrs: {
2745      href: "post-categories/".concat(_vm.selectedCategoryId)
2746    }
2747  }, [_vm._v("\n            सबै "), _c("i", {
2748    staticClass: "bi bi-chevron-double-right"
2749  })]) : _vm._e()])]);
2750};
2751var staticRenderFns = [function () {
2752  var _vm = this,
2753    _c = _vm._self._c;
2754  return _c("div", {
2755    staticClass: "read-more"
2756  }, [_vm._v("\n                    पढ्नुहोस् "), _c("i", {
2757    staticClass: "bi bi-chevron-double-right"
2758  })]);
2759}];
2760render._withStripped = true;
2761
2762
2763/***/ }),
2764
2765/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/QrCode.vue?vue&type=template&id=25825ed9":
2766/*!***********************************************************************************************************************************************************************************************************************************************************************************!*\
2767  !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/QrCode.vue?vue&type=template&id=25825ed9 ***!
2768  \***********************************************************************************************************************************************************************************************************************************************************************************/
2769/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
2770
2771"use strict";
2772__webpack_require__.r(__webpack_exports__);
2773/* harmony export */ __webpack_require__.d(__webpack_exports__, {
2774/* harmony export */   render: () => (/* binding */ render),
2775/* harmony export */   staticRenderFns: () => (/* binding */ staticRenderFns)
2776/* harmony export */ });
2777var render = function render() {
2778  var _vm = this,
2779    _c = _vm._self._c;
2780  return _c("div", [_c("qrcode-vue", {
2781    attrs: {
2782      value: _vm.value,
2783      size: _vm.size,
2784      level: "Q"
2785    }
2786  })], 1);
2787};
2788var staticRenderFns = [];
2789render._withStripped = true;
2790
2791
2792/***/ }),
2793
2794/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/RegisterSuchiModal.vue?vue&type=template&id=91deeb0e":
2795/*!***********************************************************************************************************************************************************************************************************************************************************************************************!*\
2796  !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/RegisterSuchiModal.vue?vue&type=template&id=91deeb0e ***!
2797  \***********************************************************************************************************************************************************************************************************************************************************************************************/
2798/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
2799
2800"use strict";
2801__webpack_require__.r(__webpack_exports__);
2802/* harmony export */ __webpack_require__.d(__webpack_exports__, {
2803/* harmony export */   render: () => (/* binding */ render),
2804/* harmony export */   staticRenderFns: () => (/* binding */ staticRenderFns)
2805/* harmony export */ });
2806var render = function render() {
2807  var _vm = this,
2808    _c = _vm._self._c;
2809  return _c("div", [_c("form", {
2810    on: {
2811      submit: function submit($event) {
2812        $event.preventDefault();
2813        return _vm.submit.apply(null, arguments);
2814      }
2815    }
2816  }, [_c("div", {
2817    staticClass: "form-group"
2818  }, [_c("input", {
2819    directives: [{
2820      name: "model",
2821      rawName: "v-model",
2822      value: _vm.form.receipt_no,
2823      expression: "form.receipt_no"
2824    }],
2825    staticClass: "form-control",
2826    attrs: {
2827      type: "text",
2828      placeholder: "रसिद नम्बर"
2829    },
2830    domProps: {
2831      value: _vm.form.receipt_no
2832    },
2833    on: {
2834      input: function input($event) {
2835        if ($event.target.composing) return;
2836        _vm.$set(_vm.form, "receipt_no", $event.target.value);
2837      }
2838    }
2839  }), _vm._v(" "), _c("small", {
2840    staticClass: "text-danger"
2841  }, [_vm._v(_vm._s(_vm.form.errors.first("receipt_no")))])]), _vm._v(" "), _c("div", {
2842    staticClass: "form-group"
2843  }, [_c("input", {
2844    directives: [{
2845      name: "model",
2846      rawName: "v-model",
2847      value: _vm.form.receipt_amount,
2848      expression: "form.receipt_amount"
2849    }],
2850    staticClass: "form-control",
2851    attrs: {
2852      type: "text",
2853      placeholder: "रकम"
2854    },
2855    domProps: {
2856      value: _vm.form.receipt_amount
2857    },
2858    on: {
2859      input: function input($event) {
2860        if ($event.target.composing) return;
2861        _vm.$set(_vm.form, "receipt_amount", $event.target.value);
2862      }
2863    }
2864  }), _vm._v(" "), _c("small", {
2865    staticClass: "text-danger"
2866  }, [_vm._v(_vm._s(_vm.form.errors.first("receipt_amount")))])]), _vm._v(" "), _c("div", {
2867    staticClass: "text-right"
2868  }, [_c("button", {
2869    staticClass: "btn btn-primary z-depth-0 ml-0 px-5 d-inline-flex align-items-center",
2870    attrs: {
2871      disabled: _vm.form.processing
2872    }
2873  }, [_c("span", {
2874    directives: [{
2875      name: "show",
2876      rawName: "v-show",
2877      value: _vm.form.processing,
2878      expression: "form.processing"
2879    }],
2880    staticClass: "spinner-border spinner-border-sm mr-2",
2881    attrs: {
2882      role: "status",
2883      "aria-hidden": "true"
2884    }
2885  }), _vm._v(" "), _c("span", [_vm._v("दर्ता गर्नुहोस्")])])])])]);
2886};
2887var staticRenderFns = [];
2888render._withStripped = true;
2889
2890
2891/***/ }),
2892
2893/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/RegisteredSuchiList.vue?vue&type=template&id=81db757a":
2894/*!************************************************************************************************************************************************************************************************************************************************************************************************!*\
2895  !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/RegisteredSuchiList.vue?vue&type=template&id=81db757a ***!
2896  \************************************************************************************************************************************************************************************************************************************************************************************************/
2897/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
2898
2899"use strict";
2900__webpack_require__.r(__webpack_exports__);
2901/* harmony export */ __webpack_require__.d(__webpack_exports__, {
2902/* harmony export */   render: () => (/* binding */ render),
2903/* harmony export */   staticRenderFns: () => (/* binding */ staticRenderFns)
2904/* harmony export */ });
2905var render = function render() {
2906  var _vm = this,
2907    _c = _vm._self._c;
2908  return _c("div", [_c("suchi-list-view", {
2909    attrs: {
2910      suchis: _vm.suchis
2911    }
2912  })], 1);
2913};
2914var staticRenderFns = [];
2915render._withStripped = true;
2916
2917
2918/***/ }),
2919
2920/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/Spinner.vue?vue&type=template&id=7ae326fe":
2921/*!************************************************************************************************************************************************************************************************************************************************************************************!*\
2922  !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/Spinner.vue?vue&type=template&id=7ae326fe ***!
2923  \************************************************************************************************************************************************************************************************************************************************************************************/
2924/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
2925
2926"use strict";
2927__webpack_require__.r(__webpack_exports__);
2928/* harmony export */ __webpack_require__.d(__webpack_exports__, {
2929/* harmony export */   render: () => (/* binding */ render),
2930/* harmony export */   staticRenderFns: () => (/* binding */ staticRenderFns)
2931/* harmony export */ });
2932var render = function render() {
2933  var _vm = this,
2934    _c = _vm._self._c;
2935  return _vm._m(0);
2936};
2937var staticRenderFns = [function () {
2938  var _vm = this,
2939    _c = _vm._self._c;
2940  return _c("div", {
2941    staticClass: "spinner-border",
2942    staticStyle: {
2943      width: "4rem",
2944      height: "4rem"
2945    },
2946    attrs: {
2947      role: "status"
2948    }
2949  }, [_c("span", {
2950    staticClass: "sr-only"
2951  }, [_vm._v("Loading...")])]);
2952}];
2953render._withStripped = true;
2954
2955
2956/***/ }),
2957
2958/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/SuchiForm.vue?vue&type=template&id=cd9393ea&scoped=true":
2959/*!**************************************************************************************************************************************************************************************************************************************************************************************************!*\
2960  !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/SuchiForm.vue?vue&type=template&id=cd9393ea&scoped=true ***!
2961  \**************************************************************************************************************************************************************************************************************************************************************************************************/
2962/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
2963
2964"use strict";
2965__webpack_require__.r(__webpack_exports__);
2966/* harmony export */ __webpack_require__.d(__webpack_exports__, {
2967/* harmony export */   render: () => (/* binding */ render),
2968/* harmony export */   staticRenderFns: () => (/* binding */ staticRenderFns)
2969/* harmony export */ });
2970var render = function render() {
2971  var _vm = this,
2972    _c = _vm._self._c;
2973  return _c("div", {
2974    staticClass: "box"
2975  }, [_vm._m(0), _vm._v(" "), _c("div", {
2976    staticClass: "box__body"
2977  }, [_vm.guestMode ? _c("div", {
2978    staticClass: "mb-4"
2979  }, [_vm._v("\n            यस पालिका र अन्तर्गतका वडा कार्यालयमा पहिल्यै दर्ता भईसकेका\n            व्यवसाय सङ्गँ मिल्दो नाम दर्ता हुने छैन । Space, ह्र्स्व र\n            दिर्घका आधारमा System ले नाम दिएमा यसलाई पालिकाले अस्विकृत गर्न\n            सक्नेछ ।\n        ")]) : _vm._e(), _vm._v(" "), _c("form", {
2980    attrs: {
2981      method: "POST"
2982    },
2983    on: {
2984      submit: function submit($event) {
2985        $event.preventDefault();
2986        return _vm.submit.apply(null, arguments);
2987      }
2988    }
2989  }, [_c("div", {
2990    staticClass: "row"
2991  }, [_c("div", {
2992    staticClass: "col-md-12"
2993  }, [!_vm.guestMode ? _c("div", {
2994    staticClass: "reg-bar"
2995  }, [_c("div", {
2996    staticClass: "row"
2997  }, [_c("div", {
2998    staticClass: "form-group col-md-6"
2999  }, [_c("label", {
3000    staticClass: "required"
3001  }, [_vm._v("दर्ता नम्बर")]), _vm._v(" "), _c("input", {
3002    staticClass: "form-control",
3003    attrs: {
3004      type: "text",
3005      disabled: ""
3006    },
3007    domProps: {
3008      value: _vm.suchi.full_reg_no
3009    }
3010  })]), _vm._v(" "), _c("div", {
3011    staticClass: "form-group col-md-6"
3012  }, [_c("label", {
3013    staticClass: "required"
3014  }, [_vm._v("रसिद नम्बर")]), _vm._v(" "), _c("input", {
3015    directives: [{
3016      name: "model",
3017      rawName: "v-model",
3018      value: _vm.form.receipt_no,
3019      expression: "form.receipt_no"
3020    }],
3021    staticClass: "form-control",
3022    attrs: {
3023      type: "text",
3024      placeholder: "रसिद नम्बर"
3025    },
3026    domProps: {
3027      value: _vm.form.receipt_no
3028    },
3029    on: {
3030      input: function input($event) {
3031        if ($event.target.composing) return;
3032        _vm.$set(_vm.form, "receipt_no", $event.target.value);
3033      }
3034    }
3035  }), _vm._v(" "), _c("small", {
3036    staticClass: "text-danger"
3037  }, [_vm._v(_vm._s(_vm.form.errors.first("receipt_no")))])]), _vm._v(" "), _c("div", {
3038    staticClass: "form-group col-md-6"
3039  }, [_c("label", {
3040    staticClass: "required"
3041  }, [_vm._v("रकम")]), _vm._v(" "), _c("input", {
3042    directives: [{
3043      name: "model",
3044      rawName: "v-model",
3045      value: _vm.form.receipt_amount,
3046      expression: "form.receipt_amount"
3047    }],
3048    staticClass: "form-control",
3049    attrs: {
3050      type: "text",
3051      placeholder: "रकम"
3052    },
3053    domProps: {
3054      value: _vm.form.receipt_amount
3055    },
3056    on: {
3057      input: function input($event) {
3058        if ($event.target.composing) return;
3059        _vm.$set(_vm.form, "receipt_amount", $event.target.value);
3060      }
3061    }
3062  }), _vm._v(" "), _c("small", {
3063    staticClass: "text-danger"
3064  }, [_vm._v(_vm._s(_vm.form.errors.first("receipt_amount")))])])])]) : _vm._e()]), _vm._v(" "), _c("div", {
3065    staticClass: "col-md-12 pb-3 font-weight-bold"
3066  }, [_vm._v("\n                    १. मौजुदा सूचीको लागि निवेदन दिने व्यक्ति, फर्म, संस्था,\n                    आपूर्तिकर्ता, निर्माण व्यवसायी,परामर्शदाता वा सेवा\n                    प्रदायकको विवरण :\n                ")]), _vm._v(" "), _c("div", {
3067    staticClass: "form-group col-md-6"
3068  }, [_c("label", {
3069    staticClass: "required"
3070  }, [_vm._v("संस्थाकाे नाम")]), _vm._v(" "), _c("input", {
3071    directives: [{
3072      name: "model",
3073      rawName: "v-model",
3074      value: _vm.form.name,
3075      expression: "form.name"
3076    }],
3077    staticClass: "form-control",
3078    attrs: {
3079      type: "text"
3080    },
3081    domProps: {
3082      value: _vm.form.name
3083    },
3084    on: {
3085      input: function input($event) {
3086        if ($event.target.composing) return;
3087        _vm.$set(_vm.form, "name", $event.target.value);
3088      }
3089    }
3090  }), _vm._v(" "), _c("small", {
3091    staticClass: "text-danger"
3092  }, [_vm._v(_vm._s(_vm.form.errors.first("name")))])]), _vm._v(" "), _c("div", {
3093    staticClass: "form-group col-md-6"
3094  }, [_c("label", {
3095    staticClass: "required"
3096  }, [_vm._v("ठेगाना")]), _vm._v(" "), _c("input", {
3097    directives: [{
3098      name: "model",
3099      rawName: "v-model",
3100      value: _vm.form.address,
3101      expression: "form.address"
3102    }],
3103    staticClass: "form-control",
3104    attrs: {
3105      type: "text"
3106    },
3107    domProps: {
3108      value: _vm.form.address
3109    },
3110    on: {
3111      input: function input($event) {
3112        if ($event.target.composing) return;
3113        _vm.$set(_vm.form, "address", $event.target.value);
3114      }
3115    }
3116  }), _vm._v(" "), _c("small", {
3117    staticClass: "text-danger"
3118  }, [_vm._v(_vm._s(_vm.form.errors.first("address")))])]), _vm._v(" "), _c("div", {
3119    staticClass: "form-group col-md-6"
3120  }, [_c("label", {
3121    staticClass: "required"
3122  }, [_vm._v("सम्पर्क व्यक्ति")]), _vm._v(" "), _c("input", {
3123    directives: [{
3124      name: "model",
3125      rawName: "v-model",
3126      value: _vm.form.contact_person,
3127      expression: "form.contact_person"
3128    }],
3129    staticClass: "form-control",
3130    attrs: {
3131      type: "text"
3132    },
3133    domProps: {
3134      value: _vm.form.contact_person
3135    },
3136    on: {
3137      input: function input($event) {
3138        if ($event.target.composing) return;
3139        _vm.$set(_vm.form, "contact_person", $event.target.value);
3140      }
3141    }
3142  }), _vm._v(" "), _c("small", {
3143    staticClass: "text-danger"
3144  }, [_vm._v(_vm._s(_vm.form.errors.first("contact_person")))])]), _vm._v(" "), _c("div", {
3145    staticClass: "form-group col-md-6"
3146  }, [_c("label", {
3147    staticClass: "required"
3148  }, [_vm._v("फोन नं.")]), _vm._v(" "), _c("input", {
3149    directives: [{
3150      name: "model",
3151      rawName: "v-model",
3152      value: _vm.form.contact,
3153      expression: "form.contact"
3154    }],
3155    staticClass: "form-control",
3156    attrs: {
3157      type: "text"
3158    },
3159    domProps: {
3160      value: _vm.form.contact
3161    },
3162    on: {
3163      input: function input($event) {
3164        if ($event.target.composing) return;
3165        _vm.$set(_vm.form, "contact", $event.target.value);
3166      }
3167    }
3168  }), _vm._v(" "), _c("small", {
3169    staticClass: "text-danger"
3170  }, [_vm._v(_vm._s(_vm.form.errors.first("contact")))])]), _vm._v(" "), _c("div", {
3171    staticClass: "form-group col-md-6"
3172  }, [_c("label", {
3173    staticClass: "required"
3174  }, [_vm._v("माेबाइल नंं.")]), _vm._v(" "), _c("input", {
3175    directives: [{
3176      name: "model",
3177      rawName: "v-model",
3178      value: _vm.form.mobile,
3179      expression: "form.mobile"
3180    }],
3181    staticClass: "form-control",
3182    attrs: {
3183      type: "text"
3184    },
3185    domProps: {
3186      value: _vm.form.mobile
3187    },
3188    on: {
3189      input: function input($event) {
3190        if ($event.target.composing) return;
3191        _vm.$set(_vm.form, "mobile", $event.target.value);
3192      }
3193    }
3194  }), _vm._v(" "), _c("small", {
3195    staticClass: "text-danger"
3196  }, [_vm._v(_vm._s(_vm.form.errors.first("mobile")))])]), _vm._v(" "), _c("div", {
3197    staticClass: "form-group col-md-6"
3198  }, [_c("label", [_vm._v("इमेल")]), _vm._v(" "), _c("input", {
3199    directives: [{
3200      name: "model",
3201      rawName: "v-model",
3202      value: _vm.form.email,
3203      expression: "form.email"
3204    }],
3205    staticClass: "form-control",
3206    attrs: {
3207      type: "text"
3208    },
3209    domProps: {
3210      value: _vm.form.email
3211    },
3212    on: {
3213      input: function input($event) {
3214        if ($event.target.composing) return;
3215        _vm.$set(_vm.form, "email", $event.target.value);
3216      }
3217    }
3218  }), _vm._v(" "), _c("small", {
3219    staticClass: "text-danger"
3220  }, [_vm._v(_vm._s(_vm.form.errors.first("email")))])]), _vm._v(" "), _c("div", {
3221    staticClass: "col-md-12 pb-3 font-weight-bold"
3222  }, [_vm._v("\n                    २. मौजुदा सूचीमा दर्ता हुनको लागि निम्न बमोजिमको\n                    प्रमाणपत्र संलग्न गर्नु होला ।\n                ")]), _vm._v(" "), _c("div", {
3223    staticClass: "form-group col-md-6"
3224  }, [_c("label", [_vm._v("संस्था वा फर्म दर्ताको प्रमाणपत्र (Optional)")]), _vm._v(" "), _c("div", {
3225    staticClass: "custom-file"
3226  }, [_c("input", {
3227    staticClass: "custom-file-input",
3228    attrs: {
3229      type: "file",
3230      id: "reg_cert"
3231    },
3232    on: {
3233      change: function change($event) {
3234        return _vm.handleFileUpload($event, "reg_cert");
3235      }
3236    }
3237  }), _vm._v(" "), _c("label", {
3238    staticClass: "custom-file-label",
3239    attrs: {
3240      "for": "reg_cert"
3241    }
3242  }, [_vm._v("Choose file")])]), _vm._v(" "), _c("small", {
3243    staticClass: "text-danger"
3244  }, [_vm._v(_vm._s(_vm.form.errors.first("reg_cert")))])]), _vm._v(" "), _c("div", {
3245    staticClass: "form-group col-md-6"
3246  }, [_c("label", [_vm._v("नविकरण गरेको प्रमाण-पत्र (Optional)")]), _vm._v(" "), _c("div", {
3247    staticClass: "custom-file"
3248  }, [_c("input", {
3249    staticClass: "custom-file-input",
3250    attrs: {
3251      type: "file",
3252      id: "renew_cert"
3253    },
3254    on: {
3255      change: function change($event) {
3256        return _vm.handleFileUpload($event, "renew_cert");
3257      }
3258    }
3259  }), _vm._v(" "), _c("label", {
3260    staticClass: "custom-file-label",
3261    attrs: {
3262      "for": "renew_cert"
3263    }
3264  }, [_vm._v("Choose file")])]), _vm._v(" "), _c("small", {
3265    staticClass: "text-danger"
3266  }, [_vm._v(_vm._s(_vm.form.errors.first("renew_cert")))])]), _vm._v(" "), _c("div", {
3267    staticClass: "form-group col-md-6"
3268  }, [_c("label", [_vm._v("मूल्य अभिबृद्धि कर वा स्थायी लेखा नम्बर दर्ताको\n                        प्रमाण-पत्र (Optional)")]), _vm._v(" "), _c("div", {
3269    staticClass: "custom-file"
3270  }, [_c("input", {
3271    staticClass: "custom-file-input",
3272    attrs: {
3273      type: "file",
3274      id: "pan_cert"
3275    },
3276    on: {
3277      change: function change($event) {
3278        return _vm.handleFileUpload($event, "pan_cert");
3279      }
3280    }
3281  }), _vm._v(" "), _c("label", {
3282    staticClass: "custom-file-label",
3283    attrs: {
3284      "for": "pan_cert"
3285    }
3286  }, [_vm._v("Choose file")])]), _vm._v(" "), _c("small", {
3287    staticClass: "text-danger"
3288  }, [_vm._v(_vm._s(_vm.form.errors.first("pan_cert")))])]), _vm._v(" "), _c("div", {
3289    staticClass: "form-group col-md-6"
3290  }, [_c("label", [_vm._v("कर चुक्ताको प्रमाण-पत्र (Optional)")]), _vm._v(" "), _c("div", {
3291    staticClass: "custom-file"
3292  }, [_c("input", {
3293    staticClass: "custom-file-input",
3294    attrs: {
3295      type: "file",
3296      id: "tax_cert"
3297    },
3298    on: {
3299      change: function change($event) {
3300        return _vm.handleFileUpload($event, "tax_cert");
3301      }
3302    }
3303  }), _vm._v(" "), _c("label", {
3304    staticClass: "custom-file-label",
3305    attrs: {
3306      "for": "tax_cert"
3307    }
3308  }, [_vm._v("Choose file")])]), _vm._v(" "), _c("small", {
3309    staticClass: "text-danger"
3310  }, [_vm._v(_vm._s(_vm.form.errors.first("tax_cert")))])]), _vm._v(" "), _c("div", {
3311    staticClass: "form-group col-md-6"
3312  }, [_c("label", [_vm._v("कुन खरिदको लागि मौजुदा सूचिमा दर्ता हुन निवेदन दिने\n                        हो , सो कामको लागि इजाजतपत्र आवश्यक पर्ने भएमा सो को\n                        प्रतिलिपी (Optional)")]), _vm._v(" "), _c("div", {
3313    staticClass: "custom-file"
3314  }, [_c("input", {
3315    staticClass: "custom-file-input",
3316    attrs: {
3317      type: "file",
3318      id: "license_cert"
3319    },
3320    on: {
3321      change: function change($event) {
3322        return _vm.handleFileUpload($event, "license_cert");
3323      }
3324    }
3325  }), _vm._v(" "), _c("label", {
3326    staticClass: "custom-file-label",
3327    attrs: {
3328      "for": "license_cert"
3329    }
3330  }, [_vm._v("Choose file")])]), _vm._v(" "), _c("small", {
3331    staticClass: "text-danger"
3332  }, [_vm._v(_vm._s(_vm.form.errors.first("license_cert")))])]), _vm._v(" "), _c("div", {
3333    staticClass: "form-group col-md-6"
3334  }, [_c("label", [_vm._v("भुक्तानी गरेको रसिद वा बैंक भाैचर (Optional)")]), _vm._v(" "), _c("div", {
3335    staticClass: "custom-file"
3336  }, [_c("input", {
3337    staticClass: "custom-file-input",
3338    attrs: {
3339      type: "file",
3340      id: "receipt"
3341    },
3342    on: {
3343      change: function change($event) {
3344        return _vm.handleFileUpload($event, "receipt");
3345      }
3346    }
3347  }), _vm._v(" "), _c("label", {
3348    staticClass: "custom-file-label",
3349    attrs: {
3350      "for": "receipt"
3351    }
3352  }, [_vm._v("Choose file")])]), _vm._v(" "), _c("small", {
3353    staticClass: "text-danger"
3354  }, [_vm._v(_vm._s(_vm.form.errors.first("receipt")))])]), _vm._v(" "), _c("div", {
3355    staticClass: "col-md-12 pb-3 font-weight-bold"
3356  }, [_vm._v("\n                    ३. सार्वजनिक निकायबाट हुने खरिदको लागि दर्ता हुन चाहेको\n                    खरिदको प्रकृतीको विवरण :\n                ")]), _vm._v(" "), _c("div", {
3357    staticClass: "form-group col-md-6"
3358  }, [_c("label", {
3359    staticClass: "required"
3360  }, [_vm._v("संस्थाकाे प्रकार")]), _vm._v(" "), _c("select", {
3361    directives: [{
3362      name: "model",
3363      rawName: "v-model",
3364      value: _vm.form.suchi_type_id,
3365      expression: "form.suchi_type_id"
3366    }],
3367    staticClass: "custom-select",
3368    on: {
3369      change: function change($event) {
3370        var $$selectedVal = Array.prototype.filter.call($event.target.options, function (o) {
3371          return o.selected;
3372        }).map(function (o) {
3373          var val = "_value" in o ? o._value : o.value;
3374          return val;
3375        });
3376        _vm.$set(_vm.form, "suchi_type_id", $event.target.multiple ? $$selectedVal : $$selectedVal[0]);
3377      }
3378    }
3379  }, [_c("option", {
3380    attrs: {
3381      value: ""
3382    }
3383  }, [_vm._v("\n                            संस्थाकाे प्रकार चयन गर्नुहोस्\n                        ")]), _vm._v(" "), _vm._l(_vm.suchiTypes, function (type) {
3384    return _c("option", {
3385      key: type.id,
3386      domProps: {
3387        value: type.id
3388      }
3389    }, [_vm._v("\n                            " + _vm._s(type.title) + "\n                        ")]);
3390  })], 2), _vm._v(" "), _c("small", {
3391    staticClass: "text-danger"
3392  }, [_vm._v(_vm._s(_vm.form.errors.first("suchi_type_id")))])]), _vm._v(" "), _c("div", {
3393    staticClass: "form-group col-md-6"
3394  }, [_c("label", {
3395    staticClass: "required"
3396  }, [_vm._v("कारोबार गर्ने वस्तु")]), _vm._v(" "), _c("input", {
3397    directives: [{
3398      name: "model",
3399      rawName: "v-model",
3400      value: _vm.form.product_type,
3401      expression: "form.product_type"
3402    }],
3403    staticClass: "form-control",
3404    attrs: {
3405      type: "text"
3406    },
3407    domProps: {
3408      value: _vm.form.product_type
3409    },
3410    on: {
3411      input: function input($event) {
3412        if ($event.target.composing) return;
3413        _vm.$set(_vm.form, "product_type", $event.target.value);
3414      }
3415    }
3416  }), _vm._v(" "), _c("small", {
3417    staticClass: "text-danger"
3418  }, [_vm._v(_vm._s(_vm.form.errors.first("product_type")))])])]), _vm._v(" "), _c("div", {
3419    staticClass: "text-right"
3420  }, [_c("button", {
3421    staticClass: "btn btn-primary z-depth-0 ml-0 px-5 d-inline-flex align-items-center",
3422    attrs: {
3423      disabled: _vm.form.processing
3424    }
3425  }, [_c("span", {
3426    directives: [{
3427      name: "show",
3428      rawName: "v-show",
3429      value: _vm.form.processing,
3430      expression: "form.processing"
3431    }],
3432    staticClass: "spinner-border spinner-border-sm mr-2",
3433    attrs: {
3434      role: "status",
3435      "aria-hidden": "true"
3436    }
3437  }), _vm._v(" "), _c("span", [_vm._v("पेश गर्नुहोस्")])])])])])]);
3438};
3439var staticRenderFns = [function () {
3440  var _vm = this,
3441    _c = _vm._self._c;
3442  return _c("div", {
3443    staticClass: "box__header"
3444  }, [_c("div", {
3445    staticClass: "box__title"
3446  }, [_vm._v("नयाँ सूची दर्ता")])]);
3447}];
3448render._withStripped = true;
3449
3450
3451/***/ }),
3452
3453/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/SuchiListView.vue?vue&type=template&id=2c0132aa":
3454/*!******************************************************************************************************************************************************************************************************************************************************************************************!*\
3455  !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/SuchiListView.vue?vue&type=template&id=2c0132aa ***!
3456  \******************************************************************************************************************************************************************************************************************************************************************************************/
3457/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
3458
3459"use strict";
3460__webpack_require__.r(__webpack_exports__);
3461/* harmony export */ __webpack_require__.d(__webpack_exports__, {
3462/* harmony export */   render: () => (/* binding */ render),
3463/* harmony export */   staticRenderFns: () => (/* binding */ staticRenderFns)
3464/* harmony export */ });
3465var render = function render() {
3466  var _vm = this,
3467    _c = _vm._self._c;
3468  return _c("div", {
3469    staticClass: "box"
3470  }, [_c("div", {
3471    staticClass: "box__body"
3472  }, [_c("table", {
3473    staticClass: "table suchis-table"
3474  }, [_c("thead", [_c("tr", [_c("th", [_vm._v("क्र.स.")]), _vm._v(" "), _c("th", [_vm._v(_vm._s(_vm.type == "registered" ? "दर्ता नं." : "टोकन नं."))]), _vm._v(" "), _c("th", [_vm._v(_vm._s(_vm.type == "registered" ? "दर्ता मिति" : "आवेदन मिति"))]), _vm._v(" "), _c("th", [_vm._v("संस्था")]), _vm._v(" "), _c("th", [_vm._v("प्रकार")]), _vm._v(" "), _c("th")])]), _vm._v(" "), _c("tbody", _vm._l(_vm.suchis.data, function (suchi) {
3475    return _c("tr", {
3476      key: suchi.hash_id
3477    }, [_c("td", [_vm._v(_vm._s(suchi.id))]), _vm._v(" "), _c("td", [_c("span", {
3478      staticClass: "project-register-no"
3479    }, [_vm._v(_vm._s(suchi.is_registered ? suchi.full_reg_no : suchi.token_no))])]), _vm._v(" "), _c("td", {
3480      staticClass: "font-roboto"
3481    }, [_vm._v(_vm._s(suchi.is_registered ? suchi.reg_date : suchi.application_date))]), _vm._v(" "), _c("td", {
3482      staticClass: "font-roboto"
3483    }, [_vm._v(_vm._s(suchi.name))]), _vm._v(" "), _c("td", {
3484      staticClass: "font-roboto"
3485    }, [_vm._v(_vm._s(suchi.suchi_type))]), _vm._v(" "), _c("td", {
3486      staticClass: "text-right"
3487    }, [_c("a", {
3488      staticClass: "btn btn-primary btn-md font-noto my-0 py-2 px-3 z-depth-0",
3489      attrs: {
3490        href: "/suchi/".concat(suchi.hash_id)
3491      }
3492    }, [_c("i", {
3493      staticClass: "fa fa-eye mr-2"
3494    }), _vm._v("View")])])]);
3495  }), 0)]), _vm._v(" "), _c("nav", {
3496    staticClass: "p-2 px-3 font-noto"
3497  }, [_c("div", {
3498    staticClass: "d-flex justify-content-between align-items-center"
3499  }, [_c("div", [_vm._v("Showing " + _vm._s(_vm.suchis.meta.from) + " to " + _vm._s(_vm.suchis.meta.from) + " of " + _vm._s(_vm.suchis.meta.total) + " records")]), _vm._v(" "), _c("div")])])])]);
3500};
3501var staticRenderFns = [];
3502render._withStripped = true;
3503
3504
3505/***/ }),
3506
3507/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/TokenSearch.vue?vue&type=template&id=dc6d0134&scoped=true":
3508/*!****************************************************************************************************************************************************************************************************************************************************************************************************!*\
3509  !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/TokenSearch.vue?vue&type=template&id=dc6d0134&scoped=true ***!
3510  \****************************************************************************************************************************************************************************************************************************************************************************************************/
3511/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
3512
3513"use strict";
3514__webpack_require__.r(__webpack_exports__);
3515/* harmony export */ __webpack_require__.d(__webpack_exports__, {
3516/* harmony export */   render: () => (/* binding */ render),
3517/* harmony export */   staticRenderFns: () => (/* binding */ staticRenderFns)
3518/* harmony export */ });
3519var render = function render() {
3520  var _vm = this,
3521    _c = _vm._self._c;
3522  return _c("div", {
3523    staticClass: "box"
3524  }, [_c("div", {
3525    staticClass: "box__body"
3526  }, [_c("form", {
3527    staticClass: "form",
3528    on: {
3529      submit: function submit($event) {
3530        $event.preventDefault();
3531        return _vm.search.apply(null, arguments);
3532      }
3533    }
3534  }, [_vm._m(0), _vm._v(" "), _c("div", {
3535    staticClass: "input-group mb-3"
3536  }, [_c("input", {
3537    directives: [{
3538      name: "model",
3539      rawName: "v-model",
3540      value: _vm.tokenNumber,
3541      expression: "tokenNumber"
3542    }],
3543    staticClass: "form-control form-control-lg",
3544    attrs: {
3545      type: "number",
3546      autocomplete: "off",
3547      required: "",
3548      autofocus: "",
3549      placeholder: "आफ्नो टोकन नम्बर टाइप गर्नुहोस्"
3550    },
3551    domProps: {
3552      value: _vm.tokenNumber
3553    },
3554    on: {
3555      input: function input($event) {
3556        if ($event.target.composing) return;
3557        _vm.tokenNumber = $event.target.value;
3558      }
3559    }
3560  }), _vm._v(" "), _c("button", {
3561    staticClass: "search-btn",
3562    attrs: {
3563      type: "submit",
3564      "data-mdb-ripple-color": "dark"
3565    }
3566  }, [_vm._v("Search")])])]), _vm._v(" "), _vm.suchi ? _c("table", {
3567    staticClass: "table table-borderless table-responsive"
3568  }, [_c("tr", [_c("td", [_vm._v("व्यवसायको नाम:")]), _vm._v(" "), _c("td", {
3569    staticClass: "font-weight-bold"
3570  }, [_vm._v(_vm._s(_vm.suchi.name))])]), _vm._v(" "), _c("tr", [_c("td", [_vm._v("व्यवसायी नाम:")]), _vm._v(" "), _c("td", {
3571    staticClass: "font-weight-bold"
3572  }, [_vm._v(_vm._s(_vm.suchi.contact_person))])]), _vm._v(" "), _c("tr", [_c("td", [_vm._v("टोकन नम्बर:")]), _vm._v(" "), _c("td", {
3573    staticClass: "font-weight-bold"
3574  }, [_vm._v(_vm._s(_vm.suchi.token_no))])]), _vm._v(" "), _c("tr", [_c("td", {
3575    staticClass: "text-center",
3576    attrs: {
3577      colspan: "2"
3578    }
3579  }, [_c("button", {
3580    staticClass: "btn btn-danger z-depth-0 btn-lg font-16px lang-english",
3581    attrs: {
3582      type: "button"
3583    },
3584    on: {
3585      click: _vm.clearSearch
3586    }
3587  }, [_vm._v("Cancel")]), _vm._v(" "), _c("a", {
3588    staticClass: "btn btn-success z-depth-0 btn-lg font-16px lang-english",
3589    attrs: {
3590      href: "/suchi-print-application/".concat(_vm.suchi.hash_id)
3591    }
3592  }, [_vm._m(1), _vm._v(" "), _c("span", [_vm._v("निवेदन छाप्नुहोस्")])])])])]) : _vm._e()])]);
3593};
3594var staticRenderFns = [function () {
3595  var _vm = this,
3596    _c = _vm._self._c;
3597  return _c("div", {
3598    staticClass: "form-group text-center"
3599  }, [_c("h1", {
3600    staticClass: "h1-responsive font-weight-bolder indigo-text font-noto"
3601  }, [_vm._v("टोकन नम्बर")])]);
3602}, function () {
3603  var _vm = this,
3604    _c = _vm._self._c;
3605  return _c("span", {
3606    staticClass: "mr-3"
3607  }, [_c("i", {
3608    staticClass: "fa fa-print"
3609  })]);
3610}];
3611render._withStripped = true;
3612
3613
3614/***/ }),
3615
3616/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/gallery/Albums.vue?vue&type=template&id=52e77a42&scoped=true":
3617/*!********************************************************************************************************************************************************************************************************************************************************************************************!*\
3618  !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/gallery/Albums.vue?vue&type=template&id=52e77a42&scoped=true ***!
3619  \********************************************************************************************************************************************************************************************************************************************************************************************/
3620/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
3621
3622"use strict";
3623__webpack_require__.r(__webpack_exports__);
3624/* harmony export */ __webpack_require__.d(__webpack_exports__, {
3625/* harmony export */   render: () => (/* binding */ render),
3626/* harmony export */   staticRenderFns: () => (/* binding */ staticRenderFns)
3627/* harmony export */ });
3628var render = function render() {
3629  var _vm = this,
3630    _c = _vm._self._c;
3631  return _c("div", [_vm.loading ? _c("div", {
3632    staticClass: "text-center"
3633  }, [_c("Spinner")], 1) : _vm._e(), _vm._v(" "), _vm.albums.length ? _c("div", {
3634    staticClass: "album-grid"
3635  }, _vm._l(_vm.albums, function (album) {
3636    return _c("div", {
3637      key: album.id,
3638      staticClass: "album"
3639    }, [album.preview_photos.length >= 4 ? [_c("a", {
3640      staticClass: "album-preview-multiple",
3641      attrs: {
3642        href: "/backend/album/".concat(album.id, "/photos")
3643      }
3644    }, _vm._l(album.preview_photos, function (photoUrl) {
3645      return _c("img", {
3646        attrs: {
3647          src: photoUrl
3648        }
3649      });
3650    }), 0)] : [_c("a", {
3651      staticClass: "album-preview",
3652      attrs: {
3653        href: "/backend/album/".concat(album.id, "/photos")
3654      }
3655    }, [_c("img", {
3656      attrs: {
3657        src: album.preview_photos[0],
3658        alt: ""
3659      }
3660    })])], _vm._v(" "), _c("div", {
3661      staticClass: "d-flex justify-content-between align-items-center"
3662    }, [_c("div", [_c("a", {
3663      staticClass: "album-name",
3664      attrs: {
3665        href: "/backend/album/".concat(album.id, "/photos")
3666      }
3667    }, [_vm._v(_vm._s(album.name))]), _vm._v(" "), _c("div", {
3668      staticClass: "album-photos-count"
3669    }, [_vm._v(_vm._s(album.photos_count) + " photos")])]), _vm._v(" "), _c("div", [_c("button", {
3670      staticClass: "delete-album-btn",
3671      attrs: {
3672        type: "button"
3673      },
3674      on: {
3675        click: function click($event) {
3676          return _vm.handleDelete(album);
3677        }
3678      }
3679    }, [_c("i", {
3680      staticClass: "fa fa-trash-alt"
3681    })])])])], 2);
3682  }), 0) : _c("div", {
3683    staticClass: "py-5 text-center"
3684  }, [_c("h4", [_vm._v("No Albums created yet!!")]), _vm._v(" "), _vm._m(0)])]);
3685};
3686var staticRenderFns = [function () {
3687  var _vm = this,
3688    _c = _vm._self._c;
3689  return _c("div", [_c("a", {
3690    staticClass: "btn btn-sm btn-primary",
3691    attrs: {
3692      href: "/backend/albums/create"
3693    }
3694  }, [_c("i", {
3695    staticClass: "fa fa-plus mr-2"
3696  }), _vm._v("नयाँ ग्यालेरी")])]);
3697}];
3698render._withStripped = true;
3699
3700
3701/***/ }),
3702
3703/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/gallery/FrontendAlbums.vue?vue&type=template&id=6feaa8de&scoped=true":
3704/*!****************************************************************************************************************************************************************************************************************************************************************************************************!*\
3705  !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/gallery/FrontendAlbums.vue?vue&type=template&id=6feaa8de&scoped=true ***!
3706  \****************************************************************************************************************************************************************************************************************************************************************************************************/
3707/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
3708
3709"use strict";
3710__webpack_require__.r(__webpack_exports__);
3711/* harmony export */ __webpack_require__.d(__webpack_exports__, {
3712/* harmony export */   render: () => (/* binding */ render),
3713/* harmony export */   staticRenderFns: () => (/* binding */ staticRenderFns)
3714/* harmony export */ });
3715var render = function render() {
3716  var _vm = this,
3717    _c = _vm._self._c;
3718  return _c("div", [_vm.loading ? _c("div", {
3719    staticClass: "text-center py-5"
3720  }, [_c("Spinner")], 1) : _vm._e(), _vm._v(" "), _vm.albums.length ? _c("div", {
3721    staticClass: "album-grid"
3722  }, _vm._l(_vm.albums, function (album) {
3723    return _c("div", {
3724      key: album.id,
3725      staticClass: "album"
3726    }, [album.preview_photos.length >= 4 ? [_c("a", {
3727      staticClass: "album-preview-multiple",
3728      attrs: {
3729        href: "/gallery/".concat(album.id, "/photos")
3730      }
3731    }, _vm._l(album.preview_photos, function (photoUrl) {
3732      return _c("img", {
3733        attrs: {
3734          src: photoUrl
3735        }
3736      });
3737    }), 0)] : [_c("a", {
3738      staticClass: "album-preview",
3739      attrs: {
3740        href: "/gallery/".concat(album.id, "/photos")
3741      }
3742    }, [_c("img", {
3743      attrs: {
3744        src: album.preview_photos[0],
3745        alt: ""
3746      }
3747    })])], _vm._v(" "), _c("div", {
3748      staticClass: "d-flex justify-content-between align-items-center"
3749    }, [_c("div", [_c("a", {
3750      staticClass: "album-name",
3751      attrs: {
3752        href: "/gallery/".concat(album.id, "/photos")
3753      }
3754    }, [_vm._v(_vm._s(album.name))]), _vm._v(" "), _c("div", {
3755      staticClass: "album-photos-count"
3756    }, [_vm._v(_vm._s(album.photos_count) + " photos")])])])], 2);
3757  }), 0) : _vm._e()]);
3758};
3759var staticRenderFns = [];
3760render._withStripped = true;
3761
3762
3763/***/ }),
3764
3765/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/gallery/Uploader.vue?vue&type=template&id=6e95a0ae&scoped=true":
3766/*!**********************************************************************************************************************************************************************************************************************************************************************************************!*\
3767  !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/gallery/Uploader.vue?vue&type=template&id=6e95a0ae&scoped=true ***!
3768  \**********************************************************************************************************************************************************************************************************************************************************************************************/
3769/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
3770
3771"use strict";
3772__webpack_require__.r(__webpack_exports__);
3773/* harmony export */ __webpack_require__.d(__webpack_exports__, {
3774/* harmony export */   render: () => (/* binding */ render),
3775/* harmony export */   staticRenderFns: () => (/* binding */ staticRenderFns)
3776/* harmony export */ });
3777var render = function render() {
3778  var _vm = this,
3779    _c = _vm._self._c;
3780  return _c("div", [_c("div", {
3781    staticClass: "main-wrap mt-4"
3782  }, [_c("div", {
3783    staticClass: "content-root"
3784  }, [_c("section", {
3785    staticClass: "box"
3786  }, [_c("div", {
3787    staticClass: "box__body p-3"
3788  }, [_c("vue-dropzone", {
3789    ref: "myVueDropzone",
3790    attrs: {
3791      id: "dropzone",
3792      options: _vm.dropzoneOptions,
3793      duplicateCheck: true,
3794      includeStyling: true,
3795      useCustomSlot: true
3796    },
3797    on: {
3798      "vdropzone-success": _vm.handleFileUploaded
3799    }
3800  }, [_c("div", {
3801    staticClass: "dropzone-custom-content"
3802  }, [_c("h3", {
3803    staticClass: "dropzone-custom-title"
3804  }, [_vm._v("Drag and drop an image file here")]), _vm._v(" "), _c("div", {
3805    staticClass: "subtitle"
3806  }, [_vm._v("...or click to select a file from your computer")])])])], 1)]), _vm._v(" "), _c("div", {
3807    staticClass: "box mt-3"
3808  }, [_c("div", {
3809    staticClass: "box__body"
3810  }, [_vm.photos.length ? _c("section", {
3811    staticClass: "gallery-grid"
3812  }, _vm._l(_vm.photos, function (photo) {
3813    return _c("div", {
3814      key: photo.id,
3815      "class": {
3816        "photo-box": true,
3817        active: _vm.selectedPhoto && _vm.selectedPhoto.id == photo.id
3818      },
3819      on: {
3820        click: function click($event) {
3821          return _vm.handlePhotSelected(photo.id);
3822        }
3823      }
3824    }, [_c("div", {
3825      staticClass: "photo"
3826    }, [_c("img", {
3827      attrs: {
3828        src: photo.url,
3829        alt: photo.name
3830      }
3831    })]), _vm._v(" "), _c("div", {
3832      staticClass: "photo-name"
3833    }, [_vm._v(_vm._s(photo.name))])]);
3834  }), 0) : _c("section", {
3835    staticClass: "text-center py-5"
3836  }, [_vm._v("\n            There are no photos in this Album yet !!\n          ")])])])]), _vm._v(" "), _vm.selectedPhoto ? _c("div", {
3837    staticClass: "detail-pane"
3838  }, [_c("div", {
3839    staticClass: "box detail-pane-content"
3840  }, [_c("div", {
3841    staticClass: "box__body"
3842  }, [_c("img", {
3843    staticClass: "image-preview",
3844    attrs: {
3845      src: _vm.selectedPhoto.url,
3846      alt: _vm.selectedPhoto.name
3847    }
3848  }), _vm._v(" "), _c("h4", {
3849    staticClass: "image-title"
3850  }, [_vm._v(_vm._s(_vm.selectedPhoto.name))]), _vm._v(" "), _c("button", {
3851    staticClass: "delete-image-btn",
3852    attrs: {
3853      type: "button"
3854    },
3855    on: {
3856      click: function click($event) {
3857        return _vm.handleDelete();
3858      }
3859    }
3860  }, [_c("i", {
3861    staticClass: "fa fa-trash-alt mr-2"
3862  }), _vm._v("Delete")]), _vm._v(" "), _c("div", {
3863    staticClass: "information-item"
3864  }, [_c("div", {
3865    staticClass: "info-label"
3866  }, [_vm._v("Title")]), _vm._v(" "), _c("div", {
3867    staticClass: "info-value"
3868  }, [_vm._v(_vm._s(_vm.selectedPhoto.name))])]), _vm._v(" "), _c("div", {
3869    staticClass: "information-item"
3870  }, [_c("div", {
3871    staticClass: "info-label"
3872  }, [_vm._v("Size")]), _vm._v(" "), _c("div", {
3873    staticClass: "info-value"
3874  }, [_vm._v(_vm._s(_vm.selectedPhoto.size.mb))])]), _vm._v(" "), _c("div", {
3875    staticClass: "information-item"
3876  }, [_c("div", {
3877    staticClass: "info-label"
3878  }, [_vm._v("Format")]), _vm._v(" "), _c("div", {
3879    staticClass: "info-value"
3880  }, [_vm._v(_vm._s(_vm.selectedPhoto.format))])]), _vm._v(" "), _c("div", {
3881    staticClass: "information-item"
3882  }, [_c("div", {
3883    staticClass: "info-label"
3884  }, [_vm._v("Uploaded")]), _vm._v(" "), _c("div", {
3885    staticClass: "info-value"
3886  }, [_vm._v(_vm._s(_vm.selectedPhoto.created_at.human))])])])])]) : _vm._e()])]);
3887};
3888var staticRenderFns = [];
3889render._withStripped = true;
3890
3891
3892/***/ }),
3893
3894/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/gallery/ViewAlbum.vue?vue&type=template&id=923d41c2&scoped=true":
3895/*!***********************************************************************************************************************************************************************************************************************************************************************************************!*\
3896  !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/gallery/ViewAlbum.vue?vue&type=template&id=923d41c2&scoped=true ***!
3897  \***********************************************************************************************************************************************************************************************************************************************************************************************/
3898/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
3899
3900"use strict";
3901__webpack_require__.r(__webpack_exports__);
3902/* harmony export */ __webpack_require__.d(__webpack_exports__, {
3903/* harmony export */   render: () => (/* binding */ render),
3904/* harmony export */   staticRenderFns: () => (/* binding */ staticRenderFns)
3905/* harmony export */ });
3906var render = function render() {
3907  var _vm = this,
3908    _c = _vm._self._c;
3909  return _c("div", {
3910    staticClass: "mt-4"
3911  }, [_c("CoolLightBox", {
3912    attrs: {
3913      items: _vm.photos,
3914      index: _vm.index,
3915      fullscreen: true
3916    },
3917    on: {
3918      close: function close($event) {
3919        _vm.index = null;
3920      }
3921    }
3922  }), _vm._v(" "), _c("div", {
3923    staticClass: "box mt-3"
3924  }, [_c("div", {
3925    staticClass: "box__header"
3926  }, [_c("h1", {
3927    staticClass: "box__title"
3928  }, [_vm._v(_vm._s(_vm.album.name))]), _vm._v(" "), _c("p", {
3929    staticClass: "text-muted"
3930  }, [_vm._v(_vm._s(_vm.album.description))])]), _vm._v(" "), _c("div", {
3931    staticClass: "box__body"
3932  }, [_vm.photos.length ? _c("section", {
3933    staticClass: "gallery-grid"
3934  }, _vm._l(_vm.photos, function (photo, index) {
3935    return _c("div", {
3936      key: photo.id,
3937      "class": {
3938        "photo-box": true,
3939        active: _vm.selectedPhoto && _vm.selectedPhoto.id == photo.id
3940      },
3941      on: {
3942        click: function click($event) {
3943          return _vm.handlePhotoClick(index);
3944        }
3945      }
3946    }, [_c("div", {
3947      staticClass: "photo"
3948    }, [_c("img", {
3949      attrs: {
3950        src: photo.src,
3951        alt: photo.name
3952      }
3953    })])]);
3954  }), 0) : _c("section", {
3955    staticClass: "text-center py-5"
3956  }, [_vm._v("\n                There are no photos in this Album yet !!\n            ")])])])], 1);
3957};
3958var staticRenderFns = [];
3959render._withStripped = true;
3960
3961
3962/***/ }),
3963
3964/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/video/VideoGallery.vue?vue&type=template&id=05149dee&scoped=true":
3965/*!************************************************************************************************************************************************************************************************************************************************************************************************!*\
3966  !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/video/VideoGallery.vue?vue&type=template&id=05149dee&scoped=true ***!
3967  \************************************************************************************************************************************************************************************************************************************************************************************************/
3968/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
3969
3970"use strict";
3971__webpack_require__.r(__webpack_exports__);
3972/* harmony export */ __webpack_require__.d(__webpack_exports__, {
3973/* harmony export */   render: () => (/* binding */ render),
3974/* harmony export */   staticRenderFns: () => (/* binding */ staticRenderFns)
3975/* harmony export */ });
3976var render = function render() {
3977  var _vm = this,
3978    _c = _vm._self._c;
3979  return _c("div", {
3980    staticClass: "box"
3981  }, [_c("div", {
3982    staticClass: "box__body"
3983  }, [_c("div", {
3984    staticClass: "video-grid"
3985  }, _vm._l(_vm.videos, function (video) {
3986    return _c("div", {
3987      key: video.id,
3988      staticClass: "video-item"
3989    }, [_c("div", {
3990      staticClass: "video-container"
3991    }, [_c("youtube", {
3992      attrs: {
3993        "video-id": video.video_id,
3994        "player-vars": _vm.playerVars,
3995        width: "100%",
3996        height: "100%"
3997      }
3998    })], 1), _vm._v(" "), _c("div", {
3999      staticClass: "video-title"
4000    }, [_vm._v("\n                    " + _vm._s(video.title) + "\n                ")])]);
4001  }), 0)])]);
4002};
4003var staticRenderFns = [];
4004render._withStripped = true;
4005
4006
4007/***/ }),
4008
vendor: 7,864 bytes, lines 4009-4237
4009/***/ "./node_modules/body-scroll-lock/lib/bodyScrollLock.esm.js":
4010/*!*****************************************************************!*\
4011  !*** ./node_modules/body-scroll-lock/lib/bodyScrollLock.esm.js ***!
4012  \*****************************************************************/
4013/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
4014
4015"use strict";
4016__webpack_require__.r(__webpack_exports__);
4017/* harmony export */ __webpack_require__.d(__webpack_exports__, {
4018/* harmony export */   clearAllBodyScrollLocks: () => (/* binding */ clearAllBodyScrollLocks),
4019/* harmony export */   disableBodyScroll: () => (/* binding */ disableBodyScroll),
4020/* harmony export */   enableBodyScroll: () => (/* binding */ enableBodyScroll)
4021/* harmony export */ });
4022function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }
4023
4024// Older browsers don't support event options, feature detect it.
4025
4026// Adopted and modified solution from Bohdan Didukh (2017)
4027// https://stackoverflow.com/questions/41594997/ios-10-safari-prevent-scrolling-behind-a-fixed-overlay-and-maintain-scroll-posi
4028
4029var hasPassiveEvents = false;
4030if (typeof window !== 'undefined') {
4031  var passiveTestOptions = {
4032    get passive() {
4033      hasPassiveEvents = true;
4034      return undefined;
4035    }
4036  };
4037  window.addEventListener('testPassive', null, passiveTestOptions);
4038  window.removeEventListener('testPassive', null, passiveTestOptions);
4039}
4040
4041var isIosDevice = typeof window !== 'undefined' && window.navigator && window.navigator.platform && (/iP(ad|hone|od)/.test(window.navigator.platform) || window.navigator.platform === 'MacIntel' && window.navigator.maxTouchPoints > 1);
4042
4043
4044var locks = [];
4045var documentListenerAdded = false;
4046var initialClientY = -1;
4047var previousBodyOverflowSetting = void 0;
4048var previousBodyPaddingRight = void 0;
4049
4050// returns true if `el` should be allowed to receive touchmove events.
4051var allowTouchMove = function allowTouchMove(el) {
4052  return locks.some(function (lock) {
4053    if (lock.options.allowTouchMove && lock.options.allowTouchMove(el)) {
4054      return true;
4055    }
4056
4057    return false;
4058  });
4059};
4060
4061var preventDefault = function preventDefault(rawEvent) {
4062  var e = rawEvent || window.event;
4063
4064  // For the case whereby consumers adds a touchmove event listener to document.
4065  // Recall that we do document.addEventListener('touchmove', preventDefault, { passive: false })
4066  // in disableBodyScroll - so if we provide this opportunity to allowTouchMove, then
4067  // the touchmove event on document will break.
4068  if (allowTouchMove(e.target)) {
4069    return true;
4070  }
4071
4072  // Do not prevent if the event has more than one touch (usually meaning this is a multi touch gesture like pinch to zoom).
4073  if (e.touches.length > 1) return true;
4074
4075  if (e.preventDefault) e.preventDefault();
4076
4077  return false;
4078};
4079
4080var setOverflowHidden = function setOverflowHidden(options) {
4081  // If previousBodyPaddingRight is already set, don't set it again.
4082  if (previousBodyPaddingRight === undefined) {
4083    var _reserveScrollBarGap = !!options && options.reserveScrollBarGap === true;
4084    var scrollBarGap = window.innerWidth - document.documentElement.clientWidth;
4085
4086    if (_reserveScrollBarGap && scrollBarGap > 0) {
4087      previousBodyPaddingRight = document.body.style.paddingRight;
4088      document.body.style.paddingRight = scrollBarGap + 'px';
4089    }
4090  }
4091
4092  // If previousBodyOverflowSetting is already set, don't set it again.
4093  if (previousBodyOverflowSetting === undefined) {
4094    previousBodyOverflowSetting = document.body.style.overflow;
4095    document.body.style.overflow = 'hidden';
4096  }
4097};
4098
4099var restoreOverflowSetting = function restoreOverflowSetting() {
4100  if (previousBodyPaddingRight !== undefined) {
4101    document.body.style.paddingRight = previousBodyPaddingRight;
4102
4103    // Restore previousBodyPaddingRight to undefined so setOverflowHidden knows it
4104    // can be set again.
4105    previousBodyPaddingRight = undefined;
4106  }
4107
4108  if (previousBodyOverflowSetting !== undefined) {
4109    document.body.style.overflow = previousBodyOverflowSetting;
4110
4111    // Restore previousBodyOverflowSetting to undefined
4112    // so setOverflowHidden knows it can be set again.
4113    previousBodyOverflowSetting = undefined;
4114  }
4115};
4116
4117// https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollHeight#Problems_and_solutions
4118var isTargetElementTotallyScrolled = function isTargetElementTotallyScrolled(targetElement) {
4119  return targetElement ? targetElement.scrollHeight - targetElement.scrollTop <= targetElement.clientHeight : false;
4120};
4121
4122var handleScroll = function handleScroll(event, targetElement) {
4123  var clientY = event.targetTouches[0].clientY - initialClientY;
4124
4125  if (allowTouchMove(event.target)) {
4126    return false;
4127  }
4128
4129  if (targetElement && targetElement.scrollTop === 0 && clientY > 0) {
4130    // element is at the top of its scroll.
4131    return preventDefault(event);
4132  }
4133
4134  if (isTargetElementTotallyScrolled(targetElement) && clientY < 0) {
4135    // element is at the bottom of its scroll.
4136    return preventDefault(event);
4137  }
4138
4139  event.stopPropagation();
4140  return true;
4141};
4142
4143var disableBodyScroll = function disableBodyScroll(targetElement, options) {
4144  // targetElement must be provided
4145  if (!targetElement) {
4146    // eslint-disable-next-line no-console
4147    console.error('disableBodyScroll unsuccessful - targetElement must be provided when calling disableBodyScroll on IOS devices.');
4148    return;
4149  }
4150
4151  // disableBodyScroll must not have been called on this targetElement before
4152  if (locks.some(function (lock) {
4153    return lock.targetElement === targetElement;
4154  })) {
4155    return;
4156  }
4157
4158  var lock = {
4159    targetElement: targetElement,
4160    options: options || {}
4161  };
4162
4163  locks = [].concat(_toConsumableArray(locks), [lock]);
4164
4165  if (isIosDevice) {
4166    targetElement.ontouchstart = function (event) {
4167      if (event.targetTouches.length === 1) {
4168        // detect single touch.
4169        initialClientY = event.targetTouches[0].clientY;
4170      }
4171    };
4172    targetElement.ontouchmove = function (event) {
4173      if (event.targetTouches.length === 1) {
4174        // detect single touch.
4175        handleScroll(event, targetElement);
4176      }
4177    };
4178
4179    if (!documentListenerAdded) {
4180      document.addEventListener('touchmove', preventDefault, hasPassiveEvents ? { passive: false } : undefined);
4181      documentListenerAdded = true;
4182    }
4183  } else {
4184    setOverflowHidden(options);
4185  }
4186};
4187
4188var clearAllBodyScrollLocks = function clearAllBodyScrollLocks() {
4189  if (isIosDevice) {
4190    // Clear all locks ontouchstart/ontouchmove handlers, and the references.
4191    locks.forEach(function (lock) {
4192      lock.targetElement.ontouchstart = null;
4193      lock.targetElement.ontouchmove = null;
4194    });
4195
4196    if (documentListenerAdded) {
4197      document.removeEventListener('touchmove', preventDefault, hasPassiveEvents ? { passive: false } : undefined);
4198      documentListenerAdded = false;
4199    }
4200
4201    // Reset initial clientY.
4202    initialClientY = -1;
4203  } else {
4204    restoreOverflowSetting();
4205  }
4206
4207  locks = [];
4208};
4209
4210var enableBodyScroll = function enableBodyScroll(targetElement) {
4211  if (!targetElement) {
4212    // eslint-disable-next-line no-console
4213    console.error('enableBodyScroll unsuccessful - targetElement must be provided when calling enableBodyScroll on IOS devices.');
4214    return;
4215  }
4216
4217  locks = locks.filter(function (lock) {
4218    return lock.targetElement !== targetElement;
4219  });
4220
4221  if (isIosDevice) {
4222    targetElement.ontouchstart = null;
4223    targetElement.ontouchmove = null;
4224
4225    if (documentListenerAdded && locks.length === 0) {
4226      document.removeEventListener('touchmove', preventDefault, hasPassiveEvents ? { passive: false } : undefined);
4227      documentListenerAdded = false;
4228    }
4229  } else if (!locks.length) {
4230    restoreOverflowSetting();
4231  }
4232};
4233
4234
4235
4236/***/ }),
4237
vendor: 928 bytes, lines 4238-4258
4238/***/ "./node_modules/chart.js/auto/auto.mjs":
4239/*!*********************************************!*\
4240  !*** ./node_modules/chart.js/auto/auto.mjs ***!
4241  \*********************************************/
4242/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
4243
4244"use strict";
4245__webpack_require__.r(__webpack_exports__);
4246/* harmony export */ __webpack_require__.d(__webpack_exports__, {
4247/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
4248/* harmony export */ });
4249/* harmony import */ var _dist_chart_mjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../dist/chart.mjs */ "./node_modules/chart.js/dist/chart.mjs");
4250
4251
4252_dist_chart_mjs__WEBPACK_IMPORTED_MODULE_0__.Chart.register(..._dist_chart_mjs__WEBPACK_IMPORTED_MODULE_0__.registerables);
4253
4254/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_dist_chart_mjs__WEBPACK_IMPORTED_MODULE_0__.Chart);
4255
4256
4257/***/ }),
4258
vendor: 373,811 bytes, lines 4259-15080
4259/***/ "./node_modules/chart.js/dist/chart.mjs":
4260/*!**********************************************!*\
4261  !*** ./node_modules/chart.js/dist/chart.mjs ***!
4262  \**********************************************/
4263/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
4264
4265"use strict";
4266__webpack_require__.r(__webpack_exports__);
4267/* harmony export */ __webpack_require__.d(__webpack_exports__, {
4268/* harmony export */   Animation: () => (/* binding */ Animation),
4269/* harmony export */   Animations: () => (/* binding */ Animations),
4270/* harmony export */   ArcElement: () => (/* binding */ ArcElement),
4271/* harmony export */   BarController: () => (/* binding */ BarController),
4272/* harmony export */   BarElement: () => (/* binding */ BarElement),
4273/* harmony export */   BasePlatform: () => (/* binding */ BasePlatform),
4274/* harmony export */   BasicPlatform: () => (/* binding */ BasicPlatform),
4275/* harmony export */   BubbleController: () => (/* binding */ BubbleController),
4276/* harmony export */   CategoryScale: () => (/* binding */ CategoryScale),
4277/* harmony export */   Chart: () => (/* binding */ Chart),
4278/* harmony export */   DatasetController: () => (/* binding */ DatasetController),
4279/* harmony export */   Decimation: () => (/* binding */ plugin_decimation),
4280/* harmony export */   DomPlatform: () => (/* binding */ DomPlatform),
4281/* harmony export */   DoughnutController: () => (/* binding */ DoughnutController),
4282/* harmony export */   Element: () => (/* binding */ Element),
4283/* harmony export */   Filler: () => (/* binding */ index),
4284/* harmony export */   Interaction: () => (/* binding */ Interaction),
4285/* harmony export */   Legend: () => (/* binding */ plugin_legend),
4286/* harmony export */   LineController: () => (/* binding */ LineController),
4287/* harmony export */   LineElement: () => (/* binding */ LineElement),
4288/* harmony export */   LinearScale: () => (/* binding */ LinearScale),
4289/* harmony export */   LogarithmicScale: () => (/* binding */ LogarithmicScale),
4290/* harmony export */   PieController: () => (/* binding */ PieController),
4291/* harmony export */   PointElement: () => (/* binding */ PointElement),
4292/* harmony export */   PolarAreaController: () => (/* binding */ PolarAreaController),
4293/* harmony export */   RadarController: () => (/* binding */ RadarController),
4294/* harmony export */   RadialLinearScale: () => (/* binding */ RadialLinearScale),
4295/* harmony export */   Scale: () => (/* binding */ Scale),
4296/* harmony export */   ScatterController: () => (/* binding */ ScatterController),
4297/* harmony export */   SubTitle: () => (/* binding */ plugin_subtitle),
4298/* harmony export */   Ticks: () => (/* binding */ Ticks),
4299/* harmony export */   TimeScale: () => (/* binding */ TimeScale),
4300/* harmony export */   TimeSeriesScale: () => (/* binding */ TimeSeriesScale),
4301/* harmony export */   Title: () => (/* binding */ plugin_title),
4302/* harmony export */   Tooltip: () => (/* binding */ plugin_tooltip),
4303/* harmony export */   _adapters: () => (/* binding */ adapters),
4304/* harmony export */   _detectPlatform: () => (/* binding */ _detectPlatform),
4305/* harmony export */   animator: () => (/* binding */ animator),
4306/* harmony export */   controllers: () => (/* binding */ controllers),
4307/* harmony export */   defaults: () => (/* reexport safe */ _chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.d),
4308/* harmony export */   elements: () => (/* binding */ elements),
4309/* harmony export */   layouts: () => (/* binding */ layouts),
4310/* harmony export */   plugins: () => (/* binding */ plugins),
4311/* harmony export */   registerables: () => (/* binding */ registerables),
4312/* harmony export */   registry: () => (/* binding */ registry),
4313/* harmony export */   scales: () => (/* binding */ scales)
4314/* harmony export */ });
4315/* harmony import */ var _chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./chunks/helpers.segment.mjs */ "./node_modules/chart.js/dist/chunks/helpers.segment.mjs");
4316/*!
4317 * Chart.js v3.9.1
4318 * https://www.chartjs.org
4319 * (c) 2022 Chart.js Contributors
4320 * Released under the MIT License
4321 */
4322
4323
4324
4325class Animator {
4326  constructor() {
4327    this._request = null;
4328    this._charts = new Map();
4329    this._running = false;
4330    this._lastDate = undefined;
4331  }
4332  _notify(chart, anims, date, type) {
4333    const callbacks = anims.listeners[type];
4334    const numSteps = anims.duration;
4335    callbacks.forEach(fn => fn({
4336      chart,
4337      initial: anims.initial,
4338      numSteps,
4339      currentStep: Math.min(date - anims.start, numSteps)
4340    }));
4341  }
4342  _refresh() {
4343    if (this._request) {
4344      return;
4345    }
4346    this._running = true;
4347    this._request = _chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.r.call(window, () => {
4348      this._update();
4349      this._request = null;
4350      if (this._running) {
4351        this._refresh();
4352      }
4353    });
4354  }
4355  _update(date = Date.now()) {
4356    let remaining = 0;
4357    this._charts.forEach((anims, chart) => {
4358      if (!anims.running || !anims.items.length) {
4359        return;
4360      }
4361      const items = anims.items;
4362      let i = items.length - 1;
4363      let draw = false;
4364      let item;
4365      for (; i >= 0; --i) {
4366        item = items[i];
4367        if (item._active) {
4368          if (item._total > anims.duration) {
4369            anims.duration = item._total;
4370          }
4371          item.tick(date);
4372          draw = true;
4373        } else {
4374          items[i] = items[items.length - 1];
4375          items.pop();
4376        }
4377      }
4378      if (draw) {
4379        chart.draw();
4380        this._notify(chart, anims, date, 'progress');
4381      }
4382      if (!items.length) {
4383        anims.running = false;
4384        this._notify(chart, anims, date, 'complete');
4385        anims.initial = false;
4386      }
4387      remaining += items.length;
4388    });
4389    this._lastDate = date;
4390    if (remaining === 0) {
4391      this._running = false;
4392    }
4393  }
4394  _getAnims(chart) {
4395    const charts = this._charts;
4396    let anims = charts.get(chart);
4397    if (!anims) {
4398      anims = {
4399        running: false,
4400        initial: true,
4401        items: [],
4402        listeners: {
4403          complete: [],
4404          progress: []
4405        }
4406      };
4407      charts.set(chart, anims);
4408    }
4409    return anims;
4410  }
4411  listen(chart, event, cb) {
4412    this._getAnims(chart).listeners[event].push(cb);
4413  }
4414  add(chart, items) {
4415    if (!items || !items.length) {
4416      return;
4417    }
4418    this._getAnims(chart).items.push(...items);
4419  }
4420  has(chart) {
4421    return this._getAnims(chart).items.length > 0;
4422  }
4423  start(chart) {
4424    const anims = this._charts.get(chart);
4425    if (!anims) {
4426      return;
4427    }
4428    anims.running = true;
4429    anims.start = Date.now();
4430    anims.duration = anims.items.reduce((acc, cur) => Math.max(acc, cur._duration), 0);
4431    this._refresh();
4432  }
4433  running(chart) {
4434    if (!this._running) {
4435      return false;
4436    }
4437    const anims = this._charts.get(chart);
4438    if (!anims || !anims.running || !anims.items.length) {
4439      return false;
4440    }
4441    return true;
4442  }
4443  stop(chart) {
4444    const anims = this._charts.get(chart);
4445    if (!anims || !anims.items.length) {
4446      return;
4447    }
4448    const items = anims.items;
4449    let i = items.length - 1;
4450    for (; i >= 0; --i) {
4451      items[i].cancel();
4452    }
4453    anims.items = [];
4454    this._notify(chart, anims, Date.now(), 'complete');
4455  }
4456  remove(chart) {
4457    return this._charts.delete(chart);
4458  }
4459}
4460var animator = new Animator();
4461
4462const transparent = 'transparent';
4463const interpolators = {
4464  boolean(from, to, factor) {
4465    return factor > 0.5 ? to : from;
4466  },
4467  color(from, to, factor) {
4468    const c0 = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.c)(from || transparent);
4469    const c1 = c0.valid && (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.c)(to || transparent);
4470    return c1 && c1.valid
4471      ? c1.mix(c0, factor).hexString()
4472      : to;
4473  },
4474  number(from, to, factor) {
4475    return from + (to - from) * factor;
4476  }
4477};
4478class Animation {
4479  constructor(cfg, target, prop, to) {
4480    const currentValue = target[prop];
4481    to = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.a)([cfg.to, to, currentValue, cfg.from]);
4482    const from = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.a)([cfg.from, currentValue, to]);
4483    this._active = true;
4484    this._fn = cfg.fn || interpolators[cfg.type || typeof from];
4485    this._easing = _chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.e[cfg.easing] || _chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.e.linear;
4486    this._start = Math.floor(Date.now() + (cfg.delay || 0));
4487    this._duration = this._total = Math.floor(cfg.duration);
4488    this._loop = !!cfg.loop;
4489    this._target = target;
4490    this._prop = prop;
4491    this._from = from;
4492    this._to = to;
4493    this._promises = undefined;
4494  }
4495  active() {
4496    return this._active;
4497  }
4498  update(cfg, to, date) {
4499    if (this._active) {
4500      this._notify(false);
4501      const currentValue = this._target[this._prop];
4502      const elapsed = date - this._start;
4503      const remain = this._duration - elapsed;
4504      this._start = date;
4505      this._duration = Math.floor(Math.max(remain, cfg.duration));
4506      this._total += elapsed;
4507      this._loop = !!cfg.loop;
4508      this._to = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.a)([cfg.to, to, currentValue, cfg.from]);
4509      this._from = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.a)([cfg.from, currentValue, to]);
4510    }
4511  }
4512  cancel() {
4513    if (this._active) {
4514      this.tick(Date.now());
4515      this._active = false;
4516      this._notify(false);
4517    }
4518  }
4519  tick(date) {
4520    const elapsed = date - this._start;
4521    const duration = this._duration;
4522    const prop = this._prop;
4523    const from = this._from;
4524    const loop = this._loop;
4525    const to = this._to;
4526    let factor;
4527    this._active = from !== to && (loop || (elapsed < duration));
4528    if (!this._active) {
4529      this._target[prop] = to;
4530      this._notify(true);
4531      return;
4532    }
4533    if (elapsed < 0) {
4534      this._target[prop] = from;
4535      return;
4536    }
4537    factor = (elapsed / duration) % 2;
4538    factor = loop && factor > 1 ? 2 - factor : factor;
4539    factor = this._easing(Math.min(1, Math.max(0, factor)));
4540    this._target[prop] = this._fn(from, to, factor);
4541  }
4542  wait() {
4543    const promises = this._promises || (this._promises = []);
4544    return new Promise((res, rej) => {
4545      promises.push({res, rej});
4546    });
4547  }
4548  _notify(resolved) {
4549    const method = resolved ? 'res' : 'rej';
4550    const promises = this._promises || [];
4551    for (let i = 0; i < promises.length; i++) {
4552      promises[i][method]();
4553    }
4554  }
4555}
4556
4557const numbers = ['x', 'y', 'borderWidth', 'radius', 'tension'];
4558const colors = ['color', 'borderColor', 'backgroundColor'];
4559_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.d.set('animation', {
4560  delay: undefined,
4561  duration: 1000,
4562  easing: 'easeOutQuart',
4563  fn: undefined,
4564  from: undefined,
4565  loop: undefined,
4566  to: undefined,
4567  type: undefined,
4568});
4569const animationOptions = Object.keys(_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.d.animation);
4570_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.d.describe('animation', {
4571  _fallback: false,
4572  _indexable: false,
4573  _scriptable: (name) => name !== 'onProgress' && name !== 'onComplete' && name !== 'fn',
4574});
4575_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.d.set('animations', {
4576  colors: {
4577    type: 'color',
4578    properties: colors
4579  },
4580  numbers: {
4581    type: 'number',
4582    properties: numbers
4583  },
4584});
4585_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.d.describe('animations', {
4586  _fallback: 'animation',
4587});
4588_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.d.set('transitions', {
4589  active: {
4590    animation: {
4591      duration: 400
4592    }
4593  },
4594  resize: {
4595    animation: {
4596      duration: 0
4597    }
4598  },
4599  show: {
4600    animations: {
4601      colors: {
4602        from: 'transparent'
4603      },
4604      visible: {
4605        type: 'boolean',
4606        duration: 0
4607      },
4608    }
4609  },
4610  hide: {
4611    animations: {
4612      colors: {
4613        to: 'transparent'
4614      },
4615      visible: {
4616        type: 'boolean',
4617        easing: 'linear',
4618        fn: v => v | 0
4619      },
4620    }
4621  }
4622});
4623class Animations {
4624  constructor(chart, config) {
4625    this._chart = chart;
4626    this._properties = new Map();
4627    this.configure(config);
4628  }
4629  configure(config) {
4630    if (!(0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.i)(config)) {
4631      return;
4632    }
4633    const animatedProps = this._properties;
4634    Object.getOwnPropertyNames(config).forEach(key => {
4635      const cfg = config[key];
4636      if (!(0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.i)(cfg)) {
4637        return;
4638      }
4639      const resolved = {};
4640      for (const option of animationOptions) {
4641        resolved[option] = cfg[option];
4642      }
4643      ((0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.b)(cfg.properties) && cfg.properties || [key]).forEach((prop) => {
4644        if (prop === key || !animatedProps.has(prop)) {
4645          animatedProps.set(prop, resolved);
4646        }
4647      });
4648    });
4649  }
4650  _animateOptions(target, values) {
4651    const newOptions = values.options;
4652    const options = resolveTargetOptions(target, newOptions);
4653    if (!options) {
4654      return [];
4655    }
4656    const animations = this._createAnimations(options, newOptions);
4657    if (newOptions.$shared) {
4658      awaitAll(target.options.$animations, newOptions).then(() => {
4659        target.options = newOptions;
4660      }, () => {
4661      });
4662    }
4663    return animations;
4664  }
4665  _createAnimations(target, values) {
4666    const animatedProps = this._properties;
4667    const animations = [];
4668    const running = target.$animations || (target.$animations = {});
4669    const props = Object.keys(values);
4670    const date = Date.now();
4671    let i;
4672    for (i = props.length - 1; i >= 0; --i) {
4673      const prop = props[i];
4674      if (prop.charAt(0) === '$') {
4675        continue;
4676      }
4677      if (prop === 'options') {
4678        animations.push(...this._animateOptions(target, values));
4679        continue;
4680      }
4681      const value = values[prop];
4682      let animation = running[prop];
4683      const cfg = animatedProps.get(prop);
4684      if (animation) {
4685        if (cfg && animation.active()) {
4686          animation.update(cfg, value, date);
4687          continue;
4688        } else {
4689          animation.cancel();
4690        }
4691      }
4692      if (!cfg || !cfg.duration) {
4693        target[prop] = value;
4694        continue;
4695      }
4696      running[prop] = animation = new Animation(cfg, target, prop, value);
4697      animations.push(animation);
4698    }
4699    return animations;
4700  }
4701  update(target, values) {
4702    if (this._properties.size === 0) {
4703      Object.assign(target, values);
4704      return;
4705    }
4706    const animations = this._createAnimations(target, values);
4707    if (animations.length) {
4708      animator.add(this._chart, animations);
4709      return true;
4710    }
4711  }
4712}
4713function awaitAll(animations, properties) {
4714  const running = [];
4715  const keys = Object.keys(properties);
4716  for (let i = 0; i < keys.length; i++) {
4717    const anim = animations[keys[i]];
4718    if (anim && anim.active()) {
4719      running.push(anim.wait());
4720    }
4721  }
4722  return Promise.all(running);
4723}
4724function resolveTargetOptions(target, newOptions) {
4725  if (!newOptions) {
4726    return;
4727  }
4728  let options = target.options;
4729  if (!options) {
4730    target.options = newOptions;
4731    return;
4732  }
4733  if (options.$shared) {
4734    target.options = options = Object.assign({}, options, {$shared: false, $animations: {}});
4735  }
4736  return options;
4737}
4738
4739function scaleClip(scale, allowedOverflow) {
4740  const opts = scale && scale.options || {};
4741  const reverse = opts.reverse;
4742  const min = opts.min === undefined ? allowedOverflow : 0;
4743  const max = opts.max === undefined ? allowedOverflow : 0;
4744  return {
4745    start: reverse ? max : min,
4746    end: reverse ? min : max
4747  };
4748}
4749function defaultClip(xScale, yScale, allowedOverflow) {
4750  if (allowedOverflow === false) {
4751    return false;
4752  }
4753  const x = scaleClip(xScale, allowedOverflow);
4754  const y = scaleClip(yScale, allowedOverflow);
4755  return {
4756    top: y.end,
4757    right: x.end,
4758    bottom: y.start,
4759    left: x.start
4760  };
4761}
4762function toClip(value) {
4763  let t, r, b, l;
4764  if ((0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.i)(value)) {
4765    t = value.top;
4766    r = value.right;
4767    b = value.bottom;
4768    l = value.left;
4769  } else {
4770    t = r = b = l = value;
4771  }
4772  return {
4773    top: t,
4774    right: r,
4775    bottom: b,
4776    left: l,
4777    disabled: value === false
4778  };
4779}
4780function getSortedDatasetIndices(chart, filterVisible) {
4781  const keys = [];
4782  const metasets = chart._getSortedDatasetMetas(filterVisible);
4783  let i, ilen;
4784  for (i = 0, ilen = metasets.length; i < ilen; ++i) {
4785    keys.push(metasets[i].index);
4786  }
4787  return keys;
4788}
4789function applyStack(stack, value, dsIndex, options = {}) {
4790  const keys = stack.keys;
4791  const singleMode = options.mode === 'single';
4792  let i, ilen, datasetIndex, otherValue;
4793  if (value === null) {
4794    return;
4795  }
4796  for (i = 0, ilen = keys.length; i < ilen; ++i) {
4797    datasetIndex = +keys[i];
4798    if (datasetIndex === dsIndex) {
4799      if (options.all) {
4800        continue;
4801      }
4802      break;
4803    }
4804    otherValue = stack.values[datasetIndex];
4805    if ((0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.g)(otherValue) && (singleMode || (value === 0 || (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.s)(value) === (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.s)(otherValue)))) {
4806      value += otherValue;
4807    }
4808  }
4809  return value;
4810}
4811function convertObjectDataToArray(data) {
4812  const keys = Object.keys(data);
4813  const adata = new Array(keys.length);
4814  let i, ilen, key;
4815  for (i = 0, ilen = keys.length; i < ilen; ++i) {
4816    key = keys[i];
4817    adata[i] = {
4818      x: key,
4819      y: data[key]
4820    };
4821  }
4822  return adata;
4823}
4824function isStacked(scale, meta) {
4825  const stacked = scale && scale.options.stacked;
4826  return stacked || (stacked === undefined && meta.stack !== undefined);
4827}
4828function getStackKey(indexScale, valueScale, meta) {
4829  return `${indexScale.id}.${valueScale.id}.${meta.stack || meta.type}`;
4830}
4831function getUserBounds(scale) {
4832  const {min, max, minDefined, maxDefined} = scale.getUserBounds();
4833  return {
4834    min: minDefined ? min : Number.NEGATIVE_INFINITY,
4835    max: maxDefined ? max : Number.POSITIVE_INFINITY
4836  };
4837}
4838function getOrCreateStack(stacks, stackKey, indexValue) {
4839  const subStack = stacks[stackKey] || (stacks[stackKey] = {});
4840  return subStack[indexValue] || (subStack[indexValue] = {});
4841}
4842function getLastIndexInStack(stack, vScale, positive, type) {
4843  for (const meta of vScale.getMatchingVisibleMetas(type).reverse()) {
4844    const value = stack[meta.index];
4845    if ((positive && value > 0) || (!positive && value < 0)) {
4846      return meta.index;
4847    }
4848  }
4849  return null;
4850}
4851function updateStacks(controller, parsed) {
4852  const {chart, _cachedMeta: meta} = controller;
4853  const stacks = chart._stacks || (chart._stacks = {});
4854  const {iScale, vScale, index: datasetIndex} = meta;
4855  const iAxis = iScale.axis;
4856  const vAxis = vScale.axis;
4857  const key = getStackKey(iScale, vScale, meta);
4858  const ilen = parsed.length;
4859  let stack;
4860  for (let i = 0; i < ilen; ++i) {
4861    const item = parsed[i];
4862    const {[iAxis]: index, [vAxis]: value} = item;
4863    const itemStacks = item._stacks || (item._stacks = {});
4864    stack = itemStacks[vAxis] = getOrCreateStack(stacks, key, index);
4865    stack[datasetIndex] = value;
4866    stack._top = getLastIndexInStack(stack, vScale, true, meta.type);
4867    stack._bottom = getLastIndexInStack(stack, vScale, false, meta.type);
4868  }
4869}
4870function getFirstScaleId(chart, axis) {
4871  const scales = chart.scales;
4872  return Object.keys(scales).filter(key => scales[key].axis === axis).shift();
4873}
4874function createDatasetContext(parent, index) {
4875  return (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.h)(parent,
4876    {
4877      active: false,
4878      dataset: undefined,
4879      datasetIndex: index,
4880      index,
4881      mode: 'default',
4882      type: 'dataset'
4883    }
4884  );
4885}
4886function createDataContext(parent, index, element) {
4887  return (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.h)(parent, {
4888    active: false,
4889    dataIndex: index,
4890    parsed: undefined,
4891    raw: undefined,
4892    element,
4893    index,
4894    mode: 'default',
4895    type: 'data'
4896  });
4897}
4898function clearStacks(meta, items) {
4899  const datasetIndex = meta.controller.index;
4900  const axis = meta.vScale && meta.vScale.axis;
4901  if (!axis) {
4902    return;
4903  }
4904  items = items || meta._parsed;
4905  for (const parsed of items) {
4906    const stacks = parsed._stacks;
4907    if (!stacks || stacks[axis] === undefined || stacks[axis][datasetIndex] === undefined) {
4908      return;
4909    }
4910    delete stacks[axis][datasetIndex];
4911  }
4912}
4913const isDirectUpdateMode = (mode) => mode === 'reset' || mode === 'none';
4914const cloneIfNotShared = (cached, shared) => shared ? cached : Object.assign({}, cached);
4915const createStack = (canStack, meta, chart) => canStack && !meta.hidden && meta._stacked
4916  && {keys: getSortedDatasetIndices(chart, true), values: null};
4917class DatasetController {
4918  constructor(chart, datasetIndex) {
4919    this.chart = chart;
4920    this._ctx = chart.ctx;
4921    this.index = datasetIndex;
4922    this._cachedDataOpts = {};
4923    this._cachedMeta = this.getMeta();
4924    this._type = this._cachedMeta.type;
4925    this.options = undefined;
4926    this._parsing = false;
4927    this._data = undefined;
4928    this._objectData = undefined;
4929    this._sharedOptions = undefined;
4930    this._drawStart = undefined;
4931    this._drawCount = undefined;
4932    this.enableOptionSharing = false;
4933    this.supportsDecimation = false;
4934    this.$context = undefined;
4935    this._syncList = [];
4936    this.initialize();
4937  }
4938  initialize() {
4939    const meta = this._cachedMeta;
4940    this.configure();
4941    this.linkScales();
4942    meta._stacked = isStacked(meta.vScale, meta);
4943    this.addElements();
4944  }
4945  updateIndex(datasetIndex) {
4946    if (this.index !== datasetIndex) {
4947      clearStacks(this._cachedMeta);
4948    }
4949    this.index = datasetIndex;
4950  }
4951  linkScales() {
4952    const chart = this.chart;
4953    const meta = this._cachedMeta;
4954    const dataset = this.getDataset();
4955    const chooseId = (axis, x, y, r) => axis === 'x' ? x : axis === 'r' ? r : y;
4956    const xid = meta.xAxisID = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.v)(dataset.xAxisID, getFirstScaleId(chart, 'x'));
4957    const yid = meta.yAxisID = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.v)(dataset.yAxisID, getFirstScaleId(chart, 'y'));
4958    const rid = meta.rAxisID = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.v)(dataset.rAxisID, getFirstScaleId(chart, 'r'));
4959    const indexAxis = meta.indexAxis;
4960    const iid = meta.iAxisID = chooseId(indexAxis, xid, yid, rid);
4961    const vid = meta.vAxisID = chooseId(indexAxis, yid, xid, rid);
4962    meta.xScale = this.getScaleForId(xid);
4963    meta.yScale = this.getScaleForId(yid);
4964    meta.rScale = this.getScaleForId(rid);
4965    meta.iScale = this.getScaleForId(iid);
4966    meta.vScale = this.getScaleForId(vid);
4967  }
4968  getDataset() {
4969    return this.chart.data.datasets[this.index];
4970  }
4971  getMeta() {
4972    return this.chart.getDatasetMeta(this.index);
4973  }
4974  getScaleForId(scaleID) {
4975    return this.chart.scales[scaleID];
4976  }
4977  _getOtherScale(scale) {
4978    const meta = this._cachedMeta;
4979    return scale === meta.iScale
4980      ? meta.vScale
4981      : meta.iScale;
4982  }
4983  reset() {
4984    this._update('reset');
4985  }
4986  _destroy() {
4987    const meta = this._cachedMeta;
4988    if (this._data) {
4989      (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.u)(this._data, this);
4990    }
4991    if (meta._stacked) {
4992      clearStacks(meta);
4993    }
4994  }
4995  _dataCheck() {
4996    const dataset = this.getDataset();
4997    const data = dataset.data || (dataset.data = []);
4998    const _data = this._data;
4999    if ((0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.i)(data)) {
5000      this._data = convertObjectDataToArray(data);
5001    } else if (_data !== data) {
5002      if (_data) {
5003        (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.u)(_data, this);
5004        const meta = this._cachedMeta;
5005        clearStacks(meta);
5006        meta._parsed = [];
5007      }
5008      if (data && Object.isExtensible(data)) {
5009        (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.l)(data, this);
5010      }
5011      this._syncList = [];
5012      this._data = data;
5013    }
5014  }
5015  addElements() {
5016    const meta = this._cachedMeta;
5017    this._dataCheck();
5018    if (this.datasetElementType) {
5019      meta.dataset = new this.datasetElementType();
5020    }
5021  }
5022  buildOrUpdateElements(resetNewElements) {
5023    const meta = this._cachedMeta;
5024    const dataset = this.getDataset();
5025    let stackChanged = false;
5026    this._dataCheck();
5027    const oldStacked = meta._stacked;
5028    meta._stacked = isStacked(meta.vScale, meta);
5029    if (meta.stack !== dataset.stack) {
5030      stackChanged = true;
5031      clearStacks(meta);
5032      meta.stack = dataset.stack;
5033    }
5034    this._resyncElements(resetNewElements);
5035    if (stackChanged || oldStacked !== meta._stacked) {
5036      updateStacks(this, meta._parsed);
5037    }
5038  }
5039  configure() {
5040    const config = this.chart.config;
5041    const scopeKeys = config.datasetScopeKeys(this._type);
5042    const scopes = config.getOptionScopes(this.getDataset(), scopeKeys, true);
5043    this.options = config.createResolver(scopes, this.getContext());
5044    this._parsing = this.options.parsing;
5045    this._cachedDataOpts = {};
5046  }
5047  parse(start, count) {
5048    const {_cachedMeta: meta, _data: data} = this;
5049    const {iScale, _stacked} = meta;
5050    const iAxis = iScale.axis;
5051    let sorted = start === 0 && count === data.length ? true : meta._sorted;
5052    let prev = start > 0 && meta._parsed[start - 1];
5053    let i, cur, parsed;
5054    if (this._parsing === false) {
5055      meta._parsed = data;
5056      meta._sorted = true;
5057      parsed = data;
5058    } else {
5059      if ((0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.b)(data[start])) {
5060        parsed = this.parseArrayData(meta, data, start, count);
5061      } else if ((0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.i)(data[start])) {
5062        parsed = this.parseObjectData(meta, data, start, count);
5063      } else {
5064        parsed = this.parsePrimitiveData(meta, data, start, count);
5065      }
5066      const isNotInOrderComparedToPrev = () => cur[iAxis] === null || (prev && cur[iAxis] < prev[iAxis]);
5067      for (i = 0; i < count; ++i) {
5068        meta._parsed[i + start] = cur = parsed[i];
5069        if (sorted) {
5070          if (isNotInOrderComparedToPrev()) {
5071            sorted = false;
5072          }
5073          prev = cur;
5074        }
5075      }
5076      meta._sorted = sorted;
5077    }
5078    if (_stacked) {
5079      updateStacks(this, parsed);
5080    }
5081  }
5082  parsePrimitiveData(meta, data, start, count) {
5083    const {iScale, vScale} = meta;
5084    const iAxis = iScale.axis;
5085    const vAxis = vScale.axis;
5086    const labels = iScale.getLabels();
5087    const singleScale = iScale === vScale;
5088    const parsed = new Array(count);
5089    let i, ilen, index;
5090    for (i = 0, ilen = count; i < ilen; ++i) {
5091      index = i + start;
5092      parsed[i] = {
5093        [iAxis]: singleScale || iScale.parse(labels[index], index),
5094        [vAxis]: vScale.parse(data[index], index)
5095      };
5096    }
5097    return parsed;
5098  }
5099  parseArrayData(meta, data, start, count) {
5100    const {xScale, yScale} = meta;
5101    const parsed = new Array(count);
5102    let i, ilen, index, item;
5103    for (i = 0, ilen = count; i < ilen; ++i) {
5104      index = i + start;
5105      item = data[index];
5106      parsed[i] = {
5107        x: xScale.parse(item[0], index),
5108        y: yScale.parse(item[1], index)
5109      };
5110    }
5111    return parsed;
5112  }
5113  parseObjectData(meta, data, start, count) {
5114    const {xScale, yScale} = meta;
5115    const {xAxisKey = 'x', yAxisKey = 'y'} = this._parsing;
5116    const parsed = new Array(count);
5117    let i, ilen, index, item;
5118    for (i = 0, ilen = count; i < ilen; ++i) {
5119      index = i + start;
5120      item = data[index];
5121      parsed[i] = {
5122        x: xScale.parse((0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.f)(item, xAxisKey), index),
5123        y: yScale.parse((0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.f)(item, yAxisKey), index)
5124      };
5125    }
5126    return parsed;
5127  }
5128  getParsed(index) {
5129    return this._cachedMeta._parsed[index];
5130  }
5131  getDataElement(index) {
5132    return this._cachedMeta.data[index];
5133  }
5134  applyStack(scale, parsed, mode) {
5135    const chart = this.chart;
5136    const meta = this._cachedMeta;
5137    const value = parsed[scale.axis];
5138    const stack = {
5139      keys: getSortedDatasetIndices(chart, true),
5140      values: parsed._stacks[scale.axis]
5141    };
5142    return applyStack(stack, value, meta.index, {mode});
5143  }
5144  updateRangeFromParsed(range, scale, parsed, stack) {
5145    const parsedValue = parsed[scale.axis];
5146    let value = parsedValue === null ? NaN : parsedValue;
5147    const values = stack && parsed._stacks[scale.axis];
5148    if (stack && values) {
5149      stack.values = values;
5150      value = applyStack(stack, parsedValue, this._cachedMeta.index);
5151    }
5152    range.min = Math.min(range.min, value);
5153    range.max = Math.max(range.max, value);
5154  }
5155  getMinMax(scale, canStack) {
5156    const meta = this._cachedMeta;
5157    const _parsed = meta._parsed;
5158    const sorted = meta._sorted && scale === meta.iScale;
5159    const ilen = _parsed.length;
5160    const otherScale = this._getOtherScale(scale);
5161    const stack = createStack(canStack, meta, this.chart);
5162    const range = {min: Number.POSITIVE_INFINITY, max: Number.NEGATIVE_INFINITY};
5163    const {min: otherMin, max: otherMax} = getUserBounds(otherScale);
5164    let i, parsed;
5165    function _skip() {
5166      parsed = _parsed[i];
5167      const otherValue = parsed[otherScale.axis];
5168      return !(0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.g)(parsed[scale.axis]) || otherMin > otherValue || otherMax < otherValue;
5169    }
5170    for (i = 0; i < ilen; ++i) {
5171      if (_skip()) {
5172        continue;
5173      }
5174      this.updateRangeFromParsed(range, scale, parsed, stack);
5175      if (sorted) {
5176        break;
5177      }
5178    }
5179    if (sorted) {
5180      for (i = ilen - 1; i >= 0; --i) {
5181        if (_skip()) {
5182          continue;
5183        }
5184        this.updateRangeFromParsed(range, scale, parsed, stack);
5185        break;
5186      }
5187    }
5188    return range;
5189  }
5190  getAllParsedValues(scale) {
5191    const parsed = this._cachedMeta._parsed;
5192    const values = [];
5193    let i, ilen, value;
5194    for (i = 0, ilen = parsed.length; i < ilen; ++i) {
5195      value = parsed[i][scale.axis];
5196      if ((0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.g)(value)) {
5197        values.push(value);
5198      }
5199    }
5200    return values;
5201  }
5202  getMaxOverflow() {
5203    return false;
5204  }
5205  getLabelAndValue(index) {
5206    const meta = this._cachedMeta;
5207    const iScale = meta.iScale;
5208    const vScale = meta.vScale;
5209    const parsed = this.getParsed(index);
5210    return {
5211      label: iScale ? '' + iScale.getLabelForValue(parsed[iScale.axis]) : '',
5212      value: vScale ? '' + vScale.getLabelForValue(parsed[vScale.axis]) : ''
5213    };
5214  }
5215  _update(mode) {
5216    const meta = this._cachedMeta;
5217    this.update(mode || 'default');
5218    meta._clip = toClip((0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.v)(this.options.clip, defaultClip(meta.xScale, meta.yScale, this.getMaxOverflow())));
5219  }
5220  update(mode) {}
5221  draw() {
5222    const ctx = this._ctx;
5223    const chart = this.chart;
5224    const meta = this._cachedMeta;
5225    const elements = meta.data || [];
5226    const area = chart.chartArea;
5227    const active = [];
5228    const start = this._drawStart || 0;
5229    const count = this._drawCount || (elements.length - start);
5230    const drawActiveElementsOnTop = this.options.drawActiveElementsOnTop;
5231    let i;
5232    if (meta.dataset) {
5233      meta.dataset.draw(ctx, area, start, count);
5234    }
5235    for (i = start; i < start + count; ++i) {
5236      const element = elements[i];
5237      if (element.hidden) {
5238        continue;
5239      }
5240      if (element.active && drawActiveElementsOnTop) {
5241        active.push(element);
5242      } else {
5243        element.draw(ctx, area);
5244      }
5245    }
5246    for (i = 0; i < active.length; ++i) {
5247      active[i].draw(ctx, area);
5248    }
5249  }
5250  getStyle(index, active) {
5251    const mode = active ? 'active' : 'default';
5252    return index === undefined && this._cachedMeta.dataset
5253      ? this.resolveDatasetElementOptions(mode)
5254      : this.resolveDataElementOptions(index || 0, mode);
5255  }
5256  getContext(index, active, mode) {
5257    const dataset = this.getDataset();
5258    let context;
5259    if (index >= 0 && index < this._cachedMeta.data.length) {
5260      const element = this._cachedMeta.data[index];
5261      context = element.$context ||
5262        (element.$context = createDataContext(this.getContext(), index, element));
5263      context.parsed = this.getParsed(index);
5264      context.raw = dataset.data[index];
5265      context.index = context.dataIndex = index;
5266    } else {
5267      context = this.$context ||
5268        (this.$context = createDatasetContext(this.chart.getContext(), this.index));
5269      context.dataset = dataset;
5270      context.index = context.datasetIndex = this.index;
5271    }
5272    context.active = !!active;
5273    context.mode = mode;
5274    return context;
5275  }
5276  resolveDatasetElementOptions(mode) {
5277    return this._resolveElementOptions(this.datasetElementType.id, mode);
5278  }
5279  resolveDataElementOptions(index, mode) {
5280    return this._resolveElementOptions(this.dataElementType.id, mode, index);
5281  }
5282  _resolveElementOptions(elementType, mode = 'default', index) {
5283    const active = mode === 'active';
5284    const cache = this._cachedDataOpts;
5285    const cacheKey = elementType + '-' + mode;
5286    const cached = cache[cacheKey];
5287    const sharing = this.enableOptionSharing && (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.j)(index);
5288    if (cached) {
5289      return cloneIfNotShared(cached, sharing);
5290    }
5291    const config = this.chart.config;
5292    const scopeKeys = config.datasetElementScopeKeys(this._type, elementType);
5293    const prefixes = active ? [`${elementType}Hover`, 'hover', elementType, ''] : [elementType, ''];
5294    const scopes = config.getOptionScopes(this.getDataset(), scopeKeys);
5295    const names = Object.keys(_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.d.elements[elementType]);
5296    const context = () => this.getContext(index, active);
5297    const values = config.resolveNamedOptions(scopes, names, context, prefixes);
5298    if (values.$shared) {
5299      values.$shared = sharing;
5300      cache[cacheKey] = Object.freeze(cloneIfNotShared(values, sharing));
5301    }
5302    return values;
5303  }
5304  _resolveAnimations(index, transition, active) {
5305    const chart = this.chart;
5306    const cache = this._cachedDataOpts;
5307    const cacheKey = `animation-${transition}`;
5308    const cached = cache[cacheKey];
5309    if (cached) {
5310      return cached;
5311    }
5312    let options;
5313    if (chart.options.animation !== false) {
5314      const config = this.chart.config;
5315      const scopeKeys = config.datasetAnimationScopeKeys(this._type, transition);
5316      const scopes = config.getOptionScopes(this.getDataset(), scopeKeys);
5317      options = config.createResolver(scopes, this.getContext(index, active, transition));
5318    }
5319    const animations = new Animations(chart, options && options.animations);
5320    if (options && options._cacheable) {
5321      cache[cacheKey] = Object.freeze(animations);
5322    }
5323    return animations;
5324  }
5325  getSharedOptions(options) {
5326    if (!options.$shared) {
5327      return;
5328    }
5329    return this._sharedOptions || (this._sharedOptions = Object.assign({}, options));
5330  }
5331  includeOptions(mode, sharedOptions) {
5332    return !sharedOptions || isDirectUpdateMode(mode) || this.chart._animationsDisabled;
5333  }
5334  _getSharedOptions(start, mode) {
5335    const firstOpts = this.resolveDataElementOptions(start, mode);
5336    const previouslySharedOptions = this._sharedOptions;
5337    const sharedOptions = this.getSharedOptions(firstOpts);
5338    const includeOptions = this.includeOptions(mode, sharedOptions) || (sharedOptions !== previouslySharedOptions);
5339    this.updateSharedOptions(sharedOptions, mode, firstOpts);
5340    return {sharedOptions, includeOptions};
5341  }
5342  updateElement(element, index, properties, mode) {
5343    if (isDirectUpdateMode(mode)) {
5344      Object.assign(element, properties);
5345    } else {
5346      this._resolveAnimations(index, mode).update(element, properties);
5347    }
5348  }
5349  updateSharedOptions(sharedOptions, mode, newOptions) {
5350    if (sharedOptions && !isDirectUpdateMode(mode)) {
5351      this._resolveAnimations(undefined, mode).update(sharedOptions, newOptions);
5352    }
5353  }
5354  _setStyle(element, index, mode, active) {
5355    element.active = active;
5356    const options = this.getStyle(index, active);
5357    this._resolveAnimations(index, mode, active).update(element, {
5358      options: (!active && this.getSharedOptions(options)) || options
5359    });
5360  }
5361  removeHoverStyle(element, datasetIndex, index) {
5362    this._setStyle(element, index, 'active', false);
5363  }
5364  setHoverStyle(element, datasetIndex, index) {
5365    this._setStyle(element, index, 'active', true);
5366  }
5367  _removeDatasetHoverStyle() {
5368    const element = this._cachedMeta.dataset;
5369    if (element) {
5370      this._setStyle(element, undefined, 'active', false);
5371    }
5372  }
5373  _setDatasetHoverStyle() {
5374    const element = this._cachedMeta.dataset;
5375    if (element) {
5376      this._setStyle(element, undefined, 'active', true);
5377    }
5378  }
5379  _resyncElements(resetNewElements) {
5380    const data = this._data;
5381    const elements = this._cachedMeta.data;
5382    for (const [method, arg1, arg2] of this._syncList) {
5383      this[method](arg1, arg2);
5384    }
5385    this._syncList = [];
5386    const numMeta = elements.length;
5387    const numData = data.length;
5388    const count = Math.min(numData, numMeta);
5389    if (count) {
5390      this.parse(0, count);
5391    }
5392    if (numData > numMeta) {
5393      this._insertElements(numMeta, numData - numMeta, resetNewElements);
5394    } else if (numData < numMeta) {
5395      this._removeElements(numData, numMeta - numData);
5396    }
5397  }
5398  _insertElements(start, count, resetNewElements = true) {
5399    const meta = this._cachedMeta;
5400    const data = meta.data;
5401    const end = start + count;
5402    let i;
5403    const move = (arr) => {
5404      arr.length += count;
5405      for (i = arr.length - 1; i >= end; i--) {
5406        arr[i] = arr[i - count];
5407      }
5408    };
5409    move(data);
5410    for (i = start; i < end; ++i) {
5411      data[i] = new this.dataElementType();
5412    }
5413    if (this._parsing) {
5414      move(meta._parsed);
5415    }
5416    this.parse(start, count);
5417    if (resetNewElements) {
5418      this.updateElements(data, start, count, 'reset');
5419    }
5420  }
5421  updateElements(element, start, count, mode) {}
5422  _removeElements(start, count) {
5423    const meta = this._cachedMeta;
5424    if (this._parsing) {
5425      const removed = meta._parsed.splice(start, count);
5426      if (meta._stacked) {
5427        clearStacks(meta, removed);
5428      }
5429    }
5430    meta.data.splice(start, count);
5431  }
5432  _sync(args) {
5433    if (this._parsing) {
5434      this._syncList.push(args);
5435    } else {
5436      const [method, arg1, arg2] = args;
5437      this[method](arg1, arg2);
5438    }
5439    this.chart._dataChanges.push([this.index, ...args]);
5440  }
5441  _onDataPush() {
5442    const count = arguments.length;
5443    this._sync(['_insertElements', this.getDataset().data.length - count, count]);
5444  }
5445  _onDataPop() {
5446    this._sync(['_removeElements', this._cachedMeta.data.length - 1, 1]);
5447  }
5448  _onDataShift() {
5449    this._sync(['_removeElements', 0, 1]);
5450  }
5451  _onDataSplice(start, count) {
5452    if (count) {
5453      this._sync(['_removeElements', start, count]);
5454    }
5455    const newCount = arguments.length - 2;
5456    if (newCount) {
5457      this._sync(['_insertElements', start, newCount]);
5458    }
5459  }
5460  _onDataUnshift() {
5461    this._sync(['_insertElements', 0, arguments.length]);
5462  }
5463}
5464DatasetController.defaults = {};
5465DatasetController.prototype.datasetElementType = null;
5466DatasetController.prototype.dataElementType = null;
5467
5468function getAllScaleValues(scale, type) {
5469  if (!scale._cache.$bar) {
5470    const visibleMetas = scale.getMatchingVisibleMetas(type);
5471    let values = [];
5472    for (let i = 0, ilen = visibleMetas.length; i < ilen; i++) {
5473      values = values.concat(visibleMetas[i].controller.getAllParsedValues(scale));
5474    }
5475    scale._cache.$bar = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__._)(values.sort((a, b) => a - b));
5476  }
5477  return scale._cache.$bar;
5478}
5479function computeMinSampleSize(meta) {
5480  const scale = meta.iScale;
5481  const values = getAllScaleValues(scale, meta.type);
5482  let min = scale._length;
5483  let i, ilen, curr, prev;
5484  const updateMinAndPrev = () => {
5485    if (curr === 32767 || curr === -32768) {
5486      return;
5487    }
5488    if ((0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.j)(prev)) {
5489      min = Math.min(min, Math.abs(curr - prev) || min);
5490    }
5491    prev = curr;
5492  };
5493  for (i = 0, ilen = values.length; i < ilen; ++i) {
5494    curr = scale.getPixelForValue(values[i]);
5495    updateMinAndPrev();
5496  }
5497  prev = undefined;
5498  for (i = 0, ilen = scale.ticks.length; i < ilen; ++i) {
5499    curr = scale.getPixelForTick(i);
5500    updateMinAndPrev();
5501  }
5502  return min;
5503}
5504function computeFitCategoryTraits(index, ruler, options, stackCount) {
5505  const thickness = options.barThickness;
5506  let size, ratio;
5507  if ((0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.k)(thickness)) {
5508    size = ruler.min * options.categoryPercentage;
5509    ratio = options.barPercentage;
5510  } else {
5511    size = thickness * stackCount;
5512    ratio = 1;
5513  }
5514  return {
5515    chunk: size / stackCount,
5516    ratio,
5517    start: ruler.pixels[index] - (size / 2)
5518  };
5519}
5520function computeFlexCategoryTraits(index, ruler, options, stackCount) {
5521  const pixels = ruler.pixels;
5522  const curr = pixels[index];
5523  let prev = index > 0 ? pixels[index - 1] : null;
5524  let next = index < pixels.length - 1 ? pixels[index + 1] : null;
5525  const percent = options.categoryPercentage;
5526  if (prev === null) {
5527    prev = curr - (next === null ? ruler.end - ruler.start : next - curr);
5528  }
5529  if (next === null) {
5530    next = curr + curr - prev;
5531  }
5532  const start = curr - (curr - Math.min(prev, next)) / 2 * percent;
5533  const size = Math.abs(next - prev) / 2 * percent;
5534  return {
5535    chunk: size / stackCount,
5536    ratio: options.barPercentage,
5537    start
5538  };
5539}
5540function parseFloatBar(entry, item, vScale, i) {
5541  const startValue = vScale.parse(entry[0], i);
5542  const endValue = vScale.parse(entry[1], i);
5543  const min = Math.min(startValue, endValue);
5544  const max = Math.max(startValue, endValue);
5545  let barStart = min;
5546  let barEnd = max;
5547  if (Math.abs(min) > Math.abs(max)) {
5548    barStart = max;
5549    barEnd = min;
5550  }
5551  item[vScale.axis] = barEnd;
5552  item._custom = {
5553    barStart,
5554    barEnd,
5555    start: startValue,
5556    end: endValue,
5557    min,
5558    max
5559  };
5560}
5561function parseValue(entry, item, vScale, i) {
5562  if ((0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.b)(entry)) {
5563    parseFloatBar(entry, item, vScale, i);
5564  } else {
5565    item[vScale.axis] = vScale.parse(entry, i);
5566  }
5567  return item;
5568}
5569function parseArrayOrPrimitive(meta, data, start, count) {
5570  const iScale = meta.iScale;
5571  const vScale = meta.vScale;
5572  const labels = iScale.getLabels();
5573  const singleScale = iScale === vScale;
5574  const parsed = [];
5575  let i, ilen, item, entry;
5576  for (i = start, ilen = start + count; i < ilen; ++i) {
5577    entry = data[i];
5578    item = {};
5579    item[iScale.axis] = singleScale || iScale.parse(labels[i], i);
5580    parsed.push(parseValue(entry, item, vScale, i));
5581  }
5582  return parsed;
5583}
5584function isFloatBar(custom) {
5585  return custom && custom.barStart !== undefined && custom.barEnd !== undefined;
5586}
5587function barSign(size, vScale, actualBase) {
5588  if (size !== 0) {
5589    return (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.s)(size);
5590  }
5591  return (vScale.isHorizontal() ? 1 : -1) * (vScale.min >= actualBase ? 1 : -1);
5592}
5593function borderProps(properties) {
5594  let reverse, start, end, top, bottom;
5595  if (properties.horizontal) {
5596    reverse = properties.base > properties.x;
5597    start = 'left';
5598    end = 'right';
5599  } else {
5600    reverse = properties.base < properties.y;
5601    start = 'bottom';
5602    end = 'top';
5603  }
5604  if (reverse) {
5605    top = 'end';
5606    bottom = 'start';
5607  } else {
5608    top = 'start';
5609    bottom = 'end';
5610  }
5611  return {start, end, reverse, top, bottom};
5612}
5613function setBorderSkipped(properties, options, stack, index) {
5614  let edge = options.borderSkipped;
5615  const res = {};
5616  if (!edge) {
5617    properties.borderSkipped = res;
5618    return;
5619  }
5620  if (edge === true) {
5621    properties.borderSkipped = {top: true, right: true, bottom: true, left: true};
5622    return;
5623  }
5624  const {start, end, reverse, top, bottom} = borderProps(properties);
5625  if (edge === 'middle' && stack) {
5626    properties.enableBorderRadius = true;
5627    if ((stack._top || 0) === index) {
5628      edge = top;
5629    } else if ((stack._bottom || 0) === index) {
5630      edge = bottom;
5631    } else {
5632      res[parseEdge(bottom, start, end, reverse)] = true;
5633      edge = top;
5634    }
5635  }
5636  res[parseEdge(edge, start, end, reverse)] = true;
5637  properties.borderSkipped = res;
5638}
5639function parseEdge(edge, a, b, reverse) {
5640  if (reverse) {
5641    edge = swap(edge, a, b);
5642    edge = startEnd(edge, b, a);
5643  } else {
5644    edge = startEnd(edge, a, b);
5645  }
5646  return edge;
5647}
5648function swap(orig, v1, v2) {
5649  return orig === v1 ? v2 : orig === v2 ? v1 : orig;
5650}
5651function startEnd(v, start, end) {
5652  return v === 'start' ? start : v === 'end' ? end : v;
5653}
5654function setInflateAmount(properties, {inflateAmount}, ratio) {
5655  properties.inflateAmount = inflateAmount === 'auto'
5656    ? ratio === 1 ? 0.33 : 0
5657    : inflateAmount;
5658}
5659class BarController extends DatasetController {
5660  parsePrimitiveData(meta, data, start, count) {
5661    return parseArrayOrPrimitive(meta, data, start, count);
5662  }
5663  parseArrayData(meta, data, start, count) {
5664    return parseArrayOrPrimitive(meta, data, start, count);
5665  }
5666  parseObjectData(meta, data, start, count) {
5667    const {iScale, vScale} = meta;
5668    const {xAxisKey = 'x', yAxisKey = 'y'} = this._parsing;
5669    const iAxisKey = iScale.axis === 'x' ? xAxisKey : yAxisKey;
5670    const vAxisKey = vScale.axis === 'x' ? xAxisKey : yAxisKey;
5671    const parsed = [];
5672    let i, ilen, item, obj;
5673    for (i = start, ilen = start + count; i < ilen; ++i) {
5674      obj = data[i];
5675      item = {};
5676      item[iScale.axis] = iScale.parse((0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.f)(obj, iAxisKey), i);
5677      parsed.push(parseValue((0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.f)(obj, vAxisKey), item, vScale, i));
5678    }
5679    return parsed;
5680  }
5681  updateRangeFromParsed(range, scale, parsed, stack) {
5682    super.updateRangeFromParsed(range, scale, parsed, stack);
5683    const custom = parsed._custom;
5684    if (custom && scale === this._cachedMeta.vScale) {
5685      range.min = Math.min(range.min, custom.min);
5686      range.max = Math.max(range.max, custom.max);
5687    }
5688  }
5689  getMaxOverflow() {
5690    return 0;
5691  }
5692  getLabelAndValue(index) {
5693    const meta = this._cachedMeta;
5694    const {iScale, vScale} = meta;
5695    const parsed = this.getParsed(index);
5696    const custom = parsed._custom;
5697    const value = isFloatBar(custom)
5698      ? '[' + custom.start + ', ' + custom.end + ']'
5699      : '' + vScale.getLabelForValue(parsed[vScale.axis]);
5700    return {
5701      label: '' + iScale.getLabelForValue(parsed[iScale.axis]),
5702      value
5703    };
5704  }
5705  initialize() {
5706    this.enableOptionSharing = true;
5707    super.initialize();
5708    const meta = this._cachedMeta;
5709    meta.stack = this.getDataset().stack;
5710  }
5711  update(mode) {
5712    const meta = this._cachedMeta;
5713    this.updateElements(meta.data, 0, meta.data.length, mode);
5714  }
5715  updateElements(bars, start, count, mode) {
5716    const reset = mode === 'reset';
5717    const {index, _cachedMeta: {vScale}} = this;
5718    const base = vScale.getBasePixel();
5719    const horizontal = vScale.isHorizontal();
5720    const ruler = this._getRuler();
5721    const {sharedOptions, includeOptions} = this._getSharedOptions(start, mode);
5722    for (let i = start; i < start + count; i++) {
5723      const parsed = this.getParsed(i);
5724      const vpixels = reset || (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.k)(parsed[vScale.axis]) ? {base, head: base} : this._calculateBarValuePixels(i);
5725      const ipixels = this._calculateBarIndexPixels(i, ruler);
5726      const stack = (parsed._stacks || {})[vScale.axis];
5727      const properties = {
5728        horizontal,
5729        base: vpixels.base,
5730        enableBorderRadius: !stack || isFloatBar(parsed._custom) || (index === stack._top || index === stack._bottom),
5731        x: horizontal ? vpixels.head : ipixels.center,
5732        y: horizontal ? ipixels.center : vpixels.head,
5733        height: horizontal ? ipixels.size : Math.abs(vpixels.size),
5734        width: horizontal ? Math.abs(vpixels.size) : ipixels.size
5735      };
5736      if (includeOptions) {
5737        properties.options = sharedOptions || this.resolveDataElementOptions(i, bars[i].active ? 'active' : mode);
5738      }
5739      const options = properties.options || bars[i].options;
5740      setBorderSkipped(properties, options, stack, index);
5741      setInflateAmount(properties, options, ruler.ratio);
5742      this.updateElement(bars[i], i, properties, mode);
5743    }
5744  }
5745  _getStacks(last, dataIndex) {
5746    const {iScale} = this._cachedMeta;
5747    const metasets = iScale.getMatchingVisibleMetas(this._type)
5748      .filter(meta => meta.controller.options.grouped);
5749    const stacked = iScale.options.stacked;
5750    const stacks = [];
5751    const skipNull = (meta) => {
5752      const parsed = meta.controller.getParsed(dataIndex);
5753      const val = parsed && parsed[meta.vScale.axis];
5754      if ((0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.k)(val) || isNaN(val)) {
5755        return true;
5756      }
5757    };
5758    for (const meta of metasets) {
5759      if (dataIndex !== undefined && skipNull(meta)) {
5760        continue;
5761      }
5762      if (stacked === false || stacks.indexOf(meta.stack) === -1 ||
5763				(stacked === undefined && meta.stack === undefined)) {
5764        stacks.push(meta.stack);
5765      }
5766      if (meta.index === last) {
5767        break;
5768      }
5769    }
5770    if (!stacks.length) {
5771      stacks.push(undefined);
5772    }
5773    return stacks;
5774  }
5775  _getStackCount(index) {
5776    return this._getStacks(undefined, index).length;
5777  }
5778  _getStackIndex(datasetIndex, name, dataIndex) {
5779    const stacks = this._getStacks(datasetIndex, dataIndex);
5780    const index = (name !== undefined)
5781      ? stacks.indexOf(name)
5782      : -1;
5783    return (index === -1)
5784      ? stacks.length - 1
5785      : index;
5786  }
5787  _getRuler() {
5788    const opts = this.options;
5789    const meta = this._cachedMeta;
5790    const iScale = meta.iScale;
5791    const pixels = [];
5792    let i, ilen;
5793    for (i = 0, ilen = meta.data.length; i < ilen; ++i) {
5794      pixels.push(iScale.getPixelForValue(this.getParsed(i)[iScale.axis], i));
5795    }
5796    const barThickness = opts.barThickness;
5797    const min = barThickness || computeMinSampleSize(meta);
5798    return {
5799      min,
5800      pixels,
5801      start: iScale._startPixel,
5802      end: iScale._endPixel,
5803      stackCount: this._getStackCount(),
5804      scale: iScale,
5805      grouped: opts.grouped,
5806      ratio: barThickness ? 1 : opts.categoryPercentage * opts.barPercentage
5807    };
5808  }
5809  _calculateBarValuePixels(index) {
5810    const {_cachedMeta: {vScale, _stacked}, options: {base: baseValue, minBarLength}} = this;
5811    const actualBase = baseValue || 0;
5812    const parsed = this.getParsed(index);
5813    const custom = parsed._custom;
5814    const floating = isFloatBar(custom);
5815    let value = parsed[vScale.axis];
5816    let start = 0;
5817    let length = _stacked ? this.applyStack(vScale, parsed, _stacked) : value;
5818    let head, size;
5819    if (length !== value) {
5820      start = length - value;
5821      length = value;
5822    }
5823    if (floating) {
5824      value = custom.barStart;
5825      length = custom.barEnd - custom.barStart;
5826      if (value !== 0 && (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.s)(value) !== (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.s)(custom.barEnd)) {
5827        start = 0;
5828      }
5829      start += value;
5830    }
5831    const startValue = !(0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.k)(baseValue) && !floating ? baseValue : start;
5832    let base = vScale.getPixelForValue(startValue);
5833    if (this.chart.getDataVisibility(index)) {
5834      head = vScale.getPixelForValue(start + length);
5835    } else {
5836      head = base;
5837    }
5838    size = head - base;
5839    if (Math.abs(size) < minBarLength) {
5840      size = barSign(size, vScale, actualBase) * minBarLength;
5841      if (value === actualBase) {
5842        base -= size / 2;
5843      }
5844      const startPixel = vScale.getPixelForDecimal(0);
5845      const endPixel = vScale.getPixelForDecimal(1);
5846      const min = Math.min(startPixel, endPixel);
5847      const max = Math.max(startPixel, endPixel);
5848      base = Math.max(Math.min(base, max), min);
5849      head = base + size;
5850    }
5851    if (base === vScale.getPixelForValue(actualBase)) {
5852      const halfGrid = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.s)(size) * vScale.getLineWidthForValue(actualBase) / 2;
5853      base += halfGrid;
5854      size -= halfGrid;
5855    }
5856    return {
5857      size,
5858      base,
5859      head,
5860      center: head + size / 2
5861    };
5862  }
5863  _calculateBarIndexPixels(index, ruler) {
5864    const scale = ruler.scale;
5865    const options = this.options;
5866    const skipNull = options.skipNull;
5867    const maxBarThickness = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.v)(options.maxBarThickness, Infinity);
5868    let center, size;
5869    if (ruler.grouped) {
5870      const stackCount = skipNull ? this._getStackCount(index) : ruler.stackCount;
5871      const range = options.barThickness === 'flex'
5872        ? computeFlexCategoryTraits(index, ruler, options, stackCount)
5873        : computeFitCategoryTraits(index, ruler, options, stackCount);
5874      const stackIndex = this._getStackIndex(this.index, this._cachedMeta.stack, skipNull ? index : undefined);
5875      center = range.start + (range.chunk * stackIndex) + (range.chunk / 2);
5876      size = Math.min(maxBarThickness, range.chunk * range.ratio);
5877    } else {
5878      center = scale.getPixelForValue(this.getParsed(index)[scale.axis], index);
5879      size = Math.min(maxBarThickness, ruler.min * ruler.ratio);
5880    }
5881    return {
5882      base: center - size / 2,
5883      head: center + size / 2,
5884      center,
5885      size
5886    };
5887  }
5888  draw() {
5889    const meta = this._cachedMeta;
5890    const vScale = meta.vScale;
5891    const rects = meta.data;
5892    const ilen = rects.length;
5893    let i = 0;
5894    for (; i < ilen; ++i) {
5895      if (this.getParsed(i)[vScale.axis] !== null) {
5896        rects[i].draw(this._ctx);
5897      }
5898    }
5899  }
5900}
5901BarController.id = 'bar';
5902BarController.defaults = {
5903  datasetElementType: false,
5904  dataElementType: 'bar',
5905  categoryPercentage: 0.8,
5906  barPercentage: 0.9,
5907  grouped: true,
5908  animations: {
5909    numbers: {
5910      type: 'number',
5911      properties: ['x', 'y', 'base', 'width', 'height']
5912    }
5913  }
5914};
5915BarController.overrides = {
5916  scales: {
5917    _index_: {
5918      type: 'category',
5919      offset: true,
5920      grid: {
5921        offset: true
5922      }
5923    },
5924    _value_: {
5925      type: 'linear',
5926      beginAtZero: true,
5927    }
5928  }
5929};
5930
5931class BubbleController extends DatasetController {
5932  initialize() {
5933    this.enableOptionSharing = true;
5934    super.initialize();
5935  }
5936  parsePrimitiveData(meta, data, start, count) {
5937    const parsed = super.parsePrimitiveData(meta, data, start, count);
5938    for (let i = 0; i < parsed.length; i++) {
5939      parsed[i]._custom = this.resolveDataElementOptions(i + start).radius;
5940    }
5941    return parsed;
5942  }
5943  parseArrayData(meta, data, start, count) {
5944    const parsed = super.parseArrayData(meta, data, start, count);
5945    for (let i = 0; i < parsed.length; i++) {
5946      const item = data[start + i];
5947      parsed[i]._custom = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.v)(item[2], this.resolveDataElementOptions(i + start).radius);
5948    }
5949    return parsed;
5950  }
5951  parseObjectData(meta, data, start, count) {
5952    const parsed = super.parseObjectData(meta, data, start, count);
5953    for (let i = 0; i < parsed.length; i++) {
5954      const item = data[start + i];
5955      parsed[i]._custom = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.v)(item && item.r && +item.r, this.resolveDataElementOptions(i + start).radius);
5956    }
5957    return parsed;
5958  }
5959  getMaxOverflow() {
5960    const data = this._cachedMeta.data;
5961    let max = 0;
5962    for (let i = data.length - 1; i >= 0; --i) {
5963      max = Math.max(max, data[i].size(this.resolveDataElementOptions(i)) / 2);
5964    }
5965    return max > 0 && max;
5966  }
5967  getLabelAndValue(index) {
5968    const meta = this._cachedMeta;
5969    const {xScale, yScale} = meta;
5970    const parsed = this.getParsed(index);
5971    const x = xScale.getLabelForValue(parsed.x);
5972    const y = yScale.getLabelForValue(parsed.y);
5973    const r = parsed._custom;
5974    return {
5975      label: meta.label,
5976      value: '(' + x + ', ' + y + (r ? ', ' + r : '') + ')'
5977    };
5978  }
5979  update(mode) {
5980    const points = this._cachedMeta.data;
5981    this.updateElements(points, 0, points.length, mode);
5982  }
5983  updateElements(points, start, count, mode) {
5984    const reset = mode === 'reset';
5985    const {iScale, vScale} = this._cachedMeta;
5986    const {sharedOptions, includeOptions} = this._getSharedOptions(start, mode);
5987    const iAxis = iScale.axis;
5988    const vAxis = vScale.axis;
5989    for (let i = start; i < start + count; i++) {
5990      const point = points[i];
5991      const parsed = !reset && this.getParsed(i);
5992      const properties = {};
5993      const iPixel = properties[iAxis] = reset ? iScale.getPixelForDecimal(0.5) : iScale.getPixelForValue(parsed[iAxis]);
5994      const vPixel = properties[vAxis] = reset ? vScale.getBasePixel() : vScale.getPixelForValue(parsed[vAxis]);
5995      properties.skip = isNaN(iPixel) || isNaN(vPixel);
5996      if (includeOptions) {
5997        properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);
5998        if (reset) {
5999          properties.options.radius = 0;
6000        }
6001      }
6002      this.updateElement(point, i, properties, mode);
6003    }
6004  }
6005  resolveDataElementOptions(index, mode) {
6006    const parsed = this.getParsed(index);
6007    let values = super.resolveDataElementOptions(index, mode);
6008    if (values.$shared) {
6009      values = Object.assign({}, values, {$shared: false});
6010    }
6011    const radius = values.radius;
6012    if (mode !== 'active') {
6013      values.radius = 0;
6014    }
6015    values.radius += (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.v)(parsed && parsed._custom, radius);
6016    return values;
6017  }
6018}
6019BubbleController.id = 'bubble';
6020BubbleController.defaults = {
6021  datasetElementType: false,
6022  dataElementType: 'point',
6023  animations: {
6024    numbers: {
6025      type: 'number',
6026      properties: ['x', 'y', 'borderWidth', 'radius']
6027    }
6028  }
6029};
6030BubbleController.overrides = {
6031  scales: {
6032    x: {
6033      type: 'linear'
6034    },
6035    y: {
6036      type: 'linear'
6037    }
6038  },
6039  plugins: {
6040    tooltip: {
6041      callbacks: {
6042        title() {
6043          return '';
6044        }
6045      }
6046    }
6047  }
6048};
6049
6050function getRatioAndOffset(rotation, circumference, cutout) {
6051  let ratioX = 1;
6052  let ratioY = 1;
6053  let offsetX = 0;
6054  let offsetY = 0;
6055  if (circumference < _chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.T) {
6056    const startAngle = rotation;
6057    const endAngle = startAngle + circumference;
6058    const startX = Math.cos(startAngle);
6059    const startY = Math.sin(startAngle);
6060    const endX = Math.cos(endAngle);
6061    const endY = Math.sin(endAngle);
6062    const calcMax = (angle, a, b) => (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.p)(angle, startAngle, endAngle, true) ? 1 : Math.max(a, a * cutout, b, b * cutout);
6063    const calcMin = (angle, a, b) => (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.p)(angle, startAngle, endAngle, true) ? -1 : Math.min(a, a * cutout, b, b * cutout);
6064    const maxX = calcMax(0, startX, endX);
6065    const maxY = calcMax(_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.H, startY, endY);
6066    const minX = calcMin(_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.P, startX, endX);
6067    const minY = calcMin(_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.P + _chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.H, startY, endY);
6068    ratioX = (maxX - minX) / 2;
6069    ratioY = (maxY - minY) / 2;
6070    offsetX = -(maxX + minX) / 2;
6071    offsetY = -(maxY + minY) / 2;
6072  }
6073  return {ratioX, ratioY, offsetX, offsetY};
6074}
6075class DoughnutController extends DatasetController {
6076  constructor(chart, datasetIndex) {
6077    super(chart, datasetIndex);
6078    this.enableOptionSharing = true;
6079    this.innerRadius = undefined;
6080    this.outerRadius = undefined;
6081    this.offsetX = undefined;
6082    this.offsetY = undefined;
6083  }
6084  linkScales() {}
6085  parse(start, count) {
6086    const data = this.getDataset().data;
6087    const meta = this._cachedMeta;
6088    if (this._parsing === false) {
6089      meta._parsed = data;
6090    } else {
6091      let getter = (i) => +data[i];
6092      if ((0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.i)(data[start])) {
6093        const {key = 'value'} = this._parsing;
6094        getter = (i) => +(0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.f)(data[i], key);
6095      }
6096      let i, ilen;
6097      for (i = start, ilen = start + count; i < ilen; ++i) {
6098        meta._parsed[i] = getter(i);
6099      }
6100    }
6101  }
6102  _getRotation() {
6103    return (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.t)(this.options.rotation - 90);
6104  }
6105  _getCircumference() {
6106    return (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.t)(this.options.circumference);
6107  }
6108  _getRotationExtents() {
6109    let min = _chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.T;
6110    let max = -_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.T;
6111    for (let i = 0; i < this.chart.data.datasets.length; ++i) {
6112      if (this.chart.isDatasetVisible(i)) {
6113        const controller = this.chart.getDatasetMeta(i).controller;
6114        const rotation = controller._getRotation();
6115        const circumference = controller._getCircumference();
6116        min = Math.min(min, rotation);
6117        max = Math.max(max, rotation + circumference);
6118      }
6119    }
6120    return {
6121      rotation: min,
6122      circumference: max - min,
6123    };
6124  }
6125  update(mode) {
6126    const chart = this.chart;
6127    const {chartArea} = chart;
6128    const meta = this._cachedMeta;
6129    const arcs = meta.data;
6130    const spacing = this.getMaxBorderWidth() + this.getMaxOffset(arcs) + this.options.spacing;
6131    const maxSize = Math.max((Math.min(chartArea.width, chartArea.height) - spacing) / 2, 0);
6132    const cutout = Math.min((0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.m)(this.options.cutout, maxSize), 1);
6133    const chartWeight = this._getRingWeight(this.index);
6134    const {circumference, rotation} = this._getRotationExtents();
6135    const {ratioX, ratioY, offsetX, offsetY} = getRatioAndOffset(rotation, circumference, cutout);
6136    const maxWidth = (chartArea.width - spacing) / ratioX;
6137    const maxHeight = (chartArea.height - spacing) / ratioY;
6138    const maxRadius = Math.max(Math.min(maxWidth, maxHeight) / 2, 0);
6139    const outerRadius = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.n)(this.options.radius, maxRadius);
6140    const innerRadius = Math.max(outerRadius * cutout, 0);
6141    const radiusLength = (outerRadius - innerRadius) / this._getVisibleDatasetWeightTotal();
6142    this.offsetX = offsetX * outerRadius;
6143    this.offsetY = offsetY * outerRadius;
6144    meta.total = this.calculateTotal();
6145    this.outerRadius = outerRadius - radiusLength * this._getRingWeightOffset(this.index);
6146    this.innerRadius = Math.max(this.outerRadius - radiusLength * chartWeight, 0);
6147    this.updateElements(arcs, 0, arcs.length, mode);
6148  }
6149  _circumference(i, reset) {
6150    const opts = this.options;
6151    const meta = this._cachedMeta;
6152    const circumference = this._getCircumference();
6153    if ((reset && opts.animation.animateRotate) || !this.chart.getDataVisibility(i) || meta._parsed[i] === null || meta.data[i].hidden) {
6154      return 0;
6155    }
6156    return this.calculateCircumference(meta._parsed[i] * circumference / _chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.T);
6157  }
6158  updateElements(arcs, start, count, mode) {
6159    const reset = mode === 'reset';
6160    const chart = this.chart;
6161    const chartArea = chart.chartArea;
6162    const opts = chart.options;
6163    const animationOpts = opts.animation;
6164    const centerX = (chartArea.left + chartArea.right) / 2;
6165    const centerY = (chartArea.top + chartArea.bottom) / 2;
6166    const animateScale = reset && animationOpts.animateScale;
6167    const innerRadius = animateScale ? 0 : this.innerRadius;
6168    const outerRadius = animateScale ? 0 : this.outerRadius;
6169    const {sharedOptions, includeOptions} = this._getSharedOptions(start, mode);
6170    let startAngle = this._getRotation();
6171    let i;
6172    for (i = 0; i < start; ++i) {
6173      startAngle += this._circumference(i, reset);
6174    }
6175    for (i = start; i < start + count; ++i) {
6176      const circumference = this._circumference(i, reset);
6177      const arc = arcs[i];
6178      const properties = {
6179        x: centerX + this.offsetX,
6180        y: centerY + this.offsetY,
6181        startAngle,
6182        endAngle: startAngle + circumference,
6183        circumference,
6184        outerRadius,
6185        innerRadius
6186      };
6187      if (includeOptions) {
6188        properties.options = sharedOptions || this.resolveDataElementOptions(i, arc.active ? 'active' : mode);
6189      }
6190      startAngle += circumference;
6191      this.updateElement(arc, i, properties, mode);
6192    }
6193  }
6194  calculateTotal() {
6195    const meta = this._cachedMeta;
6196    const metaData = meta.data;
6197    let total = 0;
6198    let i;
6199    for (i = 0; i < metaData.length; i++) {
6200      const value = meta._parsed[i];
6201      if (value !== null && !isNaN(value) && this.chart.getDataVisibility(i) && !metaData[i].hidden) {
6202        total += Math.abs(value);
6203      }
6204    }
6205    return total;
6206  }
6207  calculateCircumference(value) {
6208    const total = this._cachedMeta.total;
6209    if (total > 0 && !isNaN(value)) {
6210      return _chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.T * (Math.abs(value) / total);
6211    }
6212    return 0;
6213  }
6214  getLabelAndValue(index) {
6215    const meta = this._cachedMeta;
6216    const chart = this.chart;
6217    const labels = chart.data.labels || [];
6218    const value = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.o)(meta._parsed[index], chart.options.locale);
6219    return {
6220      label: labels[index] || '',
6221      value,
6222    };
6223  }
6224  getMaxBorderWidth(arcs) {
6225    let max = 0;
6226    const chart = this.chart;
6227    let i, ilen, meta, controller, options;
6228    if (!arcs) {
6229      for (i = 0, ilen = chart.data.datasets.length; i < ilen; ++i) {
6230        if (chart.isDatasetVisible(i)) {
6231          meta = chart.getDatasetMeta(i);
6232          arcs = meta.data;
6233          controller = meta.controller;
6234          break;
6235        }
6236      }
6237    }
6238    if (!arcs) {
6239      return 0;
6240    }
6241    for (i = 0, ilen = arcs.length; i < ilen; ++i) {
6242      options = controller.resolveDataElementOptions(i);
6243      if (options.borderAlign !== 'inner') {
6244        max = Math.max(max, options.borderWidth || 0, options.hoverBorderWidth || 0);
6245      }
6246    }
6247    return max;
6248  }
6249  getMaxOffset(arcs) {
6250    let max = 0;
6251    for (let i = 0, ilen = arcs.length; i < ilen; ++i) {
6252      const options = this.resolveDataElementOptions(i);
6253      max = Math.max(max, options.offset || 0, options.hoverOffset || 0);
6254    }
6255    return max;
6256  }
6257  _getRingWeightOffset(datasetIndex) {
6258    let ringWeightOffset = 0;
6259    for (let i = 0; i < datasetIndex; ++i) {
6260      if (this.chart.isDatasetVisible(i)) {
6261        ringWeightOffset += this._getRingWeight(i);
6262      }
6263    }
6264    return ringWeightOffset;
6265  }
6266  _getRingWeight(datasetIndex) {
6267    return Math.max((0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.v)(this.chart.data.datasets[datasetIndex].weight, 1), 0);
6268  }
6269  _getVisibleDatasetWeightTotal() {
6270    return this._getRingWeightOffset(this.chart.data.datasets.length) || 1;
6271  }
6272}
6273DoughnutController.id = 'doughnut';
6274DoughnutController.defaults = {
6275  datasetElementType: false,
6276  dataElementType: 'arc',
6277  animation: {
6278    animateRotate: true,
6279    animateScale: false
6280  },
6281  animations: {
6282    numbers: {
6283      type: 'number',
6284      properties: ['circumference', 'endAngle', 'innerRadius', 'outerRadius', 'startAngle', 'x', 'y', 'offset', 'borderWidth', 'spacing']
6285    },
6286  },
6287  cutout: '50%',
6288  rotation: 0,
6289  circumference: 360,
6290  radius: '100%',
6291  spacing: 0,
6292  indexAxis: 'r',
6293};
6294DoughnutController.descriptors = {
6295  _scriptable: (name) => name !== 'spacing',
6296  _indexable: (name) => name !== 'spacing',
6297};
6298DoughnutController.overrides = {
6299  aspectRatio: 1,
6300  plugins: {
6301    legend: {
6302      labels: {
6303        generateLabels(chart) {
6304          const data = chart.data;
6305          if (data.labels.length && data.datasets.length) {
6306            const {labels: {pointStyle}} = chart.legend.options;
6307            return data.labels.map((label, i) => {
6308              const meta = chart.getDatasetMeta(0);
6309              const style = meta.controller.getStyle(i);
6310              return {
6311                text: label,
6312                fillStyle: style.backgroundColor,
6313                strokeStyle: style.borderColor,
6314                lineWidth: style.borderWidth,
6315                pointStyle: pointStyle,
6316                hidden: !chart.getDataVisibility(i),
6317                index: i
6318              };
6319            });
6320          }
6321          return [];
6322        }
6323      },
6324      onClick(e, legendItem, legend) {
6325        legend.chart.toggleDataVisibility(legendItem.index);
6326        legend.chart.update();
6327      }
6328    },
6329    tooltip: {
6330      callbacks: {
6331        title() {
6332          return '';
6333        },
6334        label(tooltipItem) {
6335          let dataLabel = tooltipItem.label;
6336          const value = ': ' + tooltipItem.formattedValue;
6337          if ((0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.b)(dataLabel)) {
6338            dataLabel = dataLabel.slice();
6339            dataLabel[0] += value;
6340          } else {
6341            dataLabel += value;
6342          }
6343          return dataLabel;
6344        }
6345      }
6346    }
6347  }
6348};
6349
6350class LineController extends DatasetController {
6351  initialize() {
6352    this.enableOptionSharing = true;
6353    this.supportsDecimation = true;
6354    super.initialize();
6355  }
6356  update(mode) {
6357    const meta = this._cachedMeta;
6358    const {dataset: line, data: points = [], _dataset} = meta;
6359    const animationsDisabled = this.chart._animationsDisabled;
6360    let {start, count} = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.q)(meta, points, animationsDisabled);
6361    this._drawStart = start;
6362    this._drawCount = count;
6363    if ((0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.w)(meta)) {
6364      start = 0;
6365      count = points.length;
6366    }
6367    line._chart = this.chart;
6368    line._datasetIndex = this.index;
6369    line._decimated = !!_dataset._decimated;
6370    line.points = points;
6371    const options = this.resolveDatasetElementOptions(mode);
6372    if (!this.options.showLine) {
6373      options.borderWidth = 0;
6374    }
6375    options.segment = this.options.segment;
6376    this.updateElement(line, undefined, {
6377      animated: !animationsDisabled,
6378      options
6379    }, mode);
6380    this.updateElements(points, start, count, mode);
6381  }
6382  updateElements(points, start, count, mode) {
6383    const reset = mode === 'reset';
6384    const {iScale, vScale, _stacked, _dataset} = this._cachedMeta;
6385    const {sharedOptions, includeOptions} = this._getSharedOptions(start, mode);
6386    const iAxis = iScale.axis;
6387    const vAxis = vScale.axis;
6388    const {spanGaps, segment} = this.options;
6389    const maxGapLength = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.x)(spanGaps) ? spanGaps : Number.POSITIVE_INFINITY;
6390    const directUpdate = this.chart._animationsDisabled || reset || mode === 'none';
6391    let prevParsed = start > 0 && this.getParsed(start - 1);
6392    for (let i = start; i < start + count; ++i) {
6393      const point = points[i];
6394      const parsed = this.getParsed(i);
6395      const properties = directUpdate ? point : {};
6396      const nullData = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.k)(parsed[vAxis]);
6397      const iPixel = properties[iAxis] = iScale.getPixelForValue(parsed[iAxis], i);
6398      const vPixel = properties[vAxis] = reset || nullData ? vScale.getBasePixel() : vScale.getPixelForValue(_stacked ? this.applyStack(vScale, parsed, _stacked) : parsed[vAxis], i);
6399      properties.skip = isNaN(iPixel) || isNaN(vPixel) || nullData;
6400      properties.stop = i > 0 && (Math.abs(parsed[iAxis] - prevParsed[iAxis])) > maxGapLength;
6401      if (segment) {
6402        properties.parsed = parsed;
6403        properties.raw = _dataset.data[i];
6404      }
6405      if (includeOptions) {
6406        properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);
6407      }
6408      if (!directUpdate) {
6409        this.updateElement(point, i, properties, mode);
6410      }
6411      prevParsed = parsed;
6412    }
6413  }
6414  getMaxOverflow() {
6415    const meta = this._cachedMeta;
6416    const dataset = meta.dataset;
6417    const border = dataset.options && dataset.options.borderWidth || 0;
6418    const data = meta.data || [];
6419    if (!data.length) {
6420      return border;
6421    }
6422    const firstPoint = data[0].size(this.resolveDataElementOptions(0));
6423    const lastPoint = data[data.length - 1].size(this.resolveDataElementOptions(data.length - 1));
6424    return Math.max(border, firstPoint, lastPoint) / 2;
6425  }
6426  draw() {
6427    const meta = this._cachedMeta;
6428    meta.dataset.updateControlPoints(this.chart.chartArea, meta.iScale.axis);
6429    super.draw();
6430  }
6431}
6432LineController.id = 'line';
6433LineController.defaults = {
6434  datasetElementType: 'line',
6435  dataElementType: 'point',
6436  showLine: true,
6437  spanGaps: false,
6438};
6439LineController.overrides = {
6440  scales: {
6441    _index_: {
6442      type: 'category',
6443    },
6444    _value_: {
6445      type: 'linear',
6446    },
6447  }
6448};
6449
6450class PolarAreaController extends DatasetController {
6451  constructor(chart, datasetIndex) {
6452    super(chart, datasetIndex);
6453    this.innerRadius = undefined;
6454    this.outerRadius = undefined;
6455  }
6456  getLabelAndValue(index) {
6457    const meta = this._cachedMeta;
6458    const chart = this.chart;
6459    const labels = chart.data.labels || [];
6460    const value = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.o)(meta._parsed[index].r, chart.options.locale);
6461    return {
6462      label: labels[index] || '',
6463      value,
6464    };
6465  }
6466  parseObjectData(meta, data, start, count) {
6467    return _chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.y.bind(this)(meta, data, start, count);
6468  }
6469  update(mode) {
6470    const arcs = this._cachedMeta.data;
6471    this._updateRadius();
6472    this.updateElements(arcs, 0, arcs.length, mode);
6473  }
6474  getMinMax() {
6475    const meta = this._cachedMeta;
6476    const range = {min: Number.POSITIVE_INFINITY, max: Number.NEGATIVE_INFINITY};
6477    meta.data.forEach((element, index) => {
6478      const parsed = this.getParsed(index).r;
6479      if (!isNaN(parsed) && this.chart.getDataVisibility(index)) {
6480        if (parsed < range.min) {
6481          range.min = parsed;
6482        }
6483        if (parsed > range.max) {
6484          range.max = parsed;
6485        }
6486      }
6487    });
6488    return range;
6489  }
6490  _updateRadius() {
6491    const chart = this.chart;
6492    const chartArea = chart.chartArea;
6493    const opts = chart.options;
6494    const minSize = Math.min(chartArea.right - chartArea.left, chartArea.bottom - chartArea.top);
6495    const outerRadius = Math.max(minSize / 2, 0);
6496    const innerRadius = Math.max(opts.cutoutPercentage ? (outerRadius / 100) * (opts.cutoutPercentage) : 1, 0);
6497    const radiusLength = (outerRadius - innerRadius) / chart.getVisibleDatasetCount();
6498    this.outerRadius = outerRadius - (radiusLength * this.index);
6499    this.innerRadius = this.outerRadius - radiusLength;
6500  }
6501  updateElements(arcs, start, count, mode) {
6502    const reset = mode === 'reset';
6503    const chart = this.chart;
6504    const opts = chart.options;
6505    const animationOpts = opts.animation;
6506    const scale = this._cachedMeta.rScale;
6507    const centerX = scale.xCenter;
6508    const centerY = scale.yCenter;
6509    const datasetStartAngle = scale.getIndexAngle(0) - 0.5 * _chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.P;
6510    let angle = datasetStartAngle;
6511    let i;
6512    const defaultAngle = 360 / this.countVisibleElements();
6513    for (i = 0; i < start; ++i) {
6514      angle += this._computeAngle(i, mode, defaultAngle);
6515    }
6516    for (i = start; i < start + count; i++) {
6517      const arc = arcs[i];
6518      let startAngle = angle;
6519      let endAngle = angle + this._computeAngle(i, mode, defaultAngle);
6520      let outerRadius = chart.getDataVisibility(i) ? scale.getDistanceFromCenterForValue(this.getParsed(i).r) : 0;
6521      angle = endAngle;
6522      if (reset) {
6523        if (animationOpts.animateScale) {
6524          outerRadius = 0;
6525        }
6526        if (animationOpts.animateRotate) {
6527          startAngle = endAngle = datasetStartAngle;
6528        }
6529      }
6530      const properties = {
6531        x: centerX,
6532        y: centerY,
6533        innerRadius: 0,
6534        outerRadius,
6535        startAngle,
6536        endAngle,
6537        options: this.resolveDataElementOptions(i, arc.active ? 'active' : mode)
6538      };
6539      this.updateElement(arc, i, properties, mode);
6540    }
6541  }
6542  countVisibleElements() {
6543    const meta = this._cachedMeta;
6544    let count = 0;
6545    meta.data.forEach((element, index) => {
6546      if (!isNaN(this.getParsed(index).r) && this.chart.getDataVisibility(index)) {
6547        count++;
6548      }
6549    });
6550    return count;
6551  }
6552  _computeAngle(index, mode, defaultAngle) {
6553    return this.chart.getDataVisibility(index)
6554      ? (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.t)(this.resolveDataElementOptions(index, mode).angle || defaultAngle)
6555      : 0;
6556  }
6557}
6558PolarAreaController.id = 'polarArea';
6559PolarAreaController.defaults = {
6560  dataElementType: 'arc',
6561  animation: {
6562    animateRotate: true,
6563    animateScale: true
6564  },
6565  animations: {
6566    numbers: {
6567      type: 'number',
6568      properties: ['x', 'y', 'startAngle', 'endAngle', 'innerRadius', 'outerRadius']
6569    },
6570  },
6571  indexAxis: 'r',
6572  startAngle: 0,
6573};
6574PolarAreaController.overrides = {
6575  aspectRatio: 1,
6576  plugins: {
6577    legend: {
6578      labels: {
6579        generateLabels(chart) {
6580          const data = chart.data;
6581          if (data.labels.length && data.datasets.length) {
6582            const {labels: {pointStyle}} = chart.legend.options;
6583            return data.labels.map((label, i) => {
6584              const meta = chart.getDatasetMeta(0);
6585              const style = meta.controller.getStyle(i);
6586              return {
6587                text: label,
6588                fillStyle: style.backgroundColor,
6589                strokeStyle: style.borderColor,
6590                lineWidth: style.borderWidth,
6591                pointStyle: pointStyle,
6592                hidden: !chart.getDataVisibility(i),
6593                index: i
6594              };
6595            });
6596          }
6597          return [];
6598        }
6599      },
6600      onClick(e, legendItem, legend) {
6601        legend.chart.toggleDataVisibility(legendItem.index);
6602        legend.chart.update();
6603      }
6604    },
6605    tooltip: {
6606      callbacks: {
6607        title() {
6608          return '';
6609        },
6610        label(context) {
6611          return context.chart.data.labels[context.dataIndex] + ': ' + context.formattedValue;
6612        }
6613      }
6614    }
6615  },
6616  scales: {
6617    r: {
6618      type: 'radialLinear',
6619      angleLines: {
6620        display: false
6621      },
6622      beginAtZero: true,
6623      grid: {
6624        circular: true
6625      },
6626      pointLabels: {
6627        display: false
6628      },
6629      startAngle: 0
6630    }
6631  }
6632};
6633
6634class PieController extends DoughnutController {
6635}
6636PieController.id = 'pie';
6637PieController.defaults = {
6638  cutout: 0,
6639  rotation: 0,
6640  circumference: 360,
6641  radius: '100%'
6642};
6643
6644class RadarController extends DatasetController {
6645  getLabelAndValue(index) {
6646    const vScale = this._cachedMeta.vScale;
6647    const parsed = this.getParsed(index);
6648    return {
6649      label: vScale.getLabels()[index],
6650      value: '' + vScale.getLabelForValue(parsed[vScale.axis])
6651    };
6652  }
6653  parseObjectData(meta, data, start, count) {
6654    return _chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.y.bind(this)(meta, data, start, count);
6655  }
6656  update(mode) {
6657    const meta = this._cachedMeta;
6658    const line = meta.dataset;
6659    const points = meta.data || [];
6660    const labels = meta.iScale.getLabels();
6661    line.points = points;
6662    if (mode !== 'resize') {
6663      const options = this.resolveDatasetElementOptions(mode);
6664      if (!this.options.showLine) {
6665        options.borderWidth = 0;
6666      }
6667      const properties = {
6668        _loop: true,
6669        _fullLoop: labels.length === points.length,
6670        options
6671      };
6672      this.updateElement(line, undefined, properties, mode);
6673    }
6674    this.updateElements(points, 0, points.length, mode);
6675  }
6676  updateElements(points, start, count, mode) {
6677    const scale = this._cachedMeta.rScale;
6678    const reset = mode === 'reset';
6679    for (let i = start; i < start + count; i++) {
6680      const point = points[i];
6681      const options = this.resolveDataElementOptions(i, point.active ? 'active' : mode);
6682      const pointPosition = scale.getPointPositionForValue(i, this.getParsed(i).r);
6683      const x = reset ? scale.xCenter : pointPosition.x;
6684      const y = reset ? scale.yCenter : pointPosition.y;
6685      const properties = {
6686        x,
6687        y,
6688        angle: pointPosition.angle,
6689        skip: isNaN(x) || isNaN(y),
6690        options
6691      };
6692      this.updateElement(point, i, properties, mode);
6693    }
6694  }
6695}
6696RadarController.id = 'radar';
6697RadarController.defaults = {
6698  datasetElementType: 'line',
6699  dataElementType: 'point',
6700  indexAxis: 'r',
6701  showLine: true,
6702  elements: {
6703    line: {
6704      fill: 'start'
6705    }
6706  },
6707};
6708RadarController.overrides = {
6709  aspectRatio: 1,
6710  scales: {
6711    r: {
6712      type: 'radialLinear',
6713    }
6714  }
6715};
6716
6717class Element {
6718  constructor() {
6719    this.x = undefined;
6720    this.y = undefined;
6721    this.active = false;
6722    this.options = undefined;
6723    this.$animations = undefined;
6724  }
6725  tooltipPosition(useFinalPosition) {
6726    const {x, y} = this.getProps(['x', 'y'], useFinalPosition);
6727    return {x, y};
6728  }
6729  hasValue() {
6730    return (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.x)(this.x) && (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.x)(this.y);
6731  }
6732  getProps(props, final) {
6733    const anims = this.$animations;
6734    if (!final || !anims) {
6735      return this;
6736    }
6737    const ret = {};
6738    props.forEach(prop => {
6739      ret[prop] = anims[prop] && anims[prop].active() ? anims[prop]._to : this[prop];
6740    });
6741    return ret;
6742  }
6743}
6744Element.defaults = {};
6745Element.defaultRoutes = undefined;
6746
6747const formatters = {
6748  values(value) {
6749    return (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.b)(value) ? value : '' + value;
6750  },
6751  numeric(tickValue, index, ticks) {
6752    if (tickValue === 0) {
6753      return '0';
6754    }
6755    const locale = this.chart.options.locale;
6756    let notation;
6757    let delta = tickValue;
6758    if (ticks.length > 1) {
6759      const maxTick = Math.max(Math.abs(ticks[0].value), Math.abs(ticks[ticks.length - 1].value));
6760      if (maxTick < 1e-4 || maxTick > 1e+15) {
6761        notation = 'scientific';
6762      }
6763      delta = calculateDelta(tickValue, ticks);
6764    }
6765    const logDelta = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.z)(Math.abs(delta));
6766    const numDecimal = Math.max(Math.min(-1 * Math.floor(logDelta), 20), 0);
6767    const options = {notation, minimumFractionDigits: numDecimal, maximumFractionDigits: numDecimal};
6768    Object.assign(options, this.options.ticks.format);
6769    return (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.o)(tickValue, locale, options);
6770  },
6771  logarithmic(tickValue, index, ticks) {
6772    if (tickValue === 0) {
6773      return '0';
6774    }
6775    const remain = tickValue / (Math.pow(10, Math.floor((0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.z)(tickValue))));
6776    if (remain === 1 || remain === 2 || remain === 5) {
6777      return formatters.numeric.call(this, tickValue, index, ticks);
6778    }
6779    return '';
6780  }
6781};
6782function calculateDelta(tickValue, ticks) {
6783  let delta = ticks.length > 3 ? ticks[2].value - ticks[1].value : ticks[1].value - ticks[0].value;
6784  if (Math.abs(delta) >= 1 && tickValue !== Math.floor(tickValue)) {
6785    delta = tickValue - Math.floor(tickValue);
6786  }
6787  return delta;
6788}
6789var Ticks = {formatters};
6790
6791_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.d.set('scale', {
6792  display: true,
6793  offset: false,
6794  reverse: false,
6795  beginAtZero: false,
6796  bounds: 'ticks',
6797  grace: 0,
6798  grid: {
6799    display: true,
6800    lineWidth: 1,
6801    drawBorder: true,
6802    drawOnChartArea: true,
6803    drawTicks: true,
6804    tickLength: 8,
6805    tickWidth: (_ctx, options) => options.lineWidth,
6806    tickColor: (_ctx, options) => options.color,
6807    offset: false,
6808    borderDash: [],
6809    borderDashOffset: 0.0,
6810    borderWidth: 1
6811  },
6812  title: {
6813    display: false,
6814    text: '',
6815    padding: {
6816      top: 4,
6817      bottom: 4
6818    }
6819  },
6820  ticks: {
6821    minRotation: 0,
6822    maxRotation: 50,
6823    mirror: false,
6824    textStrokeWidth: 0,
6825    textStrokeColor: '',
6826    padding: 3,
6827    display: true,
6828    autoSkip: true,
6829    autoSkipPadding: 3,
6830    labelOffset: 0,
6831    callback: Ticks.formatters.values,
6832    minor: {},
6833    major: {},
6834    align: 'center',
6835    crossAlign: 'near',
6836    showLabelBackdrop: false,
6837    backdropColor: 'rgba(255, 255, 255, 0.75)',
6838    backdropPadding: 2,
6839  }
6840});
6841_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.d.route('scale.ticks', 'color', '', 'color');
6842_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.d.route('scale.grid', 'color', '', 'borderColor');
6843_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.d.route('scale.grid', 'borderColor', '', 'borderColor');
6844_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.d.route('scale.title', 'color', '', 'color');
6845_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.d.describe('scale', {
6846  _fallback: false,
6847  _scriptable: (name) => !name.startsWith('before') && !name.startsWith('after') && name !== 'callback' && name !== 'parser',
6848  _indexable: (name) => name !== 'borderDash' && name !== 'tickBorderDash',
6849});
6850_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.d.describe('scales', {
6851  _fallback: 'scale',
6852});
6853_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.d.describe('scale.ticks', {
6854  _scriptable: (name) => name !== 'backdropPadding' && name !== 'callback',
6855  _indexable: (name) => name !== 'backdropPadding',
6856});
6857
6858function autoSkip(scale, ticks) {
6859  const tickOpts = scale.options.ticks;
6860  const ticksLimit = tickOpts.maxTicksLimit || determineMaxTicks(scale);
6861  const majorIndices = tickOpts.major.enabled ? getMajorIndices(ticks) : [];
6862  const numMajorIndices = majorIndices.length;
6863  const first = majorIndices[0];
6864  const last = majorIndices[numMajorIndices - 1];
6865  const newTicks = [];
6866  if (numMajorIndices > ticksLimit) {
6867    skipMajors(ticks, newTicks, majorIndices, numMajorIndices / ticksLimit);
6868    return newTicks;
6869  }
6870  const spacing = calculateSpacing(majorIndices, ticks, ticksLimit);
6871  if (numMajorIndices > 0) {
6872    let i, ilen;
6873    const avgMajorSpacing = numMajorIndices > 1 ? Math.round((last - first) / (numMajorIndices - 1)) : null;
6874    skip(ticks, newTicks, spacing, (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.k)(avgMajorSpacing) ? 0 : first - avgMajorSpacing, first);
6875    for (i = 0, ilen = numMajorIndices - 1; i < ilen; i++) {
6876      skip(ticks, newTicks, spacing, majorIndices[i], majorIndices[i + 1]);
6877    }
6878    skip(ticks, newTicks, spacing, last, (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.k)(avgMajorSpacing) ? ticks.length : last + avgMajorSpacing);
6879    return newTicks;
6880  }
6881  skip(ticks, newTicks, spacing);
6882  return newTicks;
6883}
6884function determineMaxTicks(scale) {
6885  const offset = scale.options.offset;
6886  const tickLength = scale._tickSize();
6887  const maxScale = scale._length / tickLength + (offset ? 0 : 1);
6888  const maxChart = scale._maxLength / tickLength;
6889  return Math.floor(Math.min(maxScale, maxChart));
6890}
6891function calculateSpacing(majorIndices, ticks, ticksLimit) {
6892  const evenMajorSpacing = getEvenSpacing(majorIndices);
6893  const spacing = ticks.length / ticksLimit;
6894  if (!evenMajorSpacing) {
6895    return Math.max(spacing, 1);
6896  }
6897  const factors = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.A)(evenMajorSpacing);
6898  for (let i = 0, ilen = factors.length - 1; i < ilen; i++) {
6899    const factor = factors[i];
6900    if (factor > spacing) {
6901      return factor;
6902    }
6903  }
6904  return Math.max(spacing, 1);
6905}
6906function getMajorIndices(ticks) {
6907  const result = [];
6908  let i, ilen;
6909  for (i = 0, ilen = ticks.length; i < ilen; i++) {
6910    if (ticks[i].major) {
6911      result.push(i);
6912    }
6913  }
6914  return result;
6915}
6916function skipMajors(ticks, newTicks, majorIndices, spacing) {
6917  let count = 0;
6918  let next = majorIndices[0];
6919  let i;
6920  spacing = Math.ceil(spacing);
6921  for (i = 0; i < ticks.length; i++) {
6922    if (i === next) {
6923      newTicks.push(ticks[i]);
6924      count++;
6925      next = majorIndices[count * spacing];
6926    }
6927  }
6928}
6929function skip(ticks, newTicks, spacing, majorStart, majorEnd) {
6930  const start = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.v)(majorStart, 0);
6931  const end = Math.min((0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.v)(majorEnd, ticks.length), ticks.length);
6932  let count = 0;
6933  let length, i, next;
6934  spacing = Math.ceil(spacing);
6935  if (majorEnd) {
6936    length = majorEnd - majorStart;
6937    spacing = length / Math.floor(length / spacing);
6938  }
6939  next = start;
6940  while (next < 0) {
6941    count++;
6942    next = Math.round(start + count * spacing);
6943  }
6944  for (i = Math.max(start, 0); i < end; i++) {
6945    if (i === next) {
6946      newTicks.push(ticks[i]);
6947      count++;
6948      next = Math.round(start + count * spacing);
6949    }
6950  }
6951}
6952function getEvenSpacing(arr) {
6953  const len = arr.length;
6954  let i, diff;
6955  if (len < 2) {
6956    return false;
6957  }
6958  for (diff = arr[0], i = 1; i < len; ++i) {
6959    if (arr[i] - arr[i - 1] !== diff) {
6960      return false;
6961    }
6962  }
6963  return diff;
6964}
6965
6966const reverseAlign = (align) => align === 'left' ? 'right' : align === 'right' ? 'left' : align;
6967const offsetFromEdge = (scale, edge, offset) => edge === 'top' || edge === 'left' ? scale[edge] + offset : scale[edge] - offset;
6968function sample(arr, numItems) {
6969  const result = [];
6970  const increment = arr.length / numItems;
6971  const len = arr.length;
6972  let i = 0;
6973  for (; i < len; i += increment) {
6974    result.push(arr[Math.floor(i)]);
6975  }
6976  return result;
6977}
6978function getPixelForGridLine(scale, index, offsetGridLines) {
6979  const length = scale.ticks.length;
6980  const validIndex = Math.min(index, length - 1);
6981  const start = scale._startPixel;
6982  const end = scale._endPixel;
6983  const epsilon = 1e-6;
6984  let lineValue = scale.getPixelForTick(validIndex);
6985  let offset;
6986  if (offsetGridLines) {
6987    if (length === 1) {
6988      offset = Math.max(lineValue - start, end - lineValue);
6989    } else if (index === 0) {
6990      offset = (scale.getPixelForTick(1) - lineValue) / 2;
6991    } else {
6992      offset = (lineValue - scale.getPixelForTick(validIndex - 1)) / 2;
6993    }
6994    lineValue += validIndex < index ? offset : -offset;
6995    if (lineValue < start - epsilon || lineValue > end + epsilon) {
6996      return;
6997    }
6998  }
6999  return lineValue;
7000}
7001function garbageCollect(caches, length) {
7002  (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.Q)(caches, (cache) => {
7003    const gc = cache.gc;
7004    const gcLen = gc.length / 2;
7005    let i;
7006    if (gcLen > length) {
7007      for (i = 0; i < gcLen; ++i) {
7008        delete cache.data[gc[i]];
7009      }
7010      gc.splice(0, gcLen);
7011    }
7012  });
7013}
7014function getTickMarkLength(options) {
7015  return options.drawTicks ? options.tickLength : 0;
7016}
7017function getTitleHeight(options, fallback) {
7018  if (!options.display) {
7019    return 0;
7020  }
7021  const font = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.O)(options.font, fallback);
7022  const padding = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.K)(options.padding);
7023  const lines = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.b)(options.text) ? options.text.length : 1;
7024  return (lines * font.lineHeight) + padding.height;
7025}
7026function createScaleContext(parent, scale) {
7027  return (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.h)(parent, {
7028    scale,
7029    type: 'scale'
7030  });
7031}
7032function createTickContext(parent, index, tick) {
7033  return (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.h)(parent, {
7034    tick,
7035    index,
7036    type: 'tick'
7037  });
7038}
7039function titleAlign(align, position, reverse) {
7040  let ret = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.R)(align);
7041  if ((reverse && position !== 'right') || (!reverse && position === 'right')) {
7042    ret = reverseAlign(ret);
7043  }
7044  return ret;
7045}
7046function titleArgs(scale, offset, position, align) {
7047  const {top, left, bottom, right, chart} = scale;
7048  const {chartArea, scales} = chart;
7049  let rotation = 0;
7050  let maxWidth, titleX, titleY;
7051  const height = bottom - top;
7052  const width = right - left;
7053  if (scale.isHorizontal()) {
7054    titleX = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.S)(align, left, right);
7055    if ((0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.i)(position)) {
7056      const positionAxisID = Object.keys(position)[0];
7057      const value = position[positionAxisID];
7058      titleY = scales[positionAxisID].getPixelForValue(value) + height - offset;
7059    } else if (position === 'center') {
7060      titleY = (chartArea.bottom + chartArea.top) / 2 + height - offset;
7061    } else {
7062      titleY = offsetFromEdge(scale, position, offset);
7063    }
7064    maxWidth = right - left;
7065  } else {
7066    if ((0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.i)(position)) {
7067      const positionAxisID = Object.keys(position)[0];
7068      const value = position[positionAxisID];
7069      titleX = scales[positionAxisID].getPixelForValue(value) - width + offset;
7070    } else if (position === 'center') {
7071      titleX = (chartArea.left + chartArea.right) / 2 - width + offset;
7072    } else {
7073      titleX = offsetFromEdge(scale, position, offset);
7074    }
7075    titleY = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.S)(align, bottom, top);
7076    rotation = position === 'left' ? -_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.H : _chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.H;
7077  }
7078  return {titleX, titleY, maxWidth, rotation};
7079}
7080class Scale extends Element {
7081  constructor(cfg) {
7082    super();
7083    this.id = cfg.id;
7084    this.type = cfg.type;
7085    this.options = undefined;
7086    this.ctx = cfg.ctx;
7087    this.chart = cfg.chart;
7088    this.top = undefined;
7089    this.bottom = undefined;
7090    this.left = undefined;
7091    this.right = undefined;
7092    this.width = undefined;
7093    this.height = undefined;
7094    this._margins = {
7095      left: 0,
7096      right: 0,
7097      top: 0,
7098      bottom: 0
7099    };
7100    this.maxWidth = undefined;
7101    this.maxHeight = undefined;
7102    this.paddingTop = undefined;
7103    this.paddingBottom = undefined;
7104    this.paddingLeft = undefined;
7105    this.paddingRight = undefined;
7106    this.axis = undefined;
7107    this.labelRotation = undefined;
7108    this.min = undefined;
7109    this.max = undefined;
7110    this._range = undefined;
7111    this.ticks = [];
7112    this._gridLineItems = null;
7113    this._labelItems = null;
7114    this._labelSizes = null;
7115    this._length = 0;
7116    this._maxLength = 0;
7117    this._longestTextCache = {};
7118    this._startPixel = undefined;
7119    this._endPixel = undefined;
7120    this._reversePixels = false;
7121    this._userMax = undefined;
7122    this._userMin = undefined;
7123    this._suggestedMax = undefined;
7124    this._suggestedMin = undefined;
7125    this._ticksLength = 0;
7126    this._borderValue = 0;
7127    this._cache = {};
7128    this._dataLimitsCached = false;
7129    this.$context = undefined;
7130  }
7131  init(options) {
7132    this.options = options.setContext(this.getContext());
7133    this.axis = options.axis;
7134    this._userMin = this.parse(options.min);
7135    this._userMax = this.parse(options.max);
7136    this._suggestedMin = this.parse(options.suggestedMin);
7137    this._suggestedMax = this.parse(options.suggestedMax);
7138  }
7139  parse(raw, index) {
7140    return raw;
7141  }
7142  getUserBounds() {
7143    let {_userMin, _userMax, _suggestedMin, _suggestedMax} = this;
7144    _userMin = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.B)(_userMin, Number.POSITIVE_INFINITY);
7145    _userMax = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.B)(_userMax, Number.NEGATIVE_INFINITY);
7146    _suggestedMin = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.B)(_suggestedMin, Number.POSITIVE_INFINITY);
7147    _suggestedMax = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.B)(_suggestedMax, Number.NEGATIVE_INFINITY);
7148    return {
7149      min: (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.B)(_userMin, _suggestedMin),
7150      max: (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.B)(_userMax, _suggestedMax),
7151      minDefined: (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.g)(_userMin),
7152      maxDefined: (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.g)(_userMax)
7153    };
7154  }
7155  getMinMax(canStack) {
7156    let {min, max, minDefined, maxDefined} = this.getUserBounds();
7157    let range;
7158    if (minDefined && maxDefined) {
7159      return {min, max};
7160    }
7161    const metas = this.getMatchingVisibleMetas();
7162    for (let i = 0, ilen = metas.length; i < ilen; ++i) {
7163      range = metas[i].controller.getMinMax(this, canStack);
7164      if (!minDefined) {
7165        min = Math.min(min, range.min);
7166      }
7167      if (!maxDefined) {
7168        max = Math.max(max, range.max);
7169      }
7170    }
7171    min = maxDefined && min > max ? max : min;
7172    max = minDefined && min > max ? min : max;
7173    return {
7174      min: (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.B)(min, (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.B)(max, min)),
7175      max: (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.B)(max, (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.B)(min, max))
7176    };
7177  }
7178  getPadding() {
7179    return {
7180      left: this.paddingLeft || 0,
7181      top: this.paddingTop || 0,
7182      right: this.paddingRight || 0,
7183      bottom: this.paddingBottom || 0
7184    };
7185  }
7186  getTicks() {
7187    return this.ticks;
7188  }
7189  getLabels() {
7190    const data = this.chart.data;
7191    return this.options.labels || (this.isHorizontal() ? data.xLabels : data.yLabels) || data.labels || [];
7192  }
7193  beforeLayout() {
7194    this._cache = {};
7195    this._dataLimitsCached = false;
7196  }
7197  beforeUpdate() {
7198    (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.C)(this.options.beforeUpdate, [this]);
7199  }
7200  update(maxWidth, maxHeight, margins) {
7201    const {beginAtZero, grace, ticks: tickOpts} = this.options;
7202    const sampleSize = tickOpts.sampleSize;
7203    this.beforeUpdate();
7204    this.maxWidth = maxWidth;
7205    this.maxHeight = maxHeight;
7206    this._margins = margins = Object.assign({
7207      left: 0,
7208      right: 0,
7209      top: 0,
7210      bottom: 0
7211    }, margins);
7212    this.ticks = null;
7213    this._labelSizes = null;
7214    this._gridLineItems = null;
7215    this._labelItems = null;
7216    this.beforeSetDimensions();
7217    this.setDimensions();
7218    this.afterSetDimensions();
7219    this._maxLength = this.isHorizontal()
7220      ? this.width + margins.left + margins.right
7221      : this.height + margins.top + margins.bottom;
7222    if (!this._dataLimitsCached) {
7223      this.beforeDataLimits();
7224      this.determineDataLimits();
7225      this.afterDataLimits();
7226      this._range = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.D)(this, grace, beginAtZero);
7227      this._dataLimitsCached = true;
7228    }
7229    this.beforeBuildTicks();
7230    this.ticks = this.buildTicks() || [];
7231    this.afterBuildTicks();
7232    const samplingEnabled = sampleSize < this.ticks.length;
7233    this._convertTicksToLabels(samplingEnabled ? sample(this.ticks, sampleSize) : this.ticks);
7234    this.configure();
7235    this.beforeCalculateLabelRotation();
7236    this.calculateLabelRotation();
7237    this.afterCalculateLabelRotation();
7238    if (tickOpts.display && (tickOpts.autoSkip || tickOpts.source === 'auto')) {
7239      this.ticks = autoSkip(this, this.ticks);
7240      this._labelSizes = null;
7241      this.afterAutoSkip();
7242    }
7243    if (samplingEnabled) {
7244      this._convertTicksToLabels(this.ticks);
7245    }
7246    this.beforeFit();
7247    this.fit();
7248    this.afterFit();
7249    this.afterUpdate();
7250  }
7251  configure() {
7252    let reversePixels = this.options.reverse;
7253    let startPixel, endPixel;
7254    if (this.isHorizontal()) {
7255      startPixel = this.left;
7256      endPixel = this.right;
7257    } else {
7258      startPixel = this.top;
7259      endPixel = this.bottom;
7260      reversePixels = !reversePixels;
7261    }
7262    this._startPixel = startPixel;
7263    this._endPixel = endPixel;
7264    this._reversePixels = reversePixels;
7265    this._length = endPixel - startPixel;
7266    this._alignToPixels = this.options.alignToPixels;
7267  }
7268  afterUpdate() {
7269    (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.C)(this.options.afterUpdate, [this]);
7270  }
7271  beforeSetDimensions() {
7272    (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.C)(this.options.beforeSetDimensions, [this]);
7273  }
7274  setDimensions() {
7275    if (this.isHorizontal()) {
7276      this.width = this.maxWidth;
7277      this.left = 0;
7278      this.right = this.width;
7279    } else {
7280      this.height = this.maxHeight;
7281      this.top = 0;
7282      this.bottom = this.height;
7283    }
7284    this.paddingLeft = 0;
7285    this.paddingTop = 0;
7286    this.paddingRight = 0;
7287    this.paddingBottom = 0;
7288  }
7289  afterSetDimensions() {
7290    (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.C)(this.options.afterSetDimensions, [this]);
7291  }
7292  _callHooks(name) {
7293    this.chart.notifyPlugins(name, this.getContext());
7294    (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.C)(this.options[name], [this]);
7295  }
7296  beforeDataLimits() {
7297    this._callHooks('beforeDataLimits');
7298  }
7299  determineDataLimits() {}
7300  afterDataLimits() {
7301    this._callHooks('afterDataLimits');
7302  }
7303  beforeBuildTicks() {
7304    this._callHooks('beforeBuildTicks');
7305  }
7306  buildTicks() {
7307    return [];
7308  }
7309  afterBuildTicks() {
7310    this._callHooks('afterBuildTicks');
7311  }
7312  beforeTickToLabelConversion() {
7313    (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.C)(this.options.beforeTickToLabelConversion, [this]);
7314  }
7315  generateTickLabels(ticks) {
7316    const tickOpts = this.options.ticks;
7317    let i, ilen, tick;
7318    for (i = 0, ilen = ticks.length; i < ilen; i++) {
7319      tick = ticks[i];
7320      tick.label = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.C)(tickOpts.callback, [tick.value, i, ticks], this);
7321    }
7322  }
7323  afterTickToLabelConversion() {
7324    (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.C)(this.options.afterTickToLabelConversion, [this]);
7325  }
7326  beforeCalculateLabelRotation() {
7327    (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.C)(this.options.beforeCalculateLabelRotation, [this]);
7328  }
7329  calculateLabelRotation() {
7330    const options = this.options;
7331    const tickOpts = options.ticks;
7332    const numTicks = this.ticks.length;
7333    const minRotation = tickOpts.minRotation || 0;
7334    const maxRotation = tickOpts.maxRotation;
7335    let labelRotation = minRotation;
7336    let tickWidth, maxHeight, maxLabelDiagonal;
7337    if (!this._isVisible() || !tickOpts.display || minRotation >= maxRotation || numTicks <= 1 || !this.isHorizontal()) {
7338      this.labelRotation = minRotation;
7339      return;
7340    }
7341    const labelSizes = this._getLabelSizes();
7342    const maxLabelWidth = labelSizes.widest.width;
7343    const maxLabelHeight = labelSizes.highest.height;
7344    const maxWidth = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.E)(this.chart.width - maxLabelWidth, 0, this.maxWidth);
7345    tickWidth = options.offset ? this.maxWidth / numTicks : maxWidth / (numTicks - 1);
7346    if (maxLabelWidth + 6 > tickWidth) {
7347      tickWidth = maxWidth / (numTicks - (options.offset ? 0.5 : 1));
7348      maxHeight = this.maxHeight - getTickMarkLength(options.grid)
7349				- tickOpts.padding - getTitleHeight(options.title, this.chart.options.font);
7350      maxLabelDiagonal = Math.sqrt(maxLabelWidth * maxLabelWidth + maxLabelHeight * maxLabelHeight);
7351      labelRotation = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.F)(Math.min(
7352        Math.asin((0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.E)((labelSizes.highest.height + 6) / tickWidth, -1, 1)),
7353        Math.asin((0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.E)(maxHeight / maxLabelDiagonal, -1, 1)) - Math.asin((0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.E)(maxLabelHeight / maxLabelDiagonal, -1, 1))
7354      ));
7355      labelRotation = Math.max(minRotation, Math.min(maxRotation, labelRotation));
7356    }
7357    this.labelRotation = labelRotation;
7358  }
7359  afterCalculateLabelRotation() {
7360    (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.C)(this.options.afterCalculateLabelRotation, [this]);
7361  }
7362  afterAutoSkip() {}
7363  beforeFit() {
7364    (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.C)(this.options.beforeFit, [this]);
7365  }
7366  fit() {
7367    const minSize = {
7368      width: 0,
7369      height: 0
7370    };
7371    const {chart, options: {ticks: tickOpts, title: titleOpts, grid: gridOpts}} = this;
7372    const display = this._isVisible();
7373    const isHorizontal = this.isHorizontal();
7374    if (display) {
7375      const titleHeight = getTitleHeight(titleOpts, chart.options.font);
7376      if (isHorizontal) {
7377        minSize.width = this.maxWidth;
7378        minSize.height = getTickMarkLength(gridOpts) + titleHeight;
7379      } else {
7380        minSize.height = this.maxHeight;
7381        minSize.width = getTickMarkLength(gridOpts) + titleHeight;
7382      }
7383      if (tickOpts.display && this.ticks.length) {
7384        const {first, last, widest, highest} = this._getLabelSizes();
7385        const tickPadding = tickOpts.padding * 2;
7386        const angleRadians = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.t)(this.labelRotation);
7387        const cos = Math.cos(angleRadians);
7388        const sin = Math.sin(angleRadians);
7389        if (isHorizontal) {
7390          const labelHeight = tickOpts.mirror ? 0 : sin * widest.width + cos * highest.height;
7391          minSize.height = Math.min(this.maxHeight, minSize.height + labelHeight + tickPadding);
7392        } else {
7393          const labelWidth = tickOpts.mirror ? 0 : cos * widest.width + sin * highest.height;
7394          minSize.width = Math.min(this.maxWidth, minSize.width + labelWidth + tickPadding);
7395        }
7396        this._calculatePadding(first, last, sin, cos);
7397      }
7398    }
7399    this._handleMargins();
7400    if (isHorizontal) {
7401      this.width = this._length = chart.width - this._margins.left - this._margins.right;
7402      this.height = minSize.height;
7403    } else {
7404      this.width = minSize.width;
7405      this.height = this._length = chart.height - this._margins.top - this._margins.bottom;
7406    }
7407  }
7408  _calculatePadding(first, last, sin, cos) {
7409    const {ticks: {align, padding}, position} = this.options;
7410    const isRotated = this.labelRotation !== 0;
7411    const labelsBelowTicks = position !== 'top' && this.axis === 'x';
7412    if (this.isHorizontal()) {
7413      const offsetLeft = this.getPixelForTick(0) - this.left;
7414      const offsetRight = this.right - this.getPixelForTick(this.ticks.length - 1);
7415      let paddingLeft = 0;
7416      let paddingRight = 0;
7417      if (isRotated) {
7418        if (labelsBelowTicks) {
7419          paddingLeft = cos * first.width;
7420          paddingRight = sin * last.height;
7421        } else {
7422          paddingLeft = sin * first.height;
7423          paddingRight = cos * last.width;
7424        }
7425      } else if (align === 'start') {
7426        paddingRight = last.width;
7427      } else if (align === 'end') {
7428        paddingLeft = first.width;
7429      } else if (align !== 'inner') {
7430        paddingLeft = first.width / 2;
7431        paddingRight = last.width / 2;
7432      }
7433      this.paddingLeft = Math.max((paddingLeft - offsetLeft + padding) * this.width / (this.width - offsetLeft), 0);
7434      this.paddingRight = Math.max((paddingRight - offsetRight + padding) * this.width / (this.width - offsetRight), 0);
7435    } else {
7436      let paddingTop = last.height / 2;
7437      let paddingBottom = first.height / 2;
7438      if (align === 'start') {
7439        paddingTop = 0;
7440        paddingBottom = first.height;
7441      } else if (align === 'end') {
7442        paddingTop = last.height;
7443        paddingBottom = 0;
7444      }
7445      this.paddingTop = paddingTop + padding;
7446      this.paddingBottom = paddingBottom + padding;
7447    }
7448  }
7449  _handleMargins() {
7450    if (this._margins) {
7451      this._margins.left = Math.max(this.paddingLeft, this._margins.left);
7452      this._margins.top = Math.max(this.paddingTop, this._margins.top);
7453      this._margins.right = Math.max(this.paddingRight, this._margins.right);
7454      this._margins.bottom = Math.max(this.paddingBottom, this._margins.bottom);
7455    }
7456  }
7457  afterFit() {
7458    (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.C)(this.options.afterFit, [this]);
7459  }
7460  isHorizontal() {
7461    const {axis, position} = this.options;
7462    return position === 'top' || position === 'bottom' || axis === 'x';
7463  }
7464  isFullSize() {
7465    return this.options.fullSize;
7466  }
7467  _convertTicksToLabels(ticks) {
7468    this.beforeTickToLabelConversion();
7469    this.generateTickLabels(ticks);
7470    let i, ilen;
7471    for (i = 0, ilen = ticks.length; i < ilen; i++) {
7472      if ((0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.k)(ticks[i].label)) {
7473        ticks.splice(i, 1);
7474        ilen--;
7475        i--;
7476      }
7477    }
7478    this.afterTickToLabelConversion();
7479  }
7480  _getLabelSizes() {
7481    let labelSizes = this._labelSizes;
7482    if (!labelSizes) {
7483      const sampleSize = this.options.ticks.sampleSize;
7484      let ticks = this.ticks;
7485      if (sampleSize < ticks.length) {
7486        ticks = sample(ticks, sampleSize);
7487      }
7488      this._labelSizes = labelSizes = this._computeLabelSizes(ticks, ticks.length);
7489    }
7490    return labelSizes;
7491  }
7492  _computeLabelSizes(ticks, length) {
7493    const {ctx, _longestTextCache: caches} = this;
7494    const widths = [];
7495    const heights = [];
7496    let widestLabelSize = 0;
7497    let highestLabelSize = 0;
7498    let i, j, jlen, label, tickFont, fontString, cache, lineHeight, width, height, nestedLabel;
7499    for (i = 0; i < length; ++i) {
7500      label = ticks[i].label;
7501      tickFont = this._resolveTickFontOptions(i);
7502      ctx.font = fontString = tickFont.string;
7503      cache = caches[fontString] = caches[fontString] || {data: {}, gc: []};
7504      lineHeight = tickFont.lineHeight;
7505      width = height = 0;
7506      if (!(0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.k)(label) && !(0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.b)(label)) {
7507        width = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.G)(ctx, cache.data, cache.gc, width, label);
7508        height = lineHeight;
7509      } else if ((0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.b)(label)) {
7510        for (j = 0, jlen = label.length; j < jlen; ++j) {
7511          nestedLabel = label[j];
7512          if (!(0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.k)(nestedLabel) && !(0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.b)(nestedLabel)) {
7513            width = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.G)(ctx, cache.data, cache.gc, width, nestedLabel);
7514            height += lineHeight;
7515          }
7516        }
7517      }
7518      widths.push(width);
7519      heights.push(height);
7520      widestLabelSize = Math.max(width, widestLabelSize);
7521      highestLabelSize = Math.max(height, highestLabelSize);
7522    }
7523    garbageCollect(caches, length);
7524    const widest = widths.indexOf(widestLabelSize);
7525    const highest = heights.indexOf(highestLabelSize);
7526    const valueAt = (idx) => ({width: widths[idx] || 0, height: heights[idx] || 0});
7527    return {
7528      first: valueAt(0),
7529      last: valueAt(length - 1),
7530      widest: valueAt(widest),
7531      highest: valueAt(highest),
7532      widths,
7533      heights,
7534    };
7535  }
7536  getLabelForValue(value) {
7537    return value;
7538  }
7539  getPixelForValue(value, index) {
7540    return NaN;
7541  }
7542  getValueForPixel(pixel) {}
7543  getPixelForTick(index) {
7544    const ticks = this.ticks;
7545    if (index < 0 || index > ticks.length - 1) {
7546      return null;
7547    }
7548    return this.getPixelForValue(ticks[index].value);
7549  }
7550  getPixelForDecimal(decimal) {
7551    if (this._reversePixels) {
7552      decimal = 1 - decimal;
7553    }
7554    const pixel = this._startPixel + decimal * this._length;
7555    return (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.I)(this._alignToPixels ? (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.J)(this.chart, pixel, 0) : pixel);
7556  }
7557  getDecimalForPixel(pixel) {
7558    const decimal = (pixel - this._startPixel) / this._length;
7559    return this._reversePixels ? 1 - decimal : decimal;
7560  }
7561  getBasePixel() {
7562    return this.getPixelForValue(this.getBaseValue());
7563  }
7564  getBaseValue() {
7565    const {min, max} = this;
7566    return min < 0 && max < 0 ? max :
7567      min > 0 && max > 0 ? min :
7568      0;
7569  }
7570  getContext(index) {
7571    const ticks = this.ticks || [];
7572    if (index >= 0 && index < ticks.length) {
7573      const tick = ticks[index];
7574      return tick.$context ||
7575				(tick.$context = createTickContext(this.getContext(), index, tick));
7576    }
7577    return this.$context ||
7578			(this.$context = createScaleContext(this.chart.getContext(), this));
7579  }
7580  _tickSize() {
7581    const optionTicks = this.options.ticks;
7582    const rot = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.t)(this.labelRotation);
7583    const cos = Math.abs(Math.cos(rot));
7584    const sin = Math.abs(Math.sin(rot));
7585    const labelSizes = this._getLabelSizes();
7586    const padding = optionTicks.autoSkipPadding || 0;
7587    const w = labelSizes ? labelSizes.widest.width + padding : 0;
7588    const h = labelSizes ? labelSizes.highest.height + padding : 0;
7589    return this.isHorizontal()
7590      ? h * cos > w * sin ? w / cos : h / sin
7591      : h * sin < w * cos ? h / cos : w / sin;
7592  }
7593  _isVisible() {
7594    const display = this.options.display;
7595    if (display !== 'auto') {
7596      return !!display;
7597    }
7598    return this.getMatchingVisibleMetas().length > 0;
7599  }
7600  _computeGridLineItems(chartArea) {
7601    const axis = this.axis;
7602    const chart = this.chart;
7603    const options = this.options;
7604    const {grid, position} = options;
7605    const offset = grid.offset;
7606    const isHorizontal = this.isHorizontal();
7607    const ticks = this.ticks;
7608    const ticksLength = ticks.length + (offset ? 1 : 0);
7609    const tl = getTickMarkLength(grid);
7610    const items = [];
7611    const borderOpts = grid.setContext(this.getContext());
7612    const axisWidth = borderOpts.drawBorder ? borderOpts.borderWidth : 0;
7613    const axisHalfWidth = axisWidth / 2;
7614    const alignBorderValue = function(pixel) {
7615      return (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.J)(chart, pixel, axisWidth);
7616    };
7617    let borderValue, i, lineValue, alignedLineValue;
7618    let tx1, ty1, tx2, ty2, x1, y1, x2, y2;
7619    if (position === 'top') {
7620      borderValue = alignBorderValue(this.bottom);
7621      ty1 = this.bottom - tl;
7622      ty2 = borderValue - axisHalfWidth;
7623      y1 = alignBorderValue(chartArea.top) + axisHalfWidth;
7624      y2 = chartArea.bottom;
7625    } else if (position === 'bottom') {
7626      borderValue = alignBorderValue(this.top);
7627      y1 = chartArea.top;
7628      y2 = alignBorderValue(chartArea.bottom) - axisHalfWidth;
7629      ty1 = borderValue + axisHalfWidth;
7630      ty2 = this.top + tl;
7631    } else if (position === 'left') {
7632      borderValue = alignBorderValue(this.right);
7633      tx1 = this.right - tl;
7634      tx2 = borderValue - axisHalfWidth;
7635      x1 = alignBorderValue(chartArea.left) + axisHalfWidth;
7636      x2 = chartArea.right;
7637    } else if (position === 'right') {
7638      borderValue = alignBorderValue(this.left);
7639      x1 = chartArea.left;
7640      x2 = alignBorderValue(chartArea.right) - axisHalfWidth;
7641      tx1 = borderValue + axisHalfWidth;
7642      tx2 = this.left + tl;
7643    } else if (axis === 'x') {
7644      if (position === 'center') {
7645        borderValue = alignBorderValue((chartArea.top + chartArea.bottom) / 2 + 0.5);
7646      } else if ((0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.i)(position)) {
7647        const positionAxisID = Object.keys(position)[0];
7648        const value = position[positionAxisID];
7649        borderValue = alignBorderValue(this.chart.scales[positionAxisID].getPixelForValue(value));
7650      }
7651      y1 = chartArea.top;
7652      y2 = chartArea.bottom;
7653      ty1 = borderValue + axisHalfWidth;
7654      ty2 = ty1 + tl;
7655    } else if (axis === 'y') {
7656      if (position === 'center') {
7657        borderValue = alignBorderValue((chartArea.left + chartArea.right) / 2);
7658      } else if ((0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.i)(position)) {
7659        const positionAxisID = Object.keys(position)[0];
7660        const value = position[positionAxisID];
7661        borderValue = alignBorderValue(this.chart.scales[positionAxisID].getPixelForValue(value));
7662      }
7663      tx1 = borderValue - axisHalfWidth;
7664      tx2 = tx1 - tl;
7665      x1 = chartArea.left;
7666      x2 = chartArea.right;
7667    }
7668    const limit = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.v)(options.ticks.maxTicksLimit, ticksLength);
7669    const step = Math.max(1, Math.ceil(ticksLength / limit));
7670    for (i = 0; i < ticksLength; i += step) {
7671      const optsAtIndex = grid.setContext(this.getContext(i));
7672      const lineWidth = optsAtIndex.lineWidth;
7673      const lineColor = optsAtIndex.color;
7674      const borderDash = optsAtIndex.borderDash || [];
7675      const borderDashOffset = optsAtIndex.borderDashOffset;
7676      const tickWidth = optsAtIndex.tickWidth;
7677      const tickColor = optsAtIndex.tickColor;
7678      const tickBorderDash = optsAtIndex.tickBorderDash || [];
7679      const tickBorderDashOffset = optsAtIndex.tickBorderDashOffset;
7680      lineValue = getPixelForGridLine(this, i, offset);
7681      if (lineValue === undefined) {
7682        continue;
7683      }
7684      alignedLineValue = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.J)(chart, lineValue, lineWidth);
7685      if (isHorizontal) {
7686        tx1 = tx2 = x1 = x2 = alignedLineValue;
7687      } else {
7688        ty1 = ty2 = y1 = y2 = alignedLineValue;
7689      }
7690      items.push({
7691        tx1,
7692        ty1,
7693        tx2,
7694        ty2,
7695        x1,
7696        y1,
7697        x2,
7698        y2,
7699        width: lineWidth,
7700        color: lineColor,
7701        borderDash,
7702        borderDashOffset,
7703        tickWidth,
7704        tickColor,
7705        tickBorderDash,
7706        tickBorderDashOffset,
7707      });
7708    }
7709    this._ticksLength = ticksLength;
7710    this._borderValue = borderValue;
7711    return items;
7712  }
7713  _computeLabelItems(chartArea) {
7714    const axis = this.axis;
7715    const options = this.options;
7716    const {position, ticks: optionTicks} = options;
7717    const isHorizontal = this.isHorizontal();
7718    const ticks = this.ticks;
7719    const {align, crossAlign, padding, mirror} = optionTicks;
7720    const tl = getTickMarkLength(options.grid);
7721    const tickAndPadding = tl + padding;
7722    const hTickAndPadding = mirror ? -padding : tickAndPadding;
7723    const rotation = -(0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.t)(this.labelRotation);
7724    const items = [];
7725    let i, ilen, tick, label, x, y, textAlign, pixel, font, lineHeight, lineCount, textOffset;
7726    let textBaseline = 'middle';
7727    if (position === 'top') {
7728      y = this.bottom - hTickAndPadding;
7729      textAlign = this._getXAxisLabelAlignment();
7730    } else if (position === 'bottom') {
7731      y = this.top + hTickAndPadding;
7732      textAlign = this._getXAxisLabelAlignment();
7733    } else if (position === 'left') {
7734      const ret = this._getYAxisLabelAlignment(tl);
7735      textAlign = ret.textAlign;
7736      x = ret.x;
7737    } else if (position === 'right') {
7738      const ret = this._getYAxisLabelAlignment(tl);
7739      textAlign = ret.textAlign;
7740      x = ret.x;
7741    } else if (axis === 'x') {
7742      if (position === 'center') {
7743        y = ((chartArea.top + chartArea.bottom) / 2) + tickAndPadding;
7744      } else if ((0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.i)(position)) {
7745        const positionAxisID = Object.keys(position)[0];
7746        const value = position[positionAxisID];
7747        y = this.chart.scales[positionAxisID].getPixelForValue(value) + tickAndPadding;
7748      }
7749      textAlign = this._getXAxisLabelAlignment();
7750    } else if (axis === 'y') {
7751      if (position === 'center') {
7752        x = ((chartArea.left + chartArea.right) / 2) - tickAndPadding;
7753      } else if ((0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.i)(position)) {
7754        const positionAxisID = Object.keys(position)[0];
7755        const value = position[positionAxisID];
7756        x = this.chart.scales[positionAxisID].getPixelForValue(value);
7757      }
7758      textAlign = this._getYAxisLabelAlignment(tl).textAlign;
7759    }
7760    if (axis === 'y') {
7761      if (align === 'start') {
7762        textBaseline = 'top';
7763      } else if (align === 'end') {
7764        textBaseline = 'bottom';
7765      }
7766    }
7767    const labelSizes = this._getLabelSizes();
7768    for (i = 0, ilen = ticks.length; i < ilen; ++i) {
7769      tick = ticks[i];
7770      label = tick.label;
7771      const optsAtIndex = optionTicks.setContext(this.getContext(i));
7772      pixel = this.getPixelForTick(i) + optionTicks.labelOffset;
7773      font = this._resolveTickFontOptions(i);
7774      lineHeight = font.lineHeight;
7775      lineCount = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.b)(label) ? label.length : 1;
7776      const halfCount = lineCount / 2;
7777      const color = optsAtIndex.color;
7778      const strokeColor = optsAtIndex.textStrokeColor;
7779      const strokeWidth = optsAtIndex.textStrokeWidth;
7780      let tickTextAlign = textAlign;
7781      if (isHorizontal) {
7782        x = pixel;
7783        if (textAlign === 'inner') {
7784          if (i === ilen - 1) {
7785            tickTextAlign = !this.options.reverse ? 'right' : 'left';
7786          } else if (i === 0) {
7787            tickTextAlign = !this.options.reverse ? 'left' : 'right';
7788          } else {
7789            tickTextAlign = 'center';
7790          }
7791        }
7792        if (position === 'top') {
7793          if (crossAlign === 'near' || rotation !== 0) {
7794            textOffset = -lineCount * lineHeight + lineHeight / 2;
7795          } else if (crossAlign === 'center') {
7796            textOffset = -labelSizes.highest.height / 2 - halfCount * lineHeight + lineHeight;
7797          } else {
7798            textOffset = -labelSizes.highest.height + lineHeight / 2;
7799          }
7800        } else {
7801          if (crossAlign === 'near' || rotation !== 0) {
7802            textOffset = lineHeight / 2;
7803          } else if (crossAlign === 'center') {
7804            textOffset = labelSizes.highest.height / 2 - halfCount * lineHeight;
7805          } else {
7806            textOffset = labelSizes.highest.height - lineCount * lineHeight;
7807          }
7808        }
7809        if (mirror) {
7810          textOffset *= -1;
7811        }
7812      } else {
7813        y = pixel;
7814        textOffset = (1 - lineCount) * lineHeight / 2;
7815      }
7816      let backdrop;
7817      if (optsAtIndex.showLabelBackdrop) {
7818        const labelPadding = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.K)(optsAtIndex.backdropPadding);
7819        const height = labelSizes.heights[i];
7820        const width = labelSizes.widths[i];
7821        let top = y + textOffset - labelPadding.top;
7822        let left = x - labelPadding.left;
7823        switch (textBaseline) {
7824        case 'middle':
7825          top -= height / 2;
7826          break;
7827        case 'bottom':
7828          top -= height;
7829          break;
7830        }
7831        switch (textAlign) {
7832        case 'center':
7833          left -= width / 2;
7834          break;
7835        case 'right':
7836          left -= width;
7837          break;
7838        }
7839        backdrop = {
7840          left,
7841          top,
7842          width: width + labelPadding.width,
7843          height: height + labelPadding.height,
7844          color: optsAtIndex.backdropColor,
7845        };
7846      }
7847      items.push({
7848        rotation,
7849        label,
7850        font,
7851        color,
7852        strokeColor,
7853        strokeWidth,
7854        textOffset,
7855        textAlign: tickTextAlign,
7856        textBaseline,
7857        translation: [x, y],
7858        backdrop,
7859      });
7860    }
7861    return items;
7862  }
7863  _getXAxisLabelAlignment() {
7864    const {position, ticks} = this.options;
7865    const rotation = -(0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.t)(this.labelRotation);
7866    if (rotation) {
7867      return position === 'top' ? 'left' : 'right';
7868    }
7869    let align = 'center';
7870    if (ticks.align === 'start') {
7871      align = 'left';
7872    } else if (ticks.align === 'end') {
7873      align = 'right';
7874    } else if (ticks.align === 'inner') {
7875      align = 'inner';
7876    }
7877    return align;
7878  }
7879  _getYAxisLabelAlignment(tl) {
7880    const {position, ticks: {crossAlign, mirror, padding}} = this.options;
7881    const labelSizes = this._getLabelSizes();
7882    const tickAndPadding = tl + padding;
7883    const widest = labelSizes.widest.width;
7884    let textAlign;
7885    let x;
7886    if (position === 'left') {
7887      if (mirror) {
7888        x = this.right + padding;
7889        if (crossAlign === 'near') {
7890          textAlign = 'left';
7891        } else if (crossAlign === 'center') {
7892          textAlign = 'center';
7893          x += (widest / 2);
7894        } else {
7895          textAlign = 'right';
7896          x += widest;
7897        }
7898      } else {
7899        x = this.right - tickAndPadding;
7900        if (crossAlign === 'near') {
7901          textAlign = 'right';
7902        } else if (crossAlign === 'center') {
7903          textAlign = 'center';
7904          x -= (widest / 2);
7905        } else {
7906          textAlign = 'left';
7907          x = this.left;
7908        }
7909      }
7910    } else if (position === 'right') {
7911      if (mirror) {
7912        x = this.left + padding;
7913        if (crossAlign === 'near') {
7914          textAlign = 'right';
7915        } else if (crossAlign === 'center') {
7916          textAlign = 'center';
7917          x -= (widest / 2);
7918        } else {
7919          textAlign = 'left';
7920          x -= widest;
7921        }
7922      } else {
7923        x = this.left + tickAndPadding;
7924        if (crossAlign === 'near') {
7925          textAlign = 'left';
7926        } else if (crossAlign === 'center') {
7927          textAlign = 'center';
7928          x += widest / 2;
7929        } else {
7930          textAlign = 'right';
7931          x = this.right;
7932        }
7933      }
7934    } else {
7935      textAlign = 'right';
7936    }
7937    return {textAlign, x};
7938  }
7939  _computeLabelArea() {
7940    if (this.options.ticks.mirror) {
7941      return;
7942    }
7943    const chart = this.chart;
7944    const position = this.options.position;
7945    if (position === 'left' || position === 'right') {
7946      return {top: 0, left: this.left, bottom: chart.height, right: this.right};
7947    } if (position === 'top' || position === 'bottom') {
7948      return {top: this.top, left: 0, bottom: this.bottom, right: chart.width};
7949    }
7950  }
7951  drawBackground() {
7952    const {ctx, options: {backgroundColor}, left, top, width, height} = this;
7953    if (backgroundColor) {
7954      ctx.save();
7955      ctx.fillStyle = backgroundColor;
7956      ctx.fillRect(left, top, width, height);
7957      ctx.restore();
7958    }
7959  }
7960  getLineWidthForValue(value) {
7961    const grid = this.options.grid;
7962    if (!this._isVisible() || !grid.display) {
7963      return 0;
7964    }
7965    const ticks = this.ticks;
7966    const index = ticks.findIndex(t => t.value === value);
7967    if (index >= 0) {
7968      const opts = grid.setContext(this.getContext(index));
7969      return opts.lineWidth;
7970    }
7971    return 0;
7972  }
7973  drawGrid(chartArea) {
7974    const grid = this.options.grid;
7975    const ctx = this.ctx;
7976    const items = this._gridLineItems || (this._gridLineItems = this._computeGridLineItems(chartArea));
7977    let i, ilen;
7978    const drawLine = (p1, p2, style) => {
7979      if (!style.width || !style.color) {
7980        return;
7981      }
7982      ctx.save();
7983      ctx.lineWidth = style.width;
7984      ctx.strokeStyle = style.color;
7985      ctx.setLineDash(style.borderDash || []);
7986      ctx.lineDashOffset = style.borderDashOffset;
7987      ctx.beginPath();
7988      ctx.moveTo(p1.x, p1.y);
7989      ctx.lineTo(p2.x, p2.y);
7990      ctx.stroke();
7991      ctx.restore();
7992    };
7993    if (grid.display) {
7994      for (i = 0, ilen = items.length; i < ilen; ++i) {
7995        const item = items[i];
7996        if (grid.drawOnChartArea) {
7997          drawLine(
7998            {x: item.x1, y: item.y1},
7999            {x: item.x2, y: item.y2},
8000            item
8001          );
8002        }
8003        if (grid.drawTicks) {
8004          drawLine(
8005            {x: item.tx1, y: item.ty1},
8006            {x: item.tx2, y: item.ty2},
8007            {
8008              color: item.tickColor,
8009              width: item.tickWidth,
8010              borderDash: item.tickBorderDash,
8011              borderDashOffset: item.tickBorderDashOffset
8012            }
8013          );
8014        }
8015      }
8016    }
8017  }
8018  drawBorder() {
8019    const {chart, ctx, options: {grid}} = this;
8020    const borderOpts = grid.setContext(this.getContext());
8021    const axisWidth = grid.drawBorder ? borderOpts.borderWidth : 0;
8022    if (!axisWidth) {
8023      return;
8024    }
8025    const lastLineWidth = grid.setContext(this.getContext(0)).lineWidth;
8026    const borderValue = this._borderValue;
8027    let x1, x2, y1, y2;
8028    if (this.isHorizontal()) {
8029      x1 = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.J)(chart, this.left, axisWidth) - axisWidth / 2;
8030      x2 = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.J)(chart, this.right, lastLineWidth) + lastLineWidth / 2;
8031      y1 = y2 = borderValue;
8032    } else {
8033      y1 = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.J)(chart, this.top, axisWidth) - axisWidth / 2;
8034      y2 = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.J)(chart, this.bottom, lastLineWidth) + lastLineWidth / 2;
8035      x1 = x2 = borderValue;
8036    }
8037    ctx.save();
8038    ctx.lineWidth = borderOpts.borderWidth;
8039    ctx.strokeStyle = borderOpts.borderColor;
8040    ctx.beginPath();
8041    ctx.moveTo(x1, y1);
8042    ctx.lineTo(x2, y2);
8043    ctx.stroke();
8044    ctx.restore();
8045  }
8046  drawLabels(chartArea) {
8047    const optionTicks = this.options.ticks;
8048    if (!optionTicks.display) {
8049      return;
8050    }
8051    const ctx = this.ctx;
8052    const area = this._computeLabelArea();
8053    if (area) {
8054      (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.L)(ctx, area);
8055    }
8056    const items = this._labelItems || (this._labelItems = this._computeLabelItems(chartArea));
8057    let i, ilen;
8058    for (i = 0, ilen = items.length; i < ilen; ++i) {
8059      const item = items[i];
8060      const tickFont = item.font;
8061      const label = item.label;
8062      if (item.backdrop) {
8063        ctx.fillStyle = item.backdrop.color;
8064        ctx.fillRect(item.backdrop.left, item.backdrop.top, item.backdrop.width, item.backdrop.height);
8065      }
8066      let y = item.textOffset;
8067      (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.M)(ctx, label, 0, y, tickFont, item);
8068    }
8069    if (area) {
8070      (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.N)(ctx);
8071    }
8072  }
8073  drawTitle() {
8074    const {ctx, options: {position, title, reverse}} = this;
8075    if (!title.display) {
8076      return;
8077    }
8078    const font = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.O)(title.font);
8079    const padding = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.K)(title.padding);
8080    const align = title.align;
8081    let offset = font.lineHeight / 2;
8082    if (position === 'bottom' || position === 'center' || (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.i)(position)) {
8083      offset += padding.bottom;
8084      if ((0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.b)(title.text)) {
8085        offset += font.lineHeight * (title.text.length - 1);
8086      }
8087    } else {
8088      offset += padding.top;
8089    }
8090    const {titleX, titleY, maxWidth, rotation} = titleArgs(this, offset, position, align);
8091    (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.M)(ctx, title.text, 0, 0, font, {
8092      color: title.color,
8093      maxWidth,
8094      rotation,
8095      textAlign: titleAlign(align, position, reverse),
8096      textBaseline: 'middle',
8097      translation: [titleX, titleY],
8098    });
8099  }
8100  draw(chartArea) {
8101    if (!this._isVisible()) {
8102      return;
8103    }
8104    this.drawBackground();
8105    this.drawGrid(chartArea);
8106    this.drawBorder();
8107    this.drawTitle();
8108    this.drawLabels(chartArea);
8109  }
8110  _layers() {
8111    const opts = this.options;
8112    const tz = opts.ticks && opts.ticks.z || 0;
8113    const gz = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.v)(opts.grid && opts.grid.z, -1);
8114    if (!this._isVisible() || this.draw !== Scale.prototype.draw) {
8115      return [{
8116        z: tz,
8117        draw: (chartArea) => {
8118          this.draw(chartArea);
8119        }
8120      }];
8121    }
8122    return [{
8123      z: gz,
8124      draw: (chartArea) => {
8125        this.drawBackground();
8126        this.drawGrid(chartArea);
8127        this.drawTitle();
8128      }
8129    }, {
8130      z: gz + 1,
8131      draw: () => {
8132        this.drawBorder();
8133      }
8134    }, {
8135      z: tz,
8136      draw: (chartArea) => {
8137        this.drawLabels(chartArea);
8138      }
8139    }];
8140  }
8141  getMatchingVisibleMetas(type) {
8142    const metas = this.chart.getSortedVisibleDatasetMetas();
8143    const axisID = this.axis + 'AxisID';
8144    const result = [];
8145    let i, ilen;
8146    for (i = 0, ilen = metas.length; i < ilen; ++i) {
8147      const meta = metas[i];
8148      if (meta[axisID] === this.id && (!type || meta.type === type)) {
8149        result.push(meta);
8150      }
8151    }
8152    return result;
8153  }
8154  _resolveTickFontOptions(index) {
8155    const opts = this.options.ticks.setContext(this.getContext(index));
8156    return (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.O)(opts.font);
8157  }
8158  _maxDigits() {
8159    const fontSize = this._resolveTickFontOptions(0).lineHeight;
8160    return (this.isHorizontal() ? this.width : this.height) / fontSize;
8161  }
8162}
8163
8164class TypedRegistry {
8165  constructor(type, scope, override) {
8166    this.type = type;
8167    this.scope = scope;
8168    this.override = override;
8169    this.items = Object.create(null);
8170  }
8171  isForType(type) {
8172    return Object.prototype.isPrototypeOf.call(this.type.prototype, type.prototype);
8173  }
8174  register(item) {
8175    const proto = Object.getPrototypeOf(item);
8176    let parentScope;
8177    if (isIChartComponent(proto)) {
8178      parentScope = this.register(proto);
8179    }
8180    const items = this.items;
8181    const id = item.id;
8182    const scope = this.scope + '.' + id;
8183    if (!id) {
8184      throw new Error('class does not have id: ' + item);
8185    }
8186    if (id in items) {
8187      return scope;
8188    }
8189    items[id] = item;
8190    registerDefaults(item, scope, parentScope);
8191    if (this.override) {
8192      _chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.d.override(item.id, item.overrides);
8193    }
8194    return scope;
8195  }
8196  get(id) {
8197    return this.items[id];
8198  }
8199  unregister(item) {
8200    const items = this.items;
8201    const id = item.id;
8202    const scope = this.scope;
8203    if (id in items) {
8204      delete items[id];
8205    }
8206    if (scope && id in _chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.d[scope]) {
8207      delete _chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.d[scope][id];
8208      if (this.override) {
8209        delete _chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.U[id];
8210      }
8211    }
8212  }
8213}
8214function registerDefaults(item, scope, parentScope) {
8215  const itemDefaults = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.V)(Object.create(null), [
8216    parentScope ? _chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.d.get(parentScope) : {},
8217    _chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.d.get(scope),
8218    item.defaults
8219  ]);
8220  _chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.d.set(scope, itemDefaults);
8221  if (item.defaultRoutes) {
8222    routeDefaults(scope, item.defaultRoutes);
8223  }
8224  if (item.descriptors) {
8225    _chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.d.describe(scope, item.descriptors);
8226  }
8227}
8228function routeDefaults(scope, routes) {
8229  Object.keys(routes).forEach(property => {
8230    const propertyParts = property.split('.');
8231    const sourceName = propertyParts.pop();
8232    const sourceScope = [scope].concat(propertyParts).join('.');
8233    const parts = routes[property].split('.');
8234    const targetName = parts.pop();
8235    const targetScope = parts.join('.');
8236    _chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.d.route(sourceScope, sourceName, targetScope, targetName);
8237  });
8238}
8239function isIChartComponent(proto) {
8240  return 'id' in proto && 'defaults' in proto;
8241}
8242
8243class Registry {
8244  constructor() {
8245    this.controllers = new TypedRegistry(DatasetController, 'datasets', true);
8246    this.elements = new TypedRegistry(Element, 'elements');
8247    this.plugins = new TypedRegistry(Object, 'plugins');
8248    this.scales = new TypedRegistry(Scale, 'scales');
8249    this._typedRegistries = [this.controllers, this.scales, this.elements];
8250  }
8251  add(...args) {
8252    this._each('register', args);
8253  }
8254  remove(...args) {
8255    this._each('unregister', args);
8256  }
8257  addControllers(...args) {
8258    this._each('register', args, this.controllers);
8259  }
8260  addElements(...args) {
8261    this._each('register', args, this.elements);
8262  }
8263  addPlugins(...args) {
8264    this._each('register', args, this.plugins);
8265  }
8266  addScales(...args) {
8267    this._each('register', args, this.scales);
8268  }
8269  getController(id) {
8270    return this._get(id, this.controllers, 'controller');
8271  }
8272  getElement(id) {
8273    return this._get(id, this.elements, 'element');
8274  }
8275  getPlugin(id) {
8276    return this._get(id, this.plugins, 'plugin');
8277  }
8278  getScale(id) {
8279    return this._get(id, this.scales, 'scale');
8280  }
8281  removeControllers(...args) {
8282    this._each('unregister', args, this.controllers);
8283  }
8284  removeElements(...args) {
8285    this._each('unregister', args, this.elements);
8286  }
8287  removePlugins(...args) {
8288    this._each('unregister', args, this.plugins);
8289  }
8290  removeScales(...args) {
8291    this._each('unregister', args, this.scales);
8292  }
8293  _each(method, args, typedRegistry) {
8294    [...args].forEach(arg => {
8295      const reg = typedRegistry || this._getRegistryForType(arg);
8296      if (typedRegistry || reg.isForType(arg) || (reg === this.plugins && arg.id)) {
8297        this._exec(method, reg, arg);
8298      } else {
8299        (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.Q)(arg, item => {
8300          const itemReg = typedRegistry || this._getRegistryForType(item);
8301          this._exec(method, itemReg, item);
8302        });
8303      }
8304    });
8305  }
8306  _exec(method, registry, component) {
8307    const camelMethod = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.W)(method);
8308    (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.C)(component['before' + camelMethod], [], component);
8309    registry[method](component);
8310    (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.C)(component['after' + camelMethod], [], component);
8311  }
8312  _getRegistryForType(type) {
8313    for (let i = 0; i < this._typedRegistries.length; i++) {
8314      const reg = this._typedRegistries[i];
8315      if (reg.isForType(type)) {
8316        return reg;
8317      }
8318    }
8319    return this.plugins;
8320  }
8321  _get(id, typedRegistry, type) {
8322    const item = typedRegistry.get(id);
8323    if (item === undefined) {
8324      throw new Error('"' + id + '" is not a registered ' + type + '.');
8325    }
8326    return item;
8327  }
8328}
8329var registry = new Registry();
8330
8331class ScatterController extends DatasetController {
8332  update(mode) {
8333    const meta = this._cachedMeta;
8334    const {data: points = []} = meta;
8335    const animationsDisabled = this.chart._animationsDisabled;
8336    let {start, count} = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.q)(meta, points, animationsDisabled);
8337    this._drawStart = start;
8338    this._drawCount = count;
8339    if ((0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.w)(meta)) {
8340      start = 0;
8341      count = points.length;
8342    }
8343    if (this.options.showLine) {
8344      const {dataset: line, _dataset} = meta;
8345      line._chart = this.chart;
8346      line._datasetIndex = this.index;
8347      line._decimated = !!_dataset._decimated;
8348      line.points = points;
8349      const options = this.resolveDatasetElementOptions(mode);
8350      options.segment = this.options.segment;
8351      this.updateElement(line, undefined, {
8352        animated: !animationsDisabled,
8353        options
8354      }, mode);
8355    }
8356    this.updateElements(points, start, count, mode);
8357  }
8358  addElements() {
8359    const {showLine} = this.options;
8360    if (!this.datasetElementType && showLine) {
8361      this.datasetElementType = registry.getElement('line');
8362    }
8363    super.addElements();
8364  }
8365  updateElements(points, start, count, mode) {
8366    const reset = mode === 'reset';
8367    const {iScale, vScale, _stacked, _dataset} = this._cachedMeta;
8368    const firstOpts = this.resolveDataElementOptions(start, mode);
8369    const sharedOptions = this.getSharedOptions(firstOpts);
8370    const includeOptions = this.includeOptions(mode, sharedOptions);
8371    const iAxis = iScale.axis;
8372    const vAxis = vScale.axis;
8373    const {spanGaps, segment} = this.options;
8374    const maxGapLength = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.x)(spanGaps) ? spanGaps : Number.POSITIVE_INFINITY;
8375    const directUpdate = this.chart._animationsDisabled || reset || mode === 'none';
8376    let prevParsed = start > 0 && this.getParsed(start - 1);
8377    for (let i = start; i < start + count; ++i) {
8378      const point = points[i];
8379      const parsed = this.getParsed(i);
8380      const properties = directUpdate ? point : {};
8381      const nullData = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.k)(parsed[vAxis]);
8382      const iPixel = properties[iAxis] = iScale.getPixelForValue(parsed[iAxis], i);
8383      const vPixel = properties[vAxis] = reset || nullData ? vScale.getBasePixel() : vScale.getPixelForValue(_stacked ? this.applyStack(vScale, parsed, _stacked) : parsed[vAxis], i);
8384      properties.skip = isNaN(iPixel) || isNaN(vPixel) || nullData;
8385      properties.stop = i > 0 && (Math.abs(parsed[iAxis] - prevParsed[iAxis])) > maxGapLength;
8386      if (segment) {
8387        properties.parsed = parsed;
8388        properties.raw = _dataset.data[i];
8389      }
8390      if (includeOptions) {
8391        properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);
8392      }
8393      if (!directUpdate) {
8394        this.updateElement(point, i, properties, mode);
8395      }
8396      prevParsed = parsed;
8397    }
8398    this.updateSharedOptions(sharedOptions, mode, firstOpts);
8399  }
8400  getMaxOverflow() {
8401    const meta = this._cachedMeta;
8402    const data = meta.data || [];
8403    if (!this.options.showLine) {
8404      let max = 0;
8405      for (let i = data.length - 1; i >= 0; --i) {
8406        max = Math.max(max, data[i].size(this.resolveDataElementOptions(i)) / 2);
8407      }
8408      return max > 0 && max;
8409    }
8410    const dataset = meta.dataset;
8411    const border = dataset.options && dataset.options.borderWidth || 0;
8412    if (!data.length) {
8413      return border;
8414    }
8415    const firstPoint = data[0].size(this.resolveDataElementOptions(0));
8416    const lastPoint = data[data.length - 1].size(this.resolveDataElementOptions(data.length - 1));
8417    return Math.max(border, firstPoint, lastPoint) / 2;
8418  }
8419}
8420ScatterController.id = 'scatter';
8421ScatterController.defaults = {
8422  datasetElementType: false,
8423  dataElementType: 'point',
8424  showLine: false,
8425  fill: false
8426};
8427ScatterController.overrides = {
8428  interaction: {
8429    mode: 'point'
8430  },
8431  plugins: {
8432    tooltip: {
8433      callbacks: {
8434        title() {
8435          return '';
8436        },
8437        label(item) {
8438          return '(' + item.label + ', ' + item.formattedValue + ')';
8439        }
8440      }
8441    }
8442  },
8443  scales: {
8444    x: {
8445      type: 'linear'
8446    },
8447    y: {
8448      type: 'linear'
8449    }
8450  }
8451};
8452
8453var controllers = /*#__PURE__*/Object.freeze({
8454__proto__: null,
8455BarController: BarController,
8456BubbleController: BubbleController,
8457DoughnutController: DoughnutController,
8458LineController: LineController,
8459PolarAreaController: PolarAreaController,
8460PieController: PieController,
8461RadarController: RadarController,
8462ScatterController: ScatterController
8463});
8464
8465function abstract() {
8466  throw new Error('This method is not implemented: Check that a complete date adapter is provided.');
8467}
8468class DateAdapter {
8469  constructor(options) {
8470    this.options = options || {};
8471  }
8472  init(chartOptions) {}
8473  formats() {
8474    return abstract();
8475  }
8476  parse(value, format) {
8477    return abstract();
8478  }
8479  format(timestamp, format) {
8480    return abstract();
8481  }
8482  add(timestamp, amount, unit) {
8483    return abstract();
8484  }
8485  diff(a, b, unit) {
8486    return abstract();
8487  }
8488  startOf(timestamp, unit, weekday) {
8489    return abstract();
8490  }
8491  endOf(timestamp, unit) {
8492    return abstract();
8493  }
8494}
8495DateAdapter.override = function(members) {
8496  Object.assign(DateAdapter.prototype, members);
8497};
8498var adapters = {
8499  _date: DateAdapter
8500};
8501
8502function binarySearch(metaset, axis, value, intersect) {
8503  const {controller, data, _sorted} = metaset;
8504  const iScale = controller._cachedMeta.iScale;
8505  if (iScale && axis === iScale.axis && axis !== 'r' && _sorted && data.length) {
8506    const lookupMethod = iScale._reversePixels ? _chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.Y : _chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.Z;
8507    if (!intersect) {
8508      return lookupMethod(data, axis, value);
8509    } else if (controller._sharedOptions) {
8510      const el = data[0];
8511      const range = typeof el.getRange === 'function' && el.getRange(axis);
8512      if (range) {
8513        const start = lookupMethod(data, axis, value - range);
8514        const end = lookupMethod(data, axis, value + range);
8515        return {lo: start.lo, hi: end.hi};
8516      }
8517    }
8518  }
8519  return {lo: 0, hi: data.length - 1};
8520}
8521function evaluateInteractionItems(chart, axis, position, handler, intersect) {
8522  const metasets = chart.getSortedVisibleDatasetMetas();
8523  const value = position[axis];
8524  for (let i = 0, ilen = metasets.length; i < ilen; ++i) {
8525    const {index, data} = metasets[i];
8526    const {lo, hi} = binarySearch(metasets[i], axis, value, intersect);
8527    for (let j = lo; j <= hi; ++j) {
8528      const element = data[j];
8529      if (!element.skip) {
8530        handler(element, index, j);
8531      }
8532    }
8533  }
8534}
8535function getDistanceMetricForAxis(axis) {
8536  const useX = axis.indexOf('x') !== -1;
8537  const useY = axis.indexOf('y') !== -1;
8538  return function(pt1, pt2) {
8539    const deltaX = useX ? Math.abs(pt1.x - pt2.x) : 0;
8540    const deltaY = useY ? Math.abs(pt1.y - pt2.y) : 0;
8541    return Math.sqrt(Math.pow(deltaX, 2) + Math.pow(deltaY, 2));
8542  };
8543}
8544function getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) {
8545  const items = [];
8546  if (!includeInvisible && !chart.isPointInArea(position)) {
8547    return items;
8548  }
8549  const evaluationFunc = function(element, datasetIndex, index) {
8550    if (!includeInvisible && !(0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.$)(element, chart.chartArea, 0)) {
8551      return;
8552    }
8553    if (element.inRange(position.x, position.y, useFinalPosition)) {
8554      items.push({element, datasetIndex, index});
8555    }
8556  };
8557  evaluateInteractionItems(chart, axis, position, evaluationFunc, true);
8558  return items;
8559}
8560function getNearestRadialItems(chart, position, axis, useFinalPosition) {
8561  let items = [];
8562  function evaluationFunc(element, datasetIndex, index) {
8563    const {startAngle, endAngle} = element.getProps(['startAngle', 'endAngle'], useFinalPosition);
8564    const {angle} = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.a0)(element, {x: position.x, y: position.y});
8565    if ((0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.p)(angle, startAngle, endAngle)) {
8566      items.push({element, datasetIndex, index});
8567    }
8568  }
8569  evaluateInteractionItems(chart, axis, position, evaluationFunc);
8570  return items;
8571}
8572function getNearestCartesianItems(chart, position, axis, intersect, useFinalPosition, includeInvisible) {
8573  let items = [];
8574  const distanceMetric = getDistanceMetricForAxis(axis);
8575  let minDistance = Number.POSITIVE_INFINITY;
8576  function evaluationFunc(element, datasetIndex, index) {
8577    const inRange = element.inRange(position.x, position.y, useFinalPosition);
8578    if (intersect && !inRange) {
8579      return;
8580    }
8581    const center = element.getCenterPoint(useFinalPosition);
8582    const pointInArea = !!includeInvisible || chart.isPointInArea(center);
8583    if (!pointInArea && !inRange) {
8584      return;
8585    }
8586    const distance = distanceMetric(position, center);
8587    if (distance < minDistance) {
8588      items = [{element, datasetIndex, index}];
8589      minDistance = distance;
8590    } else if (distance === minDistance) {
8591      items.push({element, datasetIndex, index});
8592    }
8593  }
8594  evaluateInteractionItems(chart, axis, position, evaluationFunc);
8595  return items;
8596}
8597function getNearestItems(chart, position, axis, intersect, useFinalPosition, includeInvisible) {
8598  if (!includeInvisible && !chart.isPointInArea(position)) {
8599    return [];
8600  }
8601  return axis === 'r' && !intersect
8602    ? getNearestRadialItems(chart, position, axis, useFinalPosition)
8603    : getNearestCartesianItems(chart, position, axis, intersect, useFinalPosition, includeInvisible);
8604}
8605function getAxisItems(chart, position, axis, intersect, useFinalPosition) {
8606  const items = [];
8607  const rangeMethod = axis === 'x' ? 'inXRange' : 'inYRange';
8608  let intersectsItem = false;
8609  evaluateInteractionItems(chart, axis, position, (element, datasetIndex, index) => {
8610    if (element[rangeMethod](position[axis], useFinalPosition)) {
8611      items.push({element, datasetIndex, index});
8612      intersectsItem = intersectsItem || element.inRange(position.x, position.y, useFinalPosition);
8613    }
8614  });
8615  if (intersect && !intersectsItem) {
8616    return [];
8617  }
8618  return items;
8619}
8620var Interaction = {
8621  evaluateInteractionItems,
8622  modes: {
8623    index(chart, e, options, useFinalPosition) {
8624      const position = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.X)(e, chart);
8625      const axis = options.axis || 'x';
8626      const includeInvisible = options.includeInvisible || false;
8627      const items = options.intersect
8628        ? getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible)
8629        : getNearestItems(chart, position, axis, false, useFinalPosition, includeInvisible);
8630      const elements = [];
8631      if (!items.length) {
8632        return [];
8633      }
8634      chart.getSortedVisibleDatasetMetas().forEach((meta) => {
8635        const index = items[0].index;
8636        const element = meta.data[index];
8637        if (element && !element.skip) {
8638          elements.push({element, datasetIndex: meta.index, index});
8639        }
8640      });
8641      return elements;
8642    },
8643    dataset(chart, e, options, useFinalPosition) {
8644      const position = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.X)(e, chart);
8645      const axis = options.axis || 'xy';
8646      const includeInvisible = options.includeInvisible || false;
8647      let items = options.intersect
8648        ? getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) :
8649        getNearestItems(chart, position, axis, false, useFinalPosition, includeInvisible);
8650      if (items.length > 0) {
8651        const datasetIndex = items[0].datasetIndex;
8652        const data = chart.getDatasetMeta(datasetIndex).data;
8653        items = [];
8654        for (let i = 0; i < data.length; ++i) {
8655          items.push({element: data[i], datasetIndex, index: i});
8656        }
8657      }
8658      return items;
8659    },
8660    point(chart, e, options, useFinalPosition) {
8661      const position = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.X)(e, chart);
8662      const axis = options.axis || 'xy';
8663      const includeInvisible = options.includeInvisible || false;
8664      return getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible);
8665    },
8666    nearest(chart, e, options, useFinalPosition) {
8667      const position = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.X)(e, chart);
8668      const axis = options.axis || 'xy';
8669      const includeInvisible = options.includeInvisible || false;
8670      return getNearestItems(chart, position, axis, options.intersect, useFinalPosition, includeInvisible);
8671    },
8672    x(chart, e, options, useFinalPosition) {
8673      const position = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.X)(e, chart);
8674      return getAxisItems(chart, position, 'x', options.intersect, useFinalPosition);
8675    },
8676    y(chart, e, options, useFinalPosition) {
8677      const position = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.X)(e, chart);
8678      return getAxisItems(chart, position, 'y', options.intersect, useFinalPosition);
8679    }
8680  }
8681};
8682
8683const STATIC_POSITIONS = ['left', 'top', 'right', 'bottom'];
8684function filterByPosition(array, position) {
8685  return array.filter(v => v.pos === position);
8686}
8687function filterDynamicPositionByAxis(array, axis) {
8688  return array.filter(v => STATIC_POSITIONS.indexOf(v.pos) === -1 && v.box.axis === axis);
8689}
8690function sortByWeight(array, reverse) {
8691  return array.sort((a, b) => {
8692    const v0 = reverse ? b : a;
8693    const v1 = reverse ? a : b;
8694    return v0.weight === v1.weight ?
8695      v0.index - v1.index :
8696      v0.weight - v1.weight;
8697  });
8698}
8699function wrapBoxes(boxes) {
8700  const layoutBoxes = [];
8701  let i, ilen, box, pos, stack, stackWeight;
8702  for (i = 0, ilen = (boxes || []).length; i < ilen; ++i) {
8703    box = boxes[i];
8704    ({position: pos, options: {stack, stackWeight = 1}} = box);
8705    layoutBoxes.push({
8706      index: i,
8707      box,
8708      pos,
8709      horizontal: box.isHorizontal(),
8710      weight: box.weight,
8711      stack: stack && (pos + stack),
8712      stackWeight
8713    });
8714  }
8715  return layoutBoxes;
8716}
8717function buildStacks(layouts) {
8718  const stacks = {};
8719  for (const wrap of layouts) {
8720    const {stack, pos, stackWeight} = wrap;
8721    if (!stack || !STATIC_POSITIONS.includes(pos)) {
8722      continue;
8723    }
8724    const _stack = stacks[stack] || (stacks[stack] = {count: 0, placed: 0, weight: 0, size: 0});
8725    _stack.count++;
8726    _stack.weight += stackWeight;
8727  }
8728  return stacks;
8729}
8730function setLayoutDims(layouts, params) {
8731  const stacks = buildStacks(layouts);
8732  const {vBoxMaxWidth, hBoxMaxHeight} = params;
8733  let i, ilen, layout;
8734  for (i = 0, ilen = layouts.length; i < ilen; ++i) {
8735    layout = layouts[i];
8736    const {fullSize} = layout.box;
8737    const stack = stacks[layout.stack];
8738    const factor = stack && layout.stackWeight / stack.weight;
8739    if (layout.horizontal) {
8740      layout.width = factor ? factor * vBoxMaxWidth : fullSize && params.availableWidth;
8741      layout.height = hBoxMaxHeight;
8742    } else {
8743      layout.width = vBoxMaxWidth;
8744      layout.height = factor ? factor * hBoxMaxHeight : fullSize && params.availableHeight;
8745    }
8746  }
8747  return stacks;
8748}
8749function buildLayoutBoxes(boxes) {
8750  const layoutBoxes = wrapBoxes(boxes);
8751  const fullSize = sortByWeight(layoutBoxes.filter(wrap => wrap.box.fullSize), true);
8752  const left = sortByWeight(filterByPosition(layoutBoxes, 'left'), true);
8753  const right = sortByWeight(filterByPosition(layoutBoxes, 'right'));
8754  const top = sortByWeight(filterByPosition(layoutBoxes, 'top'), true);
8755  const bottom = sortByWeight(filterByPosition(layoutBoxes, 'bottom'));
8756  const centerHorizontal = filterDynamicPositionByAxis(layoutBoxes, 'x');
8757  const centerVertical = filterDynamicPositionByAxis(layoutBoxes, 'y');
8758  return {
8759    fullSize,
8760    leftAndTop: left.concat(top),
8761    rightAndBottom: right.concat(centerVertical).concat(bottom).concat(centerHorizontal),
8762    chartArea: filterByPosition(layoutBoxes, 'chartArea'),
8763    vertical: left.concat(right).concat(centerVertical),
8764    horizontal: top.concat(bottom).concat(centerHorizontal)
8765  };
8766}
8767function getCombinedMax(maxPadding, chartArea, a, b) {
8768  return Math.max(maxPadding[a], chartArea[a]) + Math.max(maxPadding[b], chartArea[b]);
8769}
8770function updateMaxPadding(maxPadding, boxPadding) {
8771  maxPadding.top = Math.max(maxPadding.top, boxPadding.top);
8772  maxPadding.left = Math.max(maxPadding.left, boxPadding.left);
8773  maxPadding.bottom = Math.max(maxPadding.bottom, boxPadding.bottom);
8774  maxPadding.right = Math.max(maxPadding.right, boxPadding.right);
8775}
8776function updateDims(chartArea, params, layout, stacks) {
8777  const {pos, box} = layout;
8778  const maxPadding = chartArea.maxPadding;
8779  if (!(0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.i)(pos)) {
8780    if (layout.size) {
8781      chartArea[pos] -= layout.size;
8782    }
8783    const stack = stacks[layout.stack] || {size: 0, count: 1};
8784    stack.size = Math.max(stack.size, layout.horizontal ? box.height : box.width);
8785    layout.size = stack.size / stack.count;
8786    chartArea[pos] += layout.size;
8787  }
8788  if (box.getPadding) {
8789    updateMaxPadding(maxPadding, box.getPadding());
8790  }
8791  const newWidth = Math.max(0, params.outerWidth - getCombinedMax(maxPadding, chartArea, 'left', 'right'));
8792  const newHeight = Math.max(0, params.outerHeight - getCombinedMax(maxPadding, chartArea, 'top', 'bottom'));
8793  const widthChanged = newWidth !== chartArea.w;
8794  const heightChanged = newHeight !== chartArea.h;
8795  chartArea.w = newWidth;
8796  chartArea.h = newHeight;
8797  return layout.horizontal
8798    ? {same: widthChanged, other: heightChanged}
8799    : {same: heightChanged, other: widthChanged};
8800}
8801function handleMaxPadding(chartArea) {
8802  const maxPadding = chartArea.maxPadding;
8803  function updatePos(pos) {
8804    const change = Math.max(maxPadding[pos] - chartArea[pos], 0);
8805    chartArea[pos] += change;
8806    return change;
8807  }
8808  chartArea.y += updatePos('top');
8809  chartArea.x += updatePos('left');
8810  updatePos('right');
8811  updatePos('bottom');
8812}
8813function getMargins(horizontal, chartArea) {
8814  const maxPadding = chartArea.maxPadding;
8815  function marginForPositions(positions) {
8816    const margin = {left: 0, top: 0, right: 0, bottom: 0};
8817    positions.forEach((pos) => {
8818      margin[pos] = Math.max(chartArea[pos], maxPadding[pos]);
8819    });
8820    return margin;
8821  }
8822  return horizontal
8823    ? marginForPositions(['left', 'right'])
8824    : marginForPositions(['top', 'bottom']);
8825}
8826function fitBoxes(boxes, chartArea, params, stacks) {
8827  const refitBoxes = [];
8828  let i, ilen, layout, box, refit, changed;
8829  for (i = 0, ilen = boxes.length, refit = 0; i < ilen; ++i) {
8830    layout = boxes[i];
8831    box = layout.box;
8832    box.update(
8833      layout.width || chartArea.w,
8834      layout.height || chartArea.h,
8835      getMargins(layout.horizontal, chartArea)
8836    );
8837    const {same, other} = updateDims(chartArea, params, layout, stacks);
8838    refit |= same && refitBoxes.length;
8839    changed = changed || other;
8840    if (!box.fullSize) {
8841      refitBoxes.push(layout);
8842    }
8843  }
8844  return refit && fitBoxes(refitBoxes, chartArea, params, stacks) || changed;
8845}
8846function setBoxDims(box, left, top, width, height) {
8847  box.top = top;
8848  box.left = left;
8849  box.right = left + width;
8850  box.bottom = top + height;
8851  box.width = width;
8852  box.height = height;
8853}
8854function placeBoxes(boxes, chartArea, params, stacks) {
8855  const userPadding = params.padding;
8856  let {x, y} = chartArea;
8857  for (const layout of boxes) {
8858    const box = layout.box;
8859    const stack = stacks[layout.stack] || {count: 1, placed: 0, weight: 1};
8860    const weight = (layout.stackWeight / stack.weight) || 1;
8861    if (layout.horizontal) {
8862      const width = chartArea.w * weight;
8863      const height = stack.size || box.height;
8864      if ((0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.j)(stack.start)) {
8865        y = stack.start;
8866      }
8867      if (box.fullSize) {
8868        setBoxDims(box, userPadding.left, y, params.outerWidth - userPadding.right - userPadding.left, height);
8869      } else {
8870        setBoxDims(box, chartArea.left + stack.placed, y, width, height);
8871      }
8872      stack.start = y;
8873      stack.placed += width;
8874      y = box.bottom;
8875    } else {
8876      const height = chartArea.h * weight;
8877      const width = stack.size || box.width;
8878      if ((0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.j)(stack.start)) {
8879        x = stack.start;
8880      }
8881      if (box.fullSize) {
8882        setBoxDims(box, x, userPadding.top, width, params.outerHeight - userPadding.bottom - userPadding.top);
8883      } else {
8884        setBoxDims(box, x, chartArea.top + stack.placed, width, height);
8885      }
8886      stack.start = x;
8887      stack.placed += height;
8888      x = box.right;
8889    }
8890  }
8891  chartArea.x = x;
8892  chartArea.y = y;
8893}
8894_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.d.set('layout', {
8895  autoPadding: true,
8896  padding: {
8897    top: 0,
8898    right: 0,
8899    bottom: 0,
8900    left: 0
8901  }
8902});
8903var layouts = {
8904  addBox(chart, item) {
8905    if (!chart.boxes) {
8906      chart.boxes = [];
8907    }
8908    item.fullSize = item.fullSize || false;
8909    item.position = item.position || 'top';
8910    item.weight = item.weight || 0;
8911    item._layers = item._layers || function() {
8912      return [{
8913        z: 0,
8914        draw(chartArea) {
8915          item.draw(chartArea);
8916        }
8917      }];
8918    };
8919    chart.boxes.push(item);
8920  },
8921  removeBox(chart, layoutItem) {
8922    const index = chart.boxes ? chart.boxes.indexOf(layoutItem) : -1;
8923    if (index !== -1) {
8924      chart.boxes.splice(index, 1);
8925    }
8926  },
8927  configure(chart, item, options) {
8928    item.fullSize = options.fullSize;
8929    item.position = options.position;
8930    item.weight = options.weight;
8931  },
8932  update(chart, width, height, minPadding) {
8933    if (!chart) {
8934      return;
8935    }
8936    const padding = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.K)(chart.options.layout.padding);
8937    const availableWidth = Math.max(width - padding.width, 0);
8938    const availableHeight = Math.max(height - padding.height, 0);
8939    const boxes = buildLayoutBoxes(chart.boxes);
8940    const verticalBoxes = boxes.vertical;
8941    const horizontalBoxes = boxes.horizontal;
8942    (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.Q)(chart.boxes, box => {
8943      if (typeof box.beforeLayout === 'function') {
8944        box.beforeLayout();
8945      }
8946    });
8947    const visibleVerticalBoxCount = verticalBoxes.reduce((total, wrap) =>
8948      wrap.box.options && wrap.box.options.display === false ? total : total + 1, 0) || 1;
8949    const params = Object.freeze({
8950      outerWidth: width,
8951      outerHeight: height,
8952      padding,
8953      availableWidth,
8954      availableHeight,
8955      vBoxMaxWidth: availableWidth / 2 / visibleVerticalBoxCount,
8956      hBoxMaxHeight: availableHeight / 2
8957    });
8958    const maxPadding = Object.assign({}, padding);
8959    updateMaxPadding(maxPadding, (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.K)(minPadding));
8960    const chartArea = Object.assign({
8961      maxPadding,
8962      w: availableWidth,
8963      h: availableHeight,
8964      x: padding.left,
8965      y: padding.top
8966    }, padding);
8967    const stacks = setLayoutDims(verticalBoxes.concat(horizontalBoxes), params);
8968    fitBoxes(boxes.fullSize, chartArea, params, stacks);
8969    fitBoxes(verticalBoxes, chartArea, params, stacks);
8970    if (fitBoxes(horizontalBoxes, chartArea, params, stacks)) {
8971      fitBoxes(verticalBoxes, chartArea, params, stacks);
8972    }
8973    handleMaxPadding(chartArea);
8974    placeBoxes(boxes.leftAndTop, chartArea, params, stacks);
8975    chartArea.x += chartArea.w;
8976    chartArea.y += chartArea.h;
8977    placeBoxes(boxes.rightAndBottom, chartArea, params, stacks);
8978    chart.chartArea = {
8979      left: chartArea.left,
8980      top: chartArea.top,
8981      right: chartArea.left + chartArea.w,
8982      bottom: chartArea.top + chartArea.h,
8983      height: chartArea.h,
8984      width: chartArea.w,
8985    };
8986    (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.Q)(boxes.chartArea, (layout) => {
8987      const box = layout.box;
8988      Object.assign(box, chart.chartArea);
8989      box.update(chartArea.w, chartArea.h, {left: 0, top: 0, right: 0, bottom: 0});
8990    });
8991  }
8992};
8993
8994class BasePlatform {
8995  acquireContext(canvas, aspectRatio) {}
8996  releaseContext(context) {
8997    return false;
8998  }
8999  addEventListener(chart, type, listener) {}
9000  removeEventListener(chart, type, listener) {}
9001  getDevicePixelRatio() {
9002    return 1;
9003  }
9004  getMaximumSize(element, width, height, aspectRatio) {
9005    width = Math.max(0, width || element.width);
9006    height = height || element.height;
9007    return {
9008      width,
9009      height: Math.max(0, aspectRatio ? Math.floor(width / aspectRatio) : height)
9010    };
9011  }
9012  isAttached(canvas) {
9013    return true;
9014  }
9015  updateConfig(config) {
9016  }
9017}
9018
9019class BasicPlatform extends BasePlatform {
9020  acquireContext(item) {
9021    return item && item.getContext && item.getContext('2d') || null;
9022  }
9023  updateConfig(config) {
9024    config.options.animation = false;
9025  }
9026}
9027
9028const EXPANDO_KEY = '$chartjs';
9029const EVENT_TYPES = {
9030  touchstart: 'mousedown',
9031  touchmove: 'mousemove',
9032  touchend: 'mouseup',
9033  pointerenter: 'mouseenter',
9034  pointerdown: 'mousedown',
9035  pointermove: 'mousemove',
9036  pointerup: 'mouseup',
9037  pointerleave: 'mouseout',
9038  pointerout: 'mouseout'
9039};
9040const isNullOrEmpty = value => value === null || value === '';
9041function initCanvas(canvas, aspectRatio) {
9042  const style = canvas.style;
9043  const renderHeight = canvas.getAttribute('height');
9044  const renderWidth = canvas.getAttribute('width');
9045  canvas[EXPANDO_KEY] = {
9046    initial: {
9047      height: renderHeight,
9048      width: renderWidth,
9049      style: {
9050        display: style.display,
9051        height: style.height,
9052        width: style.width
9053      }
9054    }
9055  };
9056  style.display = style.display || 'block';
9057  style.boxSizing = style.boxSizing || 'border-box';
9058  if (isNullOrEmpty(renderWidth)) {
9059    const displayWidth = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.a3)(canvas, 'width');
9060    if (displayWidth !== undefined) {
9061      canvas.width = displayWidth;
9062    }
9063  }
9064  if (isNullOrEmpty(renderHeight)) {
9065    if (canvas.style.height === '') {
9066      canvas.height = canvas.width / (aspectRatio || 2);
9067    } else {
9068      const displayHeight = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.a3)(canvas, 'height');
9069      if (displayHeight !== undefined) {
9070        canvas.height = displayHeight;
9071      }
9072    }
9073  }
9074  return canvas;
9075}
9076const eventListenerOptions = _chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.a5 ? {passive: true} : false;
9077function addListener(node, type, listener) {
9078  node.addEventListener(type, listener, eventListenerOptions);
9079}
9080function removeListener(chart, type, listener) {
9081  chart.canvas.removeEventListener(type, listener, eventListenerOptions);
9082}
9083function fromNativeEvent(event, chart) {
9084  const type = EVENT_TYPES[event.type] || event.type;
9085  const {x, y} = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.X)(event, chart);
9086  return {
9087    type,
9088    chart,
9089    native: event,
9090    x: x !== undefined ? x : null,
9091    y: y !== undefined ? y : null,
9092  };
9093}
9094function nodeListContains(nodeList, canvas) {
9095  for (const node of nodeList) {
9096    if (node === canvas || node.contains(canvas)) {
9097      return true;
9098    }
9099  }
9100}
9101function createAttachObserver(chart, type, listener) {
9102  const canvas = chart.canvas;
9103  const observer = new MutationObserver(entries => {
9104    let trigger = false;
9105    for (const entry of entries) {
9106      trigger = trigger || nodeListContains(entry.addedNodes, canvas);
9107      trigger = trigger && !nodeListContains(entry.removedNodes, canvas);
9108    }
9109    if (trigger) {
9110      listener();
9111    }
9112  });
9113  observer.observe(document, {childList: true, subtree: true});
9114  return observer;
9115}
9116function createDetachObserver(chart, type, listener) {
9117  const canvas = chart.canvas;
9118  const observer = new MutationObserver(entries => {
9119    let trigger = false;
9120    for (const entry of entries) {
9121      trigger = trigger || nodeListContains(entry.removedNodes, canvas);
9122      trigger = trigger && !nodeListContains(entry.addedNodes, canvas);
9123    }
9124    if (trigger) {
9125      listener();
9126    }
9127  });
9128  observer.observe(document, {childList: true, subtree: true});
9129  return observer;
9130}
9131const drpListeningCharts = new Map();
9132let oldDevicePixelRatio = 0;
9133function onWindowResize() {
9134  const dpr = window.devicePixelRatio;
9135  if (dpr === oldDevicePixelRatio) {
9136    return;
9137  }
9138  oldDevicePixelRatio = dpr;
9139  drpListeningCharts.forEach((resize, chart) => {
9140    if (chart.currentDevicePixelRatio !== dpr) {
9141      resize();
9142    }
9143  });
9144}
9145function listenDevicePixelRatioChanges(chart, resize) {
9146  if (!drpListeningCharts.size) {
9147    window.addEventListener('resize', onWindowResize);
9148  }
9149  drpListeningCharts.set(chart, resize);
9150}
9151function unlistenDevicePixelRatioChanges(chart) {
9152  drpListeningCharts.delete(chart);
9153  if (!drpListeningCharts.size) {
9154    window.removeEventListener('resize', onWindowResize);
9155  }
9156}
9157function createResizeObserver(chart, type, listener) {
9158  const canvas = chart.canvas;
9159  const container = canvas && (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.a2)(canvas);
9160  if (!container) {
9161    return;
9162  }
9163  const resize = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.a4)((width, height) => {
9164    const w = container.clientWidth;
9165    listener(width, height);
9166    if (w < container.clientWidth) {
9167      listener();
9168    }
9169  }, window);
9170  const observer = new ResizeObserver(entries => {
9171    const entry = entries[0];
9172    const width = entry.contentRect.width;
9173    const height = entry.contentRect.height;
9174    if (width === 0 && height === 0) {
9175      return;
9176    }
9177    resize(width, height);
9178  });
9179  observer.observe(container);
9180  listenDevicePixelRatioChanges(chart, resize);
9181  return observer;
9182}
9183function releaseObserver(chart, type, observer) {
9184  if (observer) {
9185    observer.disconnect();
9186  }
9187  if (type === 'resize') {
9188    unlistenDevicePixelRatioChanges(chart);
9189  }
9190}
9191function createProxyAndListen(chart, type, listener) {
9192  const canvas = chart.canvas;
9193  const proxy = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.a4)((event) => {
9194    if (chart.ctx !== null) {
9195      listener(fromNativeEvent(event, chart));
9196    }
9197  }, chart, (args) => {
9198    const event = args[0];
9199    return [event, event.offsetX, event.offsetY];
9200  });
9201  addListener(canvas, type, proxy);
9202  return proxy;
9203}
9204class DomPlatform extends BasePlatform {
9205  acquireContext(canvas, aspectRatio) {
9206    const context = canvas && canvas.getContext && canvas.getContext('2d');
9207    if (context && context.canvas === canvas) {
9208      initCanvas(canvas, aspectRatio);
9209      return context;
9210    }
9211    return null;
9212  }
9213  releaseContext(context) {
9214    const canvas = context.canvas;
9215    if (!canvas[EXPANDO_KEY]) {
9216      return false;
9217    }
9218    const initial = canvas[EXPANDO_KEY].initial;
9219    ['height', 'width'].forEach((prop) => {
9220      const value = initial[prop];
9221      if ((0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.k)(value)) {
9222        canvas.removeAttribute(prop);
9223      } else {
9224        canvas.setAttribute(prop, value);
9225      }
9226    });
9227    const style = initial.style || {};
9228    Object.keys(style).forEach((key) => {
9229      canvas.style[key] = style[key];
9230    });
9231    canvas.width = canvas.width;
9232    delete canvas[EXPANDO_KEY];
9233    return true;
9234  }
9235  addEventListener(chart, type, listener) {
9236    this.removeEventListener(chart, type);
9237    const proxies = chart.$proxies || (chart.$proxies = {});
9238    const handlers = {
9239      attach: createAttachObserver,
9240      detach: createDetachObserver,
9241      resize: createResizeObserver
9242    };
9243    const handler = handlers[type] || createProxyAndListen;
9244    proxies[type] = handler(chart, type, listener);
9245  }
9246  removeEventListener(chart, type) {
9247    const proxies = chart.$proxies || (chart.$proxies = {});
9248    const proxy = proxies[type];
9249    if (!proxy) {
9250      return;
9251    }
9252    const handlers = {
9253      attach: releaseObserver,
9254      detach: releaseObserver,
9255      resize: releaseObserver
9256    };
9257    const handler = handlers[type] || removeListener;
9258    handler(chart, type, proxy);
9259    proxies[type] = undefined;
9260  }
9261  getDevicePixelRatio() {
9262    return window.devicePixelRatio;
9263  }
9264  getMaximumSize(canvas, width, height, aspectRatio) {
9265    return (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.a1)(canvas, width, height, aspectRatio);
9266  }
9267  isAttached(canvas) {
9268    const container = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.a2)(canvas);
9269    return !!(container && container.isConnected);
9270  }
9271}
9272
9273function _detectPlatform(canvas) {
9274  if (!(0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.a6)() || (typeof OffscreenCanvas !== 'undefined' && canvas instanceof OffscreenCanvas)) {
9275    return BasicPlatform;
9276  }
9277  return DomPlatform;
9278}
9279
9280class PluginService {
9281  constructor() {
9282    this._init = [];
9283  }
9284  notify(chart, hook, args, filter) {
9285    if (hook === 'beforeInit') {
9286      this._init = this._createDescriptors(chart, true);
9287      this._notify(this._init, chart, 'install');
9288    }
9289    const descriptors = filter ? this._descriptors(chart).filter(filter) : this._descriptors(chart);
9290    const result = this._notify(descriptors, chart, hook, args);
9291    if (hook === 'afterDestroy') {
9292      this._notify(descriptors, chart, 'stop');
9293      this._notify(this._init, chart, 'uninstall');
9294    }
9295    return result;
9296  }
9297  _notify(descriptors, chart, hook, args) {
9298    args = args || {};
9299    for (const descriptor of descriptors) {
9300      const plugin = descriptor.plugin;
9301      const method = plugin[hook];
9302      const params = [chart, args, descriptor.options];
9303      if ((0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.C)(method, params, plugin) === false && args.cancelable) {
9304        return false;
9305      }
9306    }
9307    return true;
9308  }
9309  invalidate() {
9310    if (!(0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.k)(this._cache)) {
9311      this._oldCache = this._cache;
9312      this._cache = undefined;
9313    }
9314  }
9315  _descriptors(chart) {
9316    if (this._cache) {
9317      return this._cache;
9318    }
9319    const descriptors = this._cache = this._createDescriptors(chart);
9320    this._notifyStateChanges(chart);
9321    return descriptors;
9322  }
9323  _createDescriptors(chart, all) {
9324    const config = chart && chart.config;
9325    const options = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.v)(config.options && config.options.plugins, {});
9326    const plugins = allPlugins(config);
9327    return options === false && !all ? [] : createDescriptors(chart, plugins, options, all);
9328  }
9329  _notifyStateChanges(chart) {
9330    const previousDescriptors = this._oldCache || [];
9331    const descriptors = this._cache;
9332    const diff = (a, b) => a.filter(x => !b.some(y => x.plugin.id === y.plugin.id));
9333    this._notify(diff(previousDescriptors, descriptors), chart, 'stop');
9334    this._notify(diff(descriptors, previousDescriptors), chart, 'start');
9335  }
9336}
9337function allPlugins(config) {
9338  const localIds = {};
9339  const plugins = [];
9340  const keys = Object.keys(registry.plugins.items);
9341  for (let i = 0; i < keys.length; i++) {
9342    plugins.push(registry.getPlugin(keys[i]));
9343  }
9344  const local = config.plugins || [];
9345  for (let i = 0; i < local.length; i++) {
9346    const plugin = local[i];
9347    if (plugins.indexOf(plugin) === -1) {
9348      plugins.push(plugin);
9349      localIds[plugin.id] = true;
9350    }
9351  }
9352  return {plugins, localIds};
9353}
9354function getOpts(options, all) {
9355  if (!all && options === false) {
9356    return null;
9357  }
9358  if (options === true) {
9359    return {};
9360  }
9361  return options;
9362}
9363function createDescriptors(chart, {plugins, localIds}, options, all) {
9364  const result = [];
9365  const context = chart.getContext();
9366  for (const plugin of plugins) {
9367    const id = plugin.id;
9368    const opts = getOpts(options[id], all);
9369    if (opts === null) {
9370      continue;
9371    }
9372    result.push({
9373      plugin,
9374      options: pluginOpts(chart.config, {plugin, local: localIds[id]}, opts, context)
9375    });
9376  }
9377  return result;
9378}
9379function pluginOpts(config, {plugin, local}, opts, context) {
9380  const keys = config.pluginScopeKeys(plugin);
9381  const scopes = config.getOptionScopes(opts, keys);
9382  if (local && plugin.defaults) {
9383    scopes.push(plugin.defaults);
9384  }
9385  return config.createResolver(scopes, context, [''], {
9386    scriptable: false,
9387    indexable: false,
9388    allKeys: true
9389  });
9390}
9391
9392function getIndexAxis(type, options) {
9393  const datasetDefaults = _chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.d.datasets[type] || {};
9394  const datasetOptions = (options.datasets || {})[type] || {};
9395  return datasetOptions.indexAxis || options.indexAxis || datasetDefaults.indexAxis || 'x';
9396}
9397function getAxisFromDefaultScaleID(id, indexAxis) {
9398  let axis = id;
9399  if (id === '_index_') {
9400    axis = indexAxis;
9401  } else if (id === '_value_') {
9402    axis = indexAxis === 'x' ? 'y' : 'x';
9403  }
9404  return axis;
9405}
9406function getDefaultScaleIDFromAxis(axis, indexAxis) {
9407  return axis === indexAxis ? '_index_' : '_value_';
9408}
9409function axisFromPosition(position) {
9410  if (position === 'top' || position === 'bottom') {
9411    return 'x';
9412  }
9413  if (position === 'left' || position === 'right') {
9414    return 'y';
9415  }
9416}
9417function determineAxis(id, scaleOptions) {
9418  if (id === 'x' || id === 'y') {
9419    return id;
9420  }
9421  return scaleOptions.axis || axisFromPosition(scaleOptions.position) || id.charAt(0).toLowerCase();
9422}
9423function mergeScaleConfig(config, options) {
9424  const chartDefaults = _chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.U[config.type] || {scales: {}};
9425  const configScales = options.scales || {};
9426  const chartIndexAxis = getIndexAxis(config.type, options);
9427  const firstIDs = Object.create(null);
9428  const scales = Object.create(null);
9429  Object.keys(configScales).forEach(id => {
9430    const scaleConf = configScales[id];
9431    if (!(0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.i)(scaleConf)) {
9432      return console.error(`Invalid scale configuration for scale: ${id}`);
9433    }
9434    if (scaleConf._proxy) {
9435      return console.warn(`Ignoring resolver passed as options for scale: ${id}`);
9436    }
9437    const axis = determineAxis(id, scaleConf);
9438    const defaultId = getDefaultScaleIDFromAxis(axis, chartIndexAxis);
9439    const defaultScaleOptions = chartDefaults.scales || {};
9440    firstIDs[axis] = firstIDs[axis] || id;
9441    scales[id] = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.ac)(Object.create(null), [{axis}, scaleConf, defaultScaleOptions[axis], defaultScaleOptions[defaultId]]);
9442  });
9443  config.data.datasets.forEach(dataset => {
9444    const type = dataset.type || config.type;
9445    const indexAxis = dataset.indexAxis || getIndexAxis(type, options);
9446    const datasetDefaults = _chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.U[type] || {};
9447    const defaultScaleOptions = datasetDefaults.scales || {};
9448    Object.keys(defaultScaleOptions).forEach(defaultID => {
9449      const axis = getAxisFromDefaultScaleID(defaultID, indexAxis);
9450      const id = dataset[axis + 'AxisID'] || firstIDs[axis] || axis;
9451      scales[id] = scales[id] || Object.create(null);
9452      (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.ac)(scales[id], [{axis}, configScales[id], defaultScaleOptions[defaultID]]);
9453    });
9454  });
9455  Object.keys(scales).forEach(key => {
9456    const scale = scales[key];
9457    (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.ac)(scale, [_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.d.scales[scale.type], _chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.d.scale]);
9458  });
9459  return scales;
9460}
9461function initOptions(config) {
9462  const options = config.options || (config.options = {});
9463  options.plugins = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.v)(options.plugins, {});
9464  options.scales = mergeScaleConfig(config, options);
9465}
9466function initData(data) {
9467  data = data || {};
9468  data.datasets = data.datasets || [];
9469  data.labels = data.labels || [];
9470  return data;
9471}
9472function initConfig(config) {
9473  config = config || {};
9474  config.data = initData(config.data);
9475  initOptions(config);
9476  return config;
9477}
9478const keyCache = new Map();
9479const keysCached = new Set();
9480function cachedKeys(cacheKey, generate) {
9481  let keys = keyCache.get(cacheKey);
9482  if (!keys) {
9483    keys = generate();
9484    keyCache.set(cacheKey, keys);
9485    keysCached.add(keys);
9486  }
9487  return keys;
9488}
9489const addIfFound = (set, obj, key) => {
9490  const opts = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.f)(obj, key);
9491  if (opts !== undefined) {
9492    set.add(opts);
9493  }
9494};
9495class Config {
9496  constructor(config) {
9497    this._config = initConfig(config);
9498    this._scopeCache = new Map();
9499    this._resolverCache = new Map();
9500  }
9501  get platform() {
9502    return this._config.platform;
9503  }
9504  get type() {
9505    return this._config.type;
9506  }
9507  set type(type) {
9508    this._config.type = type;
9509  }
9510  get data() {
9511    return this._config.data;
9512  }
9513  set data(data) {
9514    this._config.data = initData(data);
9515  }
9516  get options() {
9517    return this._config.options;
9518  }
9519  set options(options) {
9520    this._config.options = options;
9521  }
9522  get plugins() {
9523    return this._config.plugins;
9524  }
9525  update() {
9526    const config = this._config;
9527    this.clearCache();
9528    initOptions(config);
9529  }
9530  clearCache() {
9531    this._scopeCache.clear();
9532    this._resolverCache.clear();
9533  }
9534  datasetScopeKeys(datasetType) {
9535    return cachedKeys(datasetType,
9536      () => [[
9537        `datasets.${datasetType}`,
9538        ''
9539      ]]);
9540  }
9541  datasetAnimationScopeKeys(datasetType, transition) {
9542    return cachedKeys(`${datasetType}.transition.${transition}`,
9543      () => [
9544        [
9545          `datasets.${datasetType}.transitions.${transition}`,
9546          `transitions.${transition}`,
9547        ],
9548        [
9549          `datasets.${datasetType}`,
9550          ''
9551        ]
9552      ]);
9553  }
9554  datasetElementScopeKeys(datasetType, elementType) {
9555    return cachedKeys(`${datasetType}-${elementType}`,
9556      () => [[
9557        `datasets.${datasetType}.elements.${elementType}`,
9558        `datasets.${datasetType}`,
9559        `elements.${elementType}`,
9560        ''
9561      ]]);
9562  }
9563  pluginScopeKeys(plugin) {
9564    const id = plugin.id;
9565    const type = this.type;
9566    return cachedKeys(`${type}-plugin-${id}`,
9567      () => [[
9568        `plugins.${id}`,
9569        ...plugin.additionalOptionScopes || [],
9570      ]]);
9571  }
9572  _cachedScopes(mainScope, resetCache) {
9573    const _scopeCache = this._scopeCache;
9574    let cache = _scopeCache.get(mainScope);
9575    if (!cache || resetCache) {
9576      cache = new Map();
9577      _scopeCache.set(mainScope, cache);
9578    }
9579    return cache;
9580  }
9581  getOptionScopes(mainScope, keyLists, resetCache) {
9582    const {options, type} = this;
9583    const cache = this._cachedScopes(mainScope, resetCache);
9584    const cached = cache.get(keyLists);
9585    if (cached) {
9586      return cached;
9587    }
9588    const scopes = new Set();
9589    keyLists.forEach(keys => {
9590      if (mainScope) {
9591        scopes.add(mainScope);
9592        keys.forEach(key => addIfFound(scopes, mainScope, key));
9593      }
9594      keys.forEach(key => addIfFound(scopes, options, key));
9595      keys.forEach(key => addIfFound(scopes, _chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.U[type] || {}, key));
9596      keys.forEach(key => addIfFound(scopes, _chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.d, key));
9597      keys.forEach(key => addIfFound(scopes, _chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.a7, key));
9598    });
9599    const array = Array.from(scopes);
9600    if (array.length === 0) {
9601      array.push(Object.create(null));
9602    }
9603    if (keysCached.has(keyLists)) {
9604      cache.set(keyLists, array);
9605    }
9606    return array;
9607  }
9608  chartOptionScopes() {
9609    const {options, type} = this;
9610    return [
9611      options,
9612      _chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.U[type] || {},
9613      _chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.d.datasets[type] || {},
9614      {type},
9615      _chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.d,
9616      _chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.a7
9617    ];
9618  }
9619  resolveNamedOptions(scopes, names, context, prefixes = ['']) {
9620    const result = {$shared: true};
9621    const {resolver, subPrefixes} = getResolver(this._resolverCache, scopes, prefixes);
9622    let options = resolver;
9623    if (needContext(resolver, names)) {
9624      result.$shared = false;
9625      context = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.a8)(context) ? context() : context;
9626      const subResolver = this.createResolver(scopes, context, subPrefixes);
9627      options = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.a9)(resolver, context, subResolver);
9628    }
9629    for (const prop of names) {
9630      result[prop] = options[prop];
9631    }
9632    return result;
9633  }
9634  createResolver(scopes, context, prefixes = [''], descriptorDefaults) {
9635    const {resolver} = getResolver(this._resolverCache, scopes, prefixes);
9636    return (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.i)(context)
9637      ? (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.a9)(resolver, context, undefined, descriptorDefaults)
9638      : resolver;
9639  }
9640}
9641function getResolver(resolverCache, scopes, prefixes) {
9642  let cache = resolverCache.get(scopes);
9643  if (!cache) {
9644    cache = new Map();
9645    resolverCache.set(scopes, cache);
9646  }
9647  const cacheKey = prefixes.join();
9648  let cached = cache.get(cacheKey);
9649  if (!cached) {
9650    const resolver = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.aa)(scopes, prefixes);
9651    cached = {
9652      resolver,
9653      subPrefixes: prefixes.filter(p => !p.toLowerCase().includes('hover'))
9654    };
9655    cache.set(cacheKey, cached);
9656  }
9657  return cached;
9658}
9659const hasFunction = value => (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.i)(value)
9660  && Object.getOwnPropertyNames(value).reduce((acc, key) => acc || (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.a8)(value[key]), false);
9661function needContext(proxy, names) {
9662  const {isScriptable, isIndexable} = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.ab)(proxy);
9663  for (const prop of names) {
9664    const scriptable = isScriptable(prop);
9665    const indexable = isIndexable(prop);
9666    const value = (indexable || scriptable) && proxy[prop];
9667    if ((scriptable && ((0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.a8)(value) || hasFunction(value)))
9668      || (indexable && (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.b)(value))) {
9669      return true;
9670    }
9671  }
9672  return false;
9673}
9674
9675var version = "3.9.1";
9676
9677const KNOWN_POSITIONS = ['top', 'bottom', 'left', 'right', 'chartArea'];
9678function positionIsHorizontal(position, axis) {
9679  return position === 'top' || position === 'bottom' || (KNOWN_POSITIONS.indexOf(position) === -1 && axis === 'x');
9680}
9681function compare2Level(l1, l2) {
9682  return function(a, b) {
9683    return a[l1] === b[l1]
9684      ? a[l2] - b[l2]
9685      : a[l1] - b[l1];
9686  };
9687}
9688function onAnimationsComplete(context) {
9689  const chart = context.chart;
9690  const animationOptions = chart.options.animation;
9691  chart.notifyPlugins('afterRender');
9692  (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.C)(animationOptions && animationOptions.onComplete, [context], chart);
9693}
9694function onAnimationProgress(context) {
9695  const chart = context.chart;
9696  const animationOptions = chart.options.animation;
9697  (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.C)(animationOptions && animationOptions.onProgress, [context], chart);
9698}
9699function getCanvas(item) {
9700  if ((0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.a6)() && typeof item === 'string') {
9701    item = document.getElementById(item);
9702  } else if (item && item.length) {
9703    item = item[0];
9704  }
9705  if (item && item.canvas) {
9706    item = item.canvas;
9707  }
9708  return item;
9709}
9710const instances = {};
9711const getChart = (key) => {
9712  const canvas = getCanvas(key);
9713  return Object.values(instances).filter((c) => c.canvas === canvas).pop();
9714};
9715function moveNumericKeys(obj, start, move) {
9716  const keys = Object.keys(obj);
9717  for (const key of keys) {
9718    const intKey = +key;
9719    if (intKey >= start) {
9720      const value = obj[key];
9721      delete obj[key];
9722      if (move > 0 || intKey > start) {
9723        obj[intKey + move] = value;
9724      }
9725    }
9726  }
9727}
9728function determineLastEvent(e, lastEvent, inChartArea, isClick) {
9729  if (!inChartArea || e.type === 'mouseout') {
9730    return null;
9731  }
9732  if (isClick) {
9733    return lastEvent;
9734  }
9735  return e;
9736}
9737class Chart {
9738  constructor(item, userConfig) {
9739    const config = this.config = new Config(userConfig);
9740    const initialCanvas = getCanvas(item);
9741    const existingChart = getChart(initialCanvas);
9742    if (existingChart) {
9743      throw new Error(
9744        'Canvas is already in use. Chart with ID \'' + existingChart.id + '\'' +
9745				' must be destroyed before the canvas with ID \'' + existingChart.canvas.id + '\' can be reused.'
9746      );
9747    }
9748    const options = config.createResolver(config.chartOptionScopes(), this.getContext());
9749    this.platform = new (config.platform || _detectPlatform(initialCanvas))();
9750    this.platform.updateConfig(config);
9751    const context = this.platform.acquireContext(initialCanvas, options.aspectRatio);
9752    const canvas = context && context.canvas;
9753    const height = canvas && canvas.height;
9754    const width = canvas && canvas.width;
9755    this.id = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.ad)();
9756    this.ctx = context;
9757    this.canvas = canvas;
9758    this.width = width;
9759    this.height = height;
9760    this._options = options;
9761    this._aspectRatio = this.aspectRatio;
9762    this._layers = [];
9763    this._metasets = [];
9764    this._stacks = undefined;
9765    this.boxes = [];
9766    this.currentDevicePixelRatio = undefined;
9767    this.chartArea = undefined;
9768    this._active = [];
9769    this._lastEvent = undefined;
9770    this._listeners = {};
9771    this._responsiveListeners = undefined;
9772    this._sortedMetasets = [];
9773    this.scales = {};
9774    this._plugins = new PluginService();
9775    this.$proxies = {};
9776    this._hiddenIndices = {};
9777    this.attached = false;
9778    this._animationsDisabled = undefined;
9779    this.$context = undefined;
9780    this._doResize = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.ae)(mode => this.update(mode), options.resizeDelay || 0);
9781    this._dataChanges = [];
9782    instances[this.id] = this;
9783    if (!context || !canvas) {
9784      console.error("Failed to create chart: can't acquire context from the given item");
9785      return;
9786    }
9787    animator.listen(this, 'complete', onAnimationsComplete);
9788    animator.listen(this, 'progress', onAnimationProgress);
9789    this._initialize();
9790    if (this.attached) {
9791      this.update();
9792    }
9793  }
9794  get aspectRatio() {
9795    const {options: {aspectRatio, maintainAspectRatio}, width, height, _aspectRatio} = this;
9796    if (!(0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.k)(aspectRatio)) {
9797      return aspectRatio;
9798    }
9799    if (maintainAspectRatio && _aspectRatio) {
9800      return _aspectRatio;
9801    }
9802    return height ? width / height : null;
9803  }
9804  get data() {
9805    return this.config.data;
9806  }
9807  set data(data) {
9808    this.config.data = data;
9809  }
9810  get options() {
9811    return this._options;
9812  }
9813  set options(options) {
9814    this.config.options = options;
9815  }
9816  _initialize() {
9817    this.notifyPlugins('beforeInit');
9818    if (this.options.responsive) {
9819      this.resize();
9820    } else {
9821      (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.af)(this, this.options.devicePixelRatio);
9822    }
9823    this.bindEvents();
9824    this.notifyPlugins('afterInit');
9825    return this;
9826  }
9827  clear() {
9828    (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.ag)(this.canvas, this.ctx);
9829    return this;
9830  }
9831  stop() {
9832    animator.stop(this);
9833    return this;
9834  }
9835  resize(width, height) {
9836    if (!animator.running(this)) {
9837      this._resize(width, height);
9838    } else {
9839      this._resizeBeforeDraw = {width, height};
9840    }
9841  }
9842  _resize(width, height) {
9843    const options = this.options;
9844    const canvas = this.canvas;
9845    const aspectRatio = options.maintainAspectRatio && this.aspectRatio;
9846    const newSize = this.platform.getMaximumSize(canvas, width, height, aspectRatio);
9847    const newRatio = options.devicePixelRatio || this.platform.getDevicePixelRatio();
9848    const mode = this.width ? 'resize' : 'attach';
9849    this.width = newSize.width;
9850    this.height = newSize.height;
9851    this._aspectRatio = this.aspectRatio;
9852    if (!(0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.af)(this, newRatio, true)) {
9853      return;
9854    }
9855    this.notifyPlugins('resize', {size: newSize});
9856    (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.C)(options.onResize, [this, newSize], this);
9857    if (this.attached) {
9858      if (this._doResize(mode)) {
9859        this.render();
9860      }
9861    }
9862  }
9863  ensureScalesHaveIDs() {
9864    const options = this.options;
9865    const scalesOptions = options.scales || {};
9866    (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.Q)(scalesOptions, (axisOptions, axisID) => {
9867      axisOptions.id = axisID;
9868    });
9869  }
9870  buildOrUpdateScales() {
9871    const options = this.options;
9872    const scaleOpts = options.scales;
9873    const scales = this.scales;
9874    const updated = Object.keys(scales).reduce((obj, id) => {
9875      obj[id] = false;
9876      return obj;
9877    }, {});
9878    let items = [];
9879    if (scaleOpts) {
9880      items = items.concat(
9881        Object.keys(scaleOpts).map((id) => {
9882          const scaleOptions = scaleOpts[id];
9883          const axis = determineAxis(id, scaleOptions);
9884          const isRadial = axis === 'r';
9885          const isHorizontal = axis === 'x';
9886          return {
9887            options: scaleOptions,
9888            dposition: isRadial ? 'chartArea' : isHorizontal ? 'bottom' : 'left',
9889            dtype: isRadial ? 'radialLinear' : isHorizontal ? 'category' : 'linear'
9890          };
9891        })
9892      );
9893    }
9894    (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.Q)(items, (item) => {
9895      const scaleOptions = item.options;
9896      const id = scaleOptions.id;
9897      const axis = determineAxis(id, scaleOptions);
9898      const scaleType = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.v)(scaleOptions.type, item.dtype);
9899      if (scaleOptions.position === undefined || positionIsHorizontal(scaleOptions.position, axis) !== positionIsHorizontal(item.dposition)) {
9900        scaleOptions.position = item.dposition;
9901      }
9902      updated[id] = true;
9903      let scale = null;
9904      if (id in scales && scales[id].type === scaleType) {
9905        scale = scales[id];
9906      } else {
9907        const scaleClass = registry.getScale(scaleType);
9908        scale = new scaleClass({
9909          id,
9910          type: scaleType,
9911          ctx: this.ctx,
9912          chart: this
9913        });
9914        scales[scale.id] = scale;
9915      }
9916      scale.init(scaleOptions, options);
9917    });
9918    (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.Q)(updated, (hasUpdated, id) => {
9919      if (!hasUpdated) {
9920        delete scales[id];
9921      }
9922    });
9923    (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.Q)(scales, (scale) => {
9924      layouts.configure(this, scale, scale.options);
9925      layouts.addBox(this, scale);
9926    });
9927  }
9928  _updateMetasets() {
9929    const metasets = this._metasets;
9930    const numData = this.data.datasets.length;
9931    const numMeta = metasets.length;
9932    metasets.sort((a, b) => a.index - b.index);
9933    if (numMeta > numData) {
9934      for (let i = numData; i < numMeta; ++i) {
9935        this._destroyDatasetMeta(i);
9936      }
9937      metasets.splice(numData, numMeta - numData);
9938    }
9939    this._sortedMetasets = metasets.slice(0).sort(compare2Level('order', 'index'));
9940  }
9941  _removeUnreferencedMetasets() {
9942    const {_metasets: metasets, data: {datasets}} = this;
9943    if (metasets.length > datasets.length) {
9944      delete this._stacks;
9945    }
9946    metasets.forEach((meta, index) => {
9947      if (datasets.filter(x => x === meta._dataset).length === 0) {
9948        this._destroyDatasetMeta(index);
9949      }
9950    });
9951  }
9952  buildOrUpdateControllers() {
9953    const newControllers = [];
9954    const datasets = this.data.datasets;
9955    let i, ilen;
9956    this._removeUnreferencedMetasets();
9957    for (i = 0, ilen = datasets.length; i < ilen; i++) {
9958      const dataset = datasets[i];
9959      let meta = this.getDatasetMeta(i);
9960      const type = dataset.type || this.config.type;
9961      if (meta.type && meta.type !== type) {
9962        this._destroyDatasetMeta(i);
9963        meta = this.getDatasetMeta(i);
9964      }
9965      meta.type = type;
9966      meta.indexAxis = dataset.indexAxis || getIndexAxis(type, this.options);
9967      meta.order = dataset.order || 0;
9968      meta.index = i;
9969      meta.label = '' + dataset.label;
9970      meta.visible = this.isDatasetVisible(i);
9971      if (meta.controller) {
9972        meta.controller.updateIndex(i);
9973        meta.controller.linkScales();
9974      } else {
9975        const ControllerClass = registry.getController(type);
9976        const {datasetElementType, dataElementType} = _chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.d.datasets[type];
9977        Object.assign(ControllerClass.prototype, {
9978          dataElementType: registry.getElement(dataElementType),
9979          datasetElementType: datasetElementType && registry.getElement(datasetElementType)
9980        });
9981        meta.controller = new ControllerClass(this, i);
9982        newControllers.push(meta.controller);
9983      }
9984    }
9985    this._updateMetasets();
9986    return newControllers;
9987  }
9988  _resetElements() {
9989    (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.Q)(this.data.datasets, (dataset, datasetIndex) => {
9990      this.getDatasetMeta(datasetIndex).controller.reset();
9991    }, this);
9992  }
9993  reset() {
9994    this._resetElements();
9995    this.notifyPlugins('reset');
9996  }
9997  update(mode) {
9998    const config = this.config;
9999    config.update();
10000    const options = this._options = config.createResolver(config.chartOptionScopes(), this.getContext());
10001    const animsDisabled = this._animationsDisabled = !options.animation;
10002    this._updateScales();
10003    this._checkEventBindings();
10004    this._updateHiddenIndices();
10005    this._plugins.invalidate();
10006    if (this.notifyPlugins('beforeUpdate', {mode, cancelable: true}) === false) {
10007      return;
10008    }
10009    const newControllers = this.buildOrUpdateControllers();
10010    this.notifyPlugins('beforeElementsUpdate');
10011    let minPadding = 0;
10012    for (let i = 0, ilen = this.data.datasets.length; i < ilen; i++) {
10013      const {controller} = this.getDatasetMeta(i);
10014      const reset = !animsDisabled && newControllers.indexOf(controller) === -1;
10015      controller.buildOrUpdateElements(reset);
10016      minPadding = Math.max(+controller.getMaxOverflow(), minPadding);
10017    }
10018    minPadding = this._minPadding = options.layout.autoPadding ? minPadding : 0;
10019    this._updateLayout(minPadding);
10020    if (!animsDisabled) {
10021      (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.Q)(newControllers, (controller) => {
10022        controller.reset();
10023      });
10024    }
10025    this._updateDatasets(mode);
10026    this.notifyPlugins('afterUpdate', {mode});
10027    this._layers.sort(compare2Level('z', '_idx'));
10028    const {_active, _lastEvent} = this;
10029    if (_lastEvent) {
10030      this._eventHandler(_lastEvent, true);
10031    } else if (_active.length) {
10032      this._updateHoverStyles(_active, _active, true);
10033    }
10034    this.render();
10035  }
10036  _updateScales() {
10037    (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.Q)(this.scales, (scale) => {
10038      layouts.removeBox(this, scale);
10039    });
10040    this.ensureScalesHaveIDs();
10041    this.buildOrUpdateScales();
10042  }
10043  _checkEventBindings() {
10044    const options = this.options;
10045    const existingEvents = new Set(Object.keys(this._listeners));
10046    const newEvents = new Set(options.events);
10047    if (!(0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.ah)(existingEvents, newEvents) || !!this._responsiveListeners !== options.responsive) {
10048      this.unbindEvents();
10049      this.bindEvents();
10050    }
10051  }
10052  _updateHiddenIndices() {
10053    const {_hiddenIndices} = this;
10054    const changes = this._getUniformDataChanges() || [];
10055    for (const {method, start, count} of changes) {
10056      const move = method === '_removeElements' ? -count : count;
10057      moveNumericKeys(_hiddenIndices, start, move);
10058    }
10059  }
10060  _getUniformDataChanges() {
10061    const _dataChanges = this._dataChanges;
10062    if (!_dataChanges || !_dataChanges.length) {
10063      return;
10064    }
10065    this._dataChanges = [];
10066    const datasetCount = this.data.datasets.length;
10067    const makeSet = (idx) => new Set(
10068      _dataChanges
10069        .filter(c => c[0] === idx)
10070        .map((c, i) => i + ',' + c.splice(1).join(','))
10071    );
10072    const changeSet = makeSet(0);
10073    for (let i = 1; i < datasetCount; i++) {
10074      if (!(0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.ah)(changeSet, makeSet(i))) {
10075        return;
10076      }
10077    }
10078    return Array.from(changeSet)
10079      .map(c => c.split(','))
10080      .map(a => ({method: a[1], start: +a[2], count: +a[3]}));
10081  }
10082  _updateLayout(minPadding) {
10083    if (this.notifyPlugins('beforeLayout', {cancelable: true}) === false) {
10084      return;
10085    }
10086    layouts.update(this, this.width, this.height, minPadding);
10087    const area = this.chartArea;
10088    const noArea = area.width <= 0 || area.height <= 0;
10089    this._layers = [];
10090    (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.Q)(this.boxes, (box) => {
10091      if (noArea && box.position === 'chartArea') {
10092        return;
10093      }
10094      if (box.configure) {
10095        box.configure();
10096      }
10097      this._layers.push(...box._layers());
10098    }, this);
10099    this._layers.forEach((item, index) => {
10100      item._idx = index;
10101    });
10102    this.notifyPlugins('afterLayout');
10103  }
10104  _updateDatasets(mode) {
10105    if (this.notifyPlugins('beforeDatasetsUpdate', {mode, cancelable: true}) === false) {
10106      return;
10107    }
10108    for (let i = 0, ilen = this.data.datasets.length; i < ilen; ++i) {
10109      this.getDatasetMeta(i).controller.configure();
10110    }
10111    for (let i = 0, ilen = this.data.datasets.length; i < ilen; ++i) {
10112      this._updateDataset(i, (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.a8)(mode) ? mode({datasetIndex: i}) : mode);
10113    }
10114    this.notifyPlugins('afterDatasetsUpdate', {mode});
10115  }
10116  _updateDataset(index, mode) {
10117    const meta = this.getDatasetMeta(index);
10118    const args = {meta, index, mode, cancelable: true};
10119    if (this.notifyPlugins('beforeDatasetUpdate', args) === false) {
10120      return;
10121    }
10122    meta.controller._update(mode);
10123    args.cancelable = false;
10124    this.notifyPlugins('afterDatasetUpdate', args);
10125  }
10126  render() {
10127    if (this.notifyPlugins('beforeRender', {cancelable: true}) === false) {
10128      return;
10129    }
10130    if (animator.has(this)) {
10131      if (this.attached && !animator.running(this)) {
10132        animator.start(this);
10133      }
10134    } else {
10135      this.draw();
10136      onAnimationsComplete({chart: this});
10137    }
10138  }
10139  draw() {
10140    let i;
10141    if (this._resizeBeforeDraw) {
10142      const {width, height} = this._resizeBeforeDraw;
10143      this._resize(width, height);
10144      this._resizeBeforeDraw = null;
10145    }
10146    this.clear();
10147    if (this.width <= 0 || this.height <= 0) {
10148      return;
10149    }
10150    if (this.notifyPlugins('beforeDraw', {cancelable: true}) === false) {
10151      return;
10152    }
10153    const layers = this._layers;
10154    for (i = 0; i < layers.length && layers[i].z <= 0; ++i) {
10155      layers[i].draw(this.chartArea);
10156    }
10157    this._drawDatasets();
10158    for (; i < layers.length; ++i) {
10159      layers[i].draw(this.chartArea);
10160    }
10161    this.notifyPlugins('afterDraw');
10162  }
10163  _getSortedDatasetMetas(filterVisible) {
10164    const metasets = this._sortedMetasets;
10165    const result = [];
10166    let i, ilen;
10167    for (i = 0, ilen = metasets.length; i < ilen; ++i) {
10168      const meta = metasets[i];
10169      if (!filterVisible || meta.visible) {
10170        result.push(meta);
10171      }
10172    }
10173    return result;
10174  }
10175  getSortedVisibleDatasetMetas() {
10176    return this._getSortedDatasetMetas(true);
10177  }
10178  _drawDatasets() {
10179    if (this.notifyPlugins('beforeDatasetsDraw', {cancelable: true}) === false) {
10180      return;
10181    }
10182    const metasets = this.getSortedVisibleDatasetMetas();
10183    for (let i = metasets.length - 1; i >= 0; --i) {
10184      this._drawDataset(metasets[i]);
10185    }
10186    this.notifyPlugins('afterDatasetsDraw');
10187  }
10188  _drawDataset(meta) {
10189    const ctx = this.ctx;
10190    const clip = meta._clip;
10191    const useClip = !clip.disabled;
10192    const area = this.chartArea;
10193    const args = {
10194      meta,
10195      index: meta.index,
10196      cancelable: true
10197    };
10198    if (this.notifyPlugins('beforeDatasetDraw', args) === false) {
10199      return;
10200    }
10201    if (useClip) {
10202      (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.L)(ctx, {
10203        left: clip.left === false ? 0 : area.left - clip.left,
10204        right: clip.right === false ? this.width : area.right + clip.right,
10205        top: clip.top === false ? 0 : area.top - clip.top,
10206        bottom: clip.bottom === false ? this.height : area.bottom + clip.bottom
10207      });
10208    }
10209    meta.controller.draw();
10210    if (useClip) {
10211      (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.N)(ctx);
10212    }
10213    args.cancelable = false;
10214    this.notifyPlugins('afterDatasetDraw', args);
10215  }
10216  isPointInArea(point) {
10217    return (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.$)(point, this.chartArea, this._minPadding);
10218  }
10219  getElementsAtEventForMode(e, mode, options, useFinalPosition) {
10220    const method = Interaction.modes[mode];
10221    if (typeof method === 'function') {
10222      return method(this, e, options, useFinalPosition);
10223    }
10224    return [];
10225  }
10226  getDatasetMeta(datasetIndex) {
10227    const dataset = this.data.datasets[datasetIndex];
10228    const metasets = this._metasets;
10229    let meta = metasets.filter(x => x && x._dataset === dataset).pop();
10230    if (!meta) {
10231      meta = {
10232        type: null,
10233        data: [],
10234        dataset: null,
10235        controller: null,
10236        hidden: null,
10237        xAxisID: null,
10238        yAxisID: null,
10239        order: dataset && dataset.order || 0,
10240        index: datasetIndex,
10241        _dataset: dataset,
10242        _parsed: [],
10243        _sorted: false
10244      };
10245      metasets.push(meta);
10246    }
10247    return meta;
10248  }
10249  getContext() {
10250    return this.$context || (this.$context = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.h)(null, {chart: this, type: 'chart'}));
10251  }
10252  getVisibleDatasetCount() {
10253    return this.getSortedVisibleDatasetMetas().length;
10254  }
10255  isDatasetVisible(datasetIndex) {
10256    const dataset = this.data.datasets[datasetIndex];
10257    if (!dataset) {
10258      return false;
10259    }
10260    const meta = this.getDatasetMeta(datasetIndex);
10261    return typeof meta.hidden === 'boolean' ? !meta.hidden : !dataset.hidden;
10262  }
10263  setDatasetVisibility(datasetIndex, visible) {
10264    const meta = this.getDatasetMeta(datasetIndex);
10265    meta.hidden = !visible;
10266  }
10267  toggleDataVisibility(index) {
10268    this._hiddenIndices[index] = !this._hiddenIndices[index];
10269  }
10270  getDataVisibility(index) {
10271    return !this._hiddenIndices[index];
10272  }
10273  _updateVisibility(datasetIndex, dataIndex, visible) {
10274    const mode = visible ? 'show' : 'hide';
10275    const meta = this.getDatasetMeta(datasetIndex);
10276    const anims = meta.controller._resolveAnimations(undefined, mode);
10277    if ((0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.j)(dataIndex)) {
10278      meta.data[dataIndex].hidden = !visible;
10279      this.update();
10280    } else {
10281      this.setDatasetVisibility(datasetIndex, visible);
10282      anims.update(meta, {visible});
10283      this.update((ctx) => ctx.datasetIndex === datasetIndex ? mode : undefined);
10284    }
10285  }
10286  hide(datasetIndex, dataIndex) {
10287    this._updateVisibility(datasetIndex, dataIndex, false);
10288  }
10289  show(datasetIndex, dataIndex) {
10290    this._updateVisibility(datasetIndex, dataIndex, true);
10291  }
10292  _destroyDatasetMeta(datasetIndex) {
10293    const meta = this._metasets[datasetIndex];
10294    if (meta && meta.controller) {
10295      meta.controller._destroy();
10296    }
10297    delete this._metasets[datasetIndex];
10298  }
10299  _stop() {
10300    let i, ilen;
10301    this.stop();
10302    animator.remove(this);
10303    for (i = 0, ilen = this.data.datasets.length; i < ilen; ++i) {
10304      this._destroyDatasetMeta(i);
10305    }
10306  }
10307  destroy() {
10308    this.notifyPlugins('beforeDestroy');
10309    const {canvas, ctx} = this;
10310    this._stop();
10311    this.config.clearCache();
10312    if (canvas) {
10313      this.unbindEvents();
10314      (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.ag)(canvas, ctx);
10315      this.platform.releaseContext(ctx);
10316      this.canvas = null;
10317      this.ctx = null;
10318    }
10319    this.notifyPlugins('destroy');
10320    delete instances[this.id];
10321    this.notifyPlugins('afterDestroy');
10322  }
10323  toBase64Image(...args) {
10324    return this.canvas.toDataURL(...args);
10325  }
10326  bindEvents() {
10327    this.bindUserEvents();
10328    if (this.options.responsive) {
10329      this.bindResponsiveEvents();
10330    } else {
10331      this.attached = true;
10332    }
10333  }
10334  bindUserEvents() {
10335    const listeners = this._listeners;
10336    const platform = this.platform;
10337    const _add = (type, listener) => {
10338      platform.addEventListener(this, type, listener);
10339      listeners[type] = listener;
10340    };
10341    const listener = (e, x, y) => {
10342      e.offsetX = x;
10343      e.offsetY = y;
10344      this._eventHandler(e);
10345    };
10346    (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.Q)(this.options.events, (type) => _add(type, listener));
10347  }
10348  bindResponsiveEvents() {
10349    if (!this._responsiveListeners) {
10350      this._responsiveListeners = {};
10351    }
10352    const listeners = this._responsiveListeners;
10353    const platform = this.platform;
10354    const _add = (type, listener) => {
10355      platform.addEventListener(this, type, listener);
10356      listeners[type] = listener;
10357    };
10358    const _remove = (type, listener) => {
10359      if (listeners[type]) {
10360        platform.removeEventListener(this, type, listener);
10361        delete listeners[type];
10362      }
10363    };
10364    const listener = (width, height) => {
10365      if (this.canvas) {
10366        this.resize(width, height);
10367      }
10368    };
10369    let detached;
10370    const attached = () => {
10371      _remove('attach', attached);
10372      this.attached = true;
10373      this.resize();
10374      _add('resize', listener);
10375      _add('detach', detached);
10376    };
10377    detached = () => {
10378      this.attached = false;
10379      _remove('resize', listener);
10380      this._stop();
10381      this._resize(0, 0);
10382      _add('attach', attached);
10383    };
10384    if (platform.isAttached(this.canvas)) {
10385      attached();
10386    } else {
10387      detached();
10388    }
10389  }
10390  unbindEvents() {
10391    (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.Q)(this._listeners, (listener, type) => {
10392      this.platform.removeEventListener(this, type, listener);
10393    });
10394    this._listeners = {};
10395    (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.Q)(this._responsiveListeners, (listener, type) => {
10396      this.platform.removeEventListener(this, type, listener);
10397    });
10398    this._responsiveListeners = undefined;
10399  }
10400  updateHoverStyle(items, mode, enabled) {
10401    const prefix = enabled ? 'set' : 'remove';
10402    let meta, item, i, ilen;
10403    if (mode === 'dataset') {
10404      meta = this.getDatasetMeta(items[0].datasetIndex);
10405      meta.controller['_' + prefix + 'DatasetHoverStyle']();
10406    }
10407    for (i = 0, ilen = items.length; i < ilen; ++i) {
10408      item = items[i];
10409      const controller = item && this.getDatasetMeta(item.datasetIndex).controller;
10410      if (controller) {
10411        controller[prefix + 'HoverStyle'](item.element, item.datasetIndex, item.index);
10412      }
10413    }
10414  }
10415  getActiveElements() {
10416    return this._active || [];
10417  }
10418  setActiveElements(activeElements) {
10419    const lastActive = this._active || [];
10420    const active = activeElements.map(({datasetIndex, index}) => {
10421      const meta = this.getDatasetMeta(datasetIndex);
10422      if (!meta) {
10423        throw new Error('No dataset found at index ' + datasetIndex);
10424      }
10425      return {
10426        datasetIndex,
10427        element: meta.data[index],
10428        index,
10429      };
10430    });
10431    const changed = !(0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.ai)(active, lastActive);
10432    if (changed) {
10433      this._active = active;
10434      this._lastEvent = null;
10435      this._updateHoverStyles(active, lastActive);
10436    }
10437  }
10438  notifyPlugins(hook, args, filter) {
10439    return this._plugins.notify(this, hook, args, filter);
10440  }
10441  _updateHoverStyles(active, lastActive, replay) {
10442    const hoverOptions = this.options.hover;
10443    const diff = (a, b) => a.filter(x => !b.some(y => x.datasetIndex === y.datasetIndex && x.index === y.index));
10444    const deactivated = diff(lastActive, active);
10445    const activated = replay ? active : diff(active, lastActive);
10446    if (deactivated.length) {
10447      this.updateHoverStyle(deactivated, hoverOptions.mode, false);
10448    }
10449    if (activated.length && hoverOptions.mode) {
10450      this.updateHoverStyle(activated, hoverOptions.mode, true);
10451    }
10452  }
10453  _eventHandler(e, replay) {
10454    const args = {
10455      event: e,
10456      replay,
10457      cancelable: true,
10458      inChartArea: this.isPointInArea(e)
10459    };
10460    const eventFilter = (plugin) => (plugin.options.events || this.options.events).includes(e.native.type);
10461    if (this.notifyPlugins('beforeEvent', args, eventFilter) === false) {
10462      return;
10463    }
10464    const changed = this._handleEvent(e, replay, args.inChartArea);
10465    args.cancelable = false;
10466    this.notifyPlugins('afterEvent', args, eventFilter);
10467    if (changed || args.changed) {
10468      this.render();
10469    }
10470    return this;
10471  }
10472  _handleEvent(e, replay, inChartArea) {
10473    const {_active: lastActive = [], options} = this;
10474    const useFinalPosition = replay;
10475    const active = this._getActiveElements(e, lastActive, inChartArea, useFinalPosition);
10476    const isClick = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.aj)(e);
10477    const lastEvent = determineLastEvent(e, this._lastEvent, inChartArea, isClick);
10478    if (inChartArea) {
10479      this._lastEvent = null;
10480      (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.C)(options.onHover, [e, active, this], this);
10481      if (isClick) {
10482        (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.C)(options.onClick, [e, active, this], this);
10483      }
10484    }
10485    const changed = !(0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.ai)(active, lastActive);
10486    if (changed || replay) {
10487      this._active = active;
10488      this._updateHoverStyles(active, lastActive, replay);
10489    }
10490    this._lastEvent = lastEvent;
10491    return changed;
10492  }
10493  _getActiveElements(e, lastActive, inChartArea, useFinalPosition) {
10494    if (e.type === 'mouseout') {
10495      return [];
10496    }
10497    if (!inChartArea) {
10498      return lastActive;
10499    }
10500    const hoverOptions = this.options.hover;
10501    return this.getElementsAtEventForMode(e, hoverOptions.mode, hoverOptions, useFinalPosition);
10502  }
10503}
10504const invalidatePlugins = () => (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.Q)(Chart.instances, (chart) => chart._plugins.invalidate());
10505const enumerable = true;
10506Object.defineProperties(Chart, {
10507  defaults: {
10508    enumerable,
10509    value: _chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.d
10510  },
10511  instances: {
10512    enumerable,
10513    value: instances
10514  },
10515  overrides: {
10516    enumerable,
10517    value: _chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.U
10518  },
10519  registry: {
10520    enumerable,
10521    value: registry
10522  },
10523  version: {
10524    enumerable,
10525    value: version
10526  },
10527  getChart: {
10528    enumerable,
10529    value: getChart
10530  },
10531  register: {
10532    enumerable,
10533    value: (...items) => {
10534      registry.add(...items);
10535      invalidatePlugins();
10536    }
10537  },
10538  unregister: {
10539    enumerable,
10540    value: (...items) => {
10541      registry.remove(...items);
10542      invalidatePlugins();
10543    }
10544  }
10545});
10546
10547function clipArc(ctx, element, endAngle) {
10548  const {startAngle, pixelMargin, x, y, outerRadius, innerRadius} = element;
10549  let angleMargin = pixelMargin / outerRadius;
10550  ctx.beginPath();
10551  ctx.arc(x, y, outerRadius, startAngle - angleMargin, endAngle + angleMargin);
10552  if (innerRadius > pixelMargin) {
10553    angleMargin = pixelMargin / innerRadius;
10554    ctx.arc(x, y, innerRadius, endAngle + angleMargin, startAngle - angleMargin, true);
10555  } else {
10556    ctx.arc(x, y, pixelMargin, endAngle + _chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.H, startAngle - _chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.H);
10557  }
10558  ctx.closePath();
10559  ctx.clip();
10560}
10561function toRadiusCorners(value) {
10562  return (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.al)(value, ['outerStart', 'outerEnd', 'innerStart', 'innerEnd']);
10563}
10564function parseBorderRadius$1(arc, innerRadius, outerRadius, angleDelta) {
10565  const o = toRadiusCorners(arc.options.borderRadius);
10566  const halfThickness = (outerRadius - innerRadius) / 2;
10567  const innerLimit = Math.min(halfThickness, angleDelta * innerRadius / 2);
10568  const computeOuterLimit = (val) => {
10569    const outerArcLimit = (outerRadius - Math.min(halfThickness, val)) * angleDelta / 2;
10570    return (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.E)(val, 0, Math.min(halfThickness, outerArcLimit));
10571  };
10572  return {
10573    outerStart: computeOuterLimit(o.outerStart),
10574    outerEnd: computeOuterLimit(o.outerEnd),
10575    innerStart: (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.E)(o.innerStart, 0, innerLimit),
10576    innerEnd: (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.E)(o.innerEnd, 0, innerLimit),
10577  };
10578}
10579function rThetaToXY(r, theta, x, y) {
10580  return {
10581    x: x + r * Math.cos(theta),
10582    y: y + r * Math.sin(theta),
10583  };
10584}
10585function pathArc(ctx, element, offset, spacing, end, circular) {
10586  const {x, y, startAngle: start, pixelMargin, innerRadius: innerR} = element;
10587  const outerRadius = Math.max(element.outerRadius + spacing + offset - pixelMargin, 0);
10588  const innerRadius = innerR > 0 ? innerR + spacing + offset + pixelMargin : 0;
10589  let spacingOffset = 0;
10590  const alpha = end - start;
10591  if (spacing) {
10592    const noSpacingInnerRadius = innerR > 0 ? innerR - spacing : 0;
10593    const noSpacingOuterRadius = outerRadius > 0 ? outerRadius - spacing : 0;
10594    const avNogSpacingRadius = (noSpacingInnerRadius + noSpacingOuterRadius) / 2;
10595    const adjustedAngle = avNogSpacingRadius !== 0 ? (alpha * avNogSpacingRadius) / (avNogSpacingRadius + spacing) : alpha;
10596    spacingOffset = (alpha - adjustedAngle) / 2;
10597  }
10598  const beta = Math.max(0.001, alpha * outerRadius - offset / _chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.P) / outerRadius;
10599  const angleOffset = (alpha - beta) / 2;
10600  const startAngle = start + angleOffset + spacingOffset;
10601  const endAngle = end - angleOffset - spacingOffset;
10602  const {outerStart, outerEnd, innerStart, innerEnd} = parseBorderRadius$1(element, innerRadius, outerRadius, endAngle - startAngle);
10603  const outerStartAdjustedRadius = outerRadius - outerStart;
10604  const outerEndAdjustedRadius = outerRadius - outerEnd;
10605  const outerStartAdjustedAngle = startAngle + outerStart / outerStartAdjustedRadius;
10606  const outerEndAdjustedAngle = endAngle - outerEnd / outerEndAdjustedRadius;
10607  const innerStartAdjustedRadius = innerRadius + innerStart;
10608  const innerEndAdjustedRadius = innerRadius + innerEnd;
10609  const innerStartAdjustedAngle = startAngle + innerStart / innerStartAdjustedRadius;
10610  const innerEndAdjustedAngle = endAngle - innerEnd / innerEndAdjustedRadius;
10611  ctx.beginPath();
10612  if (circular) {
10613    ctx.arc(x, y, outerRadius, outerStartAdjustedAngle, outerEndAdjustedAngle);
10614    if (outerEnd > 0) {
10615      const pCenter = rThetaToXY(outerEndAdjustedRadius, outerEndAdjustedAngle, x, y);
10616      ctx.arc(pCenter.x, pCenter.y, outerEnd, outerEndAdjustedAngle, endAngle + _chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.H);
10617    }
10618    const p4 = rThetaToXY(innerEndAdjustedRadius, endAngle, x, y);
10619    ctx.lineTo(p4.x, p4.y);
10620    if (innerEnd > 0) {
10621      const pCenter = rThetaToXY(innerEndAdjustedRadius, innerEndAdjustedAngle, x, y);
10622      ctx.arc(pCenter.x, pCenter.y, innerEnd, endAngle + _chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.H, innerEndAdjustedAngle + Math.PI);
10623    }
10624    ctx.arc(x, y, innerRadius, endAngle - (innerEnd / innerRadius), startAngle + (innerStart / innerRadius), true);
10625    if (innerStart > 0) {
10626      const pCenter = rThetaToXY(innerStartAdjustedRadius, innerStartAdjustedAngle, x, y);
10627      ctx.arc(pCenter.x, pCenter.y, innerStart, innerStartAdjustedAngle + Math.PI, startAngle - _chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.H);
10628    }
10629    const p8 = rThetaToXY(outerStartAdjustedRadius, startAngle, x, y);
10630    ctx.lineTo(p8.x, p8.y);
10631    if (outerStart > 0) {
10632      const pCenter = rThetaToXY(outerStartAdjustedRadius, outerStartAdjustedAngle, x, y);
10633      ctx.arc(pCenter.x, pCenter.y, outerStart, startAngle - _chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.H, outerStartAdjustedAngle);
10634    }
10635  } else {
10636    ctx.moveTo(x, y);
10637    const outerStartX = Math.cos(outerStartAdjustedAngle) * outerRadius + x;
10638    const outerStartY = Math.sin(outerStartAdjustedAngle) * outerRadius + y;
10639    ctx.lineTo(outerStartX, outerStartY);
10640    const outerEndX = Math.cos(outerEndAdjustedAngle) * outerRadius + x;
10641    const outerEndY = Math.sin(outerEndAdjustedAngle) * outerRadius + y;
10642    ctx.lineTo(outerEndX, outerEndY);
10643  }
10644  ctx.closePath();
10645}
10646function drawArc(ctx, element, offset, spacing, circular) {
10647  const {fullCircles, startAngle, circumference} = element;
10648  let endAngle = element.endAngle;
10649  if (fullCircles) {
10650    pathArc(ctx, element, offset, spacing, startAngle + _chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.T, circular);
10651    for (let i = 0; i < fullCircles; ++i) {
10652      ctx.fill();
10653    }
10654    if (!isNaN(circumference)) {
10655      endAngle = startAngle + circumference % _chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.T;
10656      if (circumference % _chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.T === 0) {
10657        endAngle += _chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.T;
10658      }
10659    }
10660  }
10661  pathArc(ctx, element, offset, spacing, endAngle, circular);
10662  ctx.fill();
10663  return endAngle;
10664}
10665function drawFullCircleBorders(ctx, element, inner) {
10666  const {x, y, startAngle, pixelMargin, fullCircles} = element;
10667  const outerRadius = Math.max(element.outerRadius - pixelMargin, 0);
10668  const innerRadius = element.innerRadius + pixelMargin;
10669  let i;
10670  if (inner) {
10671    clipArc(ctx, element, startAngle + _chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.T);
10672  }
10673  ctx.beginPath();
10674  ctx.arc(x, y, innerRadius, startAngle + _chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.T, startAngle, true);
10675  for (i = 0; i < fullCircles; ++i) {
10676    ctx.stroke();
10677  }
10678  ctx.beginPath();
10679  ctx.arc(x, y, outerRadius, startAngle, startAngle + _chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.T);
10680  for (i = 0; i < fullCircles; ++i) {
10681    ctx.stroke();
10682  }
10683}
10684function drawBorder(ctx, element, offset, spacing, endAngle, circular) {
10685  const {options} = element;
10686  const {borderWidth, borderJoinStyle} = options;
10687  const inner = options.borderAlign === 'inner';
10688  if (!borderWidth) {
10689    return;
10690  }
10691  if (inner) {
10692    ctx.lineWidth = borderWidth * 2;
10693    ctx.lineJoin = borderJoinStyle || 'round';
10694  } else {
10695    ctx.lineWidth = borderWidth;
10696    ctx.lineJoin = borderJoinStyle || 'bevel';
10697  }
10698  if (element.fullCircles) {
10699    drawFullCircleBorders(ctx, element, inner);
10700  }
10701  if (inner) {
10702    clipArc(ctx, element, endAngle);
10703  }
10704  pathArc(ctx, element, offset, spacing, endAngle, circular);
10705  ctx.stroke();
10706}
10707class ArcElement extends Element {
10708  constructor(cfg) {
10709    super();
10710    this.options = undefined;
10711    this.circumference = undefined;
10712    this.startAngle = undefined;
10713    this.endAngle = undefined;
10714    this.innerRadius = undefined;
10715    this.outerRadius = undefined;
10716    this.pixelMargin = 0;
10717    this.fullCircles = 0;
10718    if (cfg) {
10719      Object.assign(this, cfg);
10720    }
10721  }
10722  inRange(chartX, chartY, useFinalPosition) {
10723    const point = this.getProps(['x', 'y'], useFinalPosition);
10724    const {angle, distance} = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.a0)(point, {x: chartX, y: chartY});
10725    const {startAngle, endAngle, innerRadius, outerRadius, circumference} = this.getProps([
10726      'startAngle',
10727      'endAngle',
10728      'innerRadius',
10729      'outerRadius',
10730      'circumference'
10731    ], useFinalPosition);
10732    const rAdjust = this.options.spacing / 2;
10733    const _circumference = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.v)(circumference, endAngle - startAngle);
10734    const betweenAngles = _circumference >= _chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.T || (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.p)(angle, startAngle, endAngle);
10735    const withinRadius = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.ak)(distance, innerRadius + rAdjust, outerRadius + rAdjust);
10736    return (betweenAngles && withinRadius);
10737  }
10738  getCenterPoint(useFinalPosition) {
10739    const {x, y, startAngle, endAngle, innerRadius, outerRadius} = this.getProps([
10740      'x',
10741      'y',
10742      'startAngle',
10743      'endAngle',
10744      'innerRadius',
10745      'outerRadius',
10746      'circumference',
10747    ], useFinalPosition);
10748    const {offset, spacing} = this.options;
10749    const halfAngle = (startAngle + endAngle) / 2;
10750    const halfRadius = (innerRadius + outerRadius + spacing + offset) / 2;
10751    return {
10752      x: x + Math.cos(halfAngle) * halfRadius,
10753      y: y + Math.sin(halfAngle) * halfRadius
10754    };
10755  }
10756  tooltipPosition(useFinalPosition) {
10757    return this.getCenterPoint(useFinalPosition);
10758  }
10759  draw(ctx) {
10760    const {options, circumference} = this;
10761    const offset = (options.offset || 0) / 2;
10762    const spacing = (options.spacing || 0) / 2;
10763    const circular = options.circular;
10764    this.pixelMargin = (options.borderAlign === 'inner') ? 0.33 : 0;
10765    this.fullCircles = circumference > _chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.T ? Math.floor(circumference / _chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.T) : 0;
10766    if (circumference === 0 || this.innerRadius < 0 || this.outerRadius < 0) {
10767      return;
10768    }
10769    ctx.save();
10770    let radiusOffset = 0;
10771    if (offset) {
10772      radiusOffset = offset / 2;
10773      const halfAngle = (this.startAngle + this.endAngle) / 2;
10774      ctx.translate(Math.cos(halfAngle) * radiusOffset, Math.sin(halfAngle) * radiusOffset);
10775      if (this.circumference >= _chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.P) {
10776        radiusOffset = offset;
10777      }
10778    }
10779    ctx.fillStyle = options.backgroundColor;
10780    ctx.strokeStyle = options.borderColor;
10781    const endAngle = drawArc(ctx, this, radiusOffset, spacing, circular);
10782    drawBorder(ctx, this, radiusOffset, spacing, endAngle, circular);
10783    ctx.restore();
10784  }
10785}
10786ArcElement.id = 'arc';
10787ArcElement.defaults = {
10788  borderAlign: 'center',
10789  borderColor: '#fff',
10790  borderJoinStyle: undefined,
10791  borderRadius: 0,
10792  borderWidth: 2,
10793  offset: 0,
10794  spacing: 0,
10795  angle: undefined,
10796  circular: true,
10797};
10798ArcElement.defaultRoutes = {
10799  backgroundColor: 'backgroundColor'
10800};
10801
10802function setStyle(ctx, options, style = options) {
10803  ctx.lineCap = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.v)(style.borderCapStyle, options.borderCapStyle);
10804  ctx.setLineDash((0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.v)(style.borderDash, options.borderDash));
10805  ctx.lineDashOffset = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.v)(style.borderDashOffset, options.borderDashOffset);
10806  ctx.lineJoin = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.v)(style.borderJoinStyle, options.borderJoinStyle);
10807  ctx.lineWidth = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.v)(style.borderWidth, options.borderWidth);
10808  ctx.strokeStyle = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.v)(style.borderColor, options.borderColor);
10809}
10810function lineTo(ctx, previous, target) {
10811  ctx.lineTo(target.x, target.y);
10812}
10813function getLineMethod(options) {
10814  if (options.stepped) {
10815    return _chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.as;
10816  }
10817  if (options.tension || options.cubicInterpolationMode === 'monotone') {
10818    return _chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.at;
10819  }
10820  return lineTo;
10821}
10822function pathVars(points, segment, params = {}) {
10823  const count = points.length;
10824  const {start: paramsStart = 0, end: paramsEnd = count - 1} = params;
10825  const {start: segmentStart, end: segmentEnd} = segment;
10826  const start = Math.max(paramsStart, segmentStart);
10827  const end = Math.min(paramsEnd, segmentEnd);
10828  const outside = paramsStart < segmentStart && paramsEnd < segmentStart || paramsStart > segmentEnd && paramsEnd > segmentEnd;
10829  return {
10830    count,
10831    start,
10832    loop: segment.loop,
10833    ilen: end < start && !outside ? count + end - start : end - start
10834  };
10835}
10836function pathSegment(ctx, line, segment, params) {
10837  const {points, options} = line;
10838  const {count, start, loop, ilen} = pathVars(points, segment, params);
10839  const lineMethod = getLineMethod(options);
10840  let {move = true, reverse} = params || {};
10841  let i, point, prev;
10842  for (i = 0; i <= ilen; ++i) {
10843    point = points[(start + (reverse ? ilen - i : i)) % count];
10844    if (point.skip) {
10845      continue;
10846    } else if (move) {
10847      ctx.moveTo(point.x, point.y);
10848      move = false;
10849    } else {
10850      lineMethod(ctx, prev, point, reverse, options.stepped);
10851    }
10852    prev = point;
10853  }
10854  if (loop) {
10855    point = points[(start + (reverse ? ilen : 0)) % count];
10856    lineMethod(ctx, prev, point, reverse, options.stepped);
10857  }
10858  return !!loop;
10859}
10860function fastPathSegment(ctx, line, segment, params) {
10861  const points = line.points;
10862  const {count, start, ilen} = pathVars(points, segment, params);
10863  const {move = true, reverse} = params || {};
10864  let avgX = 0;
10865  let countX = 0;
10866  let i, point, prevX, minY, maxY, lastY;
10867  const pointIndex = (index) => (start + (reverse ? ilen - index : index)) % count;
10868  const drawX = () => {
10869    if (minY !== maxY) {
10870      ctx.lineTo(avgX, maxY);
10871      ctx.lineTo(avgX, minY);
10872      ctx.lineTo(avgX, lastY);
10873    }
10874  };
10875  if (move) {
10876    point = points[pointIndex(0)];
10877    ctx.moveTo(point.x, point.y);
10878  }
10879  for (i = 0; i <= ilen; ++i) {
10880    point = points[pointIndex(i)];
10881    if (point.skip) {
10882      continue;
10883    }
10884    const x = point.x;
10885    const y = point.y;
10886    const truncX = x | 0;
10887    if (truncX === prevX) {
10888      if (y < minY) {
10889        minY = y;
10890      } else if (y > maxY) {
10891        maxY = y;
10892      }
10893      avgX = (countX * avgX + x) / ++countX;
10894    } else {
10895      drawX();
10896      ctx.lineTo(x, y);
10897      prevX = truncX;
10898      countX = 0;
10899      minY = maxY = y;
10900    }
10901    lastY = y;
10902  }
10903  drawX();
10904}
10905function _getSegmentMethod(line) {
10906  const opts = line.options;
10907  const borderDash = opts.borderDash && opts.borderDash.length;
10908  const useFastPath = !line._decimated && !line._loop && !opts.tension && opts.cubicInterpolationMode !== 'monotone' && !opts.stepped && !borderDash;
10909  return useFastPath ? fastPathSegment : pathSegment;
10910}
10911function _getInterpolationMethod(options) {
10912  if (options.stepped) {
10913    return _chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.ap;
10914  }
10915  if (options.tension || options.cubicInterpolationMode === 'monotone') {
10916    return _chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.aq;
10917  }
10918  return _chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.ar;
10919}
10920function strokePathWithCache(ctx, line, start, count) {
10921  let path = line._path;
10922  if (!path) {
10923    path = line._path = new Path2D();
10924    if (line.path(path, start, count)) {
10925      path.closePath();
10926    }
10927  }
10928  setStyle(ctx, line.options);
10929  ctx.stroke(path);
10930}
10931function strokePathDirect(ctx, line, start, count) {
10932  const {segments, options} = line;
10933  const segmentMethod = _getSegmentMethod(line);
10934  for (const segment of segments) {
10935    setStyle(ctx, options, segment.style);
10936    ctx.beginPath();
10937    if (segmentMethod(ctx, line, segment, {start, end: start + count - 1})) {
10938      ctx.closePath();
10939    }
10940    ctx.stroke();
10941  }
10942}
10943const usePath2D = typeof Path2D === 'function';
10944function draw(ctx, line, start, count) {
10945  if (usePath2D && !line.options.segment) {
10946    strokePathWithCache(ctx, line, start, count);
10947  } else {
10948    strokePathDirect(ctx, line, start, count);
10949  }
10950}
10951class LineElement extends Element {
10952  constructor(cfg) {
10953    super();
10954    this.animated = true;
10955    this.options = undefined;
10956    this._chart = undefined;
10957    this._loop = undefined;
10958    this._fullLoop = undefined;
10959    this._path = undefined;
10960    this._points = undefined;
10961    this._segments = undefined;
10962    this._decimated = false;
10963    this._pointsUpdated = false;
10964    this._datasetIndex = undefined;
10965    if (cfg) {
10966      Object.assign(this, cfg);
10967    }
10968  }
10969  updateControlPoints(chartArea, indexAxis) {
10970    const options = this.options;
10971    if ((options.tension || options.cubicInterpolationMode === 'monotone') && !options.stepped && !this._pointsUpdated) {
10972      const loop = options.spanGaps ? this._loop : this._fullLoop;
10973      (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.am)(this._points, options, chartArea, loop, indexAxis);
10974      this._pointsUpdated = true;
10975    }
10976  }
10977  set points(points) {
10978    this._points = points;
10979    delete this._segments;
10980    delete this._path;
10981    this._pointsUpdated = false;
10982  }
10983  get points() {
10984    return this._points;
10985  }
10986  get segments() {
10987    return this._segments || (this._segments = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.an)(this, this.options.segment));
10988  }
10989  first() {
10990    const segments = this.segments;
10991    const points = this.points;
10992    return segments.length && points[segments[0].start];
10993  }
10994  last() {
10995    const segments = this.segments;
10996    const points = this.points;
10997    const count = segments.length;
10998    return count && points[segments[count - 1].end];
10999  }
11000  interpolate(point, property) {
11001    const options = this.options;
11002    const value = point[property];
11003    const points = this.points;
11004    const segments = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.ao)(this, {property, start: value, end: value});
11005    if (!segments.length) {
11006      return;
11007    }
11008    const result = [];
11009    const _interpolate = _getInterpolationMethod(options);
11010    let i, ilen;
11011    for (i = 0, ilen = segments.length; i < ilen; ++i) {
11012      const {start, end} = segments[i];
11013      const p1 = points[start];
11014      const p2 = points[end];
11015      if (p1 === p2) {
11016        result.push(p1);
11017        continue;
11018      }
11019      const t = Math.abs((value - p1[property]) / (p2[property] - p1[property]));
11020      const interpolated = _interpolate(p1, p2, t, options.stepped);
11021      interpolated[property] = point[property];
11022      result.push(interpolated);
11023    }
11024    return result.length === 1 ? result[0] : result;
11025  }
11026  pathSegment(ctx, segment, params) {
11027    const segmentMethod = _getSegmentMethod(this);
11028    return segmentMethod(ctx, this, segment, params);
11029  }
11030  path(ctx, start, count) {
11031    const segments = this.segments;
11032    const segmentMethod = _getSegmentMethod(this);
11033    let loop = this._loop;
11034    start = start || 0;
11035    count = count || (this.points.length - start);
11036    for (const segment of segments) {
11037      loop &= segmentMethod(ctx, this, segment, {start, end: start + count - 1});
11038    }
11039    return !!loop;
11040  }
11041  draw(ctx, chartArea, start, count) {
11042    const options = this.options || {};
11043    const points = this.points || [];
11044    if (points.length && options.borderWidth) {
11045      ctx.save();
11046      draw(ctx, this, start, count);
11047      ctx.restore();
11048    }
11049    if (this.animated) {
11050      this._pointsUpdated = false;
11051      this._path = undefined;
11052    }
11053  }
11054}
11055LineElement.id = 'line';
11056LineElement.defaults = {
11057  borderCapStyle: 'butt',
11058  borderDash: [],
11059  borderDashOffset: 0,
11060  borderJoinStyle: 'miter',
11061  borderWidth: 3,
11062  capBezierPoints: true,
11063  cubicInterpolationMode: 'default',
11064  fill: false,
11065  spanGaps: false,
11066  stepped: false,
11067  tension: 0,
11068};
11069LineElement.defaultRoutes = {
11070  backgroundColor: 'backgroundColor',
11071  borderColor: 'borderColor'
11072};
11073LineElement.descriptors = {
11074  _scriptable: true,
11075  _indexable: (name) => name !== 'borderDash' && name !== 'fill',
11076};
11077
11078function inRange$1(el, pos, axis, useFinalPosition) {
11079  const options = el.options;
11080  const {[axis]: value} = el.getProps([axis], useFinalPosition);
11081  return (Math.abs(pos - value) < options.radius + options.hitRadius);
11082}
11083class PointElement extends Element {
11084  constructor(cfg) {
11085    super();
11086    this.options = undefined;
11087    this.parsed = undefined;
11088    this.skip = undefined;
11089    this.stop = undefined;
11090    if (cfg) {
11091      Object.assign(this, cfg);
11092    }
11093  }
11094  inRange(mouseX, mouseY, useFinalPosition) {
11095    const options = this.options;
11096    const {x, y} = this.getProps(['x', 'y'], useFinalPosition);
11097    return ((Math.pow(mouseX - x, 2) + Math.pow(mouseY - y, 2)) < Math.pow(options.hitRadius + options.radius, 2));
11098  }
11099  inXRange(mouseX, useFinalPosition) {
11100    return inRange$1(this, mouseX, 'x', useFinalPosition);
11101  }
11102  inYRange(mouseY, useFinalPosition) {
11103    return inRange$1(this, mouseY, 'y', useFinalPosition);
11104  }
11105  getCenterPoint(useFinalPosition) {
11106    const {x, y} = this.getProps(['x', 'y'], useFinalPosition);
11107    return {x, y};
11108  }
11109  size(options) {
11110    options = options || this.options || {};
11111    let radius = options.radius || 0;
11112    radius = Math.max(radius, radius && options.hoverRadius || 0);
11113    const borderWidth = radius && options.borderWidth || 0;
11114    return (radius + borderWidth) * 2;
11115  }
11116  draw(ctx, area) {
11117    const options = this.options;
11118    if (this.skip || options.radius < 0.1 || !(0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.$)(this, area, this.size(options) / 2)) {
11119      return;
11120    }
11121    ctx.strokeStyle = options.borderColor;
11122    ctx.lineWidth = options.borderWidth;
11123    ctx.fillStyle = options.backgroundColor;
11124    (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.au)(ctx, options, this.x, this.y);
11125  }
11126  getRange() {
11127    const options = this.options || {};
11128    return options.radius + options.hitRadius;
11129  }
11130}
11131PointElement.id = 'point';
11132PointElement.defaults = {
11133  borderWidth: 1,
11134  hitRadius: 1,
11135  hoverBorderWidth: 1,
11136  hoverRadius: 4,
11137  pointStyle: 'circle',
11138  radius: 3,
11139  rotation: 0
11140};
11141PointElement.defaultRoutes = {
11142  backgroundColor: 'backgroundColor',
11143  borderColor: 'borderColor'
11144};
11145
11146function getBarBounds(bar, useFinalPosition) {
11147  const {x, y, base, width, height} = bar.getProps(['x', 'y', 'base', 'width', 'height'], useFinalPosition);
11148  let left, right, top, bottom, half;
11149  if (bar.horizontal) {
11150    half = height / 2;
11151    left = Math.min(x, base);
11152    right = Math.max(x, base);
11153    top = y - half;
11154    bottom = y + half;
11155  } else {
11156    half = width / 2;
11157    left = x - half;
11158    right = x + half;
11159    top = Math.min(y, base);
11160    bottom = Math.max(y, base);
11161  }
11162  return {left, top, right, bottom};
11163}
11164function skipOrLimit(skip, value, min, max) {
11165  return skip ? 0 : (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.E)(value, min, max);
11166}
11167function parseBorderWidth(bar, maxW, maxH) {
11168  const value = bar.options.borderWidth;
11169  const skip = bar.borderSkipped;
11170  const o = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.aw)(value);
11171  return {
11172    t: skipOrLimit(skip.top, o.top, 0, maxH),
11173    r: skipOrLimit(skip.right, o.right, 0, maxW),
11174    b: skipOrLimit(skip.bottom, o.bottom, 0, maxH),
11175    l: skipOrLimit(skip.left, o.left, 0, maxW)
11176  };
11177}
11178function parseBorderRadius(bar, maxW, maxH) {
11179  const {enableBorderRadius} = bar.getProps(['enableBorderRadius']);
11180  const value = bar.options.borderRadius;
11181  const o = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.ax)(value);
11182  const maxR = Math.min(maxW, maxH);
11183  const skip = bar.borderSkipped;
11184  const enableBorder = enableBorderRadius || (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.i)(value);
11185  return {
11186    topLeft: skipOrLimit(!enableBorder || skip.top || skip.left, o.topLeft, 0, maxR),
11187    topRight: skipOrLimit(!enableBorder || skip.top || skip.right, o.topRight, 0, maxR),
11188    bottomLeft: skipOrLimit(!enableBorder || skip.bottom || skip.left, o.bottomLeft, 0, maxR),
11189    bottomRight: skipOrLimit(!enableBorder || skip.bottom || skip.right, o.bottomRight, 0, maxR)
11190  };
11191}
11192function boundingRects(bar) {
11193  const bounds = getBarBounds(bar);
11194  const width = bounds.right - bounds.left;
11195  const height = bounds.bottom - bounds.top;
11196  const border = parseBorderWidth(bar, width / 2, height / 2);
11197  const radius = parseBorderRadius(bar, width / 2, height / 2);
11198  return {
11199    outer: {
11200      x: bounds.left,
11201      y: bounds.top,
11202      w: width,
11203      h: height,
11204      radius
11205    },
11206    inner: {
11207      x: bounds.left + border.l,
11208      y: bounds.top + border.t,
11209      w: width - border.l - border.r,
11210      h: height - border.t - border.b,
11211      radius: {
11212        topLeft: Math.max(0, radius.topLeft - Math.max(border.t, border.l)),
11213        topRight: Math.max(0, radius.topRight - Math.max(border.t, border.r)),
11214        bottomLeft: Math.max(0, radius.bottomLeft - Math.max(border.b, border.l)),
11215        bottomRight: Math.max(0, radius.bottomRight - Math.max(border.b, border.r)),
11216      }
11217    }
11218  };
11219}
11220function inRange(bar, x, y, useFinalPosition) {
11221  const skipX = x === null;
11222  const skipY = y === null;
11223  const skipBoth = skipX && skipY;
11224  const bounds = bar && !skipBoth && getBarBounds(bar, useFinalPosition);
11225  return bounds
11226		&& (skipX || (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.ak)(x, bounds.left, bounds.right))
11227		&& (skipY || (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.ak)(y, bounds.top, bounds.bottom));
11228}
11229function hasRadius(radius) {
11230  return radius.topLeft || radius.topRight || radius.bottomLeft || radius.bottomRight;
11231}
11232function addNormalRectPath(ctx, rect) {
11233  ctx.rect(rect.x, rect.y, rect.w, rect.h);
11234}
11235function inflateRect(rect, amount, refRect = {}) {
11236  const x = rect.x !== refRect.x ? -amount : 0;
11237  const y = rect.y !== refRect.y ? -amount : 0;
11238  const w = (rect.x + rect.w !== refRect.x + refRect.w ? amount : 0) - x;
11239  const h = (rect.y + rect.h !== refRect.y + refRect.h ? amount : 0) - y;
11240  return {
11241    x: rect.x + x,
11242    y: rect.y + y,
11243    w: rect.w + w,
11244    h: rect.h + h,
11245    radius: rect.radius
11246  };
11247}
11248class BarElement extends Element {
11249  constructor(cfg) {
11250    super();
11251    this.options = undefined;
11252    this.horizontal = undefined;
11253    this.base = undefined;
11254    this.width = undefined;
11255    this.height = undefined;
11256    this.inflateAmount = undefined;
11257    if (cfg) {
11258      Object.assign(this, cfg);
11259    }
11260  }
11261  draw(ctx) {
11262    const {inflateAmount, options: {borderColor, backgroundColor}} = this;
11263    const {inner, outer} = boundingRects(this);
11264    const addRectPath = hasRadius(outer.radius) ? _chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.av : addNormalRectPath;
11265    ctx.save();
11266    if (outer.w !== inner.w || outer.h !== inner.h) {
11267      ctx.beginPath();
11268      addRectPath(ctx, inflateRect(outer, inflateAmount, inner));
11269      ctx.clip();
11270      addRectPath(ctx, inflateRect(inner, -inflateAmount, outer));
11271      ctx.fillStyle = borderColor;
11272      ctx.fill('evenodd');
11273    }
11274    ctx.beginPath();
11275    addRectPath(ctx, inflateRect(inner, inflateAmount));
11276    ctx.fillStyle = backgroundColor;
11277    ctx.fill();
11278    ctx.restore();
11279  }
11280  inRange(mouseX, mouseY, useFinalPosition) {
11281    return inRange(this, mouseX, mouseY, useFinalPosition);
11282  }
11283  inXRange(mouseX, useFinalPosition) {
11284    return inRange(this, mouseX, null, useFinalPosition);
11285  }
11286  inYRange(mouseY, useFinalPosition) {
11287    return inRange(this, null, mouseY, useFinalPosition);
11288  }
11289  getCenterPoint(useFinalPosition) {
11290    const {x, y, base, horizontal} = this.getProps(['x', 'y', 'base', 'horizontal'], useFinalPosition);
11291    return {
11292      x: horizontal ? (x + base) / 2 : x,
11293      y: horizontal ? y : (y + base) / 2
11294    };
11295  }
11296  getRange(axis) {
11297    return axis === 'x' ? this.width / 2 : this.height / 2;
11298  }
11299}
11300BarElement.id = 'bar';
11301BarElement.defaults = {
11302  borderSkipped: 'start',
11303  borderWidth: 0,
11304  borderRadius: 0,
11305  inflateAmount: 'auto',
11306  pointStyle: undefined
11307};
11308BarElement.defaultRoutes = {
11309  backgroundColor: 'backgroundColor',
11310  borderColor: 'borderColor'
11311};
11312
11313var elements = /*#__PURE__*/Object.freeze({
11314__proto__: null,
11315ArcElement: ArcElement,
11316LineElement: LineElement,
11317PointElement: PointElement,
11318BarElement: BarElement
11319});
11320
11321function lttbDecimation(data, start, count, availableWidth, options) {
11322  const samples = options.samples || availableWidth;
11323  if (samples >= count) {
11324    return data.slice(start, start + count);
11325  }
11326  const decimated = [];
11327  const bucketWidth = (count - 2) / (samples - 2);
11328  let sampledIndex = 0;
11329  const endIndex = start + count - 1;
11330  let a = start;
11331  let i, maxAreaPoint, maxArea, area, nextA;
11332  decimated[sampledIndex++] = data[a];
11333  for (i = 0; i < samples - 2; i++) {
11334    let avgX = 0;
11335    let avgY = 0;
11336    let j;
11337    const avgRangeStart = Math.floor((i + 1) * bucketWidth) + 1 + start;
11338    const avgRangeEnd = Math.min(Math.floor((i + 2) * bucketWidth) + 1, count) + start;
11339    const avgRangeLength = avgRangeEnd - avgRangeStart;
11340    for (j = avgRangeStart; j < avgRangeEnd; j++) {
11341      avgX += data[j].x;
11342      avgY += data[j].y;
11343    }
11344    avgX /= avgRangeLength;
11345    avgY /= avgRangeLength;
11346    const rangeOffs = Math.floor(i * bucketWidth) + 1 + start;
11347    const rangeTo = Math.min(Math.floor((i + 1) * bucketWidth) + 1, count) + start;
11348    const {x: pointAx, y: pointAy} = data[a];
11349    maxArea = area = -1;
11350    for (j = rangeOffs; j < rangeTo; j++) {
11351      area = 0.5 * Math.abs(
11352        (pointAx - avgX) * (data[j].y - pointAy) -
11353        (pointAx - data[j].x) * (avgY - pointAy)
11354      );
11355      if (area > maxArea) {
11356        maxArea = area;
11357        maxAreaPoint = data[j];
11358        nextA = j;
11359      }
11360    }
11361    decimated[sampledIndex++] = maxAreaPoint;
11362    a = nextA;
11363  }
11364  decimated[sampledIndex++] = data[endIndex];
11365  return decimated;
11366}
11367function minMaxDecimation(data, start, count, availableWidth) {
11368  let avgX = 0;
11369  let countX = 0;
11370  let i, point, x, y, prevX, minIndex, maxIndex, startIndex, minY, maxY;
11371  const decimated = [];
11372  const endIndex = start + count - 1;
11373  const xMin = data[start].x;
11374  const xMax = data[endIndex].x;
11375  const dx = xMax - xMin;
11376  for (i = start; i < start + count; ++i) {
11377    point = data[i];
11378    x = (point.x - xMin) / dx * availableWidth;
11379    y = point.y;
11380    const truncX = x | 0;
11381    if (truncX === prevX) {
11382      if (y < minY) {
11383        minY = y;
11384        minIndex = i;
11385      } else if (y > maxY) {
11386        maxY = y;
11387        maxIndex = i;
11388      }
11389      avgX = (countX * avgX + point.x) / ++countX;
11390    } else {
11391      const lastIndex = i - 1;
11392      if (!(0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.k)(minIndex) && !(0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.k)(maxIndex)) {
11393        const intermediateIndex1 = Math.min(minIndex, maxIndex);
11394        const intermediateIndex2 = Math.max(minIndex, maxIndex);
11395        if (intermediateIndex1 !== startIndex && intermediateIndex1 !== lastIndex) {
11396          decimated.push({
11397            ...data[intermediateIndex1],
11398            x: avgX,
11399          });
11400        }
11401        if (intermediateIndex2 !== startIndex && intermediateIndex2 !== lastIndex) {
11402          decimated.push({
11403            ...data[intermediateIndex2],
11404            x: avgX
11405          });
11406        }
11407      }
11408      if (i > 0 && lastIndex !== startIndex) {
11409        decimated.push(data[lastIndex]);
11410      }
11411      decimated.push(point);
11412      prevX = truncX;
11413      countX = 0;
11414      minY = maxY = y;
11415      minIndex = maxIndex = startIndex = i;
11416    }
11417  }
11418  return decimated;
11419}
11420function cleanDecimatedDataset(dataset) {
11421  if (dataset._decimated) {
11422    const data = dataset._data;
11423    delete dataset._decimated;
11424    delete dataset._data;
11425    Object.defineProperty(dataset, 'data', {value: data});
11426  }
11427}
11428function cleanDecimatedData(chart) {
11429  chart.data.datasets.forEach((dataset) => {
11430    cleanDecimatedDataset(dataset);
11431  });
11432}
11433function getStartAndCountOfVisiblePointsSimplified(meta, points) {
11434  const pointCount = points.length;
11435  let start = 0;
11436  let count;
11437  const {iScale} = meta;
11438  const {min, max, minDefined, maxDefined} = iScale.getUserBounds();
11439  if (minDefined) {
11440    start = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.E)((0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.Z)(points, iScale.axis, min).lo, 0, pointCount - 1);
11441  }
11442  if (maxDefined) {
11443    count = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.E)((0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.Z)(points, iScale.axis, max).hi + 1, start, pointCount) - start;
11444  } else {
11445    count = pointCount - start;
11446  }
11447  return {start, count};
11448}
11449var plugin_decimation = {
11450  id: 'decimation',
11451  defaults: {
11452    algorithm: 'min-max',
11453    enabled: false,
11454  },
11455  beforeElementsUpdate: (chart, args, options) => {
11456    if (!options.enabled) {
11457      cleanDecimatedData(chart);
11458      return;
11459    }
11460    const availableWidth = chart.width;
11461    chart.data.datasets.forEach((dataset, datasetIndex) => {
11462      const {_data, indexAxis} = dataset;
11463      const meta = chart.getDatasetMeta(datasetIndex);
11464      const data = _data || dataset.data;
11465      if ((0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.a)([indexAxis, chart.options.indexAxis]) === 'y') {
11466        return;
11467      }
11468      if (!meta.controller.supportsDecimation) {
11469        return;
11470      }
11471      const xAxis = chart.scales[meta.xAxisID];
11472      if (xAxis.type !== 'linear' && xAxis.type !== 'time') {
11473        return;
11474      }
11475      if (chart.options.parsing) {
11476        return;
11477      }
11478      let {start, count} = getStartAndCountOfVisiblePointsSimplified(meta, data);
11479      const threshold = options.threshold || 4 * availableWidth;
11480      if (count <= threshold) {
11481        cleanDecimatedDataset(dataset);
11482        return;
11483      }
11484      if ((0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.k)(_data)) {
11485        dataset._data = data;
11486        delete dataset.data;
11487        Object.defineProperty(dataset, 'data', {
11488          configurable: true,
11489          enumerable: true,
11490          get: function() {
11491            return this._decimated;
11492          },
11493          set: function(d) {
11494            this._data = d;
11495          }
11496        });
11497      }
11498      let decimated;
11499      switch (options.algorithm) {
11500      case 'lttb':
11501        decimated = lttbDecimation(data, start, count, availableWidth, options);
11502        break;
11503      case 'min-max':
11504        decimated = minMaxDecimation(data, start, count, availableWidth);
11505        break;
11506      default:
11507        throw new Error(`Unsupported decimation algorithm '${options.algorithm}'`);
11508      }
11509      dataset._decimated = decimated;
11510    });
11511  },
11512  destroy(chart) {
11513    cleanDecimatedData(chart);
11514  }
11515};
11516
11517function _segments(line, target, property) {
11518  const segments = line.segments;
11519  const points = line.points;
11520  const tpoints = target.points;
11521  const parts = [];
11522  for (const segment of segments) {
11523    let {start, end} = segment;
11524    end = _findSegmentEnd(start, end, points);
11525    const bounds = _getBounds(property, points[start], points[end], segment.loop);
11526    if (!target.segments) {
11527      parts.push({
11528        source: segment,
11529        target: bounds,
11530        start: points[start],
11531        end: points[end]
11532      });
11533      continue;
11534    }
11535    const targetSegments = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.ao)(target, bounds);
11536    for (const tgt of targetSegments) {
11537      const subBounds = _getBounds(property, tpoints[tgt.start], tpoints[tgt.end], tgt.loop);
11538      const fillSources = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.ay)(segment, points, subBounds);
11539      for (const fillSource of fillSources) {
11540        parts.push({
11541          source: fillSource,
11542          target: tgt,
11543          start: {
11544            [property]: _getEdge(bounds, subBounds, 'start', Math.max)
11545          },
11546          end: {
11547            [property]: _getEdge(bounds, subBounds, 'end', Math.min)
11548          }
11549        });
11550      }
11551    }
11552  }
11553  return parts;
11554}
11555function _getBounds(property, first, last, loop) {
11556  if (loop) {
11557    return;
11558  }
11559  let start = first[property];
11560  let end = last[property];
11561  if (property === 'angle') {
11562    start = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.az)(start);
11563    end = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.az)(end);
11564  }
11565  return {property, start, end};
11566}
11567function _pointsFromSegments(boundary, line) {
11568  const {x = null, y = null} = boundary || {};
11569  const linePoints = line.points;
11570  const points = [];
11571  line.segments.forEach(({start, end}) => {
11572    end = _findSegmentEnd(start, end, linePoints);
11573    const first = linePoints[start];
11574    const last = linePoints[end];
11575    if (y !== null) {
11576      points.push({x: first.x, y});
11577      points.push({x: last.x, y});
11578    } else if (x !== null) {
11579      points.push({x, y: first.y});
11580      points.push({x, y: last.y});
11581    }
11582  });
11583  return points;
11584}
11585function _findSegmentEnd(start, end, points) {
11586  for (;end > start; end--) {
11587    const point = points[end];
11588    if (!isNaN(point.x) && !isNaN(point.y)) {
11589      break;
11590    }
11591  }
11592  return end;
11593}
11594function _getEdge(a, b, prop, fn) {
11595  if (a && b) {
11596    return fn(a[prop], b[prop]);
11597  }
11598  return a ? a[prop] : b ? b[prop] : 0;
11599}
11600
11601function _createBoundaryLine(boundary, line) {
11602  let points = [];
11603  let _loop = false;
11604  if ((0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.b)(boundary)) {
11605    _loop = true;
11606    points = boundary;
11607  } else {
11608    points = _pointsFromSegments(boundary, line);
11609  }
11610  return points.length ? new LineElement({
11611    points,
11612    options: {tension: 0},
11613    _loop,
11614    _fullLoop: _loop
11615  }) : null;
11616}
11617function _shouldApplyFill(source) {
11618  return source && source.fill !== false;
11619}
11620
11621function _resolveTarget(sources, index, propagate) {
11622  const source = sources[index];
11623  let fill = source.fill;
11624  const visited = [index];
11625  let target;
11626  if (!propagate) {
11627    return fill;
11628  }
11629  while (fill !== false && visited.indexOf(fill) === -1) {
11630    if (!(0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.g)(fill)) {
11631      return fill;
11632    }
11633    target = sources[fill];
11634    if (!target) {
11635      return false;
11636    }
11637    if (target.visible) {
11638      return fill;
11639    }
11640    visited.push(fill);
11641    fill = target.fill;
11642  }
11643  return false;
11644}
11645function _decodeFill(line, index, count) {
11646  const fill = parseFillOption(line);
11647  if ((0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.i)(fill)) {
11648    return isNaN(fill.value) ? false : fill;
11649  }
11650  let target = parseFloat(fill);
11651  if ((0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.g)(target) && Math.floor(target) === target) {
11652    return decodeTargetIndex(fill[0], index, target, count);
11653  }
11654  return ['origin', 'start', 'end', 'stack', 'shape'].indexOf(fill) >= 0 && fill;
11655}
11656function decodeTargetIndex(firstCh, index, target, count) {
11657  if (firstCh === '-' || firstCh === '+') {
11658    target = index + target;
11659  }
11660  if (target === index || target < 0 || target >= count) {
11661    return false;
11662  }
11663  return target;
11664}
11665function _getTargetPixel(fill, scale) {
11666  let pixel = null;
11667  if (fill === 'start') {
11668    pixel = scale.bottom;
11669  } else if (fill === 'end') {
11670    pixel = scale.top;
11671  } else if ((0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.i)(fill)) {
11672    pixel = scale.getPixelForValue(fill.value);
11673  } else if (scale.getBasePixel) {
11674    pixel = scale.getBasePixel();
11675  }
11676  return pixel;
11677}
11678function _getTargetValue(fill, scale, startValue) {
11679  let value;
11680  if (fill === 'start') {
11681    value = startValue;
11682  } else if (fill === 'end') {
11683    value = scale.options.reverse ? scale.min : scale.max;
11684  } else if ((0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.i)(fill)) {
11685    value = fill.value;
11686  } else {
11687    value = scale.getBaseValue();
11688  }
11689  return value;
11690}
11691function parseFillOption(line) {
11692  const options = line.options;
11693  const fillOption = options.fill;
11694  let fill = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.v)(fillOption && fillOption.target, fillOption);
11695  if (fill === undefined) {
11696    fill = !!options.backgroundColor;
11697  }
11698  if (fill === false || fill === null) {
11699    return false;
11700  }
11701  if (fill === true) {
11702    return 'origin';
11703  }
11704  return fill;
11705}
11706
11707function _buildStackLine(source) {
11708  const {scale, index, line} = source;
11709  const points = [];
11710  const segments = line.segments;
11711  const sourcePoints = line.points;
11712  const linesBelow = getLinesBelow(scale, index);
11713  linesBelow.push(_createBoundaryLine({x: null, y: scale.bottom}, line));
11714  for (let i = 0; i < segments.length; i++) {
11715    const segment = segments[i];
11716    for (let j = segment.start; j <= segment.end; j++) {
11717      addPointsBelow(points, sourcePoints[j], linesBelow);
11718    }
11719  }
11720  return new LineElement({points, options: {}});
11721}
11722function getLinesBelow(scale, index) {
11723  const below = [];
11724  const metas = scale.getMatchingVisibleMetas('line');
11725  for (let i = 0; i < metas.length; i++) {
11726    const meta = metas[i];
11727    if (meta.index === index) {
11728      break;
11729    }
11730    if (!meta.hidden) {
11731      below.unshift(meta.dataset);
11732    }
11733  }
11734  return below;
11735}
11736function addPointsBelow(points, sourcePoint, linesBelow) {
11737  const postponed = [];
11738  for (let j = 0; j < linesBelow.length; j++) {
11739    const line = linesBelow[j];
11740    const {first, last, point} = findPoint(line, sourcePoint, 'x');
11741    if (!point || (first && last)) {
11742      continue;
11743    }
11744    if (first) {
11745      postponed.unshift(point);
11746    } else {
11747      points.push(point);
11748      if (!last) {
11749        break;
11750      }
11751    }
11752  }
11753  points.push(...postponed);
11754}
11755function findPoint(line, sourcePoint, property) {
11756  const point = line.interpolate(sourcePoint, property);
11757  if (!point) {
11758    return {};
11759  }
11760  const pointValue = point[property];
11761  const segments = line.segments;
11762  const linePoints = line.points;
11763  let first = false;
11764  let last = false;
11765  for (let i = 0; i < segments.length; i++) {
11766    const segment = segments[i];
11767    const firstValue = linePoints[segment.start][property];
11768    const lastValue = linePoints[segment.end][property];
11769    if ((0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.ak)(pointValue, firstValue, lastValue)) {
11770      first = pointValue === firstValue;
11771      last = pointValue === lastValue;
11772      break;
11773    }
11774  }
11775  return {first, last, point};
11776}
11777
11778class simpleArc {
11779  constructor(opts) {
11780    this.x = opts.x;
11781    this.y = opts.y;
11782    this.radius = opts.radius;
11783  }
11784  pathSegment(ctx, bounds, opts) {
11785    const {x, y, radius} = this;
11786    bounds = bounds || {start: 0, end: _chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.T};
11787    ctx.arc(x, y, radius, bounds.end, bounds.start, true);
11788    return !opts.bounds;
11789  }
11790  interpolate(point) {
11791    const {x, y, radius} = this;
11792    const angle = point.angle;
11793    return {
11794      x: x + Math.cos(angle) * radius,
11795      y: y + Math.sin(angle) * radius,
11796      angle
11797    };
11798  }
11799}
11800
11801function _getTarget(source) {
11802  const {chart, fill, line} = source;
11803  if ((0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.g)(fill)) {
11804    return getLineByIndex(chart, fill);
11805  }
11806  if (fill === 'stack') {
11807    return _buildStackLine(source);
11808  }
11809  if (fill === 'shape') {
11810    return true;
11811  }
11812  const boundary = computeBoundary(source);
11813  if (boundary instanceof simpleArc) {
11814    return boundary;
11815  }
11816  return _createBoundaryLine(boundary, line);
11817}
11818function getLineByIndex(chart, index) {
11819  const meta = chart.getDatasetMeta(index);
11820  const visible = meta && chart.isDatasetVisible(index);
11821  return visible ? meta.dataset : null;
11822}
11823function computeBoundary(source) {
11824  const scale = source.scale || {};
11825  if (scale.getPointPositionForValue) {
11826    return computeCircularBoundary(source);
11827  }
11828  return computeLinearBoundary(source);
11829}
11830function computeLinearBoundary(source) {
11831  const {scale = {}, fill} = source;
11832  const pixel = _getTargetPixel(fill, scale);
11833  if ((0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.g)(pixel)) {
11834    const horizontal = scale.isHorizontal();
11835    return {
11836      x: horizontal ? pixel : null,
11837      y: horizontal ? null : pixel
11838    };
11839  }
11840  return null;
11841}
11842function computeCircularBoundary(source) {
11843  const {scale, fill} = source;
11844  const options = scale.options;
11845  const length = scale.getLabels().length;
11846  const start = options.reverse ? scale.max : scale.min;
11847  const value = _getTargetValue(fill, scale, start);
11848  const target = [];
11849  if (options.grid.circular) {
11850    const center = scale.getPointPositionForValue(0, start);
11851    return new simpleArc({
11852      x: center.x,
11853      y: center.y,
11854      radius: scale.getDistanceFromCenterForValue(value)
11855    });
11856  }
11857  for (let i = 0; i < length; ++i) {
11858    target.push(scale.getPointPositionForValue(i, value));
11859  }
11860  return target;
11861}
11862
11863function _drawfill(ctx, source, area) {
11864  const target = _getTarget(source);
11865  const {line, scale, axis} = source;
11866  const lineOpts = line.options;
11867  const fillOption = lineOpts.fill;
11868  const color = lineOpts.backgroundColor;
11869  const {above = color, below = color} = fillOption || {};
11870  if (target && line.points.length) {
11871    (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.L)(ctx, area);
11872    doFill(ctx, {line, target, above, below, area, scale, axis});
11873    (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.N)(ctx);
11874  }
11875}
11876function doFill(ctx, cfg) {
11877  const {line, target, above, below, area, scale} = cfg;
11878  const property = line._loop ? 'angle' : cfg.axis;
11879  ctx.save();
11880  if (property === 'x' && below !== above) {
11881    clipVertical(ctx, target, area.top);
11882    fill(ctx, {line, target, color: above, scale, property});
11883    ctx.restore();
11884    ctx.save();
11885    clipVertical(ctx, target, area.bottom);
11886  }
11887  fill(ctx, {line, target, color: below, scale, property});
11888  ctx.restore();
11889}
11890function clipVertical(ctx, target, clipY) {
11891  const {segments, points} = target;
11892  let first = true;
11893  let lineLoop = false;
11894  ctx.beginPath();
11895  for (const segment of segments) {
11896    const {start, end} = segment;
11897    const firstPoint = points[start];
11898    const lastPoint = points[_findSegmentEnd(start, end, points)];
11899    if (first) {
11900      ctx.moveTo(firstPoint.x, firstPoint.y);
11901      first = false;
11902    } else {
11903      ctx.lineTo(firstPoint.x, clipY);
11904      ctx.lineTo(firstPoint.x, firstPoint.y);
11905    }
11906    lineLoop = !!target.pathSegment(ctx, segment, {move: lineLoop});
11907    if (lineLoop) {
11908      ctx.closePath();
11909    } else {
11910      ctx.lineTo(lastPoint.x, clipY);
11911    }
11912  }
11913  ctx.lineTo(target.first().x, clipY);
11914  ctx.closePath();
11915  ctx.clip();
11916}
11917function fill(ctx, cfg) {
11918  const {line, target, property, color, scale} = cfg;
11919  const segments = _segments(line, target, property);
11920  for (const {source: src, target: tgt, start, end} of segments) {
11921    const {style: {backgroundColor = color} = {}} = src;
11922    const notShape = target !== true;
11923    ctx.save();
11924    ctx.fillStyle = backgroundColor;
11925    clipBounds(ctx, scale, notShape && _getBounds(property, start, end));
11926    ctx.beginPath();
11927    const lineLoop = !!line.pathSegment(ctx, src);
11928    let loop;
11929    if (notShape) {
11930      if (lineLoop) {
11931        ctx.closePath();
11932      } else {
11933        interpolatedLineTo(ctx, target, end, property);
11934      }
11935      const targetLoop = !!target.pathSegment(ctx, tgt, {move: lineLoop, reverse: true});
11936      loop = lineLoop && targetLoop;
11937      if (!loop) {
11938        interpolatedLineTo(ctx, target, start, property);
11939      }
11940    }
11941    ctx.closePath();
11942    ctx.fill(loop ? 'evenodd' : 'nonzero');
11943    ctx.restore();
11944  }
11945}
11946function clipBounds(ctx, scale, bounds) {
11947  const {top, bottom} = scale.chart.chartArea;
11948  const {property, start, end} = bounds || {};
11949  if (property === 'x') {
11950    ctx.beginPath();
11951    ctx.rect(start, top, end - start, bottom - top);
11952    ctx.clip();
11953  }
11954}
11955function interpolatedLineTo(ctx, target, point, property) {
11956  const interpolatedPoint = target.interpolate(point, property);
11957  if (interpolatedPoint) {
11958    ctx.lineTo(interpolatedPoint.x, interpolatedPoint.y);
11959  }
11960}
11961
11962var index = {
11963  id: 'filler',
11964  afterDatasetsUpdate(chart, _args, options) {
11965    const count = (chart.data.datasets || []).length;
11966    const sources = [];
11967    let meta, i, line, source;
11968    for (i = 0; i < count; ++i) {
11969      meta = chart.getDatasetMeta(i);
11970      line = meta.dataset;
11971      source = null;
11972      if (line && line.options && line instanceof LineElement) {
11973        source = {
11974          visible: chart.isDatasetVisible(i),
11975          index: i,
11976          fill: _decodeFill(line, i, count),
11977          chart,
11978          axis: meta.controller.options.indexAxis,
11979          scale: meta.vScale,
11980          line,
11981        };
11982      }
11983      meta.$filler = source;
11984      sources.push(source);
11985    }
11986    for (i = 0; i < count; ++i) {
11987      source = sources[i];
11988      if (!source || source.fill === false) {
11989        continue;
11990      }
11991      source.fill = _resolveTarget(sources, i, options.propagate);
11992    }
11993  },
11994  beforeDraw(chart, _args, options) {
11995    const draw = options.drawTime === 'beforeDraw';
11996    const metasets = chart.getSortedVisibleDatasetMetas();
11997    const area = chart.chartArea;
11998    for (let i = metasets.length - 1; i >= 0; --i) {
11999      const source = metasets[i].$filler;
12000      if (!source) {
12001        continue;
12002      }
12003      source.line.updateControlPoints(area, source.axis);
12004      if (draw && source.fill) {
12005        _drawfill(chart.ctx, source, area);
12006      }
12007    }
12008  },
12009  beforeDatasetsDraw(chart, _args, options) {
12010    if (options.drawTime !== 'beforeDatasetsDraw') {
12011      return;
12012    }
12013    const metasets = chart.getSortedVisibleDatasetMetas();
12014    for (let i = metasets.length - 1; i >= 0; --i) {
12015      const source = metasets[i].$filler;
12016      if (_shouldApplyFill(source)) {
12017        _drawfill(chart.ctx, source, chart.chartArea);
12018      }
12019    }
12020  },
12021  beforeDatasetDraw(chart, args, options) {
12022    const source = args.meta.$filler;
12023    if (!_shouldApplyFill(source) || options.drawTime !== 'beforeDatasetDraw') {
12024      return;
12025    }
12026    _drawfill(chart.ctx, source, chart.chartArea);
12027  },
12028  defaults: {
12029    propagate: true,
12030    drawTime: 'beforeDatasetDraw'
12031  }
12032};
12033
12034const getBoxSize = (labelOpts, fontSize) => {
12035  let {boxHeight = fontSize, boxWidth = fontSize} = labelOpts;
12036  if (labelOpts.usePointStyle) {
12037    boxHeight = Math.min(boxHeight, fontSize);
12038    boxWidth = labelOpts.pointStyleWidth || Math.min(boxWidth, fontSize);
12039  }
12040  return {
12041    boxWidth,
12042    boxHeight,
12043    itemHeight: Math.max(fontSize, boxHeight)
12044  };
12045};
12046const itemsEqual = (a, b) => a !== null && b !== null && a.datasetIndex === b.datasetIndex && a.index === b.index;
12047class Legend extends Element {
12048  constructor(config) {
12049    super();
12050    this._added = false;
12051    this.legendHitBoxes = [];
12052    this._hoveredItem = null;
12053    this.doughnutMode = false;
12054    this.chart = config.chart;
12055    this.options = config.options;
12056    this.ctx = config.ctx;
12057    this.legendItems = undefined;
12058    this.columnSizes = undefined;
12059    this.lineWidths = undefined;
12060    this.maxHeight = undefined;
12061    this.maxWidth = undefined;
12062    this.top = undefined;
12063    this.bottom = undefined;
12064    this.left = undefined;
12065    this.right = undefined;
12066    this.height = undefined;
12067    this.width = undefined;
12068    this._margins = undefined;
12069    this.position = undefined;
12070    this.weight = undefined;
12071    this.fullSize = undefined;
12072  }
12073  update(maxWidth, maxHeight, margins) {
12074    this.maxWidth = maxWidth;
12075    this.maxHeight = maxHeight;
12076    this._margins = margins;
12077    this.setDimensions();
12078    this.buildLabels();
12079    this.fit();
12080  }
12081  setDimensions() {
12082    if (this.isHorizontal()) {
12083      this.width = this.maxWidth;
12084      this.left = this._margins.left;
12085      this.right = this.width;
12086    } else {
12087      this.height = this.maxHeight;
12088      this.top = this._margins.top;
12089      this.bottom = this.height;
12090    }
12091  }
12092  buildLabels() {
12093    const labelOpts = this.options.labels || {};
12094    let legendItems = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.C)(labelOpts.generateLabels, [this.chart], this) || [];
12095    if (labelOpts.filter) {
12096      legendItems = legendItems.filter((item) => labelOpts.filter(item, this.chart.data));
12097    }
12098    if (labelOpts.sort) {
12099      legendItems = legendItems.sort((a, b) => labelOpts.sort(a, b, this.chart.data));
12100    }
12101    if (this.options.reverse) {
12102      legendItems.reverse();
12103    }
12104    this.legendItems = legendItems;
12105  }
12106  fit() {
12107    const {options, ctx} = this;
12108    if (!options.display) {
12109      this.width = this.height = 0;
12110      return;
12111    }
12112    const labelOpts = options.labels;
12113    const labelFont = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.O)(labelOpts.font);
12114    const fontSize = labelFont.size;
12115    const titleHeight = this._computeTitleHeight();
12116    const {boxWidth, itemHeight} = getBoxSize(labelOpts, fontSize);
12117    let width, height;
12118    ctx.font = labelFont.string;
12119    if (this.isHorizontal()) {
12120      width = this.maxWidth;
12121      height = this._fitRows(titleHeight, fontSize, boxWidth, itemHeight) + 10;
12122    } else {
12123      height = this.maxHeight;
12124      width = this._fitCols(titleHeight, fontSize, boxWidth, itemHeight) + 10;
12125    }
12126    this.width = Math.min(width, options.maxWidth || this.maxWidth);
12127    this.height = Math.min(height, options.maxHeight || this.maxHeight);
12128  }
12129  _fitRows(titleHeight, fontSize, boxWidth, itemHeight) {
12130    const {ctx, maxWidth, options: {labels: {padding}}} = this;
12131    const hitboxes = this.legendHitBoxes = [];
12132    const lineWidths = this.lineWidths = [0];
12133    const lineHeight = itemHeight + padding;
12134    let totalHeight = titleHeight;
12135    ctx.textAlign = 'left';
12136    ctx.textBaseline = 'middle';
12137    let row = -1;
12138    let top = -lineHeight;
12139    this.legendItems.forEach((legendItem, i) => {
12140      const itemWidth = boxWidth + (fontSize / 2) + ctx.measureText(legendItem.text).width;
12141      if (i === 0 || lineWidths[lineWidths.length - 1] + itemWidth + 2 * padding > maxWidth) {
12142        totalHeight += lineHeight;
12143        lineWidths[lineWidths.length - (i > 0 ? 0 : 1)] = 0;
12144        top += lineHeight;
12145        row++;
12146      }
12147      hitboxes[i] = {left: 0, top, row, width: itemWidth, height: itemHeight};
12148      lineWidths[lineWidths.length - 1] += itemWidth + padding;
12149    });
12150    return totalHeight;
12151  }
12152  _fitCols(titleHeight, fontSize, boxWidth, itemHeight) {
12153    const {ctx, maxHeight, options: {labels: {padding}}} = this;
12154    const hitboxes = this.legendHitBoxes = [];
12155    const columnSizes = this.columnSizes = [];
12156    const heightLimit = maxHeight - titleHeight;
12157    let totalWidth = padding;
12158    let currentColWidth = 0;
12159    let currentColHeight = 0;
12160    let left = 0;
12161    let col = 0;
12162    this.legendItems.forEach((legendItem, i) => {
12163      const itemWidth = boxWidth + (fontSize / 2) + ctx.measureText(legendItem.text).width;
12164      if (i > 0 && currentColHeight + itemHeight + 2 * padding > heightLimit) {
12165        totalWidth += currentColWidth + padding;
12166        columnSizes.push({width: currentColWidth, height: currentColHeight});
12167        left += currentColWidth + padding;
12168        col++;
12169        currentColWidth = currentColHeight = 0;
12170      }
12171      hitboxes[i] = {left, top: currentColHeight, col, width: itemWidth, height: itemHeight};
12172      currentColWidth = Math.max(currentColWidth, itemWidth);
12173      currentColHeight += itemHeight + padding;
12174    });
12175    totalWidth += currentColWidth;
12176    columnSizes.push({width: currentColWidth, height: currentColHeight});
12177    return totalWidth;
12178  }
12179  adjustHitBoxes() {
12180    if (!this.options.display) {
12181      return;
12182    }
12183    const titleHeight = this._computeTitleHeight();
12184    const {legendHitBoxes: hitboxes, options: {align, labels: {padding}, rtl}} = this;
12185    const rtlHelper = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.aA)(rtl, this.left, this.width);
12186    if (this.isHorizontal()) {
12187      let row = 0;
12188      let left = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.S)(align, this.left + padding, this.right - this.lineWidths[row]);
12189      for (const hitbox of hitboxes) {
12190        if (row !== hitbox.row) {
12191          row = hitbox.row;
12192          left = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.S)(align, this.left + padding, this.right - this.lineWidths[row]);
12193        }
12194        hitbox.top += this.top + titleHeight + padding;
12195        hitbox.left = rtlHelper.leftForLtr(rtlHelper.x(left), hitbox.width);
12196        left += hitbox.width + padding;
12197      }
12198    } else {
12199      let col = 0;
12200      let top = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.S)(align, this.top + titleHeight + padding, this.bottom - this.columnSizes[col].height);
12201      for (const hitbox of hitboxes) {
12202        if (hitbox.col !== col) {
12203          col = hitbox.col;
12204          top = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.S)(align, this.top + titleHeight + padding, this.bottom - this.columnSizes[col].height);
12205        }
12206        hitbox.top = top;
12207        hitbox.left += this.left + padding;
12208        hitbox.left = rtlHelper.leftForLtr(rtlHelper.x(hitbox.left), hitbox.width);
12209        top += hitbox.height + padding;
12210      }
12211    }
12212  }
12213  isHorizontal() {
12214    return this.options.position === 'top' || this.options.position === 'bottom';
12215  }
12216  draw() {
12217    if (this.options.display) {
12218      const ctx = this.ctx;
12219      (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.L)(ctx, this);
12220      this._draw();
12221      (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.N)(ctx);
12222    }
12223  }
12224  _draw() {
12225    const {options: opts, columnSizes, lineWidths, ctx} = this;
12226    const {align, labels: labelOpts} = opts;
12227    const defaultColor = _chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.d.color;
12228    const rtlHelper = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.aA)(opts.rtl, this.left, this.width);
12229    const labelFont = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.O)(labelOpts.font);
12230    const {color: fontColor, padding} = labelOpts;
12231    const fontSize = labelFont.size;
12232    const halfFontSize = fontSize / 2;
12233    let cursor;
12234    this.drawTitle();
12235    ctx.textAlign = rtlHelper.textAlign('left');
12236    ctx.textBaseline = 'middle';
12237    ctx.lineWidth = 0.5;
12238    ctx.font = labelFont.string;
12239    const {boxWidth, boxHeight, itemHeight} = getBoxSize(labelOpts, fontSize);
12240    const drawLegendBox = function(x, y, legendItem) {
12241      if (isNaN(boxWidth) || boxWidth <= 0 || isNaN(boxHeight) || boxHeight < 0) {
12242        return;
12243      }
12244      ctx.save();
12245      const lineWidth = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.v)(legendItem.lineWidth, 1);
12246      ctx.fillStyle = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.v)(legendItem.fillStyle, defaultColor);
12247      ctx.lineCap = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.v)(legendItem.lineCap, 'butt');
12248      ctx.lineDashOffset = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.v)(legendItem.lineDashOffset, 0);
12249      ctx.lineJoin = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.v)(legendItem.lineJoin, 'miter');
12250      ctx.lineWidth = lineWidth;
12251      ctx.strokeStyle = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.v)(legendItem.strokeStyle, defaultColor);
12252      ctx.setLineDash((0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.v)(legendItem.lineDash, []));
12253      if (labelOpts.usePointStyle) {
12254        const drawOptions = {
12255          radius: boxHeight * Math.SQRT2 / 2,
12256          pointStyle: legendItem.pointStyle,
12257          rotation: legendItem.rotation,
12258          borderWidth: lineWidth
12259        };
12260        const centerX = rtlHelper.xPlus(x, boxWidth / 2);
12261        const centerY = y + halfFontSize;
12262        (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.aE)(ctx, drawOptions, centerX, centerY, labelOpts.pointStyleWidth && boxWidth);
12263      } else {
12264        const yBoxTop = y + Math.max((fontSize - boxHeight) / 2, 0);
12265        const xBoxLeft = rtlHelper.leftForLtr(x, boxWidth);
12266        const borderRadius = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.ax)(legendItem.borderRadius);
12267        ctx.beginPath();
12268        if (Object.values(borderRadius).some(v => v !== 0)) {
12269          (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.av)(ctx, {
12270            x: xBoxLeft,
12271            y: yBoxTop,
12272            w: boxWidth,
12273            h: boxHeight,
12274            radius: borderRadius,
12275          });
12276        } else {
12277          ctx.rect(xBoxLeft, yBoxTop, boxWidth, boxHeight);
12278        }
12279        ctx.fill();
12280        if (lineWidth !== 0) {
12281          ctx.stroke();
12282        }
12283      }
12284      ctx.restore();
12285    };
12286    const fillText = function(x, y, legendItem) {
12287      (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.M)(ctx, legendItem.text, x, y + (itemHeight / 2), labelFont, {
12288        strikethrough: legendItem.hidden,
12289        textAlign: rtlHelper.textAlign(legendItem.textAlign)
12290      });
12291    };
12292    const isHorizontal = this.isHorizontal();
12293    const titleHeight = this._computeTitleHeight();
12294    if (isHorizontal) {
12295      cursor = {
12296        x: (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.S)(align, this.left + padding, this.right - lineWidths[0]),
12297        y: this.top + padding + titleHeight,
12298        line: 0
12299      };
12300    } else {
12301      cursor = {
12302        x: this.left + padding,
12303        y: (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.S)(align, this.top + titleHeight + padding, this.bottom - columnSizes[0].height),
12304        line: 0
12305      };
12306    }
12307    (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.aB)(this.ctx, opts.textDirection);
12308    const lineHeight = itemHeight + padding;
12309    this.legendItems.forEach((legendItem, i) => {
12310      ctx.strokeStyle = legendItem.fontColor || fontColor;
12311      ctx.fillStyle = legendItem.fontColor || fontColor;
12312      const textWidth = ctx.measureText(legendItem.text).width;
12313      const textAlign = rtlHelper.textAlign(legendItem.textAlign || (legendItem.textAlign = labelOpts.textAlign));
12314      const width = boxWidth + halfFontSize + textWidth;
12315      let x = cursor.x;
12316      let y = cursor.y;
12317      rtlHelper.setWidth(this.width);
12318      if (isHorizontal) {
12319        if (i > 0 && x + width + padding > this.right) {
12320          y = cursor.y += lineHeight;
12321          cursor.line++;
12322          x = cursor.x = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.S)(align, this.left + padding, this.right - lineWidths[cursor.line]);
12323        }
12324      } else if (i > 0 && y + lineHeight > this.bottom) {
12325        x = cursor.x = x + columnSizes[cursor.line].width + padding;
12326        cursor.line++;
12327        y = cursor.y = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.S)(align, this.top + titleHeight + padding, this.bottom - columnSizes[cursor.line].height);
12328      }
12329      const realX = rtlHelper.x(x);
12330      drawLegendBox(realX, y, legendItem);
12331      x = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.aC)(textAlign, x + boxWidth + halfFontSize, isHorizontal ? x + width : this.right, opts.rtl);
12332      fillText(rtlHelper.x(x), y, legendItem);
12333      if (isHorizontal) {
12334        cursor.x += width + padding;
12335      } else {
12336        cursor.y += lineHeight;
12337      }
12338    });
12339    (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.aD)(this.ctx, opts.textDirection);
12340  }
12341  drawTitle() {
12342    const opts = this.options;
12343    const titleOpts = opts.title;
12344    const titleFont = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.O)(titleOpts.font);
12345    const titlePadding = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.K)(titleOpts.padding);
12346    if (!titleOpts.display) {
12347      return;
12348    }
12349    const rtlHelper = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.aA)(opts.rtl, this.left, this.width);
12350    const ctx = this.ctx;
12351    const position = titleOpts.position;
12352    const halfFontSize = titleFont.size / 2;
12353    const topPaddingPlusHalfFontSize = titlePadding.top + halfFontSize;
12354    let y;
12355    let left = this.left;
12356    let maxWidth = this.width;
12357    if (this.isHorizontal()) {
12358      maxWidth = Math.max(...this.lineWidths);
12359      y = this.top + topPaddingPlusHalfFontSize;
12360      left = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.S)(opts.align, left, this.right - maxWidth);
12361    } else {
12362      const maxHeight = this.columnSizes.reduce((acc, size) => Math.max(acc, size.height), 0);
12363      y = topPaddingPlusHalfFontSize + (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.S)(opts.align, this.top, this.bottom - maxHeight - opts.labels.padding - this._computeTitleHeight());
12364    }
12365    const x = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.S)(position, left, left + maxWidth);
12366    ctx.textAlign = rtlHelper.textAlign((0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.R)(position));
12367    ctx.textBaseline = 'middle';
12368    ctx.strokeStyle = titleOpts.color;
12369    ctx.fillStyle = titleOpts.color;
12370    ctx.font = titleFont.string;
12371    (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.M)(ctx, titleOpts.text, x, y, titleFont);
12372  }
12373  _computeTitleHeight() {
12374    const titleOpts = this.options.title;
12375    const titleFont = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.O)(titleOpts.font);
12376    const titlePadding = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.K)(titleOpts.padding);
12377    return titleOpts.display ? titleFont.lineHeight + titlePadding.height : 0;
12378  }
12379  _getLegendItemAt(x, y) {
12380    let i, hitBox, lh;
12381    if ((0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.ak)(x, this.left, this.right)
12382      && (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.ak)(y, this.top, this.bottom)) {
12383      lh = this.legendHitBoxes;
12384      for (i = 0; i < lh.length; ++i) {
12385        hitBox = lh[i];
12386        if ((0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.ak)(x, hitBox.left, hitBox.left + hitBox.width)
12387          && (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.ak)(y, hitBox.top, hitBox.top + hitBox.height)) {
12388          return this.legendItems[i];
12389        }
12390      }
12391    }
12392    return null;
12393  }
12394  handleEvent(e) {
12395    const opts = this.options;
12396    if (!isListened(e.type, opts)) {
12397      return;
12398    }
12399    const hoveredItem = this._getLegendItemAt(e.x, e.y);
12400    if (e.type === 'mousemove' || e.type === 'mouseout') {
12401      const previous = this._hoveredItem;
12402      const sameItem = itemsEqual(previous, hoveredItem);
12403      if (previous && !sameItem) {
12404        (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.C)(opts.onLeave, [e, previous, this], this);
12405      }
12406      this._hoveredItem = hoveredItem;
12407      if (hoveredItem && !sameItem) {
12408        (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.C)(opts.onHover, [e, hoveredItem, this], this);
12409      }
12410    } else if (hoveredItem) {
12411      (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.C)(opts.onClick, [e, hoveredItem, this], this);
12412    }
12413  }
12414}
12415function isListened(type, opts) {
12416  if ((type === 'mousemove' || type === 'mouseout') && (opts.onHover || opts.onLeave)) {
12417    return true;
12418  }
12419  if (opts.onClick && (type === 'click' || type === 'mouseup')) {
12420    return true;
12421  }
12422  return false;
12423}
12424var plugin_legend = {
12425  id: 'legend',
12426  _element: Legend,
12427  start(chart, _args, options) {
12428    const legend = chart.legend = new Legend({ctx: chart.ctx, options, chart});
12429    layouts.configure(chart, legend, options);
12430    layouts.addBox(chart, legend);
12431  },
12432  stop(chart) {
12433    layouts.removeBox(chart, chart.legend);
12434    delete chart.legend;
12435  },
12436  beforeUpdate(chart, _args, options) {
12437    const legend = chart.legend;
12438    layouts.configure(chart, legend, options);
12439    legend.options = options;
12440  },
12441  afterUpdate(chart) {
12442    const legend = chart.legend;
12443    legend.buildLabels();
12444    legend.adjustHitBoxes();
12445  },
12446  afterEvent(chart, args) {
12447    if (!args.replay) {
12448      chart.legend.handleEvent(args.event);
12449    }
12450  },
12451  defaults: {
12452    display: true,
12453    position: 'top',
12454    align: 'center',
12455    fullSize: true,
12456    reverse: false,
12457    weight: 1000,
12458    onClick(e, legendItem, legend) {
12459      const index = legendItem.datasetIndex;
12460      const ci = legend.chart;
12461      if (ci.isDatasetVisible(index)) {
12462        ci.hide(index);
12463        legendItem.hidden = true;
12464      } else {
12465        ci.show(index);
12466        legendItem.hidden = false;
12467      }
12468    },
12469    onHover: null,
12470    onLeave: null,
12471    labels: {
12472      color: (ctx) => ctx.chart.options.color,
12473      boxWidth: 40,
12474      padding: 10,
12475      generateLabels(chart) {
12476        const datasets = chart.data.datasets;
12477        const {labels: {usePointStyle, pointStyle, textAlign, color}} = chart.legend.options;
12478        return chart._getSortedDatasetMetas().map((meta) => {
12479          const style = meta.controller.getStyle(usePointStyle ? 0 : undefined);
12480          const borderWidth = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.K)(style.borderWidth);
12481          return {
12482            text: datasets[meta.index].label,
12483            fillStyle: style.backgroundColor,
12484            fontColor: color,
12485            hidden: !meta.visible,
12486            lineCap: style.borderCapStyle,
12487            lineDash: style.borderDash,
12488            lineDashOffset: style.borderDashOffset,
12489            lineJoin: style.borderJoinStyle,
12490            lineWidth: (borderWidth.width + borderWidth.height) / 4,
12491            strokeStyle: style.borderColor,
12492            pointStyle: pointStyle || style.pointStyle,
12493            rotation: style.rotation,
12494            textAlign: textAlign || style.textAlign,
12495            borderRadius: 0,
12496            datasetIndex: meta.index
12497          };
12498        }, this);
12499      }
12500    },
12501    title: {
12502      color: (ctx) => ctx.chart.options.color,
12503      display: false,
12504      position: 'center',
12505      text: '',
12506    }
12507  },
12508  descriptors: {
12509    _scriptable: (name) => !name.startsWith('on'),
12510    labels: {
12511      _scriptable: (name) => !['generateLabels', 'filter', 'sort'].includes(name),
12512    }
12513  },
12514};
12515
12516class Title extends Element {
12517  constructor(config) {
12518    super();
12519    this.chart = config.chart;
12520    this.options = config.options;
12521    this.ctx = config.ctx;
12522    this._padding = undefined;
12523    this.top = undefined;
12524    this.bottom = undefined;
12525    this.left = undefined;
12526    this.right = undefined;
12527    this.width = undefined;
12528    this.height = undefined;
12529    this.position = undefined;
12530    this.weight = undefined;
12531    this.fullSize = undefined;
12532  }
12533  update(maxWidth, maxHeight) {
12534    const opts = this.options;
12535    this.left = 0;
12536    this.top = 0;
12537    if (!opts.display) {
12538      this.width = this.height = this.right = this.bottom = 0;
12539      return;
12540    }
12541    this.width = this.right = maxWidth;
12542    this.height = this.bottom = maxHeight;
12543    const lineCount = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.b)(opts.text) ? opts.text.length : 1;
12544    this._padding = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.K)(opts.padding);
12545    const textSize = lineCount * (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.O)(opts.font).lineHeight + this._padding.height;
12546    if (this.isHorizontal()) {
12547      this.height = textSize;
12548    } else {
12549      this.width = textSize;
12550    }
12551  }
12552  isHorizontal() {
12553    const pos = this.options.position;
12554    return pos === 'top' || pos === 'bottom';
12555  }
12556  _drawArgs(offset) {
12557    const {top, left, bottom, right, options} = this;
12558    const align = options.align;
12559    let rotation = 0;
12560    let maxWidth, titleX, titleY;
12561    if (this.isHorizontal()) {
12562      titleX = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.S)(align, left, right);
12563      titleY = top + offset;
12564      maxWidth = right - left;
12565    } else {
12566      if (options.position === 'left') {
12567        titleX = left + offset;
12568        titleY = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.S)(align, bottom, top);
12569        rotation = _chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.P * -0.5;
12570      } else {
12571        titleX = right - offset;
12572        titleY = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.S)(align, top, bottom);
12573        rotation = _chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.P * 0.5;
12574      }
12575      maxWidth = bottom - top;
12576    }
12577    return {titleX, titleY, maxWidth, rotation};
12578  }
12579  draw() {
12580    const ctx = this.ctx;
12581    const opts = this.options;
12582    if (!opts.display) {
12583      return;
12584    }
12585    const fontOpts = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.O)(opts.font);
12586    const lineHeight = fontOpts.lineHeight;
12587    const offset = lineHeight / 2 + this._padding.top;
12588    const {titleX, titleY, maxWidth, rotation} = this._drawArgs(offset);
12589    (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.M)(ctx, opts.text, 0, 0, fontOpts, {
12590      color: opts.color,
12591      maxWidth,
12592      rotation,
12593      textAlign: (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.R)(opts.align),
12594      textBaseline: 'middle',
12595      translation: [titleX, titleY],
12596    });
12597  }
12598}
12599function createTitle(chart, titleOpts) {
12600  const title = new Title({
12601    ctx: chart.ctx,
12602    options: titleOpts,
12603    chart
12604  });
12605  layouts.configure(chart, title, titleOpts);
12606  layouts.addBox(chart, title);
12607  chart.titleBlock = title;
12608}
12609var plugin_title = {
12610  id: 'title',
12611  _element: Title,
12612  start(chart, _args, options) {
12613    createTitle(chart, options);
12614  },
12615  stop(chart) {
12616    const titleBlock = chart.titleBlock;
12617    layouts.removeBox(chart, titleBlock);
12618    delete chart.titleBlock;
12619  },
12620  beforeUpdate(chart, _args, options) {
12621    const title = chart.titleBlock;
12622    layouts.configure(chart, title, options);
12623    title.options = options;
12624  },
12625  defaults: {
12626    align: 'center',
12627    display: false,
12628    font: {
12629      weight: 'bold',
12630    },
12631    fullSize: true,
12632    padding: 10,
12633    position: 'top',
12634    text: '',
12635    weight: 2000
12636  },
12637  defaultRoutes: {
12638    color: 'color'
12639  },
12640  descriptors: {
12641    _scriptable: true,
12642    _indexable: false,
12643  },
12644};
12645
12646const map = new WeakMap();
12647var plugin_subtitle = {
12648  id: 'subtitle',
12649  start(chart, _args, options) {
12650    const title = new Title({
12651      ctx: chart.ctx,
12652      options,
12653      chart
12654    });
12655    layouts.configure(chart, title, options);
12656    layouts.addBox(chart, title);
12657    map.set(chart, title);
12658  },
12659  stop(chart) {
12660    layouts.removeBox(chart, map.get(chart));
12661    map.delete(chart);
12662  },
12663  beforeUpdate(chart, _args, options) {
12664    const title = map.get(chart);
12665    layouts.configure(chart, title, options);
12666    title.options = options;
12667  },
12668  defaults: {
12669    align: 'center',
12670    display: false,
12671    font: {
12672      weight: 'normal',
12673    },
12674    fullSize: true,
12675    padding: 0,
12676    position: 'top',
12677    text: '',
12678    weight: 1500
12679  },
12680  defaultRoutes: {
12681    color: 'color'
12682  },
12683  descriptors: {
12684    _scriptable: true,
12685    _indexable: false,
12686  },
12687};
12688
12689const positioners = {
12690  average(items) {
12691    if (!items.length) {
12692      return false;
12693    }
12694    let i, len;
12695    let x = 0;
12696    let y = 0;
12697    let count = 0;
12698    for (i = 0, len = items.length; i < len; ++i) {
12699      const el = items[i].element;
12700      if (el && el.hasValue()) {
12701        const pos = el.tooltipPosition();
12702        x += pos.x;
12703        y += pos.y;
12704        ++count;
12705      }
12706    }
12707    return {
12708      x: x / count,
12709      y: y / count
12710    };
12711  },
12712  nearest(items, eventPosition) {
12713    if (!items.length) {
12714      return false;
12715    }
12716    let x = eventPosition.x;
12717    let y = eventPosition.y;
12718    let minDistance = Number.POSITIVE_INFINITY;
12719    let i, len, nearestElement;
12720    for (i = 0, len = items.length; i < len; ++i) {
12721      const el = items[i].element;
12722      if (el && el.hasValue()) {
12723        const center = el.getCenterPoint();
12724        const d = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.aG)(eventPosition, center);
12725        if (d < minDistance) {
12726          minDistance = d;
12727          nearestElement = el;
12728        }
12729      }
12730    }
12731    if (nearestElement) {
12732      const tp = nearestElement.tooltipPosition();
12733      x = tp.x;
12734      y = tp.y;
12735    }
12736    return {
12737      x,
12738      y
12739    };
12740  }
12741};
12742function pushOrConcat(base, toPush) {
12743  if (toPush) {
12744    if ((0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.b)(toPush)) {
12745      Array.prototype.push.apply(base, toPush);
12746    } else {
12747      base.push(toPush);
12748    }
12749  }
12750  return base;
12751}
12752function splitNewlines(str) {
12753  if ((typeof str === 'string' || str instanceof String) && str.indexOf('\n') > -1) {
12754    return str.split('\n');
12755  }
12756  return str;
12757}
12758function createTooltipItem(chart, item) {
12759  const {element, datasetIndex, index} = item;
12760  const controller = chart.getDatasetMeta(datasetIndex).controller;
12761  const {label, value} = controller.getLabelAndValue(index);
12762  return {
12763    chart,
12764    label,
12765    parsed: controller.getParsed(index),
12766    raw: chart.data.datasets[datasetIndex].data[index],
12767    formattedValue: value,
12768    dataset: controller.getDataset(),
12769    dataIndex: index,
12770    datasetIndex,
12771    element
12772  };
12773}
12774function getTooltipSize(tooltip, options) {
12775  const ctx = tooltip.chart.ctx;
12776  const {body, footer, title} = tooltip;
12777  const {boxWidth, boxHeight} = options;
12778  const bodyFont = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.O)(options.bodyFont);
12779  const titleFont = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.O)(options.titleFont);
12780  const footerFont = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.O)(options.footerFont);
12781  const titleLineCount = title.length;
12782  const footerLineCount = footer.length;
12783  const bodyLineItemCount = body.length;
12784  const padding = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.K)(options.padding);
12785  let height = padding.height;
12786  let width = 0;
12787  let combinedBodyLength = body.reduce((count, bodyItem) => count + bodyItem.before.length + bodyItem.lines.length + bodyItem.after.length, 0);
12788  combinedBodyLength += tooltip.beforeBody.length + tooltip.afterBody.length;
12789  if (titleLineCount) {
12790    height += titleLineCount * titleFont.lineHeight
12791			+ (titleLineCount - 1) * options.titleSpacing
12792			+ options.titleMarginBottom;
12793  }
12794  if (combinedBodyLength) {
12795    const bodyLineHeight = options.displayColors ? Math.max(boxHeight, bodyFont.lineHeight) : bodyFont.lineHeight;
12796    height += bodyLineItemCount * bodyLineHeight
12797			+ (combinedBodyLength - bodyLineItemCount) * bodyFont.lineHeight
12798			+ (combinedBodyLength - 1) * options.bodySpacing;
12799  }
12800  if (footerLineCount) {
12801    height += options.footerMarginTop
12802			+ footerLineCount * footerFont.lineHeight
12803			+ (footerLineCount - 1) * options.footerSpacing;
12804  }
12805  let widthPadding = 0;
12806  const maxLineWidth = function(line) {
12807    width = Math.max(width, ctx.measureText(line).width + widthPadding);
12808  };
12809  ctx.save();
12810  ctx.font = titleFont.string;
12811  (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.Q)(tooltip.title, maxLineWidth);
12812  ctx.font = bodyFont.string;
12813  (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.Q)(tooltip.beforeBody.concat(tooltip.afterBody), maxLineWidth);
12814  widthPadding = options.displayColors ? (boxWidth + 2 + options.boxPadding) : 0;
12815  (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.Q)(body, (bodyItem) => {
12816    (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.Q)(bodyItem.before, maxLineWidth);
12817    (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.Q)(bodyItem.lines, maxLineWidth);
12818    (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.Q)(bodyItem.after, maxLineWidth);
12819  });
12820  widthPadding = 0;
12821  ctx.font = footerFont.string;
12822  (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.Q)(tooltip.footer, maxLineWidth);
12823  ctx.restore();
12824  width += padding.width;
12825  return {width, height};
12826}
12827function determineYAlign(chart, size) {
12828  const {y, height} = size;
12829  if (y < height / 2) {
12830    return 'top';
12831  } else if (y > (chart.height - height / 2)) {
12832    return 'bottom';
12833  }
12834  return 'center';
12835}
12836function doesNotFitWithAlign(xAlign, chart, options, size) {
12837  const {x, width} = size;
12838  const caret = options.caretSize + options.caretPadding;
12839  if (xAlign === 'left' && x + width + caret > chart.width) {
12840    return true;
12841  }
12842  if (xAlign === 'right' && x - width - caret < 0) {
12843    return true;
12844  }
12845}
12846function determineXAlign(chart, options, size, yAlign) {
12847  const {x, width} = size;
12848  const {width: chartWidth, chartArea: {left, right}} = chart;
12849  let xAlign = 'center';
12850  if (yAlign === 'center') {
12851    xAlign = x <= (left + right) / 2 ? 'left' : 'right';
12852  } else if (x <= width / 2) {
12853    xAlign = 'left';
12854  } else if (x >= chartWidth - width / 2) {
12855    xAlign = 'right';
12856  }
12857  if (doesNotFitWithAlign(xAlign, chart, options, size)) {
12858    xAlign = 'center';
12859  }
12860  return xAlign;
12861}
12862function determineAlignment(chart, options, size) {
12863  const yAlign = size.yAlign || options.yAlign || determineYAlign(chart, size);
12864  return {
12865    xAlign: size.xAlign || options.xAlign || determineXAlign(chart, options, size, yAlign),
12866    yAlign
12867  };
12868}
12869function alignX(size, xAlign) {
12870  let {x, width} = size;
12871  if (xAlign === 'right') {
12872    x -= width;
12873  } else if (xAlign === 'center') {
12874    x -= (width / 2);
12875  }
12876  return x;
12877}
12878function alignY(size, yAlign, paddingAndSize) {
12879  let {y, height} = size;
12880  if (yAlign === 'top') {
12881    y += paddingAndSize;
12882  } else if (yAlign === 'bottom') {
12883    y -= height + paddingAndSize;
12884  } else {
12885    y -= (height / 2);
12886  }
12887  return y;
12888}
12889function getBackgroundPoint(options, size, alignment, chart) {
12890  const {caretSize, caretPadding, cornerRadius} = options;
12891  const {xAlign, yAlign} = alignment;
12892  const paddingAndSize = caretSize + caretPadding;
12893  const {topLeft, topRight, bottomLeft, bottomRight} = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.ax)(cornerRadius);
12894  let x = alignX(size, xAlign);
12895  const y = alignY(size, yAlign, paddingAndSize);
12896  if (yAlign === 'center') {
12897    if (xAlign === 'left') {
12898      x += paddingAndSize;
12899    } else if (xAlign === 'right') {
12900      x -= paddingAndSize;
12901    }
12902  } else if (xAlign === 'left') {
12903    x -= Math.max(topLeft, bottomLeft) + caretSize;
12904  } else if (xAlign === 'right') {
12905    x += Math.max(topRight, bottomRight) + caretSize;
12906  }
12907  return {
12908    x: (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.E)(x, 0, chart.width - size.width),
12909    y: (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.E)(y, 0, chart.height - size.height)
12910  };
12911}
12912function getAlignedX(tooltip, align, options) {
12913  const padding = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.K)(options.padding);
12914  return align === 'center'
12915    ? tooltip.x + tooltip.width / 2
12916    : align === 'right'
12917      ? tooltip.x + tooltip.width - padding.right
12918      : tooltip.x + padding.left;
12919}
12920function getBeforeAfterBodyLines(callback) {
12921  return pushOrConcat([], splitNewlines(callback));
12922}
12923function createTooltipContext(parent, tooltip, tooltipItems) {
12924  return (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.h)(parent, {
12925    tooltip,
12926    tooltipItems,
12927    type: 'tooltip'
12928  });
12929}
12930function overrideCallbacks(callbacks, context) {
12931  const override = context && context.dataset && context.dataset.tooltip && context.dataset.tooltip.callbacks;
12932  return override ? callbacks.override(override) : callbacks;
12933}
12934class Tooltip extends Element {
12935  constructor(config) {
12936    super();
12937    this.opacity = 0;
12938    this._active = [];
12939    this._eventPosition = undefined;
12940    this._size = undefined;
12941    this._cachedAnimations = undefined;
12942    this._tooltipItems = [];
12943    this.$animations = undefined;
12944    this.$context = undefined;
12945    this.chart = config.chart || config._chart;
12946    this._chart = this.chart;
12947    this.options = config.options;
12948    this.dataPoints = undefined;
12949    this.title = undefined;
12950    this.beforeBody = undefined;
12951    this.body = undefined;
12952    this.afterBody = undefined;
12953    this.footer = undefined;
12954    this.xAlign = undefined;
12955    this.yAlign = undefined;
12956    this.x = undefined;
12957    this.y = undefined;
12958    this.height = undefined;
12959    this.width = undefined;
12960    this.caretX = undefined;
12961    this.caretY = undefined;
12962    this.labelColors = undefined;
12963    this.labelPointStyles = undefined;
12964    this.labelTextColors = undefined;
12965  }
12966  initialize(options) {
12967    this.options = options;
12968    this._cachedAnimations = undefined;
12969    this.$context = undefined;
12970  }
12971  _resolveAnimations() {
12972    const cached = this._cachedAnimations;
12973    if (cached) {
12974      return cached;
12975    }
12976    const chart = this.chart;
12977    const options = this.options.setContext(this.getContext());
12978    const opts = options.enabled && chart.options.animation && options.animations;
12979    const animations = new Animations(this.chart, opts);
12980    if (opts._cacheable) {
12981      this._cachedAnimations = Object.freeze(animations);
12982    }
12983    return animations;
12984  }
12985  getContext() {
12986    return this.$context ||
12987			(this.$context = createTooltipContext(this.chart.getContext(), this, this._tooltipItems));
12988  }
12989  getTitle(context, options) {
12990    const {callbacks} = options;
12991    const beforeTitle = callbacks.beforeTitle.apply(this, [context]);
12992    const title = callbacks.title.apply(this, [context]);
12993    const afterTitle = callbacks.afterTitle.apply(this, [context]);
12994    let lines = [];
12995    lines = pushOrConcat(lines, splitNewlines(beforeTitle));
12996    lines = pushOrConcat(lines, splitNewlines(title));
12997    lines = pushOrConcat(lines, splitNewlines(afterTitle));
12998    return lines;
12999  }
13000  getBeforeBody(tooltipItems, options) {
13001    return getBeforeAfterBodyLines(options.callbacks.beforeBody.apply(this, [tooltipItems]));
13002  }
13003  getBody(tooltipItems, options) {
13004    const {callbacks} = options;
13005    const bodyItems = [];
13006    (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.Q)(tooltipItems, (context) => {
13007      const bodyItem = {
13008        before: [],
13009        lines: [],
13010        after: []
13011      };
13012      const scoped = overrideCallbacks(callbacks, context);
13013      pushOrConcat(bodyItem.before, splitNewlines(scoped.beforeLabel.call(this, context)));
13014      pushOrConcat(bodyItem.lines, scoped.label.call(this, context));
13015      pushOrConcat(bodyItem.after, splitNewlines(scoped.afterLabel.call(this, context)));
13016      bodyItems.push(bodyItem);
13017    });
13018    return bodyItems;
13019  }
13020  getAfterBody(tooltipItems, options) {
13021    return getBeforeAfterBodyLines(options.callbacks.afterBody.apply(this, [tooltipItems]));
13022  }
13023  getFooter(tooltipItems, options) {
13024    const {callbacks} = options;
13025    const beforeFooter = callbacks.beforeFooter.apply(this, [tooltipItems]);
13026    const footer = callbacks.footer.apply(this, [tooltipItems]);
13027    const afterFooter = callbacks.afterFooter.apply(this, [tooltipItems]);
13028    let lines = [];
13029    lines = pushOrConcat(lines, splitNewlines(beforeFooter));
13030    lines = pushOrConcat(lines, splitNewlines(footer));
13031    lines = pushOrConcat(lines, splitNewlines(afterFooter));
13032    return lines;
13033  }
13034  _createItems(options) {
13035    const active = this._active;
13036    const data = this.chart.data;
13037    const labelColors = [];
13038    const labelPointStyles = [];
13039    const labelTextColors = [];
13040    let tooltipItems = [];
13041    let i, len;
13042    for (i = 0, len = active.length; i < len; ++i) {
13043      tooltipItems.push(createTooltipItem(this.chart, active[i]));
13044    }
13045    if (options.filter) {
13046      tooltipItems = tooltipItems.filter((element, index, array) => options.filter(element, index, array, data));
13047    }
13048    if (options.itemSort) {
13049      tooltipItems = tooltipItems.sort((a, b) => options.itemSort(a, b, data));
13050    }
13051    (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.Q)(tooltipItems, (context) => {
13052      const scoped = overrideCallbacks(options.callbacks, context);
13053      labelColors.push(scoped.labelColor.call(this, context));
13054      labelPointStyles.push(scoped.labelPointStyle.call(this, context));
13055      labelTextColors.push(scoped.labelTextColor.call(this, context));
13056    });
13057    this.labelColors = labelColors;
13058    this.labelPointStyles = labelPointStyles;
13059    this.labelTextColors = labelTextColors;
13060    this.dataPoints = tooltipItems;
13061    return tooltipItems;
13062  }
13063  update(changed, replay) {
13064    const options = this.options.setContext(this.getContext());
13065    const active = this._active;
13066    let properties;
13067    let tooltipItems = [];
13068    if (!active.length) {
13069      if (this.opacity !== 0) {
13070        properties = {
13071          opacity: 0
13072        };
13073      }
13074    } else {
13075      const position = positioners[options.position].call(this, active, this._eventPosition);
13076      tooltipItems = this._createItems(options);
13077      this.title = this.getTitle(tooltipItems, options);
13078      this.beforeBody = this.getBeforeBody(tooltipItems, options);
13079      this.body = this.getBody(tooltipItems, options);
13080      this.afterBody = this.getAfterBody(tooltipItems, options);
13081      this.footer = this.getFooter(tooltipItems, options);
13082      const size = this._size = getTooltipSize(this, options);
13083      const positionAndSize = Object.assign({}, position, size);
13084      const alignment = determineAlignment(this.chart, options, positionAndSize);
13085      const backgroundPoint = getBackgroundPoint(options, positionAndSize, alignment, this.chart);
13086      this.xAlign = alignment.xAlign;
13087      this.yAlign = alignment.yAlign;
13088      properties = {
13089        opacity: 1,
13090        x: backgroundPoint.x,
13091        y: backgroundPoint.y,
13092        width: size.width,
13093        height: size.height,
13094        caretX: position.x,
13095        caretY: position.y
13096      };
13097    }
13098    this._tooltipItems = tooltipItems;
13099    this.$context = undefined;
13100    if (properties) {
13101      this._resolveAnimations().update(this, properties);
13102    }
13103    if (changed && options.external) {
13104      options.external.call(this, {chart: this.chart, tooltip: this, replay});
13105    }
13106  }
13107  drawCaret(tooltipPoint, ctx, size, options) {
13108    const caretPosition = this.getCaretPosition(tooltipPoint, size, options);
13109    ctx.lineTo(caretPosition.x1, caretPosition.y1);
13110    ctx.lineTo(caretPosition.x2, caretPosition.y2);
13111    ctx.lineTo(caretPosition.x3, caretPosition.y3);
13112  }
13113  getCaretPosition(tooltipPoint, size, options) {
13114    const {xAlign, yAlign} = this;
13115    const {caretSize, cornerRadius} = options;
13116    const {topLeft, topRight, bottomLeft, bottomRight} = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.ax)(cornerRadius);
13117    const {x: ptX, y: ptY} = tooltipPoint;
13118    const {width, height} = size;
13119    let x1, x2, x3, y1, y2, y3;
13120    if (yAlign === 'center') {
13121      y2 = ptY + (height / 2);
13122      if (xAlign === 'left') {
13123        x1 = ptX;
13124        x2 = x1 - caretSize;
13125        y1 = y2 + caretSize;
13126        y3 = y2 - caretSize;
13127      } else {
13128        x1 = ptX + width;
13129        x2 = x1 + caretSize;
13130        y1 = y2 - caretSize;
13131        y3 = y2 + caretSize;
13132      }
13133      x3 = x1;
13134    } else {
13135      if (xAlign === 'left') {
13136        x2 = ptX + Math.max(topLeft, bottomLeft) + (caretSize);
13137      } else if (xAlign === 'right') {
13138        x2 = ptX + width - Math.max(topRight, bottomRight) - caretSize;
13139      } else {
13140        x2 = this.caretX;
13141      }
13142      if (yAlign === 'top') {
13143        y1 = ptY;
13144        y2 = y1 - caretSize;
13145        x1 = x2 - caretSize;
13146        x3 = x2 + caretSize;
13147      } else {
13148        y1 = ptY + height;
13149        y2 = y1 + caretSize;
13150        x1 = x2 + caretSize;
13151        x3 = x2 - caretSize;
13152      }
13153      y3 = y1;
13154    }
13155    return {x1, x2, x3, y1, y2, y3};
13156  }
13157  drawTitle(pt, ctx, options) {
13158    const title = this.title;
13159    const length = title.length;
13160    let titleFont, titleSpacing, i;
13161    if (length) {
13162      const rtlHelper = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.aA)(options.rtl, this.x, this.width);
13163      pt.x = getAlignedX(this, options.titleAlign, options);
13164      ctx.textAlign = rtlHelper.textAlign(options.titleAlign);
13165      ctx.textBaseline = 'middle';
13166      titleFont = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.O)(options.titleFont);
13167      titleSpacing = options.titleSpacing;
13168      ctx.fillStyle = options.titleColor;
13169      ctx.font = titleFont.string;
13170      for (i = 0; i < length; ++i) {
13171        ctx.fillText(title[i], rtlHelper.x(pt.x), pt.y + titleFont.lineHeight / 2);
13172        pt.y += titleFont.lineHeight + titleSpacing;
13173        if (i + 1 === length) {
13174          pt.y += options.titleMarginBottom - titleSpacing;
13175        }
13176      }
13177    }
13178  }
13179  _drawColorBox(ctx, pt, i, rtlHelper, options) {
13180    const labelColors = this.labelColors[i];
13181    const labelPointStyle = this.labelPointStyles[i];
13182    const {boxHeight, boxWidth, boxPadding} = options;
13183    const bodyFont = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.O)(options.bodyFont);
13184    const colorX = getAlignedX(this, 'left', options);
13185    const rtlColorX = rtlHelper.x(colorX);
13186    const yOffSet = boxHeight < bodyFont.lineHeight ? (bodyFont.lineHeight - boxHeight) / 2 : 0;
13187    const colorY = pt.y + yOffSet;
13188    if (options.usePointStyle) {
13189      const drawOptions = {
13190        radius: Math.min(boxWidth, boxHeight) / 2,
13191        pointStyle: labelPointStyle.pointStyle,
13192        rotation: labelPointStyle.rotation,
13193        borderWidth: 1
13194      };
13195      const centerX = rtlHelper.leftForLtr(rtlColorX, boxWidth) + boxWidth / 2;
13196      const centerY = colorY + boxHeight / 2;
13197      ctx.strokeStyle = options.multiKeyBackground;
13198      ctx.fillStyle = options.multiKeyBackground;
13199      (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.au)(ctx, drawOptions, centerX, centerY);
13200      ctx.strokeStyle = labelColors.borderColor;
13201      ctx.fillStyle = labelColors.backgroundColor;
13202      (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.au)(ctx, drawOptions, centerX, centerY);
13203    } else {
13204      ctx.lineWidth = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.i)(labelColors.borderWidth) ? Math.max(...Object.values(labelColors.borderWidth)) : (labelColors.borderWidth || 1);
13205      ctx.strokeStyle = labelColors.borderColor;
13206      ctx.setLineDash(labelColors.borderDash || []);
13207      ctx.lineDashOffset = labelColors.borderDashOffset || 0;
13208      const outerX = rtlHelper.leftForLtr(rtlColorX, boxWidth - boxPadding);
13209      const innerX = rtlHelper.leftForLtr(rtlHelper.xPlus(rtlColorX, 1), boxWidth - boxPadding - 2);
13210      const borderRadius = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.ax)(labelColors.borderRadius);
13211      if (Object.values(borderRadius).some(v => v !== 0)) {
13212        ctx.beginPath();
13213        ctx.fillStyle = options.multiKeyBackground;
13214        (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.av)(ctx, {
13215          x: outerX,
13216          y: colorY,
13217          w: boxWidth,
13218          h: boxHeight,
13219          radius: borderRadius,
13220        });
13221        ctx.fill();
13222        ctx.stroke();
13223        ctx.fillStyle = labelColors.backgroundColor;
13224        ctx.beginPath();
13225        (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.av)(ctx, {
13226          x: innerX,
13227          y: colorY + 1,
13228          w: boxWidth - 2,
13229          h: boxHeight - 2,
13230          radius: borderRadius,
13231        });
13232        ctx.fill();
13233      } else {
13234        ctx.fillStyle = options.multiKeyBackground;
13235        ctx.fillRect(outerX, colorY, boxWidth, boxHeight);
13236        ctx.strokeRect(outerX, colorY, boxWidth, boxHeight);
13237        ctx.fillStyle = labelColors.backgroundColor;
13238        ctx.fillRect(innerX, colorY + 1, boxWidth - 2, boxHeight - 2);
13239      }
13240    }
13241    ctx.fillStyle = this.labelTextColors[i];
13242  }
13243  drawBody(pt, ctx, options) {
13244    const {body} = this;
13245    const {bodySpacing, bodyAlign, displayColors, boxHeight, boxWidth, boxPadding} = options;
13246    const bodyFont = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.O)(options.bodyFont);
13247    let bodyLineHeight = bodyFont.lineHeight;
13248    let xLinePadding = 0;
13249    const rtlHelper = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.aA)(options.rtl, this.x, this.width);
13250    const fillLineOfText = function(line) {
13251      ctx.fillText(line, rtlHelper.x(pt.x + xLinePadding), pt.y + bodyLineHeight / 2);
13252      pt.y += bodyLineHeight + bodySpacing;
13253    };
13254    const bodyAlignForCalculation = rtlHelper.textAlign(bodyAlign);
13255    let bodyItem, textColor, lines, i, j, ilen, jlen;
13256    ctx.textAlign = bodyAlign;
13257    ctx.textBaseline = 'middle';
13258    ctx.font = bodyFont.string;
13259    pt.x = getAlignedX(this, bodyAlignForCalculation, options);
13260    ctx.fillStyle = options.bodyColor;
13261    (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.Q)(this.beforeBody, fillLineOfText);
13262    xLinePadding = displayColors && bodyAlignForCalculation !== 'right'
13263      ? bodyAlign === 'center' ? (boxWidth / 2 + boxPadding) : (boxWidth + 2 + boxPadding)
13264      : 0;
13265    for (i = 0, ilen = body.length; i < ilen; ++i) {
13266      bodyItem = body[i];
13267      textColor = this.labelTextColors[i];
13268      ctx.fillStyle = textColor;
13269      (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.Q)(bodyItem.before, fillLineOfText);
13270      lines = bodyItem.lines;
13271      if (displayColors && lines.length) {
13272        this._drawColorBox(ctx, pt, i, rtlHelper, options);
13273        bodyLineHeight = Math.max(bodyFont.lineHeight, boxHeight);
13274      }
13275      for (j = 0, jlen = lines.length; j < jlen; ++j) {
13276        fillLineOfText(lines[j]);
13277        bodyLineHeight = bodyFont.lineHeight;
13278      }
13279      (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.Q)(bodyItem.after, fillLineOfText);
13280    }
13281    xLinePadding = 0;
13282    bodyLineHeight = bodyFont.lineHeight;
13283    (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.Q)(this.afterBody, fillLineOfText);
13284    pt.y -= bodySpacing;
13285  }
13286  drawFooter(pt, ctx, options) {
13287    const footer = this.footer;
13288    const length = footer.length;
13289    let footerFont, i;
13290    if (length) {
13291      const rtlHelper = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.aA)(options.rtl, this.x, this.width);
13292      pt.x = getAlignedX(this, options.footerAlign, options);
13293      pt.y += options.footerMarginTop;
13294      ctx.textAlign = rtlHelper.textAlign(options.footerAlign);
13295      ctx.textBaseline = 'middle';
13296      footerFont = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.O)(options.footerFont);
13297      ctx.fillStyle = options.footerColor;
13298      ctx.font = footerFont.string;
13299      for (i = 0; i < length; ++i) {
13300        ctx.fillText(footer[i], rtlHelper.x(pt.x), pt.y + footerFont.lineHeight / 2);
13301        pt.y += footerFont.lineHeight + options.footerSpacing;
13302      }
13303    }
13304  }
13305  drawBackground(pt, ctx, tooltipSize, options) {
13306    const {xAlign, yAlign} = this;
13307    const {x, y} = pt;
13308    const {width, height} = tooltipSize;
13309    const {topLeft, topRight, bottomLeft, bottomRight} = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.ax)(options.cornerRadius);
13310    ctx.fillStyle = options.backgroundColor;
13311    ctx.strokeStyle = options.borderColor;
13312    ctx.lineWidth = options.borderWidth;
13313    ctx.beginPath();
13314    ctx.moveTo(x + topLeft, y);
13315    if (yAlign === 'top') {
13316      this.drawCaret(pt, ctx, tooltipSize, options);
13317    }
13318    ctx.lineTo(x + width - topRight, y);
13319    ctx.quadraticCurveTo(x + width, y, x + width, y + topRight);
13320    if (yAlign === 'center' && xAlign === 'right') {
13321      this.drawCaret(pt, ctx, tooltipSize, options);
13322    }
13323    ctx.lineTo(x + width, y + height - bottomRight);
13324    ctx.quadraticCurveTo(x + width, y + height, x + width - bottomRight, y + height);
13325    if (yAlign === 'bottom') {
13326      this.drawCaret(pt, ctx, tooltipSize, options);
13327    }
13328    ctx.lineTo(x + bottomLeft, y + height);
13329    ctx.quadraticCurveTo(x, y + height, x, y + height - bottomLeft);
13330    if (yAlign === 'center' && xAlign === 'left') {
13331      this.drawCaret(pt, ctx, tooltipSize, options);
13332    }
13333    ctx.lineTo(x, y + topLeft);
13334    ctx.quadraticCurveTo(x, y, x + topLeft, y);
13335    ctx.closePath();
13336    ctx.fill();
13337    if (options.borderWidth > 0) {
13338      ctx.stroke();
13339    }
13340  }
13341  _updateAnimationTarget(options) {
13342    const chart = this.chart;
13343    const anims = this.$animations;
13344    const animX = anims && anims.x;
13345    const animY = anims && anims.y;
13346    if (animX || animY) {
13347      const position = positioners[options.position].call(this, this._active, this._eventPosition);
13348      if (!position) {
13349        return;
13350      }
13351      const size = this._size = getTooltipSize(this, options);
13352      const positionAndSize = Object.assign({}, position, this._size);
13353      const alignment = determineAlignment(chart, options, positionAndSize);
13354      const point = getBackgroundPoint(options, positionAndSize, alignment, chart);
13355      if (animX._to !== point.x || animY._to !== point.y) {
13356        this.xAlign = alignment.xAlign;
13357        this.yAlign = alignment.yAlign;
13358        this.width = size.width;
13359        this.height = size.height;
13360        this.caretX = position.x;
13361        this.caretY = position.y;
13362        this._resolveAnimations().update(this, point);
13363      }
13364    }
13365  }
13366  _willRender() {
13367    return !!this.opacity;
13368  }
13369  draw(ctx) {
13370    const options = this.options.setContext(this.getContext());
13371    let opacity = this.opacity;
13372    if (!opacity) {
13373      return;
13374    }
13375    this._updateAnimationTarget(options);
13376    const tooltipSize = {
13377      width: this.width,
13378      height: this.height
13379    };
13380    const pt = {
13381      x: this.x,
13382      y: this.y
13383    };
13384    opacity = Math.abs(opacity) < 1e-3 ? 0 : opacity;
13385    const padding = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.K)(options.padding);
13386    const hasTooltipContent = this.title.length || this.beforeBody.length || this.body.length || this.afterBody.length || this.footer.length;
13387    if (options.enabled && hasTooltipContent) {
13388      ctx.save();
13389      ctx.globalAlpha = opacity;
13390      this.drawBackground(pt, ctx, tooltipSize, options);
13391      (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.aB)(ctx, options.textDirection);
13392      pt.y += padding.top;
13393      this.drawTitle(pt, ctx, options);
13394      this.drawBody(pt, ctx, options);
13395      this.drawFooter(pt, ctx, options);
13396      (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.aD)(ctx, options.textDirection);
13397      ctx.restore();
13398    }
13399  }
13400  getActiveElements() {
13401    return this._active || [];
13402  }
13403  setActiveElements(activeElements, eventPosition) {
13404    const lastActive = this._active;
13405    const active = activeElements.map(({datasetIndex, index}) => {
13406      const meta = this.chart.getDatasetMeta(datasetIndex);
13407      if (!meta) {
13408        throw new Error('Cannot find a dataset at index ' + datasetIndex);
13409      }
13410      return {
13411        datasetIndex,
13412        element: meta.data[index],
13413        index,
13414      };
13415    });
13416    const changed = !(0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.ai)(lastActive, active);
13417    const positionChanged = this._positionChanged(active, eventPosition);
13418    if (changed || positionChanged) {
13419      this._active = active;
13420      this._eventPosition = eventPosition;
13421      this._ignoreReplayEvents = true;
13422      this.update(true);
13423    }
13424  }
13425  handleEvent(e, replay, inChartArea = true) {
13426    if (replay && this._ignoreReplayEvents) {
13427      return false;
13428    }
13429    this._ignoreReplayEvents = false;
13430    const options = this.options;
13431    const lastActive = this._active || [];
13432    const active = this._getActiveElements(e, lastActive, replay, inChartArea);
13433    const positionChanged = this._positionChanged(active, e);
13434    const changed = replay || !(0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.ai)(active, lastActive) || positionChanged;
13435    if (changed) {
13436      this._active = active;
13437      if (options.enabled || options.external) {
13438        this._eventPosition = {
13439          x: e.x,
13440          y: e.y
13441        };
13442        this.update(true, replay);
13443      }
13444    }
13445    return changed;
13446  }
13447  _getActiveElements(e, lastActive, replay, inChartArea) {
13448    const options = this.options;
13449    if (e.type === 'mouseout') {
13450      return [];
13451    }
13452    if (!inChartArea) {
13453      return lastActive;
13454    }
13455    const active = this.chart.getElementsAtEventForMode(e, options.mode, options, replay);
13456    if (options.reverse) {
13457      active.reverse();
13458    }
13459    return active;
13460  }
13461  _positionChanged(active, e) {
13462    const {caretX, caretY, options} = this;
13463    const position = positioners[options.position].call(this, active, e);
13464    return position !== false && (caretX !== position.x || caretY !== position.y);
13465  }
13466}
13467Tooltip.positioners = positioners;
13468var plugin_tooltip = {
13469  id: 'tooltip',
13470  _element: Tooltip,
13471  positioners,
13472  afterInit(chart, _args, options) {
13473    if (options) {
13474      chart.tooltip = new Tooltip({chart, options});
13475    }
13476  },
13477  beforeUpdate(chart, _args, options) {
13478    if (chart.tooltip) {
13479      chart.tooltip.initialize(options);
13480    }
13481  },
13482  reset(chart, _args, options) {
13483    if (chart.tooltip) {
13484      chart.tooltip.initialize(options);
13485    }
13486  },
13487  afterDraw(chart) {
13488    const tooltip = chart.tooltip;
13489    if (tooltip && tooltip._willRender()) {
13490      const args = {
13491        tooltip
13492      };
13493      if (chart.notifyPlugins('beforeTooltipDraw', args) === false) {
13494        return;
13495      }
13496      tooltip.draw(chart.ctx);
13497      chart.notifyPlugins('afterTooltipDraw', args);
13498    }
13499  },
13500  afterEvent(chart, args) {
13501    if (chart.tooltip) {
13502      const useFinalPosition = args.replay;
13503      if (chart.tooltip.handleEvent(args.event, useFinalPosition, args.inChartArea)) {
13504        args.changed = true;
13505      }
13506    }
13507  },
13508  defaults: {
13509    enabled: true,
13510    external: null,
13511    position: 'average',
13512    backgroundColor: 'rgba(0,0,0,0.8)',
13513    titleColor: '#fff',
13514    titleFont: {
13515      weight: 'bold',
13516    },
13517    titleSpacing: 2,
13518    titleMarginBottom: 6,
13519    titleAlign: 'left',
13520    bodyColor: '#fff',
13521    bodySpacing: 2,
13522    bodyFont: {
13523    },
13524    bodyAlign: 'left',
13525    footerColor: '#fff',
13526    footerSpacing: 2,
13527    footerMarginTop: 6,
13528    footerFont: {
13529      weight: 'bold',
13530    },
13531    footerAlign: 'left',
13532    padding: 6,
13533    caretPadding: 2,
13534    caretSize: 5,
13535    cornerRadius: 6,
13536    boxHeight: (ctx, opts) => opts.bodyFont.size,
13537    boxWidth: (ctx, opts) => opts.bodyFont.size,
13538    multiKeyBackground: '#fff',
13539    displayColors: true,
13540    boxPadding: 0,
13541    borderColor: 'rgba(0,0,0,0)',
13542    borderWidth: 0,
13543    animation: {
13544      duration: 400,
13545      easing: 'easeOutQuart',
13546    },
13547    animations: {
13548      numbers: {
13549        type: 'number',
13550        properties: ['x', 'y', 'width', 'height', 'caretX', 'caretY'],
13551      },
13552      opacity: {
13553        easing: 'linear',
13554        duration: 200
13555      }
13556    },
13557    callbacks: {
13558      beforeTitle: _chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.aF,
13559      title(tooltipItems) {
13560        if (tooltipItems.length > 0) {
13561          const item = tooltipItems[0];
13562          const labels = item.chart.data.labels;
13563          const labelCount = labels ? labels.length : 0;
13564          if (this && this.options && this.options.mode === 'dataset') {
13565            return item.dataset.label || '';
13566          } else if (item.label) {
13567            return item.label;
13568          } else if (labelCount > 0 && item.dataIndex < labelCount) {
13569            return labels[item.dataIndex];
13570          }
13571        }
13572        return '';
13573      },
13574      afterTitle: _chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.aF,
13575      beforeBody: _chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.aF,
13576      beforeLabel: _chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.aF,
13577      label(tooltipItem) {
13578        if (this && this.options && this.options.mode === 'dataset') {
13579          return tooltipItem.label + ': ' + tooltipItem.formattedValue || tooltipItem.formattedValue;
13580        }
13581        let label = tooltipItem.dataset.label || '';
13582        if (label) {
13583          label += ': ';
13584        }
13585        const value = tooltipItem.formattedValue;
13586        if (!(0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.k)(value)) {
13587          label += value;
13588        }
13589        return label;
13590      },
13591      labelColor(tooltipItem) {
13592        const meta = tooltipItem.chart.getDatasetMeta(tooltipItem.datasetIndex);
13593        const options = meta.controller.getStyle(tooltipItem.dataIndex);
13594        return {
13595          borderColor: options.borderColor,
13596          backgroundColor: options.backgroundColor,
13597          borderWidth: options.borderWidth,
13598          borderDash: options.borderDash,
13599          borderDashOffset: options.borderDashOffset,
13600          borderRadius: 0,
13601        };
13602      },
13603      labelTextColor() {
13604        return this.options.bodyColor;
13605      },
13606      labelPointStyle(tooltipItem) {
13607        const meta = tooltipItem.chart.getDatasetMeta(tooltipItem.datasetIndex);
13608        const options = meta.controller.getStyle(tooltipItem.dataIndex);
13609        return {
13610          pointStyle: options.pointStyle,
13611          rotation: options.rotation,
13612        };
13613      },
13614      afterLabel: _chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.aF,
13615      afterBody: _chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.aF,
13616      beforeFooter: _chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.aF,
13617      footer: _chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.aF,
13618      afterFooter: _chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.aF
13619    }
13620  },
13621  defaultRoutes: {
13622    bodyFont: 'font',
13623    footerFont: 'font',
13624    titleFont: 'font'
13625  },
13626  descriptors: {
13627    _scriptable: (name) => name !== 'filter' && name !== 'itemSort' && name !== 'external',
13628    _indexable: false,
13629    callbacks: {
13630      _scriptable: false,
13631      _indexable: false,
13632    },
13633    animation: {
13634      _fallback: false
13635    },
13636    animations: {
13637      _fallback: 'animation'
13638    }
13639  },
13640  additionalOptionScopes: ['interaction']
13641};
13642
13643var plugins = /*#__PURE__*/Object.freeze({
13644__proto__: null,
13645Decimation: plugin_decimation,
13646Filler: index,
13647Legend: plugin_legend,
13648SubTitle: plugin_subtitle,
13649Title: plugin_title,
13650Tooltip: plugin_tooltip
13651});
13652
13653const addIfString = (labels, raw, index, addedLabels) => {
13654  if (typeof raw === 'string') {
13655    index = labels.push(raw) - 1;
13656    addedLabels.unshift({index, label: raw});
13657  } else if (isNaN(raw)) {
13658    index = null;
13659  }
13660  return index;
13661};
13662function findOrAddLabel(labels, raw, index, addedLabels) {
13663  const first = labels.indexOf(raw);
13664  if (first === -1) {
13665    return addIfString(labels, raw, index, addedLabels);
13666  }
13667  const last = labels.lastIndexOf(raw);
13668  return first !== last ? index : first;
13669}
13670const validIndex = (index, max) => index === null ? null : (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.E)(Math.round(index), 0, max);
13671class CategoryScale extends Scale {
13672  constructor(cfg) {
13673    super(cfg);
13674    this._startValue = undefined;
13675    this._valueRange = 0;
13676    this._addedLabels = [];
13677  }
13678  init(scaleOptions) {
13679    const added = this._addedLabels;
13680    if (added.length) {
13681      const labels = this.getLabels();
13682      for (const {index, label} of added) {
13683        if (labels[index] === label) {
13684          labels.splice(index, 1);
13685        }
13686      }
13687      this._addedLabels = [];
13688    }
13689    super.init(scaleOptions);
13690  }
13691  parse(raw, index) {
13692    if ((0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.k)(raw)) {
13693      return null;
13694    }
13695    const labels = this.getLabels();
13696    index = isFinite(index) && labels[index] === raw ? index
13697      : findOrAddLabel(labels, raw, (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.v)(index, raw), this._addedLabels);
13698    return validIndex(index, labels.length - 1);
13699  }
13700  determineDataLimits() {
13701    const {minDefined, maxDefined} = this.getUserBounds();
13702    let {min, max} = this.getMinMax(true);
13703    if (this.options.bounds === 'ticks') {
13704      if (!minDefined) {
13705        min = 0;
13706      }
13707      if (!maxDefined) {
13708        max = this.getLabels().length - 1;
13709      }
13710    }
13711    this.min = min;
13712    this.max = max;
13713  }
13714  buildTicks() {
13715    const min = this.min;
13716    const max = this.max;
13717    const offset = this.options.offset;
13718    const ticks = [];
13719    let labels = this.getLabels();
13720    labels = (min === 0 && max === labels.length - 1) ? labels : labels.slice(min, max + 1);
13721    this._valueRange = Math.max(labels.length - (offset ? 0 : 1), 1);
13722    this._startValue = this.min - (offset ? 0.5 : 0);
13723    for (let value = min; value <= max; value++) {
13724      ticks.push({value});
13725    }
13726    return ticks;
13727  }
13728  getLabelForValue(value) {
13729    const labels = this.getLabels();
13730    if (value >= 0 && value < labels.length) {
13731      return labels[value];
13732    }
13733    return value;
13734  }
13735  configure() {
13736    super.configure();
13737    if (!this.isHorizontal()) {
13738      this._reversePixels = !this._reversePixels;
13739    }
13740  }
13741  getPixelForValue(value) {
13742    if (typeof value !== 'number') {
13743      value = this.parse(value);
13744    }
13745    return value === null ? NaN : this.getPixelForDecimal((value - this._startValue) / this._valueRange);
13746  }
13747  getPixelForTick(index) {
13748    const ticks = this.ticks;
13749    if (index < 0 || index > ticks.length - 1) {
13750      return null;
13751    }
13752    return this.getPixelForValue(ticks[index].value);
13753  }
13754  getValueForPixel(pixel) {
13755    return Math.round(this._startValue + this.getDecimalForPixel(pixel) * this._valueRange);
13756  }
13757  getBasePixel() {
13758    return this.bottom;
13759  }
13760}
13761CategoryScale.id = 'category';
13762CategoryScale.defaults = {
13763  ticks: {
13764    callback: CategoryScale.prototype.getLabelForValue
13765  }
13766};
13767
13768function generateTicks$1(generationOptions, dataRange) {
13769  const ticks = [];
13770  const MIN_SPACING = 1e-14;
13771  const {bounds, step, min, max, precision, count, maxTicks, maxDigits, includeBounds} = generationOptions;
13772  const unit = step || 1;
13773  const maxSpaces = maxTicks - 1;
13774  const {min: rmin, max: rmax} = dataRange;
13775  const minDefined = !(0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.k)(min);
13776  const maxDefined = !(0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.k)(max);
13777  const countDefined = !(0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.k)(count);
13778  const minSpacing = (rmax - rmin) / (maxDigits + 1);
13779  let spacing = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.aI)((rmax - rmin) / maxSpaces / unit) * unit;
13780  let factor, niceMin, niceMax, numSpaces;
13781  if (spacing < MIN_SPACING && !minDefined && !maxDefined) {
13782    return [{value: rmin}, {value: rmax}];
13783  }
13784  numSpaces = Math.ceil(rmax / spacing) - Math.floor(rmin / spacing);
13785  if (numSpaces > maxSpaces) {
13786    spacing = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.aI)(numSpaces * spacing / maxSpaces / unit) * unit;
13787  }
13788  if (!(0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.k)(precision)) {
13789    factor = Math.pow(10, precision);
13790    spacing = Math.ceil(spacing * factor) / factor;
13791  }
13792  if (bounds === 'ticks') {
13793    niceMin = Math.floor(rmin / spacing) * spacing;
13794    niceMax = Math.ceil(rmax / spacing) * spacing;
13795  } else {
13796    niceMin = rmin;
13797    niceMax = rmax;
13798  }
13799  if (minDefined && maxDefined && step && (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.aJ)((max - min) / step, spacing / 1000)) {
13800    numSpaces = Math.round(Math.min((max - min) / spacing, maxTicks));
13801    spacing = (max - min) / numSpaces;
13802    niceMin = min;
13803    niceMax = max;
13804  } else if (countDefined) {
13805    niceMin = minDefined ? min : niceMin;
13806    niceMax = maxDefined ? max : niceMax;
13807    numSpaces = count - 1;
13808    spacing = (niceMax - niceMin) / numSpaces;
13809  } else {
13810    numSpaces = (niceMax - niceMin) / spacing;
13811    if ((0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.aK)(numSpaces, Math.round(numSpaces), spacing / 1000)) {
13812      numSpaces = Math.round(numSpaces);
13813    } else {
13814      numSpaces = Math.ceil(numSpaces);
13815    }
13816  }
13817  const decimalPlaces = Math.max(
13818    (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.aL)(spacing),
13819    (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.aL)(niceMin)
13820  );
13821  factor = Math.pow(10, (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.k)(precision) ? decimalPlaces : precision);
13822  niceMin = Math.round(niceMin * factor) / factor;
13823  niceMax = Math.round(niceMax * factor) / factor;
13824  let j = 0;
13825  if (minDefined) {
13826    if (includeBounds && niceMin !== min) {
13827      ticks.push({value: min});
13828      if (niceMin < min) {
13829        j++;
13830      }
13831      if ((0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.aK)(Math.round((niceMin + j * spacing) * factor) / factor, min, relativeLabelSize(min, minSpacing, generationOptions))) {
13832        j++;
13833      }
13834    } else if (niceMin < min) {
13835      j++;
13836    }
13837  }
13838  for (; j < numSpaces; ++j) {
13839    ticks.push({value: Math.round((niceMin + j * spacing) * factor) / factor});
13840  }
13841  if (maxDefined && includeBounds && niceMax !== max) {
13842    if (ticks.length && (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.aK)(ticks[ticks.length - 1].value, max, relativeLabelSize(max, minSpacing, generationOptions))) {
13843      ticks[ticks.length - 1].value = max;
13844    } else {
13845      ticks.push({value: max});
13846    }
13847  } else if (!maxDefined || niceMax === max) {
13848    ticks.push({value: niceMax});
13849  }
13850  return ticks;
13851}
13852function relativeLabelSize(value, minSpacing, {horizontal, minRotation}) {
13853  const rad = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.t)(minRotation);
13854  const ratio = (horizontal ? Math.sin(rad) : Math.cos(rad)) || 0.001;
13855  const length = 0.75 * minSpacing * ('' + value).length;
13856  return Math.min(minSpacing / ratio, length);
13857}
13858class LinearScaleBase extends Scale {
13859  constructor(cfg) {
13860    super(cfg);
13861    this.start = undefined;
13862    this.end = undefined;
13863    this._startValue = undefined;
13864    this._endValue = undefined;
13865    this._valueRange = 0;
13866  }
13867  parse(raw, index) {
13868    if ((0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.k)(raw)) {
13869      return null;
13870    }
13871    if ((typeof raw === 'number' || raw instanceof Number) && !isFinite(+raw)) {
13872      return null;
13873    }
13874    return +raw;
13875  }
13876  handleTickRangeOptions() {
13877    const {beginAtZero} = this.options;
13878    const {minDefined, maxDefined} = this.getUserBounds();
13879    let {min, max} = this;
13880    const setMin = v => (min = minDefined ? min : v);
13881    const setMax = v => (max = maxDefined ? max : v);
13882    if (beginAtZero) {
13883      const minSign = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.s)(min);
13884      const maxSign = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.s)(max);
13885      if (minSign < 0 && maxSign < 0) {
13886        setMax(0);
13887      } else if (minSign > 0 && maxSign > 0) {
13888        setMin(0);
13889      }
13890    }
13891    if (min === max) {
13892      let offset = 1;
13893      if (max >= Number.MAX_SAFE_INTEGER || min <= Number.MIN_SAFE_INTEGER) {
13894        offset = Math.abs(max * 0.05);
13895      }
13896      setMax(max + offset);
13897      if (!beginAtZero) {
13898        setMin(min - offset);
13899      }
13900    }
13901    this.min = min;
13902    this.max = max;
13903  }
13904  getTickLimit() {
13905    const tickOpts = this.options.ticks;
13906    let {maxTicksLimit, stepSize} = tickOpts;
13907    let maxTicks;
13908    if (stepSize) {
13909      maxTicks = Math.ceil(this.max / stepSize) - Math.floor(this.min / stepSize) + 1;
13910      if (maxTicks > 1000) {
13911        console.warn(`scales.${this.id}.ticks.stepSize: ${stepSize} would result generating up to ${maxTicks} ticks. Limiting to 1000.`);
13912        maxTicks = 1000;
13913      }
13914    } else {
13915      maxTicks = this.computeTickLimit();
13916      maxTicksLimit = maxTicksLimit || 11;
13917    }
13918    if (maxTicksLimit) {
13919      maxTicks = Math.min(maxTicksLimit, maxTicks);
13920    }
13921    return maxTicks;
13922  }
13923  computeTickLimit() {
13924    return Number.POSITIVE_INFINITY;
13925  }
13926  buildTicks() {
13927    const opts = this.options;
13928    const tickOpts = opts.ticks;
13929    let maxTicks = this.getTickLimit();
13930    maxTicks = Math.max(2, maxTicks);
13931    const numericGeneratorOptions = {
13932      maxTicks,
13933      bounds: opts.bounds,
13934      min: opts.min,
13935      max: opts.max,
13936      precision: tickOpts.precision,
13937      step: tickOpts.stepSize,
13938      count: tickOpts.count,
13939      maxDigits: this._maxDigits(),
13940      horizontal: this.isHorizontal(),
13941      minRotation: tickOpts.minRotation || 0,
13942      includeBounds: tickOpts.includeBounds !== false
13943    };
13944    const dataRange = this._range || this;
13945    const ticks = generateTicks$1(numericGeneratorOptions, dataRange);
13946    if (opts.bounds === 'ticks') {
13947      (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.aH)(ticks, this, 'value');
13948    }
13949    if (opts.reverse) {
13950      ticks.reverse();
13951      this.start = this.max;
13952      this.end = this.min;
13953    } else {
13954      this.start = this.min;
13955      this.end = this.max;
13956    }
13957    return ticks;
13958  }
13959  configure() {
13960    const ticks = this.ticks;
13961    let start = this.min;
13962    let end = this.max;
13963    super.configure();
13964    if (this.options.offset && ticks.length) {
13965      const offset = (end - start) / Math.max(ticks.length - 1, 1) / 2;
13966      start -= offset;
13967      end += offset;
13968    }
13969    this._startValue = start;
13970    this._endValue = end;
13971    this._valueRange = end - start;
13972  }
13973  getLabelForValue(value) {
13974    return (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.o)(value, this.chart.options.locale, this.options.ticks.format);
13975  }
13976}
13977
13978class LinearScale extends LinearScaleBase {
13979  determineDataLimits() {
13980    const {min, max} = this.getMinMax(true);
13981    this.min = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.g)(min) ? min : 0;
13982    this.max = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.g)(max) ? max : 1;
13983    this.handleTickRangeOptions();
13984  }
13985  computeTickLimit() {
13986    const horizontal = this.isHorizontal();
13987    const length = horizontal ? this.width : this.height;
13988    const minRotation = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.t)(this.options.ticks.minRotation);
13989    const ratio = (horizontal ? Math.sin(minRotation) : Math.cos(minRotation)) || 0.001;
13990    const tickFont = this._resolveTickFontOptions(0);
13991    return Math.ceil(length / Math.min(40, tickFont.lineHeight / ratio));
13992  }
13993  getPixelForValue(value) {
13994    return value === null ? NaN : this.getPixelForDecimal((value - this._startValue) / this._valueRange);
13995  }
13996  getValueForPixel(pixel) {
13997    return this._startValue + this.getDecimalForPixel(pixel) * this._valueRange;
13998  }
13999}
14000LinearScale.id = 'linear';
14001LinearScale.defaults = {
14002  ticks: {
14003    callback: Ticks.formatters.numeric
14004  }
14005};
14006
14007function isMajor(tickVal) {
14008  const remain = tickVal / (Math.pow(10, Math.floor((0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.z)(tickVal))));
14009  return remain === 1;
14010}
14011function generateTicks(generationOptions, dataRange) {
14012  const endExp = Math.floor((0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.z)(dataRange.max));
14013  const endSignificand = Math.ceil(dataRange.max / Math.pow(10, endExp));
14014  const ticks = [];
14015  let tickVal = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.B)(generationOptions.min, Math.pow(10, Math.floor((0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.z)(dataRange.min))));
14016  let exp = Math.floor((0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.z)(tickVal));
14017  let significand = Math.floor(tickVal / Math.pow(10, exp));
14018  let precision = exp < 0 ? Math.pow(10, Math.abs(exp)) : 1;
14019  do {
14020    ticks.push({value: tickVal, major: isMajor(tickVal)});
14021    ++significand;
14022    if (significand === 10) {
14023      significand = 1;
14024      ++exp;
14025      precision = exp >= 0 ? 1 : precision;
14026    }
14027    tickVal = Math.round(significand * Math.pow(10, exp) * precision) / precision;
14028  } while (exp < endExp || (exp === endExp && significand < endSignificand));
14029  const lastTick = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.B)(generationOptions.max, tickVal);
14030  ticks.push({value: lastTick, major: isMajor(tickVal)});
14031  return ticks;
14032}
14033class LogarithmicScale extends Scale {
14034  constructor(cfg) {
14035    super(cfg);
14036    this.start = undefined;
14037    this.end = undefined;
14038    this._startValue = undefined;
14039    this._valueRange = 0;
14040  }
14041  parse(raw, index) {
14042    const value = LinearScaleBase.prototype.parse.apply(this, [raw, index]);
14043    if (value === 0) {
14044      this._zero = true;
14045      return undefined;
14046    }
14047    return (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.g)(value) && value > 0 ? value : null;
14048  }
14049  determineDataLimits() {
14050    const {min, max} = this.getMinMax(true);
14051    this.min = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.g)(min) ? Math.max(0, min) : null;
14052    this.max = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.g)(max) ? Math.max(0, max) : null;
14053    if (this.options.beginAtZero) {
14054      this._zero = true;
14055    }
14056    this.handleTickRangeOptions();
14057  }
14058  handleTickRangeOptions() {
14059    const {minDefined, maxDefined} = this.getUserBounds();
14060    let min = this.min;
14061    let max = this.max;
14062    const setMin = v => (min = minDefined ? min : v);
14063    const setMax = v => (max = maxDefined ? max : v);
14064    const exp = (v, m) => Math.pow(10, Math.floor((0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.z)(v)) + m);
14065    if (min === max) {
14066      if (min <= 0) {
14067        setMin(1);
14068        setMax(10);
14069      } else {
14070        setMin(exp(min, -1));
14071        setMax(exp(max, +1));
14072      }
14073    }
14074    if (min <= 0) {
14075      setMin(exp(max, -1));
14076    }
14077    if (max <= 0) {
14078      setMax(exp(min, +1));
14079    }
14080    if (this._zero && this.min !== this._suggestedMin && min === exp(this.min, 0)) {
14081      setMin(exp(min, -1));
14082    }
14083    this.min = min;
14084    this.max = max;
14085  }
14086  buildTicks() {
14087    const opts = this.options;
14088    const generationOptions = {
14089      min: this._userMin,
14090      max: this._userMax
14091    };
14092    const ticks = generateTicks(generationOptions, this);
14093    if (opts.bounds === 'ticks') {
14094      (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.aH)(ticks, this, 'value');
14095    }
14096    if (opts.reverse) {
14097      ticks.reverse();
14098      this.start = this.max;
14099      this.end = this.min;
14100    } else {
14101      this.start = this.min;
14102      this.end = this.max;
14103    }
14104    return ticks;
14105  }
14106  getLabelForValue(value) {
14107    return value === undefined
14108      ? '0'
14109      : (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.o)(value, this.chart.options.locale, this.options.ticks.format);
14110  }
14111  configure() {
14112    const start = this.min;
14113    super.configure();
14114    this._startValue = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.z)(start);
14115    this._valueRange = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.z)(this.max) - (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.z)(start);
14116  }
14117  getPixelForValue(value) {
14118    if (value === undefined || value === 0) {
14119      value = this.min;
14120    }
14121    if (value === null || isNaN(value)) {
14122      return NaN;
14123    }
14124    return this.getPixelForDecimal(value === this.min
14125      ? 0
14126      : ((0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.z)(value) - this._startValue) / this._valueRange);
14127  }
14128  getValueForPixel(pixel) {
14129    const decimal = this.getDecimalForPixel(pixel);
14130    return Math.pow(10, this._startValue + decimal * this._valueRange);
14131  }
14132}
14133LogarithmicScale.id = 'logarithmic';
14134LogarithmicScale.defaults = {
14135  ticks: {
14136    callback: Ticks.formatters.logarithmic,
14137    major: {
14138      enabled: true
14139    }
14140  }
14141};
14142
14143function getTickBackdropHeight(opts) {
14144  const tickOpts = opts.ticks;
14145  if (tickOpts.display && opts.display) {
14146    const padding = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.K)(tickOpts.backdropPadding);
14147    return (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.v)(tickOpts.font && tickOpts.font.size, _chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.d.font.size) + padding.height;
14148  }
14149  return 0;
14150}
14151function measureLabelSize(ctx, font, label) {
14152  label = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.b)(label) ? label : [label];
14153  return {
14154    w: (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.aM)(ctx, font.string, label),
14155    h: label.length * font.lineHeight
14156  };
14157}
14158function determineLimits(angle, pos, size, min, max) {
14159  if (angle === min || angle === max) {
14160    return {
14161      start: pos - (size / 2),
14162      end: pos + (size / 2)
14163    };
14164  } else if (angle < min || angle > max) {
14165    return {
14166      start: pos - size,
14167      end: pos
14168    };
14169  }
14170  return {
14171    start: pos,
14172    end: pos + size
14173  };
14174}
14175function fitWithPointLabels(scale) {
14176  const orig = {
14177    l: scale.left + scale._padding.left,
14178    r: scale.right - scale._padding.right,
14179    t: scale.top + scale._padding.top,
14180    b: scale.bottom - scale._padding.bottom
14181  };
14182  const limits = Object.assign({}, orig);
14183  const labelSizes = [];
14184  const padding = [];
14185  const valueCount = scale._pointLabels.length;
14186  const pointLabelOpts = scale.options.pointLabels;
14187  const additionalAngle = pointLabelOpts.centerPointLabels ? _chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.P / valueCount : 0;
14188  for (let i = 0; i < valueCount; i++) {
14189    const opts = pointLabelOpts.setContext(scale.getPointLabelContext(i));
14190    padding[i] = opts.padding;
14191    const pointPosition = scale.getPointPosition(i, scale.drawingArea + padding[i], additionalAngle);
14192    const plFont = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.O)(opts.font);
14193    const textSize = measureLabelSize(scale.ctx, plFont, scale._pointLabels[i]);
14194    labelSizes[i] = textSize;
14195    const angleRadians = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.az)(scale.getIndexAngle(i) + additionalAngle);
14196    const angle = Math.round((0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.F)(angleRadians));
14197    const hLimits = determineLimits(angle, pointPosition.x, textSize.w, 0, 180);
14198    const vLimits = determineLimits(angle, pointPosition.y, textSize.h, 90, 270);
14199    updateLimits(limits, orig, angleRadians, hLimits, vLimits);
14200  }
14201  scale.setCenterPoint(
14202    orig.l - limits.l,
14203    limits.r - orig.r,
14204    orig.t - limits.t,
14205    limits.b - orig.b
14206  );
14207  scale._pointLabelItems = buildPointLabelItems(scale, labelSizes, padding);
14208}
14209function updateLimits(limits, orig, angle, hLimits, vLimits) {
14210  const sin = Math.abs(Math.sin(angle));
14211  const cos = Math.abs(Math.cos(angle));
14212  let x = 0;
14213  let y = 0;
14214  if (hLimits.start < orig.l) {
14215    x = (orig.l - hLimits.start) / sin;
14216    limits.l = Math.min(limits.l, orig.l - x);
14217  } else if (hLimits.end > orig.r) {
14218    x = (hLimits.end - orig.r) / sin;
14219    limits.r = Math.max(limits.r, orig.r + x);
14220  }
14221  if (vLimits.start < orig.t) {
14222    y = (orig.t - vLimits.start) / cos;
14223    limits.t = Math.min(limits.t, orig.t - y);
14224  } else if (vLimits.end > orig.b) {
14225    y = (vLimits.end - orig.b) / cos;
14226    limits.b = Math.max(limits.b, orig.b + y);
14227  }
14228}
14229function buildPointLabelItems(scale, labelSizes, padding) {
14230  const items = [];
14231  const valueCount = scale._pointLabels.length;
14232  const opts = scale.options;
14233  const extra = getTickBackdropHeight(opts) / 2;
14234  const outerDistance = scale.drawingArea;
14235  const additionalAngle = opts.pointLabels.centerPointLabels ? _chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.P / valueCount : 0;
14236  for (let i = 0; i < valueCount; i++) {
14237    const pointLabelPosition = scale.getPointPosition(i, outerDistance + extra + padding[i], additionalAngle);
14238    const angle = Math.round((0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.F)((0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.az)(pointLabelPosition.angle + _chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.H)));
14239    const size = labelSizes[i];
14240    const y = yForAngle(pointLabelPosition.y, size.h, angle);
14241    const textAlign = getTextAlignForAngle(angle);
14242    const left = leftForTextAlign(pointLabelPosition.x, size.w, textAlign);
14243    items.push({
14244      x: pointLabelPosition.x,
14245      y,
14246      textAlign,
14247      left,
14248      top: y,
14249      right: left + size.w,
14250      bottom: y + size.h
14251    });
14252  }
14253  return items;
14254}
14255function getTextAlignForAngle(angle) {
14256  if (angle === 0 || angle === 180) {
14257    return 'center';
14258  } else if (angle < 180) {
14259    return 'left';
14260  }
14261  return 'right';
14262}
14263function leftForTextAlign(x, w, align) {
14264  if (align === 'right') {
14265    x -= w;
14266  } else if (align === 'center') {
14267    x -= (w / 2);
14268  }
14269  return x;
14270}
14271function yForAngle(y, h, angle) {
14272  if (angle === 90 || angle === 270) {
14273    y -= (h / 2);
14274  } else if (angle > 270 || angle < 90) {
14275    y -= h;
14276  }
14277  return y;
14278}
14279function drawPointLabels(scale, labelCount) {
14280  const {ctx, options: {pointLabels}} = scale;
14281  for (let i = labelCount - 1; i >= 0; i--) {
14282    const optsAtIndex = pointLabels.setContext(scale.getPointLabelContext(i));
14283    const plFont = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.O)(optsAtIndex.font);
14284    const {x, y, textAlign, left, top, right, bottom} = scale._pointLabelItems[i];
14285    const {backdropColor} = optsAtIndex;
14286    if (!(0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.k)(backdropColor)) {
14287      const borderRadius = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.ax)(optsAtIndex.borderRadius);
14288      const padding = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.K)(optsAtIndex.backdropPadding);
14289      ctx.fillStyle = backdropColor;
14290      const backdropLeft = left - padding.left;
14291      const backdropTop = top - padding.top;
14292      const backdropWidth = right - left + padding.width;
14293      const backdropHeight = bottom - top + padding.height;
14294      if (Object.values(borderRadius).some(v => v !== 0)) {
14295        ctx.beginPath();
14296        (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.av)(ctx, {
14297          x: backdropLeft,
14298          y: backdropTop,
14299          w: backdropWidth,
14300          h: backdropHeight,
14301          radius: borderRadius,
14302        });
14303        ctx.fill();
14304      } else {
14305        ctx.fillRect(backdropLeft, backdropTop, backdropWidth, backdropHeight);
14306      }
14307    }
14308    (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.M)(
14309      ctx,
14310      scale._pointLabels[i],
14311      x,
14312      y + (plFont.lineHeight / 2),
14313      plFont,
14314      {
14315        color: optsAtIndex.color,
14316        textAlign: textAlign,
14317        textBaseline: 'middle'
14318      }
14319    );
14320  }
14321}
14322function pathRadiusLine(scale, radius, circular, labelCount) {
14323  const {ctx} = scale;
14324  if (circular) {
14325    ctx.arc(scale.xCenter, scale.yCenter, radius, 0, _chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.T);
14326  } else {
14327    let pointPosition = scale.getPointPosition(0, radius);
14328    ctx.moveTo(pointPosition.x, pointPosition.y);
14329    for (let i = 1; i < labelCount; i++) {
14330      pointPosition = scale.getPointPosition(i, radius);
14331      ctx.lineTo(pointPosition.x, pointPosition.y);
14332    }
14333  }
14334}
14335function drawRadiusLine(scale, gridLineOpts, radius, labelCount) {
14336  const ctx = scale.ctx;
14337  const circular = gridLineOpts.circular;
14338  const {color, lineWidth} = gridLineOpts;
14339  if ((!circular && !labelCount) || !color || !lineWidth || radius < 0) {
14340    return;
14341  }
14342  ctx.save();
14343  ctx.strokeStyle = color;
14344  ctx.lineWidth = lineWidth;
14345  ctx.setLineDash(gridLineOpts.borderDash);
14346  ctx.lineDashOffset = gridLineOpts.borderDashOffset;
14347  ctx.beginPath();
14348  pathRadiusLine(scale, radius, circular, labelCount);
14349  ctx.closePath();
14350  ctx.stroke();
14351  ctx.restore();
14352}
14353function createPointLabelContext(parent, index, label) {
14354  return (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.h)(parent, {
14355    label,
14356    index,
14357    type: 'pointLabel'
14358  });
14359}
14360class RadialLinearScale extends LinearScaleBase {
14361  constructor(cfg) {
14362    super(cfg);
14363    this.xCenter = undefined;
14364    this.yCenter = undefined;
14365    this.drawingArea = undefined;
14366    this._pointLabels = [];
14367    this._pointLabelItems = [];
14368  }
14369  setDimensions() {
14370    const padding = this._padding = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.K)(getTickBackdropHeight(this.options) / 2);
14371    const w = this.width = this.maxWidth - padding.width;
14372    const h = this.height = this.maxHeight - padding.height;
14373    this.xCenter = Math.floor(this.left + w / 2 + padding.left);
14374    this.yCenter = Math.floor(this.top + h / 2 + padding.top);
14375    this.drawingArea = Math.floor(Math.min(w, h) / 2);
14376  }
14377  determineDataLimits() {
14378    const {min, max} = this.getMinMax(false);
14379    this.min = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.g)(min) && !isNaN(min) ? min : 0;
14380    this.max = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.g)(max) && !isNaN(max) ? max : 0;
14381    this.handleTickRangeOptions();
14382  }
14383  computeTickLimit() {
14384    return Math.ceil(this.drawingArea / getTickBackdropHeight(this.options));
14385  }
14386  generateTickLabels(ticks) {
14387    LinearScaleBase.prototype.generateTickLabels.call(this, ticks);
14388    this._pointLabels = this.getLabels()
14389      .map((value, index) => {
14390        const label = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.C)(this.options.pointLabels.callback, [value, index], this);
14391        return label || label === 0 ? label : '';
14392      })
14393      .filter((v, i) => this.chart.getDataVisibility(i));
14394  }
14395  fit() {
14396    const opts = this.options;
14397    if (opts.display && opts.pointLabels.display) {
14398      fitWithPointLabels(this);
14399    } else {
14400      this.setCenterPoint(0, 0, 0, 0);
14401    }
14402  }
14403  setCenterPoint(leftMovement, rightMovement, topMovement, bottomMovement) {
14404    this.xCenter += Math.floor((leftMovement - rightMovement) / 2);
14405    this.yCenter += Math.floor((topMovement - bottomMovement) / 2);
14406    this.drawingArea -= Math.min(this.drawingArea / 2, Math.max(leftMovement, rightMovement, topMovement, bottomMovement));
14407  }
14408  getIndexAngle(index) {
14409    const angleMultiplier = _chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.T / (this._pointLabels.length || 1);
14410    const startAngle = this.options.startAngle || 0;
14411    return (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.az)(index * angleMultiplier + (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.t)(startAngle));
14412  }
14413  getDistanceFromCenterForValue(value) {
14414    if ((0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.k)(value)) {
14415      return NaN;
14416    }
14417    const scalingFactor = this.drawingArea / (this.max - this.min);
14418    if (this.options.reverse) {
14419      return (this.max - value) * scalingFactor;
14420    }
14421    return (value - this.min) * scalingFactor;
14422  }
14423  getValueForDistanceFromCenter(distance) {
14424    if ((0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.k)(distance)) {
14425      return NaN;
14426    }
14427    const scaledDistance = distance / (this.drawingArea / (this.max - this.min));
14428    return this.options.reverse ? this.max - scaledDistance : this.min + scaledDistance;
14429  }
14430  getPointLabelContext(index) {
14431    const pointLabels = this._pointLabels || [];
14432    if (index >= 0 && index < pointLabels.length) {
14433      const pointLabel = pointLabels[index];
14434      return createPointLabelContext(this.getContext(), index, pointLabel);
14435    }
14436  }
14437  getPointPosition(index, distanceFromCenter, additionalAngle = 0) {
14438    const angle = this.getIndexAngle(index) - _chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.H + additionalAngle;
14439    return {
14440      x: Math.cos(angle) * distanceFromCenter + this.xCenter,
14441      y: Math.sin(angle) * distanceFromCenter + this.yCenter,
14442      angle
14443    };
14444  }
14445  getPointPositionForValue(index, value) {
14446    return this.getPointPosition(index, this.getDistanceFromCenterForValue(value));
14447  }
14448  getBasePosition(index) {
14449    return this.getPointPositionForValue(index || 0, this.getBaseValue());
14450  }
14451  getPointLabelPosition(index) {
14452    const {left, top, right, bottom} = this._pointLabelItems[index];
14453    return {
14454      left,
14455      top,
14456      right,
14457      bottom,
14458    };
14459  }
14460  drawBackground() {
14461    const {backgroundColor, grid: {circular}} = this.options;
14462    if (backgroundColor) {
14463      const ctx = this.ctx;
14464      ctx.save();
14465      ctx.beginPath();
14466      pathRadiusLine(this, this.getDistanceFromCenterForValue(this._endValue), circular, this._pointLabels.length);
14467      ctx.closePath();
14468      ctx.fillStyle = backgroundColor;
14469      ctx.fill();
14470      ctx.restore();
14471    }
14472  }
14473  drawGrid() {
14474    const ctx = this.ctx;
14475    const opts = this.options;
14476    const {angleLines, grid} = opts;
14477    const labelCount = this._pointLabels.length;
14478    let i, offset, position;
14479    if (opts.pointLabels.display) {
14480      drawPointLabels(this, labelCount);
14481    }
14482    if (grid.display) {
14483      this.ticks.forEach((tick, index) => {
14484        if (index !== 0) {
14485          offset = this.getDistanceFromCenterForValue(tick.value);
14486          const optsAtIndex = grid.setContext(this.getContext(index - 1));
14487          drawRadiusLine(this, optsAtIndex, offset, labelCount);
14488        }
14489      });
14490    }
14491    if (angleLines.display) {
14492      ctx.save();
14493      for (i = labelCount - 1; i >= 0; i--) {
14494        const optsAtIndex = angleLines.setContext(this.getPointLabelContext(i));
14495        const {color, lineWidth} = optsAtIndex;
14496        if (!lineWidth || !color) {
14497          continue;
14498        }
14499        ctx.lineWidth = lineWidth;
14500        ctx.strokeStyle = color;
14501        ctx.setLineDash(optsAtIndex.borderDash);
14502        ctx.lineDashOffset = optsAtIndex.borderDashOffset;
14503        offset = this.getDistanceFromCenterForValue(opts.ticks.reverse ? this.min : this.max);
14504        position = this.getPointPosition(i, offset);
14505        ctx.beginPath();
14506        ctx.moveTo(this.xCenter, this.yCenter);
14507        ctx.lineTo(position.x, position.y);
14508        ctx.stroke();
14509      }
14510      ctx.restore();
14511    }
14512  }
14513  drawBorder() {}
14514  drawLabels() {
14515    const ctx = this.ctx;
14516    const opts = this.options;
14517    const tickOpts = opts.ticks;
14518    if (!tickOpts.display) {
14519      return;
14520    }
14521    const startAngle = this.getIndexAngle(0);
14522    let offset, width;
14523    ctx.save();
14524    ctx.translate(this.xCenter, this.yCenter);
14525    ctx.rotate(startAngle);
14526    ctx.textAlign = 'center';
14527    ctx.textBaseline = 'middle';
14528    this.ticks.forEach((tick, index) => {
14529      if (index === 0 && !opts.reverse) {
14530        return;
14531      }
14532      const optsAtIndex = tickOpts.setContext(this.getContext(index));
14533      const tickFont = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.O)(optsAtIndex.font);
14534      offset = this.getDistanceFromCenterForValue(this.ticks[index].value);
14535      if (optsAtIndex.showLabelBackdrop) {
14536        ctx.font = tickFont.string;
14537        width = ctx.measureText(tick.label).width;
14538        ctx.fillStyle = optsAtIndex.backdropColor;
14539        const padding = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.K)(optsAtIndex.backdropPadding);
14540        ctx.fillRect(
14541          -width / 2 - padding.left,
14542          -offset - tickFont.size / 2 - padding.top,
14543          width + padding.width,
14544          tickFont.size + padding.height
14545        );
14546      }
14547      (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.M)(ctx, tick.label, 0, -offset, tickFont, {
14548        color: optsAtIndex.color,
14549      });
14550    });
14551    ctx.restore();
14552  }
14553  drawTitle() {}
14554}
14555RadialLinearScale.id = 'radialLinear';
14556RadialLinearScale.defaults = {
14557  display: true,
14558  animate: true,
14559  position: 'chartArea',
14560  angleLines: {
14561    display: true,
14562    lineWidth: 1,
14563    borderDash: [],
14564    borderDashOffset: 0.0
14565  },
14566  grid: {
14567    circular: false
14568  },
14569  startAngle: 0,
14570  ticks: {
14571    showLabelBackdrop: true,
14572    callback: Ticks.formatters.numeric
14573  },
14574  pointLabels: {
14575    backdropColor: undefined,
14576    backdropPadding: 2,
14577    display: true,
14578    font: {
14579      size: 10
14580    },
14581    callback(label) {
14582      return label;
14583    },
14584    padding: 5,
14585    centerPointLabels: false
14586  }
14587};
14588RadialLinearScale.defaultRoutes = {
14589  'angleLines.color': 'borderColor',
14590  'pointLabels.color': 'color',
14591  'ticks.color': 'color'
14592};
14593RadialLinearScale.descriptors = {
14594  angleLines: {
14595    _fallback: 'grid'
14596  }
14597};
14598
14599const INTERVALS = {
14600  millisecond: {common: true, size: 1, steps: 1000},
14601  second: {common: true, size: 1000, steps: 60},
14602  minute: {common: true, size: 60000, steps: 60},
14603  hour: {common: true, size: 3600000, steps: 24},
14604  day: {common: true, size: 86400000, steps: 30},
14605  week: {common: false, size: 604800000, steps: 4},
14606  month: {common: true, size: 2.628e9, steps: 12},
14607  quarter: {common: false, size: 7.884e9, steps: 4},
14608  year: {common: true, size: 3.154e10}
14609};
14610const UNITS = (Object.keys(INTERVALS));
14611function sorter(a, b) {
14612  return a - b;
14613}
14614function parse(scale, input) {
14615  if ((0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.k)(input)) {
14616    return null;
14617  }
14618  const adapter = scale._adapter;
14619  const {parser, round, isoWeekday} = scale._parseOpts;
14620  let value = input;
14621  if (typeof parser === 'function') {
14622    value = parser(value);
14623  }
14624  if (!(0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.g)(value)) {
14625    value = typeof parser === 'string'
14626      ? adapter.parse(value, parser)
14627      : adapter.parse(value);
14628  }
14629  if (value === null) {
14630    return null;
14631  }
14632  if (round) {
14633    value = round === 'week' && ((0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.x)(isoWeekday) || isoWeekday === true)
14634      ? adapter.startOf(value, 'isoWeek', isoWeekday)
14635      : adapter.startOf(value, round);
14636  }
14637  return +value;
14638}
14639function determineUnitForAutoTicks(minUnit, min, max, capacity) {
14640  const ilen = UNITS.length;
14641  for (let i = UNITS.indexOf(minUnit); i < ilen - 1; ++i) {
14642    const interval = INTERVALS[UNITS[i]];
14643    const factor = interval.steps ? interval.steps : Number.MAX_SAFE_INTEGER;
14644    if (interval.common && Math.ceil((max - min) / (factor * interval.size)) <= capacity) {
14645      return UNITS[i];
14646    }
14647  }
14648  return UNITS[ilen - 1];
14649}
14650function determineUnitForFormatting(scale, numTicks, minUnit, min, max) {
14651  for (let i = UNITS.length - 1; i >= UNITS.indexOf(minUnit); i--) {
14652    const unit = UNITS[i];
14653    if (INTERVALS[unit].common && scale._adapter.diff(max, min, unit) >= numTicks - 1) {
14654      return unit;
14655    }
14656  }
14657  return UNITS[minUnit ? UNITS.indexOf(minUnit) : 0];
14658}
14659function determineMajorUnit(unit) {
14660  for (let i = UNITS.indexOf(unit) + 1, ilen = UNITS.length; i < ilen; ++i) {
14661    if (INTERVALS[UNITS[i]].common) {
14662      return UNITS[i];
14663    }
14664  }
14665}
14666function addTick(ticks, time, timestamps) {
14667  if (!timestamps) {
14668    ticks[time] = true;
14669  } else if (timestamps.length) {
14670    const {lo, hi} = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.aO)(timestamps, time);
14671    const timestamp = timestamps[lo] >= time ? timestamps[lo] : timestamps[hi];
14672    ticks[timestamp] = true;
14673  }
14674}
14675function setMajorTicks(scale, ticks, map, majorUnit) {
14676  const adapter = scale._adapter;
14677  const first = +adapter.startOf(ticks[0].value, majorUnit);
14678  const last = ticks[ticks.length - 1].value;
14679  let major, index;
14680  for (major = first; major <= last; major = +adapter.add(major, 1, majorUnit)) {
14681    index = map[major];
14682    if (index >= 0) {
14683      ticks[index].major = true;
14684    }
14685  }
14686  return ticks;
14687}
14688function ticksFromTimestamps(scale, values, majorUnit) {
14689  const ticks = [];
14690  const map = {};
14691  const ilen = values.length;
14692  let i, value;
14693  for (i = 0; i < ilen; ++i) {
14694    value = values[i];
14695    map[value] = i;
14696    ticks.push({
14697      value,
14698      major: false
14699    });
14700  }
14701  return (ilen === 0 || !majorUnit) ? ticks : setMajorTicks(scale, ticks, map, majorUnit);
14702}
14703class TimeScale extends Scale {
14704  constructor(props) {
14705    super(props);
14706    this._cache = {
14707      data: [],
14708      labels: [],
14709      all: []
14710    };
14711    this._unit = 'day';
14712    this._majorUnit = undefined;
14713    this._offsets = {};
14714    this._normalized = false;
14715    this._parseOpts = undefined;
14716  }
14717  init(scaleOpts, opts) {
14718    const time = scaleOpts.time || (scaleOpts.time = {});
14719    const adapter = this._adapter = new adapters._date(scaleOpts.adapters.date);
14720    adapter.init(opts);
14721    (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.ac)(time.displayFormats, adapter.formats());
14722    this._parseOpts = {
14723      parser: time.parser,
14724      round: time.round,
14725      isoWeekday: time.isoWeekday
14726    };
14727    super.init(scaleOpts);
14728    this._normalized = opts.normalized;
14729  }
14730  parse(raw, index) {
14731    if (raw === undefined) {
14732      return null;
14733    }
14734    return parse(this, raw);
14735  }
14736  beforeLayout() {
14737    super.beforeLayout();
14738    this._cache = {
14739      data: [],
14740      labels: [],
14741      all: []
14742    };
14743  }
14744  determineDataLimits() {
14745    const options = this.options;
14746    const adapter = this._adapter;
14747    const unit = options.time.unit || 'day';
14748    let {min, max, minDefined, maxDefined} = this.getUserBounds();
14749    function _applyBounds(bounds) {
14750      if (!minDefined && !isNaN(bounds.min)) {
14751        min = Math.min(min, bounds.min);
14752      }
14753      if (!maxDefined && !isNaN(bounds.max)) {
14754        max = Math.max(max, bounds.max);
14755      }
14756    }
14757    if (!minDefined || !maxDefined) {
14758      _applyBounds(this._getLabelBounds());
14759      if (options.bounds !== 'ticks' || options.ticks.source !== 'labels') {
14760        _applyBounds(this.getMinMax(false));
14761      }
14762    }
14763    min = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.g)(min) && !isNaN(min) ? min : +adapter.startOf(Date.now(), unit);
14764    max = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.g)(max) && !isNaN(max) ? max : +adapter.endOf(Date.now(), unit) + 1;
14765    this.min = Math.min(min, max - 1);
14766    this.max = Math.max(min + 1, max);
14767  }
14768  _getLabelBounds() {
14769    const arr = this.getLabelTimestamps();
14770    let min = Number.POSITIVE_INFINITY;
14771    let max = Number.NEGATIVE_INFINITY;
14772    if (arr.length) {
14773      min = arr[0];
14774      max = arr[arr.length - 1];
14775    }
14776    return {min, max};
14777  }
14778  buildTicks() {
14779    const options = this.options;
14780    const timeOpts = options.time;
14781    const tickOpts = options.ticks;
14782    const timestamps = tickOpts.source === 'labels' ? this.getLabelTimestamps() : this._generate();
14783    if (options.bounds === 'ticks' && timestamps.length) {
14784      this.min = this._userMin || timestamps[0];
14785      this.max = this._userMax || timestamps[timestamps.length - 1];
14786    }
14787    const min = this.min;
14788    const max = this.max;
14789    const ticks = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.aN)(timestamps, min, max);
14790    this._unit = timeOpts.unit || (tickOpts.autoSkip
14791      ? determineUnitForAutoTicks(timeOpts.minUnit, this.min, this.max, this._getLabelCapacity(min))
14792      : determineUnitForFormatting(this, ticks.length, timeOpts.minUnit, this.min, this.max));
14793    this._majorUnit = !tickOpts.major.enabled || this._unit === 'year' ? undefined
14794      : determineMajorUnit(this._unit);
14795    this.initOffsets(timestamps);
14796    if (options.reverse) {
14797      ticks.reverse();
14798    }
14799    return ticksFromTimestamps(this, ticks, this._majorUnit);
14800  }
14801  afterAutoSkip() {
14802    if (this.options.offsetAfterAutoskip) {
14803      this.initOffsets(this.ticks.map(tick => +tick.value));
14804    }
14805  }
14806  initOffsets(timestamps) {
14807    let start = 0;
14808    let end = 0;
14809    let first, last;
14810    if (this.options.offset && timestamps.length) {
14811      first = this.getDecimalForValue(timestamps[0]);
14812      if (timestamps.length === 1) {
14813        start = 1 - first;
14814      } else {
14815        start = (this.getDecimalForValue(timestamps[1]) - first) / 2;
14816      }
14817      last = this.getDecimalForValue(timestamps[timestamps.length - 1]);
14818      if (timestamps.length === 1) {
14819        end = last;
14820      } else {
14821        end = (last - this.getDecimalForValue(timestamps[timestamps.length - 2])) / 2;
14822      }
14823    }
14824    const limit = timestamps.length < 3 ? 0.5 : 0.25;
14825    start = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.E)(start, 0, limit);
14826    end = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.E)(end, 0, limit);
14827    this._offsets = {start, end, factor: 1 / (start + 1 + end)};
14828  }
14829  _generate() {
14830    const adapter = this._adapter;
14831    const min = this.min;
14832    const max = this.max;
14833    const options = this.options;
14834    const timeOpts = options.time;
14835    const minor = timeOpts.unit || determineUnitForAutoTicks(timeOpts.minUnit, min, max, this._getLabelCapacity(min));
14836    const stepSize = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.v)(timeOpts.stepSize, 1);
14837    const weekday = minor === 'week' ? timeOpts.isoWeekday : false;
14838    const hasWeekday = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.x)(weekday) || weekday === true;
14839    const ticks = {};
14840    let first = min;
14841    let time, count;
14842    if (hasWeekday) {
14843      first = +adapter.startOf(first, 'isoWeek', weekday);
14844    }
14845    first = +adapter.startOf(first, hasWeekday ? 'day' : minor);
14846    if (adapter.diff(max, min, minor) > 100000 * stepSize) {
14847      throw new Error(min + ' and ' + max + ' are too far apart with stepSize of ' + stepSize + ' ' + minor);
14848    }
14849    const timestamps = options.ticks.source === 'data' && this.getDataTimestamps();
14850    for (time = first, count = 0; time < max; time = +adapter.add(time, stepSize, minor), count++) {
14851      addTick(ticks, time, timestamps);
14852    }
14853    if (time === max || options.bounds === 'ticks' || count === 1) {
14854      addTick(ticks, time, timestamps);
14855    }
14856    return Object.keys(ticks).sort((a, b) => a - b).map(x => +x);
14857  }
14858  getLabelForValue(value) {
14859    const adapter = this._adapter;
14860    const timeOpts = this.options.time;
14861    if (timeOpts.tooltipFormat) {
14862      return adapter.format(value, timeOpts.tooltipFormat);
14863    }
14864    return adapter.format(value, timeOpts.displayFormats.datetime);
14865  }
14866  _tickFormatFunction(time, index, ticks, format) {
14867    const options = this.options;
14868    const formats = options.time.displayFormats;
14869    const unit = this._unit;
14870    const majorUnit = this._majorUnit;
14871    const minorFormat = unit && formats[unit];
14872    const majorFormat = majorUnit && formats[majorUnit];
14873    const tick = ticks[index];
14874    const major = majorUnit && majorFormat && tick && tick.major;
14875    const label = this._adapter.format(time, format || (major ? majorFormat : minorFormat));
14876    const formatter = options.ticks.callback;
14877    return formatter ? (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.C)(formatter, [label, index, ticks], this) : label;
14878  }
14879  generateTickLabels(ticks) {
14880    let i, ilen, tick;
14881    for (i = 0, ilen = ticks.length; i < ilen; ++i) {
14882      tick = ticks[i];
14883      tick.label = this._tickFormatFunction(tick.value, i, ticks);
14884    }
14885  }
14886  getDecimalForValue(value) {
14887    return value === null ? NaN : (value - this.min) / (this.max - this.min);
14888  }
14889  getPixelForValue(value) {
14890    const offsets = this._offsets;
14891    const pos = this.getDecimalForValue(value);
14892    return this.getPixelForDecimal((offsets.start + pos) * offsets.factor);
14893  }
14894  getValueForPixel(pixel) {
14895    const offsets = this._offsets;
14896    const pos = this.getDecimalForPixel(pixel) / offsets.factor - offsets.end;
14897    return this.min + pos * (this.max - this.min);
14898  }
14899  _getLabelSize(label) {
14900    const ticksOpts = this.options.ticks;
14901    const tickLabelWidth = this.ctx.measureText(label).width;
14902    const angle = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.t)(this.isHorizontal() ? ticksOpts.maxRotation : ticksOpts.minRotation);
14903    const cosRotation = Math.cos(angle);
14904    const sinRotation = Math.sin(angle);
14905    const tickFontSize = this._resolveTickFontOptions(0).size;
14906    return {
14907      w: (tickLabelWidth * cosRotation) + (tickFontSize * sinRotation),
14908      h: (tickLabelWidth * sinRotation) + (tickFontSize * cosRotation)
14909    };
14910  }
14911  _getLabelCapacity(exampleTime) {
14912    const timeOpts = this.options.time;
14913    const displayFormats = timeOpts.displayFormats;
14914    const format = displayFormats[timeOpts.unit] || displayFormats.millisecond;
14915    const exampleLabel = this._tickFormatFunction(exampleTime, 0, ticksFromTimestamps(this, [exampleTime], this._majorUnit), format);
14916    const size = this._getLabelSize(exampleLabel);
14917    const capacity = Math.floor(this.isHorizontal() ? this.width / size.w : this.height / size.h) - 1;
14918    return capacity > 0 ? capacity : 1;
14919  }
14920  getDataTimestamps() {
14921    let timestamps = this._cache.data || [];
14922    let i, ilen;
14923    if (timestamps.length) {
14924      return timestamps;
14925    }
14926    const metas = this.getMatchingVisibleMetas();
14927    if (this._normalized && metas.length) {
14928      return (this._cache.data = metas[0].controller.getAllParsedValues(this));
14929    }
14930    for (i = 0, ilen = metas.length; i < ilen; ++i) {
14931      timestamps = timestamps.concat(metas[i].controller.getAllParsedValues(this));
14932    }
14933    return (this._cache.data = this.normalize(timestamps));
14934  }
14935  getLabelTimestamps() {
14936    const timestamps = this._cache.labels || [];
14937    let i, ilen;
14938    if (timestamps.length) {
14939      return timestamps;
14940    }
14941    const labels = this.getLabels();
14942    for (i = 0, ilen = labels.length; i < ilen; ++i) {
14943      timestamps.push(parse(this, labels[i]));
14944    }
14945    return (this._cache.labels = this._normalized ? timestamps : this.normalize(timestamps));
14946  }
14947  normalize(values) {
14948    return (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__._)(values.sort(sorter));
14949  }
14950}
14951TimeScale.id = 'time';
14952TimeScale.defaults = {
14953  bounds: 'data',
14954  adapters: {},
14955  time: {
14956    parser: false,
14957    unit: false,
14958    round: false,
14959    isoWeekday: false,
14960    minUnit: 'millisecond',
14961    displayFormats: {}
14962  },
14963  ticks: {
14964    source: 'auto',
14965    major: {
14966      enabled: false
14967    }
14968  }
14969};
14970
14971function interpolate(table, val, reverse) {
14972  let lo = 0;
14973  let hi = table.length - 1;
14974  let prevSource, nextSource, prevTarget, nextTarget;
14975  if (reverse) {
14976    if (val >= table[lo].pos && val <= table[hi].pos) {
14977      ({lo, hi} = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.Z)(table, 'pos', val));
14978    }
14979    ({pos: prevSource, time: prevTarget} = table[lo]);
14980    ({pos: nextSource, time: nextTarget} = table[hi]);
14981  } else {
14982    if (val >= table[lo].time && val <= table[hi].time) {
14983      ({lo, hi} = (0,_chunks_helpers_segment_mjs__WEBPACK_IMPORTED_MODULE_0__.Z)(table, 'time', val));
14984    }
14985    ({time: prevSource, pos: prevTarget} = table[lo]);
14986    ({time: nextSource, pos: nextTarget} = table[hi]);
14987  }
14988  const span = nextSource - prevSource;
14989  return span ? prevTarget + (nextTarget - prevTarget) * (val - prevSource) / span : prevTarget;
14990}
14991class TimeSeriesScale extends TimeScale {
14992  constructor(props) {
14993    super(props);
14994    this._table = [];
14995    this._minPos = undefined;
14996    this._tableRange = undefined;
14997  }
14998  initOffsets() {
14999    const timestamps = this._getTimestampsForTable();
15000    const table = this._table = this.buildLookupTable(timestamps);
15001    this._minPos = interpolate(table, this.min);
15002    this._tableRange = interpolate(table, this.max) - this._minPos;
15003    super.initOffsets(timestamps);
15004  }
15005  buildLookupTable(timestamps) {
15006    const {min, max} = this;
15007    const items = [];
15008    const table = [];
15009    let i, ilen, prev, curr, next;
15010    for (i = 0, ilen = timestamps.length; i < ilen; ++i) {
15011      curr = timestamps[i];
15012      if (curr >= min && curr <= max) {
15013        items.push(curr);
15014      }
15015    }
15016    if (items.length < 2) {
15017      return [
15018        {time: min, pos: 0},
15019        {time: max, pos: 1}
15020      ];
15021    }
15022    for (i = 0, ilen = items.length; i < ilen; ++i) {
15023      next = items[i + 1];
15024      prev = items[i - 1];
15025      curr = items[i];
15026      if (Math.round((next + prev) / 2) !== curr) {
15027        table.push({time: curr, pos: i / (ilen - 1)});
15028      }
15029    }
15030    return table;
15031  }
15032  _getTimestampsForTable() {
15033    let timestamps = this._cache.all || [];
15034    if (timestamps.length) {
15035      return timestamps;
15036    }
15037    const data = this.getDataTimestamps();
15038    const label = this.getLabelTimestamps();
15039    if (data.length && label.length) {
15040      timestamps = this.normalize(data.concat(label));
15041    } else {
15042      timestamps = data.length ? data : label;
15043    }
15044    timestamps = this._cache.all = timestamps;
15045    return timestamps;
15046  }
15047  getDecimalForValue(value) {
15048    return (interpolate(this._table, value) - this._minPos) / this._tableRange;
15049  }
15050  getValueForPixel(pixel) {
15051    const offsets = this._offsets;
15052    const decimal = this.getDecimalForPixel(pixel) / offsets.factor - offsets.end;
15053    return interpolate(this._table, decimal * this._tableRange + this._minPos, true);
15054  }
15055}
15056TimeSeriesScale.id = 'timeseries';
15057TimeSeriesScale.defaults = TimeScale.defaults;
15058
15059var scales = /*#__PURE__*/Object.freeze({
15060__proto__: null,
15061CategoryScale: CategoryScale,
15062LinearScale: LinearScale,
15063LogarithmicScale: LogarithmicScale,
15064RadialLinearScale: RadialLinearScale,
15065TimeScale: TimeScale,
15066TimeSeriesScale: TimeSeriesScale
15067});
15068
15069const registerables = [
15070  controllers,
15071  elements,
15072  plugins,
15073  scales,
15074];
15075
15076
15077
15078
15079/***/ }),
15080
vendor: 82,315 bytes, lines 15081-17837
15081/***/ "./node_modules/chart.js/dist/chunks/helpers.segment.mjs":
15082/*!***************************************************************!*\
15083  !*** ./node_modules/chart.js/dist/chunks/helpers.segment.mjs ***!
15084  \***************************************************************/
15085/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
15086
15087"use strict";
15088__webpack_require__.r(__webpack_exports__);
15089/* harmony export */ __webpack_require__.d(__webpack_exports__, {
15090/* harmony export */   $: () => (/* binding */ _isPointInArea),
15091/* harmony export */   A: () => (/* binding */ _factorize),
15092/* harmony export */   B: () => (/* binding */ finiteOrDefault),
15093/* harmony export */   C: () => (/* binding */ callback),
15094/* harmony export */   D: () => (/* binding */ _addGrace),
15095/* harmony export */   E: () => (/* binding */ _limitValue),
15096/* harmony export */   F: () => (/* binding */ toDegrees),
15097/* harmony export */   G: () => (/* binding */ _measureText),
15098/* harmony export */   H: () => (/* binding */ HALF_PI),
15099/* harmony export */   I: () => (/* binding */ _int16Range),
15100/* harmony export */   J: () => (/* binding */ _alignPixel),
15101/* harmony export */   K: () => (/* binding */ toPadding),
15102/* harmony export */   L: () => (/* binding */ clipArea),
15103/* harmony export */   M: () => (/* binding */ renderText),
15104/* harmony export */   N: () => (/* binding */ unclipArea),
15105/* harmony export */   O: () => (/* binding */ toFont),
15106/* harmony export */   P: () => (/* binding */ PI),
15107/* harmony export */   Q: () => (/* binding */ each),
15108/* harmony export */   R: () => (/* binding */ _toLeftRightCenter),
15109/* harmony export */   S: () => (/* binding */ _alignStartEnd),
15110/* harmony export */   T: () => (/* binding */ TAU),
15111/* harmony export */   U: () => (/* binding */ overrides),
15112/* harmony export */   V: () => (/* binding */ merge),
15113/* harmony export */   W: () => (/* binding */ _capitalize),
15114/* harmony export */   X: () => (/* binding */ getRelativePosition),
15115/* harmony export */   Y: () => (/* binding */ _rlookupByKey),
15116/* harmony export */   Z: () => (/* binding */ _lookupByKey),
15117/* harmony export */   _: () => (/* binding */ _arrayUnique),
15118/* harmony export */   a: () => (/* binding */ resolve),
15119/* harmony export */   a$: () => (/* binding */ toLineHeight),
15120/* harmony export */   a0: () => (/* binding */ getAngleFromPoint),
15121/* harmony export */   a1: () => (/* binding */ getMaximumSize),
15122/* harmony export */   a2: () => (/* binding */ _getParentNode),
15123/* harmony export */   a3: () => (/* binding */ readUsedSize),
15124/* harmony export */   a4: () => (/* binding */ throttled),
15125/* harmony export */   a5: () => (/* binding */ supportsEventListenerOptions),
15126/* harmony export */   a6: () => (/* binding */ _isDomSupported),
15127/* harmony export */   a7: () => (/* binding */ descriptors),
15128/* harmony export */   a8: () => (/* binding */ isFunction),
15129/* harmony export */   a9: () => (/* binding */ _attachContext),
15130/* harmony export */   aA: () => (/* binding */ getRtlAdapter),
15131/* harmony export */   aB: () => (/* binding */ overrideTextDirection),
15132/* harmony export */   aC: () => (/* binding */ _textX),
15133/* harmony export */   aD: () => (/* binding */ restoreTextDirection),
15134/* harmony export */   aE: () => (/* binding */ drawPointLegend),
15135/* harmony export */   aF: () => (/* binding */ noop),
15136/* harmony export */   aG: () => (/* binding */ distanceBetweenPoints),
15137/* harmony export */   aH: () => (/* binding */ _setMinAndMaxByKey),
15138/* harmony export */   aI: () => (/* binding */ niceNum),
15139/* harmony export */   aJ: () => (/* binding */ almostWhole),
15140/* harmony export */   aK: () => (/* binding */ almostEquals),
15141/* harmony export */   aL: () => (/* binding */ _decimalPlaces),
15142/* harmony export */   aM: () => (/* binding */ _longestText),
15143/* harmony export */   aN: () => (/* binding */ _filterBetween),
15144/* harmony export */   aO: () => (/* binding */ _lookup),
15145/* harmony export */   aP: () => (/* binding */ isPatternOrGradient),
15146/* harmony export */   aQ: () => (/* binding */ getHoverColor),
15147/* harmony export */   aR: () => (/* binding */ clone$1),
15148/* harmony export */   aS: () => (/* binding */ _merger),
15149/* harmony export */   aT: () => (/* binding */ _mergerIf),
15150/* harmony export */   aU: () => (/* binding */ _deprecated),
15151/* harmony export */   aV: () => (/* binding */ _splitKey),
15152/* harmony export */   aW: () => (/* binding */ toFontString),
15153/* harmony export */   aX: () => (/* binding */ splineCurve),
15154/* harmony export */   aY: () => (/* binding */ splineCurveMonotone),
15155/* harmony export */   aZ: () => (/* binding */ getStyle),
15156/* harmony export */   a_: () => (/* binding */ fontString),
15157/* harmony export */   aa: () => (/* binding */ _createResolver),
15158/* harmony export */   ab: () => (/* binding */ _descriptors),
15159/* harmony export */   ac: () => (/* binding */ mergeIf),
15160/* harmony export */   ad: () => (/* binding */ uid),
15161/* harmony export */   ae: () => (/* binding */ debounce),
15162/* harmony export */   af: () => (/* binding */ retinaScale),
15163/* harmony export */   ag: () => (/* binding */ clearCanvas),
15164/* harmony export */   ah: () => (/* binding */ setsEqual),
15165/* harmony export */   ai: () => (/* binding */ _elementsEqual),
15166/* harmony export */   aj: () => (/* binding */ _isClickEvent),
15167/* harmony export */   ak: () => (/* binding */ _isBetween),
15168/* harmony export */   al: () => (/* binding */ _readValueToProps),
15169/* harmony export */   am: () => (/* binding */ _updateBezierControlPoints),
15170/* harmony export */   an: () => (/* binding */ _computeSegments),
15171/* harmony export */   ao: () => (/* binding */ _boundSegments),
15172/* harmony export */   ap: () => (/* binding */ _steppedInterpolation),
15173/* harmony export */   aq: () => (/* binding */ _bezierInterpolation),
15174/* harmony export */   ar: () => (/* binding */ _pointInLine),
15175/* harmony export */   as: () => (/* binding */ _steppedLineTo),
15176/* harmony export */   at: () => (/* binding */ _bezierCurveTo),
15177/* harmony export */   au: () => (/* binding */ drawPoint),
15178/* harmony export */   av: () => (/* binding */ addRoundedRectPath),
15179/* harmony export */   aw: () => (/* binding */ toTRBL),
15180/* harmony export */   ax: () => (/* binding */ toTRBLCorners),
15181/* harmony export */   ay: () => (/* binding */ _boundSegment),
15182/* harmony export */   az: () => (/* binding */ _normalizeAngle),
15183/* harmony export */   b: () => (/* binding */ isArray),
15184/* harmony export */   b0: () => (/* binding */ PITAU),
15185/* harmony export */   b1: () => (/* binding */ INFINITY),
15186/* harmony export */   b2: () => (/* binding */ RAD_PER_DEG),
15187/* harmony export */   b3: () => (/* binding */ QUARTER_PI),
15188/* harmony export */   b4: () => (/* binding */ TWO_THIRDS_PI),
15189/* harmony export */   b5: () => (/* binding */ _angleDiff),
15190/* harmony export */   c: () => (/* binding */ color),
15191/* harmony export */   d: () => (/* binding */ defaults),
15192/* harmony export */   e: () => (/* binding */ effects),
15193/* harmony export */   f: () => (/* binding */ resolveObjectKey),
15194/* harmony export */   g: () => (/* binding */ isNumberFinite),
15195/* harmony export */   h: () => (/* binding */ createContext),
15196/* harmony export */   i: () => (/* binding */ isObject),
15197/* harmony export */   j: () => (/* binding */ defined),
15198/* harmony export */   k: () => (/* binding */ isNullOrUndef),
15199/* harmony export */   l: () => (/* binding */ listenArrayEvents),
15200/* harmony export */   m: () => (/* binding */ toPercentage),
15201/* harmony export */   n: () => (/* binding */ toDimension),
15202/* harmony export */   o: () => (/* binding */ formatNumber),
15203/* harmony export */   p: () => (/* binding */ _angleBetween),
15204/* harmony export */   q: () => (/* binding */ _getStartAndCountOfVisiblePoints),
15205/* harmony export */   r: () => (/* binding */ requestAnimFrame),
15206/* harmony export */   s: () => (/* binding */ sign),
15207/* harmony export */   t: () => (/* binding */ toRadians),
15208/* harmony export */   u: () => (/* binding */ unlistenArrayEvents),
15209/* harmony export */   v: () => (/* binding */ valueOrDefault),
15210/* harmony export */   w: () => (/* binding */ _scaleRangesChanged),
15211/* harmony export */   x: () => (/* binding */ isNumber),
15212/* harmony export */   y: () => (/* binding */ _parseObjectDataRadialScale),
15213/* harmony export */   z: () => (/* binding */ log10)
15214/* harmony export */ });
15215/*!
15216 * Chart.js v3.9.1
15217 * https://www.chartjs.org
15218 * (c) 2022 Chart.js Contributors
15219 * Released under the MIT License
15220 */
15221function noop() {}
15222const uid = (function() {
15223  let id = 0;
15224  return function() {
15225    return id++;
15226  };
15227}());
15228function isNullOrUndef(value) {
15229  return value === null || typeof value === 'undefined';
15230}
15231function isArray(value) {
15232  if (Array.isArray && Array.isArray(value)) {
15233    return true;
15234  }
15235  const type = Object.prototype.toString.call(value);
15236  if (type.slice(0, 7) === '[object' && type.slice(-6) === 'Array]') {
15237    return true;
15238  }
15239  return false;
15240}
15241function isObject(value) {
15242  return value !== null && Object.prototype.toString.call(value) === '[object Object]';
15243}
15244const isNumberFinite = (value) => (typeof value === 'number' || value instanceof Number) && isFinite(+value);
15245function finiteOrDefault(value, defaultValue) {
15246  return isNumberFinite(value) ? value : defaultValue;
15247}
15248function valueOrDefault(value, defaultValue) {
15249  return typeof value === 'undefined' ? defaultValue : value;
15250}
15251const toPercentage = (value, dimension) =>
15252  typeof value === 'string' && value.endsWith('%') ?
15253    parseFloat(value) / 100
15254    : value / dimension;
15255const toDimension = (value, dimension) =>
15256  typeof value === 'string' && value.endsWith('%') ?
15257    parseFloat(value) / 100 * dimension
15258    : +value;
15259function callback(fn, args, thisArg) {
15260  if (fn && typeof fn.call === 'function') {
15261    return fn.apply(thisArg, args);
15262  }
15263}
15264function each(loopable, fn, thisArg, reverse) {
15265  let i, len, keys;
15266  if (isArray(loopable)) {
15267    len = loopable.length;
15268    if (reverse) {
15269      for (i = len - 1; i >= 0; i--) {
15270        fn.call(thisArg, loopable[i], i);
15271      }
15272    } else {
15273      for (i = 0; i < len; i++) {
15274        fn.call(thisArg, loopable[i], i);
15275      }
15276    }
15277  } else if (isObject(loopable)) {
15278    keys = Object.keys(loopable);
15279    len = keys.length;
15280    for (i = 0; i < len; i++) {
15281      fn.call(thisArg, loopable[keys[i]], keys[i]);
15282    }
15283  }
15284}
15285function _elementsEqual(a0, a1) {
15286  let i, ilen, v0, v1;
15287  if (!a0 || !a1 || a0.length !== a1.length) {
15288    return false;
15289  }
15290  for (i = 0, ilen = a0.length; i < ilen; ++i) {
15291    v0 = a0[i];
15292    v1 = a1[i];
15293    if (v0.datasetIndex !== v1.datasetIndex || v0.index !== v1.index) {
15294      return false;
15295    }
15296  }
15297  return true;
15298}
15299function clone$1(source) {
15300  if (isArray(source)) {
15301    return source.map(clone$1);
15302  }
15303  if (isObject(source)) {
15304    const target = Object.create(null);
15305    const keys = Object.keys(source);
15306    const klen = keys.length;
15307    let k = 0;
15308    for (; k < klen; ++k) {
15309      target[keys[k]] = clone$1(source[keys[k]]);
15310    }
15311    return target;
15312  }
15313  return source;
15314}
15315function isValidKey(key) {
15316  return ['__proto__', 'prototype', 'constructor'].indexOf(key) === -1;
15317}
15318function _merger(key, target, source, options) {
15319  if (!isValidKey(key)) {
15320    return;
15321  }
15322  const tval = target[key];
15323  const sval = source[key];
15324  if (isObject(tval) && isObject(sval)) {
15325    merge(tval, sval, options);
15326  } else {
15327    target[key] = clone$1(sval);
15328  }
15329}
15330function merge(target, source, options) {
15331  const sources = isArray(source) ? source : [source];
15332  const ilen = sources.length;
15333  if (!isObject(target)) {
15334    return target;
15335  }
15336  options = options || {};
15337  const merger = options.merger || _merger;
15338  for (let i = 0; i < ilen; ++i) {
15339    source = sources[i];
15340    if (!isObject(source)) {
15341      continue;
15342    }
15343    const keys = Object.keys(source);
15344    for (let k = 0, klen = keys.length; k < klen; ++k) {
15345      merger(keys[k], target, source, options);
15346    }
15347  }
15348  return target;
15349}
15350function mergeIf(target, source) {
15351  return merge(target, source, {merger: _mergerIf});
15352}
15353function _mergerIf(key, target, source) {
15354  if (!isValidKey(key)) {
15355    return;
15356  }
15357  const tval = target[key];
15358  const sval = source[key];
15359  if (isObject(tval) && isObject(sval)) {
15360    mergeIf(tval, sval);
15361  } else if (!Object.prototype.hasOwnProperty.call(target, key)) {
15362    target[key] = clone$1(sval);
15363  }
15364}
15365function _deprecated(scope, value, previous, current) {
15366  if (value !== undefined) {
15367    console.warn(scope + ': "' + previous +
15368			'" is deprecated. Please use "' + current + '" instead');
15369  }
15370}
15371const keyResolvers = {
15372  '': v => v,
15373  x: o => o.x,
15374  y: o => o.y
15375};
15376function resolveObjectKey(obj, key) {
15377  const resolver = keyResolvers[key] || (keyResolvers[key] = _getKeyResolver(key));
15378  return resolver(obj);
15379}
15380function _getKeyResolver(key) {
15381  const keys = _splitKey(key);
15382  return obj => {
15383    for (const k of keys) {
15384      if (k === '') {
15385        break;
15386      }
15387      obj = obj && obj[k];
15388    }
15389    return obj;
15390  };
15391}
15392function _splitKey(key) {
15393  const parts = key.split('.');
15394  const keys = [];
15395  let tmp = '';
15396  for (const part of parts) {
15397    tmp += part;
15398    if (tmp.endsWith('\\')) {
15399      tmp = tmp.slice(0, -1) + '.';
15400    } else {
15401      keys.push(tmp);
15402      tmp = '';
15403    }
15404  }
15405  return keys;
15406}
15407function _capitalize(str) {
15408  return str.charAt(0).toUpperCase() + str.slice(1);
15409}
15410const defined = (value) => typeof value !== 'undefined';
15411const isFunction = (value) => typeof value === 'function';
15412const setsEqual = (a, b) => {
15413  if (a.size !== b.size) {
15414    return false;
15415  }
15416  for (const item of a) {
15417    if (!b.has(item)) {
15418      return false;
15419    }
15420  }
15421  return true;
15422};
15423function _isClickEvent(e) {
15424  return e.type === 'mouseup' || e.type === 'click' || e.type === 'contextmenu';
15425}
15426
15427const PI = Math.PI;
15428const TAU = 2 * PI;
15429const PITAU = TAU + PI;
15430const INFINITY = Number.POSITIVE_INFINITY;
15431const RAD_PER_DEG = PI / 180;
15432const HALF_PI = PI / 2;
15433const QUARTER_PI = PI / 4;
15434const TWO_THIRDS_PI = PI * 2 / 3;
15435const log10 = Math.log10;
15436const sign = Math.sign;
15437function niceNum(range) {
15438  const roundedRange = Math.round(range);
15439  range = almostEquals(range, roundedRange, range / 1000) ? roundedRange : range;
15440  const niceRange = Math.pow(10, Math.floor(log10(range)));
15441  const fraction = range / niceRange;
15442  const niceFraction = fraction <= 1 ? 1 : fraction <= 2 ? 2 : fraction <= 5 ? 5 : 10;
15443  return niceFraction * niceRange;
15444}
15445function _factorize(value) {
15446  const result = [];
15447  const sqrt = Math.sqrt(value);
15448  let i;
15449  for (i = 1; i < sqrt; i++) {
15450    if (value % i === 0) {
15451      result.push(i);
15452      result.push(value / i);
15453    }
15454  }
15455  if (sqrt === (sqrt | 0)) {
15456    result.push(sqrt);
15457  }
15458  result.sort((a, b) => a - b).pop();
15459  return result;
15460}
15461function isNumber(n) {
15462  return !isNaN(parseFloat(n)) && isFinite(n);
15463}
15464function almostEquals(x, y, epsilon) {
15465  return Math.abs(x - y) < epsilon;
15466}
15467function almostWhole(x, epsilon) {
15468  const rounded = Math.round(x);
15469  return ((rounded - epsilon) <= x) && ((rounded + epsilon) >= x);
15470}
15471function _setMinAndMaxByKey(array, target, property) {
15472  let i, ilen, value;
15473  for (i = 0, ilen = array.length; i < ilen; i++) {
15474    value = array[i][property];
15475    if (!isNaN(value)) {
15476      target.min = Math.min(target.min, value);
15477      target.max = Math.max(target.max, value);
15478    }
15479  }
15480}
15481function toRadians(degrees) {
15482  return degrees * (PI / 180);
15483}
15484function toDegrees(radians) {
15485  return radians * (180 / PI);
15486}
15487function _decimalPlaces(x) {
15488  if (!isNumberFinite(x)) {
15489    return;
15490  }
15491  let e = 1;
15492  let p = 0;
15493  while (Math.round(x * e) / e !== x) {
15494    e *= 10;
15495    p++;
15496  }
15497  return p;
15498}
15499function getAngleFromPoint(centrePoint, anglePoint) {
15500  const distanceFromXCenter = anglePoint.x - centrePoint.x;
15501  const distanceFromYCenter = anglePoint.y - centrePoint.y;
15502  const radialDistanceFromCenter = Math.sqrt(distanceFromXCenter * distanceFromXCenter + distanceFromYCenter * distanceFromYCenter);
15503  let angle = Math.atan2(distanceFromYCenter, distanceFromXCenter);
15504  if (angle < (-0.5 * PI)) {
15505    angle += TAU;
15506  }
15507  return {
15508    angle,
15509    distance: radialDistanceFromCenter
15510  };
15511}
15512function distanceBetweenPoints(pt1, pt2) {
15513  return Math.sqrt(Math.pow(pt2.x - pt1.x, 2) + Math.pow(pt2.y - pt1.y, 2));
15514}
15515function _angleDiff(a, b) {
15516  return (a - b + PITAU) % TAU - PI;
15517}
15518function _normalizeAngle(a) {
15519  return (a % TAU + TAU) % TAU;
15520}
15521function _angleBetween(angle, start, end, sameAngleIsFullCircle) {
15522  const a = _normalizeAngle(angle);
15523  const s = _normalizeAngle(start);
15524  const e = _normalizeAngle(end);
15525  const angleToStart = _normalizeAngle(s - a);
15526  const angleToEnd = _normalizeAngle(e - a);
15527  const startToAngle = _normalizeAngle(a - s);
15528  const endToAngle = _normalizeAngle(a - e);
15529  return a === s || a === e || (sameAngleIsFullCircle && s === e)
15530    || (angleToStart > angleToEnd && startToAngle < endToAngle);
15531}
15532function _limitValue(value, min, max) {
15533  return Math.max(min, Math.min(max, value));
15534}
15535function _int16Range(value) {
15536  return _limitValue(value, -32768, 32767);
15537}
15538function _isBetween(value, start, end, epsilon = 1e-6) {
15539  return value >= Math.min(start, end) - epsilon && value <= Math.max(start, end) + epsilon;
15540}
15541
15542function _lookup(table, value, cmp) {
15543  cmp = cmp || ((index) => table[index] < value);
15544  let hi = table.length - 1;
15545  let lo = 0;
15546  let mid;
15547  while (hi - lo > 1) {
15548    mid = (lo + hi) >> 1;
15549    if (cmp(mid)) {
15550      lo = mid;
15551    } else {
15552      hi = mid;
15553    }
15554  }
15555  return {lo, hi};
15556}
15557const _lookupByKey = (table, key, value, last) =>
15558  _lookup(table, value, last
15559    ? index => table[index][key] <= value
15560    : index => table[index][key] < value);
15561const _rlookupByKey = (table, key, value) =>
15562  _lookup(table, value, index => table[index][key] >= value);
15563function _filterBetween(values, min, max) {
15564  let start = 0;
15565  let end = values.length;
15566  while (start < end && values[start] < min) {
15567    start++;
15568  }
15569  while (end > start && values[end - 1] > max) {
15570    end--;
15571  }
15572  return start > 0 || end < values.length
15573    ? values.slice(start, end)
15574    : values;
15575}
15576const arrayEvents = ['push', 'pop', 'shift', 'splice', 'unshift'];
15577function listenArrayEvents(array, listener) {
15578  if (array._chartjs) {
15579    array._chartjs.listeners.push(listener);
15580    return;
15581  }
15582  Object.defineProperty(array, '_chartjs', {
15583    configurable: true,
15584    enumerable: false,
15585    value: {
15586      listeners: [listener]
15587    }
15588  });
15589  arrayEvents.forEach((key) => {
15590    const method = '_onData' + _capitalize(key);
15591    const base = array[key];
15592    Object.defineProperty(array, key, {
15593      configurable: true,
15594      enumerable: false,
15595      value(...args) {
15596        const res = base.apply(this, args);
15597        array._chartjs.listeners.forEach((object) => {
15598          if (typeof object[method] === 'function') {
15599            object[method](...args);
15600          }
15601        });
15602        return res;
15603      }
15604    });
15605  });
15606}
15607function unlistenArrayEvents(array, listener) {
15608  const stub = array._chartjs;
15609  if (!stub) {
15610    return;
15611  }
15612  const listeners = stub.listeners;
15613  const index = listeners.indexOf(listener);
15614  if (index !== -1) {
15615    listeners.splice(index, 1);
15616  }
15617  if (listeners.length > 0) {
15618    return;
15619  }
15620  arrayEvents.forEach((key) => {
15621    delete array[key];
15622  });
15623  delete array._chartjs;
15624}
15625function _arrayUnique(items) {
15626  const set = new Set();
15627  let i, ilen;
15628  for (i = 0, ilen = items.length; i < ilen; ++i) {
15629    set.add(items[i]);
15630  }
15631  if (set.size === ilen) {
15632    return items;
15633  }
15634  return Array.from(set);
15635}
15636
15637function fontString(pixelSize, fontStyle, fontFamily) {
15638  return fontStyle + ' ' + pixelSize + 'px ' + fontFamily;
15639}
15640const requestAnimFrame = (function() {
15641  if (typeof window === 'undefined') {
15642    return function(callback) {
15643      return callback();
15644    };
15645  }
15646  return window.requestAnimationFrame;
15647}());
15648function throttled(fn, thisArg, updateFn) {
15649  const updateArgs = updateFn || ((args) => Array.prototype.slice.call(args));
15650  let ticking = false;
15651  let args = [];
15652  return function(...rest) {
15653    args = updateArgs(rest);
15654    if (!ticking) {
15655      ticking = true;
15656      requestAnimFrame.call(window, () => {
15657        ticking = false;
15658        fn.apply(thisArg, args);
15659      });
15660    }
15661  };
15662}
15663function debounce(fn, delay) {
15664  let timeout;
15665  return function(...args) {
15666    if (delay) {
15667      clearTimeout(timeout);
15668      timeout = setTimeout(fn, delay, args);
15669    } else {
15670      fn.apply(this, args);
15671    }
15672    return delay;
15673  };
15674}
15675const _toLeftRightCenter = (align) => align === 'start' ? 'left' : align === 'end' ? 'right' : 'center';
15676const _alignStartEnd = (align, start, end) => align === 'start' ? start : align === 'end' ? end : (start + end) / 2;
15677const _textX = (align, left, right, rtl) => {
15678  const check = rtl ? 'left' : 'right';
15679  return align === check ? right : align === 'center' ? (left + right) / 2 : left;
15680};
15681function _getStartAndCountOfVisiblePoints(meta, points, animationsDisabled) {
15682  const pointCount = points.length;
15683  let start = 0;
15684  let count = pointCount;
15685  if (meta._sorted) {
15686    const {iScale, _parsed} = meta;
15687    const axis = iScale.axis;
15688    const {min, max, minDefined, maxDefined} = iScale.getUserBounds();
15689    if (minDefined) {
15690      start = _limitValue(Math.min(
15691        _lookupByKey(_parsed, iScale.axis, min).lo,
15692        animationsDisabled ? pointCount : _lookupByKey(points, axis, iScale.getPixelForValue(min)).lo),
15693      0, pointCount - 1);
15694    }
15695    if (maxDefined) {
15696      count = _limitValue(Math.max(
15697        _lookupByKey(_parsed, iScale.axis, max, true).hi + 1,
15698        animationsDisabled ? 0 : _lookupByKey(points, axis, iScale.getPixelForValue(max), true).hi + 1),
15699      start, pointCount) - start;
15700    } else {
15701      count = pointCount - start;
15702    }
15703  }
15704  return {start, count};
15705}
15706function _scaleRangesChanged(meta) {
15707  const {xScale, yScale, _scaleRanges} = meta;
15708  const newRanges = {
15709    xmin: xScale.min,
15710    xmax: xScale.max,
15711    ymin: yScale.min,
15712    ymax: yScale.max
15713  };
15714  if (!_scaleRanges) {
15715    meta._scaleRanges = newRanges;
15716    return true;
15717  }
15718  const changed = _scaleRanges.xmin !== xScale.min
15719		|| _scaleRanges.xmax !== xScale.max
15720		|| _scaleRanges.ymin !== yScale.min
15721		|| _scaleRanges.ymax !== yScale.max;
15722  Object.assign(_scaleRanges, newRanges);
15723  return changed;
15724}
15725
15726const atEdge = (t) => t === 0 || t === 1;
15727const elasticIn = (t, s, p) => -(Math.pow(2, 10 * (t -= 1)) * Math.sin((t - s) * TAU / p));
15728const elasticOut = (t, s, p) => Math.pow(2, -10 * t) * Math.sin((t - s) * TAU / p) + 1;
15729const effects = {
15730  linear: t => t,
15731  easeInQuad: t => t * t,
15732  easeOutQuad: t => -t * (t - 2),
15733  easeInOutQuad: t => ((t /= 0.5) < 1)
15734    ? 0.5 * t * t
15735    : -0.5 * ((--t) * (t - 2) - 1),
15736  easeInCubic: t => t * t * t,
15737  easeOutCubic: t => (t -= 1) * t * t + 1,
15738  easeInOutCubic: t => ((t /= 0.5) < 1)
15739    ? 0.5 * t * t * t
15740    : 0.5 * ((t -= 2) * t * t + 2),
15741  easeInQuart: t => t * t * t * t,
15742  easeOutQuart: t => -((t -= 1) * t * t * t - 1),
15743  easeInOutQuart: t => ((t /= 0.5) < 1)
15744    ? 0.5 * t * t * t * t
15745    : -0.5 * ((t -= 2) * t * t * t - 2),
15746  easeInQuint: t => t * t * t * t * t,
15747  easeOutQuint: t => (t -= 1) * t * t * t * t + 1,
15748  easeInOutQuint: t => ((t /= 0.5) < 1)
15749    ? 0.5 * t * t * t * t * t
15750    : 0.5 * ((t -= 2) * t * t * t * t + 2),
15751  easeInSine: t => -Math.cos(t * HALF_PI) + 1,
15752  easeOutSine: t => Math.sin(t * HALF_PI),
15753  easeInOutSine: t => -0.5 * (Math.cos(PI * t) - 1),
15754  easeInExpo: t => (t === 0) ? 0 : Math.pow(2, 10 * (t - 1)),
15755  easeOutExpo: t => (t === 1) ? 1 : -Math.pow(2, -10 * t) + 1,
15756  easeInOutExpo: t => atEdge(t) ? t : t < 0.5
15757    ? 0.5 * Math.pow(2, 10 * (t * 2 - 1))
15758    : 0.5 * (-Math.pow(2, -10 * (t * 2 - 1)) + 2),
15759  easeInCirc: t => (t >= 1) ? t : -(Math.sqrt(1 - t * t) - 1),
15760  easeOutCirc: t => Math.sqrt(1 - (t -= 1) * t),
15761  easeInOutCirc: t => ((t /= 0.5) < 1)
15762    ? -0.5 * (Math.sqrt(1 - t * t) - 1)
15763    : 0.5 * (Math.sqrt(1 - (t -= 2) * t) + 1),
15764  easeInElastic: t => atEdge(t) ? t : elasticIn(t, 0.075, 0.3),
15765  easeOutElastic: t => atEdge(t) ? t : elasticOut(t, 0.075, 0.3),
15766  easeInOutElastic(t) {
15767    const s = 0.1125;
15768    const p = 0.45;
15769    return atEdge(t) ? t :
15770      t < 0.5
15771        ? 0.5 * elasticIn(t * 2, s, p)
15772        : 0.5 + 0.5 * elasticOut(t * 2 - 1, s, p);
15773  },
15774  easeInBack(t) {
15775    const s = 1.70158;
15776    return t * t * ((s + 1) * t - s);
15777  },
15778  easeOutBack(t) {
15779    const s = 1.70158;
15780    return (t -= 1) * t * ((s + 1) * t + s) + 1;
15781  },
15782  easeInOutBack(t) {
15783    let s = 1.70158;
15784    if ((t /= 0.5) < 1) {
15785      return 0.5 * (t * t * (((s *= (1.525)) + 1) * t - s));
15786    }
15787    return 0.5 * ((t -= 2) * t * (((s *= (1.525)) + 1) * t + s) + 2);
15788  },
15789  easeInBounce: t => 1 - effects.easeOutBounce(1 - t),
15790  easeOutBounce(t) {
15791    const m = 7.5625;
15792    const d = 2.75;
15793    if (t < (1 / d)) {
15794      return m * t * t;
15795    }
15796    if (t < (2 / d)) {
15797      return m * (t -= (1.5 / d)) * t + 0.75;
15798    }
15799    if (t < (2.5 / d)) {
15800      return m * (t -= (2.25 / d)) * t + 0.9375;
15801    }
15802    return m * (t -= (2.625 / d)) * t + 0.984375;
15803  },
15804  easeInOutBounce: t => (t < 0.5)
15805    ? effects.easeInBounce(t * 2) * 0.5
15806    : effects.easeOutBounce(t * 2 - 1) * 0.5 + 0.5,
15807};
15808
15809/*!
15810 * @kurkle/color v0.2.1
15811 * https://github.com/kurkle/color#readme
15812 * (c) 2022 Jukka Kurkela
15813 * Released under the MIT License
15814 */
15815function round(v) {
15816  return v + 0.5 | 0;
15817}
15818const lim = (v, l, h) => Math.max(Math.min(v, h), l);
15819function p2b(v) {
15820  return lim(round(v * 2.55), 0, 255);
15821}
15822function n2b(v) {
15823  return lim(round(v * 255), 0, 255);
15824}
15825function b2n(v) {
15826  return lim(round(v / 2.55) / 100, 0, 1);
15827}
15828function n2p(v) {
15829  return lim(round(v * 100), 0, 100);
15830}
15831const map$1 = {0: 0, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 6, 7: 7, 8: 8, 9: 9, A: 10, B: 11, C: 12, D: 13, E: 14, F: 15, a: 10, b: 11, c: 12, d: 13, e: 14, f: 15};
15832const hex = [...'0123456789ABCDEF'];
15833const h1 = b => hex[b & 0xF];
15834const h2 = b => hex[(b & 0xF0) >> 4] + hex[b & 0xF];
15835const eq = b => ((b & 0xF0) >> 4) === (b & 0xF);
15836const isShort = v => eq(v.r) && eq(v.g) && eq(v.b) && eq(v.a);
15837function hexParse(str) {
15838  var len = str.length;
15839  var ret;
15840  if (str[0] === '#') {
15841    if (len === 4 || len === 5) {
15842      ret = {
15843        r: 255 & map$1[str[1]] * 17,
15844        g: 255 & map$1[str[2]] * 17,
15845        b: 255 & map$1[str[3]] * 17,
15846        a: len === 5 ? map$1[str[4]] * 17 : 255
15847      };
15848    } else if (len === 7 || len === 9) {
15849      ret = {
15850        r: map$1[str[1]] << 4 | map$1[str[2]],
15851        g: map$1[str[3]] << 4 | map$1[str[4]],
15852        b: map$1[str[5]] << 4 | map$1[str[6]],
15853        a: len === 9 ? (map$1[str[7]] << 4 | map$1[str[8]]) : 255
15854      };
15855    }
15856  }
15857  return ret;
15858}
15859const alpha = (a, f) => a < 255 ? f(a) : '';
15860function hexString(v) {
15861  var f = isShort(v) ? h1 : h2;
15862  return v
15863    ? '#' + f(v.r) + f(v.g) + f(v.b) + alpha(v.a, f)
15864    : undefined;
15865}
15866const HUE_RE = /^(hsla?|hwb|hsv)\(\s*([-+.e\d]+)(?:deg)?[\s,]+([-+.e\d]+)%[\s,]+([-+.e\d]+)%(?:[\s,]+([-+.e\d]+)(%)?)?\s*\)$/;
15867function hsl2rgbn(h, s, l) {
15868  const a = s * Math.min(l, 1 - l);
15869  const f = (n, k = (n + h / 30) % 12) => l - a * Math.max(Math.min(k - 3, 9 - k, 1), -1);
15870  return [f(0), f(8), f(4)];
15871}
15872function hsv2rgbn(h, s, v) {
15873  const f = (n, k = (n + h / 60) % 6) => v - v * s * Math.max(Math.min(k, 4 - k, 1), 0);
15874  return [f(5), f(3), f(1)];
15875}
15876function hwb2rgbn(h, w, b) {
15877  const rgb = hsl2rgbn(h, 1, 0.5);
15878  let i;
15879  if (w + b > 1) {
15880    i = 1 / (w + b);
15881    w *= i;
15882    b *= i;
15883  }
15884  for (i = 0; i < 3; i++) {
15885    rgb[i] *= 1 - w - b;
15886    rgb[i] += w;
15887  }
15888  return rgb;
15889}
15890function hueValue(r, g, b, d, max) {
15891  if (r === max) {
15892    return ((g - b) / d) + (g < b ? 6 : 0);
15893  }
15894  if (g === max) {
15895    return (b - r) / d + 2;
15896  }
15897  return (r - g) / d + 4;
15898}
15899function rgb2hsl(v) {
15900  const range = 255;
15901  const r = v.r / range;
15902  const g = v.g / range;
15903  const b = v.b / range;
15904  const max = Math.max(r, g, b);
15905  const min = Math.min(r, g, b);
15906  const l = (max + min) / 2;
15907  let h, s, d;
15908  if (max !== min) {
15909    d = max - min;
15910    s = l > 0.5 ? d / (2 - max - min) : d / (max + min);
15911    h = hueValue(r, g, b, d, max);
15912    h = h * 60 + 0.5;
15913  }
15914  return [h | 0, s || 0, l];
15915}
15916function calln(f, a, b, c) {
15917  return (
15918    Array.isArray(a)
15919      ? f(a[0], a[1], a[2])
15920      : f(a, b, c)
15921  ).map(n2b);
15922}
15923function hsl2rgb(h, s, l) {
15924  return calln(hsl2rgbn, h, s, l);
15925}
15926function hwb2rgb(h, w, b) {
15927  return calln(hwb2rgbn, h, w, b);
15928}
15929function hsv2rgb(h, s, v) {
15930  return calln(hsv2rgbn, h, s, v);
15931}
15932function hue(h) {
15933  return (h % 360 + 360) % 360;
15934}
15935function hueParse(str) {
15936  const m = HUE_RE.exec(str);
15937  let a = 255;
15938  let v;
15939  if (!m) {
15940    return;
15941  }
15942  if (m[5] !== v) {
15943    a = m[6] ? p2b(+m[5]) : n2b(+m[5]);
15944  }
15945  const h = hue(+m[2]);
15946  const p1 = +m[3] / 100;
15947  const p2 = +m[4] / 100;
15948  if (m[1] === 'hwb') {
15949    v = hwb2rgb(h, p1, p2);
15950  } else if (m[1] === 'hsv') {
15951    v = hsv2rgb(h, p1, p2);
15952  } else {
15953    v = hsl2rgb(h, p1, p2);
15954  }
15955  return {
15956    r: v[0],
15957    g: v[1],
15958    b: v[2],
15959    a: a
15960  };
15961}
15962function rotate(v, deg) {
15963  var h = rgb2hsl(v);
15964  h[0] = hue(h[0] + deg);
15965  h = hsl2rgb(h);
15966  v.r = h[0];
15967  v.g = h[1];
15968  v.b = h[2];
15969}
15970function hslString(v) {
15971  if (!v) {
15972    return;
15973  }
15974  const a = rgb2hsl(v);
15975  const h = a[0];
15976  const s = n2p(a[1]);
15977  const l = n2p(a[2]);
15978  return v.a < 255
15979    ? `hsla(${h}, ${s}%, ${l}%, ${b2n(v.a)})`
15980    : `hsl(${h}, ${s}%, ${l}%)`;
15981}
15982const map = {
15983  x: 'dark',
15984  Z: 'light',
15985  Y: 're',
15986  X: 'blu',
15987  W: 'gr',
15988  V: 'medium',
15989  U: 'slate',
15990  A: 'ee',
15991  T: 'ol',
15992  S: 'or',
15993  B: 'ra',
15994  C: 'lateg',
15995  D: 'ights',
15996  R: 'in',
15997  Q: 'turquois',
15998  E: 'hi',
15999  P: 'ro',
16000  O: 'al',
16001  N: 'le',
16002  M: 'de',
16003  L: 'yello',
16004  F: 'en',
16005  K: 'ch',
16006  G: 'arks',
16007  H: 'ea',
16008  I: 'ightg',
16009  J: 'wh'
16010};
16011const names$1 = {
16012  OiceXe: 'f0f8ff',
16013  antiquewEte: 'faebd7',
16014  aqua: 'ffff',
16015  aquamarRe: '7fffd4',
16016  azuY: 'f0ffff',
16017  beige: 'f5f5dc',
16018  bisque: 'ffe4c4',
16019  black: '0',
16020  blanKedOmond: 'ffebcd',
16021  Xe: 'ff',
16022  XeviTet: '8a2be2',
16023  bPwn: 'a52a2a',
16024  burlywood: 'deb887',
16025  caMtXe: '5f9ea0',
16026  KartYuse: '7fff00',
16027  KocTate: 'd2691e',
16028  cSO: 'ff7f50',
16029  cSnflowerXe: '6495ed',
16030  cSnsilk: 'fff8dc',
16031  crimson: 'dc143c',
16032  cyan: 'ffff',
16033  xXe: '8b',
16034  xcyan: '8b8b',
16035  xgTMnPd: 'b8860b',
16036  xWay: 'a9a9a9',
16037  xgYF: '6400',
16038  xgYy: 'a9a9a9',
16039  xkhaki: 'bdb76b',
16040  xmagFta: '8b008b',
16041  xTivegYF: '556b2f',
16042  xSange: 'ff8c00',
16043  xScEd: '9932cc',
16044  xYd: '8b0000',
16045  xsOmon: 'e9967a',
16046  xsHgYF: '8fbc8f',
16047  xUXe: '483d8b',
16048  xUWay: '2f4f4f',
16049  xUgYy: '2f4f4f',
16050  xQe: 'ced1',
16051  xviTet: '9400d3',
16052  dAppRk: 'ff1493',
16053  dApskyXe: 'bfff',
16054  dimWay: '696969',
16055  dimgYy: '696969',
16056  dodgerXe: '1e90ff',
16057  fiYbrick: 'b22222',
16058  flSOwEte: 'fffaf0',
16059  foYstWAn: '228b22',
16060  fuKsia: 'ff00ff',
16061  gaRsbSo: 'dcdcdc',
16062  ghostwEte: 'f8f8ff',
16063  gTd: 'ffd700',
16064  gTMnPd: 'daa520',
16065  Way: '808080',
16066  gYF: '8000',
16067  gYFLw: 'adff2f',
16068  gYy: '808080',
16069  honeyMw: 'f0fff0',
16070  hotpRk: 'ff69b4',
16071  RdianYd: 'cd5c5c',
16072  Rdigo: '4b0082',
16073  ivSy: 'fffff0',
16074  khaki: 'f0e68c',
16075  lavFMr: 'e6e6fa',
16076  lavFMrXsh: 'fff0f5',
16077  lawngYF: '7cfc00',
16078  NmoncEffon: 'fffacd',
16079  ZXe: 'add8e6',
16080  ZcSO: 'f08080',
16081  Zcyan: 'e0ffff',
16082  ZgTMnPdLw: 'fafad2',
16083  ZWay: 'd3d3d3',
16084  ZgYF: '90ee90',
16085  ZgYy: 'd3d3d3',
16086  ZpRk: 'ffb6c1',
16087  ZsOmon: 'ffa07a',
16088  ZsHgYF: '20b2aa',
16089  ZskyXe: '87cefa',
16090  ZUWay: '778899',
16091  ZUgYy: '778899',
16092  ZstAlXe: 'b0c4de',
16093  ZLw: 'ffffe0',
16094  lime: 'ff00',
16095  limegYF: '32cd32',
16096  lRF: 'faf0e6',
16097  magFta: 'ff00ff',
16098  maPon: '800000',
16099  VaquamarRe: '66cdaa',
16100  VXe: 'cd',
16101  VScEd: 'ba55d3',
16102  VpurpN: '9370db',
16103  VsHgYF: '3cb371',
16104  VUXe: '7b68ee',
16105  VsprRggYF: 'fa9a',
16106  VQe: '48d1cc',
16107  VviTetYd: 'c71585',
16108  midnightXe: '191970',
16109  mRtcYam: 'f5fffa',
16110  mistyPse: 'ffe4e1',
16111  moccasR: 'ffe4b5',
16112  navajowEte: 'ffdead',
16113  navy: '80',
16114  Tdlace: 'fdf5e6',
16115  Tive: '808000',
16116  TivedBb: '6b8e23',
16117  Sange: 'ffa500',
16118  SangeYd: 'ff4500',
16119  ScEd: 'da70d6',
16120  pOegTMnPd: 'eee8aa',
16121  pOegYF: '98fb98',
16122  pOeQe: 'afeeee',
16123  pOeviTetYd: 'db7093',
16124  papayawEp: 'ffefd5',
16125  pHKpuff: 'ffdab9',
16126  peru: 'cd853f',
16127  pRk: 'ffc0cb',
16128  plum: 'dda0dd',
16129  powMrXe: 'b0e0e6',
16130  purpN: '800080',
16131  YbeccapurpN: '663399',
16132  Yd: 'ff0000',
16133  Psybrown: 'bc8f8f',
16134  PyOXe: '4169e1',
16135  saddNbPwn: '8b4513',
16136  sOmon: 'fa8072',
16137  sandybPwn: 'f4a460',
16138  sHgYF: '2e8b57',
16139  sHshell: 'fff5ee',
16140  siFna: 'a0522d',
16141  silver: 'c0c0c0',
16142  skyXe: '87ceeb',
16143  UXe: '6a5acd',
16144  UWay: '708090',
16145  UgYy: '708090',
16146  snow: 'fffafa',
16147  sprRggYF: 'ff7f',
16148  stAlXe: '4682b4',
16149  tan: 'd2b48c',
16150  teO: '8080',
16151  tEstN: 'd8bfd8',
16152  tomato: 'ff6347',
16153  Qe: '40e0d0',
16154  viTet: 'ee82ee',
16155  JHt: 'f5deb3',
16156  wEte: 'ffffff',
16157  wEtesmoke: 'f5f5f5',
16158  Lw: 'ffff00',
16159  LwgYF: '9acd32'
16160};
16161function unpack() {
16162  const unpacked = {};
16163  const keys = Object.keys(names$1);
16164  const tkeys = Object.keys(map);
16165  let i, j, k, ok, nk;
16166  for (i = 0; i < keys.length; i++) {
16167    ok = nk = keys[i];
16168    for (j = 0; j < tkeys.length; j++) {
16169      k = tkeys[j];
16170      nk = nk.replace(k, map[k]);
16171    }
16172    k = parseInt(names$1[ok], 16);
16173    unpacked[nk] = [k >> 16 & 0xFF, k >> 8 & 0xFF, k & 0xFF];
16174  }
16175  return unpacked;
16176}
16177let names;
16178function nameParse(str) {
16179  if (!names) {
16180    names = unpack();
16181    names.transparent = [0, 0, 0, 0];
16182  }
16183  const a = names[str.toLowerCase()];
16184  return a && {
16185    r: a[0],
16186    g: a[1],
16187    b: a[2],
16188    a: a.length === 4 ? a[3] : 255
16189  };
16190}
16191const RGB_RE = /^rgba?\(\s*([-+.\d]+)(%)?[\s,]+([-+.e\d]+)(%)?[\s,]+([-+.e\d]+)(%)?(?:[\s,/]+([-+.e\d]+)(%)?)?\s*\)$/;
16192function rgbParse(str) {
16193  const m = RGB_RE.exec(str);
16194  let a = 255;
16195  let r, g, b;
16196  if (!m) {
16197    return;
16198  }
16199  if (m[7] !== r) {
16200    const v = +m[7];
16201    a = m[8] ? p2b(v) : lim(v * 255, 0, 255);
16202  }
16203  r = +m[1];
16204  g = +m[3];
16205  b = +m[5];
16206  r = 255 & (m[2] ? p2b(r) : lim(r, 0, 255));
16207  g = 255 & (m[4] ? p2b(g) : lim(g, 0, 255));
16208  b = 255 & (m[6] ? p2b(b) : lim(b, 0, 255));
16209  return {
16210    r: r,
16211    g: g,
16212    b: b,
16213    a: a
16214  };
16215}
16216function rgbString(v) {
16217  return v && (
16218    v.a < 255
16219      ? `rgba(${v.r}, ${v.g}, ${v.b}, ${b2n(v.a)})`
16220      : `rgb(${v.r}, ${v.g}, ${v.b})`
16221  );
16222}
16223const to = v => v <= 0.0031308 ? v * 12.92 : Math.pow(v, 1.0 / 2.4) * 1.055 - 0.055;
16224const from = v => v <= 0.04045 ? v / 12.92 : Math.pow((v + 0.055) / 1.055, 2.4);
16225function interpolate(rgb1, rgb2, t) {
16226  const r = from(b2n(rgb1.r));
16227  const g = from(b2n(rgb1.g));
16228  const b = from(b2n(rgb1.b));
16229  return {
16230    r: n2b(to(r + t * (from(b2n(rgb2.r)) - r))),
16231    g: n2b(to(g + t * (from(b2n(rgb2.g)) - g))),
16232    b: n2b(to(b + t * (from(b2n(rgb2.b)) - b))),
16233    a: rgb1.a + t * (rgb2.a - rgb1.a)
16234  };
16235}
16236function modHSL(v, i, ratio) {
16237  if (v) {
16238    let tmp = rgb2hsl(v);
16239    tmp[i] = Math.max(0, Math.min(tmp[i] + tmp[i] * ratio, i === 0 ? 360 : 1));
16240    tmp = hsl2rgb(tmp);
16241    v.r = tmp[0];
16242    v.g = tmp[1];
16243    v.b = tmp[2];
16244  }
16245}
16246function clone(v, proto) {
16247  return v ? Object.assign(proto || {}, v) : v;
16248}
16249function fromObject(input) {
16250  var v = {r: 0, g: 0, b: 0, a: 255};
16251  if (Array.isArray(input)) {
16252    if (input.length >= 3) {
16253      v = {r: input[0], g: input[1], b: input[2], a: 255};
16254      if (input.length > 3) {
16255        v.a = n2b(input[3]);
16256      }
16257    }
16258  } else {
16259    v = clone(input, {r: 0, g: 0, b: 0, a: 1});
16260    v.a = n2b(v.a);
16261  }
16262  return v;
16263}
16264function functionParse(str) {
16265  if (str.charAt(0) === 'r') {
16266    return rgbParse(str);
16267  }
16268  return hueParse(str);
16269}
16270class Color {
16271  constructor(input) {
16272    if (input instanceof Color) {
16273      return input;
16274    }
16275    const type = typeof input;
16276    let v;
16277    if (type === 'object') {
16278      v = fromObject(input);
16279    } else if (type === 'string') {
16280      v = hexParse(input) || nameParse(input) || functionParse(input);
16281    }
16282    this._rgb = v;
16283    this._valid = !!v;
16284  }
16285  get valid() {
16286    return this._valid;
16287  }
16288  get rgb() {
16289    var v = clone(this._rgb);
16290    if (v) {
16291      v.a = b2n(v.a);
16292    }
16293    return v;
16294  }
16295  set rgb(obj) {
16296    this._rgb = fromObject(obj);
16297  }
16298  rgbString() {
16299    return this._valid ? rgbString(this._rgb) : undefined;
16300  }
16301  hexString() {
16302    return this._valid ? hexString(this._rgb) : undefined;
16303  }
16304  hslString() {
16305    return this._valid ? hslString(this._rgb) : undefined;
16306  }
16307  mix(color, weight) {
16308    if (color) {
16309      const c1 = this.rgb;
16310      const c2 = color.rgb;
16311      let w2;
16312      const p = weight === w2 ? 0.5 : weight;
16313      const w = 2 * p - 1;
16314      const a = c1.a - c2.a;
16315      const w1 = ((w * a === -1 ? w : (w + a) / (1 + w * a)) + 1) / 2.0;
16316      w2 = 1 - w1;
16317      c1.r = 0xFF & w1 * c1.r + w2 * c2.r + 0.5;
16318      c1.g = 0xFF & w1 * c1.g + w2 * c2.g + 0.5;
16319      c1.b = 0xFF & w1 * c1.b + w2 * c2.b + 0.5;
16320      c1.a = p * c1.a + (1 - p) * c2.a;
16321      this.rgb = c1;
16322    }
16323    return this;
16324  }
16325  interpolate(color, t) {
16326    if (color) {
16327      this._rgb = interpolate(this._rgb, color._rgb, t);
16328    }
16329    return this;
16330  }
16331  clone() {
16332    return new Color(this.rgb);
16333  }
16334  alpha(a) {
16335    this._rgb.a = n2b(a);
16336    return this;
16337  }
16338  clearer(ratio) {
16339    const rgb = this._rgb;
16340    rgb.a *= 1 - ratio;
16341    return this;
16342  }
16343  greyscale() {
16344    const rgb = this._rgb;
16345    const val = round(rgb.r * 0.3 + rgb.g * 0.59 + rgb.b * 0.11);
16346    rgb.r = rgb.g = rgb.b = val;
16347    return this;
16348  }
16349  opaquer(ratio) {
16350    const rgb = this._rgb;
16351    rgb.a *= 1 + ratio;
16352    return this;
16353  }
16354  negate() {
16355    const v = this._rgb;
16356    v.r = 255 - v.r;
16357    v.g = 255 - v.g;
16358    v.b = 255 - v.b;
16359    return this;
16360  }
16361  lighten(ratio) {
16362    modHSL(this._rgb, 2, ratio);
16363    return this;
16364  }
16365  darken(ratio) {
16366    modHSL(this._rgb, 2, -ratio);
16367    return this;
16368  }
16369  saturate(ratio) {
16370    modHSL(this._rgb, 1, ratio);
16371    return this;
16372  }
16373  desaturate(ratio) {
16374    modHSL(this._rgb, 1, -ratio);
16375    return this;
16376  }
16377  rotate(deg) {
16378    rotate(this._rgb, deg);
16379    return this;
16380  }
16381}
16382function index_esm(input) {
16383  return new Color(input);
16384}
16385
16386function isPatternOrGradient(value) {
16387  if (value && typeof value === 'object') {
16388    const type = value.toString();
16389    return type === '[object CanvasPattern]' || type === '[object CanvasGradient]';
16390  }
16391  return false;
16392}
16393function color(value) {
16394  return isPatternOrGradient(value) ? value : index_esm(value);
16395}
16396function getHoverColor(value) {
16397  return isPatternOrGradient(value)
16398    ? value
16399    : index_esm(value).saturate(0.5).darken(0.1).hexString();
16400}
16401
16402const overrides = Object.create(null);
16403const descriptors = Object.create(null);
16404function getScope$1(node, key) {
16405  if (!key) {
16406    return node;
16407  }
16408  const keys = key.split('.');
16409  for (let i = 0, n = keys.length; i < n; ++i) {
16410    const k = keys[i];
16411    node = node[k] || (node[k] = Object.create(null));
16412  }
16413  return node;
16414}
16415function set(root, scope, values) {
16416  if (typeof scope === 'string') {
16417    return merge(getScope$1(root, scope), values);
16418  }
16419  return merge(getScope$1(root, ''), scope);
16420}
16421class Defaults {
16422  constructor(_descriptors) {
16423    this.animation = undefined;
16424    this.backgroundColor = 'rgba(0,0,0,0.1)';
16425    this.borderColor = 'rgba(0,0,0,0.1)';
16426    this.color = '#666';
16427    this.datasets = {};
16428    this.devicePixelRatio = (context) => context.chart.platform.getDevicePixelRatio();
16429    this.elements = {};
16430    this.events = [
16431      'mousemove',
16432      'mouseout',
16433      'click',
16434      'touchstart',
16435      'touchmove'
16436    ];
16437    this.font = {
16438      family: "'Helvetica Neue', 'Helvetica', 'Arial', sans-serif",
16439      size: 12,
16440      style: 'normal',
16441      lineHeight: 1.2,
16442      weight: null
16443    };
16444    this.hover = {};
16445    this.hoverBackgroundColor = (ctx, options) => getHoverColor(options.backgroundColor);
16446    this.hoverBorderColor = (ctx, options) => getHoverColor(options.borderColor);
16447    this.hoverColor = (ctx, options) => getHoverColor(options.color);
16448    this.indexAxis = 'x';
16449    this.interaction = {
16450      mode: 'nearest',
16451      intersect: true,
16452      includeInvisible: false
16453    };
16454    this.maintainAspectRatio = true;
16455    this.onHover = null;
16456    this.onClick = null;
16457    this.parsing = true;
16458    this.plugins = {};
16459    this.responsive = true;
16460    this.scale = undefined;
16461    this.scales = {};
16462    this.showLine = true;
16463    this.drawActiveElementsOnTop = true;
16464    this.describe(_descriptors);
16465  }
16466  set(scope, values) {
16467    return set(this, scope, values);
16468  }
16469  get(scope) {
16470    return getScope$1(this, scope);
16471  }
16472  describe(scope, values) {
16473    return set(descriptors, scope, values);
16474  }
16475  override(scope, values) {
16476    return set(overrides, scope, values);
16477  }
16478  route(scope, name, targetScope, targetName) {
16479    const scopeObject = getScope$1(this, scope);
16480    const targetScopeObject = getScope$1(this, targetScope);
16481    const privateName = '_' + name;
16482    Object.defineProperties(scopeObject, {
16483      [privateName]: {
16484        value: scopeObject[name],
16485        writable: true
16486      },
16487      [name]: {
16488        enumerable: true,
16489        get() {
16490          const local = this[privateName];
16491          const target = targetScopeObject[targetName];
16492          if (isObject(local)) {
16493            return Object.assign({}, target, local);
16494          }
16495          return valueOrDefault(local, target);
16496        },
16497        set(value) {
16498          this[privateName] = value;
16499        }
16500      }
16501    });
16502  }
16503}
16504var defaults = new Defaults({
16505  _scriptable: (name) => !name.startsWith('on'),
16506  _indexable: (name) => name !== 'events',
16507  hover: {
16508    _fallback: 'interaction'
16509  },
16510  interaction: {
16511    _scriptable: false,
16512    _indexable: false,
16513  }
16514});
16515
16516function toFontString(font) {
16517  if (!font || isNullOrUndef(font.size) || isNullOrUndef(font.family)) {
16518    return null;
16519  }
16520  return (font.style ? font.style + ' ' : '')
16521		+ (font.weight ? font.weight + ' ' : '')
16522		+ font.size + 'px '
16523		+ font.family;
16524}
16525function _measureText(ctx, data, gc, longest, string) {
16526  let textWidth = data[string];
16527  if (!textWidth) {
16528    textWidth = data[string] = ctx.measureText(string).width;
16529    gc.push(string);
16530  }
16531  if (textWidth > longest) {
16532    longest = textWidth;
16533  }
16534  return longest;
16535}
16536function _longestText(ctx, font, arrayOfThings, cache) {
16537  cache = cache || {};
16538  let data = cache.data = cache.data || {};
16539  let gc = cache.garbageCollect = cache.garbageCollect || [];
16540  if (cache.font !== font) {
16541    data = cache.data = {};
16542    gc = cache.garbageCollect = [];
16543    cache.font = font;
16544  }
16545  ctx.save();
16546  ctx.font = font;
16547  let longest = 0;
16548  const ilen = arrayOfThings.length;
16549  let i, j, jlen, thing, nestedThing;
16550  for (i = 0; i < ilen; i++) {
16551    thing = arrayOfThings[i];
16552    if (thing !== undefined && thing !== null && isArray(thing) !== true) {
16553      longest = _measureText(ctx, data, gc, longest, thing);
16554    } else if (isArray(thing)) {
16555      for (j = 0, jlen = thing.length; j < jlen; j++) {
16556        nestedThing = thing[j];
16557        if (nestedThing !== undefined && nestedThing !== null && !isArray(nestedThing)) {
16558          longest = _measureText(ctx, data, gc, longest, nestedThing);
16559        }
16560      }
16561    }
16562  }
16563  ctx.restore();
16564  const gcLen = gc.length / 2;
16565  if (gcLen > arrayOfThings.length) {
16566    for (i = 0; i < gcLen; i++) {
16567      delete data[gc[i]];
16568    }
16569    gc.splice(0, gcLen);
16570  }
16571  return longest;
16572}
16573function _alignPixel(chart, pixel, width) {
16574  const devicePixelRatio = chart.currentDevicePixelRatio;
16575  const halfWidth = width !== 0 ? Math.max(width / 2, 0.5) : 0;
16576  return Math.round((pixel - halfWidth) * devicePixelRatio) / devicePixelRatio + halfWidth;
16577}
16578function clearCanvas(canvas, ctx) {
16579  ctx = ctx || canvas.getContext('2d');
16580  ctx.save();
16581  ctx.resetTransform();
16582  ctx.clearRect(0, 0, canvas.width, canvas.height);
16583  ctx.restore();
16584}
16585function drawPoint(ctx, options, x, y) {
16586  drawPointLegend(ctx, options, x, y, null);
16587}
16588function drawPointLegend(ctx, options, x, y, w) {
16589  let type, xOffset, yOffset, size, cornerRadius, width;
16590  const style = options.pointStyle;
16591  const rotation = options.rotation;
16592  const radius = options.radius;
16593  let rad = (rotation || 0) * RAD_PER_DEG;
16594  if (style && typeof style === 'object') {
16595    type = style.toString();
16596    if (type === '[object HTMLImageElement]' || type === '[object HTMLCanvasElement]') {
16597      ctx.save();
16598      ctx.translate(x, y);
16599      ctx.rotate(rad);
16600      ctx.drawImage(style, -style.width / 2, -style.height / 2, style.width, style.height);
16601      ctx.restore();
16602      return;
16603    }
16604  }
16605  if (isNaN(radius) || radius <= 0) {
16606    return;
16607  }
16608  ctx.beginPath();
16609  switch (style) {
16610  default:
16611    if (w) {
16612      ctx.ellipse(x, y, w / 2, radius, 0, 0, TAU);
16613    } else {
16614      ctx.arc(x, y, radius, 0, TAU);
16615    }
16616    ctx.closePath();
16617    break;
16618  case 'triangle':
16619    ctx.moveTo(x + Math.sin(rad) * radius, y - Math.cos(rad) * radius);
16620    rad += TWO_THIRDS_PI;
16621    ctx.lineTo(x + Math.sin(rad) * radius, y - Math.cos(rad) * radius);
16622    rad += TWO_THIRDS_PI;
16623    ctx.lineTo(x + Math.sin(rad) * radius, y - Math.cos(rad) * radius);
16624    ctx.closePath();
16625    break;
16626  case 'rectRounded':
16627    cornerRadius = radius * 0.516;
16628    size = radius - cornerRadius;
16629    xOffset = Math.cos(rad + QUARTER_PI) * size;
16630    yOffset = Math.sin(rad + QUARTER_PI) * size;
16631    ctx.arc(x - xOffset, y - yOffset, cornerRadius, rad - PI, rad - HALF_PI);
16632    ctx.arc(x + yOffset, y - xOffset, cornerRadius, rad - HALF_PI, rad);
16633    ctx.arc(x + xOffset, y + yOffset, cornerRadius, rad, rad + HALF_PI);
16634    ctx.arc(x - yOffset, y + xOffset, cornerRadius, rad + HALF_PI, rad + PI);
16635    ctx.closePath();
16636    break;
16637  case 'rect':
16638    if (!rotation) {
16639      size = Math.SQRT1_2 * radius;
16640      width = w ? w / 2 : size;
16641      ctx.rect(x - width, y - size, 2 * width, 2 * size);
16642      break;
16643    }
16644    rad += QUARTER_PI;
16645  case 'rectRot':
16646    xOffset = Math.cos(rad) * radius;
16647    yOffset = Math.sin(rad) * radius;
16648    ctx.moveTo(x - xOffset, y - yOffset);
16649    ctx.lineTo(x + yOffset, y - xOffset);
16650    ctx.lineTo(x + xOffset, y + yOffset);
16651    ctx.lineTo(x - yOffset, y + xOffset);
16652    ctx.closePath();
16653    break;
16654  case 'crossRot':
16655    rad += QUARTER_PI;
16656  case 'cross':
16657    xOffset = Math.cos(rad) * radius;
16658    yOffset = Math.sin(rad) * radius;
16659    ctx.moveTo(x - xOffset, y - yOffset);
16660    ctx.lineTo(x + xOffset, y + yOffset);
16661    ctx.moveTo(x + yOffset, y - xOffset);
16662    ctx.lineTo(x - yOffset, y + xOffset);
16663    break;
16664  case 'star':
16665    xOffset = Math.cos(rad) * radius;
16666    yOffset = Math.sin(rad) * radius;
16667    ctx.moveTo(x - xOffset, y - yOffset);
16668    ctx.lineTo(x + xOffset, y + yOffset);
16669    ctx.moveTo(x + yOffset, y - xOffset);
16670    ctx.lineTo(x - yOffset, y + xOffset);
16671    rad += QUARTER_PI;
16672    xOffset = Math.cos(rad) * radius;
16673    yOffset = Math.sin(rad) * radius;
16674    ctx.moveTo(x - xOffset, y - yOffset);
16675    ctx.lineTo(x + xOffset, y + yOffset);
16676    ctx.moveTo(x + yOffset, y - xOffset);
16677    ctx.lineTo(x - yOffset, y + xOffset);
16678    break;
16679  case 'line':
16680    xOffset = w ? w / 2 : Math.cos(rad) * radius;
16681    yOffset = Math.sin(rad) * radius;
16682    ctx.moveTo(x - xOffset, y - yOffset);
16683    ctx.lineTo(x + xOffset, y + yOffset);
16684    break;
16685  case 'dash':
16686    ctx.moveTo(x, y);
16687    ctx.lineTo(x + Math.cos(rad) * radius, y + Math.sin(rad) * radius);
16688    break;
16689  }
16690  ctx.fill();
16691  if (options.borderWidth > 0) {
16692    ctx.stroke();
16693  }
16694}
16695function _isPointInArea(point, area, margin) {
16696  margin = margin || 0.5;
16697  return !area || (point && point.x > area.left - margin && point.x < area.right + margin &&
16698		point.y > area.top - margin && point.y < area.bottom + margin);
16699}
16700function clipArea(ctx, area) {
16701  ctx.save();
16702  ctx.beginPath();
16703  ctx.rect(area.left, area.top, area.right - area.left, area.bottom - area.top);
16704  ctx.clip();
16705}
16706function unclipArea(ctx) {
16707  ctx.restore();
16708}
16709function _steppedLineTo(ctx, previous, target, flip, mode) {
16710  if (!previous) {
16711    return ctx.lineTo(target.x, target.y);
16712  }
16713  if (mode === 'middle') {
16714    const midpoint = (previous.x + target.x) / 2.0;
16715    ctx.lineTo(midpoint, previous.y);
16716    ctx.lineTo(midpoint, target.y);
16717  } else if (mode === 'after' !== !!flip) {
16718    ctx.lineTo(previous.x, target.y);
16719  } else {
16720    ctx.lineTo(target.x, previous.y);
16721  }
16722  ctx.lineTo(target.x, target.y);
16723}
16724function _bezierCurveTo(ctx, previous, target, flip) {
16725  if (!previous) {
16726    return ctx.lineTo(target.x, target.y);
16727  }
16728  ctx.bezierCurveTo(
16729    flip ? previous.cp1x : previous.cp2x,
16730    flip ? previous.cp1y : previous.cp2y,
16731    flip ? target.cp2x : target.cp1x,
16732    flip ? target.cp2y : target.cp1y,
16733    target.x,
16734    target.y);
16735}
16736function renderText(ctx, text, x, y, font, opts = {}) {
16737  const lines = isArray(text) ? text : [text];
16738  const stroke = opts.strokeWidth > 0 && opts.strokeColor !== '';
16739  let i, line;
16740  ctx.save();
16741  ctx.font = font.string;
16742  setRenderOpts(ctx, opts);
16743  for (i = 0; i < lines.length; ++i) {
16744    line = lines[i];
16745    if (stroke) {
16746      if (opts.strokeColor) {
16747        ctx.strokeStyle = opts.strokeColor;
16748      }
16749      if (!isNullOrUndef(opts.strokeWidth)) {
16750        ctx.lineWidth = opts.strokeWidth;
16751      }
16752      ctx.strokeText(line, x, y, opts.maxWidth);
16753    }
16754    ctx.fillText(line, x, y, opts.maxWidth);
16755    decorateText(ctx, x, y, line, opts);
16756    y += font.lineHeight;
16757  }
16758  ctx.restore();
16759}
16760function setRenderOpts(ctx, opts) {
16761  if (opts.translation) {
16762    ctx.translate(opts.translation[0], opts.translation[1]);
16763  }
16764  if (!isNullOrUndef(opts.rotation)) {
16765    ctx.rotate(opts.rotation);
16766  }
16767  if (opts.color) {
16768    ctx.fillStyle = opts.color;
16769  }
16770  if (opts.textAlign) {
16771    ctx.textAlign = opts.textAlign;
16772  }
16773  if (opts.textBaseline) {
16774    ctx.textBaseline = opts.textBaseline;
16775  }
16776}
16777function decorateText(ctx, x, y, line, opts) {
16778  if (opts.strikethrough || opts.underline) {
16779    const metrics = ctx.measureText(line);
16780    const left = x - metrics.actualBoundingBoxLeft;
16781    const right = x + metrics.actualBoundingBoxRight;
16782    const top = y - metrics.actualBoundingBoxAscent;
16783    const bottom = y + metrics.actualBoundingBoxDescent;
16784    const yDecoration = opts.strikethrough ? (top + bottom) / 2 : bottom;
16785    ctx.strokeStyle = ctx.fillStyle;
16786    ctx.beginPath();
16787    ctx.lineWidth = opts.decorationWidth || 2;
16788    ctx.moveTo(left, yDecoration);
16789    ctx.lineTo(right, yDecoration);
16790    ctx.stroke();
16791  }
16792}
16793function addRoundedRectPath(ctx, rect) {
16794  const {x, y, w, h, radius} = rect;
16795  ctx.arc(x + radius.topLeft, y + radius.topLeft, radius.topLeft, -HALF_PI, PI, true);
16796  ctx.lineTo(x, y + h - radius.bottomLeft);
16797  ctx.arc(x + radius.bottomLeft, y + h - radius.bottomLeft, radius.bottomLeft, PI, HALF_PI, true);
16798  ctx.lineTo(x + w - radius.bottomRight, y + h);
16799  ctx.arc(x + w - radius.bottomRight, y + h - radius.bottomRight, radius.bottomRight, HALF_PI, 0, true);
16800  ctx.lineTo(x + w, y + radius.topRight);
16801  ctx.arc(x + w - radius.topRight, y + radius.topRight, radius.topRight, 0, -HALF_PI, true);
16802  ctx.lineTo(x + radius.topLeft, y);
16803}
16804
16805const LINE_HEIGHT = new RegExp(/^(normal|(\d+(?:\.\d+)?)(px|em|%)?)$/);
16806const FONT_STYLE = new RegExp(/^(normal|italic|initial|inherit|unset|(oblique( -?[0-9]?[0-9]deg)?))$/);
16807function toLineHeight(value, size) {
16808  const matches = ('' + value).match(LINE_HEIGHT);
16809  if (!matches || matches[1] === 'normal') {
16810    return size * 1.2;
16811  }
16812  value = +matches[2];
16813  switch (matches[3]) {
16814  case 'px':
16815    return value;
16816  case '%':
16817    value /= 100;
16818    break;
16819  }
16820  return size * value;
16821}
16822const numberOrZero = v => +v || 0;
16823function _readValueToProps(value, props) {
16824  const ret = {};
16825  const objProps = isObject(props);
16826  const keys = objProps ? Object.keys(props) : props;
16827  const read = isObject(value)
16828    ? objProps
16829      ? prop => valueOrDefault(value[prop], value[props[prop]])
16830      : prop => value[prop]
16831    : () => value;
16832  for (const prop of keys) {
16833    ret[prop] = numberOrZero(read(prop));
16834  }
16835  return ret;
16836}
16837function toTRBL(value) {
16838  return _readValueToProps(value, {top: 'y', right: 'x', bottom: 'y', left: 'x'});
16839}
16840function toTRBLCorners(value) {
16841  return _readValueToProps(value, ['topLeft', 'topRight', 'bottomLeft', 'bottomRight']);
16842}
16843function toPadding(value) {
16844  const obj = toTRBL(value);
16845  obj.width = obj.left + obj.right;
16846  obj.height = obj.top + obj.bottom;
16847  return obj;
16848}
16849function toFont(options, fallback) {
16850  options = options || {};
16851  fallback = fallback || defaults.font;
16852  let size = valueOrDefault(options.size, fallback.size);
16853  if (typeof size === 'string') {
16854    size = parseInt(size, 10);
16855  }
16856  let style = valueOrDefault(options.style, fallback.style);
16857  if (style && !('' + style).match(FONT_STYLE)) {
16858    console.warn('Invalid font style specified: "' + style + '"');
16859    style = '';
16860  }
16861  const font = {
16862    family: valueOrDefault(options.family, fallback.family),
16863    lineHeight: toLineHeight(valueOrDefault(options.lineHeight, fallback.lineHeight), size),
16864    size,
16865    style,
16866    weight: valueOrDefault(options.weight, fallback.weight),
16867    string: ''
16868  };
16869  font.string = toFontString(font);
16870  return font;
16871}
16872function resolve(inputs, context, index, info) {
16873  let cacheable = true;
16874  let i, ilen, value;
16875  for (i = 0, ilen = inputs.length; i < ilen; ++i) {
16876    value = inputs[i];
16877    if (value === undefined) {
16878      continue;
16879    }
16880    if (context !== undefined && typeof value === 'function') {
16881      value = value(context);
16882      cacheable = false;
16883    }
16884    if (index !== undefined && isArray(value)) {
16885      value = value[index % value.length];
16886      cacheable = false;
16887    }
16888    if (value !== undefined) {
16889      if (info && !cacheable) {
16890        info.cacheable = false;
16891      }
16892      return value;
16893    }
16894  }
16895}
16896function _addGrace(minmax, grace, beginAtZero) {
16897  const {min, max} = minmax;
16898  const change = toDimension(grace, (max - min) / 2);
16899  const keepZero = (value, add) => beginAtZero && value === 0 ? 0 : value + add;
16900  return {
16901    min: keepZero(min, -Math.abs(change)),
16902    max: keepZero(max, change)
16903  };
16904}
16905function createContext(parentContext, context) {
16906  return Object.assign(Object.create(parentContext), context);
16907}
16908
16909function _createResolver(scopes, prefixes = [''], rootScopes = scopes, fallback, getTarget = () => scopes[0]) {
16910  if (!defined(fallback)) {
16911    fallback = _resolve('_fallback', scopes);
16912  }
16913  const cache = {
16914    [Symbol.toStringTag]: 'Object',
16915    _cacheable: true,
16916    _scopes: scopes,
16917    _rootScopes: rootScopes,
16918    _fallback: fallback,
16919    _getTarget: getTarget,
16920    override: (scope) => _createResolver([scope, ...scopes], prefixes, rootScopes, fallback),
16921  };
16922  return new Proxy(cache, {
16923    deleteProperty(target, prop) {
16924      delete target[prop];
16925      delete target._keys;
16926      delete scopes[0][prop];
16927      return true;
16928    },
16929    get(target, prop) {
16930      return _cached(target, prop,
16931        () => _resolveWithPrefixes(prop, prefixes, scopes, target));
16932    },
16933    getOwnPropertyDescriptor(target, prop) {
16934      return Reflect.getOwnPropertyDescriptor(target._scopes[0], prop);
16935    },
16936    getPrototypeOf() {
16937      return Reflect.getPrototypeOf(scopes[0]);
16938    },
16939    has(target, prop) {
16940      return getKeysFromAllScopes(target).includes(prop);
16941    },
16942    ownKeys(target) {
16943      return getKeysFromAllScopes(target);
16944    },
16945    set(target, prop, value) {
16946      const storage = target._storage || (target._storage = getTarget());
16947      target[prop] = storage[prop] = value;
16948      delete target._keys;
16949      return true;
16950    }
16951  });
16952}
16953function _attachContext(proxy, context, subProxy, descriptorDefaults) {
16954  const cache = {
16955    _cacheable: false,
16956    _proxy: proxy,
16957    _context: context,
16958    _subProxy: subProxy,
16959    _stack: new Set(),
16960    _descriptors: _descriptors(proxy, descriptorDefaults),
16961    setContext: (ctx) => _attachContext(proxy, ctx, subProxy, descriptorDefaults),
16962    override: (scope) => _attachContext(proxy.override(scope), context, subProxy, descriptorDefaults)
16963  };
16964  return new Proxy(cache, {
16965    deleteProperty(target, prop) {
16966      delete target[prop];
16967      delete proxy[prop];
16968      return true;
16969    },
16970    get(target, prop, receiver) {
16971      return _cached(target, prop,
16972        () => _resolveWithContext(target, prop, receiver));
16973    },
16974    getOwnPropertyDescriptor(target, prop) {
16975      return target._descriptors.allKeys
16976        ? Reflect.has(proxy, prop) ? {enumerable: true, configurable: true} : undefined
16977        : Reflect.getOwnPropertyDescriptor(proxy, prop);
16978    },
16979    getPrototypeOf() {
16980      return Reflect.getPrototypeOf(proxy);
16981    },
16982    has(target, prop) {
16983      return Reflect.has(proxy, prop);
16984    },
16985    ownKeys() {
16986      return Reflect.ownKeys(proxy);
16987    },
16988    set(target, prop, value) {
16989      proxy[prop] = value;
16990      delete target[prop];
16991      return true;
16992    }
16993  });
16994}
16995function _descriptors(proxy, defaults = {scriptable: true, indexable: true}) {
16996  const {_scriptable = defaults.scriptable, _indexable = defaults.indexable, _allKeys = defaults.allKeys} = proxy;
16997  return {
16998    allKeys: _allKeys,
16999    scriptable: _scriptable,
17000    indexable: _indexable,
17001    isScriptable: isFunction(_scriptable) ? _scriptable : () => _scriptable,
17002    isIndexable: isFunction(_indexable) ? _indexable : () => _indexable
17003  };
17004}
17005const readKey = (prefix, name) => prefix ? prefix + _capitalize(name) : name;
17006const needsSubResolver = (prop, value) => isObject(value) && prop !== 'adapters' &&
17007  (Object.getPrototypeOf(value) === null || value.constructor === Object);
17008function _cached(target, prop, resolve) {
17009  if (Object.prototype.hasOwnProperty.call(target, prop)) {
17010    return target[prop];
17011  }
17012  const value = resolve();
17013  target[prop] = value;
17014  return value;
17015}
17016function _resolveWithContext(target, prop, receiver) {
17017  const {_proxy, _context, _subProxy, _descriptors: descriptors} = target;
17018  let value = _proxy[prop];
17019  if (isFunction(value) && descriptors.isScriptable(prop)) {
17020    value = _resolveScriptable(prop, value, target, receiver);
17021  }
17022  if (isArray(value) && value.length) {
17023    value = _resolveArray(prop, value, target, descriptors.isIndexable);
17024  }
17025  if (needsSubResolver(prop, value)) {
17026    value = _attachContext(value, _context, _subProxy && _subProxy[prop], descriptors);
17027  }
17028  return value;
17029}
17030function _resolveScriptable(prop, value, target, receiver) {
17031  const {_proxy, _context, _subProxy, _stack} = target;
17032  if (_stack.has(prop)) {
17033    throw new Error('Recursion detected: ' + Array.from(_stack).join('->') + '->' + prop);
17034  }
17035  _stack.add(prop);
17036  value = value(_context, _subProxy || receiver);
17037  _stack.delete(prop);
17038  if (needsSubResolver(prop, value)) {
17039    value = createSubResolver(_proxy._scopes, _proxy, prop, value);
17040  }
17041  return value;
17042}
17043function _resolveArray(prop, value, target, isIndexable) {
17044  const {_proxy, _context, _subProxy, _descriptors: descriptors} = target;
17045  if (defined(_context.index) && isIndexable(prop)) {
17046    value = value[_context.index % value.length];
17047  } else if (isObject(value[0])) {
17048    const arr = value;
17049    const scopes = _proxy._scopes.filter(s => s !== arr);
17050    value = [];
17051    for (const item of arr) {
17052      const resolver = createSubResolver(scopes, _proxy, prop, item);
17053      value.push(_attachContext(resolver, _context, _subProxy && _subProxy[prop], descriptors));
17054    }
17055  }
17056  return value;
17057}
17058function resolveFallback(fallback, prop, value) {
17059  return isFunction(fallback) ? fallback(prop, value) : fallback;
17060}
17061const getScope = (key, parent) => key === true ? parent
17062  : typeof key === 'string' ? resolveObjectKey(parent, key) : undefined;
17063function addScopes(set, parentScopes, key, parentFallback, value) {
17064  for (const parent of parentScopes) {
17065    const scope = getScope(key, parent);
17066    if (scope) {
17067      set.add(scope);
17068      const fallback = resolveFallback(scope._fallback, key, value);
17069      if (defined(fallback) && fallback !== key && fallback !== parentFallback) {
17070        return fallback;
17071      }
17072    } else if (scope === false && defined(parentFallback) && key !== parentFallback) {
17073      return null;
17074    }
17075  }
17076  return false;
17077}
17078function createSubResolver(parentScopes, resolver, prop, value) {
17079  const rootScopes = resolver._rootScopes;
17080  const fallback = resolveFallback(resolver._fallback, prop, value);
17081  const allScopes = [...parentScopes, ...rootScopes];
17082  const set = new Set();
17083  set.add(value);
17084  let key = addScopesFromKey(set, allScopes, prop, fallback || prop, value);
17085  if (key === null) {
17086    return false;
17087  }
17088  if (defined(fallback) && fallback !== prop) {
17089    key = addScopesFromKey(set, allScopes, fallback, key, value);
17090    if (key === null) {
17091      return false;
17092    }
17093  }
17094  return _createResolver(Array.from(set), [''], rootScopes, fallback,
17095    () => subGetTarget(resolver, prop, value));
17096}
17097function addScopesFromKey(set, allScopes, key, fallback, item) {
17098  while (key) {
17099    key = addScopes(set, allScopes, key, fallback, item);
17100  }
17101  return key;
17102}
17103function subGetTarget(resolver, prop, value) {
17104  const parent = resolver._getTarget();
17105  if (!(prop in parent)) {
17106    parent[prop] = {};
17107  }
17108  const target = parent[prop];
17109  if (isArray(target) && isObject(value)) {
17110    return value;
17111  }
17112  return target;
17113}
17114function _resolveWithPrefixes(prop, prefixes, scopes, proxy) {
17115  let value;
17116  for (const prefix of prefixes) {
17117    value = _resolve(readKey(prefix, prop), scopes);
17118    if (defined(value)) {
17119      return needsSubResolver(prop, value)
17120        ? createSubResolver(scopes, proxy, prop, value)
17121        : value;
17122    }
17123  }
17124}
17125function _resolve(key, scopes) {
17126  for (const scope of scopes) {
17127    if (!scope) {
17128      continue;
17129    }
17130    const value = scope[key];
17131    if (defined(value)) {
17132      return value;
17133    }
17134  }
17135}
17136function getKeysFromAllScopes(target) {
17137  let keys = target._keys;
17138  if (!keys) {
17139    keys = target._keys = resolveKeysFromAllScopes(target._scopes);
17140  }
17141  return keys;
17142}
17143function resolveKeysFromAllScopes(scopes) {
17144  const set = new Set();
17145  for (const scope of scopes) {
17146    for (const key of Object.keys(scope).filter(k => !k.startsWith('_'))) {
17147      set.add(key);
17148    }
17149  }
17150  return Array.from(set);
17151}
17152function _parseObjectDataRadialScale(meta, data, start, count) {
17153  const {iScale} = meta;
17154  const {key = 'r'} = this._parsing;
17155  const parsed = new Array(count);
17156  let i, ilen, index, item;
17157  for (i = 0, ilen = count; i < ilen; ++i) {
17158    index = i + start;
17159    item = data[index];
17160    parsed[i] = {
17161      r: iScale.parse(resolveObjectKey(item, key), index)
17162    };
17163  }
17164  return parsed;
17165}
17166
17167const EPSILON = Number.EPSILON || 1e-14;
17168const getPoint = (points, i) => i < points.length && !points[i].skip && points[i];
17169const getValueAxis = (indexAxis) => indexAxis === 'x' ? 'y' : 'x';
17170function splineCurve(firstPoint, middlePoint, afterPoint, t) {
17171  const previous = firstPoint.skip ? middlePoint : firstPoint;
17172  const current = middlePoint;
17173  const next = afterPoint.skip ? middlePoint : afterPoint;
17174  const d01 = distanceBetweenPoints(current, previous);
17175  const d12 = distanceBetweenPoints(next, current);
17176  let s01 = d01 / (d01 + d12);
17177  let s12 = d12 / (d01 + d12);
17178  s01 = isNaN(s01) ? 0 : s01;
17179  s12 = isNaN(s12) ? 0 : s12;
17180  const fa = t * s01;
17181  const fb = t * s12;
17182  return {
17183    previous: {
17184      x: current.x - fa * (next.x - previous.x),
17185      y: current.y - fa * (next.y - previous.y)
17186    },
17187    next: {
17188      x: current.x + fb * (next.x - previous.x),
17189      y: current.y + fb * (next.y - previous.y)
17190    }
17191  };
17192}
17193function monotoneAdjust(points, deltaK, mK) {
17194  const pointsLen = points.length;
17195  let alphaK, betaK, tauK, squaredMagnitude, pointCurrent;
17196  let pointAfter = getPoint(points, 0);
17197  for (let i = 0; i < pointsLen - 1; ++i) {
17198    pointCurrent = pointAfter;
17199    pointAfter = getPoint(points, i + 1);
17200    if (!pointCurrent || !pointAfter) {
17201      continue;
17202    }
17203    if (almostEquals(deltaK[i], 0, EPSILON)) {
17204      mK[i] = mK[i + 1] = 0;
17205      continue;
17206    }
17207    alphaK = mK[i] / deltaK[i];
17208    betaK = mK[i + 1] / deltaK[i];
17209    squaredMagnitude = Math.pow(alphaK, 2) + Math.pow(betaK, 2);
17210    if (squaredMagnitude <= 9) {
17211      continue;
17212    }
17213    tauK = 3 / Math.sqrt(squaredMagnitude);
17214    mK[i] = alphaK * tauK * deltaK[i];
17215    mK[i + 1] = betaK * tauK * deltaK[i];
17216  }
17217}
17218function monotoneCompute(points, mK, indexAxis = 'x') {
17219  const valueAxis = getValueAxis(indexAxis);
17220  const pointsLen = points.length;
17221  let delta, pointBefore, pointCurrent;
17222  let pointAfter = getPoint(points, 0);
17223  for (let i = 0; i < pointsLen; ++i) {
17224    pointBefore = pointCurrent;
17225    pointCurrent = pointAfter;
17226    pointAfter = getPoint(points, i + 1);
17227    if (!pointCurrent) {
17228      continue;
17229    }
17230    const iPixel = pointCurrent[indexAxis];
17231    const vPixel = pointCurrent[valueAxis];
17232    if (pointBefore) {
17233      delta = (iPixel - pointBefore[indexAxis]) / 3;
17234      pointCurrent[`cp1${indexAxis}`] = iPixel - delta;
17235      pointCurrent[`cp1${valueAxis}`] = vPixel - delta * mK[i];
17236    }
17237    if (pointAfter) {
17238      delta = (pointAfter[indexAxis] - iPixel) / 3;
17239      pointCurrent[`cp2${indexAxis}`] = iPixel + delta;
17240      pointCurrent[`cp2${valueAxis}`] = vPixel + delta * mK[i];
17241    }
17242  }
17243}
17244function splineCurveMonotone(points, indexAxis = 'x') {
17245  const valueAxis = getValueAxis(indexAxis);
17246  const pointsLen = points.length;
17247  const deltaK = Array(pointsLen).fill(0);
17248  const mK = Array(pointsLen);
17249  let i, pointBefore, pointCurrent;
17250  let pointAfter = getPoint(points, 0);
17251  for (i = 0; i < pointsLen; ++i) {
17252    pointBefore = pointCurrent;
17253    pointCurrent = pointAfter;
17254    pointAfter = getPoint(points, i + 1);
17255    if (!pointCurrent) {
17256      continue;
17257    }
17258    if (pointAfter) {
17259      const slopeDelta = pointAfter[indexAxis] - pointCurrent[indexAxis];
17260      deltaK[i] = slopeDelta !== 0 ? (pointAfter[valueAxis] - pointCurrent[valueAxis]) / slopeDelta : 0;
17261    }
17262    mK[i] = !pointBefore ? deltaK[i]
17263      : !pointAfter ? deltaK[i - 1]
17264      : (sign(deltaK[i - 1]) !== sign(deltaK[i])) ? 0
17265      : (deltaK[i - 1] + deltaK[i]) / 2;
17266  }
17267  monotoneAdjust(points, deltaK, mK);
17268  monotoneCompute(points, mK, indexAxis);
17269}
17270function capControlPoint(pt, min, max) {
17271  return Math.max(Math.min(pt, max), min);
17272}
17273function capBezierPoints(points, area) {
17274  let i, ilen, point, inArea, inAreaPrev;
17275  let inAreaNext = _isPointInArea(points[0], area);
17276  for (i = 0, ilen = points.length; i < ilen; ++i) {
17277    inAreaPrev = inArea;
17278    inArea = inAreaNext;
17279    inAreaNext = i < ilen - 1 && _isPointInArea(points[i + 1], area);
17280    if (!inArea) {
17281      continue;
17282    }
17283    point = points[i];
17284    if (inAreaPrev) {
17285      point.cp1x = capControlPoint(point.cp1x, area.left, area.right);
17286      point.cp1y = capControlPoint(point.cp1y, area.top, area.bottom);
17287    }
17288    if (inAreaNext) {
17289      point.cp2x = capControlPoint(point.cp2x, area.left, area.right);
17290      point.cp2y = capControlPoint(point.cp2y, area.top, area.bottom);
17291    }
17292  }
17293}
17294function _updateBezierControlPoints(points, options, area, loop, indexAxis) {
17295  let i, ilen, point, controlPoints;
17296  if (options.spanGaps) {
17297    points = points.filter((pt) => !pt.skip);
17298  }
17299  if (options.cubicInterpolationMode === 'monotone') {
17300    splineCurveMonotone(points, indexAxis);
17301  } else {
17302    let prev = loop ? points[points.length - 1] : points[0];
17303    for (i = 0, ilen = points.length; i < ilen; ++i) {
17304      point = points[i];
17305      controlPoints = splineCurve(
17306        prev,
17307        point,
17308        points[Math.min(i + 1, ilen - (loop ? 0 : 1)) % ilen],
17309        options.tension
17310      );
17311      point.cp1x = controlPoints.previous.x;
17312      point.cp1y = controlPoints.previous.y;
17313      point.cp2x = controlPoints.next.x;
17314      point.cp2y = controlPoints.next.y;
17315      prev = point;
17316    }
17317  }
17318  if (options.capBezierPoints) {
17319    capBezierPoints(points, area);
17320  }
17321}
17322
17323function _isDomSupported() {
17324  return typeof window !== 'undefined' && typeof document !== 'undefined';
17325}
17326function _getParentNode(domNode) {
17327  let parent = domNode.parentNode;
17328  if (parent && parent.toString() === '[object ShadowRoot]') {
17329    parent = parent.host;
17330  }
17331  return parent;
17332}
17333function parseMaxStyle(styleValue, node, parentProperty) {
17334  let valueInPixels;
17335  if (typeof styleValue === 'string') {
17336    valueInPixels = parseInt(styleValue, 10);
17337    if (styleValue.indexOf('%') !== -1) {
17338      valueInPixels = valueInPixels / 100 * node.parentNode[parentProperty];
17339    }
17340  } else {
17341    valueInPixels = styleValue;
17342  }
17343  return valueInPixels;
17344}
17345const getComputedStyle = (element) => window.getComputedStyle(element, null);
17346function getStyle(el, property) {
17347  return getComputedStyle(el).getPropertyValue(property);
17348}
17349const positions = ['top', 'right', 'bottom', 'left'];
17350function getPositionedStyle(styles, style, suffix) {
17351  const result = {};
17352  suffix = suffix ? '-' + suffix : '';
17353  for (let i = 0; i < 4; i++) {
17354    const pos = positions[i];
17355    result[pos] = parseFloat(styles[style + '-' + pos + suffix]) || 0;
17356  }
17357  result.width = result.left + result.right;
17358  result.height = result.top + result.bottom;
17359  return result;
17360}
17361const useOffsetPos = (x, y, target) => (x > 0 || y > 0) && (!target || !target.shadowRoot);
17362function getCanvasPosition(e, canvas) {
17363  const touches = e.touches;
17364  const source = touches && touches.length ? touches[0] : e;
17365  const {offsetX, offsetY} = source;
17366  let box = false;
17367  let x, y;
17368  if (useOffsetPos(offsetX, offsetY, e.target)) {
17369    x = offsetX;
17370    y = offsetY;
17371  } else {
17372    const rect = canvas.getBoundingClientRect();
17373    x = source.clientX - rect.left;
17374    y = source.clientY - rect.top;
17375    box = true;
17376  }
17377  return {x, y, box};
17378}
17379function getRelativePosition(evt, chart) {
17380  if ('native' in evt) {
17381    return evt;
17382  }
17383  const {canvas, currentDevicePixelRatio} = chart;
17384  const style = getComputedStyle(canvas);
17385  const borderBox = style.boxSizing === 'border-box';
17386  const paddings = getPositionedStyle(style, 'padding');
17387  const borders = getPositionedStyle(style, 'border', 'width');
17388  const {x, y, box} = getCanvasPosition(evt, canvas);
17389  const xOffset = paddings.left + (box && borders.left);
17390  const yOffset = paddings.top + (box && borders.top);
17391  let {width, height} = chart;
17392  if (borderBox) {
17393    width -= paddings.width + borders.width;
17394    height -= paddings.height + borders.height;
17395  }
17396  return {
17397    x: Math.round((x - xOffset) / width * canvas.width / currentDevicePixelRatio),
17398    y: Math.round((y - yOffset) / height * canvas.height / currentDevicePixelRatio)
17399  };
17400}
17401function getContainerSize(canvas, width, height) {
17402  let maxWidth, maxHeight;
17403  if (width === undefined || height === undefined) {
17404    const container = _getParentNode(canvas);
17405    if (!container) {
17406      width = canvas.clientWidth;
17407      height = canvas.clientHeight;
17408    } else {
17409      const rect = container.getBoundingClientRect();
17410      const containerStyle = getComputedStyle(container);
17411      const containerBorder = getPositionedStyle(containerStyle, 'border', 'width');
17412      const containerPadding = getPositionedStyle(containerStyle, 'padding');
17413      width = rect.width - containerPadding.width - containerBorder.width;
17414      height = rect.height - containerPadding.height - containerBorder.height;
17415      maxWidth = parseMaxStyle(containerStyle.maxWidth, container, 'clientWidth');
17416      maxHeight = parseMaxStyle(containerStyle.maxHeight, container, 'clientHeight');
17417    }
17418  }
17419  return {
17420    width,
17421    height,
17422    maxWidth: maxWidth || INFINITY,
17423    maxHeight: maxHeight || INFINITY
17424  };
17425}
17426const round1 = v => Math.round(v * 10) / 10;
17427function getMaximumSize(canvas, bbWidth, bbHeight, aspectRatio) {
17428  const style = getComputedStyle(canvas);
17429  const margins = getPositionedStyle(style, 'margin');
17430  const maxWidth = parseMaxStyle(style.maxWidth, canvas, 'clientWidth') || INFINITY;
17431  const maxHeight = parseMaxStyle(style.maxHeight, canvas, 'clientHeight') || INFINITY;
17432  const containerSize = getContainerSize(canvas, bbWidth, bbHeight);
17433  let {width, height} = containerSize;
17434  if (style.boxSizing === 'content-box') {
17435    const borders = getPositionedStyle(style, 'border', 'width');
17436    const paddings = getPositionedStyle(style, 'padding');
17437    width -= paddings.width + borders.width;
17438    height -= paddings.height + borders.height;
17439  }
17440  width = Math.max(0, width - margins.width);
17441  height = Math.max(0, aspectRatio ? Math.floor(width / aspectRatio) : height - margins.height);
17442  width = round1(Math.min(width, maxWidth, containerSize.maxWidth));
17443  height = round1(Math.min(height, maxHeight, containerSize.maxHeight));
17444  if (width && !height) {
17445    height = round1(width / 2);
17446  }
17447  return {
17448    width,
17449    height
17450  };
17451}
17452function retinaScale(chart, forceRatio, forceStyle) {
17453  const pixelRatio = forceRatio || 1;
17454  const deviceHeight = Math.floor(chart.height * pixelRatio);
17455  const deviceWidth = Math.floor(chart.width * pixelRatio);
17456  chart.height = deviceHeight / pixelRatio;
17457  chart.width = deviceWidth / pixelRatio;
17458  const canvas = chart.canvas;
17459  if (canvas.style && (forceStyle || (!canvas.style.height && !canvas.style.width))) {
17460    canvas.style.height = `${chart.height}px`;
17461    canvas.style.width = `${chart.width}px`;
17462  }
17463  if (chart.currentDevicePixelRatio !== pixelRatio
17464      || canvas.height !== deviceHeight
17465      || canvas.width !== deviceWidth) {
17466    chart.currentDevicePixelRatio = pixelRatio;
17467    canvas.height = deviceHeight;
17468    canvas.width = deviceWidth;
17469    chart.ctx.setTransform(pixelRatio, 0, 0, pixelRatio, 0, 0);
17470    return true;
17471  }
17472  return false;
17473}
17474const supportsEventListenerOptions = (function() {
17475  let passiveSupported = false;
17476  try {
17477    const options = {
17478      get passive() {
17479        passiveSupported = true;
17480        return false;
17481      }
17482    };
17483    window.addEventListener('test', null, options);
17484    window.removeEventListener('test', null, options);
17485  } catch (e) {
17486  }
17487  return passiveSupported;
17488}());
17489function readUsedSize(element, property) {
17490  const value = getStyle(element, property);
17491  const matches = value && value.match(/^(\d+)(\.\d+)?px$/);
17492  return matches ? +matches[1] : undefined;
17493}
17494
17495function _pointInLine(p1, p2, t, mode) {
17496  return {
17497    x: p1.x + t * (p2.x - p1.x),
17498    y: p1.y + t * (p2.y - p1.y)
17499  };
17500}
17501function _steppedInterpolation(p1, p2, t, mode) {
17502  return {
17503    x: p1.x + t * (p2.x - p1.x),
17504    y: mode === 'middle' ? t < 0.5 ? p1.y : p2.y
17505    : mode === 'after' ? t < 1 ? p1.y : p2.y
17506    : t > 0 ? p2.y : p1.y
17507  };
17508}
17509function _bezierInterpolation(p1, p2, t, mode) {
17510  const cp1 = {x: p1.cp2x, y: p1.cp2y};
17511  const cp2 = {x: p2.cp1x, y: p2.cp1y};
17512  const a = _pointInLine(p1, cp1, t);
17513  const b = _pointInLine(cp1, cp2, t);
17514  const c = _pointInLine(cp2, p2, t);
17515  const d = _pointInLine(a, b, t);
17516  const e = _pointInLine(b, c, t);
17517  return _pointInLine(d, e, t);
17518}
17519
17520const intlCache = new Map();
17521function getNumberFormat(locale, options) {
17522  options = options || {};
17523  const cacheKey = locale + JSON.stringify(options);
17524  let formatter = intlCache.get(cacheKey);
17525  if (!formatter) {
17526    formatter = new Intl.NumberFormat(locale, options);
17527    intlCache.set(cacheKey, formatter);
17528  }
17529  return formatter;
17530}
17531function formatNumber(num, locale, options) {
17532  return getNumberFormat(locale, options).format(num);
17533}
17534
17535const getRightToLeftAdapter = function(rectX, width) {
17536  return {
17537    x(x) {
17538      return rectX + rectX + width - x;
17539    },
17540    setWidth(w) {
17541      width = w;
17542    },
17543    textAlign(align) {
17544      if (align === 'center') {
17545        return align;
17546      }
17547      return align === 'right' ? 'left' : 'right';
17548    },
17549    xPlus(x, value) {
17550      return x - value;
17551    },
17552    leftForLtr(x, itemWidth) {
17553      return x - itemWidth;
17554    },
17555  };
17556};
17557const getLeftToRightAdapter = function() {
17558  return {
17559    x(x) {
17560      return x;
17561    },
17562    setWidth(w) {
17563    },
17564    textAlign(align) {
17565      return align;
17566    },
17567    xPlus(x, value) {
17568      return x + value;
17569    },
17570    leftForLtr(x, _itemWidth) {
17571      return x;
17572    },
17573  };
17574};
17575function getRtlAdapter(rtl, rectX, width) {
17576  return rtl ? getRightToLeftAdapter(rectX, width) : getLeftToRightAdapter();
17577}
17578function overrideTextDirection(ctx, direction) {
17579  let style, original;
17580  if (direction === 'ltr' || direction === 'rtl') {
17581    style = ctx.canvas.style;
17582    original = [
17583      style.getPropertyValue('direction'),
17584      style.getPropertyPriority('direction'),
17585    ];
17586    style.setProperty('direction', direction, 'important');
17587    ctx.prevTextDirection = original;
17588  }
17589}
17590function restoreTextDirection(ctx, original) {
17591  if (original !== undefined) {
17592    delete ctx.prevTextDirection;
17593    ctx.canvas.style.setProperty('direction', original[0], original[1]);
17594  }
17595}
17596
17597function propertyFn(property) {
17598  if (property === 'angle') {
17599    return {
17600      between: _angleBetween,
17601      compare: _angleDiff,
17602      normalize: _normalizeAngle,
17603    };
17604  }
17605  return {
17606    between: _isBetween,
17607    compare: (a, b) => a - b,
17608    normalize: x => x
17609  };
17610}
17611function normalizeSegment({start, end, count, loop, style}) {
17612  return {
17613    start: start % count,
17614    end: end % count,
17615    loop: loop && (end - start + 1) % count === 0,
17616    style
17617  };
17618}
17619function getSegment(segment, points, bounds) {
17620  const {property, start: startBound, end: endBound} = bounds;
17621  const {between, normalize} = propertyFn(property);
17622  const count = points.length;
17623  let {start, end, loop} = segment;
17624  let i, ilen;
17625  if (loop) {
17626    start += count;
17627    end += count;
17628    for (i = 0, ilen = count; i < ilen; ++i) {
17629      if (!between(normalize(points[start % count][property]), startBound, endBound)) {
17630        break;
17631      }
17632      start--;
17633      end--;
17634    }
17635    start %= count;
17636    end %= count;
17637  }
17638  if (end < start) {
17639    end += count;
17640  }
17641  return {start, end, loop, style: segment.style};
17642}
17643function _boundSegment(segment, points, bounds) {
17644  if (!bounds) {
17645    return [segment];
17646  }
17647  const {property, start: startBound, end: endBound} = bounds;
17648  const count = points.length;
17649  const {compare, between, normalize} = propertyFn(property);
17650  const {start, end, loop, style} = getSegment(segment, points, bounds);
17651  const result = [];
17652  let inside = false;
17653  let subStart = null;
17654  let value, point, prevValue;
17655  const startIsBefore = () => between(startBound, prevValue, value) && compare(startBound, prevValue) !== 0;
17656  const endIsBefore = () => compare(endBound, value) === 0 || between(endBound, prevValue, value);
17657  const shouldStart = () => inside || startIsBefore();
17658  const shouldStop = () => !inside || endIsBefore();
17659  for (let i = start, prev = start; i <= end; ++i) {
17660    point = points[i % count];
17661    if (point.skip) {
17662      continue;
17663    }
17664    value = normalize(point[property]);
17665    if (value === prevValue) {
17666      continue;
17667    }
17668    inside = between(value, startBound, endBound);
17669    if (subStart === null && shouldStart()) {
17670      subStart = compare(value, startBound) === 0 ? i : prev;
17671    }
17672    if (subStart !== null && shouldStop()) {
17673      result.push(normalizeSegment({start: subStart, end: i, loop, count, style}));
17674      subStart = null;
17675    }
17676    prev = i;
17677    prevValue = value;
17678  }
17679  if (subStart !== null) {
17680    result.push(normalizeSegment({start: subStart, end, loop, count, style}));
17681  }
17682  return result;
17683}
17684function _boundSegments(line, bounds) {
17685  const result = [];
17686  const segments = line.segments;
17687  for (let i = 0; i < segments.length; i++) {
17688    const sub = _boundSegment(segments[i], line.points, bounds);
17689    if (sub.length) {
17690      result.push(...sub);
17691    }
17692  }
17693  return result;
17694}
17695function findStartAndEnd(points, count, loop, spanGaps) {
17696  let start = 0;
17697  let end = count - 1;
17698  if (loop && !spanGaps) {
17699    while (start < count && !points[start].skip) {
17700      start++;
17701    }
17702  }
17703  while (start < count && points[start].skip) {
17704    start++;
17705  }
17706  start %= count;
17707  if (loop) {
17708    end += start;
17709  }
17710  while (end > start && points[end % count].skip) {
17711    end--;
17712  }
17713  end %= count;
17714  return {start, end};
17715}
17716function solidSegments(points, start, max, loop) {
17717  const count = points.length;
17718  const result = [];
17719  let last = start;
17720  let prev = points[start];
17721  let end;
17722  for (end = start + 1; end <= max; ++end) {
17723    const cur = points[end % count];
17724    if (cur.skip || cur.stop) {
17725      if (!prev.skip) {
17726        loop = false;
17727        result.push({start: start % count, end: (end - 1) % count, loop});
17728        start = last = cur.stop ? end : null;
17729      }
17730    } else {
17731      last = end;
17732      if (prev.skip) {
17733        start = end;
17734      }
17735    }
17736    prev = cur;
17737  }
17738  if (last !== null) {
17739    result.push({start: start % count, end: last % count, loop});
17740  }
17741  return result;
17742}
17743function _computeSegments(line, segmentOptions) {
17744  const points = line.points;
17745  const spanGaps = line.options.spanGaps;
17746  const count = points.length;
17747  if (!count) {
17748    return [];
17749  }
17750  const loop = !!line._loop;
17751  const {start, end} = findStartAndEnd(points, count, loop, spanGaps);
17752  if (spanGaps === true) {
17753    return splitByStyles(line, [{start, end, loop}], points, segmentOptions);
17754  }
17755  const max = end < start ? end + count : end;
17756  const completeLoop = !!line._fullLoop && start === 0 && end === count - 1;
17757  return splitByStyles(line, solidSegments(points, start, max, completeLoop), points, segmentOptions);
17758}
17759function splitByStyles(line, segments, points, segmentOptions) {
17760  if (!segmentOptions || !segmentOptions.setContext || !points) {
17761    return segments;
17762  }
17763  return doSplitByStyles(line, segments, points, segmentOptions);
17764}
17765function doSplitByStyles(line, segments, points, segmentOptions) {
17766  const chartContext = line._chart.getContext();
17767  const baseStyle = readStyle(line.options);
17768  const {_datasetIndex: datasetIndex, options: {spanGaps}} = line;
17769  const count = points.length;
17770  const result = [];
17771  let prevStyle = baseStyle;
17772  let start = segments[0].start;
17773  let i = start;
17774  function addStyle(s, e, l, st) {
17775    const dir = spanGaps ? -1 : 1;
17776    if (s === e) {
17777      return;
17778    }
17779    s += count;
17780    while (points[s % count].skip) {
17781      s -= dir;
17782    }
17783    while (points[e % count].skip) {
17784      e += dir;
17785    }
17786    if (s % count !== e % count) {
17787      result.push({start: s % count, end: e % count, loop: l, style: st});
17788      prevStyle = st;
17789      start = e % count;
17790    }
17791  }
17792  for (const segment of segments) {
17793    start = spanGaps ? start : segment.start;
17794    let prev = points[start % count];
17795    let style;
17796    for (i = start + 1; i <= segment.end; i++) {
17797      const pt = points[i % count];
17798      style = readStyle(segmentOptions.setContext(createContext(chartContext, {
17799        type: 'segment',
17800        p0: prev,
17801        p1: pt,
17802        p0DataIndex: (i - 1) % count,
17803        p1DataIndex: i % count,
17804        datasetIndex
17805      })));
17806      if (styleChanged(style, prevStyle)) {
17807        addStyle(start, i - 1, segment.loop, prevStyle);
17808      }
17809      prev = pt;
17810      prevStyle = style;
17811    }
17812    if (start < i - 1) {
17813      addStyle(start, i - 1, segment.loop, prevStyle);
17814    }
17815  }
17816  return result;
17817}
17818function readStyle(options) {
17819  return {
17820    backgroundColor: options.backgroundColor,
17821    borderCapStyle: options.borderCapStyle,
17822    borderDash: options.borderDash,
17823    borderDashOffset: options.borderDashOffset,
17824    borderJoinStyle: options.borderJoinStyle,
17825    borderWidth: options.borderWidth,
17826    borderColor: options.borderColor
17827  };
17828}
17829function styleChanged(style, prevStyle) {
17830  return prevStyle && JSON.stringify(style) !== JSON.stringify(prevStyle);
17831}
17832
17833
17834
17835
17836/***/ }),
17837
vendor: 4,094 bytes, lines 17838-17986
17838/***/ "./node_modules/form-backend-validation/dist/Errors.js":
17839/*!*************************************************************!*\
17840  !*** ./node_modules/form-backend-validation/dist/Errors.js ***!
17841  \*************************************************************/
17842/***/ ((__unused_webpack_module, exports) => {
17843
17844"use strict";
17845
17846
17847Object.defineProperty(exports, "__esModule", ({
17848    value: true
17849}));
17850
17851var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
17852
17853function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
17854
17855var Errors = function () {
17856    /**
17857     * Create a new Errors instance.
17858     */
17859    function Errors() {
17860        var errors = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
17861
17862        _classCallCheck(this, Errors);
17863
17864        this.record(errors);
17865    }
17866
17867    /**
17868     * Get all the errors.
17869     *
17870     * @return {object}
17871     */
17872
17873
17874    _createClass(Errors, [{
17875        key: "all",
17876        value: function all() {
17877            return this.errors;
17878        }
17879
17880        /**
17881         * Determine if any errors exists for the given field or object.
17882         *
17883         * @param {string} field
17884         */
17885
17886    }, {
17887        key: "has",
17888        value: function has(field) {
17889            var hasError = this.errors.hasOwnProperty(field);
17890
17891            if (!hasError) {
17892                var errors = Object.keys(this.errors).filter(function (e) {
17893                    return e.startsWith(field + ".") || e.startsWith(field + "[");
17894                });
17895
17896                hasError = errors.length > 0;
17897            }
17898
17899            return hasError;
17900        }
17901    }, {
17902        key: "first",
17903        value: function first(field) {
17904            return this.get(field)[0];
17905        }
17906    }, {
17907        key: "get",
17908        value: function get(field) {
17909            return this.errors[field] || [];
17910        }
17911
17912        /**
17913         * Determine if we have any errors.
17914         * Or return errors for the given keys.
17915         *
17916         * @param {array} keys
17917         */
17918
17919    }, {
17920        key: "any",
17921        value: function any() {
17922            var _this = this;
17923
17924            var keys = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
17925
17926            if (keys.length === 0) {
17927                return Object.keys(this.errors).length > 0;
17928            }
17929
17930            var errors = {};
17931
17932            keys.forEach(function (key) {
17933                return errors[key] = _this.get(key);
17934            });
17935
17936            return errors;
17937        }
17938
17939        /**
17940         * Record the new errors.
17941         *
17942         * @param {object} errors
17943         */
17944
17945    }, {
17946        key: "record",
17947        value: function record() {
17948            var errors = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
17949
17950            this.errors = errors;
17951        }
17952
17953        /**
17954         * Clear a specific field, object or all error fields.
17955         *
17956         * @param {string|null} field
17957         */
17958
17959    }, {
17960        key: "clear",
17961        value: function clear(field) {
17962            if (!field) {
17963                this.errors = {};
17964
17965                return;
17966            }
17967
17968            var errors = Object.assign({}, this.errors);
17969
17970            Object.keys(errors).filter(function (e) {
17971                return e === field || e.startsWith(field + ".") || e.startsWith(field + "[");
17972            }).forEach(function (e) {
17973                return delete errors[e];
17974            });
17975
17976            this.errors = errors;
17977        }
17978    }]);
17979
17980    return Errors;
17981}();
17982
17983exports["default"] = Errors;
17984
17985/***/ }),
17986
vendor: 11,617 bytes, lines 17987-18400
17987/***/ "./node_modules/form-backend-validation/dist/Form.js":
17988/*!***********************************************************!*\
17989  !*** ./node_modules/form-backend-validation/dist/Form.js ***!
17990  \***********************************************************/
17991/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
17992
17993"use strict";
17994
17995
17996Object.defineProperty(exports, "__esModule", ({
17997    value: true
17998}));
17999
18000var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
18001
18002var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
18003
18004var _Errors = __webpack_require__(/*! ./Errors */ "./node_modules/form-backend-validation/dist/Errors.js");
18005
18006var _Errors2 = _interopRequireDefault(_Errors);
18007
18008var _util = __webpack_require__(/*! ./util */ "./node_modules/form-backend-validation/dist/util/index.js");
18009
18010function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
18011
18012function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
18013
18014function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
18015
18016var Form = function () {
18017    /**
18018     * Create a new Form instance.
18019     *
18020     * @param {object} data
18021     * @param {object} options
18022     */
18023    function Form() {
18024        var data = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
18025        var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
18026
18027        _classCallCheck(this, Form);
18028
18029        this.processing = false;
18030        this.successful = false;
18031
18032        this.withData(data).withOptions(options).withErrors({});
18033    }
18034
18035    _createClass(Form, [{
18036        key: 'withData',
18037        value: function withData(data) {
18038            if ((0, _util.isArray)(data)) {
18039                data = data.reduce(function (carry, element) {
18040                    carry[element] = '';
18041                    return carry;
18042                }, {});
18043            }
18044
18045            this.setInitialValues(data);
18046
18047            this.errors = new _Errors2.default();
18048            this.processing = false;
18049            this.successful = false;
18050
18051            for (var field in data) {
18052                (0, _util.guardAgainstReservedFieldName)(field);
18053
18054                this[field] = data[field];
18055            }
18056
18057            return this;
18058        }
18059    }, {
18060        key: 'withErrors',
18061        value: function withErrors(errors) {
18062            this.errors = new _Errors2.default(errors);
18063
18064            return this;
18065        }
18066    }, {
18067        key: 'withOptions',
18068        value: function withOptions(options) {
18069            this.__options = {
18070                resetOnSuccess: true
18071            };
18072
18073            if (options.hasOwnProperty('resetOnSuccess')) {
18074                this.__options.resetOnSuccess = options.resetOnSuccess;
18075            }
18076
18077            if (options.hasOwnProperty('onSuccess')) {
18078                this.onSuccess = options.onSuccess;
18079            }
18080
18081            if (options.hasOwnProperty('onFail')) {
18082                this.onFail = options.onFail;
18083            }
18084
18085            var windowAxios = typeof window === 'undefined' ? false : window.axios;
18086
18087            this.__http = options.http || windowAxios || __webpack_require__(/*! axios */ "./node_modules/axios/index.js");
18088
18089            if (!this.__http) {
18090                throw new Error('No http library provided. Either pass an http option, or install axios.');
18091            }
18092
18093            return this;
18094        }
18095
18096        /**
18097         * Fetch all relevant data for the form.
18098         */
18099
18100    }, {
18101        key: 'data',
18102        value: function data() {
18103            var data = {};
18104
18105            for (var property in this.initial) {
18106                data[property] = this[property];
18107            }
18108
18109            return data;
18110        }
18111
18112        /**
18113         * Fetch specific data for the form.
18114         *
18115         * @param {array} fields
18116         * @return {object}
18117         */
18118
18119    }, {
18120        key: 'only',
18121        value: function only(fields) {
18122            var _this = this;
18123
18124            return fields.reduce(function (filtered, field) {
18125                filtered[field] = _this[field];
18126                return filtered;
18127            }, {});
18128        }
18129
18130        /**
18131         * Reset the form fields.
18132         */
18133
18134    }, {
18135        key: 'reset',
18136        value: function reset() {
18137            (0, _util.merge)(this, this.initial);
18138
18139            this.errors.clear();
18140        }
18141    }, {
18142        key: 'setInitialValues',
18143        value: function setInitialValues(values) {
18144            this.initial = {};
18145
18146            (0, _util.merge)(this.initial, values);
18147        }
18148    }, {
18149        key: 'populate',
18150        value: function populate(data) {
18151            var _this2 = this;
18152
18153            Object.keys(data).forEach(function (field) {
18154                (0, _util.guardAgainstReservedFieldName)(field);
18155
18156                if (_this2.hasOwnProperty(field)) {
18157                    (0, _util.merge)(_this2, _defineProperty({}, field, data[field]));
18158                }
18159            });
18160
18161            return this;
18162        }
18163
18164        /**
18165         * Clear the form fields.
18166         */
18167
18168    }, {
18169        key: 'clear',
18170        value: function clear() {
18171            for (var field in this.initial) {
18172                this[field] = '';
18173            }
18174
18175            this.errors.clear();
18176        }
18177
18178        /**
18179         * Send a POST request to the given URL.
18180         *
18181         * @param {string} url
18182         */
18183
18184    }, {
18185        key: 'post',
18186        value: function post(url) {
18187            return this.submit('post', url);
18188        }
18189
18190        /**
18191         * Send a PUT request to the given URL.
18192         *
18193         * @param {string} url
18194         */
18195
18196    }, {
18197        key: 'put',
18198        value: function put(url) {
18199            return this.submit('put', url);
18200        }
18201
18202        /**
18203         * Send a PATCH request to the given URL.
18204         *
18205         * @param {string} url
18206         */
18207
18208    }, {
18209        key: 'patch',
18210        value: function patch(url) {
18211            return this.submit('patch', url);
18212        }
18213
18214        /**
18215         * Send a DELETE request to the given URL.
18216         *
18217         * @param {string} url
18218         */
18219
18220    }, {
18221        key: 'delete',
18222        value: function _delete(url) {
18223            return this.submit('delete', url);
18224        }
18225
18226        /**
18227         * Submit the form.
18228         *
18229         * @param {string} requestType
18230         * @param {string} url
18231         */
18232
18233    }, {
18234        key: 'submit',
18235        value: function submit(requestType, url) {
18236            var _this3 = this;
18237
18238            this.__validateRequestType(requestType);
18239            this.errors.clear();
18240            this.processing = true;
18241            this.successful = false;
18242
18243            return new Promise(function (resolve, reject) {
18244                _this3.__http[requestType](url, _this3.hasFiles() ? (0, _util.objectToFormData)(_this3.data()) : _this3.data()).then(function (response) {
18245                    _this3.processing = false;
18246                    _this3.onSuccess(response.data);
18247
18248                    resolve(response.data);
18249                }).catch(function (error) {
18250                    _this3.processing = false;
18251                    _this3.onFail(error);
18252
18253                    reject(error);
18254                });
18255            });
18256        }
18257
18258        /**
18259         * @returns {boolean}
18260         */
18261
18262    }, {
18263        key: 'hasFiles',
18264        value: function hasFiles() {
18265            for (var property in this.initial) {
18266                if (this.hasFilesDeep(this[property])) {
18267                    return true;
18268                }
18269            }
18270
18271            return false;
18272        }
18273    }, {
18274        key: 'hasFilesDeep',
18275
18276
18277        /**
18278         * @param {Object|Array} object
18279         * @returns {boolean}
18280         */
18281        value: function hasFilesDeep(object) {
18282            if (object === null) {
18283                return false;
18284            }
18285
18286            if ((typeof object === 'undefined' ? 'undefined' : _typeof(object)) === 'object') {
18287                for (var key in object) {
18288                    if (object.hasOwnProperty(key)) {
18289                        if (this.hasFilesDeep(object[key])) {
18290                            return true;
18291                        }
18292                    }
18293                }
18294            }
18295
18296            if (Array.isArray(object)) {
18297                for (var _key in object) {
18298                    if (object.hasOwnProperty(_key)) {
18299                        return this.hasFilesDeep(object[_key]);
18300                    }
18301                }
18302            }
18303
18304            return (0, _util.isFile)(object);
18305        }
18306
18307        /**
18308         * Handle a successful form submission.
18309         *
18310         * @param {object} data
18311         */
18312
18313    }, {
18314        key: 'onSuccess',
18315        value: function onSuccess(data) {
18316            this.successful = true;
18317
18318            if (this.__options.resetOnSuccess) {
18319                this.reset();
18320            }
18321        }
18322
18323        /**
18324         * Handle a failed form submission.
18325         *
18326         * @param {object} data
18327         */
18328
18329    }, {
18330        key: 'onFail',
18331        value: function onFail(error) {
18332            this.successful = false;
18333
18334            if (error.response && error.response.data.errors) {
18335                this.errors.record(error.response.data.errors);
18336            }
18337        }
18338
18339        /**
18340         * Get the error message(s) for the given field.
18341         *
18342         * @param field
18343         */
18344
18345    }, {
18346        key: 'hasError',
18347        value: function hasError(field) {
18348            return this.errors.has(field);
18349        }
18350
18351        /**
18352         * Get the first error message for the given field.
18353         *
18354         * @param {string} field
18355         * @return {string}
18356         */
18357
18358    }, {
18359        key: 'getError',
18360        value: function getError(field) {
18361            return this.errors.first(field);
18362        }
18363
18364        /**
18365         * Get the error messages for the given field.
18366         *
18367         * @param {string} field
18368         * @return {array}
18369         */
18370
18371    }, {
18372        key: 'getErrors',
18373        value: function getErrors(field) {
18374            return this.errors.get(field);
18375        }
18376    }, {
18377        key: '__validateRequestType',
18378        value: function __validateRequestType(requestType) {
18379            var requestTypes = ['get', 'delete', 'head', 'post', 'put', 'patch'];
18380
18381            if (requestTypes.indexOf(requestType) === -1) {
18382                throw new Error('`' + requestType + '` is not a valid request type, ' + ('must be one of: `' + requestTypes.join('`, `') + '`.'));
18383            }
18384        }
18385    }], [{
18386        key: 'create',
18387        value: function create() {
18388            var data = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
18389
18390            return new Form().withData(data);
18391        }
18392    }]);
18393
18394    return Form;
18395}();
18396
18397exports["default"] = Form;
18398
18399/***/ }),
18400
vendor: 1,176 bytes, lines 18401-18441
18401/***/ "./node_modules/form-backend-validation/dist/index.js":
18402/*!************************************************************!*\
18403  !*** ./node_modules/form-backend-validation/dist/index.js ***!
18404  \************************************************************/
18405/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
18406
18407"use strict";
18408
18409
18410Object.defineProperty(exports, "__esModule", ({
18411  value: true
18412}));
18413
18414var _Form = __webpack_require__(/*! ./Form */ "./node_modules/form-backend-validation/dist/Form.js");
18415
18416Object.defineProperty(exports, "default", ({
18417  enumerable: true,
18418  get: function get() {
18419    return _interopRequireDefault(_Form).default;
18420  }
18421}));
18422Object.defineProperty(exports, "Form", ({
18423  enumerable: true,
18424  get: function get() {
18425    return _interopRequireDefault(_Form).default;
18426  }
18427}));
18428
18429var _Errors = __webpack_require__(/*! ./Errors */ "./node_modules/form-backend-validation/dist/Errors.js");
18430
18431Object.defineProperty(exports, "Errors", ({
18432  enumerable: true,
18433  get: function get() {
18434    return _interopRequireDefault(_Errors).default;
18435  }
18436}));
18437
18438function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
18439
18440/***/ }),
18441
vendor: 1,125 bytes, lines 18442-18464
18442/***/ "./node_modules/form-backend-validation/dist/util/fieldNameValidation.js":
18443/*!*******************************************************************************!*\
18444  !*** ./node_modules/form-backend-validation/dist/util/fieldNameValidation.js ***!
18445  \*******************************************************************************/
18446/***/ ((__unused_webpack_module, exports) => {
18447
18448"use strict";
18449
18450
18451Object.defineProperty(exports, "__esModule", ({
18452    value: true
18453}));
18454exports.guardAgainstReservedFieldName = guardAgainstReservedFieldName;
18455var reservedFieldNames = exports.reservedFieldNames = ['__http', '__options', '__validateRequestType', 'clear', 'data', 'delete', 'errors', 'getError', 'getErrors', 'hasError', 'initial', 'onFail', 'only', 'onSuccess', 'patch', 'populate', 'post', 'processing', 'successful', 'put', 'reset', 'submit', 'withData', 'withErrors', 'withOptions'];
18456
18457function guardAgainstReservedFieldName(fieldName) {
18458    if (reservedFieldNames.indexOf(fieldName) !== -1) {
18459        throw new Error('Field name ' + fieldName + ' isn\'t allowed to be used in a Form or Errors instance.');
18460    }
18461}
18462
18463/***/ }),
18464
vendor: 2,025 bytes, lines 18465-18527
18465/***/ "./node_modules/form-backend-validation/dist/util/formData.js":
18466/*!********************************************************************!*\
18467  !*** ./node_modules/form-backend-validation/dist/util/formData.js ***!
18468  \********************************************************************/
18469/***/ ((__unused_webpack_module, exports) => {
18470
18471"use strict";
18472
18473
18474Object.defineProperty(exports, "__esModule", ({
18475    value: true
18476}));
18477
18478var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
18479
18480exports.objectToFormData = objectToFormData;
18481function objectToFormData(object) {
18482    var formData = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : new FormData();
18483    var parent = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
18484
18485    if (object === null || object === 'undefined' || object.length === 0) {
18486        return formData.append(parent, object);
18487    }
18488
18489    for (var property in object) {
18490        if (object.hasOwnProperty(property)) {
18491            appendToFormData(formData, getKey(parent, property), object[property]);
18492        }
18493    }
18494
18495    return formData;
18496}
18497
18498function getKey(parent, property) {
18499    return parent ? parent + '[' + property + ']' : property;
18500}
18501
18502function appendToFormData(formData, key, value) {
18503    if (value instanceof Date) {
18504        return formData.append(key, value.toISOString());
18505    }
18506
18507    if (value instanceof File) {
18508        return formData.append(key, value, value.name);
18509    }
18510
18511    if (typeof value === "boolean") {
18512        return formData.append(key, value ? '1' : '0');
18513    }
18514
18515    if (value === null) {
18516        return formData.append(key, '');
18517    }
18518
18519    if ((typeof value === 'undefined' ? 'undefined' : _typeof(value)) !== 'object') {
18520        return formData.append(key, value);
18521    }
18522
18523    objectToFormData(value, formData, key);
18524}
18525
18526/***/ }),
18527
vendor: 1,570 bytes, lines 18528-18578
18528/***/ "./node_modules/form-backend-validation/dist/util/index.js":
18529/*!*****************************************************************!*\
18530  !*** ./node_modules/form-backend-validation/dist/util/index.js ***!
18531  \*****************************************************************/
18532/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
18533
18534"use strict";
18535
18536
18537Object.defineProperty(exports, "__esModule", ({
18538  value: true
18539}));
18540
18541var _objects = __webpack_require__(/*! ./objects */ "./node_modules/form-backend-validation/dist/util/objects.js");
18542
18543Object.keys(_objects).forEach(function (key) {
18544  if (key === "default" || key === "__esModule") return;
18545  Object.defineProperty(exports, key, {
18546    enumerable: true,
18547    get: function get() {
18548      return _objects[key];
18549    }
18550  });
18551});
18552
18553var _formData = __webpack_require__(/*! ./formData */ "./node_modules/form-backend-validation/dist/util/formData.js");
18554
18555Object.keys(_formData).forEach(function (key) {
18556  if (key === "default" || key === "__esModule") return;
18557  Object.defineProperty(exports, key, {
18558    enumerable: true,
18559    get: function get() {
18560      return _formData[key];
18561    }
18562  });
18563});
18564
18565var _fieldNameValidation = __webpack_require__(/*! ./fieldNameValidation */ "./node_modules/form-backend-validation/dist/util/fieldNameValidation.js");
18566
18567Object.keys(_fieldNameValidation).forEach(function (key) {
18568  if (key === "default" || key === "__esModule") return;
18569  Object.defineProperty(exports, key, {
18570    enumerable: true,
18571    get: function get() {
18572      return _fieldNameValidation[key];
18573    }
18574  });
18575});
18576
18577/***/ }),
18578
vendor: 92,720 bytes, lines 18579-18913
18579/***/ "./node_modules/form-backend-validation/dist/util/objects.js":
18580/*!*******************************************************************!*\
18581  !*** ./node_modules/form-backend-validation/dist/util/objects.js ***!
18582  \*******************************************************************/
18583/***/ ((__unused_webpack_module, exports) => {
18584
18585"use strict";
18586
18587
18588Object.defineProperty(exports, "__esModule", ({
18589    value: true
18590}));
18591
18592var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
18593
18594exports.isArray = isArray;
18595exports.isFile = isFile;
18596exports.merge = merge;
18597exports.cloneDeep = cloneDeep;
18598function isArray(object) {
18599    return Object.prototype.toString.call(object) === '[object Array]';
18600}
18601
18602function isFile(object) {
18603    return object instanceof File || object instanceof FileList;
18604}
18605
18606function merge(a, b) {
18607    for (var key in b) {
18608        a[key] = cloneDeep(b[key]);
18609    }
18610}
18611
18612function cloneDeep(object) {
18613    if (object === null) {
18614        return null;
18615    }
18616
18617    if (isFile(object)) {
18618        return object;
18619    }
18620
18621    if (Array.isArray(object)) {
18622        var clone = [];
18623
18624        for (var key in object) {
18625            if (object.hasOwnProperty(key)) {
18626                clone[key] = cloneDeep(object[key]);
18627            }
18628        }
18629
18630        return clone;
18631    }
18632
18633    if ((typeof object === 'undefined' ? 'undefined' : _typeof(object)) === 'object') {
18634        var _clone = {};
18635
18636        for (var _key in object) {
18637            if (object.hasOwnProperty(_key)) {
18638                _clone[_key] = cloneDeep(object[_key]);
18639            }
18640        }
18641
18642        return _clone;
18643    }
18644
18645    return object;
18646}
18647
18648/***/ }),
18649
18650/***/ "./node_modules/laravel-mix/node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-12.use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/NewsList.vue?vue&type=style&index=0&id=b8a09a08&scoped=true&lang=scss":
18651/*!******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
18652  !*** ./node_modules/laravel-mix/node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-12.use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/NewsList.vue?vue&type=style&index=0&id=b8a09a08&scoped=true&lang=scss ***!
18653  \******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
18654/***/ ((module, __webpack_exports__, __webpack_require__) => {
18655
18656"use strict";
18657__webpack_require__.r(__webpack_exports__);
18658/* harmony export */ __webpack_require__.d(__webpack_exports__, {
18659/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
18660/* harmony export */ });
18661/* harmony import */ var _node_modules_laravel_mix_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../node_modules/laravel-mix/node_modules/css-loader/dist/runtime/api.js */ "./node_modules/laravel-mix/node_modules/css-loader/dist/runtime/api.js");
18662/* harmony import */ var _node_modules_laravel_mix_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_laravel_mix_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0__);
18663// Imports
18664
18665var ___CSS_LOADER_EXPORT___ = _node_modules_laravel_mix_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0___default()(function(i){return i[1]});
18666// Module
18667___CSS_LOADER_EXPORT___.push([module.id, ".categories[data-v-b8a09a08] {\n  display: flex;\n  gap: 0.5rem;\n  margin-bottom: 1rem;\n  flex-wrap: wrap;\n  background-color: #1c4267;\n  padding: 10px;\n}\n.category-button[data-v-b8a09a08] {\n  padding: 0.5rem 1rem;\n  border: none;\n  background: transparent;\n  color: #e5e7eb;\n  cursor: pointer;\n}\n.category-button.selected[data-v-b8a09a08] {\n  background: white;\n  color: #982121;\n}\n.posts-list[data-v-b8a09a08] {\n  list-style: none;\n  padding: 0;\n  margin: 0;\n  background: white;\n  border: 1px solid #e5e7eb;\n}\n.post-item[data-v-b8a09a08] {\n  padding: 10px;\n  border-bottom: 1px solid #ddd;\n}\n.post-header[data-v-b8a09a08] {\n  display: flex;\n  justify-content: space-between;\n  text-decoration: none;\n}\n.post-title[data-v-b8a09a08] {\n  font-weight: 600;\n  color: black;\n}\n.post-date[data-v-b8a09a08] {\n  font-size: 0.85rem;\n  color: #6b7280;\n}\n.read-more[data-v-b8a09a08] {\n  color: #2563eb;\n}\n.no-posts[data-v-b8a09a08] {\n  text-align: center;\n  padding: 1rem;\n  color: #6b7280;\n}", ""]);
18668// Exports
18669/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);
18670
18671
18672/***/ }),
18673
18674/***/ "./node_modules/laravel-mix/node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-12.use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/gallery/Albums.vue?vue&type=style&index=0&id=52e77a42&scoped=true&lang=scss":
18675/*!*************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
18676  !*** ./node_modules/laravel-mix/node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-12.use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/gallery/Albums.vue?vue&type=style&index=0&id=52e77a42&scoped=true&lang=scss ***!
18677  \*************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
18678/***/ ((module, __webpack_exports__, __webpack_require__) => {
18679
18680"use strict";
18681__webpack_require__.r(__webpack_exports__);
18682/* harmony export */ __webpack_require__.d(__webpack_exports__, {
18683/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
18684/* harmony export */ });
18685/* harmony import */ var _node_modules_laravel_mix_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../node_modules/laravel-mix/node_modules/css-loader/dist/runtime/api.js */ "./node_modules/laravel-mix/node_modules/css-loader/dist/runtime/api.js");
18686/* harmony import */ var _node_modules_laravel_mix_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_laravel_mix_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0__);
18687// Imports
18688
18689var ___CSS_LOADER_EXPORT___ = _node_modules_laravel_mix_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0___default()(function(i){return i[1]});
18690// Module
18691___CSS_LOADER_EXPORT___.push([module.id, ".album-grid[data-v-52e77a42] {\n  display: grid;\n  grid-template-columns: repeat(3, 1fr);\n  gap: 1rem;\n}\n.album[data-v-52e77a42] {\n  padding: 0.5rem;\n  background-color: #f5f5f5;\n  border-radius: 4px;\n}\n.album .album-preview[data-v-52e77a42] {\n  display: block;\n  width: 100%;\n  aspect-ratio: 6/4;\n}\n.album .album-preview img[data-v-52e77a42] {\n  width: 100%;\n  height: 100%;\n  border-radius: 5px;\n  -o-object-fit: cover;\n     object-fit: cover;\n  -o-object-position: center;\n     object-position: center;\n}\n.album .album-preview-multiple[data-v-52e77a42] {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 5px;\n  width: 100%;\n  aspect-ratio: 6/4;\n  border-radius: 5px;\n  overflow: hidden;\n}\n.album .album-preview-multiple img[data-v-52e77a42] {\n  border-radius: 5px;\n  width: 100%;\n  height: 100%;\n  -o-object-fit: cover;\n     object-fit: cover;\n  -o-object-position: center;\n     object-position: center;\n}\n.album .album-name[data-v-52e77a42] {\n  display: block;\n  margin-top: 0.5rem;\n  font-size: 1.1rem;\n  color: initial;\n}\n.album .album-photos-count[data-v-52e77a42] {\n  font-size: 0.9rem;\n  color: #333;\n  font-family: Verdana, Geneva, Tahoma, sans-serif;\n}\n.delete-album-btn[data-v-52e77a42] {\n  border: none;\n  width: 2rem;\n  height: 2rem;\n  display: inline-flex;\n  justify-content: center;\n  align-items: center;\n  color: rgb(220, 38, 38);\n  background-color: rgba(220, 38, 38, 0.1);\n  border-radius: 4px;\n}\n.delete-album-btn[data-v-52e77a42]:hover {\n  background-color: rgba(220, 38, 38, 0.2);\n}", ""]);
18692// Exports
18693/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);
18694
18695
18696/***/ }),
18697
18698/***/ "./node_modules/laravel-mix/node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-12.use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/gallery/FrontendAlbums.vue?vue&type=style&index=0&id=6feaa8de&scoped=true&lang=scss":
18699/*!*********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
18700  !*** ./node_modules/laravel-mix/node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-12.use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/gallery/FrontendAlbums.vue?vue&type=style&index=0&id=6feaa8de&scoped=true&lang=scss ***!
18701  \*********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
18702/***/ ((module, __webpack_exports__, __webpack_require__) => {
18703
18704"use strict";
18705__webpack_require__.r(__webpack_exports__);
18706/* harmony export */ __webpack_require__.d(__webpack_exports__, {
18707/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
18708/* harmony export */ });
18709/* harmony import */ var _node_modules_laravel_mix_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../node_modules/laravel-mix/node_modules/css-loader/dist/runtime/api.js */ "./node_modules/laravel-mix/node_modules/css-loader/dist/runtime/api.js");
18710/* harmony import */ var _node_modules_laravel_mix_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_laravel_mix_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0__);
18711// Imports
18712
18713var ___CSS_LOADER_EXPORT___ = _node_modules_laravel_mix_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0___default()(function(i){return i[1]});
18714// Module
18715___CSS_LOADER_EXPORT___.push([module.id, ".album-grid[data-v-6feaa8de] {\n  display: grid;\n  grid-template-columns: repeat(3, 1fr);\n  gap: 1rem;\n}\n.album[data-v-6feaa8de] {\n  padding: 0.5rem;\n  border-radius: 4px;\n}\n.album .album-preview[data-v-6feaa8de] {\n  display: block;\n  width: 100%;\n  aspect-ratio: 6/4;\n}\n.album .album-preview img[data-v-6feaa8de] {\n  width: 100%;\n  height: 100%;\n  border-radius: 5px;\n  -o-object-fit: cover;\n     object-fit: cover;\n  -o-object-position: center;\n     object-position: center;\n}\n.album .album-preview-multiple[data-v-6feaa8de] {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  gap: 5px;\n  width: 100%;\n  aspect-ratio: 6/4;\n  border-radius: 5px;\n  overflow: hidden;\n}\n.album .album-preview-multiple img[data-v-6feaa8de] {\n  border-radius: 5px;\n  width: 100%;\n  height: 100%;\n  -o-object-fit: cover;\n     object-fit: cover;\n  -o-object-position: center;\n     object-position: center;\n}\n.album .album-name[data-v-6feaa8de] {\n  display: block;\n  margin-top: 0.5rem;\n  font-size: 1.1rem;\n  color: initial;\n  font-weight: 500;\n  color: #282837;\n}\n.album:hover .album-name[data-v-6feaa8de] {\n  text-decoration: underline;\n}\n.album .album-photos-count[data-v-6feaa8de] {\n  font-size: 0.9rem;\n  color: #615f5f;\n  font-family: Verdana, Geneva, Tahoma, sans-serif;\n}", ""]);
18716// Exports
18717/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);
18718
18719
18720/***/ }),
18721
18722/***/ "./node_modules/laravel-mix/node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-12.use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/gallery/Uploader.vue?vue&type=style&index=0&id=6e95a0ae&scoped=true&lang=scss":
18723/*!***************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
18724  !*** ./node_modules/laravel-mix/node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-12.use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/gallery/Uploader.vue?vue&type=style&index=0&id=6e95a0ae&scoped=true&lang=scss ***!
18725  \***************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
18726/***/ ((module, __webpack_exports__, __webpack_require__) => {
18727
18728"use strict";
18729__webpack_require__.r(__webpack_exports__);
18730/* harmony export */ __webpack_require__.d(__webpack_exports__, {
18731/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
18732/* harmony export */ });
18733/* harmony import */ var _node_modules_laravel_mix_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../node_modules/laravel-mix/node_modules/css-loader/dist/runtime/api.js */ "./node_modules/laravel-mix/node_modules/css-loader/dist/runtime/api.js");
18734/* harmony import */ var _node_modules_laravel_mix_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_laravel_mix_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0__);
18735// Imports
18736
18737var ___CSS_LOADER_EXPORT___ = _node_modules_laravel_mix_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0___default()(function(i){return i[1]});
18738// Module
18739___CSS_LOADER_EXPORT___.push([module.id, ".main-wrap[data-v-6e95a0ae] {\n  display: flex;\n  gap: 1rem;\n}\n.main-wrap .content-root[data-v-6e95a0ae] {\n  flex-grow: 1;\n}\n.main-wrap .detail-pane[data-v-6e95a0ae] {\n  width: 200px;\n  flex-shrink: 0;\n}\n@media (min-width: 768px) {\n.main-wrap .detail-pane[data-v-6e95a0ae] {\n    width: 250px;\n}\n}\n@media (min-width: 992px) {\n.main-wrap .detail-pane[data-v-6e95a0ae] {\n    width: 300px;\n}\n}\n.vue-dropzone[data-v-6e95a0ae] {\n  border-radius: 6px;\n  border-style: dashed;\n  border-color: #00b782;\n}\n.vue-dropzone .dz-message[data-v-6e95a0ae] {\n  display: flex;\n  align-items: center;\n  justify-content: center;\n}\n.dropzone-custom-content .dropzone-custom-title[data-v-6e95a0ae] {\n  margin-top: 0;\n  color: #00b782;\n}\n.dropzone-custom-content .subtitle[data-v-6e95a0ae] {\n  color: #314b5f;\n}\n.gallery-grid[data-v-6e95a0ae] {\n  display: grid;\n  grid-template-columns: repeat(2, 1fr);\n  gap: 1rem;\n}\n@media (min-width: 768px) {\n.gallery-grid[data-v-6e95a0ae] {\n    grid-template-columns: repeat(3, 1fr);\n}\n}\n@media (min-width: 992px) {\n.gallery-grid[data-v-6e95a0ae] {\n    grid-template-columns: repeat(4, 1fr);\n}\n}\n.gallery-grid .photo-box[data-v-6e95a0ae] {\n  padding: 0.5rem;\n  border-radius: 4px;\n  border: 1px solid transparent;\n}\n.gallery-grid .photo-box[data-v-6e95a0ae]:hover {\n  border-color: #e5e5e5;\n  background-color: #fbfbfb;\n}\n.gallery-grid .photo-box.active[data-v-6e95a0ae] {\n  background-color: #e7e7e7;\n  box-shadow: 0px 1px 4px 2px #c0c0c0;\n}\n.gallery-grid .photo-box .photo[data-v-6e95a0ae] {\n  aspect-ratio: 6/4;\n  width: 100%;\n}\n.gallery-grid .photo-box .photo img[data-v-6e95a0ae] {\n  height: 100%;\n  width: 100%;\n  -o-object-fit: cover;\n     object-fit: cover;\n  -o-object-position: center;\n     object-position: center;\n  border-radius: 6px;\n}\n.gallery-grid .photo-box .photo-name[data-v-6e95a0ae] {\n  margin-top: 0.5rem;\n  font-family: Arial, Helvetica, sans-serif;\n  display: -webkit-box;\n  -webkit-line-clamp: 1;\n  -webkit-box-orient: vertical;\n  overflow: hidden;\n  word-break: break-all;\n}\n.detail-pane-content[data-v-6e95a0ae] {\n  font-family: Arial, Helvetica, sans-serif;\n  position: sticky;\n  top: 1rem;\n}\n.detail-pane-content .image-preview[data-v-6e95a0ae] {\n  border-radius: 4px;\n  width: 100%;\n  height: auto;\n}\n.detail-pane-content .image-title[data-v-6e95a0ae] {\n  font-size: 1.1rem;\n  font-weight: 600;\n  margin-top: 1rem;\n  margin-bottom: 0;\n  word-break: break-all;\n}\n.detail-pane-content .delete-image-btn[data-v-6e95a0ae] {\n  margin-top: 1rem;\n  margin-bottom: 1rem;\n  width: 100%;\n  padding-top: 0.5rem;\n  padding-bottom: 0.5rem;\n  background-color: white;\n  border: 1px solid rgb(255, 49, 49);\n  color: rgb(255, 49, 49);\n  border-radius: 4px;\n}\n.detail-pane-content .delete-image-btn[data-v-6e95a0ae]:hover {\n  background-color: rgba(255, 49, 49, 0.1);\n}\n.detail-pane-content .information-item[data-v-6e95a0ae] {\n  margin-bottom: 1rem;\n}\n.detail-pane-content .information-item .info-label[data-v-6e95a0ae] {\n  font-weight: 600;\n}", ""]);
18740// Exports
18741/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);
18742
18743
18744/***/ }),
18745
18746/***/ "./node_modules/laravel-mix/node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-12.use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/gallery/ViewAlbum.vue?vue&type=style&index=0&id=923d41c2&scoped=true&lang=scss":
18747/*!****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
18748  !*** ./node_modules/laravel-mix/node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-12.use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/gallery/ViewAlbum.vue?vue&type=style&index=0&id=923d41c2&scoped=true&lang=scss ***!
18749  \****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
18750/***/ ((module, __webpack_exports__, __webpack_require__) => {
18751
18752"use strict";
18753__webpack_require__.r(__webpack_exports__);
18754/* harmony export */ __webpack_require__.d(__webpack_exports__, {
18755/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
18756/* harmony export */ });
18757/* harmony import */ var _node_modules_laravel_mix_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../node_modules/laravel-mix/node_modules/css-loader/dist/runtime/api.js */ "./node_modules/laravel-mix/node_modules/css-loader/dist/runtime/api.js");
18758/* harmony import */ var _node_modules_laravel_mix_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_laravel_mix_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0__);
18759// Imports
18760
18761var ___CSS_LOADER_EXPORT___ = _node_modules_laravel_mix_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0___default()(function(i){return i[1]});
18762// Module
18763___CSS_LOADER_EXPORT___.push([module.id, ".gallery-grid[data-v-923d41c2] {\n  display: grid;\n  grid-template-columns: repeat(2, 1fr);\n  gap: 1rem;\n}\n@media (max-width: 768px) {\n.gallery-grid[data-v-923d41c2] {\n    grid-template-columns: repeat(3, 1fr);\n}\n}\n@media (min-width: 992px) {\n.gallery-grid[data-v-923d41c2] {\n    grid-template-columns: repeat(4, 1fr);\n}\n}\n.gallery-grid .photo-box[data-v-923d41c2] {\n  padding: 0.5rem;\n  border-radius: 4px;\n  border: 1px solid transparent;\n}\n.gallery-grid .photo-box[data-v-923d41c2]:hover {\n  border-color: #e5e5e5;\n  background-color: #fbfbfb;\n}\n.gallery-grid .photo-box.active[data-v-923d41c2] {\n  background-color: #e7e7e7;\n  box-shadow: 0px 1px 4px 2px #c0c0c0;\n}\n.gallery-grid .photo-box .photo[data-v-923d41c2] {\n  aspect-ratio: 6/4;\n  width: 100%;\n}\n.gallery-grid .photo-box .photo img[data-v-923d41c2] {\n  height: 100%;\n  width: 100%;\n  -o-object-fit: cover;\n     object-fit: cover;\n  -o-object-position: center;\n     object-position: center;\n  border-radius: 6px;\n}\n.gallery-grid .photo-box .photo-name[data-v-923d41c2] {\n  margin-top: 0.5rem;\n  font-family: Arial, Helvetica, sans-serif;\n  display: -webkit-box;\n  -webkit-line-clamp: 1;\n  -webkit-box-orient: vertical;\n  overflow: hidden;\n  word-break: break-all;\n}", ""]);
18764// Exports
18765/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);
18766
18767
18768/***/ }),
18769
18770/***/ "./node_modules/laravel-mix/node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-12.use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/video/VideoGallery.vue?vue&type=style&index=0&id=05149dee&lang=scss&scoped=true":
18771/*!*****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
18772  !*** ./node_modules/laravel-mix/node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-12.use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/video/VideoGallery.vue?vue&type=style&index=0&id=05149dee&lang=scss&scoped=true ***!
18773  \*****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
18774/***/ ((module, __webpack_exports__, __webpack_require__) => {
18775
18776"use strict";
18777__webpack_require__.r(__webpack_exports__);
18778/* harmony export */ __webpack_require__.d(__webpack_exports__, {
18779/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
18780/* harmony export */ });
18781/* harmony import */ var _node_modules_laravel_mix_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../node_modules/laravel-mix/node_modules/css-loader/dist/runtime/api.js */ "./node_modules/laravel-mix/node_modules/css-loader/dist/runtime/api.js");
18782/* harmony import */ var _node_modules_laravel_mix_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_laravel_mix_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0__);
18783// Imports
18784
18785var ___CSS_LOADER_EXPORT___ = _node_modules_laravel_mix_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0___default()(function(i){return i[1]});
18786// Module
18787___CSS_LOADER_EXPORT___.push([module.id, ".video-grid[data-v-05149dee] {\n  display: grid;\n  grid-template-columns: 1fr;\n  gap: 2rem;\n}\n.video-grid .video-item[data-v-05149dee] {\n  padding: 8px;\n  background-color: #f3f3f3;\n  border-radius: 4px;\n}\n.video-grid .video-item .video-container[data-v-05149dee] {\n  width: 100%;\n  aspect-ratio: 16/9;\n}\n.video-grid .video-item .video-title[data-v-05149dee] {\n  font-weight: 600;\n  padding: 8px;\n}\n@media (min-width: 768px) {\n.video-grid[data-v-05149dee] {\n    grid-template-columns: 1fr 1fr;\n}\n}\n@media (min-width: 1024) {\n.video-grid[data-v-05149dee] {\n    grid-template-columns: 1fr 1fr 1fr;\n}\n}", ""]);
18788// Exports
18789/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);
18790
18791
18792/***/ }),
18793
18794/***/ "./node_modules/laravel-mix/node_modules/css-loader/dist/cjs.js??clonedRuleSet-9.use[1]!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-9.use[2]!./node_modules/sweetalert2/dist/sweetalert2.min.css":
18795/*!********************************************************************************************************************************************************************************************************************!*\
18796  !*** ./node_modules/laravel-mix/node_modules/css-loader/dist/cjs.js??clonedRuleSet-9.use[1]!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-9.use[2]!./node_modules/sweetalert2/dist/sweetalert2.min.css ***!
18797  \********************************************************************************************************************************************************************************************************************/
18798/***/ ((module, __webpack_exports__, __webpack_require__) => {
18799
18800"use strict";
18801__webpack_require__.r(__webpack_exports__);
18802/* harmony export */ __webpack_require__.d(__webpack_exports__, {
18803/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
18804/* harmony export */ });
18805/* harmony import */ var _laravel_mix_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../laravel-mix/node_modules/css-loader/dist/runtime/api.js */ "./node_modules/laravel-mix/node_modules/css-loader/dist/runtime/api.js");
18806/* harmony import */ var _laravel_mix_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_laravel_mix_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0__);
18807// Imports
18808
18809var ___CSS_LOADER_EXPORT___ = _laravel_mix_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0___default()(function(i){return i[1]});
18810// Module
18811___CSS_LOADER_EXPORT___.push([module.id, ":root{--swal2-outline: 0 0 0 3px rgba(100, 150, 200, 0.5);--swal2-container-padding: 0.625em;--swal2-backdrop: rgba(0, 0, 0, 0.4);--swal2-width: 32em;--swal2-padding: 0 0 1.25em;--swal2-border: none;--swal2-border-radius: 0.3125rem;--swal2-background: white;--swal2-color: #545454;--swal2-footer-border-color: #eee;--swal2-show-animation: swal2-show 0.3s;--swal2-hide-animation: swal2-hide 0.15s forwards;--swal2-title-padding: 0.8em 1em 0;--swal2-html-container-padding: 1em 1.6em 0.3em;--swal2-input-background: transparent;--swal2-progress-step-background: #add8e6;--swal2-validation-message-background: #f0f0f0;--swal2-validation-message-color: #666;--swal2-close-button-position: initial;--swal2-close-button-inset: auto;--swal2-close-button-font-size: 2.5em;--swal2-close-button-color: #ccc;--swal2-close-button-transition: color 0.1s, box-shadow 0.1s;--swal2-close-button-outline: initial;--swal2-close-button-box-shadow: inset 0 0 0 3px transparent;--swal2-close-button-focus-box-shadow: inset var(--swal2-outline);--swal2-close-button-hover-transform: none;--swal2-confirm-button-background-color: #7066e0;--swal2-deny-button-background-color: #dc3741;--swal2-cancel-button-background-color: #6e7881}[data-swal2-theme=dark]{--swal2-dark-theme-black: #19191a;--swal2-dark-theme-white: #e1e1e1;--swal2-background: var(--swal2-dark-theme-black);--swal2-color: var(--swal2-dark-theme-white);--swal2-footer-border-color: #555;--swal2-input-background: color-mix(in srgb, var(--swal2-dark-theme-black), var(--swal2-dark-theme-white) 10%);--swal2-validation-message-background: color-mix( in srgb, var(--swal2-dark-theme-black), var(--swal2-dark-theme-white) 10% );--swal2-validation-message-color: var(--swal2-dark-theme-white)}@media(prefers-color-scheme: dark){[data-swal2-theme=auto]{--swal2-dark-theme-black: #19191a;--swal2-dark-theme-white: #e1e1e1;--swal2-background: var(--swal2-dark-theme-black);--swal2-color: var(--swal2-dark-theme-white);--swal2-footer-border-color: #555;--swal2-input-background: color-mix(in srgb, var(--swal2-dark-theme-black), var(--swal2-dark-theme-white) 10%);--swal2-validation-message-background: color-mix( in srgb, var(--swal2-dark-theme-black), var(--swal2-dark-theme-white) 10% );--swal2-validation-message-color: var(--swal2-dark-theme-white)}}body.swal2-shown:not(.swal2-no-backdrop,.swal2-toast-shown){overflow:hidden}body.swal2-height-auto{height:auto !important}body.swal2-no-backdrop .swal2-container{background-color:rgba(0,0,0,0) !important;pointer-events:none}body.swal2-no-backdrop .swal2-container .swal2-popup{pointer-events:all}body.swal2-no-backdrop .swal2-container .swal2-modal{box-shadow:0 0 10px var(--swal2-backdrop)}body.swal2-toast-shown .swal2-container{box-sizing:border-box;width:360px;max-width:100%;background-color:rgba(0,0,0,0);pointer-events:none}body.swal2-toast-shown .swal2-container.swal2-top{inset:0 auto auto 50%;transform:translateX(-50%)}body.swal2-toast-shown .swal2-container.swal2-top-end,body.swal2-toast-shown .swal2-container.swal2-top-right{inset:0 0 auto auto}body.swal2-toast-shown .swal2-container.swal2-top-start,body.swal2-toast-shown .swal2-container.swal2-top-left{inset:0 auto auto 0}body.swal2-toast-shown .swal2-container.swal2-center-start,body.swal2-toast-shown .swal2-container.swal2-center-left{inset:50% auto auto 0;transform:translateY(-50%)}body.swal2-toast-shown .swal2-container.swal2-center{inset:50% auto auto 50%;transform:translate(-50%, -50%)}body.swal2-toast-shown .swal2-container.swal2-center-end,body.swal2-toast-shown .swal2-container.swal2-center-right{inset:50% 0 auto auto;transform:translateY(-50%)}body.swal2-toast-shown .swal2-container.swal2-bottom-start,body.swal2-toast-shown .swal2-container.swal2-bottom-left{inset:auto auto 0 0}body.swal2-toast-shown .swal2-container.swal2-bottom{inset:auto auto 0 50%;transform:translateX(-50%)}body.swal2-toast-shown .swal2-container.swal2-bottom-end,body.swal2-toast-shown .swal2-container.swal2-bottom-right{inset:auto 0 0 auto}@media print{body.swal2-shown:not(.swal2-no-backdrop,.swal2-toast-shown){overflow-y:scroll !important}body.swal2-shown:not(.swal2-no-backdrop,.swal2-toast-shown)>[aria-hidden=true]{display:none}body.swal2-shown:not(.swal2-no-backdrop,.swal2-toast-shown) .swal2-container{position:static !important}}div:where(.swal2-container){display:grid;position:fixed;z-index:1060;inset:0;box-sizing:border-box;grid-template-areas:\"top-start     top            top-end\" \"center-start  center         center-end\" \"bottom-start  bottom-center  bottom-end\";grid-template-rows:minmax(min-content, auto) minmax(min-content, auto) minmax(min-content, auto);height:100%;padding:var(--swal2-container-padding);overflow-x:hidden;transition:background-color .1s;-webkit-overflow-scrolling:touch}div:where(.swal2-container).swal2-backdrop-show,div:where(.swal2-container).swal2-noanimation{background:var(--swal2-backdrop)}div:where(.swal2-container).swal2-backdrop-hide{background:rgba(0,0,0,0) !important}div:where(.swal2-container).swal2-top-start,div:where(.swal2-container).swal2-center-start,div:where(.swal2-container).swal2-bottom-start{grid-template-columns:minmax(0, 1fr) auto auto}div:where(.swal2-container).swal2-top,div:where(.swal2-container).swal2-center,div:where(.swal2-container).swal2-bottom{grid-template-columns:auto minmax(0, 1fr) auto}div:where(.swal2-container).swal2-top-end,div:where(.swal2-container).swal2-center-end,div:where(.swal2-container).swal2-bottom-end{grid-template-columns:auto auto minmax(0, 1fr)}div:where(.swal2-container).swal2-top-start>.swal2-popup{align-self:start}div:where(.swal2-container).swal2-top>.swal2-popup{grid-column:2;place-self:start center}div:where(.swal2-container).swal2-top-end>.swal2-popup,div:where(.swal2-container).swal2-top-right>.swal2-popup{grid-column:3;place-self:start end}div:where(.swal2-container).swal2-center-start>.swal2-popup,div:where(.swal2-container).swal2-center-left>.swal2-popup{grid-row:2;align-self:center}div:where(.swal2-container).swal2-center>.swal2-popup{grid-column:2;grid-row:2;place-self:center center}div:where(.swal2-container).swal2-center-end>.swal2-popup,div:where(.swal2-container).swal2-center-right>.swal2-popup{grid-column:3;grid-row:2;place-self:center end}div:where(.swal2-container).swal2-bottom-start>.swal2-popup,div:where(.swal2-container).swal2-bottom-left>.swal2-popup{grid-column:1;grid-row:3;align-self:end}div:where(.swal2-container).swal2-bottom>.swal2-popup{grid-column:2;grid-row:3;place-self:end center}div:where(.swal2-container).swal2-bottom-end>.swal2-popup,div:where(.swal2-container).swal2-bottom-right>.swal2-popup{grid-column:3;grid-row:3;place-self:end end}div:where(.swal2-container).swal2-grow-row>.swal2-popup,div:where(.swal2-container).swal2-grow-fullscreen>.swal2-popup{grid-column:1/4;width:100%}div:where(.swal2-container).swal2-grow-column>.swal2-popup,div:where(.swal2-container).swal2-grow-fullscreen>.swal2-popup{grid-row:1/4;align-self:stretch}div:where(.swal2-container).swal2-no-transition{transition:none !important}div:where(.swal2-container) div:where(.swal2-popup){display:none;position:relative;box-sizing:border-box;grid-template-columns:minmax(0, 100%);width:var(--swal2-width);max-width:100%;padding:var(--swal2-padding);border:var(--swal2-border);border-radius:var(--swal2-border-radius);background:var(--swal2-background);color:var(--swal2-color);font-family:inherit;font-size:1rem}div:where(.swal2-container) div:where(.swal2-popup):focus{outline:none}div:where(.swal2-container) div:where(.swal2-popup).swal2-loading{overflow-y:hidden}div:where(.swal2-container) div:where(.swal2-popup).swal2-draggable{cursor:grab}div:where(.swal2-container) div:where(.swal2-popup).swal2-draggable div:where(.swal2-icon){cursor:grab}div:where(.swal2-container) div:where(.swal2-popup).swal2-dragging{cursor:grabbing}div:where(.swal2-container) div:where(.swal2-popup).swal2-dragging div:where(.swal2-icon){cursor:grabbing}div:where(.swal2-container) h2:where(.swal2-title){position:relative;max-width:100%;margin:0;padding:var(--swal2-title-padding);color:inherit;font-size:1.875em;font-weight:600;text-align:center;text-transform:none;word-wrap:break-word;cursor:initial}div:where(.swal2-container) div:where(.swal2-actions){display:flex;z-index:1;box-sizing:border-box;flex-wrap:wrap;align-items:center;justify-content:center;width:auto;margin:1.25em auto 0;padding:0}div:where(.swal2-container) div:where(.swal2-actions):not(.swal2-loading) .swal2-styled[disabled]{opacity:.4}div:where(.swal2-container) div:where(.swal2-actions):not(.swal2-loading) .swal2-styled:hover{background-image:linear-gradient(rgba(0, 0, 0, 0.1), rgba(0, 0, 0, 0.1))}div:where(.swal2-container) div:where(.swal2-actions):not(.swal2-loading) .swal2-styled:active{background-image:linear-gradient(rgba(0, 0, 0, 0.2), rgba(0, 0, 0, 0.2))}div:where(.swal2-container) div:where(.swal2-loader){display:none;align-items:center;justify-content:center;width:2.2em;height:2.2em;margin:0 1.875em;animation:swal2-rotate-loading 1.5s linear 0s infinite normal;border-width:.25em;border-style:solid;border-radius:100%;border-color:#2778c4 rgba(0,0,0,0) #2778c4 rgba(0,0,0,0)}div:where(.swal2-container) button:where(.swal2-styled){margin:.3125em;padding:.625em 1.1em;transition:box-shadow .1s;box-shadow:0 0 0 3px rgba(0,0,0,0);font-weight:500}div:where(.swal2-container) button:where(.swal2-styled):not([disabled]){cursor:pointer}div:where(.swal2-container) button:where(.swal2-styled):where(.swal2-confirm){border:0;border-radius:.25em;background:initial;background-color:var(--swal2-confirm-button-background-color);color:#fff;font-size:1em}div:where(.swal2-container) button:where(.swal2-styled):where(.swal2-deny){border:0;border-radius:.25em;background:initial;background-color:var(--swal2-deny-button-background-color);color:#fff;font-size:1em}div:where(.swal2-container) button:where(.swal2-styled):where(.swal2-cancel){border:0;border-radius:.25em;background:initial;background-color:var(--swal2-cancel-button-background-color);color:#fff;font-size:1em}div:where(.swal2-container) button:where(.swal2-styled):focus-visible{outline:none;box-shadow:var(--swal2-action-button-outline)}div:where(.swal2-container) button:where(.swal2-styled)::-moz-focus-inner{border:0}div:where(.swal2-container) div:where(.swal2-footer){margin:1em 0 0;padding:1em 1em 0;border-top:1px solid var(--swal2-footer-border-color);color:inherit;font-size:1em;text-align:center;cursor:initial}div:where(.swal2-container) .swal2-timer-progress-bar-container{position:absolute;right:0;bottom:0;left:0;grid-column:auto !important;overflow:hidden;border-bottom-right-radius:var(--swal2-border-radius);border-bottom-left-radius:var(--swal2-border-radius)}div:where(.swal2-container) div:where(.swal2-timer-progress-bar){width:100%;height:.25em;background:rgba(0,0,0,.2)}div:where(.swal2-container) img:where(.swal2-image){max-width:100%;margin:2em auto 1em;cursor:initial}div:where(.swal2-container) button:where(.swal2-close){position:var(--swal2-close-button-position);inset:var(--swal2-close-button-inset);z-index:2;align-items:center;justify-content:center;width:1.2em;height:1.2em;margin-top:0;margin-right:0;margin-bottom:-1.2em;padding:0;overflow:hidden;transition:var(--swal2-close-button-transition);border:none;border-radius:var(--swal2-border-radius);outline:var(--swal2-close-button-outline);background:rgba(0,0,0,0);color:var(--swal2-close-button-color);font-family:monospace;font-size:var(--swal2-close-button-font-size);cursor:pointer;justify-self:end}div:where(.swal2-container) button:where(.swal2-close):hover{transform:var(--swal2-close-button-hover-transform);background:rgba(0,0,0,0);color:#f27474}div:where(.swal2-container) button:where(.swal2-close):focus-visible{outline:none;box-shadow:var(--swal2-close-button-focus-box-shadow)}div:where(.swal2-container) button:where(.swal2-close)::-moz-focus-inner{border:0}div:where(.swal2-container) div:where(.swal2-html-container){z-index:1;justify-content:center;margin:0;padding:var(--swal2-html-container-padding);overflow:auto;color:inherit;font-size:1.125em;font-weight:normal;line-height:normal;text-align:center;word-wrap:break-word;word-break:break-word;cursor:initial}div:where(.swal2-container) input:where(.swal2-input),div:where(.swal2-container) input:where(.swal2-file),div:where(.swal2-container) textarea:where(.swal2-textarea),div:where(.swal2-container) select:where(.swal2-select),div:where(.swal2-container) div:where(.swal2-radio),div:where(.swal2-container) label:where(.swal2-checkbox){margin:1em 2em 3px}div:where(.swal2-container) input:where(.swal2-input),div:where(.swal2-container) input:where(.swal2-file),div:where(.swal2-container) textarea:where(.swal2-textarea){box-sizing:border-box;width:auto;transition:border-color .1s,box-shadow .1s;border:1px solid #d9d9d9;border-radius:.1875em;background:var(--swal2-input-background);box-shadow:inset 0 1px 1px rgba(0,0,0,.06),0 0 0 3px rgba(0,0,0,0);color:inherit;font-size:1.125em}div:where(.swal2-container) input:where(.swal2-input).swal2-inputerror,div:where(.swal2-container) input:where(.swal2-file).swal2-inputerror,div:where(.swal2-container) textarea:where(.swal2-textarea).swal2-inputerror{border-color:#f27474 !important;box-shadow:0 0 2px #f27474 !important}div:where(.swal2-container) input:where(.swal2-input):focus,div:where(.swal2-container) input:where(.swal2-file):focus,div:where(.swal2-container) textarea:where(.swal2-textarea):focus{border:1px solid #b4dbed;outline:none;box-shadow:inset 0 1px 1px rgba(0,0,0,.06),0 0 0 3px rgba(100,150,200,.5)}div:where(.swal2-container) input:where(.swal2-input)::-moz-placeholder, div:where(.swal2-container) input:where(.swal2-file)::-moz-placeholder, div:where(.swal2-container) textarea:where(.swal2-textarea)::-moz-placeholder{color:#ccc}div:where(.swal2-container) input:where(.swal2-input)::placeholder,div:where(.swal2-container) input:where(.swal2-file)::placeholder,div:where(.swal2-container) textarea:where(.swal2-textarea)::placeholder{color:#ccc}div:where(.swal2-container) .swal2-range{margin:1em 2em 3px;background:var(--swal2-background)}div:where(.swal2-container) .swal2-range input{width:80%}div:where(.swal2-container) .swal2-range output{width:20%;color:inherit;font-weight:600;text-align:center}div:where(.swal2-container) .swal2-range input,div:where(.swal2-container) .swal2-range output{height:2.625em;padding:0;font-size:1.125em;line-height:2.625em}div:where(.swal2-container) .swal2-input{height:2.625em;padding:0 .75em}div:where(.swal2-container) .swal2-file{width:75%;margin-right:auto;margin-left:auto;background:var(--swal2-input-background);font-size:1.125em}div:where(.swal2-container) .swal2-textarea{height:6.75em;padding:.75em}div:where(.swal2-container) .swal2-select{min-width:50%;max-width:100%;padding:.375em .625em;background:var(--swal2-input-background);color:inherit;font-size:1.125em}div:where(.swal2-container) .swal2-radio,div:where(.swal2-container) .swal2-checkbox{align-items:center;justify-content:center;background:var(--swal2-background);color:inherit}div:where(.swal2-container) .swal2-radio label,div:where(.swal2-container) .swal2-checkbox label{margin:0 .6em;font-size:1.125em}div:where(.swal2-container) .swal2-radio input,div:where(.swal2-container) .swal2-checkbox input{flex-shrink:0;margin:0 .4em}div:where(.swal2-container) label:where(.swal2-input-label){display:flex;justify-content:center;margin:1em auto 0}div:where(.swal2-container) div:where(.swal2-validation-message){align-items:center;justify-content:center;margin:1em 0 0;padding:.625em;overflow:hidden;background:var(--swal2-validation-message-background);color:var(--swal2-validation-message-color);font-size:1em;font-weight:300}div:where(.swal2-container) div:where(.swal2-validation-message)::before{content:\"!\";display:inline-block;width:1.5em;min-width:1.5em;height:1.5em;margin:0 .625em;border-radius:50%;background-color:#f27474;color:#fff;font-weight:600;line-height:1.5em;text-align:center}div:where(.swal2-container) .swal2-progress-steps{flex-wrap:wrap;align-items:center;max-width:100%;margin:1.25em auto;padding:0;background:rgba(0,0,0,0);font-weight:600}div:where(.swal2-container) .swal2-progress-steps li{display:inline-block;position:relative}div:where(.swal2-container) .swal2-progress-steps .swal2-progress-step{z-index:20;flex-shrink:0;width:2em;height:2em;border-radius:2em;background:#2778c4;color:#fff;line-height:2em;text-align:center}div:where(.swal2-container) .swal2-progress-steps .swal2-progress-step.swal2-active-progress-step{background:#2778c4}div:where(.swal2-container) .swal2-progress-steps .swal2-progress-step.swal2-active-progress-step~.swal2-progress-step{background:var(--swal2-progress-step-background);color:#fff}div:where(.swal2-container) .swal2-progress-steps .swal2-progress-step.swal2-active-progress-step~.swal2-progress-step-line{background:var(--swal2-progress-step-background)}div:where(.swal2-container) .swal2-progress-steps .swal2-progress-step-line{z-index:10;flex-shrink:0;width:2.5em;height:.4em;margin:0 -1px;background:#2778c4}div:where(.swal2-icon){position:relative;box-sizing:content-box;justify-content:center;width:5em;height:5em;margin:2.5em auto .6em;border:.25em solid rgba(0,0,0,0);border-radius:50%;border-color:#000;font-family:inherit;line-height:5em;cursor:default;-webkit-user-select:none;-moz-user-select:none;user-select:none}div:where(.swal2-icon) .swal2-icon-content{display:flex;align-items:center;font-size:3.75em}div:where(.swal2-icon).swal2-error{border-color:#f27474;color:#f27474}div:where(.swal2-icon).swal2-error .swal2-x-mark{position:relative;flex-grow:1}div:where(.swal2-icon).swal2-error [class^=swal2-x-mark-line]{display:block;position:absolute;top:2.3125em;width:2.9375em;height:.3125em;border-radius:.125em;background-color:#f27474}div:where(.swal2-icon).swal2-error [class^=swal2-x-mark-line][class$=left]{left:1.0625em;transform:rotate(45deg)}div:where(.swal2-icon).swal2-error [class^=swal2-x-mark-line][class$=right]{right:1em;transform:rotate(-45deg)}div:where(.swal2-icon).swal2-error.swal2-icon-show{animation:swal2-animate-error-icon .5s}div:where(.swal2-icon).swal2-error.swal2-icon-show .swal2-x-mark{animation:swal2-animate-error-x-mark .5s}div:where(.swal2-icon).swal2-warning{border-color:#f8bb86;color:#f8bb86}div:where(.swal2-icon).swal2-warning.swal2-icon-show{animation:swal2-animate-error-icon .5s}div:where(.swal2-icon).swal2-warning.swal2-icon-show .swal2-icon-content{animation:swal2-animate-i-mark .5s}div:where(.swal2-icon).swal2-info{border-color:#3fc3ee;color:#3fc3ee}div:where(.swal2-icon).swal2-info.swal2-icon-show{animation:swal2-animate-error-icon .5s}div:where(.swal2-icon).swal2-info.swal2-icon-show .swal2-icon-content{animation:swal2-animate-i-mark .8s}div:where(.swal2-icon).swal2-question{border-color:#87adbd;color:#87adbd}div:where(.swal2-icon).swal2-question.swal2-icon-show{animation:swal2-animate-error-icon .5s}div:where(.swal2-icon).swal2-question.swal2-icon-show .swal2-icon-content{animation:swal2-animate-question-mark .8s}div:where(.swal2-icon).swal2-success{border-color:#a5dc86;color:#a5dc86}div:where(.swal2-icon).swal2-success [class^=swal2-success-circular-line]{position:absolute;width:3.75em;height:7.5em;border-radius:50%}div:where(.swal2-icon).swal2-success [class^=swal2-success-circular-line][class$=left]{top:-0.4375em;left:-2.0635em;transform:rotate(-45deg);transform-origin:3.75em 3.75em;border-radius:7.5em 0 0 7.5em}div:where(.swal2-icon).swal2-success [class^=swal2-success-circular-line][class$=right]{top:-0.6875em;left:1.875em;transform:rotate(-45deg);transform-origin:0 3.75em;border-radius:0 7.5em 7.5em 0}div:where(.swal2-icon).swal2-success .swal2-success-ring{position:absolute;z-index:2;top:-0.25em;left:-0.25em;box-sizing:content-box;width:100%;height:100%;border:.25em solid rgba(165,220,134,.3);border-radius:50%}div:where(.swal2-icon).swal2-success .swal2-success-fix{position:absolute;z-index:1;top:.5em;left:1.625em;width:.4375em;height:5.625em;transform:rotate(-45deg)}div:where(.swal2-icon).swal2-success [class^=swal2-success-line]{display:block;position:absolute;z-index:2;height:.3125em;border-radius:.125em;background-color:#a5dc86}div:where(.swal2-icon).swal2-success [class^=swal2-success-line][class$=tip]{top:2.875em;left:.8125em;width:1.5625em;transform:rotate(45deg)}div:where(.swal2-icon).swal2-success [class^=swal2-success-line][class$=long]{top:2.375em;right:.5em;width:2.9375em;transform:rotate(-45deg)}div:where(.swal2-icon).swal2-success.swal2-icon-show .swal2-success-line-tip{animation:swal2-animate-success-line-tip .75s}div:where(.swal2-icon).swal2-success.swal2-icon-show .swal2-success-line-long{animation:swal2-animate-success-line-long .75s}div:where(.swal2-icon).swal2-success.swal2-icon-show .swal2-success-circular-line-right{animation:swal2-rotate-success-circular-line 4.25s ease-in}[class^=swal2]{-webkit-tap-highlight-color:rgba(0,0,0,0)}.swal2-show{animation:var(--swal2-show-animation)}.swal2-hide{animation:var(--swal2-hide-animation)}.swal2-noanimation{transition:none}.swal2-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}.swal2-rtl .swal2-close{margin-right:initial;margin-left:0}.swal2-rtl .swal2-timer-progress-bar{right:0;left:auto}.swal2-toast{box-sizing:border-box;grid-column:1/4 !important;grid-row:1/4 !important;grid-template-columns:min-content auto min-content;padding:1em;overflow-y:hidden;background:var(--swal2-background);box-shadow:0 0 1px rgba(0,0,0,.075),0 1px 2px rgba(0,0,0,.075),1px 2px 4px rgba(0,0,0,.075),1px 3px 8px rgba(0,0,0,.075),2px 4px 16px rgba(0,0,0,.075);pointer-events:all}.swal2-toast>*{grid-column:2}.swal2-toast h2:where(.swal2-title){margin:.5em 1em;padding:0;font-size:1em;text-align:initial}.swal2-toast .swal2-loading{justify-content:center}.swal2-toast input:where(.swal2-input){height:2em;margin:.5em;font-size:1em}.swal2-toast .swal2-validation-message{font-size:1em}.swal2-toast div:where(.swal2-footer){margin:.5em 0 0;padding:.5em 0 0;font-size:.8em}.swal2-toast button:where(.swal2-close){grid-column:3/3;grid-row:1/99;align-self:center;width:.8em;height:.8em;margin:0;font-size:2em}.swal2-toast div:where(.swal2-html-container){margin:.5em 1em;padding:0;overflow:initial;font-size:1em;text-align:initial}.swal2-toast div:where(.swal2-html-container):empty{padding:0}.swal2-toast .swal2-loader{grid-column:1;grid-row:1/99;align-self:center;width:2em;height:2em;margin:.25em}.swal2-toast .swal2-icon{grid-column:1;grid-row:1/99;align-self:center;width:2em;min-width:2em;height:2em;margin:0 .5em 0 0}.swal2-toast .swal2-icon .swal2-icon-content{display:flex;align-items:center;font-size:1.8em;font-weight:bold}.swal2-toast .swal2-icon.swal2-success .swal2-success-ring{width:2em;height:2em}.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line]{top:.875em;width:1.375em}.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=left]{left:.3125em}.swal2-toast .swal2-icon.swal2-error [class^=swal2-x-mark-line][class$=right]{right:.3125em}.swal2-toast div:where(.swal2-actions){justify-content:flex-start;height:auto;margin:0;margin-top:.5em;padding:0 .5em}.swal2-toast button:where(.swal2-styled){margin:.25em .5em;padding:.4em .6em;font-size:1em}.swal2-toast .swal2-success{border-color:#a5dc86}.swal2-toast .swal2-success [class^=swal2-success-circular-line]{position:absolute;width:1.6em;height:3em;border-radius:50%}.swal2-toast .swal2-success [class^=swal2-success-circular-line][class$=left]{top:-0.8em;left:-0.5em;transform:rotate(-45deg);transform-origin:2em 2em;border-radius:4em 0 0 4em}.swal2-toast .swal2-success [class^=swal2-success-circular-line][class$=right]{top:-0.25em;left:.9375em;transform-origin:0 1.5em;border-radius:0 4em 4em 0}.swal2-toast .swal2-success .swal2-success-ring{width:2em;height:2em}.swal2-toast .swal2-success .swal2-success-fix{top:0;left:.4375em;width:.4375em;height:2.6875em}.swal2-toast .swal2-success [class^=swal2-success-line]{height:.3125em}.swal2-toast .swal2-success [class^=swal2-success-line][class$=tip]{top:1.125em;left:.1875em;width:.75em}.swal2-toast .swal2-success [class^=swal2-success-line][class$=long]{top:.9375em;right:.1875em;width:1.375em}.swal2-toast .swal2-success.swal2-icon-show .swal2-success-line-tip{animation:swal2-toast-animate-success-line-tip .75s}.swal2-toast .swal2-success.swal2-icon-show .swal2-success-line-long{animation:swal2-toast-animate-success-line-long .75s}.swal2-toast.swal2-show{animation:swal2-toast-show .5s}.swal2-toast.swal2-hide{animation:swal2-toast-hide .1s forwards}@keyframes swal2-show{0%{transform:scale(0.7)}45%{transform:scale(1.05)}80%{transform:scale(0.95)}100%{transform:scale(1)}}@keyframes swal2-hide{0%{transform:scale(1);opacity:1}100%{transform:scale(0.5);opacity:0}}@keyframes swal2-animate-success-line-tip{0%{top:1.1875em;left:.0625em;width:0}54%{top:1.0625em;left:.125em;width:0}70%{top:2.1875em;left:-0.375em;width:3.125em}84%{top:3em;left:1.3125em;width:1.0625em}100%{top:2.8125em;left:.8125em;width:1.5625em}}@keyframes swal2-animate-success-line-long{0%{top:3.375em;right:2.875em;width:0}65%{top:3.375em;right:2.875em;width:0}84%{top:2.1875em;right:0;width:3.4375em}100%{top:2.375em;right:.5em;width:2.9375em}}@keyframes swal2-rotate-success-circular-line{0%{transform:rotate(-45deg)}5%{transform:rotate(-45deg)}12%{transform:rotate(-405deg)}100%{transform:rotate(-405deg)}}@keyframes swal2-animate-error-x-mark{0%{margin-top:1.625em;transform:scale(0.4);opacity:0}50%{margin-top:1.625em;transform:scale(0.4);opacity:0}80%{margin-top:-0.375em;transform:scale(1.15)}100%{margin-top:0;transform:scale(1);opacity:1}}@keyframes swal2-animate-error-icon{0%{transform:rotateX(100deg);opacity:0}100%{transform:rotateX(0deg);opacity:1}}@keyframes swal2-rotate-loading{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}@keyframes swal2-animate-question-mark{0%{transform:rotateY(-360deg)}100%{transform:rotateY(0)}}@keyframes swal2-animate-i-mark{0%{transform:rotateZ(45deg);opacity:0}25%{transform:rotateZ(-25deg);opacity:.4}50%{transform:rotateZ(15deg);opacity:.8}75%{transform:rotateZ(-5deg);opacity:1}100%{transform:rotateX(0);opacity:1}}@keyframes swal2-toast-show{0%{transform:translateY(-0.625em) rotateZ(2deg)}33%{transform:translateY(0) rotateZ(-2deg)}66%{transform:translateY(0.3125em) rotateZ(2deg)}100%{transform:translateY(0) rotateZ(0deg)}}@keyframes swal2-toast-hide{100%{transform:rotateZ(1deg);opacity:0}}@keyframes swal2-toast-animate-success-line-tip{0%{top:.5625em;left:.0625em;width:0}54%{top:.125em;left:.125em;width:0}70%{top:.625em;left:-0.25em;width:1.625em}84%{top:1.0625em;left:.75em;width:.5em}100%{top:1.125em;left:.1875em;width:.75em}}@keyframes swal2-toast-animate-success-line-long{0%{top:1.625em;right:1.375em;width:0}65%{top:1.25em;right:.9375em;width:0}84%{top:.9375em;right:0;width:1.125em}100%{top:.9375em;right:.1875em;width:1.375em}}\n", ""]);
18812// Exports
18813/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);
18814
18815
18816/***/ }),
18817
18818/***/ "./node_modules/laravel-mix/node_modules/css-loader/dist/cjs.js??clonedRuleSet-9.use[1]!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-9.use[2]!./node_modules/vue-cool-lightbox/dist/vue-cool-lightbox.min.css":
18819/*!********************************************************************************************************************************************************************************************************************************!*\
18820  !*** ./node_modules/laravel-mix/node_modules/css-loader/dist/cjs.js??clonedRuleSet-9.use[1]!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-9.use[2]!./node_modules/vue-cool-lightbox/dist/vue-cool-lightbox.min.css ***!
18821  \********************************************************************************************************************************************************************************************************************************/
18822/***/ ((module, __webpack_exports__, __webpack_require__) => {
18823
18824"use strict";
18825__webpack_require__.r(__webpack_exports__);
18826/* harmony export */ __webpack_require__.d(__webpack_exports__, {
18827/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
18828/* harmony export */ });
18829/* harmony import */ var _laravel_mix_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../laravel-mix/node_modules/css-loader/dist/runtime/api.js */ "./node_modules/laravel-mix/node_modules/css-loader/dist/runtime/api.js");
18830/* harmony import */ var _laravel_mix_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_laravel_mix_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0__);
18831// Imports
18832
18833var ___CSS_LOADER_EXPORT___ = _laravel_mix_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0___default()(function(i){return i[1]});
18834// Module
18835___CSS_LOADER_EXPORT___.push([module.id, ".cool-lightbox{position:fixed;left:0;bottom:0;top:0;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;right:0;-webkit-transition:all .3s ease;transition:all .3s ease}.cool-lightbox .cool-lightbox-zoom{position:absolute;bottom:15px;left:50%;display:-webkit-box;display:-ms-flexbox;display:flex;z-index:99999;background-color:rgba(15,15,15,.8);border-radius:8px;padding:0 12px;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-transform:translateX(-50%);transform:translateX(-50%)}.cool-lightbox .cool-lightbox-zoom input[type=range]{-webkit-appearance:none;margin:10px 0;width:105px;background:0 0}.cool-lightbox .cool-lightbox-zoom input[type=range]:focus{outline:0}.cool-lightbox .cool-lightbox-zoom input[type=range]::-webkit-slider-runnable-track{width:100%;height:4px;cursor:pointer;animate:.2s;-webkit-box-shadow:0 0 0 #000;box-shadow:0 0 0 #000;background:#e6e6e6;border-radius:11px;border:0 solid #000}.cool-lightbox .cool-lightbox-zoom input[type=range]::-webkit-slider-thumb{-webkit-box-shadow:1px 1px 1px #000;box-shadow:1px 1px 1px #000;border:1px solid #000;height:12px;width:12px;border-radius:13px;background:#fff;cursor:pointer;-webkit-appearance:none;margin-top:-4.5px}.cool-lightbox .cool-lightbox-zoom input[type=range]:focus::-webkit-slider-runnable-track{background:#e6e6e6}.cool-lightbox .cool-lightbox-zoom input[type=range]::-moz-range-track{width:100%;height:4px;cursor:pointer;animate:.2s;box-shadow:0 0 0 #000;background:#e6e6e6;border-radius:11px;border:0 solid #000}.cool-lightbox .cool-lightbox-zoom input[type=range]::-moz-range-thumb{box-shadow:1px 1px 1px #000;border:1px solid #000;height:12px;width:12px;border-radius:13px;background:#fff;cursor:pointer}.cool-lightbox .cool-lightbox-zoom input[type=range]::-ms-track{width:100%;height:4px;cursor:pointer;animate:.2s;background:0 0;border-color:transparent;color:transparent}.cool-lightbox .cool-lightbox-zoom input[type=range]::-ms-fill-lower{background:#e6e6e6;border:0 solid #000;border-radius:22px;box-shadow:0 0 0 #000}.cool-lightbox .cool-lightbox-zoom input[type=range]::-ms-fill-upper{background:#e6e6e6;border:0 solid #000;border-radius:22px;box-shadow:0 0 0 #000}.cool-lightbox .cool-lightbox-zoom input[type=range]::-ms-thumb{box-shadow:1px 1px 1px #000;border:1px solid #000;height:12px;width:12px;border-radius:13px;background:#fff;cursor:pointer}.cool-lightbox .cool-lightbox-zoom input[type=range]:focus::-ms-fill-lower{background:#e6e6e6}.cool-lightbox .cool-lightbox-zoom input[type=range]:focus::-ms-fill-upper{background:#e6e6e6}.cool-lightbox .cool-lightbox-zoom .cool-lightbox-zoom__icon{height:15px;width:15px;color:#fff}.cool-lightbox .cool-lightbox-zoom .cool-lightbox-zoom__icon:first-of-type{margin-right:10px}.cool-lightbox .cool-lightbox-zoom .cool-lightbox-zoom__icon:last-of-type{margin-left:10px}.cool-lightbox .cool-lightbox-thumbs{position:absolute;height:100vh;overflow-y:auto;width:102px;right:-102px;top:0;overflow-x:hidden;-webkit-transition:none;transition:none;background-color:#ddd;scrollbar-width:thin;scrollbar-color:#fa4242 rgba(175,175,175,.9)}@media (min-width:767px){.cool-lightbox .cool-lightbox-thumbs{-webkit-transition:all .3s ease;transition:all .3s ease}}.cool-lightbox .cool-lightbox-thumbs::-webkit-scrollbar{width:6px;height:6px}.cool-lightbox .cool-lightbox-thumbs::-webkit-scrollbar-button{width:0;height:0}.cool-lightbox .cool-lightbox-thumbs::-webkit-scrollbar-thumb{background:#fa4242;border:0 none #fff;border-radius:50px}.cool-lightbox .cool-lightbox-thumbs::-webkit-scrollbar-thumb:hover{background:#fff}.cool-lightbox .cool-lightbox-thumbs::-webkit-scrollbar-thumb:active{background:#000}.cool-lightbox .cool-lightbox-thumbs::-webkit-scrollbar-track{background:#e1e1e1;border:0 none #fff;border-radius:8px}.cool-lightbox .cool-lightbox-thumbs::-webkit-scrollbar-track:hover{background:#666}.cool-lightbox .cool-lightbox-thumbs::-webkit-scrollbar-track:active{background:#333}.cool-lightbox .cool-lightbox-thumbs::-webkit-scrollbar-corner{background:0 0}@media (min-width:767px){.cool-lightbox .cool-lightbox-thumbs{width:212px;right:-212px}}.cool-lightbox .cool-lightbox-thumbs .cool-lightbox-thumbs__list{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:2px;padding-right:0}.cool-lightbox .cool-lightbox-thumbs .cool-lightbox-thumbs__list .cool-lightbox__thumb{background-color:#000;width:100%;margin-right:2px;margin-bottom:2px;display:block;height:75px;position:relative}@media (min-width:767px){.cool-lightbox .cool-lightbox-thumbs .cool-lightbox-thumbs__list .cool-lightbox__thumb{width:calc(100%/2 - 2px)}}.cool-lightbox .cool-lightbox-thumbs .cool-lightbox-thumbs__list .cool-lightbox__thumb:before{top:0;left:0;right:0;bottom:0;opacity:0;content:'';z-index:150;-webkit-transition:all .3s ease;transition:all .3s ease;position:absolute;visibility:hidden;border:3px solid #fa4242}.cool-lightbox .cool-lightbox-thumbs .cool-lightbox-thumbs__list .cool-lightbox__thumb img{width:100%;height:100%;-o-object-fit:cover;object-fit:cover}.cool-lightbox .cool-lightbox-thumbs .cool-lightbox-thumbs__list .cool-lightbox__thumb.is-video .cool-lightbox__thumb__icon{position:absolute;z-index:100;top:50%;left:50%;width:25px;height:25px;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.cool-lightbox .cool-lightbox-thumbs .cool-lightbox-thumbs__list .cool-lightbox__thumb.is-video .cool-lightbox__thumb__icon path{fill:#fff}.cool-lightbox .cool-lightbox-thumbs .cool-lightbox-thumbs__list .cool-lightbox__thumb.is-video:after{content:'';top:0;left:0;right:0;bottom:0;z-index:50;position:absolute;background:rgba(0,0,0,.6)}.cool-lightbox .cool-lightbox-thumbs .cool-lightbox-thumbs__list .cool-lightbox__thumb.active:before,.cool-lightbox .cool-lightbox-thumbs .cool-lightbox-thumbs__list .cool-lightbox__thumb:hover:before{opacity:1;visibility:visible}.cool-lightbox .cool-lightbox__inner{padding:60px 0;position:absolute;top:0;left:0;right:0;bottom:0;overflow:hidden;-webkit-transition:none;transition:none}@media (min-width:767px){.cool-lightbox .cool-lightbox__inner{-webkit-transition:all .3s ease;transition:all .3s ease}}.cool-lightbox .cool-lightbox__progressbar{position:absolute;top:0;left:0;right:0;height:2px;z-index:500;-webkit-transform-origin:0;transform-origin:0;-webkit-transform:scaleX(0);transform:scaleX(0);-webkit-transition:-webkit-transform 3s linear;transition:-webkit-transform 3s linear;transition:transform 3s linear;transition:transform 3s linear, -webkit-transform 3s linear;display:block}.cool-lightbox.cool-lightbox--is-swipping{cursor:-webkit-grabbing;cursor:grabbing}.cool-lightbox.cool-lightbox--is-swipping iframe{pointer-events:none}.cool-lightbox.cool-lightbox--is-swipping .cool-lightbox__slide{-webkit-transition:none;transition:none}.cool-lightbox.cool-lightbox--is-swipping .cool-lightbox__slide.cool-lightbox__slide--hide{display:-webkit-box;display:-ms-flexbox;display:flex;z-index:50}.cool-lightbox.cool-lightbox--zoom-disabled .cool-lightbox__slide .cool-lightbox__slide__img{-webkit-transform:translate3d(-50%,-50%,0);transform:translate3d(-50%,-50%,0)}.cool-lightbox.cool-lightbox--can-zoom .cool-lightbox__slide img{cursor:-webkit-zoom-in;cursor:zoom-in}.cool-lightbox.cool-lightbox--is-zooming .cool-lightbox__slide img{cursor:move;cursor:grab;cursor:-webkit-grab}.cool-lightbox.cool-lightbox--is-zooming .cool-lightbox-caption{opacity:0}.cool-lightbox.cool-lightbox--thumbs-right.cool-lightbox--show-thumbs .cool-lightbox__inner{right:102px}@media (min-width:767px){.cool-lightbox.cool-lightbox--thumbs-right.cool-lightbox--show-thumbs .cool-lightbox__inner{right:212px}}.cool-lightbox.cool-lightbox--thumbs-right.cool-lightbox--show-thumbs .cool-lightbox-thumbs{right:0}.cool-lightbox.cool-lightbox--thumbs-bottom .cool-lightbox-thumbs{width:100%;left:0;right:0;top:auto;height:70px;bottom:-70px;overflow:auto}@media (min-width:767px){.cool-lightbox.cool-lightbox--thumbs-bottom .cool-lightbox-thumbs{bottom:-79px;height:79px}}.cool-lightbox.cool-lightbox--thumbs-bottom .cool-lightbox-thumbs .cool-lightbox-thumbs__list{width:100%;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.cool-lightbox.cool-lightbox--thumbs-bottom .cool-lightbox-thumbs .cool-lightbox-thumbs__list .cool-lightbox__thumb{width:100px;-ms-flex-negative:0;flex-shrink:0;margin-bottom:0;height:65px}@media (min-width:767px){.cool-lightbox.cool-lightbox--thumbs-bottom .cool-lightbox-thumbs .cool-lightbox-thumbs__list .cool-lightbox__thumb{height:75px}}.cool-lightbox.cool-lightbox--thumbs-bottom.cool-lightbox--show-thumbs .cool-lightbox__inner{bottom:70px}@media (min-width:767px){.cool-lightbox.cool-lightbox--thumbs-bottom.cool-lightbox--show-thumbs .cool-lightbox__inner{bottom:79px}}.cool-lightbox.cool-lightbox--thumbs-bottom.cool-lightbox--show-thumbs .cool-lightbox-thumbs{bottom:0}.cool-lightbox *{-webkit-box-sizing:border-box;box-sizing:border-box;padding:0;margin:0}.cool-lightbox button{background:0 0;border:none;cursor:pointer;outline:0}.cool-lightbox svg path,.cool-lightbox svg rect{fill:currentColor}.cool-lightbox .cool-lightbox-button{padding:21px 16px 21px 4px;height:100px;opacity:1;z-index:800;color:#ccc;-webkit-transition:all .3s ease;transition:all .3s ease;position:absolute;top:calc(50% - 50px);width:54px;transition:all .3s ease;visibility:visible}@media (min-width:767px){.cool-lightbox .cool-lightbox-button{width:70px;padding:31px 26px 31px 6px}}.cool-lightbox .cool-lightbox-button.hidden{opacity:0;visibility:hidden}.cool-lightbox .cool-lightbox-button:hover{color:#fff}.cool-lightbox .cool-lightbox-button>.cool-lightbox-button__icon{padding:7px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;background:rgba(30,30,30,.6)}.cool-lightbox .cool-lightbox-button>.cool-lightbox-button__icon>svg{width:100%;height:100%}.cool-lightbox .cool-lightbox-button.cool-lightbox-button--prev{left:0}.cool-lightbox .cool-lightbox-button.cool-lightbox-button--next{right:0;padding:21px 4px 21px 16px}@media (min-width:767px){.cool-lightbox .cool-lightbox-button.cool-lightbox-button--next{padding:31px 6px 31px 26px}}.cool-lightbox .cool-lightbox-pdf{max-width:100%}.cool-lightbox .cool-lightbox__iframe{width:100%;display:-webkit-box;display:-ms-flexbox;display:flex;top:50%;left:50%;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;position:relative;-webkit-transform:translate3d(-50%,-50%,0) scale3d(1,1,1);transform:translate3d(-50%,-50%,0) scale3d(1,1,1)}.cool-lightbox .cool-lightbox__iframe iframe{width:100%;height:100%}@media (min-width:767px){.cool-lightbox .cool-lightbox__iframe iframe{max-width:80vw;max-height:80vh}}.cool-lightbox .cool-lightbox__wrapper{width:100%;height:100%;position:relative}.cool-lightbox .cool-lightbox__wrapper.cool-lightbox__wrapper--swipe{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.cool-lightbox .cool-lightbox__wrapper.cool-lightbox__wrapper--swipe .cool-lightbox__slide{-ms-flex-negative:0;flex-shrink:0;display:-webkit-box;display:-ms-flexbox;display:flex;position:relative;height:100%;opacity:.4;-webkit-transition:opacity .3s linear;transition:opacity .3s linear}.cool-lightbox .cool-lightbox__wrapper.cool-lightbox__wrapper--swipe .cool-lightbox__slide.cool-lightbox__slide--current{opacity:1}.cool-lightbox .cool-lightbox__slide{width:100%;top:0;bottom:0;left:0;right:0;z-index:100;display:none;position:absolute;margin-right:30px;-webkit-transition:-webkit-transform .3s ease;transition:-webkit-transform .3s ease;transition:transform .3s ease;transition:transform .3s ease, -webkit-transform .3s ease}.cool-lightbox .cool-lightbox__slide:last-of-type{margin-right:0}.cool-lightbox .cool-lightbox__slide.cool-lightbox__slide--current{display:-webkit-box;display:-ms-flexbox;display:flex}.cool-lightbox .cool-lightbox__slide .cool-lightbox__slide__img{position:absolute;height:100%;width:100%;left:50%;top:50%;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-transform:translate3d(-50%,-50%,0) scale3d(1,1,1);transform:translate3d(-50%,-50%,0) scale3d(1,1,1);-webkit-transition:all .3s ease;transition:all .3s ease;display:-webkit-box;display:-ms-flexbox;display:flex}.cool-lightbox .cool-lightbox__slide img{max-width:100%;max-height:100%;margin:auto;z-index:9999;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-transform:translateZ(0);transform:translateZ(0);-webkit-box-shadow:0 0 1.5rem rgba(0,0,0,.45);box-shadow:0 0 1.5rem rgba(0,0,0,.45)}.cool-lightbox .cool-lightbox__slide picture{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;max-height:100%;height:100%;margin:auto;z-index:9999}.cool-lightbox-toolbar{position:absolute;top:0;right:0;opacity:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-transition:all .3s ease;transition:all .3s ease;visibility:visible}.cool-lightbox-toolbar.hidden{opacity:0;visibility:hidden}.cool-lightbox-toolbar .cool-lightbox-toolbar__btn{background:rgba(30,30,30,.6);border:0;border-radius:0;-webkit-box-shadow:none;box-shadow:none;cursor:pointer;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;margin:0;padding:9px;position:relative;-webkit-transition:color .2s;transition:color .2s;vertical-align:top;visibility:inherit;width:40px;height:40px;color:#ccc}@media (min-width:767px){.cool-lightbox-toolbar .cool-lightbox-toolbar__btn{width:44px;height:44px;padding:10px}}.cool-lightbox-toolbar .cool-lightbox-toolbar__btn>svg{width:100%;height:100%}.cool-lightbox-toolbar .cool-lightbox-toolbar__btn:hover{color:#fff}.cool-lightbox-caption{bottom:0;color:#eee;font-size:14px;font-weight:400;left:0;opacity:1;line-height:1.5;padding:18px 28px 16px 24px;right:0;text-align:center;direction:ltr;position:absolute;-webkit-transition:opacity .25s ease,visibility 0s ease .25s;transition:opacity .25s ease,visibility 0s ease .25s;z-index:99997;background:-webkit-gradient(linear,left bottom, left top,color-stop(0, rgba(0,0,0,.75)),color-stop(50%, rgba(0,0,0,.3)),color-stop(65%, rgba(0,0,0,.15)),color-stop(75.5%, rgba(0,0,0,.075)),color-stop(82.85%, rgba(0,0,0,.037)),color-stop(88%, rgba(0,0,0,.019)),to(transparent));background:linear-gradient(0deg,rgba(0,0,0,.75) 0,rgba(0,0,0,.3) 50%,rgba(0,0,0,.15) 65%,rgba(0,0,0,.075) 75.5%,rgba(0,0,0,.037) 82.85%,rgba(0,0,0,.019) 88%,transparent)}@media (min-width:767px){.cool-lightbox-caption{padding:22px 30px 23px 30px}}.cool-lightbox-caption a{color:#eee;text-decoration:underline}.cool-lightbox-caption h6{font-size:14px;margin:0 0 6px 0;line-height:130%}@media (min-width:767px){.cool-lightbox-caption h6{font-size:16px;margin:0 0 6px 0}}.cool-lightbox-caption p{font-size:13px;line-height:130%;color:#ccc}@media (min-width:767px){.cool-lightbox-caption p{font-size:15px}}.cool-lightbox-caption p a{color:#ccc}.cool-lightbox-caption p a:hover{color:#eee}.cool-lightbox-modal-enter-active,.cool-lightbox-modal-leave-active{-webkit-transition:opacity .35s;transition:opacity .35s}.cool-lightbox-modal-enter,.cool-lightbox-modal-leave-to{opacity:0}.cool-lightbox-slide-change-enter-active,.cool-lightbox-slide-change-leave-active{-webkit-transition:opacity .27s;transition:opacity .27s}.cool-lightbox-slide-change-enter,.cool-lightbox-slide-change-leave-to{opacity:0}.cool-lightbox-loading-wrapper{top:50%;left:50%;position:absolute;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.cool-lightbox-loading-wrapper .cool-lightbox-loading{-webkit-animation:cool-lightbox-rotate 1s linear infinite;animation:cool-lightbox-rotate 1s linear infinite;background:0 0;border:4px solid #888;border-bottom-color:#fff;border-radius:50%;height:50px;opacity:.7;padding:0;width:50px;z-index:500}@-webkit-keyframes cool-lightbox-rotate{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes cool-lightbox-rotate{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}", ""]);
18836// Exports
18837/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);
18838
18839
18840/***/ }),
18841
18842/***/ "./node_modules/laravel-mix/node_modules/css-loader/dist/cjs.js??clonedRuleSet-9.use[1]!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-9.use[2]!./node_modules/vue2-dropzone/dist/vue2Dropzone.min.css":
18843/*!***********************************************************************************************************************************************************************************************************************!*\
18844  !*** ./node_modules/laravel-mix/node_modules/css-loader/dist/cjs.js??clonedRuleSet-9.use[1]!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-9.use[2]!./node_modules/vue2-dropzone/dist/vue2Dropzone.min.css ***!
18845  \***********************************************************************************************************************************************************************************************************************/
18846/***/ ((module, __webpack_exports__, __webpack_require__) => {
18847
18848"use strict";
18849__webpack_require__.r(__webpack_exports__);
18850/* harmony export */ __webpack_require__.d(__webpack_exports__, {
18851/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
18852/* harmony export */ });
18853/* harmony import */ var _laravel_mix_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../laravel-mix/node_modules/css-loader/dist/runtime/api.js */ "./node_modules/laravel-mix/node_modules/css-loader/dist/runtime/api.js");
18854/* harmony import */ var _laravel_mix_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_laravel_mix_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0__);
18855// Imports
18856
18857var ___CSS_LOADER_EXPORT___ = _laravel_mix_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0___default()(function(i){return i[1]});
18858// Module
18859___CSS_LOADER_EXPORT___.push([module.id, "/*\n * The MIT License\n * Copyright (c) 2012 Matias Meno <[email protected]>\n */\n@keyframes passing-through {\n  0% {\n    opacity: 0;\n    transform: translateY(40px); }\n  30%, 70% {\n    opacity: 1;\n    transform: translateY(0px); }\n  100% {\n    opacity: 0;\n    transform: translateY(-40px); } }\n@keyframes slide-in {\n  0% {\n    opacity: 0;\n    transform: translateY(40px); }\n  30% {\n    opacity: 1;\n    transform: translateY(0px); } }\n@keyframes pulse {\n  0% {\n    transform: scale(1); }\n  10% {\n    transform: scale(1.1); }\n  20% {\n    transform: scale(1); } }\n.dropzone, .dropzone * {\n  box-sizing: border-box; }\n\n.dropzone {\n  min-height: 150px;\n  border: 2px solid rgba(0, 0, 0, 0.3);\n  background: white;\n  padding: 20px 20px; }\n  .dropzone.dz-clickable {\n    cursor: pointer; }\n    .dropzone.dz-clickable * {\n      cursor: default; }\n    .dropzone.dz-clickable .dz-message, .dropzone.dz-clickable .dz-message * {\n      cursor: pointer; }\n  .dropzone.dz-started .dz-message {\n    display: none; }\n  .dropzone.dz-drag-hover {\n    border-style: solid; }\n    .dropzone.dz-drag-hover .dz-message {\n      opacity: 0.5; }\n  .dropzone .dz-message {\n    text-align: center;\n    margin: 2em 0; }\n  .dropzone .dz-preview {\n    position: relative;\n    display: inline-block;\n    vertical-align: top;\n    margin: 16px;\n    min-height: 100px; }\n    .dropzone .dz-preview:hover {\n      z-index: 1000; }\n      .dropzone .dz-preview:hover .dz-details {\n        opacity: 1; }\n    .dropzone .dz-preview.dz-file-preview .dz-image {\n      border-radius: 20px;\n      background: #999;\n      background: linear-gradient(to bottom, #eee, #ddd); }\n    .dropzone .dz-preview.dz-file-preview .dz-details {\n      opacity: 1; }\n    .dropzone .dz-preview.dz-image-preview {\n      background: white; }\n      .dropzone .dz-preview.dz-image-preview .dz-details {\n        transition: opacity 0.2s linear; }\n    .dropzone .dz-preview .dz-remove {\n      font-size: 14px;\n      text-align: center;\n      display: block;\n      cursor: pointer;\n      border: none; }\n      .dropzone .dz-preview .dz-remove:hover {\n        text-decoration: underline; }\n    .dropzone .dz-preview:hover .dz-details {\n      opacity: 1; }\n    .dropzone .dz-preview .dz-details {\n      z-index: 20;\n      position: absolute;\n      top: 0;\n      left: 0;\n      opacity: 0;\n      font-size: 13px;\n      min-width: 100%;\n      max-width: 100%;\n      padding: 2em 1em;\n      text-align: center;\n      color: rgba(0, 0, 0, 0.9);\n      line-height: 150%; }\n      .dropzone .dz-preview .dz-details .dz-size {\n        margin-bottom: 1em;\n        font-size: 16px; }\n      .dropzone .dz-preview .dz-details .dz-filename {\n        white-space: nowrap; }\n        .dropzone .dz-preview .dz-details .dz-filename:hover span {\n          border: 1px solid rgba(200, 200, 200, 0.8);\n          background-color: rgba(255, 255, 255, 0.8); }\n        .dropzone .dz-preview .dz-details .dz-filename:not(:hover) {\n          overflow: hidden;\n          text-overflow: ellipsis; }\n          .dropzone .dz-preview .dz-details .dz-filename:not(:hover) span {\n            border: 1px solid transparent; }\n      .dropzone .dz-preview .dz-details .dz-filename span, .dropzone .dz-preview .dz-details .dz-size span {\n        background-color: rgba(255, 255, 255, 0.4);\n        padding: 0 0.4em;\n        border-radius: 3px; }\n    .dropzone .dz-preview:hover .dz-image img {\n      transform: scale(1.05, 1.05);\n      filter: blur(8px); }\n    .dropzone .dz-preview .dz-image {\n      border-radius: 20px;\n      overflow: hidden;\n      width: 120px;\n      height: 120px;\n      position: relative;\n      display: block;\n      z-index: 10; }\n      .dropzone .dz-preview .dz-image img {\n        display: block; }\n    .dropzone .dz-preview.dz-success .dz-success-mark {\n      animation: passing-through 3s cubic-bezier(0.77, 0, 0.175, 1); }\n    .dropzone .dz-preview.dz-error .dz-error-mark {\n      opacity: 1;\n      animation: slide-in 3s cubic-bezier(0.77, 0, 0.175, 1); }\n    .dropzone .dz-preview .dz-success-mark, .dropzone .dz-preview .dz-error-mark {\n      pointer-events: none;\n      opacity: 0;\n      z-index: 500;\n      position: absolute;\n      display: block;\n      top: 50%;\n      left: 50%;\n      margin-left: -27px;\n      margin-top: -27px; }\n      .dropzone .dz-preview .dz-success-mark svg, .dropzone .dz-preview .dz-error-mark svg {\n        display: block;\n        width: 54px;\n        height: 54px; }\n    .dropzone .dz-preview.dz-processing .dz-progress {\n      opacity: 1;\n      transition: all 0.2s linear; }\n    .dropzone .dz-preview.dz-complete .dz-progress {\n      opacity: 0;\n      transition: opacity 0.4s ease-in; }\n    .dropzone .dz-preview:not(.dz-processing) .dz-progress {\n      animation: pulse 6s ease infinite; }\n    .dropzone .dz-preview .dz-progress {\n      opacity: 1;\n      z-index: 1000;\n      pointer-events: none;\n      position: absolute;\n      height: 16px;\n      left: 50%;\n      top: 50%;\n      margin-top: -8px;\n      width: 80px;\n      margin-left: -40px;\n      background: rgba(255, 255, 255, 0.9);\n      -webkit-transform: scale(1);\n      border-radius: 8px;\n      overflow: hidden; }\n      .dropzone .dz-preview .dz-progress .dz-upload {\n        background: #333;\n        background: linear-gradient(to bottom, #666, #444);\n        position: absolute;\n        top: 0;\n        left: 0;\n        bottom: 0;\n        width: 0;\n        transition: width 300ms ease-in-out; }\n    .dropzone .dz-preview.dz-error .dz-error-message {\n      display: block; }\n    .dropzone .dz-preview.dz-error:hover .dz-error-message {\n      opacity: 1;\n      pointer-events: auto; }\n    .dropzone .dz-preview .dz-error-message {\n      pointer-events: none;\n      z-index: 1000;\n      position: absolute;\n      display: block;\n      display: none;\n      opacity: 0;\n      transition: opacity 0.3s ease;\n      border-radius: 8px;\n      font-size: 13px;\n      top: 130px;\n      left: -10px;\n      width: 140px;\n      background: #be2626;\n      background: linear-gradient(to bottom, #be2626, #a92222);\n      padding: 0.5em 1.2em;\n      color: white; }\n      .dropzone .dz-preview .dz-error-message:after {\n        content: '';\n        position: absolute;\n        top: -6px;\n        left: 64px;\n        width: 0;\n        height: 0;\n        border-left: 6px solid transparent;\n        border-right: 6px solid transparent;\n        border-bottom: 6px solid #be2626; }\n.vue-dropzone{border:2px solid #e5e5e5;font-family:Arial,sans-serif;letter-spacing:.2px;color:#777;transition:.2s linear}.vue-dropzone:hover{background-color:#f6f6f6}.vue-dropzone>i{color:#ccc}.vue-dropzone>.dz-preview .dz-image{border-radius:0;width:100%;height:100%}.vue-dropzone>.dz-preview .dz-image img:not([src]){width:200px;height:200px}.vue-dropzone>.dz-preview .dz-image:hover img{transform:none;-webkit-filter:none}.vue-dropzone>.dz-preview .dz-details{bottom:0;top:0;color:#fff;background-color:rgba(33,150,243,.8);transition:opacity .2s linear;text-align:left}.vue-dropzone>.dz-preview .dz-details .dz-filename{overflow:hidden}.vue-dropzone>.dz-preview .dz-details .dz-filename span,.vue-dropzone>.dz-preview .dz-details .dz-size span{background-color:transparent}.vue-dropzone>.dz-preview .dz-details .dz-filename:not(:hover) span{border:none}.vue-dropzone>.dz-preview .dz-details .dz-filename:hover span{background-color:transparent;border:none}.vue-dropzone>.dz-preview .dz-progress .dz-upload{background:#ccc}.vue-dropzone>.dz-preview .dz-remove{position:absolute;z-index:30;color:#fff;margin-left:15px;padding:10px;top:inherit;bottom:15px;border:2px #fff solid;text-decoration:none;text-transform:uppercase;font-size:.8rem;font-weight:800;letter-spacing:1.1px;opacity:0}.vue-dropzone>.dz-preview:hover .dz-remove{opacity:1}.vue-dropzone>.dz-preview .dz-error-mark,.vue-dropzone>.dz-preview .dz-success-mark{margin-left:auto;margin-top:auto;width:100%;top:35%;left:0}.vue-dropzone>.dz-preview .dz-error-mark svg,.vue-dropzone>.dz-preview .dz-success-mark svg{margin-left:auto;margin-right:auto}.vue-dropzone>.dz-preview .dz-error-message{margin-left:auto;margin-right:auto;left:0;width:100%;text-align:center}.vue-dropzone>.dz-preview .dz-error-message:after{display:none}", ""]);
18860// Exports
18861/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);
18862
18863
18864/***/ }),
18865
18866/***/ "./node_modules/laravel-mix/node_modules/css-loader/dist/cjs.js??clonedRuleSet-9.use[1]!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-9.use[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/SuchiForm.vue?vue&type=style&index=0&id=cd9393ea&scoped=true&lang=css":
18867/*!************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
18868  !*** ./node_modules/laravel-mix/node_modules/css-loader/dist/cjs.js??clonedRuleSet-9.use[1]!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-9.use[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/SuchiForm.vue?vue&type=style&index=0&id=cd9393ea&scoped=true&lang=css ***!
18869  \************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
18870/***/ ((module, __webpack_exports__, __webpack_require__) => {
18871
18872"use strict";
18873__webpack_require__.r(__webpack_exports__);
18874/* harmony export */ __webpack_require__.d(__webpack_exports__, {
18875/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
18876/* harmony export */ });
18877/* harmony import */ var _node_modules_laravel_mix_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../node_modules/laravel-mix/node_modules/css-loader/dist/runtime/api.js */ "./node_modules/laravel-mix/node_modules/css-loader/dist/runtime/api.js");
18878/* harmony import */ var _node_modules_laravel_mix_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_laravel_mix_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0__);
18879// Imports
18880
18881var ___CSS_LOADER_EXPORT___ = _node_modules_laravel_mix_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0___default()(function(i){return i[1]});
18882// Module
18883___CSS_LOADER_EXPORT___.push([module.id, "\n.required[data-v-cd9393ea]::after {\r\n    content: \" *\";\r\n    color: red;\r\n    vertical-align: super;\n}\n.reg-bar[data-v-cd9393ea] {\r\n    background-color: #f9fcff;\r\n    padding: 10px;\r\n    margin-bottom: 1rem;\r\n    border-radius: 0.05rem;\r\n    border: 1px solid #f0f7fe;\n}\r\n", ""]);
18884// Exports
18885/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);
18886
18887
18888/***/ }),
18889
18890/***/ "./node_modules/laravel-mix/node_modules/css-loader/dist/cjs.js??clonedRuleSet-9.use[1]!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-9.use[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/TokenSearch.vue?vue&type=style&index=0&id=dc6d0134&scoped=true&lang=css":
18891/*!**************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
18892  !*** ./node_modules/laravel-mix/node_modules/css-loader/dist/cjs.js??clonedRuleSet-9.use[1]!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-9.use[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/TokenSearch.vue?vue&type=style&index=0&id=dc6d0134&scoped=true&lang=css ***!
18893  \**************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
18894/***/ ((module, __webpack_exports__, __webpack_require__) => {
18895
18896"use strict";
18897__webpack_require__.r(__webpack_exports__);
18898/* harmony export */ __webpack_require__.d(__webpack_exports__, {
18899/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
18900/* harmony export */ });
18901/* harmony import */ var _node_modules_laravel_mix_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../node_modules/laravel-mix/node_modules/css-loader/dist/runtime/api.js */ "./node_modules/laravel-mix/node_modules/css-loader/dist/runtime/api.js");
18902/* harmony import */ var _node_modules_laravel_mix_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_laravel_mix_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0__);
18903// Imports
18904
18905var ___CSS_LOADER_EXPORT___ = _node_modules_laravel_mix_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_0___default()(function(i){return i[1]});
18906// Module
18907___CSS_LOADER_EXPORT___.push([module.id, "\n.search-btn[data-v-dc6d0134] {\r\n  color: #ffffff;\r\n  background-color: #3f51b5;\r\n  border: 2px solid #3f51b5;\r\n  border-top-right-radius: 0.25rem;\r\n  border-bottom-right-radius: 0.25rem;\r\n  padding-left: 20px;\r\n  padding-right: 20px;\r\n  font-weight: 600;\r\n  letter-spacing: 0.025rem;\n}\n.search-btn[data-v-dc6d0134]:hover{\r\n    opacity: 0.9;\r\n    outline: none;\n}\n.search-btn[data-v-dc6d0134]:focus{\r\n    outline: none;\n}\r\n", ""]);
18908// Exports
18909/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);
18910
18911
18912/***/ }),
18913
vendor: 1,972 bytes, lines 18914-18989
18914/***/ "./node_modules/laravel-mix/node_modules/css-loader/dist/runtime/api.js":
18915/*!******************************************************************************!*\
18916  !*** ./node_modules/laravel-mix/node_modules/css-loader/dist/runtime/api.js ***!
18917  \******************************************************************************/
18918/***/ ((module) => {
18919
18920"use strict";
18921
18922
18923/*
18924  MIT License http://www.opensource.org/licenses/mit-license.php
18925  Author Tobias Koppers @sokra
18926*/
18927// css base code, injected by the css-loader
18928// eslint-disable-next-line func-names
18929module.exports = function (cssWithMappingToString) {
18930  var list = []; // return the list of modules as css string
18931
18932  list.toString = function toString() {
18933    return this.map(function (item) {
18934      var content = cssWithMappingToString(item);
18935
18936      if (item[2]) {
18937        return "@media ".concat(item[2], " {").concat(content, "}");
18938      }
18939
18940      return content;
18941    }).join("");
18942  }; // import a list of modules into the list
18943  // eslint-disable-next-line func-names
18944
18945
18946  list.i = function (modules, mediaQuery, dedupe) {
18947    if (typeof modules === "string") {
18948      // eslint-disable-next-line no-param-reassign
18949      modules = [[null, modules, ""]];
18950    }
18951
18952    var alreadyImportedModules = {};
18953
18954    if (dedupe) {
18955      for (var i = 0; i < this.length; i++) {
18956        // eslint-disable-next-line prefer-destructuring
18957        var id = this[i][0];
18958
18959        if (id != null) {
18960          alreadyImportedModules[id] = true;
18961        }
18962      }
18963    }
18964
18965    for (var _i = 0; _i < modules.length; _i++) {
18966      var item = [].concat(modules[_i]);
18967
18968      if (dedupe && alreadyImportedModules[item[0]]) {
18969        // eslint-disable-next-line no-continue
18970        continue;
18971      }
18972
18973      if (mediaQuery) {
18974        if (!item[2]) {
18975          item[2] = mediaQuery;
18976        } else {
18977          item[2] = "".concat(mediaQuery, " and ").concat(item[2]);
18978        }
18979      }
18980
18981      list.push(item);
18982    }
18983  };
18984
18985  return list;
18986};
18987
18988/***/ }),
18989
vendor: 1,864 bytes, lines 18990-19064
18990/***/ "./node_modules/load-script/index.js":
18991/*!*******************************************!*\
18992  !*** ./node_modules/load-script/index.js ***!
18993  \*******************************************/
18994/***/ ((module) => {
18995
18996
18997module.exports = function load (src, opts, cb) {
18998  var head = document.head || document.getElementsByTagName('head')[0]
18999  var script = document.createElement('script')
19000
19001  if (typeof opts === 'function') {
19002    cb = opts
19003    opts = {}
19004  }
19005
19006  opts = opts || {}
19007  cb = cb || function() {}
19008
19009  script.type = opts.type || 'text/javascript'
19010  script.charset = opts.charset || 'utf8';
19011  script.async = 'async' in opts ? !!opts.async : true
19012  script.src = src
19013
19014  if (opts.attrs) {
19015    setAttributes(script, opts.attrs)
19016  }
19017
19018  if (opts.text) {
19019    script.text = '' + opts.text
19020  }
19021
19022  var onend = 'onload' in script ? stdOnEnd : ieOnEnd
19023  onend(script, cb)
19024
19025  // some good legacy browsers (firefox) fail the 'in' detection above
19026  // so as a fallback we always set onload
19027  // old IE will ignore this and new IE will set onload
19028  if (!script.onload) {
19029    stdOnEnd(script, cb);
19030  }
19031
19032  head.appendChild(script)
19033}
19034
19035function setAttributes(script, attrs) {
19036  for (var attr in attrs) {
19037    script.setAttribute(attr, attrs[attr]);
19038  }
19039}
19040
19041function stdOnEnd (script, cb) {
19042  script.onload = function () {
19043    this.onerror = this.onload = null
19044    cb(null, script)
19045  }
19046  script.onerror = function () {
19047    // this.onload = null here is necessary
19048    // because even IE9 works not like others
19049    this.onerror = this.onload = null
19050    cb(new Error('Failed to load ' + this.src), script)
19051  }
19052}
19053
19054function ieOnEnd (script, cb) {
19055  script.onreadystatechange = function () {
19056    if (this.readyState != 'complete' && this.readyState != 'loaded') return
19057    this.onreadystatechange = null
19058    cb(null, script) // there is no way to catch loading errors in IE8
19059  }
19060}
19061
19062
19063/***/ }),
19064
vendor: 544,380 bytes, lines 19065-36276
19065/***/ "./node_modules/lodash/lodash.js":
19066/*!***************************************!*\
19067  !*** ./node_modules/lodash/lodash.js ***!
19068  \***************************************/
19069/***/ (function(module, exports, __webpack_require__) {
19070
19071/* module decorator */ module = __webpack_require__.nmd(module);
19072var __WEBPACK_AMD_DEFINE_RESULT__;/**
19073 * @license
19074 * Lodash <https://lodash.com/>
19075 * Copyright OpenJS Foundation and other contributors <https://openjsf.org/>
19076 * Released under MIT license <https://lodash.com/license>
19077 * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>
19078 * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
19079 */
19080;(function() {
19081
19082  /** Used as a safe reference for `undefined` in pre-ES5 environments. */
19083  var undefined;
19084
19085  /** Used as the semantic version number. */
19086  var VERSION = '4.17.21';
19087
19088  /** Used as the size to enable large array optimizations. */
19089  var LARGE_ARRAY_SIZE = 200;
19090
19091  /** Error message constants. */
19092  var CORE_ERROR_TEXT = 'Unsupported core-js use. Try https://npms.io/search?q=ponyfill.',
19093      FUNC_ERROR_TEXT = 'Expected a function',
19094      INVALID_TEMPL_VAR_ERROR_TEXT = 'Invalid `variable` option passed into `_.template`';
19095
19096  /** Used to stand-in for `undefined` hash values. */
19097  var HASH_UNDEFINED = '__lodash_hash_undefined__';
19098
19099  /** Used as the maximum memoize cache size. */
19100  var MAX_MEMOIZE_SIZE = 500;
19101
19102  /** Used as the internal argument placeholder. */
19103  var PLACEHOLDER = '__lodash_placeholder__';
19104
19105  /** Used to compose bitmasks for cloning. */
19106  var CLONE_DEEP_FLAG = 1,
19107      CLONE_FLAT_FLAG = 2,
19108      CLONE_SYMBOLS_FLAG = 4;
19109
19110  /** Used to compose bitmasks for value comparisons. */
19111  var COMPARE_PARTIAL_FLAG = 1,
19112      COMPARE_UNORDERED_FLAG = 2;
19113
19114  /** Used to compose bitmasks for function metadata. */
19115  var WRAP_BIND_FLAG = 1,
19116      WRAP_BIND_KEY_FLAG = 2,
19117      WRAP_CURRY_BOUND_FLAG = 4,
19118      WRAP_CURRY_FLAG = 8,
19119      WRAP_CURRY_RIGHT_FLAG = 16,
19120      WRAP_PARTIAL_FLAG = 32,
19121      WRAP_PARTIAL_RIGHT_FLAG = 64,
19122      WRAP_ARY_FLAG = 128,
19123      WRAP_REARG_FLAG = 256,
19124      WRAP_FLIP_FLAG = 512;
19125
19126  /** Used as default options for `_.truncate`. */
19127  var DEFAULT_TRUNC_LENGTH = 30,
19128      DEFAULT_TRUNC_OMISSION = '...';
19129
19130  /** Used to detect hot functions by number of calls within a span of milliseconds. */
19131  var HOT_COUNT = 800,
19132      HOT_SPAN = 16;
19133
19134  /** Used to indicate the type of lazy iteratees. */
19135  var LAZY_FILTER_FLAG = 1,
19136      LAZY_MAP_FLAG = 2,
19137      LAZY_WHILE_FLAG = 3;
19138
19139  /** Used as references for various `Number` constants. */
19140  var INFINITY = 1 / 0,
19141      MAX_SAFE_INTEGER = 9007199254740991,
19142      MAX_INTEGER = 1.7976931348623157e+308,
19143      NAN = 0 / 0;
19144
19145  /** Used as references for the maximum length and index of an array. */
19146  var MAX_ARRAY_LENGTH = 4294967295,
19147      MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1,
19148      HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1;
19149
19150  /** Used to associate wrap methods with their bit flags. */
19151  var wrapFlags = [
19152    ['ary', WRAP_ARY_FLAG],
19153    ['bind', WRAP_BIND_FLAG],
19154    ['bindKey', WRAP_BIND_KEY_FLAG],
19155    ['curry', WRAP_CURRY_FLAG],
19156    ['curryRight', WRAP_CURRY_RIGHT_FLAG],
19157    ['flip', WRAP_FLIP_FLAG],
19158    ['partial', WRAP_PARTIAL_FLAG],
19159    ['partialRight', WRAP_PARTIAL_RIGHT_FLAG],
19160    ['rearg', WRAP_REARG_FLAG]
19161  ];
19162
19163  /** `Object#toString` result references. */
19164  var argsTag = '[object Arguments]',
19165      arrayTag = '[object Array]',
19166      asyncTag = '[object AsyncFunction]',
19167      boolTag = '[object Boolean]',
19168      dateTag = '[object Date]',
19169      domExcTag = '[object DOMException]',
19170      errorTag = '[object Error]',
19171      funcTag = '[object Function]',
19172      genTag = '[object GeneratorFunction]',
19173      mapTag = '[object Map]',
19174      numberTag = '[object Number]',
19175      nullTag = '[object Null]',
19176      objectTag = '[object Object]',
19177      promiseTag = '[object Promise]',
19178      proxyTag = '[object Proxy]',
19179      regexpTag = '[object RegExp]',
19180      setTag = '[object Set]',
19181      stringTag = '[object String]',
19182      symbolTag = '[object Symbol]',
19183      undefinedTag = '[object Undefined]',
19184      weakMapTag = '[object WeakMap]',
19185      weakSetTag = '[object WeakSet]';
19186
19187  var arrayBufferTag = '[object ArrayBuffer]',
19188      dataViewTag = '[object DataView]',
19189      float32Tag = '[object Float32Array]',
19190      float64Tag = '[object Float64Array]',
19191      int8Tag = '[object Int8Array]',
19192      int16Tag = '[object Int16Array]',
19193      int32Tag = '[object Int32Array]',
19194      uint8Tag = '[object Uint8Array]',
19195      uint8ClampedTag = '[object Uint8ClampedArray]',
19196      uint16Tag = '[object Uint16Array]',
19197      uint32Tag = '[object Uint32Array]';
19198
19199  /** Used to match empty string literals in compiled template source. */
19200  var reEmptyStringLeading = /\b__p \+= '';/g,
19201      reEmptyStringMiddle = /\b(__p \+=) '' \+/g,
19202      reEmptyStringTrailing = /(__e\(.*?\)|\b__t\)) \+\n'';/g;
19203
19204  /** Used to match HTML entities and HTML characters. */
19205  var reEscapedHtml = /&(?:amp|lt|gt|quot|#39);/g,
19206      reUnescapedHtml = /[&<>"']/g,
19207      reHasEscapedHtml = RegExp(reEscapedHtml.source),
19208      reHasUnescapedHtml = RegExp(reUnescapedHtml.source);
19209
19210  /** Used to match template delimiters. */
19211  var reEscape = /<%-([\s\S]+?)%>/g,
19212      reEvaluate = /<%([\s\S]+?)%>/g,
19213      reInterpolate = /<%=([\s\S]+?)%>/g;
19214
19215  /** Used to match property names within property paths. */
19216  var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,
19217      reIsPlainProp = /^\w*$/,
19218      rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g;
19219
19220  /**
19221   * Used to match `RegExp`
19222   * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).
19223   */
19224  var reRegExpChar = /[\\^$.*+?()[\]{}|]/g,
19225      reHasRegExpChar = RegExp(reRegExpChar.source);
19226
19227  /** Used to match leading whitespace. */
19228  var reTrimStart = /^\s+/;
19229
19230  /** Used to match a single whitespace character. */
19231  var reWhitespace = /\s/;
19232
19233  /** Used to match wrap detail comments. */
19234  var reWrapComment = /\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,
19235      reWrapDetails = /\{\n\/\* \[wrapped with (.+)\] \*/,
19236      reSplitDetails = /,? & /;
19237
19238  /** Used to match words composed of alphanumeric characters. */
19239  var reAsciiWord = /[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g;
19240
19241  /**
19242   * Used to validate the `validate` option in `_.template` variable.
19243   *
19244   * Forbids characters which could potentially change the meaning of the function argument definition:
19245   * - "()," (modification of function parameters)
19246   * - "=" (default value)
19247   * - "[]{}" (destructuring of function parameters)
19248   * - "/" (beginning of a comment)
19249   * - whitespace
19250   */
19251  var reForbiddenIdentifierChars = /[()=,{}\[\]\/\s]/;
19252
19253  /** Used to match backslashes in property paths. */
19254  var reEscapeChar = /\\(\\)?/g;
19255
19256  /**
19257   * Used to match
19258   * [ES template delimiters](http://ecma-international.org/ecma-262/7.0/#sec-template-literal-lexical-components).
19259   */
19260  var reEsTemplate = /\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g;
19261
19262  /** Used to match `RegExp` flags from their coerced string values. */
19263  var reFlags = /\w*$/;
19264
19265  /** Used to detect bad signed hexadecimal string values. */
19266  var reIsBadHex = /^[-+]0x[0-9a-f]+$/i;
19267
19268  /** Used to detect binary string values. */
19269  var reIsBinary = /^0b[01]+$/i;
19270
19271  /** Used to detect host constructors (Safari). */
19272  var reIsHostCtor = /^\[object .+?Constructor\]$/;
19273
19274  /** Used to detect octal string values. */
19275  var reIsOctal = /^0o[0-7]+$/i;
19276
19277  /** Used to detect unsigned integer values. */
19278  var reIsUint = /^(?:0|[1-9]\d*)$/;
19279
19280  /** Used to match Latin Unicode letters (excluding mathematical operators). */
19281  var reLatin = /[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g;
19282
19283  /** Used to ensure capturing order of template delimiters. */
19284  var reNoMatch = /($^)/;
19285
19286  /** Used to match unescaped characters in compiled string literals. */
19287  var reUnescapedString = /['\n\r\u2028\u2029\\]/g;
19288
19289  /** Used to compose unicode character classes. */
19290  var rsAstralRange = '\\ud800-\\udfff',
19291      rsComboMarksRange = '\\u0300-\\u036f',
19292      reComboHalfMarksRange = '\\ufe20-\\ufe2f',
19293      rsComboSymbolsRange = '\\u20d0-\\u20ff',
19294      rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,
19295      rsDingbatRange = '\\u2700-\\u27bf',
19296      rsLowerRange = 'a-z\\xdf-\\xf6\\xf8-\\xff',
19297      rsMathOpRange = '\\xac\\xb1\\xd7\\xf7',
19298      rsNonCharRange = '\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf',
19299      rsPunctuationRange = '\\u2000-\\u206f',
19300      rsSpaceRange = ' \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000',
19301      rsUpperRange = 'A-Z\\xc0-\\xd6\\xd8-\\xde',
19302      rsVarRange = '\\ufe0e\\ufe0f',
19303      rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange;
19304
19305  /** Used to compose unicode capture groups. */
19306  var rsApos = "['\u2019]",
19307      rsAstral = '[' + rsAstralRange + ']',
19308      rsBreak = '[' + rsBreakRange + ']',
19309      rsCombo = '[' + rsComboRange + ']',
19310      rsDigits = '\\d+',
19311      rsDingbat = '[' + rsDingbatRange + ']',
19312      rsLower = '[' + rsLowerRange + ']',
19313      rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']',
19314      rsFitz = '\\ud83c[\\udffb-\\udfff]',
19315      rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',
19316      rsNonAstral = '[^' + rsAstralRange + ']',
19317      rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}',
19318      rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]',
19319      rsUpper = '[' + rsUpperRange + ']',
19320      rsZWJ = '\\u200d';
19321
19322  /** Used to compose unicode regexes. */
19323  var rsMiscLower = '(?:' + rsLower + '|' + rsMisc + ')',
19324      rsMiscUpper = '(?:' + rsUpper + '|' + rsMisc + ')',
19325      rsOptContrLower = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?',
19326      rsOptContrUpper = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?',
19327      reOptMod = rsModifier + '?',
19328      rsOptVar = '[' + rsVarRange + ']?',
19329      rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',
19330      rsOrdLower = '\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])',
19331      rsOrdUpper = '\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])',
19332      rsSeq = rsOptVar + reOptMod + rsOptJoin,
19333      rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq,
19334      rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';
19335
19336  /** Used to match apostrophes. */
19337  var reApos = RegExp(rsApos, 'g');
19338
19339  /**
19340   * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and
19341   * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols).
19342   */
19343  var reComboMark = RegExp(rsCombo, 'g');
19344
19345  /** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */
19346  var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');
19347
19348  /** Used to match complex or compound words. */
19349  var reUnicodeWord = RegExp([
19350    rsUpper + '?' + rsLower + '+' + rsOptContrLower + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')',
19351    rsMiscUpper + '+' + rsOptContrUpper + '(?=' + [rsBreak, rsUpper + rsMiscLower, '$'].join('|') + ')',
19352    rsUpper + '?' + rsMiscLower + '+' + rsOptContrLower,
19353    rsUpper + '+' + rsOptContrUpper,
19354    rsOrdUpper,
19355    rsOrdLower,
19356    rsDigits,
19357    rsEmoji
19358  ].join('|'), 'g');
19359
19360  /** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */
19361  var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange  + rsComboRange + rsVarRange + ']');
19362
19363  /** Used to detect strings that need a more robust regexp to match words. */
19364  var reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;
19365
19366  /** Used to assign default `context` object properties. */
19367  var contextProps = [
19368    'Array', 'Buffer', 'DataView', 'Date', 'Error', 'Float32Array', 'Float64Array',
19369    'Function', 'Int8Array', 'Int16Array', 'Int32Array', 'Map', 'Math', 'Object',
19370    'Promise', 'RegExp', 'Set', 'String', 'Symbol', 'TypeError', 'Uint8Array',
19371    'Uint8ClampedArray', 'Uint16Array', 'Uint32Array', 'WeakMap',
19372    '_', 'clearTimeout', 'isFinite', 'parseInt', 'setTimeout'
19373  ];
19374
19375  /** Used to make template sourceURLs easier to identify. */
19376  var templateCounter = -1;
19377
19378  /** Used to identify `toStringTag` values of typed arrays. */
19379  var typedArrayTags = {};
19380  typedArrayTags[float32Tag] = typedArrayTags[float64Tag] =
19381  typedArrayTags[int8Tag] = typedArrayTags[int16Tag] =
19382  typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =
19383  typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =
19384  typedArrayTags[uint32Tag] = true;
19385  typedArrayTags[argsTag] = typedArrayTags[arrayTag] =
19386  typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =
19387  typedArrayTags[dataViewTag] = typedArrayTags[dateTag] =
19388  typedArrayTags[errorTag] = typedArrayTags[funcTag] =
19389  typedArrayTags[mapTag] = typedArrayTags[numberTag] =
19390  typedArrayTags[objectTag] = typedArrayTags[regexpTag] =
19391  typedArrayTags[setTag] = typedArrayTags[stringTag] =
19392  typedArrayTags[weakMapTag] = false;
19393
19394  /** Used to identify `toStringTag` values supported by `_.clone`. */
19395  var cloneableTags = {};
19396  cloneableTags[argsTag] = cloneableTags[arrayTag] =
19397  cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =
19398  cloneableTags[boolTag] = cloneableTags[dateTag] =
19399  cloneableTags[float32Tag] = cloneableTags[float64Tag] =
19400  cloneableTags[int8Tag] = cloneableTags[int16Tag] =
19401  cloneableTags[int32Tag] = cloneableTags[mapTag] =
19402  cloneableTags[numberTag] = cloneableTags[objectTag] =
19403  cloneableTags[regexpTag] = cloneableTags[setTag] =
19404  cloneableTags[stringTag] = cloneableTags[symbolTag] =
19405  cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =
19406  cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;
19407  cloneableTags[errorTag] = cloneableTags[funcTag] =
19408  cloneableTags[weakMapTag] = false;
19409
19410  /** Used to map Latin Unicode letters to basic Latin letters. */
19411  var deburredLetters = {
19412    // Latin-1 Supplement block.
19413    '\xc0': 'A',  '\xc1': 'A', '\xc2': 'A', '\xc3': 'A', '\xc4': 'A', '\xc5': 'A',
19414    '\xe0': 'a',  '\xe1': 'a', '\xe2': 'a', '\xe3': 'a', '\xe4': 'a', '\xe5': 'a',
19415    '\xc7': 'C',  '\xe7': 'c',
19416    '\xd0': 'D',  '\xf0': 'd',
19417    '\xc8': 'E',  '\xc9': 'E', '\xca': 'E', '\xcb': 'E',
19418    '\xe8': 'e',  '\xe9': 'e', '\xea': 'e', '\xeb': 'e',
19419    '\xcc': 'I',  '\xcd': 'I', '\xce': 'I', '\xcf': 'I',
19420    '\xec': 'i',  '\xed': 'i', '\xee': 'i', '\xef': 'i',
19421    '\xd1': 'N',  '\xf1': 'n',
19422    '\xd2': 'O',  '\xd3': 'O', '\xd4': 'O', '\xd5': 'O', '\xd6': 'O', '\xd8': 'O',
19423    '\xf2': 'o',  '\xf3': 'o', '\xf4': 'o', '\xf5': 'o', '\xf6': 'o', '\xf8': 'o',
19424    '\xd9': 'U',  '\xda': 'U', '\xdb': 'U', '\xdc': 'U',
19425    '\xf9': 'u',  '\xfa': 'u', '\xfb': 'u', '\xfc': 'u',
19426    '\xdd': 'Y',  '\xfd': 'y', '\xff': 'y',
19427    '\xc6': 'Ae', '\xe6': 'ae',
19428    '\xde': 'Th', '\xfe': 'th',
19429    '\xdf': 'ss',
19430    // Latin Extended-A block.
19431    '\u0100': 'A',  '\u0102': 'A', '\u0104': 'A',
19432    '\u0101': 'a',  '\u0103': 'a', '\u0105': 'a',
19433    '\u0106': 'C',  '\u0108': 'C', '\u010a': 'C', '\u010c': 'C',
19434    '\u0107': 'c',  '\u0109': 'c', '\u010b': 'c', '\u010d': 'c',
19435    '\u010e': 'D',  '\u0110': 'D', '\u010f': 'd', '\u0111': 'd',
19436    '\u0112': 'E',  '\u0114': 'E', '\u0116': 'E', '\u0118': 'E', '\u011a': 'E',
19437    '\u0113': 'e',  '\u0115': 'e', '\u0117': 'e', '\u0119': 'e', '\u011b': 'e',
19438    '\u011c': 'G',  '\u011e': 'G', '\u0120': 'G', '\u0122': 'G',
19439    '\u011d': 'g',  '\u011f': 'g', '\u0121': 'g', '\u0123': 'g',
19440    '\u0124': 'H',  '\u0126': 'H', '\u0125': 'h', '\u0127': 'h',
19441    '\u0128': 'I',  '\u012a': 'I', '\u012c': 'I', '\u012e': 'I', '\u0130': 'I',
19442    '\u0129': 'i',  '\u012b': 'i', '\u012d': 'i', '\u012f': 'i', '\u0131': 'i',
19443    '\u0134': 'J',  '\u0135': 'j',
19444    '\u0136': 'K',  '\u0137': 'k', '\u0138': 'k',
19445    '\u0139': 'L',  '\u013b': 'L', '\u013d': 'L', '\u013f': 'L', '\u0141': 'L',
19446    '\u013a': 'l',  '\u013c': 'l', '\u013e': 'l', '\u0140': 'l', '\u0142': 'l',
19447    '\u0143': 'N',  '\u0145': 'N', '\u0147': 'N', '\u014a': 'N',
19448    '\u0144': 'n',  '\u0146': 'n', '\u0148': 'n', '\u014b': 'n',
19449    '\u014c': 'O',  '\u014e': 'O', '\u0150': 'O',
19450    '\u014d': 'o',  '\u014f': 'o', '\u0151': 'o',
19451    '\u0154': 'R',  '\u0156': 'R', '\u0158': 'R',
19452    '\u0155': 'r',  '\u0157': 'r', '\u0159': 'r',
19453    '\u015a': 'S',  '\u015c': 'S', '\u015e': 'S', '\u0160': 'S',
19454    '\u015b': 's',  '\u015d': 's', '\u015f': 's', '\u0161': 's',
19455    '\u0162': 'T',  '\u0164': 'T', '\u0166': 'T',
19456    '\u0163': 't',  '\u0165': 't', '\u0167': 't',
19457    '\u0168': 'U',  '\u016a': 'U', '\u016c': 'U', '\u016e': 'U', '\u0170': 'U', '\u0172': 'U',
19458    '\u0169': 'u',  '\u016b': 'u', '\u016d': 'u', '\u016f': 'u', '\u0171': 'u', '\u0173': 'u',
19459    '\u0174': 'W',  '\u0175': 'w',
19460    '\u0176': 'Y',  '\u0177': 'y', '\u0178': 'Y',
19461    '\u0179': 'Z',  '\u017b': 'Z', '\u017d': 'Z',
19462    '\u017a': 'z',  '\u017c': 'z', '\u017e': 'z',
19463    '\u0132': 'IJ', '\u0133': 'ij',
19464    '\u0152': 'Oe', '\u0153': 'oe',
19465    '\u0149': "'n", '\u017f': 's'
19466  };
19467
19468  /** Used to map characters to HTML entities. */
19469  var htmlEscapes = {
19470    '&': '&amp;',
19471    '<': '&lt;',
19472    '>': '&gt;',
19473    '"': '&quot;',
19474    "'": '&#39;'
19475  };
19476
19477  /** Used to map HTML entities to characters. */
19478  var htmlUnescapes = {
19479    '&amp;': '&',
19480    '&lt;': '<',
19481    '&gt;': '>',
19482    '&quot;': '"',
19483    '&#39;': "'"
19484  };
19485
19486  /** Used to escape characters for inclusion in compiled string literals. */
19487  var stringEscapes = {
19488    '\\': '\\',
19489    "'": "'",
19490    '\n': 'n',
19491    '\r': 'r',
19492    '\u2028': 'u2028',
19493    '\u2029': 'u2029'
19494  };
19495
19496  /** Built-in method references without a dependency on `root`. */
19497  var freeParseFloat = parseFloat,
19498      freeParseInt = parseInt;
19499
19500  /** Detect free variable `global` from Node.js. */
19501  var freeGlobal = typeof __webpack_require__.g == 'object' && __webpack_require__.g && __webpack_require__.g.Object === Object && __webpack_require__.g;
19502
19503  /** Detect free variable `self`. */
19504  var freeSelf = typeof self == 'object' && self && self.Object === Object && self;
19505
19506  /** Used as a reference to the global object. */
19507  var root = freeGlobal || freeSelf || Function('return this')();
19508
19509  /** Detect free variable `exports`. */
19510  var freeExports =  true && exports && !exports.nodeType && exports;
19511
19512  /** Detect free variable `module`. */
19513  var freeModule = freeExports && "object" == 'object' && module && !module.nodeType && module;
19514
19515  /** Detect the popular CommonJS extension `module.exports`. */
19516  var moduleExports = freeModule && freeModule.exports === freeExports;
19517
19518  /** Detect free variable `process` from Node.js. */
19519  var freeProcess = moduleExports && freeGlobal.process;
19520
19521  /** Used to access faster Node.js helpers. */
19522  var nodeUtil = (function() {
19523    try {
19524      // Use `util.types` for Node.js 10+.
19525      var types = freeModule && freeModule.require && freeModule.require('util').types;
19526
19527      if (types) {
19528        return types;
19529      }
19530
19531      // Legacy `process.binding('util')` for Node.js < 10.
19532      return freeProcess && freeProcess.binding && freeProcess.binding('util');
19533    } catch (e) {}
19534  }());
19535
19536  /* Node.js helper references. */
19537  var nodeIsArrayBuffer = nodeUtil && nodeUtil.isArrayBuffer,
19538      nodeIsDate = nodeUtil && nodeUtil.isDate,
19539      nodeIsMap = nodeUtil && nodeUtil.isMap,
19540      nodeIsRegExp = nodeUtil && nodeUtil.isRegExp,
19541      nodeIsSet = nodeUtil && nodeUtil.isSet,
19542      nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;
19543
19544  /*--------------------------------------------------------------------------*/
19545
19546  /**
19547   * A faster alternative to `Function#apply`, this function invokes `func`
19548   * with the `this` binding of `thisArg` and the arguments of `args`.
19549   *
19550   * @private
19551   * @param {Function} func The function to invoke.
19552   * @param {*} thisArg The `this` binding of `func`.
19553   * @param {Array} args The arguments to invoke `func` with.
19554   * @returns {*} Returns the result of `func`.
19555   */
19556  function apply(func, thisArg, args) {
19557    switch (args.length) {
19558      case 0: return func.call(thisArg);
19559      case 1: return func.call(thisArg, args[0]);
19560      case 2: return func.call(thisArg, args[0], args[1]);
19561      case 3: return func.call(thisArg, args[0], args[1], args[2]);
19562    }
19563    return func.apply(thisArg, args);
19564  }
19565
19566  /**
19567   * A specialized version of `baseAggregator` for arrays.
19568   *
19569   * @private
19570   * @param {Array} [array] The array to iterate over.
19571   * @param {Function} setter The function to set `accumulator` values.
19572   * @param {Function} iteratee The iteratee to transform keys.
19573   * @param {Object} accumulator The initial aggregated object.
19574   * @returns {Function} Returns `accumulator`.
19575   */
19576  function arrayAggregator(array, setter, iteratee, accumulator) {
19577    var index = -1,
19578        length = array == null ? 0 : array.length;
19579
19580    while (++index < length) {
19581      var value = array[index];
19582      setter(accumulator, value, iteratee(value), array);
19583    }
19584    return accumulator;
19585  }
19586
19587  /**
19588   * A specialized version of `_.forEach` for arrays without support for
19589   * iteratee shorthands.
19590   *
19591   * @private
19592   * @param {Array} [array] The array to iterate over.
19593   * @param {Function} iteratee The function invoked per iteration.
19594   * @returns {Array} Returns `array`.
19595   */
19596  function arrayEach(array, iteratee) {
19597    var index = -1,
19598        length = array == null ? 0 : array.length;
19599
19600    while (++index < length) {
19601      if (iteratee(array[index], index, array) === false) {
19602        break;
19603      }
19604    }
19605    return array;
19606  }
19607
19608  /**
19609   * A specialized version of `_.forEachRight` for arrays without support for
19610   * iteratee shorthands.
19611   *
19612   * @private
19613   * @param {Array} [array] The array to iterate over.
19614   * @param {Function} iteratee The function invoked per iteration.
19615   * @returns {Array} Returns `array`.
19616   */
19617  function arrayEachRight(array, iteratee) {
19618    var length = array == null ? 0 : array.length;
19619
19620    while (length--) {
19621      if (iteratee(array[length], length, array) === false) {
19622        break;
19623      }
19624    }
19625    return array;
19626  }
19627
19628  /**
19629   * A specialized version of `_.every` for arrays without support for
19630   * iteratee shorthands.
19631   *
19632   * @private
19633   * @param {Array} [array] The array to iterate over.
19634   * @param {Function} predicate The function invoked per iteration.
19635   * @returns {boolean} Returns `true` if all elements pass the predicate check,
19636   *  else `false`.
19637   */
19638  function arrayEvery(array, predicate) {
19639    var index = -1,
19640        length = array == null ? 0 : array.length;
19641
19642    while (++index < length) {
19643      if (!predicate(array[index], index, array)) {
19644        return false;
19645      }
19646    }
19647    return true;
19648  }
19649
19650  /**
19651   * A specialized version of `_.filter` for arrays without support for
19652   * iteratee shorthands.
19653   *
19654   * @private
19655   * @param {Array} [array] The array to iterate over.
19656   * @param {Function} predicate The function invoked per iteration.
19657   * @returns {Array} Returns the new filtered array.
19658   */
19659  function arrayFilter(array, predicate) {
19660    var index = -1,
19661        length = array == null ? 0 : array.length,
19662        resIndex = 0,
19663        result = [];
19664
19665    while (++index < length) {
19666      var value = array[index];
19667      if (predicate(value, index, array)) {
19668        result[resIndex++] = value;
19669      }
19670    }
19671    return result;
19672  }
19673
19674  /**
19675   * A specialized version of `_.includes` for arrays without support for
19676   * specifying an index to search from.
19677   *
19678   * @private
19679   * @param {Array} [array] The array to inspect.
19680   * @param {*} target The value to search for.
19681   * @returns {boolean} Returns `true` if `target` is found, else `false`.
19682   */
19683  function arrayIncludes(array, value) {
19684    var length = array == null ? 0 : array.length;
19685    return !!length && baseIndexOf(array, value, 0) > -1;
19686  }
19687
19688  /**
19689   * This function is like `arrayIncludes` except that it accepts a comparator.
19690   *
19691   * @private
19692   * @param {Array} [array] The array to inspect.
19693   * @param {*} target The value to search for.
19694   * @param {Function} comparator The comparator invoked per element.
19695   * @returns {boolean} Returns `true` if `target` is found, else `false`.
19696   */
19697  function arrayIncludesWith(array, value, comparator) {
19698    var index = -1,
19699        length = array == null ? 0 : array.length;
19700
19701    while (++index < length) {
19702      if (comparator(value, array[index])) {
19703        return true;
19704      }
19705    }
19706    return false;
19707  }
19708
19709  /**
19710   * A specialized version of `_.map` for arrays without support for iteratee
19711   * shorthands.
19712   *
19713   * @private
19714   * @param {Array} [array] The array to iterate over.
19715   * @param {Function} iteratee The function invoked per iteration.
19716   * @returns {Array} Returns the new mapped array.
19717   */
19718  function arrayMap(array, iteratee) {
19719    var index = -1,
19720        length = array == null ? 0 : array.length,
19721        result = Array(length);
19722
19723    while (++index < length) {
19724      result[index] = iteratee(array[index], index, array);
19725    }
19726    return result;
19727  }
19728
19729  /**
19730   * Appends the elements of `values` to `array`.
19731   *
19732   * @private
19733   * @param {Array} array The array to modify.
19734   * @param {Array} values The values to append.
19735   * @returns {Array} Returns `array`.
19736   */
19737  function arrayPush(array, values) {
19738    var index = -1,
19739        length = values.length,
19740        offset = array.length;
19741
19742    while (++index < length) {
19743      array[offset + index] = values[index];
19744    }
19745    return array;
19746  }
19747
19748  /**
19749   * A specialized version of `_.reduce` for arrays without support for
19750   * iteratee shorthands.
19751   *
19752   * @private
19753   * @param {Array} [array] The array to iterate over.
19754   * @param {Function} iteratee The function invoked per iteration.
19755   * @param {*} [accumulator] The initial value.
19756   * @param {boolean} [initAccum] Specify using the first element of `array` as
19757   *  the initial value.
19758   * @returns {*} Returns the accumulated value.
19759   */
19760  function arrayReduce(array, iteratee, accumulator, initAccum) {
19761    var index = -1,
19762        length = array == null ? 0 : array.length;
19763
19764    if (initAccum && length) {
19765      accumulator = array[++index];
19766    }
19767    while (++index < length) {
19768      accumulator = iteratee(accumulator, array[index], index, array);
19769    }
19770    return accumulator;
19771  }
19772
19773  /**
19774   * A specialized version of `_.reduceRight` for arrays without support for
19775   * iteratee shorthands.
19776   *
19777   * @private
19778   * @param {Array} [array] The array to iterate over.
19779   * @param {Function} iteratee The function invoked per iteration.
19780   * @param {*} [accumulator] The initial value.
19781   * @param {boolean} [initAccum] Specify using the last element of `array` as
19782   *  the initial value.
19783   * @returns {*} Returns the accumulated value.
19784   */
19785  function arrayReduceRight(array, iteratee, accumulator, initAccum) {
19786    var length = array == null ? 0 : array.length;
19787    if (initAccum && length) {
19788      accumulator = array[--length];
19789    }
19790    while (length--) {
19791      accumulator = iteratee(accumulator, array[length], length, array);
19792    }
19793    return accumulator;
19794  }
19795
19796  /**
19797   * A specialized version of `_.some` for arrays without support for iteratee
19798   * shorthands.
19799   *
19800   * @private
19801   * @param {Array} [array] The array to iterate over.
19802   * @param {Function} predicate The function invoked per iteration.
19803   * @returns {boolean} Returns `true` if any element passes the predicate check,
19804   *  else `false`.
19805   */
19806  function arraySome(array, predicate) {
19807    var index = -1,
19808        length = array == null ? 0 : array.length;
19809
19810    while (++index < length) {
19811      if (predicate(array[index], index, array)) {
19812        return true;
19813      }
19814    }
19815    return false;
19816  }
19817
19818  /**
19819   * Gets the size of an ASCII `string`.
19820   *
19821   * @private
19822   * @param {string} string The string inspect.
19823   * @returns {number} Returns the string size.
19824   */
19825  var asciiSize = baseProperty('length');
19826
19827  /**
19828   * Converts an ASCII `string` to an array.
19829   *
19830   * @private
19831   * @param {string} string The string to convert.
19832   * @returns {Array} Returns the converted array.
19833   */
19834  function asciiToArray(string) {
19835    return string.split('');
19836  }
19837
19838  /**
19839   * Splits an ASCII `string` into an array of its words.
19840   *
19841   * @private
19842   * @param {string} The string to inspect.
19843   * @returns {Array} Returns the words of `string`.
19844   */
19845  function asciiWords(string) {
19846    return string.match(reAsciiWord) || [];
19847  }
19848
19849  /**
19850   * The base implementation of methods like `_.findKey` and `_.findLastKey`,
19851   * without support for iteratee shorthands, which iterates over `collection`
19852   * using `eachFunc`.
19853   *
19854   * @private
19855   * @param {Array|Object} collection The collection to inspect.
19856   * @param {Function} predicate The function invoked per iteration.
19857   * @param {Function} eachFunc The function to iterate over `collection`.
19858   * @returns {*} Returns the found element or its key, else `undefined`.
19859   */
19860  function baseFindKey(collection, predicate, eachFunc) {
19861    var result;
19862    eachFunc(collection, function(value, key, collection) {
19863      if (predicate(value, key, collection)) {
19864        result = key;
19865        return false;
19866      }
19867    });
19868    return result;
19869  }
19870
19871  /**
19872   * The base implementation of `_.findIndex` and `_.findLastIndex` without
19873   * support for iteratee shorthands.
19874   *
19875   * @private
19876   * @param {Array} array The array to inspect.
19877   * @param {Function} predicate The function invoked per iteration.
19878   * @param {number} fromIndex The index to search from.
19879   * @param {boolean} [fromRight] Specify iterating from right to left.
19880   * @returns {number} Returns the index of the matched value, else `-1`.
19881   */
19882  function baseFindIndex(array, predicate, fromIndex, fromRight) {
19883    var length = array.length,
19884        index = fromIndex + (fromRight ? 1 : -1);
19885
19886    while ((fromRight ? index-- : ++index < length)) {
19887      if (predicate(array[index], index, array)) {
19888        return index;
19889      }
19890    }
19891    return -1;
19892  }
19893
19894  /**
19895   * The base implementation of `_.indexOf` without `fromIndex` bounds checks.
19896   *
19897   * @private
19898   * @param {Array} array The array to inspect.
19899   * @param {*} value The value to search for.
19900   * @param {number} fromIndex The index to search from.
19901   * @returns {number} Returns the index of the matched value, else `-1`.
19902   */
19903  function baseIndexOf(array, value, fromIndex) {
19904    return value === value
19905      ? strictIndexOf(array, value, fromIndex)
19906      : baseFindIndex(array, baseIsNaN, fromIndex);
19907  }
19908
19909  /**
19910   * This function is like `baseIndexOf` except that it accepts a comparator.
19911   *
19912   * @private
19913   * @param {Array} array The array to inspect.
19914   * @param {*} value The value to search for.
19915   * @param {number} fromIndex The index to search from.
19916   * @param {Function} comparator The comparator invoked per element.
19917   * @returns {number} Returns the index of the matched value, else `-1`.
19918   */
19919  function baseIndexOfWith(array, value, fromIndex, comparator) {
19920    var index = fromIndex - 1,
19921        length = array.length;
19922
19923    while (++index < length) {
19924      if (comparator(array[index], value)) {
19925        return index;
19926      }
19927    }
19928    return -1;
19929  }
19930
19931  /**
19932   * The base implementation of `_.isNaN` without support for number objects.
19933   *
19934   * @private
19935   * @param {*} value The value to check.
19936   * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.
19937   */
19938  function baseIsNaN(value) {
19939    return value !== value;
19940  }
19941
19942  /**
19943   * The base implementation of `_.mean` and `_.meanBy` without support for
19944   * iteratee shorthands.
19945   *
19946   * @private
19947   * @param {Array} array The array to iterate over.
19948   * @param {Function} iteratee The function invoked per iteration.
19949   * @returns {number} Returns the mean.
19950   */
19951  function baseMean(array, iteratee) {
19952    var length = array == null ? 0 : array.length;
19953    return length ? (baseSum(array, iteratee) / length) : NAN;
19954  }
19955
19956  /**
19957   * The base implementation of `_.property` without support for deep paths.
19958   *
19959   * @private
19960   * @param {string} key The key of the property to get.
19961   * @returns {Function} Returns the new accessor function.
19962   */
19963  function baseProperty(key) {
19964    return function(object) {
19965      return object == null ? undefined : object[key];
19966    };
19967  }
19968
19969  /**
19970   * The base implementation of `_.propertyOf` without support for deep paths.
19971   *
19972   * @private
19973   * @param {Object} object The object to query.
19974   * @returns {Function} Returns the new accessor function.
19975   */
19976  function basePropertyOf(object) {
19977    return function(key) {
19978      return object == null ? undefined : object[key];
19979    };
19980  }
19981
19982  /**
19983   * The base implementation of `_.reduce` and `_.reduceRight`, without support
19984   * for iteratee shorthands, which iterates over `collection` using `eachFunc`.
19985   *
19986   * @private
19987   * @param {Array|Object} collection The collection to iterate over.
19988   * @param {Function} iteratee The function invoked per iteration.
19989   * @param {*} accumulator The initial value.
19990   * @param {boolean} initAccum Specify using the first or last element of
19991   *  `collection` as the initial value.
19992   * @param {Function} eachFunc The function to iterate over `collection`.
19993   * @returns {*} Returns the accumulated value.
19994   */
19995  function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) {
19996    eachFunc(collection, function(value, index, collection) {
19997      accumulator = initAccum
19998        ? (initAccum = false, value)
19999        : iteratee(accumulator, value, index, collection);
20000    });
20001    return accumulator;
20002  }
20003
20004  /**
20005   * The base implementation of `_.sortBy` which uses `comparer` to define the
20006   * sort order of `array` and replaces criteria objects with their corresponding
20007   * values.
20008   *
20009   * @private
20010   * @param {Array} array The array to sort.
20011   * @param {Function} comparer The function to define sort order.
20012   * @returns {Array} Returns `array`.
20013   */
20014  function baseSortBy(array, comparer) {
20015    var length = array.length;
20016
20017    array.sort(comparer);
20018    while (length--) {
20019      array[length] = array[length].value;
20020    }
20021    return array;
20022  }
20023
20024  /**
20025   * The base implementation of `_.sum` and `_.sumBy` without support for
20026   * iteratee shorthands.
20027   *
20028   * @private
20029   * @param {Array} array The array to iterate over.
20030   * @param {Function} iteratee The function invoked per iteration.
20031   * @returns {number} Returns the sum.
20032   */
20033  function baseSum(array, iteratee) {
20034    var result,
20035        index = -1,
20036        length = array.length;
20037
20038    while (++index < length) {
20039      var current = iteratee(array[index]);
20040      if (current !== undefined) {
20041        result = result === undefined ? current : (result + current);
20042      }
20043    }
20044    return result;
20045  }
20046
20047  /**
20048   * The base implementation of `_.times` without support for iteratee shorthands
20049   * or max array length checks.
20050   *
20051   * @private
20052   * @param {number} n The number of times to invoke `iteratee`.
20053   * @param {Function} iteratee The function invoked per iteration.
20054   * @returns {Array} Returns the array of results.
20055   */
20056  function baseTimes(n, iteratee) {
20057    var index = -1,
20058        result = Array(n);
20059
20060    while (++index < n) {
20061      result[index] = iteratee(index);
20062    }
20063    return result;
20064  }
20065
20066  /**
20067   * The base implementation of `_.toPairs` and `_.toPairsIn` which creates an array
20068   * of key-value pairs for `object` corresponding to the property names of `props`.
20069   *
20070   * @private
20071   * @param {Object} object The object to query.
20072   * @param {Array} props The property names to get values for.
20073   * @returns {Object} Returns the key-value pairs.
20074   */
20075  function baseToPairs(object, props) {
20076    return arrayMap(props, function(key) {
20077      return [key, object[key]];
20078    });
20079  }
20080
20081  /**
20082   * The base implementation of `_.trim`.
20083   *
20084   * @private
20085   * @param {string} string The string to trim.
20086   * @returns {string} Returns the trimmed string.
20087   */
20088  function baseTrim(string) {
20089    return string
20090      ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')
20091      : string;
20092  }
20093
20094  /**
20095   * The base implementation of `_.unary` without support for storing metadata.
20096   *
20097   * @private
20098   * @param {Function} func The function to cap arguments for.
20099   * @returns {Function} Returns the new capped function.
20100   */
20101  function baseUnary(func) {
20102    return function(value) {
20103      return func(value);
20104    };
20105  }
20106
20107  /**
20108   * The base implementation of `_.values` and `_.valuesIn` which creates an
20109   * array of `object` property values corresponding to the property names
20110   * of `props`.
20111   *
20112   * @private
20113   * @param {Object} object The object to query.
20114   * @param {Array} props The property names to get values for.
20115   * @returns {Object} Returns the array of property values.
20116   */
20117  function baseValues(object, props) {
20118    return arrayMap(props, function(key) {
20119      return object[key];
20120    });
20121  }
20122
20123  /**
20124   * Checks if a `cache` value for `key` exists.
20125   *
20126   * @private
20127   * @param {Object} cache The cache to query.
20128   * @param {string} key The key of the entry to check.
20129   * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
20130   */
20131  function cacheHas(cache, key) {
20132    return cache.has(key);
20133  }
20134
20135  /**
20136   * Used by `_.trim` and `_.trimStart` to get the index of the first string symbol
20137   * that is not found in the character symbols.
20138   *
20139   * @private
20140   * @param {Array} strSymbols The string symbols to inspect.
20141   * @param {Array} chrSymbols The character symbols to find.
20142   * @returns {number} Returns the index of the first unmatched string symbol.
20143   */
20144  function charsStartIndex(strSymbols, chrSymbols) {
20145    var index = -1,
20146        length = strSymbols.length;
20147
20148    while (++index < length && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}
20149    return index;
20150  }
20151
20152  /**
20153   * Used by `_.trim` and `_.trimEnd` to get the index of the last string symbol
20154   * that is not found in the character symbols.
20155   *
20156   * @private
20157   * @param {Array} strSymbols The string symbols to inspect.
20158   * @param {Array} chrSymbols The character symbols to find.
20159   * @returns {number} Returns the index of the last unmatched string symbol.
20160   */
20161  function charsEndIndex(strSymbols, chrSymbols) {
20162    var index = strSymbols.length;
20163
20164    while (index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}
20165    return index;
20166  }
20167
20168  /**
20169   * Gets the number of `placeholder` occurrences in `array`.
20170   *
20171   * @private
20172   * @param {Array} array The array to inspect.
20173   * @param {*} placeholder The placeholder to search for.
20174   * @returns {number} Returns the placeholder count.
20175   */
20176  function countHolders(array, placeholder) {
20177    var length = array.length,
20178        result = 0;
20179
20180    while (length--) {
20181      if (array[length] === placeholder) {
20182        ++result;
20183      }
20184    }
20185    return result;
20186  }
20187
20188  /**
20189   * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A
20190   * letters to basic Latin letters.
20191   *
20192   * @private
20193   * @param {string} letter The matched letter to deburr.
20194   * @returns {string} Returns the deburred letter.
20195   */
20196  var deburrLetter = basePropertyOf(deburredLetters);
20197
20198  /**
20199   * Used by `_.escape` to convert characters to HTML entities.
20200   *
20201   * @private
20202   * @param {string} chr The matched character to escape.
20203   * @returns {string} Returns the escaped character.
20204   */
20205  var escapeHtmlChar = basePropertyOf(htmlEscapes);
20206
20207  /**
20208   * Used by `_.template` to escape characters for inclusion in compiled string literals.
20209   *
20210   * @private
20211   * @param {string} chr The matched character to escape.
20212   * @returns {string} Returns the escaped character.
20213   */
20214  function escapeStringChar(chr) {
20215    return '\\' + stringEscapes[chr];
20216  }
20217
20218  /**
20219   * Gets the value at `key` of `object`.
20220   *
20221   * @private
20222   * @param {Object} [object] The object to query.
20223   * @param {string} key The key of the property to get.
20224   * @returns {*} Returns the property value.
20225   */
20226  function getValue(object, key) {
20227    return object == null ? undefined : object[key];
20228  }
20229
20230  /**
20231   * Checks if `string` contains Unicode symbols.
20232   *
20233   * @private
20234   * @param {string} string The string to inspect.
20235   * @returns {boolean} Returns `true` if a symbol is found, else `false`.
20236   */
20237  function hasUnicode(string) {
20238    return reHasUnicode.test(string);
20239  }
20240
20241  /**
20242   * Checks if `string` contains a word composed of Unicode symbols.
20243   *
20244   * @private
20245   * @param {string} string The string to inspect.
20246   * @returns {boolean} Returns `true` if a word is found, else `false`.
20247   */
20248  function hasUnicodeWord(string) {
20249    return reHasUnicodeWord.test(string);
20250  }
20251
20252  /**
20253   * Converts `iterator` to an array.
20254   *
20255   * @private
20256   * @param {Object} iterator The iterator to convert.
20257   * @returns {Array} Returns the converted array.
20258   */
20259  function iteratorToArray(iterator) {
20260    var data,
20261        result = [];
20262
20263    while (!(data = iterator.next()).done) {
20264      result.push(data.value);
20265    }
20266    return result;
20267  }
20268
20269  /**
20270   * Converts `map` to its key-value pairs.
20271   *
20272   * @private
20273   * @param {Object} map The map to convert.
20274   * @returns {Array} Returns the key-value pairs.
20275   */
20276  function mapToArray(map) {
20277    var index = -1,
20278        result = Array(map.size);
20279
20280    map.forEach(function(value, key) {
20281      result[++index] = [key, value];
20282    });
20283    return result;
20284  }
20285
20286  /**
20287   * Creates a unary function that invokes `func` with its argument transformed.
20288   *
20289   * @private
20290   * @param {Function} func The function to wrap.
20291   * @param {Function} transform The argument transform.
20292   * @returns {Function} Returns the new function.
20293   */
20294  function overArg(func, transform) {
20295    return function(arg) {
20296      return func(transform(arg));
20297    };
20298  }
20299
20300  /**
20301   * Replaces all `placeholder` elements in `array` with an internal placeholder
20302   * and returns an array of their indexes.
20303   *
20304   * @private
20305   * @param {Array} array The array to modify.
20306   * @param {*} placeholder The placeholder to replace.
20307   * @returns {Array} Returns the new array of placeholder indexes.
20308   */
20309  function replaceHolders(array, placeholder) {
20310    var index = -1,
20311        length = array.length,
20312        resIndex = 0,
20313        result = [];
20314
20315    while (++index < length) {
20316      var value = array[index];
20317      if (value === placeholder || value === PLACEHOLDER) {
20318        array[index] = PLACEHOLDER;
20319        result[resIndex++] = index;
20320      }
20321    }
20322    return result;
20323  }
20324
20325  /**
20326   * Converts `set` to an array of its values.
20327   *
20328   * @private
20329   * @param {Object} set The set to convert.
20330   * @returns {Array} Returns the values.
20331   */
20332  function setToArray(set) {
20333    var index = -1,
20334        result = Array(set.size);
20335
20336    set.forEach(function(value) {
20337      result[++index] = value;
20338    });
20339    return result;
20340  }
20341
20342  /**
20343   * Converts `set` to its value-value pairs.
20344   *
20345   * @private
20346   * @param {Object} set The set to convert.
20347   * @returns {Array} Returns the value-value pairs.
20348   */
20349  function setToPairs(set) {
20350    var index = -1,
20351        result = Array(set.size);
20352
20353    set.forEach(function(value) {
20354      result[++index] = [value, value];
20355    });
20356    return result;
20357  }
20358
20359  /**
20360   * A specialized version of `_.indexOf` which performs strict equality
20361   * comparisons of values, i.e. `===`.
20362   *
20363   * @private
20364   * @param {Array} array The array to inspect.
20365   * @param {*} value The value to search for.
20366   * @param {number} fromIndex The index to search from.
20367   * @returns {number} Returns the index of the matched value, else `-1`.
20368   */
20369  function strictIndexOf(array, value, fromIndex) {
20370    var index = fromIndex - 1,
20371        length = array.length;
20372
20373    while (++index < length) {
20374      if (array[index] === value) {
20375        return index;
20376      }
20377    }
20378    return -1;
20379  }
20380
20381  /**
20382   * A specialized version of `_.lastIndexOf` which performs strict equality
20383   * comparisons of values, i.e. `===`.
20384   *
20385   * @private
20386   * @param {Array} array The array to inspect.
20387   * @param {*} value The value to search for.
20388   * @param {number} fromIndex The index to search from.
20389   * @returns {number} Returns the index of the matched value, else `-1`.
20390   */
20391  function strictLastIndexOf(array, value, fromIndex) {
20392    var index = fromIndex + 1;
20393    while (index--) {
20394      if (array[index] === value) {
20395        return index;
20396      }
20397    }
20398    return index;
20399  }
20400
20401  /**
20402   * Gets the number of symbols in `string`.
20403   *
20404   * @private
20405   * @param {string} string The string to inspect.
20406   * @returns {number} Returns the string size.
20407   */
20408  function stringSize(string) {
20409    return hasUnicode(string)
20410      ? unicodeSize(string)
20411      : asciiSize(string);
20412  }
20413
20414  /**
20415   * Converts `string` to an array.
20416   *
20417   * @private
20418   * @param {string} string The string to convert.
20419   * @returns {Array} Returns the converted array.
20420   */
20421  function stringToArray(string) {
20422    return hasUnicode(string)
20423      ? unicodeToArray(string)
20424      : asciiToArray(string);
20425  }
20426
20427  /**
20428   * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace
20429   * character of `string`.
20430   *
20431   * @private
20432   * @param {string} string The string to inspect.
20433   * @returns {number} Returns the index of the last non-whitespace character.
20434   */
20435  function trimmedEndIndex(string) {
20436    var index = string.length;
20437
20438    while (index-- && reWhitespace.test(string.charAt(index))) {}
20439    return index;
20440  }
20441
20442  /**
20443   * Used by `_.unescape` to convert HTML entities to characters.
20444   *
20445   * @private
20446   * @param {string} chr The matched character to unescape.
20447   * @returns {string} Returns the unescaped character.
20448   */
20449  var unescapeHtmlChar = basePropertyOf(htmlUnescapes);
20450
20451  /**
20452   * Gets the size of a Unicode `string`.
20453   *
20454   * @private
20455   * @param {string} string The string inspect.
20456   * @returns {number} Returns the string size.
20457   */
20458  function unicodeSize(string) {
20459    var result = reUnicode.lastIndex = 0;
20460    while (reUnicode.test(string)) {
20461      ++result;
20462    }
20463    return result;
20464  }
20465
20466  /**
20467   * Converts a Unicode `string` to an array.
20468   *
20469   * @private
20470   * @param {string} string The string to convert.
20471   * @returns {Array} Returns the converted array.
20472   */
20473  function unicodeToArray(string) {
20474    return string.match(reUnicode) || [];
20475  }
20476
20477  /**
20478   * Splits a Unicode `string` into an array of its words.
20479   *
20480   * @private
20481   * @param {string} The string to inspect.
20482   * @returns {Array} Returns the words of `string`.
20483   */
20484  function unicodeWords(string) {
20485    return string.match(reUnicodeWord) || [];
20486  }
20487
20488  /*--------------------------------------------------------------------------*/
20489
20490  /**
20491   * Create a new pristine `lodash` function using the `context` object.
20492   *
20493   * @static
20494   * @memberOf _
20495   * @since 1.1.0
20496   * @category Util
20497   * @param {Object} [context=root] The context object.
20498   * @returns {Function} Returns a new `lodash` function.
20499   * @example
20500   *
20501   * _.mixin({ 'foo': _.constant('foo') });
20502   *
20503   * var lodash = _.runInContext();
20504   * lodash.mixin({ 'bar': lodash.constant('bar') });
20505   *
20506   * _.isFunction(_.foo);
20507   * // => true
20508   * _.isFunction(_.bar);
20509   * // => false
20510   *
20511   * lodash.isFunction(lodash.foo);
20512   * // => false
20513   * lodash.isFunction(lodash.bar);
20514   * // => true
20515   *
20516   * // Create a suped-up `defer` in Node.js.
20517   * var defer = _.runInContext({ 'setTimeout': setImmediate }).defer;
20518   */
20519  var runInContext = (function runInContext(context) {
20520    context = context == null ? root : _.defaults(root.Object(), context, _.pick(root, contextProps));
20521
20522    /** Built-in constructor references. */
20523    var Array = context.Array,
20524        Date = context.Date,
20525        Error = context.Error,
20526        Function = context.Function,
20527        Math = context.Math,
20528        Object = context.Object,
20529        RegExp = context.RegExp,
20530        String = context.String,
20531        TypeError = context.TypeError;
20532
20533    /** Used for built-in method references. */
20534    var arrayProto = Array.prototype,
20535        funcProto = Function.prototype,
20536        objectProto = Object.prototype;
20537
20538    /** Used to detect overreaching core-js shims. */
20539    var coreJsData = context['__core-js_shared__'];
20540
20541    /** Used to resolve the decompiled source of functions. */
20542    var funcToString = funcProto.toString;
20543
20544    /** Used to check objects for own properties. */
20545    var hasOwnProperty = objectProto.hasOwnProperty;
20546
20547    /** Used to generate unique IDs. */
20548    var idCounter = 0;
20549
20550    /** Used to detect methods masquerading as native. */
20551    var maskSrcKey = (function() {
20552      var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');
20553      return uid ? ('Symbol(src)_1.' + uid) : '';
20554    }());
20555
20556    /**
20557     * Used to resolve the
20558     * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
20559     * of values.
20560     */
20561    var nativeObjectToString = objectProto.toString;
20562
20563    /** Used to infer the `Object` constructor. */
20564    var objectCtorString = funcToString.call(Object);
20565
20566    /** Used to restore the original `_` reference in `_.noConflict`. */
20567    var oldDash = root._;
20568
20569    /** Used to detect if a method is native. */
20570    var reIsNative = RegExp('^' +
20571      funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&')
20572      .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$'
20573    );
20574
20575    /** Built-in value references. */
20576    var Buffer = moduleExports ? context.Buffer : undefined,
20577        Symbol = context.Symbol,
20578        Uint8Array = context.Uint8Array,
20579        allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined,
20580        getPrototype = overArg(Object.getPrototypeOf, Object),
20581        objectCreate = Object.create,
20582        propertyIsEnumerable = objectProto.propertyIsEnumerable,
20583        splice = arrayProto.splice,
20584        spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined,
20585        symIterator = Symbol ? Symbol.iterator : undefined,
20586        symToStringTag = Symbol ? Symbol.toStringTag : undefined;
20587
20588    var defineProperty = (function() {
20589      try {
20590        var func = getNative(Object, 'defineProperty');
20591        func({}, '', {});
20592        return func;
20593      } catch (e) {}
20594    }());
20595
20596    /** Mocked built-ins. */
20597    var ctxClearTimeout = context.clearTimeout !== root.clearTimeout && context.clearTimeout,
20598        ctxNow = Date && Date.now !== root.Date.now && Date.now,
20599        ctxSetTimeout = context.setTimeout !== root.setTimeout && context.setTimeout;
20600
20601    /* Built-in method references for those with the same name as other `lodash` methods. */
20602    var nativeCeil = Math.ceil,
20603        nativeFloor = Math.floor,
20604        nativeGetSymbols = Object.getOwnPropertySymbols,
20605        nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined,
20606        nativeIsFinite = context.isFinite,
20607        nativeJoin = arrayProto.join,
20608        nativeKeys = overArg(Object.keys, Object),
20609        nativeMax = Math.max,
20610        nativeMin = Math.min,
20611        nativeNow = Date.now,
20612        nativeParseInt = context.parseInt,
20613        nativeRandom = Math.random,
20614        nativeReverse = arrayProto.reverse;
20615
20616    /* Built-in method references that are verified to be native. */
20617    var DataView = getNative(context, 'DataView'),
20618        Map = getNative(context, 'Map'),
20619        Promise = getNative(context, 'Promise'),
20620        Set = getNative(context, 'Set'),
20621        WeakMap = getNative(context, 'WeakMap'),
20622        nativeCreate = getNative(Object, 'create');
20623
20624    /** Used to store function metadata. */
20625    var metaMap = WeakMap && new WeakMap;
20626
20627    /** Used to lookup unminified function names. */
20628    var realNames = {};
20629
20630    /** Used to detect maps, sets, and weakmaps. */
20631    var dataViewCtorString = toSource(DataView),
20632        mapCtorString = toSource(Map),
20633        promiseCtorString = toSource(Promise),
20634        setCtorString = toSource(Set),
20635        weakMapCtorString = toSource(WeakMap);
20636
20637    /** Used to convert symbols to primitives and strings. */
20638    var symbolProto = Symbol ? Symbol.prototype : undefined,
20639        symbolValueOf = symbolProto ? symbolProto.valueOf : undefined,
20640        symbolToString = symbolProto ? symbolProto.toString : undefined;
20641
20642    /*------------------------------------------------------------------------*/
20643
20644    /**
20645     * Creates a `lodash` object which wraps `value` to enable implicit method
20646     * chain sequences. Methods that operate on and return arrays, collections,
20647     * and functions can be chained together. Methods that retrieve a single value
20648     * or may return a primitive value will automatically end the chain sequence
20649     * and return the unwrapped value. Otherwise, the value must be unwrapped
20650     * with `_#value`.
20651     *
20652     * Explicit chain sequences, which must be unwrapped with `_#value`, may be
20653     * enabled using `_.chain`.
20654     *
20655     * The execution of chained methods is lazy, that is, it's deferred until
20656     * `_#value` is implicitly or explicitly called.
20657     *
20658     * Lazy evaluation allows several methods to support shortcut fusion.
20659     * Shortcut fusion is an optimization to merge iteratee calls; this avoids
20660     * the creation of intermediate arrays and can greatly reduce the number of
20661     * iteratee executions. Sections of a chain sequence qualify for shortcut
20662     * fusion if the section is applied to an array and iteratees accept only
20663     * one argument. The heuristic for whether a section qualifies for shortcut
20664     * fusion is subject to change.
20665     *
20666     * Chaining is supported in custom builds as long as the `_#value` method is
20667     * directly or indirectly included in the build.
20668     *
20669     * In addition to lodash methods, wrappers have `Array` and `String` methods.
20670     *
20671     * The wrapper `Array` methods are:
20672     * `concat`, `join`, `pop`, `push`, `shift`, `sort`, `splice`, and `unshift`
20673     *
20674     * The wrapper `String` methods are:
20675     * `replace` and `split`
20676     *
20677     * The wrapper methods that support shortcut fusion are:
20678     * `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`,
20679     * `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`,
20680     * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray`
20681     *
20682     * The chainable wrapper methods are:
20683     * `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, `at`,
20684     * `before`, `bind`, `bindAll`, `bindKey`, `castArray`, `chain`, `chunk`,
20685     * `commit`, `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`,
20686     * `curry`, `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`,
20687     * `difference`, `differenceBy`, `differenceWith`, `drop`, `dropRight`,
20688     * `dropRightWhile`, `dropWhile`, `extend`, `extendWith`, `fill`, `filter`,
20689     * `flatMap`, `flatMapDeep`, `flatMapDepth`, `flatten`, `flattenDeep`,
20690     * `flattenDepth`, `flip`, `flow`, `flowRight`, `fromPairs`, `functions`,
20691     * `functionsIn`, `groupBy`, `initial`, `intersection`, `intersectionBy`,
20692     * `intersectionWith`, `invert`, `invertBy`, `invokeMap`, `iteratee`, `keyBy`,
20693     * `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, `matchesProperty`,
20694     * `memoize`, `merge`, `mergeWith`, `method`, `methodOf`, `mixin`, `negate`,
20695     * `nthArg`, `omit`, `omitBy`, `once`, `orderBy`, `over`, `overArgs`,
20696     * `overEvery`, `overSome`, `partial`, `partialRight`, `partition`, `pick`,
20697     * `pickBy`, `plant`, `property`, `propertyOf`, `pull`, `pullAll`, `pullAllBy`,
20698     * `pullAllWith`, `pullAt`, `push`, `range`, `rangeRight`, `rearg`, `reject`,
20699     * `remove`, `rest`, `reverse`, `sampleSize`, `set`, `setWith`, `shuffle`,
20700     * `slice`, `sort`, `sortBy`, `splice`, `spread`, `tail`, `take`, `takeRight`,
20701     * `takeRightWhile`, `takeWhile`, `tap`, `throttle`, `thru`, `toArray`,
20702     * `toPairs`, `toPairsIn`, `toPath`, `toPlainObject`, `transform`, `unary`,
20703     * `union`, `unionBy`, `unionWith`, `uniq`, `uniqBy`, `uniqWith`, `unset`,
20704     * `unshift`, `unzip`, `unzipWith`, `update`, `updateWith`, `values`,
20705     * `valuesIn`, `without`, `wrap`, `xor`, `xorBy`, `xorWith`, `zip`,
20706     * `zipObject`, `zipObjectDeep`, and `zipWith`
20707     *
20708     * The wrapper methods that are **not** chainable by default are:
20709     * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`,
20710     * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `conformsTo`, `deburr`,
20711     * `defaultTo`, `divide`, `each`, `eachRight`, `endsWith`, `eq`, `escape`,
20712     * `escapeRegExp`, `every`, `find`, `findIndex`, `findKey`, `findLast`,
20713     * `findLastIndex`, `findLastKey`, `first`, `floor`, `forEach`, `forEachRight`,
20714     * `forIn`, `forInRight`, `forOwn`, `forOwnRight`, `get`, `gt`, `gte`, `has`,
20715     * `hasIn`, `head`, `identity`, `includes`, `indexOf`, `inRange`, `invoke`,
20716     * `isArguments`, `isArray`, `isArrayBuffer`, `isArrayLike`, `isArrayLikeObject`,
20717     * `isBoolean`, `isBuffer`, `isDate`, `isElement`, `isEmpty`, `isEqual`,
20718     * `isEqualWith`, `isError`, `isFinite`, `isFunction`, `isInteger`, `isLength`,
20719     * `isMap`, `isMatch`, `isMatchWith`, `isNaN`, `isNative`, `isNil`, `isNull`,
20720     * `isNumber`, `isObject`, `isObjectLike`, `isPlainObject`, `isRegExp`,
20721     * `isSafeInteger`, `isSet`, `isString`, `isUndefined`, `isTypedArray`,
20722     * `isWeakMap`, `isWeakSet`, `join`, `kebabCase`, `last`, `lastIndexOf`,
20723     * `lowerCase`, `lowerFirst`, `lt`, `lte`, `max`, `maxBy`, `mean`, `meanBy`,
20724     * `min`, `minBy`, `multiply`, `noConflict`, `noop`, `now`, `nth`, `pad`,
20725     * `padEnd`, `padStart`, `parseInt`, `pop`, `random`, `reduce`, `reduceRight`,
20726     * `repeat`, `result`, `round`, `runInContext`, `sample`, `shift`, `size`,
20727     * `snakeCase`, `some`, `sortedIndex`, `sortedIndexBy`, `sortedLastIndex`,
20728     * `sortedLastIndexBy`, `startCase`, `startsWith`, `stubArray`, `stubFalse`,
20729     * `stubObject`, `stubString`, `stubTrue`, `subtract`, `sum`, `sumBy`,
20730     * `template`, `times`, `toFinite`, `toInteger`, `toJSON`, `toLength`,
20731     * `toLower`, `toNumber`, `toSafeInteger`, `toString`, `toUpper`, `trim`,
20732     * `trimEnd`, `trimStart`, `truncate`, `unescape`, `uniqueId`, `upperCase`,
20733     * `upperFirst`, `value`, and `words`
20734     *
20735     * @name _
20736     * @constructor
20737     * @category Seq
20738     * @param {*} value The value to wrap in a `lodash` instance.
20739     * @returns {Object} Returns the new `lodash` wrapper instance.
20740     * @example
20741     *
20742     * function square(n) {
20743     *   return n * n;
20744     * }
20745     *
20746     * var wrapped = _([1, 2, 3]);
20747     *
20748     * // Returns an unwrapped value.
20749     * wrapped.reduce(_.add);
20750     * // => 6
20751     *
20752     * // Returns a wrapped value.
20753     * var squares = wrapped.map(square);
20754     *
20755     * _.isArray(squares);
20756     * // => false
20757     *
20758     * _.isArray(squares.value());
20759     * // => true
20760     */
20761    function lodash(value) {
20762      if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) {
20763        if (value instanceof LodashWrapper) {
20764          return value;
20765        }
20766        if (hasOwnProperty.call(value, '__wrapped__')) {
20767          return wrapperClone(value);
20768        }
20769      }
20770      return new LodashWrapper(value);
20771    }
20772
20773    /**
20774     * The base implementation of `_.create` without support for assigning
20775     * properties to the created object.
20776     *
20777     * @private
20778     * @param {Object} proto The object to inherit from.
20779     * @returns {Object} Returns the new object.
20780     */
20781    var baseCreate = (function() {
20782      function object() {}
20783      return function(proto) {
20784        if (!isObject(proto)) {
20785          return {};
20786        }
20787        if (objectCreate) {
20788          return objectCreate(proto);
20789        }
20790        object.prototype = proto;
20791        var result = new object;
20792        object.prototype = undefined;
20793        return result;
20794      };
20795    }());
20796
20797    /**
20798     * The function whose prototype chain sequence wrappers inherit from.
20799     *
20800     * @private
20801     */
20802    function baseLodash() {
20803      // No operation performed.
20804    }
20805
20806    /**
20807     * The base constructor for creating `lodash` wrapper objects.
20808     *
20809     * @private
20810     * @param {*} value The value to wrap.
20811     * @param {boolean} [chainAll] Enable explicit method chain sequences.
20812     */
20813    function LodashWrapper(value, chainAll) {
20814      this.__wrapped__ = value;
20815      this.__actions__ = [];
20816      this.__chain__ = !!chainAll;
20817      this.__index__ = 0;
20818      this.__values__ = undefined;
20819    }
20820
20821    /**
20822     * By default, the template delimiters used by lodash are like those in
20823     * embedded Ruby (ERB) as well as ES2015 template strings. Change the
20824     * following template settings to use alternative delimiters.
20825     *
20826     * @static
20827     * @memberOf _
20828     * @type {Object}
20829     */
20830    lodash.templateSettings = {
20831
20832      /**
20833       * Used to detect `data` property values to be HTML-escaped.
20834       *
20835       * @memberOf _.templateSettings
20836       * @type {RegExp}
20837       */
20838      'escape': reEscape,
20839
20840      /**
20841       * Used to detect code to be evaluated.
20842       *
20843       * @memberOf _.templateSettings
20844       * @type {RegExp}
20845       */
20846      'evaluate': reEvaluate,
20847
20848      /**
20849       * Used to detect `data` property values to inject.
20850       *
20851       * @memberOf _.templateSettings
20852       * @type {RegExp}
20853       */
20854      'interpolate': reInterpolate,
20855
20856      /**
20857       * Used to reference the data object in the template text.
20858       *
20859       * @memberOf _.templateSettings
20860       * @type {string}
20861       */
20862      'variable': '',
20863
20864      /**
20865       * Used to import variables into the compiled template.
20866       *
20867       * @memberOf _.templateSettings
20868       * @type {Object}
20869       */
20870      'imports': {
20871
20872        /**
20873         * A reference to the `lodash` function.
20874         *
20875         * @memberOf _.templateSettings.imports
20876         * @type {Function}
20877         */
20878        '_': lodash
20879      }
20880    };
20881
20882    // Ensure wrappers are instances of `baseLodash`.
20883    lodash.prototype = baseLodash.prototype;
20884    lodash.prototype.constructor = lodash;
20885
20886    LodashWrapper.prototype = baseCreate(baseLodash.prototype);
20887    LodashWrapper.prototype.constructor = LodashWrapper;
20888
20889    /*------------------------------------------------------------------------*/
20890
20891    /**
20892     * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation.
20893     *
20894     * @private
20895     * @constructor
20896     * @param {*} value The value to wrap.
20897     */
20898    function LazyWrapper(value) {
20899      this.__wrapped__ = value;
20900      this.__actions__ = [];
20901      this.__dir__ = 1;
20902      this.__filtered__ = false;
20903      this.__iteratees__ = [];
20904      this.__takeCount__ = MAX_ARRAY_LENGTH;
20905      this.__views__ = [];
20906    }
20907
20908    /**
20909     * Creates a clone of the lazy wrapper object.
20910     *
20911     * @private
20912     * @name clone
20913     * @memberOf LazyWrapper
20914     * @returns {Object} Returns the cloned `LazyWrapper` object.
20915     */
20916    function lazyClone() {
20917      var result = new LazyWrapper(this.__wrapped__);
20918      result.__actions__ = copyArray(this.__actions__);
20919      result.__dir__ = this.__dir__;
20920      result.__filtered__ = this.__filtered__;
20921      result.__iteratees__ = copyArray(this.__iteratees__);
20922      result.__takeCount__ = this.__takeCount__;
20923      result.__views__ = copyArray(this.__views__);
20924      return result;
20925    }
20926
20927    /**
20928     * Reverses the direction of lazy iteration.
20929     *
20930     * @private
20931     * @name reverse
20932     * @memberOf LazyWrapper
20933     * @returns {Object} Returns the new reversed `LazyWrapper` object.
20934     */
20935    function lazyReverse() {
20936      if (this.__filtered__) {
20937        var result = new LazyWrapper(this);
20938        result.__dir__ = -1;
20939        result.__filtered__ = true;
20940      } else {
20941        result = this.clone();
20942        result.__dir__ *= -1;
20943      }
20944      return result;
20945    }
20946
20947    /**
20948     * Extracts the unwrapped value from its lazy wrapper.
20949     *
20950     * @private
20951     * @name value
20952     * @memberOf LazyWrapper
20953     * @returns {*} Returns the unwrapped value.
20954     */
20955    function lazyValue() {
20956      var array = this.__wrapped__.value(),
20957          dir = this.__dir__,
20958          isArr = isArray(array),
20959          isRight = dir < 0,
20960          arrLength = isArr ? array.length : 0,
20961          view = getView(0, arrLength, this.__views__),
20962          start = view.start,
20963          end = view.end,
20964          length = end - start,
20965          index = isRight ? end : (start - 1),
20966          iteratees = this.__iteratees__,
20967          iterLength = iteratees.length,
20968          resIndex = 0,
20969          takeCount = nativeMin(length, this.__takeCount__);
20970
20971      if (!isArr || (!isRight && arrLength == length && takeCount == length)) {
20972        return baseWrapperValue(array, this.__actions__);
20973      }
20974      var result = [];
20975
20976      outer:
20977      while (length-- && resIndex < takeCount) {
20978        index += dir;
20979
20980        var iterIndex = -1,
20981            value = array[index];
20982
20983        while (++iterIndex < iterLength) {
20984          var data = iteratees[iterIndex],
20985              iteratee = data.iteratee,
20986              type = data.type,
20987              computed = iteratee(value);
20988
20989          if (type == LAZY_MAP_FLAG) {
20990            value = computed;
20991          } else if (!computed) {
20992            if (type == LAZY_FILTER_FLAG) {
20993              continue outer;
20994            } else {
20995              break outer;
20996            }
20997          }
20998        }
20999        result[resIndex++] = value;
21000      }
21001      return result;
21002    }
21003
21004    // Ensure `LazyWrapper` is an instance of `baseLodash`.
21005    LazyWrapper.prototype = baseCreate(baseLodash.prototype);
21006    LazyWrapper.prototype.constructor = LazyWrapper;
21007
21008    /*------------------------------------------------------------------------*/
21009
21010    /**
21011     * Creates a hash object.
21012     *
21013     * @private
21014     * @constructor
21015     * @param {Array} [entries] The key-value pairs to cache.
21016     */
21017    function Hash(entries) {
21018      var index = -1,
21019          length = entries == null ? 0 : entries.length;
21020
21021      this.clear();
21022      while (++index < length) {
21023        var entry = entries[index];
21024        this.set(entry[0], entry[1]);
21025      }
21026    }
21027
21028    /**
21029     * Removes all key-value entries from the hash.
21030     *
21031     * @private
21032     * @name clear
21033     * @memberOf Hash
21034     */
21035    function hashClear() {
21036      this.__data__ = nativeCreate ? nativeCreate(null) : {};
21037      this.size = 0;
21038    }
21039
21040    /**
21041     * Removes `key` and its value from the hash.
21042     *
21043     * @private
21044     * @name delete
21045     * @memberOf Hash
21046     * @param {Object} hash The hash to modify.
21047     * @param {string} key The key of the value to remove.
21048     * @returns {boolean} Returns `true` if the entry was removed, else `false`.
21049     */
21050    function hashDelete(key) {
21051      var result = this.has(key) && delete this.__data__[key];
21052      this.size -= result ? 1 : 0;
21053      return result;
21054    }
21055
21056    /**
21057     * Gets the hash value for `key`.
21058     *
21059     * @private
21060     * @name get
21061     * @memberOf Hash
21062     * @param {string} key The key of the value to get.
21063     * @returns {*} Returns the entry value.
21064     */
21065    function hashGet(key) {
21066      var data = this.__data__;
21067      if (nativeCreate) {
21068        var result = data[key];
21069        return result === HASH_UNDEFINED ? undefined : result;
21070      }
21071      return hasOwnProperty.call(data, key) ? data[key] : undefined;
21072    }
21073
21074    /**
21075     * Checks if a hash value for `key` exists.
21076     *
21077     * @private
21078     * @name has
21079     * @memberOf Hash
21080     * @param {string} key The key of the entry to check.
21081     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
21082     */
21083    function hashHas(key) {
21084      var data = this.__data__;
21085      return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);
21086    }
21087
21088    /**
21089     * Sets the hash `key` to `value`.
21090     *
21091     * @private
21092     * @name set
21093     * @memberOf Hash
21094     * @param {string} key The key of the value to set.
21095     * @param {*} value The value to set.
21096     * @returns {Object} Returns the hash instance.
21097     */
21098    function hashSet(key, value) {
21099      var data = this.__data__;
21100      this.size += this.has(key) ? 0 : 1;
21101      data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;
21102      return this;
21103    }
21104
21105    // Add methods to `Hash`.
21106    Hash.prototype.clear = hashClear;
21107    Hash.prototype['delete'] = hashDelete;
21108    Hash.prototype.get = hashGet;
21109    Hash.prototype.has = hashHas;
21110    Hash.prototype.set = hashSet;
21111
21112    /*------------------------------------------------------------------------*/
21113
21114    /**
21115     * Creates an list cache object.
21116     *
21117     * @private
21118     * @constructor
21119     * @param {Array} [entries] The key-value pairs to cache.
21120     */
21121    function ListCache(entries) {
21122      var index = -1,
21123          length = entries == null ? 0 : entries.length;
21124
21125      this.clear();
21126      while (++index < length) {
21127        var entry = entries[index];
21128        this.set(entry[0], entry[1]);
21129      }
21130    }
21131
21132    /**
21133     * Removes all key-value entries from the list cache.
21134     *
21135     * @private
21136     * @name clear
21137     * @memberOf ListCache
21138     */
21139    function listCacheClear() {
21140      this.__data__ = [];
21141      this.size = 0;
21142    }
21143
21144    /**
21145     * Removes `key` and its value from the list cache.
21146     *
21147     * @private
21148     * @name delete
21149     * @memberOf ListCache
21150     * @param {string} key The key of the value to remove.
21151     * @returns {boolean} Returns `true` if the entry was removed, else `false`.
21152     */
21153    function listCacheDelete(key) {
21154      var data = this.__data__,
21155          index = assocIndexOf(data, key);
21156
21157      if (index < 0) {
21158        return false;
21159      }
21160      var lastIndex = data.length - 1;
21161      if (index == lastIndex) {
21162        data.pop();
21163      } else {
21164        splice.call(data, index, 1);
21165      }
21166      --this.size;
21167      return true;
21168    }
21169
21170    /**
21171     * Gets the list cache value for `key`.
21172     *
21173     * @private
21174     * @name get
21175     * @memberOf ListCache
21176     * @param {string} key The key of the value to get.
21177     * @returns {*} Returns the entry value.
21178     */
21179    function listCacheGet(key) {
21180      var data = this.__data__,
21181          index = assocIndexOf(data, key);
21182
21183      return index < 0 ? undefined : data[index][1];
21184    }
21185
21186    /**
21187     * Checks if a list cache value for `key` exists.
21188     *
21189     * @private
21190     * @name has
21191     * @memberOf ListCache
21192     * @param {string} key The key of the entry to check.
21193     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
21194     */
21195    function listCacheHas(key) {
21196      return assocIndexOf(this.__data__, key) > -1;
21197    }
21198
21199    /**
21200     * Sets the list cache `key` to `value`.
21201     *
21202     * @private
21203     * @name set
21204     * @memberOf ListCache
21205     * @param {string} key The key of the value to set.
21206     * @param {*} value The value to set.
21207     * @returns {Object} Returns the list cache instance.
21208     */
21209    function listCacheSet(key, value) {
21210      var data = this.__data__,
21211          index = assocIndexOf(data, key);
21212
21213      if (index < 0) {
21214        ++this.size;
21215        data.push([key, value]);
21216      } else {
21217        data[index][1] = value;
21218      }
21219      return this;
21220    }
21221
21222    // Add methods to `ListCache`.
21223    ListCache.prototype.clear = listCacheClear;
21224    ListCache.prototype['delete'] = listCacheDelete;
21225    ListCache.prototype.get = listCacheGet;
21226    ListCache.prototype.has = listCacheHas;
21227    ListCache.prototype.set = listCacheSet;
21228
21229    /*------------------------------------------------------------------------*/
21230
21231    /**
21232     * Creates a map cache object to store key-value pairs.
21233     *
21234     * @private
21235     * @constructor
21236     * @param {Array} [entries] The key-value pairs to cache.
21237     */
21238    function MapCache(entries) {
21239      var index = -1,
21240          length = entries == null ? 0 : entries.length;
21241
21242      this.clear();
21243      while (++index < length) {
21244        var entry = entries[index];
21245        this.set(entry[0], entry[1]);
21246      }
21247    }
21248
21249    /**
21250     * Removes all key-value entries from the map.
21251     *
21252     * @private
21253     * @name clear
21254     * @memberOf MapCache
21255     */
21256    function mapCacheClear() {
21257      this.size = 0;
21258      this.__data__ = {
21259        'hash': new Hash,
21260        'map': new (Map || ListCache),
21261        'string': new Hash
21262      };
21263    }
21264
21265    /**
21266     * Removes `key` and its value from the map.
21267     *
21268     * @private
21269     * @name delete
21270     * @memberOf MapCache
21271     * @param {string} key The key of the value to remove.
21272     * @returns {boolean} Returns `true` if the entry was removed, else `false`.
21273     */
21274    function mapCacheDelete(key) {
21275      var result = getMapData(this, key)['delete'](key);
21276      this.size -= result ? 1 : 0;
21277      return result;
21278    }
21279
21280    /**
21281     * Gets the map value for `key`.
21282     *
21283     * @private
21284     * @name get
21285     * @memberOf MapCache
21286     * @param {string} key The key of the value to get.
21287     * @returns {*} Returns the entry value.
21288     */
21289    function mapCacheGet(key) {
21290      return getMapData(this, key).get(key);
21291    }
21292
21293    /**
21294     * Checks if a map value for `key` exists.
21295     *
21296     * @private
21297     * @name has
21298     * @memberOf MapCache
21299     * @param {string} key The key of the entry to check.
21300     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
21301     */
21302    function mapCacheHas(key) {
21303      return getMapData(this, key).has(key);
21304    }
21305
21306    /**
21307     * Sets the map `key` to `value`.
21308     *
21309     * @private
21310     * @name set
21311     * @memberOf MapCache
21312     * @param {string} key The key of the value to set.
21313     * @param {*} value The value to set.
21314     * @returns {Object} Returns the map cache instance.
21315     */
21316    function mapCacheSet(key, value) {
21317      var data = getMapData(this, key),
21318          size = data.size;
21319
21320      data.set(key, value);
21321      this.size += data.size == size ? 0 : 1;
21322      return this;
21323    }
21324
21325    // Add methods to `MapCache`.
21326    MapCache.prototype.clear = mapCacheClear;
21327    MapCache.prototype['delete'] = mapCacheDelete;
21328    MapCache.prototype.get = mapCacheGet;
21329    MapCache.prototype.has = mapCacheHas;
21330    MapCache.prototype.set = mapCacheSet;
21331
21332    /*------------------------------------------------------------------------*/
21333
21334    /**
21335     *
21336     * Creates an array cache object to store unique values.
21337     *
21338     * @private
21339     * @constructor
21340     * @param {Array} [values] The values to cache.
21341     */
21342    function SetCache(values) {
21343      var index = -1,
21344          length = values == null ? 0 : values.length;
21345
21346      this.__data__ = new MapCache;
21347      while (++index < length) {
21348        this.add(values[index]);
21349      }
21350    }
21351
21352    /**
21353     * Adds `value` to the array cache.
21354     *
21355     * @private
21356     * @name add
21357     * @memberOf SetCache
21358     * @alias push
21359     * @param {*} value The value to cache.
21360     * @returns {Object} Returns the cache instance.
21361     */
21362    function setCacheAdd(value) {
21363      this.__data__.set(value, HASH_UNDEFINED);
21364      return this;
21365    }
21366
21367    /**
21368     * Checks if `value` is in the array cache.
21369     *
21370     * @private
21371     * @name has
21372     * @memberOf SetCache
21373     * @param {*} value The value to search for.
21374     * @returns {number} Returns `true` if `value` is found, else `false`.
21375     */
21376    function setCacheHas(value) {
21377      return this.__data__.has(value);
21378    }
21379
21380    // Add methods to `SetCache`.
21381    SetCache.prototype.add = SetCache.prototype.push = setCacheAdd;
21382    SetCache.prototype.has = setCacheHas;
21383
21384    /*------------------------------------------------------------------------*/
21385
21386    /**
21387     * Creates a stack cache object to store key-value pairs.
21388     *
21389     * @private
21390     * @constructor
21391     * @param {Array} [entries] The key-value pairs to cache.
21392     */
21393    function Stack(entries) {
21394      var data = this.__data__ = new ListCache(entries);
21395      this.size = data.size;
21396    }
21397
21398    /**
21399     * Removes all key-value entries from the stack.
21400     *
21401     * @private
21402     * @name clear
21403     * @memberOf Stack
21404     */
21405    function stackClear() {
21406      this.__data__ = new ListCache;
21407      this.size = 0;
21408    }
21409
21410    /**
21411     * Removes `key` and its value from the stack.
21412     *
21413     * @private
21414     * @name delete
21415     * @memberOf Stack
21416     * @param {string} key The key of the value to remove.
21417     * @returns {boolean} Returns `true` if the entry was removed, else `false`.
21418     */
21419    function stackDelete(key) {
21420      var data = this.__data__,
21421          result = data['delete'](key);
21422
21423      this.size = data.size;
21424      return result;
21425    }
21426
21427    /**
21428     * Gets the stack value for `key`.
21429     *
21430     * @private
21431     * @name get
21432     * @memberOf Stack
21433     * @param {string} key The key of the value to get.
21434     * @returns {*} Returns the entry value.
21435     */
21436    function stackGet(key) {
21437      return this.__data__.get(key);
21438    }
21439
21440    /**
21441     * Checks if a stack value for `key` exists.
21442     *
21443     * @private
21444     * @name has
21445     * @memberOf Stack
21446     * @param {string} key The key of the entry to check.
21447     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
21448     */
21449    function stackHas(key) {
21450      return this.__data__.has(key);
21451    }
21452
21453    /**
21454     * Sets the stack `key` to `value`.
21455     *
21456     * @private
21457     * @name set
21458     * @memberOf Stack
21459     * @param {string} key The key of the value to set.
21460     * @param {*} value The value to set.
21461     * @returns {Object} Returns the stack cache instance.
21462     */
21463    function stackSet(key, value) {
21464      var data = this.__data__;
21465      if (data instanceof ListCache) {
21466        var pairs = data.__data__;
21467        if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {
21468          pairs.push([key, value]);
21469          this.size = ++data.size;
21470          return this;
21471        }
21472        data = this.__data__ = new MapCache(pairs);
21473      }
21474      data.set(key, value);
21475      this.size = data.size;
21476      return this;
21477    }
21478
21479    // Add methods to `Stack`.
21480    Stack.prototype.clear = stackClear;
21481    Stack.prototype['delete'] = stackDelete;
21482    Stack.prototype.get = stackGet;
21483    Stack.prototype.has = stackHas;
21484    Stack.prototype.set = stackSet;
21485
21486    /*------------------------------------------------------------------------*/
21487
21488    /**
21489     * Creates an array of the enumerable property names of the array-like `value`.
21490     *
21491     * @private
21492     * @param {*} value The value to query.
21493     * @param {boolean} inherited Specify returning inherited property names.
21494     * @returns {Array} Returns the array of property names.
21495     */
21496    function arrayLikeKeys(value, inherited) {
21497      var isArr = isArray(value),
21498          isArg = !isArr && isArguments(value),
21499          isBuff = !isArr && !isArg && isBuffer(value),
21500          isType = !isArr && !isArg && !isBuff && isTypedArray(value),
21501          skipIndexes = isArr || isArg || isBuff || isType,
21502          result = skipIndexes ? baseTimes(value.length, String) : [],
21503          length = result.length;
21504
21505      for (var key in value) {
21506        if ((inherited || hasOwnProperty.call(value, key)) &&
21507            !(skipIndexes && (
21508               // Safari 9 has enumerable `arguments.length` in strict mode.
21509               key == 'length' ||
21510               // Node.js 0.10 has enumerable non-index properties on buffers.
21511               (isBuff && (key == 'offset' || key == 'parent')) ||
21512               // PhantomJS 2 has enumerable non-index properties on typed arrays.
21513               (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||
21514               // Skip index properties.
21515               isIndex(key, length)
21516            ))) {
21517          result.push(key);
21518        }
21519      }
21520      return result;
21521    }
21522
21523    /**
21524     * A specialized version of `_.sample` for arrays.
21525     *
21526     * @private
21527     * @param {Array} array The array to sample.
21528     * @returns {*} Returns the random element.
21529     */
21530    function arraySample(array) {
21531      var length = array.length;
21532      return length ? array[baseRandom(0, length - 1)] : undefined;
21533    }
21534
21535    /**
21536     * A specialized version of `_.sampleSize` for arrays.
21537     *
21538     * @private
21539     * @param {Array} array The array to sample.
21540     * @param {number} n The number of elements to sample.
21541     * @returns {Array} Returns the random elements.
21542     */
21543    function arraySampleSize(array, n) {
21544      return shuffleSelf(copyArray(array), baseClamp(n, 0, array.length));
21545    }
21546
21547    /**
21548     * A specialized version of `_.shuffle` for arrays.
21549     *
21550     * @private
21551     * @param {Array} array The array to shuffle.
21552     * @returns {Array} Returns the new shuffled array.
21553     */
21554    function arrayShuffle(array) {
21555      return shuffleSelf(copyArray(array));
21556    }
21557
21558    /**
21559     * This function is like `assignValue` except that it doesn't assign
21560     * `undefined` values.
21561     *
21562     * @private
21563     * @param {Object} object The object to modify.
21564     * @param {string} key The key of the property to assign.
21565     * @param {*} value The value to assign.
21566     */
21567    function assignMergeValue(object, key, value) {
21568      if ((value !== undefined && !eq(object[key], value)) ||
21569          (value === undefined && !(key in object))) {
21570        baseAssignValue(object, key, value);
21571      }
21572    }
21573
21574    /**
21575     * Assigns `value` to `key` of `object` if the existing value is not equivalent
21576     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
21577     * for equality comparisons.
21578     *
21579     * @private
21580     * @param {Object} object The object to modify.
21581     * @param {string} key The key of the property to assign.
21582     * @param {*} value The value to assign.
21583     */
21584    function assignValue(object, key, value) {
21585      var objValue = object[key];
21586      if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||
21587          (value === undefined && !(key in object))) {
21588        baseAssignValue(object, key, value);
21589      }
21590    }
21591
21592    /**
21593     * Gets the index at which the `key` is found in `array` of key-value pairs.
21594     *
21595     * @private
21596     * @param {Array} array The array to inspect.
21597     * @param {*} key The key to search for.
21598     * @returns {number} Returns the index of the matched value, else `-1`.
21599     */
21600    function assocIndexOf(array, key) {
21601      var length = array.length;
21602      while (length--) {
21603        if (eq(array[length][0], key)) {
21604          return length;
21605        }
21606      }
21607      return -1;
21608    }
21609
21610    /**
21611     * Aggregates elements of `collection` on `accumulator` with keys transformed
21612     * by `iteratee` and values set by `setter`.
21613     *
21614     * @private
21615     * @param {Array|Object} collection The collection to iterate over.
21616     * @param {Function} setter The function to set `accumulator` values.
21617     * @param {Function} iteratee The iteratee to transform keys.
21618     * @param {Object} accumulator The initial aggregated object.
21619     * @returns {Function} Returns `accumulator`.
21620     */
21621    function baseAggregator(collection, setter, iteratee, accumulator) {
21622      baseEach(collection, function(value, key, collection) {
21623        setter(accumulator, value, iteratee(value), collection);
21624      });
21625      return accumulator;
21626    }
21627
21628    /**
21629     * The base implementation of `_.assign` without support for multiple sources
21630     * or `customizer` functions.
21631     *
21632     * @private
21633     * @param {Object} object The destination object.
21634     * @param {Object} source The source object.
21635     * @returns {Object} Returns `object`.
21636     */
21637    function baseAssign(object, source) {
21638      return object && copyObject(source, keys(source), object);
21639    }
21640
21641    /**
21642     * The base implementation of `_.assignIn` without support for multiple sources
21643     * or `customizer` functions.
21644     *
21645     * @private
21646     * @param {Object} object The destination object.
21647     * @param {Object} source The source object.
21648     * @returns {Object} Returns `object`.
21649     */
21650    function baseAssignIn(object, source) {
21651      return object && copyObject(source, keysIn(source), object);
21652    }
21653
21654    /**
21655     * The base implementation of `assignValue` and `assignMergeValue` without
21656     * value checks.
21657     *
21658     * @private
21659     * @param {Object} object The object to modify.
21660     * @param {string} key The key of the property to assign.
21661     * @param {*} value The value to assign.
21662     */
21663    function baseAssignValue(object, key, value) {
21664      if (key == '__proto__' && defineProperty) {
21665        defineProperty(object, key, {
21666          'configurable': true,
21667          'enumerable': true,
21668          'value': value,
21669          'writable': true
21670        });
21671      } else {
21672        object[key] = value;
21673      }
21674    }
21675
21676    /**
21677     * The base implementation of `_.at` without support for individual paths.
21678     *
21679     * @private
21680     * @param {Object} object The object to iterate over.
21681     * @param {string[]} paths The property paths to pick.
21682     * @returns {Array} Returns the picked elements.
21683     */
21684    function baseAt(object, paths) {
21685      var index = -1,
21686          length = paths.length,
21687          result = Array(length),
21688          skip = object == null;
21689
21690      while (++index < length) {
21691        result[index] = skip ? undefined : get(object, paths[index]);
21692      }
21693      return result;
21694    }
21695
21696    /**
21697     * The base implementation of `_.clamp` which doesn't coerce arguments.
21698     *
21699     * @private
21700     * @param {number} number The number to clamp.
21701     * @param {number} [lower] The lower bound.
21702     * @param {number} upper The upper bound.
21703     * @returns {number} Returns the clamped number.
21704     */
21705    function baseClamp(number, lower, upper) {
21706      if (number === number) {
21707        if (upper !== undefined) {
21708          number = number <= upper ? number : upper;
21709        }
21710        if (lower !== undefined) {
21711          number = number >= lower ? number : lower;
21712        }
21713      }
21714      return number;
21715    }
21716
21717    /**
21718     * The base implementation of `_.clone` and `_.cloneDeep` which tracks
21719     * traversed objects.
21720     *
21721     * @private
21722     * @param {*} value The value to clone.
21723     * @param {boolean} bitmask The bitmask flags.
21724     *  1 - Deep clone
21725     *  2 - Flatten inherited properties
21726     *  4 - Clone symbols
21727     * @param {Function} [customizer] The function to customize cloning.
21728     * @param {string} [key] The key of `value`.
21729     * @param {Object} [object] The parent object of `value`.
21730     * @param {Object} [stack] Tracks traversed objects and their clone counterparts.
21731     * @returns {*} Returns the cloned value.
21732     */
21733    function baseClone(value, bitmask, customizer, key, object, stack) {
21734      var result,
21735          isDeep = bitmask & CLONE_DEEP_FLAG,
21736          isFlat = bitmask & CLONE_FLAT_FLAG,
21737          isFull = bitmask & CLONE_SYMBOLS_FLAG;
21738
21739      if (customizer) {
21740        result = object ? customizer(value, key, object, stack) : customizer(value);
21741      }
21742      if (result !== undefined) {
21743        return result;
21744      }
21745      if (!isObject(value)) {
21746        return value;
21747      }
21748      var isArr = isArray(value);
21749      if (isArr) {
21750        result = initCloneArray(value);
21751        if (!isDeep) {
21752          return copyArray(value, result);
21753        }
21754      } else {
21755        var tag = getTag(value),
21756            isFunc = tag == funcTag || tag == genTag;
21757
21758        if (isBuffer(value)) {
21759          return cloneBuffer(value, isDeep);
21760        }
21761        if (tag == objectTag || tag == argsTag || (isFunc && !object)) {
21762          result = (isFlat || isFunc) ? {} : initCloneObject(value);
21763          if (!isDeep) {
21764            return isFlat
21765              ? copySymbolsIn(value, baseAssignIn(result, value))
21766              : copySymbols(value, baseAssign(result, value));
21767          }
21768        } else {
21769          if (!cloneableTags[tag]) {
21770            return object ? value : {};
21771          }
21772          result = initCloneByTag(value, tag, isDeep);
21773        }
21774      }
21775      // Check for circular references and return its corresponding clone.
21776      stack || (stack = new Stack);
21777      var stacked = stack.get(value);
21778      if (stacked) {
21779        return stacked;
21780      }
21781      stack.set(value, result);
21782
21783      if (isSet(value)) {
21784        value.forEach(function(subValue) {
21785          result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));
21786        });
21787      } else if (isMap(value)) {
21788        value.forEach(function(subValue, key) {
21789          result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack));
21790        });
21791      }
21792
21793      var keysFunc = isFull
21794        ? (isFlat ? getAllKeysIn : getAllKeys)
21795        : (isFlat ? keysIn : keys);
21796
21797      var props = isArr ? undefined : keysFunc(value);
21798      arrayEach(props || value, function(subValue, key) {
21799        if (props) {
21800          key = subValue;
21801          subValue = value[key];
21802        }
21803        // Recursively populate clone (susceptible to call stack limits).
21804        assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));
21805      });
21806      return result;
21807    }
21808
21809    /**
21810     * The base implementation of `_.conforms` which doesn't clone `source`.
21811     *
21812     * @private
21813     * @param {Object} source The object of property predicates to conform to.
21814     * @returns {Function} Returns the new spec function.
21815     */
21816    function baseConforms(source) {
21817      var props = keys(source);
21818      return function(object) {
21819        return baseConformsTo(object, source, props);
21820      };
21821    }
21822
21823    /**
21824     * The base implementation of `_.conformsTo` which accepts `props` to check.
21825     *
21826     * @private
21827     * @param {Object} object The object to inspect.
21828     * @param {Object} source The object of property predicates to conform to.
21829     * @returns {boolean} Returns `true` if `object` conforms, else `false`.
21830     */
21831    function baseConformsTo(object, source, props) {
21832      var length = props.length;
21833      if (object == null) {
21834        return !length;
21835      }
21836      object = Object(object);
21837      while (length--) {
21838        var key = props[length],
21839            predicate = source[key],
21840            value = object[key];
21841
21842        if ((value === undefined && !(key in object)) || !predicate(value)) {
21843          return false;
21844        }
21845      }
21846      return true;
21847    }
21848
21849    /**
21850     * The base implementation of `_.delay` and `_.defer` which accepts `args`
21851     * to provide to `func`.
21852     *
21853     * @private
21854     * @param {Function} func The function to delay.
21855     * @param {number} wait The number of milliseconds to delay invocation.
21856     * @param {Array} args The arguments to provide to `func`.
21857     * @returns {number|Object} Returns the timer id or timeout object.
21858     */
21859    function baseDelay(func, wait, args) {
21860      if (typeof func != 'function') {
21861        throw new TypeError(FUNC_ERROR_TEXT);
21862      }
21863      return setTimeout(function() { func.apply(undefined, args); }, wait);
21864    }
21865
21866    /**
21867     * The base implementation of methods like `_.difference` without support
21868     * for excluding multiple arrays or iteratee shorthands.
21869     *
21870     * @private
21871     * @param {Array} array The array to inspect.
21872     * @param {Array} values The values to exclude.
21873     * @param {Function} [iteratee] The iteratee invoked per element.
21874     * @param {Function} [comparator] The comparator invoked per element.
21875     * @returns {Array} Returns the new array of filtered values.
21876     */
21877    function baseDifference(array, values, iteratee, comparator) {
21878      var index = -1,
21879          includes = arrayIncludes,
21880          isCommon = true,
21881          length = array.length,
21882          result = [],
21883          valuesLength = values.length;
21884
21885      if (!length) {
21886        return result;
21887      }
21888      if (iteratee) {
21889        values = arrayMap(values, baseUnary(iteratee));
21890      }
21891      if (comparator) {
21892        includes = arrayIncludesWith;
21893        isCommon = false;
21894      }
21895      else if (values.length >= LARGE_ARRAY_SIZE) {
21896        includes = cacheHas;
21897        isCommon = false;
21898        values = new SetCache(values);
21899      }
21900      outer:
21901      while (++index < length) {
21902        var value = array[index],
21903            computed = iteratee == null ? value : iteratee(value);
21904
21905        value = (comparator || value !== 0) ? value : 0;
21906        if (isCommon && computed === computed) {
21907          var valuesIndex = valuesLength;
21908          while (valuesIndex--) {
21909            if (values[valuesIndex] === computed) {
21910              continue outer;
21911            }
21912          }
21913          result.push(value);
21914        }
21915        else if (!includes(values, computed, comparator)) {
21916          result.push(value);
21917        }
21918      }
21919      return result;
21920    }
21921
21922    /**
21923     * The base implementation of `_.forEach` without support for iteratee shorthands.
21924     *
21925     * @private
21926     * @param {Array|Object} collection The collection to iterate over.
21927     * @param {Function} iteratee The function invoked per iteration.
21928     * @returns {Array|Object} Returns `collection`.
21929     */
21930    var baseEach = createBaseEach(baseForOwn);
21931
21932    /**
21933     * The base implementation of `_.forEachRight` without support for iteratee shorthands.
21934     *
21935     * @private
21936     * @param {Array|Object} collection The collection to iterate over.
21937     * @param {Function} iteratee The function invoked per iteration.
21938     * @returns {Array|Object} Returns `collection`.
21939     */
21940    var baseEachRight = createBaseEach(baseForOwnRight, true);
21941
21942    /**
21943     * The base implementation of `_.every` without support for iteratee shorthands.
21944     *
21945     * @private
21946     * @param {Array|Object} collection The collection to iterate over.
21947     * @param {Function} predicate The function invoked per iteration.
21948     * @returns {boolean} Returns `true` if all elements pass the predicate check,
21949     *  else `false`
21950     */
21951    function baseEvery(collection, predicate) {
21952      var result = true;
21953      baseEach(collection, function(value, index, collection) {
21954        result = !!predicate(value, index, collection);
21955        return result;
21956      });
21957      return result;
21958    }
21959
21960    /**
21961     * The base implementation of methods like `_.max` and `_.min` which accepts a
21962     * `comparator` to determine the extremum value.
21963     *
21964     * @private
21965     * @param {Array} array The array to iterate over.
21966     * @param {Function} iteratee The iteratee invoked per iteration.
21967     * @param {Function} comparator The comparator used to compare values.
21968     * @returns {*} Returns the extremum value.
21969     */
21970    function baseExtremum(array, iteratee, comparator) {
21971      var index = -1,
21972          length = array.length;
21973
21974      while (++index < length) {
21975        var value = array[index],
21976            current = iteratee(value);
21977
21978        if (current != null && (computed === undefined
21979              ? (current === current && !isSymbol(current))
21980              : comparator(current, computed)
21981            )) {
21982          var computed = current,
21983              result = value;
21984        }
21985      }
21986      return result;
21987    }
21988
21989    /**
21990     * The base implementation of `_.fill` without an iteratee call guard.
21991     *
21992     * @private
21993     * @param {Array} array The array to fill.
21994     * @param {*} value The value to fill `array` with.
21995     * @param {number} [start=0] The start position.
21996     * @param {number} [end=array.length] The end position.
21997     * @returns {Array} Returns `array`.
21998     */
21999    function baseFill(array, value, start, end) {
22000      var length = array.length;
22001
22002      start = toInteger(start);
22003      if (start < 0) {
22004        start = -start > length ? 0 : (length + start);
22005      }
22006      end = (end === undefined || end > length) ? length : toInteger(end);
22007      if (end < 0) {
22008        end += length;
22009      }
22010      end = start > end ? 0 : toLength(end);
22011      while (start < end) {
22012        array[start++] = value;
22013      }
22014      return array;
22015    }
22016
22017    /**
22018     * The base implementation of `_.filter` without support for iteratee shorthands.
22019     *
22020     * @private
22021     * @param {Array|Object} collection The collection to iterate over.
22022     * @param {Function} predicate The function invoked per iteration.
22023     * @returns {Array} Returns the new filtered array.
22024     */
22025    function baseFilter(collection, predicate) {
22026      var result = [];
22027      baseEach(collection, function(value, index, collection) {
22028        if (predicate(value, index, collection)) {
22029          result.push(value);
22030        }
22031      });
22032      return result;
22033    }
22034
22035    /**
22036     * The base implementation of `_.flatten` with support for restricting flattening.
22037     *
22038     * @private
22039     * @param {Array} array The array to flatten.
22040     * @param {number} depth The maximum recursion depth.
22041     * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.
22042     * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.
22043     * @param {Array} [result=[]] The initial result value.
22044     * @returns {Array} Returns the new flattened array.
22045     */
22046    function baseFlatten(array, depth, predicate, isStrict, result) {
22047      var index = -1,
22048          length = array.length;
22049
22050      predicate || (predicate = isFlattenable);
22051      result || (result = []);
22052
22053      while (++index < length) {
22054        var value = array[index];
22055        if (depth > 0 && predicate(value)) {
22056          if (depth > 1) {
22057            // Recursively flatten arrays (susceptible to call stack limits).
22058            baseFlatten(value, depth - 1, predicate, isStrict, result);
22059          } else {
22060            arrayPush(result, value);
22061          }
22062        } else if (!isStrict) {
22063          result[result.length] = value;
22064        }
22065      }
22066      return result;
22067    }
22068
22069    /**
22070     * The base implementation of `baseForOwn` which iterates over `object`
22071     * properties returned by `keysFunc` and invokes `iteratee` for each property.
22072     * Iteratee functions may exit iteration early by explicitly returning `false`.
22073     *
22074     * @private
22075     * @param {Object} object The object to iterate over.
22076     * @param {Function} iteratee The function invoked per iteration.
22077     * @param {Function} keysFunc The function to get the keys of `object`.
22078     * @returns {Object} Returns `object`.
22079     */
22080    var baseFor = createBaseFor();
22081
22082    /**
22083     * This function is like `baseFor` except that it iterates over properties
22084     * in the opposite order.
22085     *
22086     * @private
22087     * @param {Object} object The object to iterate over.
22088     * @param {Function} iteratee The function invoked per iteration.
22089     * @param {Function} keysFunc The function to get the keys of `object`.
22090     * @returns {Object} Returns `object`.
22091     */
22092    var baseForRight = createBaseFor(true);
22093
22094    /**
22095     * The base implementation of `_.forOwn` without support for iteratee shorthands.
22096     *
22097     * @private
22098     * @param {Object} object The object to iterate over.
22099     * @param {Function} iteratee The function invoked per iteration.
22100     * @returns {Object} Returns `object`.
22101     */
22102    function baseForOwn(object, iteratee) {
22103      return object && baseFor(object, iteratee, keys);
22104    }
22105
22106    /**
22107     * The base implementation of `_.forOwnRight` without support for iteratee shorthands.
22108     *
22109     * @private
22110     * @param {Object} object The object to iterate over.
22111     * @param {Function} iteratee The function invoked per iteration.
22112     * @returns {Object} Returns `object`.
22113     */
22114    function baseForOwnRight(object, iteratee) {
22115      return object && baseForRight(object, iteratee, keys);
22116    }
22117
22118    /**
22119     * The base implementation of `_.functions` which creates an array of
22120     * `object` function property names filtered from `props`.
22121     *
22122     * @private
22123     * @param {Object} object The object to inspect.
22124     * @param {Array} props The property names to filter.
22125     * @returns {Array} Returns the function names.
22126     */
22127    function baseFunctions(object, props) {
22128      return arrayFilter(props, function(key) {
22129        return isFunction(object[key]);
22130      });
22131    }
22132
22133    /**
22134     * The base implementation of `_.get` without support for default values.
22135     *
22136     * @private
22137     * @param {Object} object The object to query.
22138     * @param {Array|string} path The path of the property to get.
22139     * @returns {*} Returns the resolved value.
22140     */
22141    function baseGet(object, path) {
22142      path = castPath(path, object);
22143
22144      var index = 0,
22145          length = path.length;
22146
22147      while (object != null && index < length) {
22148        object = object[toKey(path[index++])];
22149      }
22150      return (index && index == length) ? object : undefined;
22151    }
22152
22153    /**
22154     * The base implementation of `getAllKeys` and `getAllKeysIn` which uses
22155     * `keysFunc` and `symbolsFunc` to get the enumerable property names and
22156     * symbols of `object`.
22157     *
22158     * @private
22159     * @param {Object} object The object to query.
22160     * @param {Function} keysFunc The function to get the keys of `object`.
22161     * @param {Function} symbolsFunc The function to get the symbols of `object`.
22162     * @returns {Array} Returns the array of property names and symbols.
22163     */
22164    function baseGetAllKeys(object, keysFunc, symbolsFunc) {
22165      var result = keysFunc(object);
22166      return isArray(object) ? result : arrayPush(result, symbolsFunc(object));
22167    }
22168
22169    /**
22170     * The base implementation of `getTag` without fallbacks for buggy environments.
22171     *
22172     * @private
22173     * @param {*} value The value to query.
22174     * @returns {string} Returns the `toStringTag`.
22175     */
22176    function baseGetTag(value) {
22177      if (value == null) {
22178        return value === undefined ? undefinedTag : nullTag;
22179      }
22180      return (symToStringTag && symToStringTag in Object(value))
22181        ? getRawTag(value)
22182        : objectToString(value);
22183    }
22184
22185    /**
22186     * The base implementation of `_.gt` which doesn't coerce arguments.
22187     *
22188     * @private
22189     * @param {*} value The value to compare.
22190     * @param {*} other The other value to compare.
22191     * @returns {boolean} Returns `true` if `value` is greater than `other`,
22192     *  else `false`.
22193     */
22194    function baseGt(value, other) {
22195      return value > other;
22196    }
22197
22198    /**
22199     * The base implementation of `_.has` without support for deep paths.
22200     *
22201     * @private
22202     * @param {Object} [object] The object to query.
22203     * @param {Array|string} key The key to check.
22204     * @returns {boolean} Returns `true` if `key` exists, else `false`.
22205     */
22206    function baseHas(object, key) {
22207      return object != null && hasOwnProperty.call(object, key);
22208    }
22209
22210    /**
22211     * The base implementation of `_.hasIn` without support for deep paths.
22212     *
22213     * @private
22214     * @param {Object} [object] The object to query.
22215     * @param {Array|string} key The key to check.
22216     * @returns {boolean} Returns `true` if `key` exists, else `false`.
22217     */
22218    function baseHasIn(object, key) {
22219      return object != null && key in Object(object);
22220    }
22221
22222    /**
22223     * The base implementation of `_.inRange` which doesn't coerce arguments.
22224     *
22225     * @private
22226     * @param {number} number The number to check.
22227     * @param {number} start The start of the range.
22228     * @param {number} end The end of the range.
22229     * @returns {boolean} Returns `true` if `number` is in the range, else `false`.
22230     */
22231    function baseInRange(number, start, end) {
22232      return number >= nativeMin(start, end) && number < nativeMax(start, end);
22233    }
22234
22235    /**
22236     * The base implementation of methods like `_.intersection`, without support
22237     * for iteratee shorthands, that accepts an array of arrays to inspect.
22238     *
22239     * @private
22240     * @param {Array} arrays The arrays to inspect.
22241     * @param {Function} [iteratee] The iteratee invoked per element.
22242     * @param {Function} [comparator] The comparator invoked per element.
22243     * @returns {Array} Returns the new array of shared values.
22244     */
22245    function baseIntersection(arrays, iteratee, comparator) {
22246      var includes = comparator ? arrayIncludesWith : arrayIncludes,
22247          length = arrays[0].length,
22248          othLength = arrays.length,
22249          othIndex = othLength,
22250          caches = Array(othLength),
22251          maxLength = Infinity,
22252          result = [];
22253
22254      while (othIndex--) {
22255        var array = arrays[othIndex];
22256        if (othIndex && iteratee) {
22257          array = arrayMap(array, baseUnary(iteratee));
22258        }
22259        maxLength = nativeMin(array.length, maxLength);
22260        caches[othIndex] = !comparator && (iteratee || (length >= 120 && array.length >= 120))
22261          ? new SetCache(othIndex && array)
22262          : undefined;
22263      }
22264      array = arrays[0];
22265
22266      var index = -1,
22267          seen = caches[0];
22268
22269      outer:
22270      while (++index < length && result.length < maxLength) {
22271        var value = array[index],
22272            computed = iteratee ? iteratee(value) : value;
22273
22274        value = (comparator || value !== 0) ? value : 0;
22275        if (!(seen
22276              ? cacheHas(seen, computed)
22277              : includes(result, computed, comparator)
22278            )) {
22279          othIndex = othLength;
22280          while (--othIndex) {
22281            var cache = caches[othIndex];
22282            if (!(cache
22283                  ? cacheHas(cache, computed)
22284                  : includes(arrays[othIndex], computed, comparator))
22285                ) {
22286              continue outer;
22287            }
22288          }
22289          if (seen) {
22290            seen.push(computed);
22291          }
22292          result.push(value);
22293        }
22294      }
22295      return result;
22296    }
22297
22298    /**
22299     * The base implementation of `_.invert` and `_.invertBy` which inverts
22300     * `object` with values transformed by `iteratee` and set by `setter`.
22301     *
22302     * @private
22303     * @param {Object} object The object to iterate over.
22304     * @param {Function} setter The function to set `accumulator` values.
22305     * @param {Function} iteratee The iteratee to transform values.
22306     * @param {Object} accumulator The initial inverted object.
22307     * @returns {Function} Returns `accumulator`.
22308     */
22309    function baseInverter(object, setter, iteratee, accumulator) {
22310      baseForOwn(object, function(value, key, object) {
22311        setter(accumulator, iteratee(value), key, object);
22312      });
22313      return accumulator;
22314    }
22315
22316    /**
22317     * The base implementation of `_.invoke` without support for individual
22318     * method arguments.
22319     *
22320     * @private
22321     * @param {Object} object The object to query.
22322     * @param {Array|string} path The path of the method to invoke.
22323     * @param {Array} args The arguments to invoke the method with.
22324     * @returns {*} Returns the result of the invoked method.
22325     */
22326    function baseInvoke(object, path, args) {
22327      path = castPath(path, object);
22328      object = parent(object, path);
22329      var func = object == null ? object : object[toKey(last(path))];
22330      return func == null ? undefined : apply(func, object, args);
22331    }
22332
22333    /**
22334     * The base implementation of `_.isArguments`.
22335     *
22336     * @private
22337     * @param {*} value The value to check.
22338     * @returns {boolean} Returns `true` if `value` is an `arguments` object,
22339     */
22340    function baseIsArguments(value) {
22341      return isObjectLike(value) && baseGetTag(value) == argsTag;
22342    }
22343
22344    /**
22345     * The base implementation of `_.isArrayBuffer` without Node.js optimizations.
22346     *
22347     * @private
22348     * @param {*} value The value to check.
22349     * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.
22350     */
22351    function baseIsArrayBuffer(value) {
22352      return isObjectLike(value) && baseGetTag(value) == arrayBufferTag;
22353    }
22354
22355    /**
22356     * The base implementation of `_.isDate` without Node.js optimizations.
22357     *
22358     * @private
22359     * @param {*} value The value to check.
22360     * @returns {boolean} Returns `true` if `value` is a date object, else `false`.
22361     */
22362    function baseIsDate(value) {
22363      return isObjectLike(value) && baseGetTag(value) == dateTag;
22364    }
22365
22366    /**
22367     * The base implementation of `_.isEqual` which supports partial comparisons
22368     * and tracks traversed objects.
22369     *
22370     * @private
22371     * @param {*} value The value to compare.
22372     * @param {*} other The other value to compare.
22373     * @param {boolean} bitmask The bitmask flags.
22374     *  1 - Unordered comparison
22375     *  2 - Partial comparison
22376     * @param {Function} [customizer] The function to customize comparisons.
22377     * @param {Object} [stack] Tracks traversed `value` and `other` objects.
22378     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
22379     */
22380    function baseIsEqual(value, other, bitmask, customizer, stack) {
22381      if (value === other) {
22382        return true;
22383      }
22384      if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {
22385        return value !== value && other !== other;
22386      }
22387      return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);
22388    }
22389
22390    /**
22391     * A specialized version of `baseIsEqual` for arrays and objects which performs
22392     * deep comparisons and tracks traversed objects enabling objects with circular
22393     * references to be compared.
22394     *
22395     * @private
22396     * @param {Object} object The object to compare.
22397     * @param {Object} other The other object to compare.
22398     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.
22399     * @param {Function} customizer The function to customize comparisons.
22400     * @param {Function} equalFunc The function to determine equivalents of values.
22401     * @param {Object} [stack] Tracks traversed `object` and `other` objects.
22402     * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
22403     */
22404    function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {
22405      var objIsArr = isArray(object),
22406          othIsArr = isArray(other),
22407          objTag = objIsArr ? arrayTag : getTag(object),
22408          othTag = othIsArr ? arrayTag : getTag(other);
22409
22410      objTag = objTag == argsTag ? objectTag : objTag;
22411      othTag = othTag == argsTag ? objectTag : othTag;
22412
22413      var objIsObj = objTag == objectTag,
22414          othIsObj = othTag == objectTag,
22415          isSameTag = objTag == othTag;
22416
22417      if (isSameTag && isBuffer(object)) {
22418        if (!isBuffer(other)) {
22419          return false;
22420        }
22421        objIsArr = true;
22422        objIsObj = false;
22423      }
22424      if (isSameTag && !objIsObj) {
22425        stack || (stack = new Stack);
22426        return (objIsArr || isTypedArray(object))
22427          ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)
22428          : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);
22429      }
22430      if (!(bitmask & COMPARE_PARTIAL_FLAG)) {
22431        var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),
22432            othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');
22433
22434        if (objIsWrapped || othIsWrapped) {
22435          var objUnwrapped = objIsWrapped ? object.value() : object,
22436              othUnwrapped = othIsWrapped ? other.value() : other;
22437
22438          stack || (stack = new Stack);
22439          return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);
22440        }
22441      }
22442      if (!isSameTag) {
22443        return false;
22444      }
22445      stack || (stack = new Stack);
22446      return equalObjects(object, other, bitmask, customizer, equalFunc, stack);
22447    }
22448
22449    /**
22450     * The base implementation of `_.isMap` without Node.js optimizations.
22451     *
22452     * @private
22453     * @param {*} value The value to check.
22454     * @returns {boolean} Returns `true` if `value` is a map, else `false`.
22455     */
22456    function baseIsMap(value) {
22457      return isObjectLike(value) && getTag(value) == mapTag;
22458    }
22459
22460    /**
22461     * The base implementation of `_.isMatch` without support for iteratee shorthands.
22462     *
22463     * @private
22464     * @param {Object} object The object to inspect.
22465     * @param {Object} source The object of property values to match.
22466     * @param {Array} matchData The property names, values, and compare flags to match.
22467     * @param {Function} [customizer] The function to customize comparisons.
22468     * @returns {boolean} Returns `true` if `object` is a match, else `false`.
22469     */
22470    function baseIsMatch(object, source, matchData, customizer) {
22471      var index = matchData.length,
22472          length = index,
22473          noCustomizer = !customizer;
22474
22475      if (object == null) {
22476        return !length;
22477      }
22478      object = Object(object);
22479      while (index--) {
22480        var data = matchData[index];
22481        if ((noCustomizer && data[2])
22482              ? data[1] !== object[data[0]]
22483              : !(data[0] in object)
22484            ) {
22485          return false;
22486        }
22487      }
22488      while (++index < length) {
22489        data = matchData[index];
22490        var key = data[0],
22491            objValue = object[key],
22492            srcValue = data[1];
22493
22494        if (noCustomizer && data[2]) {
22495          if (objValue === undefined && !(key in object)) {
22496            return false;
22497          }
22498        } else {
22499          var stack = new Stack;
22500          if (customizer) {
22501            var result = customizer(objValue, srcValue, key, object, source, stack);
22502          }
22503          if (!(result === undefined
22504                ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)
22505                : result
22506              )) {
22507            return false;
22508          }
22509        }
22510      }
22511      return true;
22512    }
22513
22514    /**
22515     * The base implementation of `_.isNative` without bad shim checks.
22516     *
22517     * @private
22518     * @param {*} value The value to check.
22519     * @returns {boolean} Returns `true` if `value` is a native function,
22520     *  else `false`.
22521     */
22522    function baseIsNative(value) {
22523      if (!isObject(value) || isMasked(value)) {
22524        return false;
22525      }
22526      var pattern = isFunction(value) ? reIsNative : reIsHostCtor;
22527      return pattern.test(toSource(value));
22528    }
22529
22530    /**
22531     * The base implementation of `_.isRegExp` without Node.js optimizations.
22532     *
22533     * @private
22534     * @param {*} value The value to check.
22535     * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.
22536     */
22537    function baseIsRegExp(value) {
22538      return isObjectLike(value) && baseGetTag(value) == regexpTag;
22539    }
22540
22541    /**
22542     * The base implementation of `_.isSet` without Node.js optimizations.
22543     *
22544     * @private
22545     * @param {*} value The value to check.
22546     * @returns {boolean} Returns `true` if `value` is a set, else `false`.
22547     */
22548    function baseIsSet(value) {
22549      return isObjectLike(value) && getTag(value) == setTag;
22550    }
22551
22552    /**
22553     * The base implementation of `_.isTypedArray` without Node.js optimizations.
22554     *
22555     * @private
22556     * @param {*} value The value to check.
22557     * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.
22558     */
22559    function baseIsTypedArray(value) {
22560      return isObjectLike(value) &&
22561        isLength(value.length) && !!typedArrayTags[baseGetTag(value)];
22562    }
22563
22564    /**
22565     * The base implementation of `_.iteratee`.
22566     *
22567     * @private
22568     * @param {*} [value=_.identity] The value to convert to an iteratee.
22569     * @returns {Function} Returns the iteratee.
22570     */
22571    function baseIteratee(value) {
22572      // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.
22573      // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.
22574      if (typeof value == 'function') {
22575        return value;
22576      }
22577      if (value == null) {
22578        return identity;
22579      }
22580      if (typeof value == 'object') {
22581        return isArray(value)
22582          ? baseMatchesProperty(value[0], value[1])
22583          : baseMatches(value);
22584      }
22585      return property(value);
22586    }
22587
22588    /**
22589     * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.
22590     *
22591     * @private
22592     * @param {Object} object The object to query.
22593     * @returns {Array} Returns the array of property names.
22594     */
22595    function baseKeys(object) {
22596      if (!isPrototype(object)) {
22597        return nativeKeys(object);
22598      }
22599      var result = [];
22600      for (var key in Object(object)) {
22601        if (hasOwnProperty.call(object, key) && key != 'constructor') {
22602          result.push(key);
22603        }
22604      }
22605      return result;
22606    }
22607
22608    /**
22609     * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.
22610     *
22611     * @private
22612     * @param {Object} object The object to query.
22613     * @returns {Array} Returns the array of property names.
22614     */
22615    function baseKeysIn(object) {
22616      if (!isObject(object)) {
22617        return nativeKeysIn(object);
22618      }
22619      var isProto = isPrototype(object),
22620          result = [];
22621
22622      for (var key in object) {
22623        if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {
22624          result.push(key);
22625        }
22626      }
22627      return result;
22628    }
22629
22630    /**
22631     * The base implementation of `_.lt` which doesn't coerce arguments.
22632     *
22633     * @private
22634     * @param {*} value The value to compare.
22635     * @param {*} other The other value to compare.
22636     * @returns {boolean} Returns `true` if `value` is less than `other`,
22637     *  else `false`.
22638     */
22639    function baseLt(value, other) {
22640      return value < other;
22641    }
22642
22643    /**
22644     * The base implementation of `_.map` without support for iteratee shorthands.
22645     *
22646     * @private
22647     * @param {Array|Object} collection The collection to iterate over.
22648     * @param {Function} iteratee The function invoked per iteration.
22649     * @returns {Array} Returns the new mapped array.
22650     */
22651    function baseMap(collection, iteratee) {
22652      var index = -1,
22653          result = isArrayLike(collection) ? Array(collection.length) : [];
22654
22655      baseEach(collection, function(value, key, collection) {
22656        result[++index] = iteratee(value, key, collection);
22657      });
22658      return result;
22659    }
22660
22661    /**
22662     * The base implementation of `_.matches` which doesn't clone `source`.
22663     *
22664     * @private
22665     * @param {Object} source The object of property values to match.
22666     * @returns {Function} Returns the new spec function.
22667     */
22668    function baseMatches(source) {
22669      var matchData = getMatchData(source);
22670      if (matchData.length == 1 && matchData[0][2]) {
22671        return matchesStrictComparable(matchData[0][0], matchData[0][1]);
22672      }
22673      return function(object) {
22674        return object === source || baseIsMatch(object, source, matchData);
22675      };
22676    }
22677
22678    /**
22679     * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.
22680     *
22681     * @private
22682     * @param {string} path The path of the property to get.
22683     * @param {*} srcValue The value to match.
22684     * @returns {Function} Returns the new spec function.
22685     */
22686    function baseMatchesProperty(path, srcValue) {
22687      if (isKey(path) && isStrictComparable(srcValue)) {
22688        return matchesStrictComparable(toKey(path), srcValue);
22689      }
22690      return function(object) {
22691        var objValue = get(object, path);
22692        return (objValue === undefined && objValue === srcValue)
22693          ? hasIn(object, path)
22694          : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);
22695      };
22696    }
22697
22698    /**
22699     * The base implementation of `_.merge` without support for multiple sources.
22700     *
22701     * @private
22702     * @param {Object} object The destination object.
22703     * @param {Object} source The source object.
22704     * @param {number} srcIndex The index of `source`.
22705     * @param {Function} [customizer] The function to customize merged values.
22706     * @param {Object} [stack] Tracks traversed source values and their merged
22707     *  counterparts.
22708     */
22709    function baseMerge(object, source, srcIndex, customizer, stack) {
22710      if (object === source) {
22711        return;
22712      }
22713      baseFor(source, function(srcValue, key) {
22714        stack || (stack = new Stack);
22715        if (isObject(srcValue)) {
22716          baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);
22717        }
22718        else {
22719          var newValue = customizer
22720            ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack)
22721            : undefined;
22722
22723          if (newValue === undefined) {
22724            newValue = srcValue;
22725          }
22726          assignMergeValue(object, key, newValue);
22727        }
22728      }, keysIn);
22729    }
22730
22731    /**
22732     * A specialized version of `baseMerge` for arrays and objects which performs
22733     * deep merges and tracks traversed objects enabling objects with circular
22734     * references to be merged.
22735     *
22736     * @private
22737     * @param {Object} object The destination object.
22738     * @param {Object} source The source object.
22739     * @param {string} key The key of the value to merge.
22740     * @param {number} srcIndex The index of `source`.
22741     * @param {Function} mergeFunc The function to merge values.
22742     * @param {Function} [customizer] The function to customize assigned values.
22743     * @param {Object} [stack] Tracks traversed source values and their merged
22744     *  counterparts.
22745     */
22746    function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {
22747      var objValue = safeGet(object, key),
22748          srcValue = safeGet(source, key),
22749          stacked = stack.get(srcValue);
22750
22751      if (stacked) {
22752        assignMergeValue(object, key, stacked);
22753        return;
22754      }
22755      var newValue = customizer
22756        ? customizer(objValue, srcValue, (key + ''), object, source, stack)
22757        : undefined;
22758
22759      var isCommon = newValue === undefined;
22760
22761      if (isCommon) {
22762        var isArr = isArray(srcValue),
22763            isBuff = !isArr && isBuffer(srcValue),
22764            isTyped = !isArr && !isBuff && isTypedArray(srcValue);
22765
22766        newValue = srcValue;
22767        if (isArr || isBuff || isTyped) {
22768          if (isArray(objValue)) {
22769            newValue = objValue;
22770          }
22771          else if (isArrayLikeObject(objValue)) {
22772            newValue = copyArray(objValue);
22773          }
22774          else if (isBuff) {
22775            isCommon = false;
22776            newValue = cloneBuffer(srcValue, true);
22777          }
22778          else if (isTyped) {
22779            isCommon = false;
22780            newValue = cloneTypedArray(srcValue, true);
22781          }
22782          else {
22783            newValue = [];
22784          }
22785        }
22786        else if (isPlainObject(srcValue) || isArguments(srcValue)) {
22787          newValue = objValue;
22788          if (isArguments(objValue)) {
22789            newValue = toPlainObject(objValue);
22790          }
22791          else if (!isObject(objValue) || isFunction(objValue)) {
22792            newValue = initCloneObject(srcValue);
22793          }
22794        }
22795        else {
22796          isCommon = false;
22797        }
22798      }
22799      if (isCommon) {
22800        // Recursively merge objects and arrays (susceptible to call stack limits).
22801        stack.set(srcValue, newValue);
22802        mergeFunc(newValue, srcValue, srcIndex, customizer, stack);
22803        stack['delete'](srcValue);
22804      }
22805      assignMergeValue(object, key, newValue);
22806    }
22807
22808    /**
22809     * The base implementation of `_.nth` which doesn't coerce arguments.
22810     *
22811     * @private
22812     * @param {Array} array The array to query.
22813     * @param {number} n The index of the element to return.
22814     * @returns {*} Returns the nth element of `array`.
22815     */
22816    function baseNth(array, n) {
22817      var length = array.length;
22818      if (!length) {
22819        return;
22820      }
22821      n += n < 0 ? length : 0;
22822      return isIndex(n, length) ? array[n] : undefined;
22823    }
22824
22825    /**
22826     * The base implementation of `_.orderBy` without param guards.
22827     *
22828     * @private
22829     * @param {Array|Object} collection The collection to iterate over.
22830     * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by.
22831     * @param {string[]} orders The sort orders of `iteratees`.
22832     * @returns {Array} Returns the new sorted array.
22833     */
22834    function baseOrderBy(collection, iteratees, orders) {
22835      if (iteratees.length) {
22836        iteratees = arrayMap(iteratees, function(iteratee) {
22837          if (isArray(iteratee)) {
22838            return function(value) {
22839              return baseGet(value, iteratee.length === 1 ? iteratee[0] : iteratee);
22840            }
22841          }
22842          return iteratee;
22843        });
22844      } else {
22845        iteratees = [identity];
22846      }
22847
22848      var index = -1;
22849      iteratees = arrayMap(iteratees, baseUnary(getIteratee()));
22850
22851      var result = baseMap(collection, function(value, key, collection) {
22852        var criteria = arrayMap(iteratees, function(iteratee) {
22853          return iteratee(value);
22854        });
22855        return { 'criteria': criteria, 'index': ++index, 'value': value };
22856      });
22857
22858      return baseSortBy(result, function(object, other) {
22859        return compareMultiple(object, other, orders);
22860      });
22861    }
22862
22863    /**
22864     * The base implementation of `_.pick` without support for individual
22865     * property identifiers.
22866     *
22867     * @private
22868     * @param {Object} object The source object.
22869     * @param {string[]} paths The property paths to pick.
22870     * @returns {Object} Returns the new object.
22871     */
22872    function basePick(object, paths) {
22873      return basePickBy(object, paths, function(value, path) {
22874        return hasIn(object, path);
22875      });
22876    }
22877
22878    /**
22879     * The base implementation of  `_.pickBy` without support for iteratee shorthands.
22880     *
22881     * @private
22882     * @param {Object} object The source object.
22883     * @param {string[]} paths The property paths to pick.
22884     * @param {Function} predicate The function invoked per property.
22885     * @returns {Object} Returns the new object.
22886     */
22887    function basePickBy(object, paths, predicate) {
22888      var index = -1,
22889          length = paths.length,
22890          result = {};
22891
22892      while (++index < length) {
22893        var path = paths[index],
22894            value = baseGet(object, path);
22895
22896        if (predicate(value, path)) {
22897          baseSet(result, castPath(path, object), value);
22898        }
22899      }
22900      return result;
22901    }
22902
22903    /**
22904     * A specialized version of `baseProperty` which supports deep paths.
22905     *
22906     * @private
22907     * @param {Array|string} path The path of the property to get.
22908     * @returns {Function} Returns the new accessor function.
22909     */
22910    function basePropertyDeep(path) {
22911      return function(object) {
22912        return baseGet(object, path);
22913      };
22914    }
22915
22916    /**
22917     * The base implementation of `_.pullAllBy` without support for iteratee
22918     * shorthands.
22919     *
22920     * @private
22921     * @param {Array} array The array to modify.
22922     * @param {Array} values The values to remove.
22923     * @param {Function} [iteratee] The iteratee invoked per element.
22924     * @param {Function} [comparator] The comparator invoked per element.
22925     * @returns {Array} Returns `array`.
22926     */
22927    function basePullAll(array, values, iteratee, comparator) {
22928      var indexOf = comparator ? baseIndexOfWith : baseIndexOf,
22929          index = -1,
22930          length = values.length,
22931          seen = array;
22932
22933      if (array === values) {
22934        values = copyArray(values);
22935      }
22936      if (iteratee) {
22937        seen = arrayMap(array, baseUnary(iteratee));
22938      }
22939      while (++index < length) {
22940        var fromIndex = 0,
22941            value = values[index],
22942            computed = iteratee ? iteratee(value) : value;
22943
22944        while ((fromIndex = indexOf(seen, computed, fromIndex, comparator)) > -1) {
22945          if (seen !== array) {
22946            splice.call(seen, fromIndex, 1);
22947          }
22948          splice.call(array, fromIndex, 1);
22949        }
22950      }
22951      return array;
22952    }
22953
22954    /**
22955     * The base implementation of `_.pullAt` without support for individual
22956     * indexes or capturing the removed elements.
22957     *
22958     * @private
22959     * @param {Array} array The array to modify.
22960     * @param {number[]} indexes The indexes of elements to remove.
22961     * @returns {Array} Returns `array`.
22962     */
22963    function basePullAt(array, indexes) {
22964      var length = array ? indexes.length : 0,
22965          lastIndex = length - 1;
22966
22967      while (length--) {
22968        var index = indexes[length];
22969        if (length == lastIndex || index !== previous) {
22970          var previous = index;
22971          if (isIndex(index)) {
22972            splice.call(array, index, 1);
22973          } else {
22974            baseUnset(array, index);
22975          }
22976        }
22977      }
22978      return array;
22979    }
22980
22981    /**
22982     * The base implementation of `_.random` without support for returning
22983     * floating-point numbers.
22984     *
22985     * @private
22986     * @param {number} lower The lower bound.
22987     * @param {number} upper The upper bound.
22988     * @returns {number} Returns the random number.
22989     */
22990    function baseRandom(lower, upper) {
22991      return lower + nativeFloor(nativeRandom() * (upper - lower + 1));
22992    }
22993
22994    /**
22995     * The base implementation of `_.range` and `_.rangeRight` which doesn't
22996     * coerce arguments.
22997     *
22998     * @private
22999     * @param {number} start The start of the range.
23000     * @param {number} end The end of the range.
23001     * @param {number} step The value to increment or decrement by.
23002     * @param {boolean} [fromRight] Specify iterating from right to left.
23003     * @returns {Array} Returns the range of numbers.
23004     */
23005    function baseRange(start, end, step, fromRight) {
23006      var index = -1,
23007          length = nativeMax(nativeCeil((end - start) / (step || 1)), 0),
23008          result = Array(length);
23009
23010      while (length--) {
23011        result[fromRight ? length : ++index] = start;
23012        start += step;
23013      }
23014      return result;
23015    }
23016
23017    /**
23018     * The base implementation of `_.repeat` which doesn't coerce arguments.
23019     *
23020     * @private
23021     * @param {string} string The string to repeat.
23022     * @param {number} n The number of times to repeat the string.
23023     * @returns {string} Returns the repeated string.
23024     */
23025    function baseRepeat(string, n) {
23026      var result = '';
23027      if (!string || n < 1 || n > MAX_SAFE_INTEGER) {
23028        return result;
23029      }
23030      // Leverage the exponentiation by squaring algorithm for a faster repeat.
23031      // See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details.
23032      do {
23033        if (n % 2) {
23034          result += string;
23035        }
23036        n = nativeFloor(n / 2);
23037        if (n) {
23038          string += string;
23039        }
23040      } while (n);
23041
23042      return result;
23043    }
23044
23045    /**
23046     * The base implementation of `_.rest` which doesn't validate or coerce arguments.
23047     *
23048     * @private
23049     * @param {Function} func The function to apply a rest parameter to.
23050     * @param {number} [start=func.length-1] The start position of the rest parameter.
23051     * @returns {Function} Returns the new function.
23052     */
23053    function baseRest(func, start) {
23054      return setToString(overRest(func, start, identity), func + '');
23055    }
23056
23057    /**
23058     * The base implementation of `_.sample`.
23059     *
23060     * @private
23061     * @param {Array|Object} collection The collection to sample.
23062     * @returns {*} Returns the random element.
23063     */
23064    function baseSample(collection) {
23065      return arraySample(values(collection));
23066    }
23067
23068    /**
23069     * The base implementation of `_.sampleSize` without param guards.
23070     *
23071     * @private
23072     * @param {Array|Object} collection The collection to sample.
23073     * @param {number} n The number of elements to sample.
23074     * @returns {Array} Returns the random elements.
23075     */
23076    function baseSampleSize(collection, n) {
23077      var array = values(collection);
23078      return shuffleSelf(array, baseClamp(n, 0, array.length));
23079    }
23080
23081    /**
23082     * The base implementation of `_.set`.
23083     *
23084     * @private
23085     * @param {Object} object The object to modify.
23086     * @param {Array|string} path The path of the property to set.
23087     * @param {*} value The value to set.
23088     * @param {Function} [customizer] The function to customize path creation.
23089     * @returns {Object} Returns `object`.
23090     */
23091    function baseSet(object, path, value, customizer) {
23092      if (!isObject(object)) {
23093        return object;
23094      }
23095      path = castPath(path, object);
23096
23097      var index = -1,
23098          length = path.length,
23099          lastIndex = length - 1,
23100          nested = object;
23101
23102      while (nested != null && ++index < length) {
23103        var key = toKey(path[index]),
23104            newValue = value;
23105
23106        if (key === '__proto__' || key === 'constructor' || key === 'prototype') {
23107          return object;
23108        }
23109
23110        if (index != lastIndex) {
23111          var objValue = nested[key];
23112          newValue = customizer ? customizer(objValue, key, nested) : undefined;
23113          if (newValue === undefined) {
23114            newValue = isObject(objValue)
23115              ? objValue
23116              : (isIndex(path[index + 1]) ? [] : {});
23117          }
23118        }
23119        assignValue(nested, key, newValue);
23120        nested = nested[key];
23121      }
23122      return object;
23123    }
23124
23125    /**
23126     * The base implementation of `setData` without support for hot loop shorting.
23127     *
23128     * @private
23129     * @param {Function} func The function to associate metadata with.
23130     * @param {*} data The metadata.
23131     * @returns {Function} Returns `func`.
23132     */
23133    var baseSetData = !metaMap ? identity : function(func, data) {
23134      metaMap.set(func, data);
23135      return func;
23136    };
23137
23138    /**
23139     * The base implementation of `setToString` without support for hot loop shorting.
23140     *
23141     * @private
23142     * @param {Function} func The function to modify.
23143     * @param {Function} string The `toString` result.
23144     * @returns {Function} Returns `func`.
23145     */
23146    var baseSetToString = !defineProperty ? identity : function(func, string) {
23147      return defineProperty(func, 'toString', {
23148        'configurable': true,
23149        'enumerable': false,
23150        'value': constant(string),
23151        'writable': true
23152      });
23153    };
23154
23155    /**
23156     * The base implementation of `_.shuffle`.
23157     *
23158     * @private
23159     * @param {Array|Object} collection The collection to shuffle.
23160     * @returns {Array} Returns the new shuffled array.
23161     */
23162    function baseShuffle(collection) {
23163      return shuffleSelf(values(collection));
23164    }
23165
23166    /**
23167     * The base implementation of `_.slice` without an iteratee call guard.
23168     *
23169     * @private
23170     * @param {Array} array The array to slice.
23171     * @param {number} [start=0] The start position.
23172     * @param {number} [end=array.length] The end position.
23173     * @returns {Array} Returns the slice of `array`.
23174     */
23175    function baseSlice(array, start, end) {
23176      var index = -1,
23177          length = array.length;
23178
23179      if (start < 0) {
23180        start = -start > length ? 0 : (length + start);
23181      }
23182      end = end > length ? length : end;
23183      if (end < 0) {
23184        end += length;
23185      }
23186      length = start > end ? 0 : ((end - start) >>> 0);
23187      start >>>= 0;
23188
23189      var result = Array(length);
23190      while (++index < length) {
23191        result[index] = array[index + start];
23192      }
23193      return result;
23194    }
23195
23196    /**
23197     * The base implementation of `_.some` without support for iteratee shorthands.
23198     *
23199     * @private
23200     * @param {Array|Object} collection The collection to iterate over.
23201     * @param {Function} predicate The function invoked per iteration.
23202     * @returns {boolean} Returns `true` if any element passes the predicate check,
23203     *  else `false`.
23204     */
23205    function baseSome(collection, predicate) {
23206      var result;
23207
23208      baseEach(collection, function(value, index, collection) {
23209        result = predicate(value, index, collection);
23210        return !result;
23211      });
23212      return !!result;
23213    }
23214
23215    /**
23216     * The base implementation of `_.sortedIndex` and `_.sortedLastIndex` which
23217     * performs a binary search of `array` to determine the index at which `value`
23218     * should be inserted into `array` in order to maintain its sort order.
23219     *
23220     * @private
23221     * @param {Array} array The sorted array to inspect.
23222     * @param {*} value The value to evaluate.
23223     * @param {boolean} [retHighest] Specify returning the highest qualified index.
23224     * @returns {number} Returns the index at which `value` should be inserted
23225     *  into `array`.
23226     */
23227    function baseSortedIndex(array, value, retHighest) {
23228      var low = 0,
23229          high = array == null ? low : array.length;
23230
23231      if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) {
23232        while (low < high) {
23233          var mid = (low + high) >>> 1,
23234              computed = array[mid];
23235
23236          if (computed !== null && !isSymbol(computed) &&
23237              (retHighest ? (computed <= value) : (computed < value))) {
23238            low = mid + 1;
23239          } else {
23240            high = mid;
23241          }
23242        }
23243        return high;
23244      }
23245      return baseSortedIndexBy(array, value, identity, retHighest);
23246    }
23247
23248    /**
23249     * The base implementation of `_.sortedIndexBy` and `_.sortedLastIndexBy`
23250     * which invokes `iteratee` for `value` and each element of `array` to compute
23251     * their sort ranking. The iteratee is invoked with one argument; (value).
23252     *
23253     * @private
23254     * @param {Array} array The sorted array to inspect.
23255     * @param {*} value The value to evaluate.
23256     * @param {Function} iteratee The iteratee invoked per element.
23257     * @param {boolean} [retHighest] Specify returning the highest qualified index.
23258     * @returns {number} Returns the index at which `value` should be inserted
23259     *  into `array`.
23260     */
23261    function baseSortedIndexBy(array, value, iteratee, retHighest) {
23262      var low = 0,
23263          high = array == null ? 0 : array.length;
23264      if (high === 0) {
23265        return 0;
23266      }
23267
23268      value = iteratee(value);
23269      var valIsNaN = value !== value,
23270          valIsNull = value === null,
23271          valIsSymbol = isSymbol(value),
23272          valIsUndefined = value === undefined;
23273
23274      while (low < high) {
23275        var mid = nativeFloor((low + high) / 2),
23276            computed = iteratee(array[mid]),
23277            othIsDefined = computed !== undefined,
23278            othIsNull = computed === null,
23279            othIsReflexive = computed === computed,
23280            othIsSymbol = isSymbol(computed);
23281
23282        if (valIsNaN) {
23283          var setLow = retHighest || othIsReflexive;
23284        } else if (valIsUndefined) {
23285          setLow = othIsReflexive && (retHighest || othIsDefined);
23286        } else if (valIsNull) {
23287          setLow = othIsReflexive && othIsDefined && (retHighest || !othIsNull);
23288        } else if (valIsSymbol) {
23289          setLow = othIsReflexive && othIsDefined && !othIsNull && (retHighest || !othIsSymbol);
23290        } else if (othIsNull || othIsSymbol) {
23291          setLow = false;
23292        } else {
23293          setLow = retHighest ? (computed <= value) : (computed < value);
23294        }
23295        if (setLow) {
23296          low = mid + 1;
23297        } else {
23298          high = mid;
23299        }
23300      }
23301      return nativeMin(high, MAX_ARRAY_INDEX);
23302    }
23303
23304    /**
23305     * The base implementation of `_.sortedUniq` and `_.sortedUniqBy` without
23306     * support for iteratee shorthands.
23307     *
23308     * @private
23309     * @param {Array} array The array to inspect.
23310     * @param {Function} [iteratee] The iteratee invoked per element.
23311     * @returns {Array} Returns the new duplicate free array.
23312     */
23313    function baseSortedUniq(array, iteratee) {
23314      var index = -1,
23315          length = array.length,
23316          resIndex = 0,
23317          result = [];
23318
23319      while (++index < length) {
23320        var value = array[index],
23321            computed = iteratee ? iteratee(value) : value;
23322
23323        if (!index || !eq(computed, seen)) {
23324          var seen = computed;
23325          result[resIndex++] = value === 0 ? 0 : value;
23326        }
23327      }
23328      return result;
23329    }
23330
23331    /**
23332     * The base implementation of `_.toNumber` which doesn't ensure correct
23333     * conversions of binary, hexadecimal, or octal string values.
23334     *
23335     * @private
23336     * @param {*} value The value to process.
23337     * @returns {number} Returns the number.
23338     */
23339    function baseToNumber(value) {
23340      if (typeof value == 'number') {
23341        return value;
23342      }
23343      if (isSymbol(value)) {
23344        return NAN;
23345      }
23346      return +value;
23347    }
23348
23349    /**
23350     * The base implementation of `_.toString` which doesn't convert nullish
23351     * values to empty strings.
23352     *
23353     * @private
23354     * @param {*} value The value to process.
23355     * @returns {string} Returns the string.
23356     */
23357    function baseToString(value) {
23358      // Exit early for strings to avoid a performance hit in some environments.
23359      if (typeof value == 'string') {
23360        return value;
23361      }
23362      if (isArray(value)) {
23363        // Recursively convert values (susceptible to call stack limits).
23364        return arrayMap(value, baseToString) + '';
23365      }
23366      if (isSymbol(value)) {
23367        return symbolToString ? symbolToString.call(value) : '';
23368      }
23369      var result = (value + '');
23370      return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;
23371    }
23372
23373    /**
23374     * The base implementation of `_.uniqBy` without support for iteratee shorthands.
23375     *
23376     * @private
23377     * @param {Array} array The array to inspect.
23378     * @param {Function} [iteratee] The iteratee invoked per element.
23379     * @param {Function} [comparator] The comparator invoked per element.
23380     * @returns {Array} Returns the new duplicate free array.
23381     */
23382    function baseUniq(array, iteratee, comparator) {
23383      var index = -1,
23384          includes = arrayIncludes,
23385          length = array.length,
23386          isCommon = true,
23387          result = [],
23388          seen = result;
23389
23390      if (comparator) {
23391        isCommon = false;
23392        includes = arrayIncludesWith;
23393      }
23394      else if (length >= LARGE_ARRAY_SIZE) {
23395        var set = iteratee ? null : createSet(array);
23396        if (set) {
23397          return setToArray(set);
23398        }
23399        isCommon = false;
23400        includes = cacheHas;
23401        seen = new SetCache;
23402      }
23403      else {
23404        seen = iteratee ? [] : result;
23405      }
23406      outer:
23407      while (++index < length) {
23408        var value = array[index],
23409            computed = iteratee ? iteratee(value) : value;
23410
23411        value = (comparator || value !== 0) ? value : 0;
23412        if (isCommon && computed === computed) {
23413          var seenIndex = seen.length;
23414          while (seenIndex--) {
23415            if (seen[seenIndex] === computed) {
23416              continue outer;
23417            }
23418          }
23419          if (iteratee) {
23420            seen.push(computed);
23421          }
23422          result.push(value);
23423        }
23424        else if (!includes(seen, computed, comparator)) {
23425          if (seen !== result) {
23426            seen.push(computed);
23427          }
23428          result.push(value);
23429        }
23430      }
23431      return result;
23432    }
23433
23434    /**
23435     * The base implementation of `_.unset`.
23436     *
23437     * @private
23438     * @param {Object} object The object to modify.
23439     * @param {Array|string} path The property path to unset.
23440     * @returns {boolean} Returns `true` if the property is deleted, else `false`.
23441     */
23442    function baseUnset(object, path) {
23443      path = castPath(path, object);
23444      object = parent(object, path);
23445      return object == null || delete object[toKey(last(path))];
23446    }
23447
23448    /**
23449     * The base implementation of `_.update`.
23450     *
23451     * @private
23452     * @param {Object} object The object to modify.
23453     * @param {Array|string} path The path of the property to update.
23454     * @param {Function} updater The function to produce the updated value.
23455     * @param {Function} [customizer] The function to customize path creation.
23456     * @returns {Object} Returns `object`.
23457     */
23458    function baseUpdate(object, path, updater, customizer) {
23459      return baseSet(object, path, updater(baseGet(object, path)), customizer);
23460    }
23461
23462    /**
23463     * The base implementation of methods like `_.dropWhile` and `_.takeWhile`
23464     * without support for iteratee shorthands.
23465     *
23466     * @private
23467     * @param {Array} array The array to query.
23468     * @param {Function} predicate The function invoked per iteration.
23469     * @param {boolean} [isDrop] Specify dropping elements instead of taking them.
23470     * @param {boolean} [fromRight] Specify iterating from right to left.
23471     * @returns {Array} Returns the slice of `array`.
23472     */
23473    function baseWhile(array, predicate, isDrop, fromRight) {
23474      var length = array.length,
23475          index = fromRight ? length : -1;
23476
23477      while ((fromRight ? index-- : ++index < length) &&
23478        predicate(array[index], index, array)) {}
23479
23480      return isDrop
23481        ? baseSlice(array, (fromRight ? 0 : index), (fromRight ? index + 1 : length))
23482        : baseSlice(array, (fromRight ? index + 1 : 0), (fromRight ? length : index));
23483    }
23484
23485    /**
23486     * The base implementation of `wrapperValue` which returns the result of
23487     * performing a sequence of actions on the unwrapped `value`, where each
23488     * successive action is supplied the return value of the previous.
23489     *
23490     * @private
23491     * @param {*} value The unwrapped value.
23492     * @param {Array} actions Actions to perform to resolve the unwrapped value.
23493     * @returns {*} Returns the resolved value.
23494     */
23495    function baseWrapperValue(value, actions) {
23496      var result = value;
23497      if (result instanceof LazyWrapper) {
23498        result = result.value();
23499      }
23500      return arrayReduce(actions, function(result, action) {
23501        return action.func.apply(action.thisArg, arrayPush([result], action.args));
23502      }, result);
23503    }
23504
23505    /**
23506     * The base implementation of methods like `_.xor`, without support for
23507     * iteratee shorthands, that accepts an array of arrays to inspect.
23508     *
23509     * @private
23510     * @param {Array} arrays The arrays to inspect.
23511     * @param {Function} [iteratee] The iteratee invoked per element.
23512     * @param {Function} [comparator] The comparator invoked per element.
23513     * @returns {Array} Returns the new array of values.
23514     */
23515    function baseXor(arrays, iteratee, comparator) {
23516      var length = arrays.length;
23517      if (length < 2) {
23518        return length ? baseUniq(arrays[0]) : [];
23519      }
23520      var index = -1,
23521          result = Array(length);
23522
23523      while (++index < length) {
23524        var array = arrays[index],
23525            othIndex = -1;
23526
23527        while (++othIndex < length) {
23528          if (othIndex != index) {
23529            result[index] = baseDifference(result[index] || array, arrays[othIndex], iteratee, comparator);
23530          }
23531        }
23532      }
23533      return baseUniq(baseFlatten(result, 1), iteratee, comparator);
23534    }
23535
23536    /**
23537     * This base implementation of `_.zipObject` which assigns values using `assignFunc`.
23538     *
23539     * @private
23540     * @param {Array} props The property identifiers.
23541     * @param {Array} values The property values.
23542     * @param {Function} assignFunc The function to assign values.
23543     * @returns {Object} Returns the new object.
23544     */
23545    function baseZipObject(props, values, assignFunc) {
23546      var index = -1,
23547          length = props.length,
23548          valsLength = values.length,
23549          result = {};
23550
23551      while (++index < length) {
23552        var value = index < valsLength ? values[index] : undefined;
23553        assignFunc(result, props[index], value);
23554      }
23555      return result;
23556    }
23557
23558    /**
23559     * Casts `value` to an empty array if it's not an array like object.
23560     *
23561     * @private
23562     * @param {*} value The value to inspect.
23563     * @returns {Array|Object} Returns the cast array-like object.
23564     */
23565    function castArrayLikeObject(value) {
23566      return isArrayLikeObject(value) ? value : [];
23567    }
23568
23569    /**
23570     * Casts `value` to `identity` if it's not a function.
23571     *
23572     * @private
23573     * @param {*} value The value to inspect.
23574     * @returns {Function} Returns cast function.
23575     */
23576    function castFunction(value) {
23577      return typeof value == 'function' ? value : identity;
23578    }
23579
23580    /**
23581     * Casts `value` to a path array if it's not one.
23582     *
23583     * @private
23584     * @param {*} value The value to inspect.
23585     * @param {Object} [object] The object to query keys on.
23586     * @returns {Array} Returns the cast property path array.
23587     */
23588    function castPath(value, object) {
23589      if (isArray(value)) {
23590        return value;
23591      }
23592      return isKey(value, object) ? [value] : stringToPath(toString(value));
23593    }
23594
23595    /**
23596     * A `baseRest` alias which can be replaced with `identity` by module
23597     * replacement plugins.
23598     *
23599     * @private
23600     * @type {Function}
23601     * @param {Function} func The function to apply a rest parameter to.
23602     * @returns {Function} Returns the new function.
23603     */
23604    var castRest = baseRest;
23605
23606    /**
23607     * Casts `array` to a slice if it's needed.
23608     *
23609     * @private
23610     * @param {Array} array The array to inspect.
23611     * @param {number} start The start position.
23612     * @param {number} [end=array.length] The end position.
23613     * @returns {Array} Returns the cast slice.
23614     */
23615    function castSlice(array, start, end) {
23616      var length = array.length;
23617      end = end === undefined ? length : end;
23618      return (!start && end >= length) ? array : baseSlice(array, start, end);
23619    }
23620
23621    /**
23622     * A simple wrapper around the global [`clearTimeout`](https://mdn.io/clearTimeout).
23623     *
23624     * @private
23625     * @param {number|Object} id The timer id or timeout object of the timer to clear.
23626     */
23627    var clearTimeout = ctxClearTimeout || function(id) {
23628      return root.clearTimeout(id);
23629    };
23630
23631    /**
23632     * Creates a clone of  `buffer`.
23633     *
23634     * @private
23635     * @param {Buffer} buffer The buffer to clone.
23636     * @param {boolean} [isDeep] Specify a deep clone.
23637     * @returns {Buffer} Returns the cloned buffer.
23638     */
23639    function cloneBuffer(buffer, isDeep) {
23640      if (isDeep) {
23641        return buffer.slice();
23642      }
23643      var length = buffer.length,
23644          result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);
23645
23646      buffer.copy(result);
23647      return result;
23648    }
23649
23650    /**
23651     * Creates a clone of `arrayBuffer`.
23652     *
23653     * @private
23654     * @param {ArrayBuffer} arrayBuffer The array buffer to clone.
23655     * @returns {ArrayBuffer} Returns the cloned array buffer.
23656     */
23657    function cloneArrayBuffer(arrayBuffer) {
23658      var result = new arrayBuffer.constructor(arrayBuffer.byteLength);
23659      new Uint8Array(result).set(new Uint8Array(arrayBuffer));
23660      return result;
23661    }
23662
23663    /**
23664     * Creates a clone of `dataView`.
23665     *
23666     * @private
23667     * @param {Object} dataView The data view to clone.
23668     * @param {boolean} [isDeep] Specify a deep clone.
23669     * @returns {Object} Returns the cloned data view.
23670     */
23671    function cloneDataView(dataView, isDeep) {
23672      var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;
23673      return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);
23674    }
23675
23676    /**
23677     * Creates a clone of `regexp`.
23678     *
23679     * @private
23680     * @param {Object} regexp The regexp to clone.
23681     * @returns {Object} Returns the cloned regexp.
23682     */
23683    function cloneRegExp(regexp) {
23684      var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));
23685      result.lastIndex = regexp.lastIndex;
23686      return result;
23687    }
23688
23689    /**
23690     * Creates a clone of the `symbol` object.
23691     *
23692     * @private
23693     * @param {Object} symbol The symbol object to clone.
23694     * @returns {Object} Returns the cloned symbol object.
23695     */
23696    function cloneSymbol(symbol) {
23697      return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};
23698    }
23699
23700    /**
23701     * Creates a clone of `typedArray`.
23702     *
23703     * @private
23704     * @param {Object} typedArray The typed array to clone.
23705     * @param {boolean} [isDeep] Specify a deep clone.
23706     * @returns {Object} Returns the cloned typed array.
23707     */
23708    function cloneTypedArray(typedArray, isDeep) {
23709      var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;
23710      return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);
23711    }
23712
23713    /**
23714     * Compares values to sort them in ascending order.
23715     *
23716     * @private
23717     * @param {*} value The value to compare.
23718     * @param {*} other The other value to compare.
23719     * @returns {number} Returns the sort order indicator for `value`.
23720     */
23721    function compareAscending(value, other) {
23722      if (value !== other) {
23723        var valIsDefined = value !== undefined,
23724            valIsNull = value === null,
23725            valIsReflexive = value === value,
23726            valIsSymbol = isSymbol(value);
23727
23728        var othIsDefined = other !== undefined,
23729            othIsNull = other === null,
23730            othIsReflexive = other === other,
23731            othIsSymbol = isSymbol(other);
23732
23733        if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) ||
23734            (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) ||
23735            (valIsNull && othIsDefined && othIsReflexive) ||
23736            (!valIsDefined && othIsReflexive) ||
23737            !valIsReflexive) {
23738          return 1;
23739        }
23740        if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) ||
23741            (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) ||
23742            (othIsNull && valIsDefined && valIsReflexive) ||
23743            (!othIsDefined && valIsReflexive) ||
23744            !othIsReflexive) {
23745          return -1;
23746        }
23747      }
23748      return 0;
23749    }
23750
23751    /**
23752     * Used by `_.orderBy` to compare multiple properties of a value to another
23753     * and stable sort them.
23754     *
23755     * If `orders` is unspecified, all values are sorted in ascending order. Otherwise,
23756     * specify an order of "desc" for descending or "asc" for ascending sort order
23757     * of corresponding values.
23758     *
23759     * @private
23760     * @param {Object} object The object to compare.
23761     * @param {Object} other The other object to compare.
23762     * @param {boolean[]|string[]} orders The order to sort by for each property.
23763     * @returns {number} Returns the sort order indicator for `object`.
23764     */
23765    function compareMultiple(object, other, orders) {
23766      var index = -1,
23767          objCriteria = object.criteria,
23768          othCriteria = other.criteria,
23769          length = objCriteria.length,
23770          ordersLength = orders.length;
23771
23772      while (++index < length) {
23773        var result = compareAscending(objCriteria[index], othCriteria[index]);
23774        if (result) {
23775          if (index >= ordersLength) {
23776            return result;
23777          }
23778          var order = orders[index];
23779          return result * (order == 'desc' ? -1 : 1);
23780        }
23781      }
23782      // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications
23783      // that causes it, under certain circumstances, to provide the same value for
23784      // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247
23785      // for more details.
23786      //
23787      // This also ensures a stable sort in V8 and other engines.
23788      // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details.
23789      return object.index - other.index;
23790    }
23791
23792    /**
23793     * Creates an array that is the composition of partially applied arguments,
23794     * placeholders, and provided arguments into a single array of arguments.
23795     *
23796     * @private
23797     * @param {Array} args The provided arguments.
23798     * @param {Array} partials The arguments to prepend to those provided.
23799     * @param {Array} holders The `partials` placeholder indexes.
23800     * @params {boolean} [isCurried] Specify composing for a curried function.
23801     * @returns {Array} Returns the new array of composed arguments.
23802     */
23803    function composeArgs(args, partials, holders, isCurried) {
23804      var argsIndex = -1,
23805          argsLength = args.length,
23806          holdersLength = holders.length,
23807          leftIndex = -1,
23808          leftLength = partials.length,
23809          rangeLength = nativeMax(argsLength - holdersLength, 0),
23810          result = Array(leftLength + rangeLength),
23811          isUncurried = !isCurried;
23812
23813      while (++leftIndex < leftLength) {
23814        result[leftIndex] = partials[leftIndex];
23815      }
23816      while (++argsIndex < holdersLength) {
23817        if (isUncurried || argsIndex < argsLength) {
23818          result[holders[argsIndex]] = args[argsIndex];
23819        }
23820      }
23821      while (rangeLength--) {
23822        result[leftIndex++] = args[argsIndex++];
23823      }
23824      return result;
23825    }
23826
23827    /**
23828     * This function is like `composeArgs` except that the arguments composition
23829     * is tailored for `_.partialRight`.
23830     *
23831     * @private
23832     * @param {Array} args The provided arguments.
23833     * @param {Array} partials The arguments to append to those provided.
23834     * @param {Array} holders The `partials` placeholder indexes.
23835     * @params {boolean} [isCurried] Specify composing for a curried function.
23836     * @returns {Array} Returns the new array of composed arguments.
23837     */
23838    function composeArgsRight(args, partials, holders, isCurried) {
23839      var argsIndex = -1,
23840          argsLength = args.length,
23841          holdersIndex = -1,
23842          holdersLength = holders.length,
23843          rightIndex = -1,
23844          rightLength = partials.length,
23845          rangeLength = nativeMax(argsLength - holdersLength, 0),
23846          result = Array(rangeLength + rightLength),
23847          isUncurried = !isCurried;
23848
23849      while (++argsIndex < rangeLength) {
23850        result[argsIndex] = args[argsIndex];
23851      }
23852      var offset = argsIndex;
23853      while (++rightIndex < rightLength) {
23854        result[offset + rightIndex] = partials[rightIndex];
23855      }
23856      while (++holdersIndex < holdersLength) {
23857        if (isUncurried || argsIndex < argsLength) {
23858          result[offset + holders[holdersIndex]] = args[argsIndex++];
23859        }
23860      }
23861      return result;
23862    }
23863
23864    /**
23865     * Copies the values of `source` to `array`.
23866     *
23867     * @private
23868     * @param {Array} source The array to copy values from.
23869     * @param {Array} [array=[]] The array to copy values to.
23870     * @returns {Array} Returns `array`.
23871     */
23872    function copyArray(source, array) {
23873      var index = -1,
23874          length = source.length;
23875
23876      array || (array = Array(length));
23877      while (++index < length) {
23878        array[index] = source[index];
23879      }
23880      return array;
23881    }
23882
23883    /**
23884     * Copies properties of `source` to `object`.
23885     *
23886     * @private
23887     * @param {Object} source The object to copy properties from.
23888     * @param {Array} props The property identifiers to copy.
23889     * @param {Object} [object={}] The object to copy properties to.
23890     * @param {Function} [customizer] The function to customize copied values.
23891     * @returns {Object} Returns `object`.
23892     */
23893    function copyObject(source, props, object, customizer) {
23894      var isNew = !object;
23895      object || (object = {});
23896
23897      var index = -1,
23898          length = props.length;
23899
23900      while (++index < length) {
23901        var key = props[index];
23902
23903        var newValue = customizer
23904          ? customizer(object[key], source[key], key, object, source)
23905          : undefined;
23906
23907        if (newValue === undefined) {
23908          newValue = source[key];
23909        }
23910        if (isNew) {
23911          baseAssignValue(object, key, newValue);
23912        } else {
23913          assignValue(object, key, newValue);
23914        }
23915      }
23916      return object;
23917    }
23918
23919    /**
23920     * Copies own symbols of `source` to `object`.
23921     *
23922     * @private
23923     * @param {Object} source The object to copy symbols from.
23924     * @param {Object} [object={}] The object to copy symbols to.
23925     * @returns {Object} Returns `object`.
23926     */
23927    function copySymbols(source, object) {
23928      return copyObject(source, getSymbols(source), object);
23929    }
23930
23931    /**
23932     * Copies own and inherited symbols of `source` to `object`.
23933     *
23934     * @private
23935     * @param {Object} source The object to copy symbols from.
23936     * @param {Object} [object={}] The object to copy symbols to.
23937     * @returns {Object} Returns `object`.
23938     */
23939    function copySymbolsIn(source, object) {
23940      return copyObject(source, getSymbolsIn(source), object);
23941    }
23942
23943    /**
23944     * Creates a function like `_.groupBy`.
23945     *
23946     * @private
23947     * @param {Function} setter The function to set accumulator values.
23948     * @param {Function} [initializer] The accumulator object initializer.
23949     * @returns {Function} Returns the new aggregator function.
23950     */
23951    function createAggregator(setter, initializer) {
23952      return function(collection, iteratee) {
23953        var func = isArray(collection) ? arrayAggregator : baseAggregator,
23954            accumulator = initializer ? initializer() : {};
23955
23956        return func(collection, setter, getIteratee(iteratee, 2), accumulator);
23957      };
23958    }
23959
23960    /**
23961     * Creates a function like `_.assign`.
23962     *
23963     * @private
23964     * @param {Function} assigner The function to assign values.
23965     * @returns {Function} Returns the new assigner function.
23966     */
23967    function createAssigner(assigner) {
23968      return baseRest(function(object, sources) {
23969        var index = -1,
23970            length = sources.length,
23971            customizer = length > 1 ? sources[length - 1] : undefined,
23972            guard = length > 2 ? sources[2] : undefined;
23973
23974        customizer = (assigner.length > 3 && typeof customizer == 'function')
23975          ? (length--, customizer)
23976          : undefined;
23977
23978        if (guard && isIterateeCall(sources[0], sources[1], guard)) {
23979          customizer = length < 3 ? undefined : customizer;
23980          length = 1;
23981        }
23982        object = Object(object);
23983        while (++index < length) {
23984          var source = sources[index];
23985          if (source) {
23986            assigner(object, source, index, customizer);
23987          }
23988        }
23989        return object;
23990      });
23991    }
23992
23993    /**
23994     * Creates a `baseEach` or `baseEachRight` function.
23995     *
23996     * @private
23997     * @param {Function} eachFunc The function to iterate over a collection.
23998     * @param {boolean} [fromRight] Specify iterating from right to left.
23999     * @returns {Function} Returns the new base function.
24000     */
24001    function createBaseEach(eachFunc, fromRight) {
24002      return function(collection, iteratee) {
24003        if (collection == null) {
24004          return collection;
24005        }
24006        if (!isArrayLike(collection)) {
24007          return eachFunc(collection, iteratee);
24008        }
24009        var length = collection.length,
24010            index = fromRight ? length : -1,
24011            iterable = Object(collection);
24012
24013        while ((fromRight ? index-- : ++index < length)) {
24014          if (iteratee(iterable[index], index, iterable) === false) {
24015            break;
24016          }
24017        }
24018        return collection;
24019      };
24020    }
24021
24022    /**
24023     * Creates a base function for methods like `_.forIn` and `_.forOwn`.
24024     *
24025     * @private
24026     * @param {boolean} [fromRight] Specify iterating from right to left.
24027     * @returns {Function} Returns the new base function.
24028     */
24029    function createBaseFor(fromRight) {
24030      return function(object, iteratee, keysFunc) {
24031        var index = -1,
24032            iterable = Object(object),
24033            props = keysFunc(object),
24034            length = props.length;
24035
24036        while (length--) {
24037          var key = props[fromRight ? length : ++index];
24038          if (iteratee(iterable[key], key, iterable) === false) {
24039            break;
24040          }
24041        }
24042        return object;
24043      };
24044    }
24045
24046    /**
24047     * Creates a function that wraps `func` to invoke it with the optional `this`
24048     * binding of `thisArg`.
24049     *
24050     * @private
24051     * @param {Function} func The function to wrap.
24052     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.
24053     * @param {*} [thisArg] The `this` binding of `func`.
24054     * @returns {Function} Returns the new wrapped function.
24055     */
24056    function createBind(func, bitmask, thisArg) {
24057      var isBind = bitmask & WRAP_BIND_FLAG,
24058          Ctor = createCtor(func);
24059
24060      function wrapper() {
24061        var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;
24062        return fn.apply(isBind ? thisArg : this, arguments);
24063      }
24064      return wrapper;
24065    }
24066
24067    /**
24068     * Creates a function like `_.lowerFirst`.
24069     *
24070     * @private
24071     * @param {string} methodName The name of the `String` case method to use.
24072     * @returns {Function} Returns the new case function.
24073     */
24074    function createCaseFirst(methodName) {
24075      return function(string) {
24076        string = toString(string);
24077
24078        var strSymbols = hasUnicode(string)
24079          ? stringToArray(string)
24080          : undefined;
24081
24082        var chr = strSymbols
24083          ? strSymbols[0]
24084          : string.charAt(0);
24085
24086        var trailing = strSymbols
24087          ? castSlice(strSymbols, 1).join('')
24088          : string.slice(1);
24089
24090        return chr[methodName]() + trailing;
24091      };
24092    }
24093
24094    /**
24095     * Creates a function like `_.camelCase`.
24096     *
24097     * @private
24098     * @param {Function} callback The function to combine each word.
24099     * @returns {Function} Returns the new compounder function.
24100     */
24101    function createCompounder(callback) {
24102      return function(string) {
24103        return arrayReduce(words(deburr(string).replace(reApos, '')), callback, '');
24104      };
24105    }
24106
24107    /**
24108     * Creates a function that produces an instance of `Ctor` regardless of
24109     * whether it was invoked as part of a `new` expression or by `call` or `apply`.
24110     *
24111     * @private
24112     * @param {Function} Ctor The constructor to wrap.
24113     * @returns {Function} Returns the new wrapped function.
24114     */
24115    function createCtor(Ctor) {
24116      return function() {
24117        // Use a `switch` statement to work with class constructors. See
24118        // http://ecma-international.org/ecma-262/7.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist
24119        // for more details.
24120        var args = arguments;
24121        switch (args.length) {
24122          case 0: return new Ctor;
24123          case 1: return new Ctor(args[0]);
24124          case 2: return new Ctor(args[0], args[1]);
24125          case 3: return new Ctor(args[0], args[1], args[2]);
24126          case 4: return new Ctor(args[0], args[1], args[2], args[3]);
24127          case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]);
24128          case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]);
24129          case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]);
24130        }
24131        var thisBinding = baseCreate(Ctor.prototype),
24132            result = Ctor.apply(thisBinding, args);
24133
24134        // Mimic the constructor's `return` behavior.
24135        // See https://es5.github.io/#x13.2.2 for more details.
24136        return isObject(result) ? result : thisBinding;
24137      };
24138    }
24139
24140    /**
24141     * Creates a function that wraps `func` to enable currying.
24142     *
24143     * @private
24144     * @param {Function} func The function to wrap.
24145     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.
24146     * @param {number} arity The arity of `func`.
24147     * @returns {Function} Returns the new wrapped function.
24148     */
24149    function createCurry(func, bitmask, arity) {
24150      var Ctor = createCtor(func);
24151
24152      function wrapper() {
24153        var length = arguments.length,
24154            args = Array(length),
24155            index = length,
24156            placeholder = getHolder(wrapper);
24157
24158        while (index--) {
24159          args[index] = arguments[index];
24160        }
24161        var holders = (length < 3 && args[0] !== placeholder && args[length - 1] !== placeholder)
24162          ? []
24163          : replaceHolders(args, placeholder);
24164
24165        length -= holders.length;
24166        if (length < arity) {
24167          return createRecurry(
24168            func, bitmask, createHybrid, wrapper.placeholder, undefined,
24169            args, holders, undefined, undefined, arity - length);
24170        }
24171        var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;
24172        return apply(fn, this, args);
24173      }
24174      return wrapper;
24175    }
24176
24177    /**
24178     * Creates a `_.find` or `_.findLast` function.
24179     *
24180     * @private
24181     * @param {Function} findIndexFunc The function to find the collection index.
24182     * @returns {Function} Returns the new find function.
24183     */
24184    function createFind(findIndexFunc) {
24185      return function(collection, predicate, fromIndex) {
24186        var iterable = Object(collection);
24187        if (!isArrayLike(collection)) {
24188          var iteratee = getIteratee(predicate, 3);
24189          collection = keys(collection);
24190          predicate = function(key) { return iteratee(iterable[key], key, iterable); };
24191        }
24192        var index = findIndexFunc(collection, predicate, fromIndex);
24193        return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined;
24194      };
24195    }
24196
24197    /**
24198     * Creates a `_.flow` or `_.flowRight` function.
24199     *
24200     * @private
24201     * @param {boolean} [fromRight] Specify iterating from right to left.
24202     * @returns {Function} Returns the new flow function.
24203     */
24204    function createFlow(fromRight) {
24205      return flatRest(function(funcs) {
24206        var length = funcs.length,
24207            index = length,
24208            prereq = LodashWrapper.prototype.thru;
24209
24210        if (fromRight) {
24211          funcs.reverse();
24212        }
24213        while (index--) {
24214          var func = funcs[index];
24215          if (typeof func != 'function') {
24216            throw new TypeError(FUNC_ERROR_TEXT);
24217          }
24218          if (prereq && !wrapper && getFuncName(func) == 'wrapper') {
24219            var wrapper = new LodashWrapper([], true);
24220          }
24221        }
24222        index = wrapper ? index : length;
24223        while (++index < length) {
24224          func = funcs[index];
24225
24226          var funcName = getFuncName(func),
24227              data = funcName == 'wrapper' ? getData(func) : undefined;
24228
24229          if (data && isLaziable(data[0]) &&
24230                data[1] == (WRAP_ARY_FLAG | WRAP_CURRY_FLAG | WRAP_PARTIAL_FLAG | WRAP_REARG_FLAG) &&
24231                !data[4].length && data[9] == 1
24232              ) {
24233            wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]);
24234          } else {
24235            wrapper = (func.length == 1 && isLaziable(func))
24236              ? wrapper[funcName]()
24237              : wrapper.thru(func);
24238          }
24239        }
24240        return function() {
24241          var args = arguments,
24242              value = args[0];
24243
24244          if (wrapper && args.length == 1 && isArray(value)) {
24245            return wrapper.plant(value).value();
24246          }
24247          var index = 0,
24248              result = length ? funcs[index].apply(this, args) : value;
24249
24250          while (++index < length) {
24251            result = funcs[index].call(this, result);
24252          }
24253          return result;
24254        };
24255      });
24256    }
24257
24258    /**
24259     * Creates a function that wraps `func` to invoke it with optional `this`
24260     * binding of `thisArg`, partial application, and currying.
24261     *
24262     * @private
24263     * @param {Function|string} func The function or method name to wrap.
24264     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.
24265     * @param {*} [thisArg] The `this` binding of `func`.
24266     * @param {Array} [partials] The arguments to prepend to those provided to
24267     *  the new function.
24268     * @param {Array} [holders] The `partials` placeholder indexes.
24269     * @param {Array} [partialsRight] The arguments to append to those provided
24270     *  to the new function.
24271     * @param {Array} [holdersRight] The `partialsRight` placeholder indexes.
24272     * @param {Array} [argPos] The argument positions of the new function.
24273     * @param {number} [ary] The arity cap of `func`.
24274     * @param {number} [arity] The arity of `func`.
24275     * @returns {Function} Returns the new wrapped function.
24276     */
24277    function createHybrid(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) {
24278      var isAry = bitmask & WRAP_ARY_FLAG,
24279          isBind = bitmask & WRAP_BIND_FLAG,
24280          isBindKey = bitmask & WRAP_BIND_KEY_FLAG,
24281          isCurried = bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG),
24282          isFlip = bitmask & WRAP_FLIP_FLAG,
24283          Ctor = isBindKey ? undefined : createCtor(func);
24284
24285      function wrapper() {
24286        var length = arguments.length,
24287            args = Array(length),
24288            index = length;
24289
24290        while (index--) {
24291          args[index] = arguments[index];
24292        }
24293        if (isCurried) {
24294          var placeholder = getHolder(wrapper),
24295              holdersCount = countHolders(args, placeholder);
24296        }
24297        if (partials) {
24298          args = composeArgs(args, partials, holders, isCurried);
24299        }
24300        if (partialsRight) {
24301          args = composeArgsRight(args, partialsRight, holdersRight, isCurried);
24302        }
24303        length -= holdersCount;
24304        if (isCurried && length < arity) {
24305          var newHolders = replaceHolders(args, placeholder);
24306          return createRecurry(
24307            func, bitmask, createHybrid, wrapper.placeholder, thisArg,
24308            args, newHolders, argPos, ary, arity - length
24309          );
24310        }
24311        var thisBinding = isBind ? thisArg : this,
24312            fn = isBindKey ? thisBinding[func] : func;
24313
24314        length = args.length;
24315        if (argPos) {
24316          args = reorder(args, argPos);
24317        } else if (isFlip && length > 1) {
24318          args.reverse();
24319        }
24320        if (isAry && ary < length) {
24321          args.length = ary;
24322        }
24323        if (this && this !== root && this instanceof wrapper) {
24324          fn = Ctor || createCtor(fn);
24325        }
24326        return fn.apply(thisBinding, args);
24327      }
24328      return wrapper;
24329    }
24330
24331    /**
24332     * Creates a function like `_.invertBy`.
24333     *
24334     * @private
24335     * @param {Function} setter The function to set accumulator values.
24336     * @param {Function} toIteratee The function to resolve iteratees.
24337     * @returns {Function} Returns the new inverter function.
24338     */
24339    function createInverter(setter, toIteratee) {
24340      return function(object, iteratee) {
24341        return baseInverter(object, setter, toIteratee(iteratee), {});
24342      };
24343    }
24344
24345    /**
24346     * Creates a function that performs a mathematical operation on two values.
24347     *
24348     * @private
24349     * @param {Function} operator The function to perform the operation.
24350     * @param {number} [defaultValue] The value used for `undefined` arguments.
24351     * @returns {Function} Returns the new mathematical operation function.
24352     */
24353    function createMathOperation(operator, defaultValue) {
24354      return function(value, other) {
24355        var result;
24356        if (value === undefined && other === undefined) {
24357          return defaultValue;
24358        }
24359        if (value !== undefined) {
24360          result = value;
24361        }
24362        if (other !== undefined) {
24363          if (result === undefined) {
24364            return other;
24365          }
24366          if (typeof value == 'string' || typeof other == 'string') {
24367            value = baseToString(value);
24368            other = baseToString(other);
24369          } else {
24370            value = baseToNumber(value);
24371            other = baseToNumber(other);
24372          }
24373          result = operator(value, other);
24374        }
24375        return result;
24376      };
24377    }
24378
24379    /**
24380     * Creates a function like `_.over`.
24381     *
24382     * @private
24383     * @param {Function} arrayFunc The function to iterate over iteratees.
24384     * @returns {Function} Returns the new over function.
24385     */
24386    function createOver(arrayFunc) {
24387      return flatRest(function(iteratees) {
24388        iteratees = arrayMap(iteratees, baseUnary(getIteratee()));
24389        return baseRest(function(args) {
24390          var thisArg = this;
24391          return arrayFunc(iteratees, function(iteratee) {
24392            return apply(iteratee, thisArg, args);
24393          });
24394        });
24395      });
24396    }
24397
24398    /**
24399     * Creates the padding for `string` based on `length`. The `chars` string
24400     * is truncated if the number of characters exceeds `length`.
24401     *
24402     * @private
24403     * @param {number} length The padding length.
24404     * @param {string} [chars=' '] The string used as padding.
24405     * @returns {string} Returns the padding for `string`.
24406     */
24407    function createPadding(length, chars) {
24408      chars = chars === undefined ? ' ' : baseToString(chars);
24409
24410      var charsLength = chars.length;
24411      if (charsLength < 2) {
24412        return charsLength ? baseRepeat(chars, length) : chars;
24413      }
24414      var result = baseRepeat(chars, nativeCeil(length / stringSize(chars)));
24415      return hasUnicode(chars)
24416        ? castSlice(stringToArray(result), 0, length).join('')
24417        : result.slice(0, length);
24418    }
24419
24420    /**
24421     * Creates a function that wraps `func` to invoke it with the `this` binding
24422     * of `thisArg` and `partials` prepended to the arguments it receives.
24423     *
24424     * @private
24425     * @param {Function} func The function to wrap.
24426     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.
24427     * @param {*} thisArg The `this` binding of `func`.
24428     * @param {Array} partials The arguments to prepend to those provided to
24429     *  the new function.
24430     * @returns {Function} Returns the new wrapped function.
24431     */
24432    function createPartial(func, bitmask, thisArg, partials) {
24433      var isBind = bitmask & WRAP_BIND_FLAG,
24434          Ctor = createCtor(func);
24435
24436      function wrapper() {
24437        var argsIndex = -1,
24438            argsLength = arguments.length,
24439            leftIndex = -1,
24440            leftLength = partials.length,
24441            args = Array(leftLength + argsLength),
24442            fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;
24443
24444        while (++leftIndex < leftLength) {
24445          args[leftIndex] = partials[leftIndex];
24446        }
24447        while (argsLength--) {
24448          args[leftIndex++] = arguments[++argsIndex];
24449        }
24450        return apply(fn, isBind ? thisArg : this, args);
24451      }
24452      return wrapper;
24453    }
24454
24455    /**
24456     * Creates a `_.range` or `_.rangeRight` function.
24457     *
24458     * @private
24459     * @param {boolean} [fromRight] Specify iterating from right to left.
24460     * @returns {Function} Returns the new range function.
24461     */
24462    function createRange(fromRight) {
24463      return function(start, end, step) {
24464        if (step && typeof step != 'number' && isIterateeCall(start, end, step)) {
24465          end = step = undefined;
24466        }
24467        // Ensure the sign of `-0` is preserved.
24468        start = toFinite(start);
24469        if (end === undefined) {
24470          end = start;
24471          start = 0;
24472        } else {
24473          end = toFinite(end);
24474        }
24475        step = step === undefined ? (start < end ? 1 : -1) : toFinite(step);
24476        return baseRange(start, end, step, fromRight);
24477      };
24478    }
24479
24480    /**
24481     * Creates a function that performs a relational operation on two values.
24482     *
24483     * @private
24484     * @param {Function} operator The function to perform the operation.
24485     * @returns {Function} Returns the new relational operation function.
24486     */
24487    function createRelationalOperation(operator) {
24488      return function(value, other) {
24489        if (!(typeof value == 'string' && typeof other == 'string')) {
24490          value = toNumber(value);
24491          other = toNumber(other);
24492        }
24493        return operator(value, other);
24494      };
24495    }
24496
24497    /**
24498     * Creates a function that wraps `func` to continue currying.
24499     *
24500     * @private
24501     * @param {Function} func The function to wrap.
24502     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.
24503     * @param {Function} wrapFunc The function to create the `func` wrapper.
24504     * @param {*} placeholder The placeholder value.
24505     * @param {*} [thisArg] The `this` binding of `func`.
24506     * @param {Array} [partials] The arguments to prepend to those provided to
24507     *  the new function.
24508     * @param {Array} [holders] The `partials` placeholder indexes.
24509     * @param {Array} [argPos] The argument positions of the new function.
24510     * @param {number} [ary] The arity cap of `func`.
24511     * @param {number} [arity] The arity of `func`.
24512     * @returns {Function} Returns the new wrapped function.
24513     */
24514    function createRecurry(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary, arity) {
24515      var isCurry = bitmask & WRAP_CURRY_FLAG,
24516          newHolders = isCurry ? holders : undefined,
24517          newHoldersRight = isCurry ? undefined : holders,
24518          newPartials = isCurry ? partials : undefined,
24519          newPartialsRight = isCurry ? undefined : partials;
24520
24521      bitmask |= (isCurry ? WRAP_PARTIAL_FLAG : WRAP_PARTIAL_RIGHT_FLAG);
24522      bitmask &= ~(isCurry ? WRAP_PARTIAL_RIGHT_FLAG : WRAP_PARTIAL_FLAG);
24523
24524      if (!(bitmask & WRAP_CURRY_BOUND_FLAG)) {
24525        bitmask &= ~(WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG);
24526      }
24527      var newData = [
24528        func, bitmask, thisArg, newPartials, newHolders, newPartialsRight,
24529        newHoldersRight, argPos, ary, arity
24530      ];
24531
24532      var result = wrapFunc.apply(undefined, newData);
24533      if (isLaziable(func)) {
24534        setData(result, newData);
24535      }
24536      result.placeholder = placeholder;
24537      return setWrapToString(result, func, bitmask);
24538    }
24539
24540    /**
24541     * Creates a function like `_.round`.
24542     *
24543     * @private
24544     * @param {string} methodName The name of the `Math` method to use when rounding.
24545     * @returns {Function} Returns the new round function.
24546     */
24547    function createRound(methodName) {
24548      var func = Math[methodName];
24549      return function(number, precision) {
24550        number = toNumber(number);
24551        precision = precision == null ? 0 : nativeMin(toInteger(precision), 292);
24552        if (precision && nativeIsFinite(number)) {
24553          // Shift with exponential notation to avoid floating-point issues.
24554          // See [MDN](https://mdn.io/round#Examples) for more details.
24555          var pair = (toString(number) + 'e').split('e'),
24556              value = func(pair[0] + 'e' + (+pair[1] + precision));
24557
24558          pair = (toString(value) + 'e').split('e');
24559          return +(pair[0] + 'e' + (+pair[1] - precision));
24560        }
24561        return func(number);
24562      };
24563    }
24564
24565    /**
24566     * Creates a set object of `values`.
24567     *
24568     * @private
24569     * @param {Array} values The values to add to the set.
24570     * @returns {Object} Returns the new set.
24571     */
24572    var createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) {
24573      return new Set(values);
24574    };
24575
24576    /**
24577     * Creates a `_.toPairs` or `_.toPairsIn` function.
24578     *
24579     * @private
24580     * @param {Function} keysFunc The function to get the keys of a given object.
24581     * @returns {Function} Returns the new pairs function.
24582     */
24583    function createToPairs(keysFunc) {
24584      return function(object) {
24585        var tag = getTag(object);
24586        if (tag == mapTag) {
24587          return mapToArray(object);
24588        }
24589        if (tag == setTag) {
24590          return setToPairs(object);
24591        }
24592        return baseToPairs(object, keysFunc(object));
24593      };
24594    }
24595
24596    /**
24597     * Creates a function that either curries or invokes `func` with optional
24598     * `this` binding and partially applied arguments.
24599     *
24600     * @private
24601     * @param {Function|string} func The function or method name to wrap.
24602     * @param {number} bitmask The bitmask flags.
24603     *    1 - `_.bind`
24604     *    2 - `_.bindKey`
24605     *    4 - `_.curry` or `_.curryRight` of a bound function
24606     *    8 - `_.curry`
24607     *   16 - `_.curryRight`
24608     *   32 - `_.partial`
24609     *   64 - `_.partialRight`
24610     *  128 - `_.rearg`
24611     *  256 - `_.ary`
24612     *  512 - `_.flip`
24613     * @param {*} [thisArg] The `this` binding of `func`.
24614     * @param {Array} [partials] The arguments to be partially applied.
24615     * @param {Array} [holders] The `partials` placeholder indexes.
24616     * @param {Array} [argPos] The argument positions of the new function.
24617     * @param {number} [ary] The arity cap of `func`.
24618     * @param {number} [arity] The arity of `func`.
24619     * @returns {Function} Returns the new wrapped function.
24620     */
24621    function createWrap(func, bitmask, thisArg, partials, holders, argPos, ary, arity) {
24622      var isBindKey = bitmask & WRAP_BIND_KEY_FLAG;
24623      if (!isBindKey && typeof func != 'function') {
24624        throw new TypeError(FUNC_ERROR_TEXT);
24625      }
24626      var length = partials ? partials.length : 0;
24627      if (!length) {
24628        bitmask &= ~(WRAP_PARTIAL_FLAG | WRAP_PARTIAL_RIGHT_FLAG);
24629        partials = holders = undefined;
24630      }
24631      ary = ary === undefined ? ary : nativeMax(toInteger(ary), 0);
24632      arity = arity === undefined ? arity : toInteger(arity);
24633      length -= holders ? holders.length : 0;
24634
24635      if (bitmask & WRAP_PARTIAL_RIGHT_FLAG) {
24636        var partialsRight = partials,
24637            holdersRight = holders;
24638
24639        partials = holders = undefined;
24640      }
24641      var data = isBindKey ? undefined : getData(func);
24642
24643      var newData = [
24644        func, bitmask, thisArg, partials, holders, partialsRight, holdersRight,
24645        argPos, ary, arity
24646      ];
24647
24648      if (data) {
24649        mergeData(newData, data);
24650      }
24651      func = newData[0];
24652      bitmask = newData[1];
24653      thisArg = newData[2];
24654      partials = newData[3];
24655      holders = newData[4];
24656      arity = newData[9] = newData[9] === undefined
24657        ? (isBindKey ? 0 : func.length)
24658        : nativeMax(newData[9] - length, 0);
24659
24660      if (!arity && bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG)) {
24661        bitmask &= ~(WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG);
24662      }
24663      if (!bitmask || bitmask == WRAP_BIND_FLAG) {
24664        var result = createBind(func, bitmask, thisArg);
24665      } else if (bitmask == WRAP_CURRY_FLAG || bitmask == WRAP_CURRY_RIGHT_FLAG) {
24666        result = createCurry(func, bitmask, arity);
24667      } else if ((bitmask == WRAP_PARTIAL_FLAG || bitmask == (WRAP_BIND_FLAG | WRAP_PARTIAL_FLAG)) && !holders.length) {
24668        result = createPartial(func, bitmask, thisArg, partials);
24669      } else {
24670        result = createHybrid.apply(undefined, newData);
24671      }
24672      var setter = data ? baseSetData : setData;
24673      return setWrapToString(setter(result, newData), func, bitmask);
24674    }
24675
24676    /**
24677     * Used by `_.defaults` to customize its `_.assignIn` use to assign properties
24678     * of source objects to the destination object for all destination properties
24679     * that resolve to `undefined`.
24680     *
24681     * @private
24682     * @param {*} objValue The destination value.
24683     * @param {*} srcValue The source value.
24684     * @param {string} key The key of the property to assign.
24685     * @param {Object} object The parent object of `objValue`.
24686     * @returns {*} Returns the value to assign.
24687     */
24688    function customDefaultsAssignIn(objValue, srcValue, key, object) {
24689      if (objValue === undefined ||
24690          (eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key))) {
24691        return srcValue;
24692      }
24693      return objValue;
24694    }
24695
24696    /**
24697     * Used by `_.defaultsDeep` to customize its `_.merge` use to merge source
24698     * objects into destination objects that are passed thru.
24699     *
24700     * @private
24701     * @param {*} objValue The destination value.
24702     * @param {*} srcValue The source value.
24703     * @param {string} key The key of the property to merge.
24704     * @param {Object} object The parent object of `objValue`.
24705     * @param {Object} source The parent object of `srcValue`.
24706     * @param {Object} [stack] Tracks traversed source values and their merged
24707     *  counterparts.
24708     * @returns {*} Returns the value to assign.
24709     */
24710    function customDefaultsMerge(objValue, srcValue, key, object, source, stack) {
24711      if (isObject(objValue) && isObject(srcValue)) {
24712        // Recursively merge objects and arrays (susceptible to call stack limits).
24713        stack.set(srcValue, objValue);
24714        baseMerge(objValue, srcValue, undefined, customDefaultsMerge, stack);
24715        stack['delete'](srcValue);
24716      }
24717      return objValue;
24718    }
24719
24720    /**
24721     * Used by `_.omit` to customize its `_.cloneDeep` use to only clone plain
24722     * objects.
24723     *
24724     * @private
24725     * @param {*} value The value to inspect.
24726     * @param {string} key The key of the property to inspect.
24727     * @returns {*} Returns the uncloned value or `undefined` to defer cloning to `_.cloneDeep`.
24728     */
24729    function customOmitClone(value) {
24730      return isPlainObject(value) ? undefined : value;
24731    }
24732
24733    /**
24734     * A specialized version of `baseIsEqualDeep` for arrays with support for
24735     * partial deep comparisons.
24736     *
24737     * @private
24738     * @param {Array} array The array to compare.
24739     * @param {Array} other The other array to compare.
24740     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.
24741     * @param {Function} customizer The function to customize comparisons.
24742     * @param {Function} equalFunc The function to determine equivalents of values.
24743     * @param {Object} stack Tracks traversed `array` and `other` objects.
24744     * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.
24745     */
24746    function equalArrays(array, other, bitmask, customizer, equalFunc, stack) {
24747      var isPartial = bitmask & COMPARE_PARTIAL_FLAG,
24748          arrLength = array.length,
24749          othLength = other.length;
24750
24751      if (arrLength != othLength && !(isPartial && othLength > arrLength)) {
24752        return false;
24753      }
24754      // Check that cyclic values are equal.
24755      var arrStacked = stack.get(array);
24756      var othStacked = stack.get(other);
24757      if (arrStacked && othStacked) {
24758        return arrStacked == other && othStacked == array;
24759      }
24760      var index = -1,
24761          result = true,
24762          seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;
24763
24764      stack.set(array, other);
24765      stack.set(other, array);
24766
24767      // Ignore non-index properties.
24768      while (++index < arrLength) {
24769        var arrValue = array[index],
24770            othValue = other[index];
24771
24772        if (customizer) {
24773          var compared = isPartial
24774            ? customizer(othValue, arrValue, index, other, array, stack)
24775            : customizer(arrValue, othValue, index, array, other, stack);
24776        }
24777        if (compared !== undefined) {
24778          if (compared) {
24779            continue;
24780          }
24781          result = false;
24782          break;
24783        }
24784        // Recursively compare arrays (susceptible to call stack limits).
24785        if (seen) {
24786          if (!arraySome(other, function(othValue, othIndex) {
24787                if (!cacheHas(seen, othIndex) &&
24788                    (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {
24789                  return seen.push(othIndex);
24790                }
24791              })) {
24792            result = false;
24793            break;
24794          }
24795        } else if (!(
24796              arrValue === othValue ||
24797                equalFunc(arrValue, othValue, bitmask, customizer, stack)
24798            )) {
24799          result = false;
24800          break;
24801        }
24802      }
24803      stack['delete'](array);
24804      stack['delete'](other);
24805      return result;
24806    }
24807
24808    /**
24809     * A specialized version of `baseIsEqualDeep` for comparing objects of
24810     * the same `toStringTag`.
24811     *
24812     * **Note:** This function only supports comparing values with tags of
24813     * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.
24814     *
24815     * @private
24816     * @param {Object} object The object to compare.
24817     * @param {Object} other The other object to compare.
24818     * @param {string} tag The `toStringTag` of the objects to compare.
24819     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.
24820     * @param {Function} customizer The function to customize comparisons.
24821     * @param {Function} equalFunc The function to determine equivalents of values.
24822     * @param {Object} stack Tracks traversed `object` and `other` objects.
24823     * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
24824     */
24825    function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {
24826      switch (tag) {
24827        case dataViewTag:
24828          if ((object.byteLength != other.byteLength) ||
24829              (object.byteOffset != other.byteOffset)) {
24830            return false;
24831          }
24832          object = object.buffer;
24833          other = other.buffer;
24834
24835        case arrayBufferTag:
24836          if ((object.byteLength != other.byteLength) ||
24837              !equalFunc(new Uint8Array(object), new Uint8Array(other))) {
24838            return false;
24839          }
24840          return true;
24841
24842        case boolTag:
24843        case dateTag:
24844        case numberTag:
24845          // Coerce booleans to `1` or `0` and dates to milliseconds.
24846          // Invalid dates are coerced to `NaN`.
24847          return eq(+object, +other);
24848
24849        case errorTag:
24850          return object.name == other.name && object.message == other.message;
24851
24852        case regexpTag:
24853        case stringTag:
24854          // Coerce regexes to strings and treat strings, primitives and objects,
24855          // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring
24856          // for more details.
24857          return object == (other + '');
24858
24859        case mapTag:
24860          var convert = mapToArray;
24861
24862        case setTag:
24863          var isPartial = bitmask & COMPARE_PARTIAL_FLAG;
24864          convert || (convert = setToArray);
24865
24866          if (object.size != other.size && !isPartial) {
24867            return false;
24868          }
24869          // Assume cyclic values are equal.
24870          var stacked = stack.get(object);
24871          if (stacked) {
24872            return stacked == other;
24873          }
24874          bitmask |= COMPARE_UNORDERED_FLAG;
24875
24876          // Recursively compare objects (susceptible to call stack limits).
24877          stack.set(object, other);
24878          var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);
24879          stack['delete'](object);
24880          return result;
24881
24882        case symbolTag:
24883          if (symbolValueOf) {
24884            return symbolValueOf.call(object) == symbolValueOf.call(other);
24885          }
24886      }
24887      return false;
24888    }
24889
24890    /**
24891     * A specialized version of `baseIsEqualDeep` for objects with support for
24892     * partial deep comparisons.
24893     *
24894     * @private
24895     * @param {Object} object The object to compare.
24896     * @param {Object} other The other object to compare.
24897     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.
24898     * @param {Function} customizer The function to customize comparisons.
24899     * @param {Function} equalFunc The function to determine equivalents of values.
24900     * @param {Object} stack Tracks traversed `object` and `other` objects.
24901     * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
24902     */
24903    function equalObjects(object, other, bitmask, customizer, equalFunc, stack) {
24904      var isPartial = bitmask & COMPARE_PARTIAL_FLAG,
24905          objProps = getAllKeys(object),
24906          objLength = objProps.length,
24907          othProps = getAllKeys(other),
24908          othLength = othProps.length;
24909
24910      if (objLength != othLength && !isPartial) {
24911        return false;
24912      }
24913      var index = objLength;
24914      while (index--) {
24915        var key = objProps[index];
24916        if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {
24917          return false;
24918        }
24919      }
24920      // Check that cyclic values are equal.
24921      var objStacked = stack.get(object);
24922      var othStacked = stack.get(other);
24923      if (objStacked && othStacked) {
24924        return objStacked == other && othStacked == object;
24925      }
24926      var result = true;
24927      stack.set(object, other);
24928      stack.set(other, object);
24929
24930      var skipCtor = isPartial;
24931      while (++index < objLength) {
24932        key = objProps[index];
24933        var objValue = object[key],
24934            othValue = other[key];
24935
24936        if (customizer) {
24937          var compared = isPartial
24938            ? customizer(othValue, objValue, key, other, object, stack)
24939            : customizer(objValue, othValue, key, object, other, stack);
24940        }
24941        // Recursively compare objects (susceptible to call stack limits).
24942        if (!(compared === undefined
24943              ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))
24944              : compared
24945            )) {
24946          result = false;
24947          break;
24948        }
24949        skipCtor || (skipCtor = key == 'constructor');
24950      }
24951      if (result && !skipCtor) {
24952        var objCtor = object.constructor,
24953            othCtor = other.constructor;
24954
24955        // Non `Object` object instances with different constructors are not equal.
24956        if (objCtor != othCtor &&
24957            ('constructor' in object && 'constructor' in other) &&
24958            !(typeof objCtor == 'function' && objCtor instanceof objCtor &&
24959              typeof othCtor == 'function' && othCtor instanceof othCtor)) {
24960          result = false;
24961        }
24962      }
24963      stack['delete'](object);
24964      stack['delete'](other);
24965      return result;
24966    }
24967
24968    /**
24969     * A specialized version of `baseRest` which flattens the rest array.
24970     *
24971     * @private
24972     * @param {Function} func The function to apply a rest parameter to.
24973     * @returns {Function} Returns the new function.
24974     */
24975    function flatRest(func) {
24976      return setToString(overRest(func, undefined, flatten), func + '');
24977    }
24978
24979    /**
24980     * Creates an array of own enumerable property names and symbols of `object`.
24981     *
24982     * @private
24983     * @param {Object} object The object to query.
24984     * @returns {Array} Returns the array of property names and symbols.
24985     */
24986    function getAllKeys(object) {
24987      return baseGetAllKeys(object, keys, getSymbols);
24988    }
24989
24990    /**
24991     * Creates an array of own and inherited enumerable property names and
24992     * symbols of `object`.
24993     *
24994     * @private
24995     * @param {Object} object The object to query.
24996     * @returns {Array} Returns the array of property names and symbols.
24997     */
24998    function getAllKeysIn(object) {
24999      return baseGetAllKeys(object, keysIn, getSymbolsIn);
25000    }
25001
25002    /**
25003     * Gets metadata for `func`.
25004     *
25005     * @private
25006     * @param {Function} func The function to query.
25007     * @returns {*} Returns the metadata for `func`.
25008     */
25009    var getData = !metaMap ? noop : function(func) {
25010      return metaMap.get(func);
25011    };
25012
25013    /**
25014     * Gets the name of `func`.
25015     *
25016     * @private
25017     * @param {Function} func The function to query.
25018     * @returns {string} Returns the function name.
25019     */
25020    function getFuncName(func) {
25021      var result = (func.name + ''),
25022          array = realNames[result],
25023          length = hasOwnProperty.call(realNames, result) ? array.length : 0;
25024
25025      while (length--) {
25026        var data = array[length],
25027            otherFunc = data.func;
25028        if (otherFunc == null || otherFunc == func) {
25029          return data.name;
25030        }
25031      }
25032      return result;
25033    }
25034
25035    /**
25036     * Gets the argument placeholder value for `func`.
25037     *
25038     * @private
25039     * @param {Function} func The function to inspect.
25040     * @returns {*} Returns the placeholder value.
25041     */
25042    function getHolder(func) {
25043      var object = hasOwnProperty.call(lodash, 'placeholder') ? lodash : func;
25044      return object.placeholder;
25045    }
25046
25047    /**
25048     * Gets the appropriate "iteratee" function. If `_.iteratee` is customized,
25049     * this function returns the custom method, otherwise it returns `baseIteratee`.
25050     * If arguments are provided, the chosen function is invoked with them and
25051     * its result is returned.
25052     *
25053     * @private
25054     * @param {*} [value] The value to convert to an iteratee.
25055     * @param {number} [arity] The arity of the created iteratee.
25056     * @returns {Function} Returns the chosen function or its result.
25057     */
25058    function getIteratee() {
25059      var result = lodash.iteratee || iteratee;
25060      result = result === iteratee ? baseIteratee : result;
25061      return arguments.length ? result(arguments[0], arguments[1]) : result;
25062    }
25063
25064    /**
25065     * Gets the data for `map`.
25066     *
25067     * @private
25068     * @param {Object} map The map to query.
25069     * @param {string} key The reference key.
25070     * @returns {*} Returns the map data.
25071     */
25072    function getMapData(map, key) {
25073      var data = map.__data__;
25074      return isKeyable(key)
25075        ? data[typeof key == 'string' ? 'string' : 'hash']
25076        : data.map;
25077    }
25078
25079    /**
25080     * Gets the property names, values, and compare flags of `object`.
25081     *
25082     * @private
25083     * @param {Object} object The object to query.
25084     * @returns {Array} Returns the match data of `object`.
25085     */
25086    function getMatchData(object) {
25087      var result = keys(object),
25088          length = result.length;
25089
25090      while (length--) {
25091        var key = result[length],
25092            value = object[key];
25093
25094        result[length] = [key, value, isStrictComparable(value)];
25095      }
25096      return result;
25097    }
25098
25099    /**
25100     * Gets the native function at `key` of `object`.
25101     *
25102     * @private
25103     * @param {Object} object The object to query.
25104     * @param {string} key The key of the method to get.
25105     * @returns {*} Returns the function if it's native, else `undefined`.
25106     */
25107    function getNative(object, key) {
25108      var value = getValue(object, key);
25109      return baseIsNative(value) ? value : undefined;
25110    }
25111
25112    /**
25113     * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.
25114     *
25115     * @private
25116     * @param {*} value The value to query.
25117     * @returns {string} Returns the raw `toStringTag`.
25118     */
25119    function getRawTag(value) {
25120      var isOwn = hasOwnProperty.call(value, symToStringTag),
25121          tag = value[symToStringTag];
25122
25123      try {
25124        value[symToStringTag] = undefined;
25125        var unmasked = true;
25126      } catch (e) {}
25127
25128      var result = nativeObjectToString.call(value);
25129      if (unmasked) {
25130        if (isOwn) {
25131          value[symToStringTag] = tag;
25132        } else {
25133          delete value[symToStringTag];
25134        }
25135      }
25136      return result;
25137    }
25138
25139    /**
25140     * Creates an array of the own enumerable symbols of `object`.
25141     *
25142     * @private
25143     * @param {Object} object The object to query.
25144     * @returns {Array} Returns the array of symbols.
25145     */
25146    var getSymbols = !nativeGetSymbols ? stubArray : function(object) {
25147      if (object == null) {
25148        return [];
25149      }
25150      object = Object(object);
25151      return arrayFilter(nativeGetSymbols(object), function(symbol) {
25152        return propertyIsEnumerable.call(object, symbol);
25153      });
25154    };
25155
25156    /**
25157     * Creates an array of the own and inherited enumerable symbols of `object`.
25158     *
25159     * @private
25160     * @param {Object} object The object to query.
25161     * @returns {Array} Returns the array of symbols.
25162     */
25163    var getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {
25164      var result = [];
25165      while (object) {
25166        arrayPush(result, getSymbols(object));
25167        object = getPrototype(object);
25168      }
25169      return result;
25170    };
25171
25172    /**
25173     * Gets the `toStringTag` of `value`.
25174     *
25175     * @private
25176     * @param {*} value The value to query.
25177     * @returns {string} Returns the `toStringTag`.
25178     */
25179    var getTag = baseGetTag;
25180
25181    // Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.
25182    if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||
25183        (Map && getTag(new Map) != mapTag) ||
25184        (Promise && getTag(Promise.resolve()) != promiseTag) ||
25185        (Set && getTag(new Set) != setTag) ||
25186        (WeakMap && getTag(new WeakMap) != weakMapTag)) {
25187      getTag = function(value) {
25188        var result = baseGetTag(value),
25189            Ctor = result == objectTag ? value.constructor : undefined,
25190            ctorString = Ctor ? toSource(Ctor) : '';
25191
25192        if (ctorString) {
25193          switch (ctorString) {
25194            case dataViewCtorString: return dataViewTag;
25195            case mapCtorString: return mapTag;
25196            case promiseCtorString: return promiseTag;
25197            case setCtorString: return setTag;
25198            case weakMapCtorString: return weakMapTag;
25199          }
25200        }
25201        return result;
25202      };
25203    }
25204
25205    /**
25206     * Gets the view, applying any `transforms` to the `start` and `end` positions.
25207     *
25208     * @private
25209     * @param {number} start The start of the view.
25210     * @param {number} end The end of the view.
25211     * @param {Array} transforms The transformations to apply to the view.
25212     * @returns {Object} Returns an object containing the `start` and `end`
25213     *  positions of the view.
25214     */
25215    function getView(start, end, transforms) {
25216      var index = -1,
25217          length = transforms.length;
25218
25219      while (++index < length) {
25220        var data = transforms[index],
25221            size = data.size;
25222
25223        switch (data.type) {
25224          case 'drop':      start += size; break;
25225          case 'dropRight': end -= size; break;
25226          case 'take':      end = nativeMin(end, start + size); break;
25227          case 'takeRight': start = nativeMax(start, end - size); break;
25228        }
25229      }
25230      return { 'start': start, 'end': end };
25231    }
25232
25233    /**
25234     * Extracts wrapper details from the `source` body comment.
25235     *
25236     * @private
25237     * @param {string} source The source to inspect.
25238     * @returns {Array} Returns the wrapper details.
25239     */
25240    function getWrapDetails(source) {
25241      var match = source.match(reWrapDetails);
25242      return match ? match[1].split(reSplitDetails) : [];
25243    }
25244
25245    /**
25246     * Checks if `path` exists on `object`.
25247     *
25248     * @private
25249     * @param {Object} object The object to query.
25250     * @param {Array|string} path The path to check.
25251     * @param {Function} hasFunc The function to check properties.
25252     * @returns {boolean} Returns `true` if `path` exists, else `false`.
25253     */
25254    function hasPath(object, path, hasFunc) {
25255      path = castPath(path, object);
25256
25257      var index = -1,
25258          length = path.length,
25259          result = false;
25260
25261      while (++index < length) {
25262        var key = toKey(path[index]);
25263        if (!(result = object != null && hasFunc(object, key))) {
25264          break;
25265        }
25266        object = object[key];
25267      }
25268      if (result || ++index != length) {
25269        return result;
25270      }
25271      length = object == null ? 0 : object.length;
25272      return !!length && isLength(length) && isIndex(key, length) &&
25273        (isArray(object) || isArguments(object));
25274    }
25275
25276    /**
25277     * Initializes an array clone.
25278     *
25279     * @private
25280     * @param {Array} array The array to clone.
25281     * @returns {Array} Returns the initialized clone.
25282     */
25283    function initCloneArray(array) {
25284      var length = array.length,
25285          result = new array.constructor(length);
25286
25287      // Add properties assigned by `RegExp#exec`.
25288      if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {
25289        result.index = array.index;
25290        result.input = array.input;
25291      }
25292      return result;
25293    }
25294
25295    /**
25296     * Initializes an object clone.
25297     *
25298     * @private
25299     * @param {Object} object The object to clone.
25300     * @returns {Object} Returns the initialized clone.
25301     */
25302    function initCloneObject(object) {
25303      return (typeof object.constructor == 'function' && !isPrototype(object))
25304        ? baseCreate(getPrototype(object))
25305        : {};
25306    }
25307
25308    /**
25309     * Initializes an object clone based on its `toStringTag`.
25310     *
25311     * **Note:** This function only supports cloning values with tags of
25312     * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`.
25313     *
25314     * @private
25315     * @param {Object} object The object to clone.
25316     * @param {string} tag The `toStringTag` of the object to clone.
25317     * @param {boolean} [isDeep] Specify a deep clone.
25318     * @returns {Object} Returns the initialized clone.
25319     */
25320    function initCloneByTag(object, tag, isDeep) {
25321      var Ctor = object.constructor;
25322      switch (tag) {
25323        case arrayBufferTag:
25324          return cloneArrayBuffer(object);
25325
25326        case boolTag:
25327        case dateTag:
25328          return new Ctor(+object);
25329
25330        case dataViewTag:
25331          return cloneDataView(object, isDeep);
25332
25333        case float32Tag: case float64Tag:
25334        case int8Tag: case int16Tag: case int32Tag:
25335        case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:
25336          return cloneTypedArray(object, isDeep);
25337
25338        case mapTag:
25339          return new Ctor;
25340
25341        case numberTag:
25342        case stringTag:
25343          return new Ctor(object);
25344
25345        case regexpTag:
25346          return cloneRegExp(object);
25347
25348        case setTag:
25349          return new Ctor;
25350
25351        case symbolTag:
25352          return cloneSymbol(object);
25353      }
25354    }
25355
25356    /**
25357     * Inserts wrapper `details` in a comment at the top of the `source` body.
25358     *
25359     * @private
25360     * @param {string} source The source to modify.
25361     * @returns {Array} details The details to insert.
25362     * @returns {string} Returns the modified source.
25363     */
25364    function insertWrapDetails(source, details) {
25365      var length = details.length;
25366      if (!length) {
25367        return source;
25368      }
25369      var lastIndex = length - 1;
25370      details[lastIndex] = (length > 1 ? '& ' : '') + details[lastIndex];
25371      details = details.join(length > 2 ? ', ' : ' ');
25372      return source.replace(reWrapComment, '{\n/* [wrapped with ' + details + '] */\n');
25373    }
25374
25375    /**
25376     * Checks if `value` is a flattenable `arguments` object or array.
25377     *
25378     * @private
25379     * @param {*} value The value to check.
25380     * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.
25381     */
25382    function isFlattenable(value) {
25383      return isArray(value) || isArguments(value) ||
25384        !!(spreadableSymbol && value && value[spreadableSymbol]);
25385    }
25386
25387    /**
25388     * Checks if `value` is a valid array-like index.
25389     *
25390     * @private
25391     * @param {*} value The value to check.
25392     * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.
25393     * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.
25394     */
25395    function isIndex(value, length) {
25396      var type = typeof value;
25397      length = length == null ? MAX_SAFE_INTEGER : length;
25398
25399      return !!length &&
25400        (type == 'number' ||
25401          (type != 'symbol' && reIsUint.test(value))) &&
25402            (value > -1 && value % 1 == 0 && value < length);
25403    }
25404
25405    /**
25406     * Checks if the given arguments are from an iteratee call.
25407     *
25408     * @private
25409     * @param {*} value The potential iteratee value argument.
25410     * @param {*} index The potential iteratee index or key argument.
25411     * @param {*} object The potential iteratee object argument.
25412     * @returns {boolean} Returns `true` if the arguments are from an iteratee call,
25413     *  else `false`.
25414     */
25415    function isIterateeCall(value, index, object) {
25416      if (!isObject(object)) {
25417        return false;
25418      }
25419      var type = typeof index;
25420      if (type == 'number'
25421            ? (isArrayLike(object) && isIndex(index, object.length))
25422            : (type == 'string' && index in object)
25423          ) {
25424        return eq(object[index], value);
25425      }
25426      return false;
25427    }
25428
25429    /**
25430     * Checks if `value` is a property name and not a property path.
25431     *
25432     * @private
25433     * @param {*} value The value to check.
25434     * @param {Object} [object] The object to query keys on.
25435     * @returns {boolean} Returns `true` if `value` is a property name, else `false`.
25436     */
25437    function isKey(value, object) {
25438      if (isArray(value)) {
25439        return false;
25440      }
25441      var type = typeof value;
25442      if (type == 'number' || type == 'symbol' || type == 'boolean' ||
25443          value == null || isSymbol(value)) {
25444        return true;
25445      }
25446      return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||
25447        (object != null && value in Object(object));
25448    }
25449
25450    /**
25451     * Checks if `value` is suitable for use as unique object key.
25452     *
25453     * @private
25454     * @param {*} value The value to check.
25455     * @returns {boolean} Returns `true` if `value` is suitable, else `false`.
25456     */
25457    function isKeyable(value) {
25458      var type = typeof value;
25459      return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')
25460        ? (value !== '__proto__')
25461        : (value === null);
25462    }
25463
25464    /**
25465     * Checks if `func` has a lazy counterpart.
25466     *
25467     * @private
25468     * @param {Function} func The function to check.
25469     * @returns {boolean} Returns `true` if `func` has a lazy counterpart,
25470     *  else `false`.
25471     */
25472    function isLaziable(func) {
25473      var funcName = getFuncName(func),
25474          other = lodash[funcName];
25475
25476      if (typeof other != 'function' || !(funcName in LazyWrapper.prototype)) {
25477        return false;
25478      }
25479      if (func === other) {
25480        return true;
25481      }
25482      var data = getData(other);
25483      return !!data && func === data[0];
25484    }
25485
25486    /**
25487     * Checks if `func` has its source masked.
25488     *
25489     * @private
25490     * @param {Function} func The function to check.
25491     * @returns {boolean} Returns `true` if `func` is masked, else `false`.
25492     */
25493    function isMasked(func) {
25494      return !!maskSrcKey && (maskSrcKey in func);
25495    }
25496
25497    /**
25498     * Checks if `func` is capable of being masked.
25499     *
25500     * @private
25501     * @param {*} value The value to check.
25502     * @returns {boolean} Returns `true` if `func` is maskable, else `false`.
25503     */
25504    var isMaskable = coreJsData ? isFunction : stubFalse;
25505
25506    /**
25507     * Checks if `value` is likely a prototype object.
25508     *
25509     * @private
25510     * @param {*} value The value to check.
25511     * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.
25512     */
25513    function isPrototype(value) {
25514      var Ctor = value && value.constructor,
25515          proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;
25516
25517      return value === proto;
25518    }
25519
25520    /**
25521     * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.
25522     *
25523     * @private
25524     * @param {*} value The value to check.
25525     * @returns {boolean} Returns `true` if `value` if suitable for strict
25526     *  equality comparisons, else `false`.
25527     */
25528    function isStrictComparable(value) {
25529      return value === value && !isObject(value);
25530    }
25531
25532    /**
25533     * A specialized version of `matchesProperty` for source values suitable
25534     * for strict equality comparisons, i.e. `===`.
25535     *
25536     * @private
25537     * @param {string} key The key of the property to get.
25538     * @param {*} srcValue The value to match.
25539     * @returns {Function} Returns the new spec function.
25540     */
25541    function matchesStrictComparable(key, srcValue) {
25542      return function(object) {
25543        if (object == null) {
25544          return false;
25545        }
25546        return object[key] === srcValue &&
25547          (srcValue !== undefined || (key in Object(object)));
25548      };
25549    }
25550
25551    /**
25552     * A specialized version of `_.memoize` which clears the memoized function's
25553     * cache when it exceeds `MAX_MEMOIZE_SIZE`.
25554     *
25555     * @private
25556     * @param {Function} func The function to have its output memoized.
25557     * @returns {Function} Returns the new memoized function.
25558     */
25559    function memoizeCapped(func) {
25560      var result = memoize(func, function(key) {
25561        if (cache.size === MAX_MEMOIZE_SIZE) {
25562          cache.clear();
25563        }
25564        return key;
25565      });
25566
25567      var cache = result.cache;
25568      return result;
25569    }
25570
25571    /**
25572     * Merges the function metadata of `source` into `data`.
25573     *
25574     * Merging metadata reduces the number of wrappers used to invoke a function.
25575     * This is possible because methods like `_.bind`, `_.curry`, and `_.partial`
25576     * may be applied regardless of execution order. Methods like `_.ary` and
25577     * `_.rearg` modify function arguments, making the order in which they are
25578     * executed important, preventing the merging of metadata. However, we make
25579     * an exception for a safe combined case where curried functions have `_.ary`
25580     * and or `_.rearg` applied.
25581     *
25582     * @private
25583     * @param {Array} data The destination metadata.
25584     * @param {Array} source The source metadata.
25585     * @returns {Array} Returns `data`.
25586     */
25587    function mergeData(data, source) {
25588      var bitmask = data[1],
25589          srcBitmask = source[1],
25590          newBitmask = bitmask | srcBitmask,
25591          isCommon = newBitmask < (WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG | WRAP_ARY_FLAG);
25592
25593      var isCombo =
25594        ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_CURRY_FLAG)) ||
25595        ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_REARG_FLAG) && (data[7].length <= source[8])) ||
25596        ((srcBitmask == (WRAP_ARY_FLAG | WRAP_REARG_FLAG)) && (source[7].length <= source[8]) && (bitmask == WRAP_CURRY_FLAG));
25597
25598      // Exit early if metadata can't be merged.
25599      if (!(isCommon || isCombo)) {
25600        return data;
25601      }
25602      // Use source `thisArg` if available.
25603      if (srcBitmask & WRAP_BIND_FLAG) {
25604        data[2] = source[2];
25605        // Set when currying a bound function.
25606        newBitmask |= bitmask & WRAP_BIND_FLAG ? 0 : WRAP_CURRY_BOUND_FLAG;
25607      }
25608      // Compose partial arguments.
25609      var value = source[3];
25610      if (value) {
25611        var partials = data[3];
25612        data[3] = partials ? composeArgs(partials, value, source[4]) : value;
25613        data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : source[4];
25614      }
25615      // Compose partial right arguments.
25616      value = source[5];
25617      if (value) {
25618        partials = data[5];
25619        data[5] = partials ? composeArgsRight(partials, value, source[6]) : value;
25620        data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : source[6];
25621      }
25622      // Use source `argPos` if available.
25623      value = source[7];
25624      if (value) {
25625        data[7] = value;
25626      }
25627      // Use source `ary` if it's smaller.
25628      if (srcBitmask & WRAP_ARY_FLAG) {
25629        data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]);
25630      }
25631      // Use source `arity` if one is not provided.
25632      if (data[9] == null) {
25633        data[9] = source[9];
25634      }
25635      // Use source `func` and merge bitmasks.
25636      data[0] = source[0];
25637      data[1] = newBitmask;
25638
25639      return data;
25640    }
25641
25642    /**
25643     * This function is like
25644     * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)
25645     * except that it includes inherited enumerable properties.
25646     *
25647     * @private
25648     * @param {Object} object The object to query.
25649     * @returns {Array} Returns the array of property names.
25650     */
25651    function nativeKeysIn(object) {
25652      var result = [];
25653      if (object != null) {
25654        for (var key in Object(object)) {
25655          result.push(key);
25656        }
25657      }
25658      return result;
25659    }
25660
25661    /**
25662     * Converts `value` to a string using `Object.prototype.toString`.
25663     *
25664     * @private
25665     * @param {*} value The value to convert.
25666     * @returns {string} Returns the converted string.
25667     */
25668    function objectToString(value) {
25669      return nativeObjectToString.call(value);
25670    }
25671
25672    /**
25673     * A specialized version of `baseRest` which transforms the rest array.
25674     *
25675     * @private
25676     * @param {Function} func The function to apply a rest parameter to.
25677     * @param {number} [start=func.length-1] The start position of the rest parameter.
25678     * @param {Function} transform The rest array transform.
25679     * @returns {Function} Returns the new function.
25680     */
25681    function overRest(func, start, transform) {
25682      start = nativeMax(start === undefined ? (func.length - 1) : start, 0);
25683      return function() {
25684        var args = arguments,
25685            index = -1,
25686            length = nativeMax(args.length - start, 0),
25687            array = Array(length);
25688
25689        while (++index < length) {
25690          array[index] = args[start + index];
25691        }
25692        index = -1;
25693        var otherArgs = Array(start + 1);
25694        while (++index < start) {
25695          otherArgs[index] = args[index];
25696        }
25697        otherArgs[start] = transform(array);
25698        return apply(func, this, otherArgs);
25699      };
25700    }
25701
25702    /**
25703     * Gets the parent value at `path` of `object`.
25704     *
25705     * @private
25706     * @param {Object} object The object to query.
25707     * @param {Array} path The path to get the parent value of.
25708     * @returns {*} Returns the parent value.
25709     */
25710    function parent(object, path) {
25711      return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1));
25712    }
25713
25714    /**
25715     * Reorder `array` according to the specified indexes where the element at
25716     * the first index is assigned as the first element, the element at
25717     * the second index is assigned as the second element, and so on.
25718     *
25719     * @private
25720     * @param {Array} array The array to reorder.
25721     * @param {Array} indexes The arranged array indexes.
25722     * @returns {Array} Returns `array`.
25723     */
25724    function reorder(array, indexes) {
25725      var arrLength = array.length,
25726          length = nativeMin(indexes.length, arrLength),
25727          oldArray = copyArray(array);
25728
25729      while (length--) {
25730        var index = indexes[length];
25731        array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined;
25732      }
25733      return array;
25734    }
25735
25736    /**
25737     * Gets the value at `key`, unless `key` is "__proto__" or "constructor".
25738     *
25739     * @private
25740     * @param {Object} object The object to query.
25741     * @param {string} key The key of the property to get.
25742     * @returns {*} Returns the property value.
25743     */
25744    function safeGet(object, key) {
25745      if (key === 'constructor' && typeof object[key] === 'function') {
25746        return;
25747      }
25748
25749      if (key == '__proto__') {
25750        return;
25751      }
25752
25753      return object[key];
25754    }
25755
25756    /**
25757     * Sets metadata for `func`.
25758     *
25759     * **Note:** If this function becomes hot, i.e. is invoked a lot in a short
25760     * period of time, it will trip its breaker and transition to an identity
25761     * function to avoid garbage collection pauses in V8. See
25762     * [V8 issue 2070](https://bugs.chromium.org/p/v8/issues/detail?id=2070)
25763     * for more details.
25764     *
25765     * @private
25766     * @param {Function} func The function to associate metadata with.
25767     * @param {*} data The metadata.
25768     * @returns {Function} Returns `func`.
25769     */
25770    var setData = shortOut(baseSetData);
25771
25772    /**
25773     * A simple wrapper around the global [`setTimeout`](https://mdn.io/setTimeout).
25774     *
25775     * @private
25776     * @param {Function} func The function to delay.
25777     * @param {number} wait The number of milliseconds to delay invocation.
25778     * @returns {number|Object} Returns the timer id or timeout object.
25779     */
25780    var setTimeout = ctxSetTimeout || function(func, wait) {
25781      return root.setTimeout(func, wait);
25782    };
25783
25784    /**
25785     * Sets the `toString` method of `func` to return `string`.
25786     *
25787     * @private
25788     * @param {Function} func The function to modify.
25789     * @param {Function} string The `toString` result.
25790     * @returns {Function} Returns `func`.
25791     */
25792    var setToString = shortOut(baseSetToString);
25793
25794    /**
25795     * Sets the `toString` method of `wrapper` to mimic the source of `reference`
25796     * with wrapper details in a comment at the top of the source body.
25797     *
25798     * @private
25799     * @param {Function} wrapper The function to modify.
25800     * @param {Function} reference The reference function.
25801     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.
25802     * @returns {Function} Returns `wrapper`.
25803     */
25804    function setWrapToString(wrapper, reference, bitmask) {
25805      var source = (reference + '');
25806      return setToString(wrapper, insertWrapDetails(source, updateWrapDetails(getWrapDetails(source), bitmask)));
25807    }
25808
25809    /**
25810     * Creates a function that'll short out and invoke `identity` instead
25811     * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`
25812     * milliseconds.
25813     *
25814     * @private
25815     * @param {Function} func The function to restrict.
25816     * @returns {Function} Returns the new shortable function.
25817     */
25818    function shortOut(func) {
25819      var count = 0,
25820          lastCalled = 0;
25821
25822      return function() {
25823        var stamp = nativeNow(),
25824            remaining = HOT_SPAN - (stamp - lastCalled);
25825
25826        lastCalled = stamp;
25827        if (remaining > 0) {
25828          if (++count >= HOT_COUNT) {
25829            return arguments[0];
25830          }
25831        } else {
25832          count = 0;
25833        }
25834        return func.apply(undefined, arguments);
25835      };
25836    }
25837
25838    /**
25839     * A specialized version of `_.shuffle` which mutates and sets the size of `array`.
25840     *
25841     * @private
25842     * @param {Array} array The array to shuffle.
25843     * @param {number} [size=array.length] The size of `array`.
25844     * @returns {Array} Returns `array`.
25845     */
25846    function shuffleSelf(array, size) {
25847      var index = -1,
25848          length = array.length,
25849          lastIndex = length - 1;
25850
25851      size = size === undefined ? length : size;
25852      while (++index < size) {
25853        var rand = baseRandom(index, lastIndex),
25854            value = array[rand];
25855
25856        array[rand] = array[index];
25857        array[index] = value;
25858      }
25859      array.length = size;
25860      return array;
25861    }
25862
25863    /**
25864     * Converts `string` to a property path array.
25865     *
25866     * @private
25867     * @param {string} string The string to convert.
25868     * @returns {Array} Returns the property path array.
25869     */
25870    var stringToPath = memoizeCapped(function(string) {
25871      var result = [];
25872      if (string.charCodeAt(0) === 46 /* . */) {
25873        result.push('');
25874      }
25875      string.replace(rePropName, function(match, number, quote, subString) {
25876        result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));
25877      });
25878      return result;
25879    });
25880
25881    /**
25882     * Converts `value` to a string key if it's not a string or symbol.
25883     *
25884     * @private
25885     * @param {*} value The value to inspect.
25886     * @returns {string|symbol} Returns the key.
25887     */
25888    function toKey(value) {
25889      if (typeof value == 'string' || isSymbol(value)) {
25890        return value;
25891      }
25892      var result = (value + '');
25893      return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;
25894    }
25895
25896    /**
25897     * Converts `func` to its source code.
25898     *
25899     * @private
25900     * @param {Function} func The function to convert.
25901     * @returns {string} Returns the source code.
25902     */
25903    function toSource(func) {
25904      if (func != null) {
25905        try {
25906          return funcToString.call(func);
25907        } catch (e) {}
25908        try {
25909          return (func + '');
25910        } catch (e) {}
25911      }
25912      return '';
25913    }
25914
25915    /**
25916     * Updates wrapper `details` based on `bitmask` flags.
25917     *
25918     * @private
25919     * @returns {Array} details The details to modify.
25920     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.
25921     * @returns {Array} Returns `details`.
25922     */
25923    function updateWrapDetails(details, bitmask) {
25924      arrayEach(wrapFlags, function(pair) {
25925        var value = '_.' + pair[0];
25926        if ((bitmask & pair[1]) && !arrayIncludes(details, value)) {
25927          details.push(value);
25928        }
25929      });
25930      return details.sort();
25931    }
25932
25933    /**
25934     * Creates a clone of `wrapper`.
25935     *
25936     * @private
25937     * @param {Object} wrapper The wrapper to clone.
25938     * @returns {Object} Returns the cloned wrapper.
25939     */
25940    function wrapperClone(wrapper) {
25941      if (wrapper instanceof LazyWrapper) {
25942        return wrapper.clone();
25943      }
25944      var result = new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__);
25945      result.__actions__ = copyArray(wrapper.__actions__);
25946      result.__index__  = wrapper.__index__;
25947      result.__values__ = wrapper.__values__;
25948      return result;
25949    }
25950
25951    /*------------------------------------------------------------------------*/
25952
25953    /**
25954     * Creates an array of elements split into groups the length of `size`.
25955     * If `array` can't be split evenly, the final chunk will be the remaining
25956     * elements.
25957     *
25958     * @static
25959     * @memberOf _
25960     * @since 3.0.0
25961     * @category Array
25962     * @param {Array} array The array to process.
25963     * @param {number} [size=1] The length of each chunk
25964     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
25965     * @returns {Array} Returns the new array of chunks.
25966     * @example
25967     *
25968     * _.chunk(['a', 'b', 'c', 'd'], 2);
25969     * // => [['a', 'b'], ['c', 'd']]
25970     *
25971     * _.chunk(['a', 'b', 'c', 'd'], 3);
25972     * // => [['a', 'b', 'c'], ['d']]
25973     */
25974    function chunk(array, size, guard) {
25975      if ((guard ? isIterateeCall(array, size, guard) : size === undefined)) {
25976        size = 1;
25977      } else {
25978        size = nativeMax(toInteger(size), 0);
25979      }
25980      var length = array == null ? 0 : array.length;
25981      if (!length || size < 1) {
25982        return [];
25983      }
25984      var index = 0,
25985          resIndex = 0,
25986          result = Array(nativeCeil(length / size));
25987
25988      while (index < length) {
25989        result[resIndex++] = baseSlice(array, index, (index += size));
25990      }
25991      return result;
25992    }
25993
25994    /**
25995     * Creates an array with all falsey values removed. The values `false`, `null`,
25996     * `0`, `""`, `undefined`, and `NaN` are falsey.
25997     *
25998     * @static
25999     * @memberOf _
26000     * @since 0.1.0
26001     * @category Array
26002     * @param {Array} array The array to compact.
26003     * @returns {Array} Returns the new array of filtered values.
26004     * @example
26005     *
26006     * _.compact([0, 1, false, 2, '', 3]);
26007     * // => [1, 2, 3]
26008     */
26009    function compact(array) {
26010      var index = -1,
26011          length = array == null ? 0 : array.length,
26012          resIndex = 0,
26013          result = [];
26014
26015      while (++index < length) {
26016        var value = array[index];
26017        if (value) {
26018          result[resIndex++] = value;
26019        }
26020      }
26021      return result;
26022    }
26023
26024    /**
26025     * Creates a new array concatenating `array` with any additional arrays
26026     * and/or values.
26027     *
26028     * @static
26029     * @memberOf _
26030     * @since 4.0.0
26031     * @category Array
26032     * @param {Array} array The array to concatenate.
26033     * @param {...*} [values] The values to concatenate.
26034     * @returns {Array} Returns the new concatenated array.
26035     * @example
26036     *
26037     * var array = [1];
26038     * var other = _.concat(array, 2, [3], [[4]]);
26039     *
26040     * console.log(other);
26041     * // => [1, 2, 3, [4]]
26042     *
26043     * console.log(array);
26044     * // => [1]
26045     */
26046    function concat() {
26047      var length = arguments.length;
26048      if (!length) {
26049        return [];
26050      }
26051      var args = Array(length - 1),
26052          array = arguments[0],
26053          index = length;
26054
26055      while (index--) {
26056        args[index - 1] = arguments[index];
26057      }
26058      return arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1));
26059    }
26060
26061    /**
26062     * Creates an array of `array` values not included in the other given arrays
26063     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
26064     * for equality comparisons. The order and references of result values are
26065     * determined by the first array.
26066     *
26067     * **Note:** Unlike `_.pullAll`, this method returns a new array.
26068     *
26069     * @static
26070     * @memberOf _
26071     * @since 0.1.0
26072     * @category Array
26073     * @param {Array} array The array to inspect.
26074     * @param {...Array} [values] The values to exclude.
26075     * @returns {Array} Returns the new array of filtered values.
26076     * @see _.without, _.xor
26077     * @example
26078     *
26079     * _.difference([2, 1], [2, 3]);
26080     * // => [1]
26081     */
26082    var difference = baseRest(function(array, values) {
26083      return isArrayLikeObject(array)
26084        ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true))
26085        : [];
26086    });
26087
26088    /**
26089     * This method is like `_.difference` except that it accepts `iteratee` which
26090     * is invoked for each element of `array` and `values` to generate the criterion
26091     * by which they're compared. The order and references of result values are
26092     * determined by the first array. The iteratee is invoked with one argument:
26093     * (value).
26094     *
26095     * **Note:** Unlike `_.pullAllBy`, this method returns a new array.
26096     *
26097     * @static
26098     * @memberOf _
26099     * @since 4.0.0
26100     * @category Array
26101     * @param {Array} array The array to inspect.
26102     * @param {...Array} [values] The values to exclude.
26103     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
26104     * @returns {Array} Returns the new array of filtered values.
26105     * @example
26106     *
26107     * _.differenceBy([2.1, 1.2], [2.3, 3.4], Math.floor);
26108     * // => [1.2]
26109     *
26110     * // The `_.property` iteratee shorthand.
26111     * _.differenceBy([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], 'x');
26112     * // => [{ 'x': 2 }]
26113     */
26114    var differenceBy = baseRest(function(array, values) {
26115      var iteratee = last(values);
26116      if (isArrayLikeObject(iteratee)) {
26117        iteratee = undefined;
26118      }
26119      return isArrayLikeObject(array)
26120        ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), getIteratee(iteratee, 2))
26121        : [];
26122    });
26123
26124    /**
26125     * This method is like `_.difference` except that it accepts `comparator`
26126     * which is invoked to compare elements of `array` to `values`. The order and
26127     * references of result values are determined by the first array. The comparator
26128     * is invoked with two arguments: (arrVal, othVal).
26129     *
26130     * **Note:** Unlike `_.pullAllWith`, this method returns a new array.
26131     *
26132     * @static
26133     * @memberOf _
26134     * @since 4.0.0
26135     * @category Array
26136     * @param {Array} array The array to inspect.
26137     * @param {...Array} [values] The values to exclude.
26138     * @param {Function} [comparator] The comparator invoked per element.
26139     * @returns {Array} Returns the new array of filtered values.
26140     * @example
26141     *
26142     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];
26143     *
26144     * _.differenceWith(objects, [{ 'x': 1, 'y': 2 }], _.isEqual);
26145     * // => [{ 'x': 2, 'y': 1 }]
26146     */
26147    var differenceWith = baseRest(function(array, values) {
26148      var comparator = last(values);
26149      if (isArrayLikeObject(comparator)) {
26150        comparator = undefined;
26151      }
26152      return isArrayLikeObject(array)
26153        ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), undefined, comparator)
26154        : [];
26155    });
26156
26157    /**
26158     * Creates a slice of `array` with `n` elements dropped from the beginning.
26159     *
26160     * @static
26161     * @memberOf _
26162     * @since 0.5.0
26163     * @category Array
26164     * @param {Array} array The array to query.
26165     * @param {number} [n=1] The number of elements to drop.
26166     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
26167     * @returns {Array} Returns the slice of `array`.
26168     * @example
26169     *
26170     * _.drop([1, 2, 3]);
26171     * // => [2, 3]
26172     *
26173     * _.drop([1, 2, 3], 2);
26174     * // => [3]
26175     *
26176     * _.drop([1, 2, 3], 5);
26177     * // => []
26178     *
26179     * _.drop([1, 2, 3], 0);
26180     * // => [1, 2, 3]
26181     */
26182    function drop(array, n, guard) {
26183      var length = array == null ? 0 : array.length;
26184      if (!length) {
26185        return [];
26186      }
26187      n = (guard || n === undefined) ? 1 : toInteger(n);
26188      return baseSlice(array, n < 0 ? 0 : n, length);
26189    }
26190
26191    /**
26192     * Creates a slice of `array` with `n` elements dropped from the end.
26193     *
26194     * @static
26195     * @memberOf _
26196     * @since 3.0.0
26197     * @category Array
26198     * @param {Array} array The array to query.
26199     * @param {number} [n=1] The number of elements to drop.
26200     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
26201     * @returns {Array} Returns the slice of `array`.
26202     * @example
26203     *
26204     * _.dropRight([1, 2, 3]);
26205     * // => [1, 2]
26206     *
26207     * _.dropRight([1, 2, 3], 2);
26208     * // => [1]
26209     *
26210     * _.dropRight([1, 2, 3], 5);
26211     * // => []
26212     *
26213     * _.dropRight([1, 2, 3], 0);
26214     * // => [1, 2, 3]
26215     */
26216    function dropRight(array, n, guard) {
26217      var length = array == null ? 0 : array.length;
26218      if (!length) {
26219        return [];
26220      }
26221      n = (guard || n === undefined) ? 1 : toInteger(n);
26222      n = length - n;
26223      return baseSlice(array, 0, n < 0 ? 0 : n);
26224    }
26225
26226    /**
26227     * Creates a slice of `array` excluding elements dropped from the end.
26228     * Elements are dropped until `predicate` returns falsey. The predicate is
26229     * invoked with three arguments: (value, index, array).
26230     *
26231     * @static
26232     * @memberOf _
26233     * @since 3.0.0
26234     * @category Array
26235     * @param {Array} array The array to query.
26236     * @param {Function} [predicate=_.identity] The function invoked per iteration.
26237     * @returns {Array} Returns the slice of `array`.
26238     * @example
26239     *
26240     * var users = [
26241     *   { 'user': 'barney',  'active': true },
26242     *   { 'user': 'fred',    'active': false },
26243     *   { 'user': 'pebbles', 'active': false }
26244     * ];
26245     *
26246     * _.dropRightWhile(users, function(o) { return !o.active; });
26247     * // => objects for ['barney']
26248     *
26249     * // The `_.matches` iteratee shorthand.
26250     * _.dropRightWhile(users, { 'user': 'pebbles', 'active': false });
26251     * // => objects for ['barney', 'fred']
26252     *
26253     * // The `_.matchesProperty` iteratee shorthand.
26254     * _.dropRightWhile(users, ['active', false]);
26255     * // => objects for ['barney']
26256     *
26257     * // The `_.property` iteratee shorthand.
26258     * _.dropRightWhile(users, 'active');
26259     * // => objects for ['barney', 'fred', 'pebbles']
26260     */
26261    function dropRightWhile(array, predicate) {
26262      return (array && array.length)
26263        ? baseWhile(array, getIteratee(predicate, 3), true, true)
26264        : [];
26265    }
26266
26267    /**
26268     * Creates a slice of `array` excluding elements dropped from the beginning.
26269     * Elements are dropped until `predicate` returns falsey. The predicate is
26270     * invoked with three arguments: (value, index, array).
26271     *
26272     * @static
26273     * @memberOf _
26274     * @since 3.0.0
26275     * @category Array
26276     * @param {Array} array The array to query.
26277     * @param {Function} [predicate=_.identity] The function invoked per iteration.
26278     * @returns {Array} Returns the slice of `array`.
26279     * @example
26280     *
26281     * var users = [
26282     *   { 'user': 'barney',  'active': false },
26283     *   { 'user': 'fred',    'active': false },
26284     *   { 'user': 'pebbles', 'active': true }
26285     * ];
26286     *
26287     * _.dropWhile(users, function(o) { return !o.active; });
26288     * // => objects for ['pebbles']
26289     *
26290     * // The `_.matches` iteratee shorthand.
26291     * _.dropWhile(users, { 'user': 'barney', 'active': false });
26292     * // => objects for ['fred', 'pebbles']
26293     *
26294     * // The `_.matchesProperty` iteratee shorthand.
26295     * _.dropWhile(users, ['active', false]);
26296     * // => objects for ['pebbles']
26297     *
26298     * // The `_.property` iteratee shorthand.
26299     * _.dropWhile(users, 'active');
26300     * // => objects for ['barney', 'fred', 'pebbles']
26301     */
26302    function dropWhile(array, predicate) {
26303      return (array && array.length)
26304        ? baseWhile(array, getIteratee(predicate, 3), true)
26305        : [];
26306    }
26307
26308    /**
26309     * Fills elements of `array` with `value` from `start` up to, but not
26310     * including, `end`.
26311     *
26312     * **Note:** This method mutates `array`.
26313     *
26314     * @static
26315     * @memberOf _
26316     * @since 3.2.0
26317     * @category Array
26318     * @param {Array} array The array to fill.
26319     * @param {*} value The value to fill `array` with.
26320     * @param {number} [start=0] The start position.
26321     * @param {number} [end=array.length] The end position.
26322     * @returns {Array} Returns `array`.
26323     * @example
26324     *
26325     * var array = [1, 2, 3];
26326     *
26327     * _.fill(array, 'a');
26328     * console.log(array);
26329     * // => ['a', 'a', 'a']
26330     *
26331     * _.fill(Array(3), 2);
26332     * // => [2, 2, 2]
26333     *
26334     * _.fill([4, 6, 8, 10], '*', 1, 3);
26335     * // => [4, '*', '*', 10]
26336     */
26337    function fill(array, value, start, end) {
26338      var length = array == null ? 0 : array.length;
26339      if (!length) {
26340        return [];
26341      }
26342      if (start && typeof start != 'number' && isIterateeCall(array, value, start)) {
26343        start = 0;
26344        end = length;
26345      }
26346      return baseFill(array, value, start, end);
26347    }
26348
26349    /**
26350     * This method is like `_.find` except that it returns the index of the first
26351     * element `predicate` returns truthy for instead of the element itself.
26352     *
26353     * @static
26354     * @memberOf _
26355     * @since 1.1.0
26356     * @category Array
26357     * @param {Array} array The array to inspect.
26358     * @param {Function} [predicate=_.identity] The function invoked per iteration.
26359     * @param {number} [fromIndex=0] The index to search from.
26360     * @returns {number} Returns the index of the found element, else `-1`.
26361     * @example
26362     *
26363     * var users = [
26364     *   { 'user': 'barney',  'active': false },
26365     *   { 'user': 'fred',    'active': false },
26366     *   { 'user': 'pebbles', 'active': true }
26367     * ];
26368     *
26369     * _.findIndex(users, function(o) { return o.user == 'barney'; });
26370     * // => 0
26371     *
26372     * // The `_.matches` iteratee shorthand.
26373     * _.findIndex(users, { 'user': 'fred', 'active': false });
26374     * // => 1
26375     *
26376     * // The `_.matchesProperty` iteratee shorthand.
26377     * _.findIndex(users, ['active', false]);
26378     * // => 0
26379     *
26380     * // The `_.property` iteratee shorthand.
26381     * _.findIndex(users, 'active');
26382     * // => 2
26383     */
26384    function findIndex(array, predicate, fromIndex) {
26385      var length = array == null ? 0 : array.length;
26386      if (!length) {
26387        return -1;
26388      }
26389      var index = fromIndex == null ? 0 : toInteger(fromIndex);
26390      if (index < 0) {
26391        index = nativeMax(length + index, 0);
26392      }
26393      return baseFindIndex(array, getIteratee(predicate, 3), index);
26394    }
26395
26396    /**
26397     * This method is like `_.findIndex` except that it iterates over elements
26398     * of `collection` from right to left.
26399     *
26400     * @static
26401     * @memberOf _
26402     * @since 2.0.0
26403     * @category Array
26404     * @param {Array} array The array to inspect.
26405     * @param {Function} [predicate=_.identity] The function invoked per iteration.
26406     * @param {number} [fromIndex=array.length-1] The index to search from.
26407     * @returns {number} Returns the index of the found element, else `-1`.
26408     * @example
26409     *
26410     * var users = [
26411     *   { 'user': 'barney',  'active': true },
26412     *   { 'user': 'fred',    'active': false },
26413     *   { 'user': 'pebbles', 'active': false }
26414     * ];
26415     *
26416     * _.findLastIndex(users, function(o) { return o.user == 'pebbles'; });
26417     * // => 2
26418     *
26419     * // The `_.matches` iteratee shorthand.
26420     * _.findLastIndex(users, { 'user': 'barney', 'active': true });
26421     * // => 0
26422     *
26423     * // The `_.matchesProperty` iteratee shorthand.
26424     * _.findLastIndex(users, ['active', false]);
26425     * // => 2
26426     *
26427     * // The `_.property` iteratee shorthand.
26428     * _.findLastIndex(users, 'active');
26429     * // => 0
26430     */
26431    function findLastIndex(array, predicate, fromIndex) {
26432      var length = array == null ? 0 : array.length;
26433      if (!length) {
26434        return -1;
26435      }
26436      var index = length - 1;
26437      if (fromIndex !== undefined) {
26438        index = toInteger(fromIndex);
26439        index = fromIndex < 0
26440          ? nativeMax(length + index, 0)
26441          : nativeMin(index, length - 1);
26442      }
26443      return baseFindIndex(array, getIteratee(predicate, 3), index, true);
26444    }
26445
26446    /**
26447     * Flattens `array` a single level deep.
26448     *
26449     * @static
26450     * @memberOf _
26451     * @since 0.1.0
26452     * @category Array
26453     * @param {Array} array The array to flatten.
26454     * @returns {Array} Returns the new flattened array.
26455     * @example
26456     *
26457     * _.flatten([1, [2, [3, [4]], 5]]);
26458     * // => [1, 2, [3, [4]], 5]
26459     */
26460    function flatten(array) {
26461      var length = array == null ? 0 : array.length;
26462      return length ? baseFlatten(array, 1) : [];
26463    }
26464
26465    /**
26466     * Recursively flattens `array`.
26467     *
26468     * @static
26469     * @memberOf _
26470     * @since 3.0.0
26471     * @category Array
26472     * @param {Array} array The array to flatten.
26473     * @returns {Array} Returns the new flattened array.
26474     * @example
26475     *
26476     * _.flattenDeep([1, [2, [3, [4]], 5]]);
26477     * // => [1, 2, 3, 4, 5]
26478     */
26479    function flattenDeep(array) {
26480      var length = array == null ? 0 : array.length;
26481      return length ? baseFlatten(array, INFINITY) : [];
26482    }
26483
26484    /**
26485     * Recursively flatten `array` up to `depth` times.
26486     *
26487     * @static
26488     * @memberOf _
26489     * @since 4.4.0
26490     * @category Array
26491     * @param {Array} array The array to flatten.
26492     * @param {number} [depth=1] The maximum recursion depth.
26493     * @returns {Array} Returns the new flattened array.
26494     * @example
26495     *
26496     * var array = [1, [2, [3, [4]], 5]];
26497     *
26498     * _.flattenDepth(array, 1);
26499     * // => [1, 2, [3, [4]], 5]
26500     *
26501     * _.flattenDepth(array, 2);
26502     * // => [1, 2, 3, [4], 5]
26503     */
26504    function flattenDepth(array, depth) {
26505      var length = array == null ? 0 : array.length;
26506      if (!length) {
26507        return [];
26508      }
26509      depth = depth === undefined ? 1 : toInteger(depth);
26510      return baseFlatten(array, depth);
26511    }
26512
26513    /**
26514     * The inverse of `_.toPairs`; this method returns an object composed
26515     * from key-value `pairs`.
26516     *
26517     * @static
26518     * @memberOf _
26519     * @since 4.0.0
26520     * @category Array
26521     * @param {Array} pairs The key-value pairs.
26522     * @returns {Object} Returns the new object.
26523     * @example
26524     *
26525     * _.fromPairs([['a', 1], ['b', 2]]);
26526     * // => { 'a': 1, 'b': 2 }
26527     */
26528    function fromPairs(pairs) {
26529      var index = -1,
26530          length = pairs == null ? 0 : pairs.length,
26531          result = {};
26532
26533      while (++index < length) {
26534        var pair = pairs[index];
26535        result[pair[0]] = pair[1];
26536      }
26537      return result;
26538    }
26539
26540    /**
26541     * Gets the first element of `array`.
26542     *
26543     * @static
26544     * @memberOf _
26545     * @since 0.1.0
26546     * @alias first
26547     * @category Array
26548     * @param {Array} array The array to query.
26549     * @returns {*} Returns the first element of `array`.
26550     * @example
26551     *
26552     * _.head([1, 2, 3]);
26553     * // => 1
26554     *
26555     * _.head([]);
26556     * // => undefined
26557     */
26558    function head(array) {
26559      return (array && array.length) ? array[0] : undefined;
26560    }
26561
26562    /**
26563     * Gets the index at which the first occurrence of `value` is found in `array`
26564     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
26565     * for equality comparisons. If `fromIndex` is negative, it's used as the
26566     * offset from the end of `array`.
26567     *
26568     * @static
26569     * @memberOf _
26570     * @since 0.1.0
26571     * @category Array
26572     * @param {Array} array The array to inspect.
26573     * @param {*} value The value to search for.
26574     * @param {number} [fromIndex=0] The index to search from.
26575     * @returns {number} Returns the index of the matched value, else `-1`.
26576     * @example
26577     *
26578     * _.indexOf([1, 2, 1, 2], 2);
26579     * // => 1
26580     *
26581     * // Search from the `fromIndex`.
26582     * _.indexOf([1, 2, 1, 2], 2, 2);
26583     * // => 3
26584     */
26585    function indexOf(array, value, fromIndex) {
26586      var length = array == null ? 0 : array.length;
26587      if (!length) {
26588        return -1;
26589      }
26590      var index = fromIndex == null ? 0 : toInteger(fromIndex);
26591      if (index < 0) {
26592        index = nativeMax(length + index, 0);
26593      }
26594      return baseIndexOf(array, value, index);
26595    }
26596
26597    /**
26598     * Gets all but the last element of `array`.
26599     *
26600     * @static
26601     * @memberOf _
26602     * @since 0.1.0
26603     * @category Array
26604     * @param {Array} array The array to query.
26605     * @returns {Array} Returns the slice of `array`.
26606     * @example
26607     *
26608     * _.initial([1, 2, 3]);
26609     * // => [1, 2]
26610     */
26611    function initial(array) {
26612      var length = array == null ? 0 : array.length;
26613      return length ? baseSlice(array, 0, -1) : [];
26614    }
26615
26616    /**
26617     * Creates an array of unique values that are included in all given arrays
26618     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
26619     * for equality comparisons. The order and references of result values are
26620     * determined by the first array.
26621     *
26622     * @static
26623     * @memberOf _
26624     * @since 0.1.0
26625     * @category Array
26626     * @param {...Array} [arrays] The arrays to inspect.
26627     * @returns {Array} Returns the new array of intersecting values.
26628     * @example
26629     *
26630     * _.intersection([2, 1], [2, 3]);
26631     * // => [2]
26632     */
26633    var intersection = baseRest(function(arrays) {
26634      var mapped = arrayMap(arrays, castArrayLikeObject);
26635      return (mapped.length && mapped[0] === arrays[0])
26636        ? baseIntersection(mapped)
26637        : [];
26638    });
26639
26640    /**
26641     * This method is like `_.intersection` except that it accepts `iteratee`
26642     * which is invoked for each element of each `arrays` to generate the criterion
26643     * by which they're compared. The order and references of result values are
26644     * determined by the first array. The iteratee is invoked with one argument:
26645     * (value).
26646     *
26647     * @static
26648     * @memberOf _
26649     * @since 4.0.0
26650     * @category Array
26651     * @param {...Array} [arrays] The arrays to inspect.
26652     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
26653     * @returns {Array} Returns the new array of intersecting values.
26654     * @example
26655     *
26656     * _.intersectionBy([2.1, 1.2], [2.3, 3.4], Math.floor);
26657     * // => [2.1]
26658     *
26659     * // The `_.property` iteratee shorthand.
26660     * _.intersectionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');
26661     * // => [{ 'x': 1 }]
26662     */
26663    var intersectionBy = baseRest(function(arrays) {
26664      var iteratee = last(arrays),
26665          mapped = arrayMap(arrays, castArrayLikeObject);
26666
26667      if (iteratee === last(mapped)) {
26668        iteratee = undefined;
26669      } else {
26670        mapped.pop();
26671      }
26672      return (mapped.length && mapped[0] === arrays[0])
26673        ? baseIntersection(mapped, getIteratee(iteratee, 2))
26674        : [];
26675    });
26676
26677    /**
26678     * This method is like `_.intersection` except that it accepts `comparator`
26679     * which is invoked to compare elements of `arrays`. The order and references
26680     * of result values are determined by the first array. The comparator is
26681     * invoked with two arguments: (arrVal, othVal).
26682     *
26683     * @static
26684     * @memberOf _
26685     * @since 4.0.0
26686     * @category Array
26687     * @param {...Array} [arrays] The arrays to inspect.
26688     * @param {Function} [comparator] The comparator invoked per element.
26689     * @returns {Array} Returns the new array of intersecting values.
26690     * @example
26691     *
26692     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];
26693     * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];
26694     *
26695     * _.intersectionWith(objects, others, _.isEqual);
26696     * // => [{ 'x': 1, 'y': 2 }]
26697     */
26698    var intersectionWith = baseRest(function(arrays) {
26699      var comparator = last(arrays),
26700          mapped = arrayMap(arrays, castArrayLikeObject);
26701
26702      comparator = typeof comparator == 'function' ? comparator : undefined;
26703      if (comparator) {
26704        mapped.pop();
26705      }
26706      return (mapped.length && mapped[0] === arrays[0])
26707        ? baseIntersection(mapped, undefined, comparator)
26708        : [];
26709    });
26710
26711    /**
26712     * Converts all elements in `array` into a string separated by `separator`.
26713     *
26714     * @static
26715     * @memberOf _
26716     * @since 4.0.0
26717     * @category Array
26718     * @param {Array} array The array to convert.
26719     * @param {string} [separator=','] The element separator.
26720     * @returns {string} Returns the joined string.
26721     * @example
26722     *
26723     * _.join(['a', 'b', 'c'], '~');
26724     * // => 'a~b~c'
26725     */
26726    function join(array, separator) {
26727      return array == null ? '' : nativeJoin.call(array, separator);
26728    }
26729
26730    /**
26731     * Gets the last element of `array`.
26732     *
26733     * @static
26734     * @memberOf _
26735     * @since 0.1.0
26736     * @category Array
26737     * @param {Array} array The array to query.
26738     * @returns {*} Returns the last element of `array`.
26739     * @example
26740     *
26741     * _.last([1, 2, 3]);
26742     * // => 3
26743     */
26744    function last(array) {
26745      var length = array == null ? 0 : array.length;
26746      return length ? array[length - 1] : undefined;
26747    }
26748
26749    /**
26750     * This method is like `_.indexOf` except that it iterates over elements of
26751     * `array` from right to left.
26752     *
26753     * @static
26754     * @memberOf _
26755     * @since 0.1.0
26756     * @category Array
26757     * @param {Array} array The array to inspect.
26758     * @param {*} value The value to search for.
26759     * @param {number} [fromIndex=array.length-1] The index to search from.
26760     * @returns {number} Returns the index of the matched value, else `-1`.
26761     * @example
26762     *
26763     * _.lastIndexOf([1, 2, 1, 2], 2);
26764     * // => 3
26765     *
26766     * // Search from the `fromIndex`.
26767     * _.lastIndexOf([1, 2, 1, 2], 2, 2);
26768     * // => 1
26769     */
26770    function lastIndexOf(array, value, fromIndex) {
26771      var length = array == null ? 0 : array.length;
26772      if (!length) {
26773        return -1;
26774      }
26775      var index = length;
26776      if (fromIndex !== undefined) {
26777        index = toInteger(fromIndex);
26778        index = index < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1);
26779      }
26780      return value === value
26781        ? strictLastIndexOf(array, value, index)
26782        : baseFindIndex(array, baseIsNaN, index, true);
26783    }
26784
26785    /**
26786     * Gets the element at index `n` of `array`. If `n` is negative, the nth
26787     * element from the end is returned.
26788     *
26789     * @static
26790     * @memberOf _
26791     * @since 4.11.0
26792     * @category Array
26793     * @param {Array} array The array to query.
26794     * @param {number} [n=0] The index of the element to return.
26795     * @returns {*} Returns the nth element of `array`.
26796     * @example
26797     *
26798     * var array = ['a', 'b', 'c', 'd'];
26799     *
26800     * _.nth(array, 1);
26801     * // => 'b'
26802     *
26803     * _.nth(array, -2);
26804     * // => 'c';
26805     */
26806    function nth(array, n) {
26807      return (array && array.length) ? baseNth(array, toInteger(n)) : undefined;
26808    }
26809
26810    /**
26811     * Removes all given values from `array` using
26812     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
26813     * for equality comparisons.
26814     *
26815     * **Note:** Unlike `_.without`, this method mutates `array`. Use `_.remove`
26816     * to remove elements from an array by predicate.
26817     *
26818     * @static
26819     * @memberOf _
26820     * @since 2.0.0
26821     * @category Array
26822     * @param {Array} array The array to modify.
26823     * @param {...*} [values] The values to remove.
26824     * @returns {Array} Returns `array`.
26825     * @example
26826     *
26827     * var array = ['a', 'b', 'c', 'a', 'b', 'c'];
26828     *
26829     * _.pull(array, 'a', 'c');
26830     * console.log(array);
26831     * // => ['b', 'b']
26832     */
26833    var pull = baseRest(pullAll);
26834
26835    /**
26836     * This method is like `_.pull` except that it accepts an array of values to remove.
26837     *
26838     * **Note:** Unlike `_.difference`, this method mutates `array`.
26839     *
26840     * @static
26841     * @memberOf _
26842     * @since 4.0.0
26843     * @category Array
26844     * @param {Array} array The array to modify.
26845     * @param {Array} values The values to remove.
26846     * @returns {Array} Returns `array`.
26847     * @example
26848     *
26849     * var array = ['a', 'b', 'c', 'a', 'b', 'c'];
26850     *
26851     * _.pullAll(array, ['a', 'c']);
26852     * console.log(array);
26853     * // => ['b', 'b']
26854     */
26855    function pullAll(array, values) {
26856      return (array && array.length && values && values.length)
26857        ? basePullAll(array, values)
26858        : array;
26859    }
26860
26861    /**
26862     * This method is like `_.pullAll` except that it accepts `iteratee` which is
26863     * invoked for each element of `array` and `values` to generate the criterion
26864     * by which they're compared. The iteratee is invoked with one argument: (value).
26865     *
26866     * **Note:** Unlike `_.differenceBy`, this method mutates `array`.
26867     *
26868     * @static
26869     * @memberOf _
26870     * @since 4.0.0
26871     * @category Array
26872     * @param {Array} array The array to modify.
26873     * @param {Array} values The values to remove.
26874     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
26875     * @returns {Array} Returns `array`.
26876     * @example
26877     *
26878     * var array = [{ 'x': 1 }, { 'x': 2 }, { 'x': 3 }, { 'x': 1 }];
26879     *
26880     * _.pullAllBy(array, [{ 'x': 1 }, { 'x': 3 }], 'x');
26881     * console.log(array);
26882     * // => [{ 'x': 2 }]
26883     */
26884    function pullAllBy(array, values, iteratee) {
26885      return (array && array.length && values && values.length)
26886        ? basePullAll(array, values, getIteratee(iteratee, 2))
26887        : array;
26888    }
26889
26890    /**
26891     * This method is like `_.pullAll` except that it accepts `comparator` which
26892     * is invoked to compare elements of `array` to `values`. The comparator is
26893     * invoked with two arguments: (arrVal, othVal).
26894     *
26895     * **Note:** Unlike `_.differenceWith`, this method mutates `array`.
26896     *
26897     * @static
26898     * @memberOf _
26899     * @since 4.6.0
26900     * @category Array
26901     * @param {Array} array The array to modify.
26902     * @param {Array} values The values to remove.
26903     * @param {Function} [comparator] The comparator invoked per element.
26904     * @returns {Array} Returns `array`.
26905     * @example
26906     *
26907     * var array = [{ 'x': 1, 'y': 2 }, { 'x': 3, 'y': 4 }, { 'x': 5, 'y': 6 }];
26908     *
26909     * _.pullAllWith(array, [{ 'x': 3, 'y': 4 }], _.isEqual);
26910     * console.log(array);
26911     * // => [{ 'x': 1, 'y': 2 }, { 'x': 5, 'y': 6 }]
26912     */
26913    function pullAllWith(array, values, comparator) {
26914      return (array && array.length && values && values.length)
26915        ? basePullAll(array, values, undefined, comparator)
26916        : array;
26917    }
26918
26919    /**
26920     * Removes elements from `array` corresponding to `indexes` and returns an
26921     * array of removed elements.
26922     *
26923     * **Note:** Unlike `_.at`, this method mutates `array`.
26924     *
26925     * @static
26926     * @memberOf _
26927     * @since 3.0.0
26928     * @category Array
26929     * @param {Array} array The array to modify.
26930     * @param {...(number|number[])} [indexes] The indexes of elements to remove.
26931     * @returns {Array} Returns the new array of removed elements.
26932     * @example
26933     *
26934     * var array = ['a', 'b', 'c', 'd'];
26935     * var pulled = _.pullAt(array, [1, 3]);
26936     *
26937     * console.log(array);
26938     * // => ['a', 'c']
26939     *
26940     * console.log(pulled);
26941     * // => ['b', 'd']
26942     */
26943    var pullAt = flatRest(function(array, indexes) {
26944      var length = array == null ? 0 : array.length,
26945          result = baseAt(array, indexes);
26946
26947      basePullAt(array, arrayMap(indexes, function(index) {
26948        return isIndex(index, length) ? +index : index;
26949      }).sort(compareAscending));
26950
26951      return result;
26952    });
26953
26954    /**
26955     * Removes all elements from `array` that `predicate` returns truthy for
26956     * and returns an array of the removed elements. The predicate is invoked
26957     * with three arguments: (value, index, array).
26958     *
26959     * **Note:** Unlike `_.filter`, this method mutates `array`. Use `_.pull`
26960     * to pull elements from an array by value.
26961     *
26962     * @static
26963     * @memberOf _
26964     * @since 2.0.0
26965     * @category Array
26966     * @param {Array} array The array to modify.
26967     * @param {Function} [predicate=_.identity] The function invoked per iteration.
26968     * @returns {Array} Returns the new array of removed elements.
26969     * @example
26970     *
26971     * var array = [1, 2, 3, 4];
26972     * var evens = _.remove(array, function(n) {
26973     *   return n % 2 == 0;
26974     * });
26975     *
26976     * console.log(array);
26977     * // => [1, 3]
26978     *
26979     * console.log(evens);
26980     * // => [2, 4]
26981     */
26982    function remove(array, predicate) {
26983      var result = [];
26984      if (!(array && array.length)) {
26985        return result;
26986      }
26987      var index = -1,
26988          indexes = [],
26989          length = array.length;
26990
26991      predicate = getIteratee(predicate, 3);
26992      while (++index < length) {
26993        var value = array[index];
26994        if (predicate(value, index, array)) {
26995          result.push(value);
26996          indexes.push(index);
26997        }
26998      }
26999      basePullAt(array, indexes);
27000      return result;
27001    }
27002
27003    /**
27004     * Reverses `array` so that the first element becomes the last, the second
27005     * element becomes the second to last, and so on.
27006     *
27007     * **Note:** This method mutates `array` and is based on
27008     * [`Array#reverse`](https://mdn.io/Array/reverse).
27009     *
27010     * @static
27011     * @memberOf _
27012     * @since 4.0.0
27013     * @category Array
27014     * @param {Array} array The array to modify.
27015     * @returns {Array} Returns `array`.
27016     * @example
27017     *
27018     * var array = [1, 2, 3];
27019     *
27020     * _.reverse(array);
27021     * // => [3, 2, 1]
27022     *
27023     * console.log(array);
27024     * // => [3, 2, 1]
27025     */
27026    function reverse(array) {
27027      return array == null ? array : nativeReverse.call(array);
27028    }
27029
27030    /**
27031     * Creates a slice of `array` from `start` up to, but not including, `end`.
27032     *
27033     * **Note:** This method is used instead of
27034     * [`Array#slice`](https://mdn.io/Array/slice) to ensure dense arrays are
27035     * returned.
27036     *
27037     * @static
27038     * @memberOf _
27039     * @since 3.0.0
27040     * @category Array
27041     * @param {Array} array The array to slice.
27042     * @param {number} [start=0] The start position.
27043     * @param {number} [end=array.length] The end position.
27044     * @returns {Array} Returns the slice of `array`.
27045     */
27046    function slice(array, start, end) {
27047      var length = array == null ? 0 : array.length;
27048      if (!length) {
27049        return [];
27050      }
27051      if (end && typeof end != 'number' && isIterateeCall(array, start, end)) {
27052        start = 0;
27053        end = length;
27054      }
27055      else {
27056        start = start == null ? 0 : toInteger(start);
27057        end = end === undefined ? length : toInteger(end);
27058      }
27059      return baseSlice(array, start, end);
27060    }
27061
27062    /**
27063     * Uses a binary search to determine the lowest index at which `value`
27064     * should be inserted into `array` in order to maintain its sort order.
27065     *
27066     * @static
27067     * @memberOf _
27068     * @since 0.1.0
27069     * @category Array
27070     * @param {Array} array The sorted array to inspect.
27071     * @param {*} value The value to evaluate.
27072     * @returns {number} Returns the index at which `value` should be inserted
27073     *  into `array`.
27074     * @example
27075     *
27076     * _.sortedIndex([30, 50], 40);
27077     * // => 1
27078     */
27079    function sortedIndex(array, value) {
27080      return baseSortedIndex(array, value);
27081    }
27082
27083    /**
27084     * This method is like `_.sortedIndex` except that it accepts `iteratee`
27085     * which is invoked for `value` and each element of `array` to compute their
27086     * sort ranking. The iteratee is invoked with one argument: (value).
27087     *
27088     * @static
27089     * @memberOf _
27090     * @since 4.0.0
27091     * @category Array
27092     * @param {Array} array The sorted array to inspect.
27093     * @param {*} value The value to evaluate.
27094     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
27095     * @returns {number} Returns the index at which `value` should be inserted
27096     *  into `array`.
27097     * @example
27098     *
27099     * var objects = [{ 'x': 4 }, { 'x': 5 }];
27100     *
27101     * _.sortedIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });
27102     * // => 0
27103     *
27104     * // The `_.property` iteratee shorthand.
27105     * _.sortedIndexBy(objects, { 'x': 4 }, 'x');
27106     * // => 0
27107     */
27108    function sortedIndexBy(array, value, iteratee) {
27109      return baseSortedIndexBy(array, value, getIteratee(iteratee, 2));
27110    }
27111
27112    /**
27113     * This method is like `_.indexOf` except that it performs a binary
27114     * search on a sorted `array`.
27115     *
27116     * @static
27117     * @memberOf _
27118     * @since 4.0.0
27119     * @category Array
27120     * @param {Array} array The array to inspect.
27121     * @param {*} value The value to search for.
27122     * @returns {number} Returns the index of the matched value, else `-1`.
27123     * @example
27124     *
27125     * _.sortedIndexOf([4, 5, 5, 5, 6], 5);
27126     * // => 1
27127     */
27128    function sortedIndexOf(array, value) {
27129      var length = array == null ? 0 : array.length;
27130      if (length) {
27131        var index = baseSortedIndex(array, value);
27132        if (index < length && eq(array[index], value)) {
27133          return index;
27134        }
27135      }
27136      return -1;
27137    }
27138
27139    /**
27140     * This method is like `_.sortedIndex` except that it returns the highest
27141     * index at which `value` should be inserted into `array` in order to
27142     * maintain its sort order.
27143     *
27144     * @static
27145     * @memberOf _
27146     * @since 3.0.0
27147     * @category Array
27148     * @param {Array} array The sorted array to inspect.
27149     * @param {*} value The value to evaluate.
27150     * @returns {number} Returns the index at which `value` should be inserted
27151     *  into `array`.
27152     * @example
27153     *
27154     * _.sortedLastIndex([4, 5, 5, 5, 6], 5);
27155     * // => 4
27156     */
27157    function sortedLastIndex(array, value) {
27158      return baseSortedIndex(array, value, true);
27159    }
27160
27161    /**
27162     * This method is like `_.sortedLastIndex` except that it accepts `iteratee`
27163     * which is invoked for `value` and each element of `array` to compute their
27164     * sort ranking. The iteratee is invoked with one argument: (value).
27165     *
27166     * @static
27167     * @memberOf _
27168     * @since 4.0.0
27169     * @category Array
27170     * @param {Array} array The sorted array to inspect.
27171     * @param {*} value The value to evaluate.
27172     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
27173     * @returns {number} Returns the index at which `value` should be inserted
27174     *  into `array`.
27175     * @example
27176     *
27177     * var objects = [{ 'x': 4 }, { 'x': 5 }];
27178     *
27179     * _.sortedLastIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });
27180     * // => 1
27181     *
27182     * // The `_.property` iteratee shorthand.
27183     * _.sortedLastIndexBy(objects, { 'x': 4 }, 'x');
27184     * // => 1
27185     */
27186    function sortedLastIndexBy(array, value, iteratee) {
27187      return baseSortedIndexBy(array, value, getIteratee(iteratee, 2), true);
27188    }
27189
27190    /**
27191     * This method is like `_.lastIndexOf` except that it performs a binary
27192     * search on a sorted `array`.
27193     *
27194     * @static
27195     * @memberOf _
27196     * @since 4.0.0
27197     * @category Array
27198     * @param {Array} array The array to inspect.
27199     * @param {*} value The value to search for.
27200     * @returns {number} Returns the index of the matched value, else `-1`.
27201     * @example
27202     *
27203     * _.sortedLastIndexOf([4, 5, 5, 5, 6], 5);
27204     * // => 3
27205     */
27206    function sortedLastIndexOf(array, value) {
27207      var length = array == null ? 0 : array.length;
27208      if (length) {
27209        var index = baseSortedIndex(array, value, true) - 1;
27210        if (eq(array[index], value)) {
27211          return index;
27212        }
27213      }
27214      return -1;
27215    }
27216
27217    /**
27218     * This method is like `_.uniq` except that it's designed and optimized
27219     * for sorted arrays.
27220     *
27221     * @static
27222     * @memberOf _
27223     * @since 4.0.0
27224     * @category Array
27225     * @param {Array} array The array to inspect.
27226     * @returns {Array} Returns the new duplicate free array.
27227     * @example
27228     *
27229     * _.sortedUniq([1, 1, 2]);
27230     * // => [1, 2]
27231     */
27232    function sortedUniq(array) {
27233      return (array && array.length)
27234        ? baseSortedUniq(array)
27235        : [];
27236    }
27237
27238    /**
27239     * This method is like `_.uniqBy` except that it's designed and optimized
27240     * for sorted arrays.
27241     *
27242     * @static
27243     * @memberOf _
27244     * @since 4.0.0
27245     * @category Array
27246     * @param {Array} array The array to inspect.
27247     * @param {Function} [iteratee] The iteratee invoked per element.
27248     * @returns {Array} Returns the new duplicate free array.
27249     * @example
27250     *
27251     * _.sortedUniqBy([1.1, 1.2, 2.3, 2.4], Math.floor);
27252     * // => [1.1, 2.3]
27253     */
27254    function sortedUniqBy(array, iteratee) {
27255      return (array && array.length)
27256        ? baseSortedUniq(array, getIteratee(iteratee, 2))
27257        : [];
27258    }
27259
27260    /**
27261     * Gets all but the first element of `array`.
27262     *
27263     * @static
27264     * @memberOf _
27265     * @since 4.0.0
27266     * @category Array
27267     * @param {Array} array The array to query.
27268     * @returns {Array} Returns the slice of `array`.
27269     * @example
27270     *
27271     * _.tail([1, 2, 3]);
27272     * // => [2, 3]
27273     */
27274    function tail(array) {
27275      var length = array == null ? 0 : array.length;
27276      return length ? baseSlice(array, 1, length) : [];
27277    }
27278
27279    /**
27280     * Creates a slice of `array` with `n` elements taken from the beginning.
27281     *
27282     * @static
27283     * @memberOf _
27284     * @since 0.1.0
27285     * @category Array
27286     * @param {Array} array The array to query.
27287     * @param {number} [n=1] The number of elements to take.
27288     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
27289     * @returns {Array} Returns the slice of `array`.
27290     * @example
27291     *
27292     * _.take([1, 2, 3]);
27293     * // => [1]
27294     *
27295     * _.take([1, 2, 3], 2);
27296     * // => [1, 2]
27297     *
27298     * _.take([1, 2, 3], 5);
27299     * // => [1, 2, 3]
27300     *
27301     * _.take([1, 2, 3], 0);
27302     * // => []
27303     */
27304    function take(array, n, guard) {
27305      if (!(array && array.length)) {
27306        return [];
27307      }
27308      n = (guard || n === undefined) ? 1 : toInteger(n);
27309      return baseSlice(array, 0, n < 0 ? 0 : n);
27310    }
27311
27312    /**
27313     * Creates a slice of `array` with `n` elements taken from the end.
27314     *
27315     * @static
27316     * @memberOf _
27317     * @since 3.0.0
27318     * @category Array
27319     * @param {Array} array The array to query.
27320     * @param {number} [n=1] The number of elements to take.
27321     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
27322     * @returns {Array} Returns the slice of `array`.
27323     * @example
27324     *
27325     * _.takeRight([1, 2, 3]);
27326     * // => [3]
27327     *
27328     * _.takeRight([1, 2, 3], 2);
27329     * // => [2, 3]
27330     *
27331     * _.takeRight([1, 2, 3], 5);
27332     * // => [1, 2, 3]
27333     *
27334     * _.takeRight([1, 2, 3], 0);
27335     * // => []
27336     */
27337    function takeRight(array, n, guard) {
27338      var length = array == null ? 0 : array.length;
27339      if (!length) {
27340        return [];
27341      }
27342      n = (guard || n === undefined) ? 1 : toInteger(n);
27343      n = length - n;
27344      return baseSlice(array, n < 0 ? 0 : n, length);
27345    }
27346
27347    /**
27348     * Creates a slice of `array` with elements taken from the end. Elements are
27349     * taken until `predicate` returns falsey. The predicate is invoked with
27350     * three arguments: (value, index, array).
27351     *
27352     * @static
27353     * @memberOf _
27354     * @since 3.0.0
27355     * @category Array
27356     * @param {Array} array The array to query.
27357     * @param {Function} [predicate=_.identity] The function invoked per iteration.
27358     * @returns {Array} Returns the slice of `array`.
27359     * @example
27360     *
27361     * var users = [
27362     *   { 'user': 'barney',  'active': true },
27363     *   { 'user': 'fred',    'active': false },
27364     *   { 'user': 'pebbles', 'active': false }
27365     * ];
27366     *
27367     * _.takeRightWhile(users, function(o) { return !o.active; });
27368     * // => objects for ['fred', 'pebbles']
27369     *
27370     * // The `_.matches` iteratee shorthand.
27371     * _.takeRightWhile(users, { 'user': 'pebbles', 'active': false });
27372     * // => objects for ['pebbles']
27373     *
27374     * // The `_.matchesProperty` iteratee shorthand.
27375     * _.takeRightWhile(users, ['active', false]);
27376     * // => objects for ['fred', 'pebbles']
27377     *
27378     * // The `_.property` iteratee shorthand.
27379     * _.takeRightWhile(users, 'active');
27380     * // => []
27381     */
27382    function takeRightWhile(array, predicate) {
27383      return (array && array.length)
27384        ? baseWhile(array, getIteratee(predicate, 3), false, true)
27385        : [];
27386    }
27387
27388    /**
27389     * Creates a slice of `array` with elements taken from the beginning. Elements
27390     * are taken until `predicate` returns falsey. The predicate is invoked with
27391     * three arguments: (value, index, array).
27392     *
27393     * @static
27394     * @memberOf _
27395     * @since 3.0.0
27396     * @category Array
27397     * @param {Array} array The array to query.
27398     * @param {Function} [predicate=_.identity] The function invoked per iteration.
27399     * @returns {Array} Returns the slice of `array`.
27400     * @example
27401     *
27402     * var users = [
27403     *   { 'user': 'barney',  'active': false },
27404     *   { 'user': 'fred',    'active': false },
27405     *   { 'user': 'pebbles', 'active': true }
27406     * ];
27407     *
27408     * _.takeWhile(users, function(o) { return !o.active; });
27409     * // => objects for ['barney', 'fred']
27410     *
27411     * // The `_.matches` iteratee shorthand.
27412     * _.takeWhile(users, { 'user': 'barney', 'active': false });
27413     * // => objects for ['barney']
27414     *
27415     * // The `_.matchesProperty` iteratee shorthand.
27416     * _.takeWhile(users, ['active', false]);
27417     * // => objects for ['barney', 'fred']
27418     *
27419     * // The `_.property` iteratee shorthand.
27420     * _.takeWhile(users, 'active');
27421     * // => []
27422     */
27423    function takeWhile(array, predicate) {
27424      return (array && array.length)
27425        ? baseWhile(array, getIteratee(predicate, 3))
27426        : [];
27427    }
27428
27429    /**
27430     * Creates an array of unique values, in order, from all given arrays using
27431     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
27432     * for equality comparisons.
27433     *
27434     * @static
27435     * @memberOf _
27436     * @since 0.1.0
27437     * @category Array
27438     * @param {...Array} [arrays] The arrays to inspect.
27439     * @returns {Array} Returns the new array of combined values.
27440     * @example
27441     *
27442     * _.union([2], [1, 2]);
27443     * // => [2, 1]
27444     */
27445    var union = baseRest(function(arrays) {
27446      return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true));
27447    });
27448
27449    /**
27450     * This method is like `_.union` except that it accepts `iteratee` which is
27451     * invoked for each element of each `arrays` to generate the criterion by
27452     * which uniqueness is computed. Result values are chosen from the first
27453     * array in which the value occurs. The iteratee is invoked with one argument:
27454     * (value).
27455     *
27456     * @static
27457     * @memberOf _
27458     * @since 4.0.0
27459     * @category Array
27460     * @param {...Array} [arrays] The arrays to inspect.
27461     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
27462     * @returns {Array} Returns the new array of combined values.
27463     * @example
27464     *
27465     * _.unionBy([2.1], [1.2, 2.3], Math.floor);
27466     * // => [2.1, 1.2]
27467     *
27468     * // The `_.property` iteratee shorthand.
27469     * _.unionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');
27470     * // => [{ 'x': 1 }, { 'x': 2 }]
27471     */
27472    var unionBy = baseRest(function(arrays) {
27473      var iteratee = last(arrays);
27474      if (isArrayLikeObject(iteratee)) {
27475        iteratee = undefined;
27476      }
27477      return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), getIteratee(iteratee, 2));
27478    });
27479
27480    /**
27481     * This method is like `_.union` except that it accepts `comparator` which
27482     * is invoked to compare elements of `arrays`. Result values are chosen from
27483     * the first array in which the value occurs. The comparator is invoked
27484     * with two arguments: (arrVal, othVal).
27485     *
27486     * @static
27487     * @memberOf _
27488     * @since 4.0.0
27489     * @category Array
27490     * @param {...Array} [arrays] The arrays to inspect.
27491     * @param {Function} [comparator] The comparator invoked per element.
27492     * @returns {Array} Returns the new array of combined values.
27493     * @example
27494     *
27495     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];
27496     * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];
27497     *
27498     * _.unionWith(objects, others, _.isEqual);
27499     * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]
27500     */
27501    var unionWith = baseRest(function(arrays) {
27502      var comparator = last(arrays);
27503      comparator = typeof comparator == 'function' ? comparator : undefined;
27504      return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), undefined, comparator);
27505    });
27506
27507    /**
27508     * Creates a duplicate-free version of an array, using
27509     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
27510     * for equality comparisons, in which only the first occurrence of each element
27511     * is kept. The order of result values is determined by the order they occur
27512     * in the array.
27513     *
27514     * @static
27515     * @memberOf _
27516     * @since 0.1.0
27517     * @category Array
27518     * @param {Array} array The array to inspect.
27519     * @returns {Array} Returns the new duplicate free array.
27520     * @example
27521     *
27522     * _.uniq([2, 1, 2]);
27523     * // => [2, 1]
27524     */
27525    function uniq(array) {
27526      return (array && array.length) ? baseUniq(array) : [];
27527    }
27528
27529    /**
27530     * This method is like `_.uniq` except that it accepts `iteratee` which is
27531     * invoked for each element in `array` to generate the criterion by which
27532     * uniqueness is computed. The order of result values is determined by the
27533     * order they occur in the array. The iteratee is invoked with one argument:
27534     * (value).
27535     *
27536     * @static
27537     * @memberOf _
27538     * @since 4.0.0
27539     * @category Array
27540     * @param {Array} array The array to inspect.
27541     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
27542     * @returns {Array} Returns the new duplicate free array.
27543     * @example
27544     *
27545     * _.uniqBy([2.1, 1.2, 2.3], Math.floor);
27546     * // => [2.1, 1.2]
27547     *
27548     * // The `_.property` iteratee shorthand.
27549     * _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x');
27550     * // => [{ 'x': 1 }, { 'x': 2 }]
27551     */
27552    function uniqBy(array, iteratee) {
27553      return (array && array.length) ? baseUniq(array, getIteratee(iteratee, 2)) : [];
27554    }
27555
27556    /**
27557     * This method is like `_.uniq` except that it accepts `comparator` which
27558     * is invoked to compare elements of `array`. The order of result values is
27559     * determined by the order they occur in the array.The comparator is invoked
27560     * with two arguments: (arrVal, othVal).
27561     *
27562     * @static
27563     * @memberOf _
27564     * @since 4.0.0
27565     * @category Array
27566     * @param {Array} array The array to inspect.
27567     * @param {Function} [comparator] The comparator invoked per element.
27568     * @returns {Array} Returns the new duplicate free array.
27569     * @example
27570     *
27571     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 2 }];
27572     *
27573     * _.uniqWith(objects, _.isEqual);
27574     * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]
27575     */
27576    function uniqWith(array, comparator) {
27577      comparator = typeof comparator == 'function' ? comparator : undefined;
27578      return (array && array.length) ? baseUniq(array, undefined, comparator) : [];
27579    }
27580
27581    /**
27582     * This method is like `_.zip` except that it accepts an array of grouped
27583     * elements and creates an array regrouping the elements to their pre-zip
27584     * configuration.
27585     *
27586     * @static
27587     * @memberOf _
27588     * @since 1.2.0
27589     * @category Array
27590     * @param {Array} array The array of grouped elements to process.
27591     * @returns {Array} Returns the new array of regrouped elements.
27592     * @example
27593     *
27594     * var zipped = _.zip(['a', 'b'], [1, 2], [true, false]);
27595     * // => [['a', 1, true], ['b', 2, false]]
27596     *
27597     * _.unzip(zipped);
27598     * // => [['a', 'b'], [1, 2], [true, false]]
27599     */
27600    function unzip(array) {
27601      if (!(array && array.length)) {
27602        return [];
27603      }
27604      var length = 0;
27605      array = arrayFilter(array, function(group) {
27606        if (isArrayLikeObject(group)) {
27607          length = nativeMax(group.length, length);
27608          return true;
27609        }
27610      });
27611      return baseTimes(length, function(index) {
27612        return arrayMap(array, baseProperty(index));
27613      });
27614    }
27615
27616    /**
27617     * This method is like `_.unzip` except that it accepts `iteratee` to specify
27618     * how regrouped values should be combined. The iteratee is invoked with the
27619     * elements of each group: (...group).
27620     *
27621     * @static
27622     * @memberOf _
27623     * @since 3.8.0
27624     * @category Array
27625     * @param {Array} array The array of grouped elements to process.
27626     * @param {Function} [iteratee=_.identity] The function to combine
27627     *  regrouped values.
27628     * @returns {Array} Returns the new array of regrouped elements.
27629     * @example
27630     *
27631     * var zipped = _.zip([1, 2], [10, 20], [100, 200]);
27632     * // => [[1, 10, 100], [2, 20, 200]]
27633     *
27634     * _.unzipWith(zipped, _.add);
27635     * // => [3, 30, 300]
27636     */
27637    function unzipWith(array, iteratee) {
27638      if (!(array && array.length)) {
27639        return [];
27640      }
27641      var result = unzip(array);
27642      if (iteratee == null) {
27643        return result;
27644      }
27645      return arrayMap(result, function(group) {
27646        return apply(iteratee, undefined, group);
27647      });
27648    }
27649
27650    /**
27651     * Creates an array excluding all given values using
27652     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
27653     * for equality comparisons.
27654     *
27655     * **Note:** Unlike `_.pull`, this method returns a new array.
27656     *
27657     * @static
27658     * @memberOf _
27659     * @since 0.1.0
27660     * @category Array
27661     * @param {Array} array The array to inspect.
27662     * @param {...*} [values] The values to exclude.
27663     * @returns {Array} Returns the new array of filtered values.
27664     * @see _.difference, _.xor
27665     * @example
27666     *
27667     * _.without([2, 1, 2, 3], 1, 2);
27668     * // => [3]
27669     */
27670    var without = baseRest(function(array, values) {
27671      return isArrayLikeObject(array)
27672        ? baseDifference(array, values)
27673        : [];
27674    });
27675
27676    /**
27677     * Creates an array of unique values that is the
27678     * [symmetric difference](https://en.wikipedia.org/wiki/Symmetric_difference)
27679     * of the given arrays. The order of result values is determined by the order
27680     * they occur in the arrays.
27681     *
27682     * @static
27683     * @memberOf _
27684     * @since 2.4.0
27685     * @category Array
27686     * @param {...Array} [arrays] The arrays to inspect.
27687     * @returns {Array} Returns the new array of filtered values.
27688     * @see _.difference, _.without
27689     * @example
27690     *
27691     * _.xor([2, 1], [2, 3]);
27692     * // => [1, 3]
27693     */
27694    var xor = baseRest(function(arrays) {
27695      return baseXor(arrayFilter(arrays, isArrayLikeObject));
27696    });
27697
27698    /**
27699     * This method is like `_.xor` except that it accepts `iteratee` which is
27700     * invoked for each element of each `arrays` to generate the criterion by
27701     * which by which they're compared. The order of result values is determined
27702     * by the order they occur in the arrays. The iteratee is invoked with one
27703     * argument: (value).
27704     *
27705     * @static
27706     * @memberOf _
27707     * @since 4.0.0
27708     * @category Array
27709     * @param {...Array} [arrays] The arrays to inspect.
27710     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
27711     * @returns {Array} Returns the new array of filtered values.
27712     * @example
27713     *
27714     * _.xorBy([2.1, 1.2], [2.3, 3.4], Math.floor);
27715     * // => [1.2, 3.4]
27716     *
27717     * // The `_.property` iteratee shorthand.
27718     * _.xorBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');
27719     * // => [{ 'x': 2 }]
27720     */
27721    var xorBy = baseRest(function(arrays) {
27722      var iteratee = last(arrays);
27723      if (isArrayLikeObject(iteratee)) {
27724        iteratee = undefined;
27725      }
27726      return baseXor(arrayFilter(arrays, isArrayLikeObject), getIteratee(iteratee, 2));
27727    });
27728
27729    /**
27730     * This method is like `_.xor` except that it accepts `comparator` which is
27731     * invoked to compare elements of `arrays`. The order of result values is
27732     * determined by the order they occur in the arrays. The comparator is invoked
27733     * with two arguments: (arrVal, othVal).
27734     *
27735     * @static
27736     * @memberOf _
27737     * @since 4.0.0
27738     * @category Array
27739     * @param {...Array} [arrays] The arrays to inspect.
27740     * @param {Function} [comparator] The comparator invoked per element.
27741     * @returns {Array} Returns the new array of filtered values.
27742     * @example
27743     *
27744     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];
27745     * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];
27746     *
27747     * _.xorWith(objects, others, _.isEqual);
27748     * // => [{ 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]
27749     */
27750    var xorWith = baseRest(function(arrays) {
27751      var comparator = last(arrays);
27752      comparator = typeof comparator == 'function' ? comparator : undefined;
27753      return baseXor(arrayFilter(arrays, isArrayLikeObject), undefined, comparator);
27754    });
27755
27756    /**
27757     * Creates an array of grouped elements, the first of which contains the
27758     * first elements of the given arrays, the second of which contains the
27759     * second elements of the given arrays, and so on.
27760     *
27761     * @static
27762     * @memberOf _
27763     * @since 0.1.0
27764     * @category Array
27765     * @param {...Array} [arrays] The arrays to process.
27766     * @returns {Array} Returns the new array of grouped elements.
27767     * @example
27768     *
27769     * _.zip(['a', 'b'], [1, 2], [true, false]);
27770     * // => [['a', 1, true], ['b', 2, false]]
27771     */
27772    var zip = baseRest(unzip);
27773
27774    /**
27775     * This method is like `_.fromPairs` except that it accepts two arrays,
27776     * one of property identifiers and one of corresponding values.
27777     *
27778     * @static
27779     * @memberOf _
27780     * @since 0.4.0
27781     * @category Array
27782     * @param {Array} [props=[]] The property identifiers.
27783     * @param {Array} [values=[]] The property values.
27784     * @returns {Object} Returns the new object.
27785     * @example
27786     *
27787     * _.zipObject(['a', 'b'], [1, 2]);
27788     * // => { 'a': 1, 'b': 2 }
27789     */
27790    function zipObject(props, values) {
27791      return baseZipObject(props || [], values || [], assignValue);
27792    }
27793
27794    /**
27795     * This method is like `_.zipObject` except that it supports property paths.
27796     *
27797     * @static
27798     * @memberOf _
27799     * @since 4.1.0
27800     * @category Array
27801     * @param {Array} [props=[]] The property identifiers.
27802     * @param {Array} [values=[]] The property values.
27803     * @returns {Object} Returns the new object.
27804     * @example
27805     *
27806     * _.zipObjectDeep(['a.b[0].c', 'a.b[1].d'], [1, 2]);
27807     * // => { 'a': { 'b': [{ 'c': 1 }, { 'd': 2 }] } }
27808     */
27809    function zipObjectDeep(props, values) {
27810      return baseZipObject(props || [], values || [], baseSet);
27811    }
27812
27813    /**
27814     * This method is like `_.zip` except that it accepts `iteratee` to specify
27815     * how grouped values should be combined. The iteratee is invoked with the
27816     * elements of each group: (...group).
27817     *
27818     * @static
27819     * @memberOf _
27820     * @since 3.8.0
27821     * @category Array
27822     * @param {...Array} [arrays] The arrays to process.
27823     * @param {Function} [iteratee=_.identity] The function to combine
27824     *  grouped values.
27825     * @returns {Array} Returns the new array of grouped elements.
27826     * @example
27827     *
27828     * _.zipWith([1, 2], [10, 20], [100, 200], function(a, b, c) {
27829     *   return a + b + c;
27830     * });
27831     * // => [111, 222]
27832     */
27833    var zipWith = baseRest(function(arrays) {
27834      var length = arrays.length,
27835          iteratee = length > 1 ? arrays[length - 1] : undefined;
27836
27837      iteratee = typeof iteratee == 'function' ? (arrays.pop(), iteratee) : undefined;
27838      return unzipWith(arrays, iteratee);
27839    });
27840
27841    /*------------------------------------------------------------------------*/
27842
27843    /**
27844     * Creates a `lodash` wrapper instance that wraps `value` with explicit method
27845     * chain sequences enabled. The result of such sequences must be unwrapped
27846     * with `_#value`.
27847     *
27848     * @static
27849     * @memberOf _
27850     * @since 1.3.0
27851     * @category Seq
27852     * @param {*} value The value to wrap.
27853     * @returns {Object} Returns the new `lodash` wrapper instance.
27854     * @example
27855     *
27856     * var users = [
27857     *   { 'user': 'barney',  'age': 36 },
27858     *   { 'user': 'fred',    'age': 40 },
27859     *   { 'user': 'pebbles', 'age': 1 }
27860     * ];
27861     *
27862     * var youngest = _
27863     *   .chain(users)
27864     *   .sortBy('age')
27865     *   .map(function(o) {
27866     *     return o.user + ' is ' + o.age;
27867     *   })
27868     *   .head()
27869     *   .value();
27870     * // => 'pebbles is 1'
27871     */
27872    function chain(value) {
27873      var result = lodash(value);
27874      result.__chain__ = true;
27875      return result;
27876    }
27877
27878    /**
27879     * This method invokes `interceptor` and returns `value`. The interceptor
27880     * is invoked with one argument; (value). The purpose of this method is to
27881     * "tap into" a method chain sequence in order to modify intermediate results.
27882     *
27883     * @static
27884     * @memberOf _
27885     * @since 0.1.0
27886     * @category Seq
27887     * @param {*} value The value to provide to `interceptor`.
27888     * @param {Function} interceptor The function to invoke.
27889     * @returns {*} Returns `value`.
27890     * @example
27891     *
27892     * _([1, 2, 3])
27893     *  .tap(function(array) {
27894     *    // Mutate input array.
27895     *    array.pop();
27896     *  })
27897     *  .reverse()
27898     *  .value();
27899     * // => [2, 1]
27900     */
27901    function tap(value, interceptor) {
27902      interceptor(value);
27903      return value;
27904    }
27905
27906    /**
27907     * This method is like `_.tap` except that it returns the result of `interceptor`.
27908     * The purpose of this method is to "pass thru" values replacing intermediate
27909     * results in a method chain sequence.
27910     *
27911     * @static
27912     * @memberOf _
27913     * @since 3.0.0
27914     * @category Seq
27915     * @param {*} value The value to provide to `interceptor`.
27916     * @param {Function} interceptor The function to invoke.
27917     * @returns {*} Returns the result of `interceptor`.
27918     * @example
27919     *
27920     * _('  abc  ')
27921     *  .chain()
27922     *  .trim()
27923     *  .thru(function(value) {
27924     *    return [value];
27925     *  })
27926     *  .value();
27927     * // => ['abc']
27928     */
27929    function thru(value, interceptor) {
27930      return interceptor(value);
27931    }
27932
27933    /**
27934     * This method is the wrapper version of `_.at`.
27935     *
27936     * @name at
27937     * @memberOf _
27938     * @since 1.0.0
27939     * @category Seq
27940     * @param {...(string|string[])} [paths] The property paths to pick.
27941     * @returns {Object} Returns the new `lodash` wrapper instance.
27942     * @example
27943     *
27944     * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };
27945     *
27946     * _(object).at(['a[0].b.c', 'a[1]']).value();
27947     * // => [3, 4]
27948     */
27949    var wrapperAt = flatRest(function(paths) {
27950      var length = paths.length,
27951          start = length ? paths[0] : 0,
27952          value = this.__wrapped__,
27953          interceptor = function(object) { return baseAt(object, paths); };
27954
27955      if (length > 1 || this.__actions__.length ||
27956          !(value instanceof LazyWrapper) || !isIndex(start)) {
27957        return this.thru(interceptor);
27958      }
27959      value = value.slice(start, +start + (length ? 1 : 0));
27960      value.__actions__.push({
27961        'func': thru,
27962        'args': [interceptor],
27963        'thisArg': undefined
27964      });
27965      return new LodashWrapper(value, this.__chain__).thru(function(array) {
27966        if (length && !array.length) {
27967          array.push(undefined);
27968        }
27969        return array;
27970      });
27971    });
27972
27973    /**
27974     * Creates a `lodash` wrapper instance with explicit method chain sequences enabled.
27975     *
27976     * @name chain
27977     * @memberOf _
27978     * @since 0.1.0
27979     * @category Seq
27980     * @returns {Object} Returns the new `lodash` wrapper instance.
27981     * @example
27982     *
27983     * var users = [
27984     *   { 'user': 'barney', 'age': 36 },
27985     *   { 'user': 'fred',   'age': 40 }
27986     * ];
27987     *
27988     * // A sequence without explicit chaining.
27989     * _(users).head();
27990     * // => { 'user': 'barney', 'age': 36 }
27991     *
27992     * // A sequence with explicit chaining.
27993     * _(users)
27994     *   .chain()
27995     *   .head()
27996     *   .pick('user')
27997     *   .value();
27998     * // => { 'user': 'barney' }
27999     */
28000    function wrapperChain() {
28001      return chain(this);
28002    }
28003
28004    /**
28005     * Executes the chain sequence and returns the wrapped result.
28006     *
28007     * @name commit
28008     * @memberOf _
28009     * @since 3.2.0
28010     * @category Seq
28011     * @returns {Object} Returns the new `lodash` wrapper instance.
28012     * @example
28013     *
28014     * var array = [1, 2];
28015     * var wrapped = _(array).push(3);
28016     *
28017     * console.log(array);
28018     * // => [1, 2]
28019     *
28020     * wrapped = wrapped.commit();
28021     * console.log(array);
28022     * // => [1, 2, 3]
28023     *
28024     * wrapped.last();
28025     * // => 3
28026     *
28027     * console.log(array);
28028     * // => [1, 2, 3]
28029     */
28030    function wrapperCommit() {
28031      return new LodashWrapper(this.value(), this.__chain__);
28032    }
28033
28034    /**
28035     * Gets the next value on a wrapped object following the
28036     * [iterator protocol](https://mdn.io/iteration_protocols#iterator).
28037     *
28038     * @name next
28039     * @memberOf _
28040     * @since 4.0.0
28041     * @category Seq
28042     * @returns {Object} Returns the next iterator value.
28043     * @example
28044     *
28045     * var wrapped = _([1, 2]);
28046     *
28047     * wrapped.next();
28048     * // => { 'done': false, 'value': 1 }
28049     *
28050     * wrapped.next();
28051     * // => { 'done': false, 'value': 2 }
28052     *
28053     * wrapped.next();
28054     * // => { 'done': true, 'value': undefined }
28055     */
28056    function wrapperNext() {
28057      if (this.__values__ === undefined) {
28058        this.__values__ = toArray(this.value());
28059      }
28060      var done = this.__index__ >= this.__values__.length,
28061          value = done ? undefined : this.__values__[this.__index__++];
28062
28063      return { 'done': done, 'value': value };
28064    }
28065
28066    /**
28067     * Enables the wrapper to be iterable.
28068     *
28069     * @name Symbol.iterator
28070     * @memberOf _
28071     * @since 4.0.0
28072     * @category Seq
28073     * @returns {Object} Returns the wrapper object.
28074     * @example
28075     *
28076     * var wrapped = _([1, 2]);
28077     *
28078     * wrapped[Symbol.iterator]() === wrapped;
28079     * // => true
28080     *
28081     * Array.from(wrapped);
28082     * // => [1, 2]
28083     */
28084    function wrapperToIterator() {
28085      return this;
28086    }
28087
28088    /**
28089     * Creates a clone of the chain sequence planting `value` as the wrapped value.
28090     *
28091     * @name plant
28092     * @memberOf _
28093     * @since 3.2.0
28094     * @category Seq
28095     * @param {*} value The value to plant.
28096     * @returns {Object} Returns the new `lodash` wrapper instance.
28097     * @example
28098     *
28099     * function square(n) {
28100     *   return n * n;
28101     * }
28102     *
28103     * var wrapped = _([1, 2]).map(square);
28104     * var other = wrapped.plant([3, 4]);
28105     *
28106     * other.value();
28107     * // => [9, 16]
28108     *
28109     * wrapped.value();
28110     * // => [1, 4]
28111     */
28112    function wrapperPlant(value) {
28113      var result,
28114          parent = this;
28115
28116      while (parent instanceof baseLodash) {
28117        var clone = wrapperClone(parent);
28118        clone.__index__ = 0;
28119        clone.__values__ = undefined;
28120        if (result) {
28121          previous.__wrapped__ = clone;
28122        } else {
28123          result = clone;
28124        }
28125        var previous = clone;
28126        parent = parent.__wrapped__;
28127      }
28128      previous.__wrapped__ = value;
28129      return result;
28130    }
28131
28132    /**
28133     * This method is the wrapper version of `_.reverse`.
28134     *
28135     * **Note:** This method mutates the wrapped array.
28136     *
28137     * @name reverse
28138     * @memberOf _
28139     * @since 0.1.0
28140     * @category Seq
28141     * @returns {Object} Returns the new `lodash` wrapper instance.
28142     * @example
28143     *
28144     * var array = [1, 2, 3];
28145     *
28146     * _(array).reverse().value()
28147     * // => [3, 2, 1]
28148     *
28149     * console.log(array);
28150     * // => [3, 2, 1]
28151     */
28152    function wrapperReverse() {
28153      var value = this.__wrapped__;
28154      if (value instanceof LazyWrapper) {
28155        var wrapped = value;
28156        if (this.__actions__.length) {
28157          wrapped = new LazyWrapper(this);
28158        }
28159        wrapped = wrapped.reverse();
28160        wrapped.__actions__.push({
28161          'func': thru,
28162          'args': [reverse],
28163          'thisArg': undefined
28164        });
28165        return new LodashWrapper(wrapped, this.__chain__);
28166      }
28167      return this.thru(reverse);
28168    }
28169
28170    /**
28171     * Executes the chain sequence to resolve the unwrapped value.
28172     *
28173     * @name value
28174     * @memberOf _
28175     * @since 0.1.0
28176     * @alias toJSON, valueOf
28177     * @category Seq
28178     * @returns {*} Returns the resolved unwrapped value.
28179     * @example
28180     *
28181     * _([1, 2, 3]).value();
28182     * // => [1, 2, 3]
28183     */
28184    function wrapperValue() {
28185      return baseWrapperValue(this.__wrapped__, this.__actions__);
28186    }
28187
28188    /*------------------------------------------------------------------------*/
28189
28190    /**
28191     * Creates an object composed of keys generated from the results of running
28192     * each element of `collection` thru `iteratee`. The corresponding value of
28193     * each key is the number of times the key was returned by `iteratee`. The
28194     * iteratee is invoked with one argument: (value).
28195     *
28196     * @static
28197     * @memberOf _
28198     * @since 0.5.0
28199     * @category Collection
28200     * @param {Array|Object} collection The collection to iterate over.
28201     * @param {Function} [iteratee=_.identity] The iteratee to transform keys.
28202     * @returns {Object} Returns the composed aggregate object.
28203     * @example
28204     *
28205     * _.countBy([6.1, 4.2, 6.3], Math.floor);
28206     * // => { '4': 1, '6': 2 }
28207     *
28208     * // The `_.property` iteratee shorthand.
28209     * _.countBy(['one', 'two', 'three'], 'length');
28210     * // => { '3': 2, '5': 1 }
28211     */
28212    var countBy = createAggregator(function(result, value, key) {
28213      if (hasOwnProperty.call(result, key)) {
28214        ++result[key];
28215      } else {
28216        baseAssignValue(result, key, 1);
28217      }
28218    });
28219
28220    /**
28221     * Checks if `predicate` returns truthy for **all** elements of `collection`.
28222     * Iteration is stopped once `predicate` returns falsey. The predicate is
28223     * invoked with three arguments: (value, index|key, collection).
28224     *
28225     * **Note:** This method returns `true` for
28226     * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because
28227     * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of
28228     * elements of empty collections.
28229     *
28230     * @static
28231     * @memberOf _
28232     * @since 0.1.0
28233     * @category Collection
28234     * @param {Array|Object} collection The collection to iterate over.
28235     * @param {Function} [predicate=_.identity] The function invoked per iteration.
28236     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
28237     * @returns {boolean} Returns `true` if all elements pass the predicate check,
28238     *  else `false`.
28239     * @example
28240     *
28241     * _.every([true, 1, null, 'yes'], Boolean);
28242     * // => false
28243     *
28244     * var users = [
28245     *   { 'user': 'barney', 'age': 36, 'active': false },
28246     *   { 'user': 'fred',   'age': 40, 'active': false }
28247     * ];
28248     *
28249     * // The `_.matches` iteratee shorthand.
28250     * _.every(users, { 'user': 'barney', 'active': false });
28251     * // => false
28252     *
28253     * // The `_.matchesProperty` iteratee shorthand.
28254     * _.every(users, ['active', false]);
28255     * // => true
28256     *
28257     * // The `_.property` iteratee shorthand.
28258     * _.every(users, 'active');
28259     * // => false
28260     */
28261    function every(collection, predicate, guard) {
28262      var func = isArray(collection) ? arrayEvery : baseEvery;
28263      if (guard && isIterateeCall(collection, predicate, guard)) {
28264        predicate = undefined;
28265      }
28266      return func(collection, getIteratee(predicate, 3));
28267    }
28268
28269    /**
28270     * Iterates over elements of `collection`, returning an array of all elements
28271     * `predicate` returns truthy for. The predicate is invoked with three
28272     * arguments: (value, index|key, collection).
28273     *
28274     * **Note:** Unlike `_.remove`, this method returns a new array.
28275     *
28276     * @static
28277     * @memberOf _
28278     * @since 0.1.0
28279     * @category Collection
28280     * @param {Array|Object} collection The collection to iterate over.
28281     * @param {Function} [predicate=_.identity] The function invoked per iteration.
28282     * @returns {Array} Returns the new filtered array.
28283     * @see _.reject
28284     * @example
28285     *
28286     * var users = [
28287     *   { 'user': 'barney', 'age': 36, 'active': true },
28288     *   { 'user': 'fred',   'age': 40, 'active': false }
28289     * ];
28290     *
28291     * _.filter(users, function(o) { return !o.active; });
28292     * // => objects for ['fred']
28293     *
28294     * // The `_.matches` iteratee shorthand.
28295     * _.filter(users, { 'age': 36, 'active': true });
28296     * // => objects for ['barney']
28297     *
28298     * // The `_.matchesProperty` iteratee shorthand.
28299     * _.filter(users, ['active', false]);
28300     * // => objects for ['fred']
28301     *
28302     * // The `_.property` iteratee shorthand.
28303     * _.filter(users, 'active');
28304     * // => objects for ['barney']
28305     *
28306     * // Combining several predicates using `_.overEvery` or `_.overSome`.
28307     * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]]));
28308     * // => objects for ['fred', 'barney']
28309     */
28310    function filter(collection, predicate) {
28311      var func = isArray(collection) ? arrayFilter : baseFilter;
28312      return func(collection, getIteratee(predicate, 3));
28313    }
28314
28315    /**
28316     * Iterates over elements of `collection`, returning the first element
28317     * `predicate` returns truthy for. The predicate is invoked with three
28318     * arguments: (value, index|key, collection).
28319     *
28320     * @static
28321     * @memberOf _
28322     * @since 0.1.0
28323     * @category Collection
28324     * @param {Array|Object} collection The collection to inspect.
28325     * @param {Function} [predicate=_.identity] The function invoked per iteration.
28326     * @param {number} [fromIndex=0] The index to search from.
28327     * @returns {*} Returns the matched element, else `undefined`.
28328     * @example
28329     *
28330     * var users = [
28331     *   { 'user': 'barney',  'age': 36, 'active': true },
28332     *   { 'user': 'fred',    'age': 40, 'active': false },
28333     *   { 'user': 'pebbles', 'age': 1,  'active': true }
28334     * ];
28335     *
28336     * _.find(users, function(o) { return o.age < 40; });
28337     * // => object for 'barney'
28338     *
28339     * // The `_.matches` iteratee shorthand.
28340     * _.find(users, { 'age': 1, 'active': true });
28341     * // => object for 'pebbles'
28342     *
28343     * // The `_.matchesProperty` iteratee shorthand.
28344     * _.find(users, ['active', false]);
28345     * // => object for 'fred'
28346     *
28347     * // The `_.property` iteratee shorthand.
28348     * _.find(users, 'active');
28349     * // => object for 'barney'
28350     */
28351    var find = createFind(findIndex);
28352
28353    /**
28354     * This method is like `_.find` except that it iterates over elements of
28355     * `collection` from right to left.
28356     *
28357     * @static
28358     * @memberOf _
28359     * @since 2.0.0
28360     * @category Collection
28361     * @param {Array|Object} collection The collection to inspect.
28362     * @param {Function} [predicate=_.identity] The function invoked per iteration.
28363     * @param {number} [fromIndex=collection.length-1] The index to search from.
28364     * @returns {*} Returns the matched element, else `undefined`.
28365     * @example
28366     *
28367     * _.findLast([1, 2, 3, 4], function(n) {
28368     *   return n % 2 == 1;
28369     * });
28370     * // => 3
28371     */
28372    var findLast = createFind(findLastIndex);
28373
28374    /**
28375     * Creates a flattened array of values by running each element in `collection`
28376     * thru `iteratee` and flattening the mapped results. The iteratee is invoked
28377     * with three arguments: (value, index|key, collection).
28378     *
28379     * @static
28380     * @memberOf _
28381     * @since 4.0.0
28382     * @category Collection
28383     * @param {Array|Object} collection The collection to iterate over.
28384     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
28385     * @returns {Array} Returns the new flattened array.
28386     * @example
28387     *
28388     * function duplicate(n) {
28389     *   return [n, n];
28390     * }
28391     *
28392     * _.flatMap([1, 2], duplicate);
28393     * // => [1, 1, 2, 2]
28394     */
28395    function flatMap(collection, iteratee) {
28396      return baseFlatten(map(collection, iteratee), 1);
28397    }
28398
28399    /**
28400     * This method is like `_.flatMap` except that it recursively flattens the
28401     * mapped results.
28402     *
28403     * @static
28404     * @memberOf _
28405     * @since 4.7.0
28406     * @category Collection
28407     * @param {Array|Object} collection The collection to iterate over.
28408     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
28409     * @returns {Array} Returns the new flattened array.
28410     * @example
28411     *
28412     * function duplicate(n) {
28413     *   return [[[n, n]]];
28414     * }
28415     *
28416     * _.flatMapDeep([1, 2], duplicate);
28417     * // => [1, 1, 2, 2]
28418     */
28419    function flatMapDeep(collection, iteratee) {
28420      return baseFlatten(map(collection, iteratee), INFINITY);
28421    }
28422
28423    /**
28424     * This method is like `_.flatMap` except that it recursively flattens the
28425     * mapped results up to `depth` times.
28426     *
28427     * @static
28428     * @memberOf _
28429     * @since 4.7.0
28430     * @category Collection
28431     * @param {Array|Object} collection The collection to iterate over.
28432     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
28433     * @param {number} [depth=1] The maximum recursion depth.
28434     * @returns {Array} Returns the new flattened array.
28435     * @example
28436     *
28437     * function duplicate(n) {
28438     *   return [[[n, n]]];
28439     * }
28440     *
28441     * _.flatMapDepth([1, 2], duplicate, 2);
28442     * // => [[1, 1], [2, 2]]
28443     */
28444    function flatMapDepth(collection, iteratee, depth) {
28445      depth = depth === undefined ? 1 : toInteger(depth);
28446      return baseFlatten(map(collection, iteratee), depth);
28447    }
28448
28449    /**
28450     * Iterates over elements of `collection` and invokes `iteratee` for each element.
28451     * The iteratee is invoked with three arguments: (value, index|key, collection).
28452     * Iteratee functions may exit iteration early by explicitly returning `false`.
28453     *
28454     * **Note:** As with other "Collections" methods, objects with a "length"
28455     * property are iterated like arrays. To avoid this behavior use `_.forIn`
28456     * or `_.forOwn` for object iteration.
28457     *
28458     * @static
28459     * @memberOf _
28460     * @since 0.1.0
28461     * @alias each
28462     * @category Collection
28463     * @param {Array|Object} collection The collection to iterate over.
28464     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
28465     * @returns {Array|Object} Returns `collection`.
28466     * @see _.forEachRight
28467     * @example
28468     *
28469     * _.forEach([1, 2], function(value) {
28470     *   console.log(value);
28471     * });
28472     * // => Logs `1` then `2`.
28473     *
28474     * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) {
28475     *   console.log(key);
28476     * });
28477     * // => Logs 'a' then 'b' (iteration order is not guaranteed).
28478     */
28479    function forEach(collection, iteratee) {
28480      var func = isArray(collection) ? arrayEach : baseEach;
28481      return func(collection, getIteratee(iteratee, 3));
28482    }
28483
28484    /**
28485     * This method is like `_.forEach` except that it iterates over elements of
28486     * `collection` from right to left.
28487     *
28488     * @static
28489     * @memberOf _
28490     * @since 2.0.0
28491     * @alias eachRight
28492     * @category Collection
28493     * @param {Array|Object} collection The collection to iterate over.
28494     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
28495     * @returns {Array|Object} Returns `collection`.
28496     * @see _.forEach
28497     * @example
28498     *
28499     * _.forEachRight([1, 2], function(value) {
28500     *   console.log(value);
28501     * });
28502     * // => Logs `2` then `1`.
28503     */
28504    function forEachRight(collection, iteratee) {
28505      var func = isArray(collection) ? arrayEachRight : baseEachRight;
28506      return func(collection, getIteratee(iteratee, 3));
28507    }
28508
28509    /**
28510     * Creates an object composed of keys generated from the results of running
28511     * each element of `collection` thru `iteratee`. The order of grouped values
28512     * is determined by the order they occur in `collection`. The corresponding
28513     * value of each key is an array of elements responsible for generating the
28514     * key. The iteratee is invoked with one argument: (value).
28515     *
28516     * @static
28517     * @memberOf _
28518     * @since 0.1.0
28519     * @category Collection
28520     * @param {Array|Object} collection The collection to iterate over.
28521     * @param {Function} [iteratee=_.identity] The iteratee to transform keys.
28522     * @returns {Object} Returns the composed aggregate object.
28523     * @example
28524     *
28525     * _.groupBy([6.1, 4.2, 6.3], Math.floor);
28526     * // => { '4': [4.2], '6': [6.1, 6.3] }
28527     *
28528     * // The `_.property` iteratee shorthand.
28529     * _.groupBy(['one', 'two', 'three'], 'length');
28530     * // => { '3': ['one', 'two'], '5': ['three'] }
28531     */
28532    var groupBy = createAggregator(function(result, value, key) {
28533      if (hasOwnProperty.call(result, key)) {
28534        result[key].push(value);
28535      } else {
28536        baseAssignValue(result, key, [value]);
28537      }
28538    });
28539
28540    /**
28541     * Checks if `value` is in `collection`. If `collection` is a string, it's
28542     * checked for a substring of `value`, otherwise
28543     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
28544     * is used for equality comparisons. If `fromIndex` is negative, it's used as
28545     * the offset from the end of `collection`.
28546     *
28547     * @static
28548     * @memberOf _
28549     * @since 0.1.0
28550     * @category Collection
28551     * @param {Array|Object|string} collection The collection to inspect.
28552     * @param {*} value The value to search for.
28553     * @param {number} [fromIndex=0] The index to search from.
28554     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.
28555     * @returns {boolean} Returns `true` if `value` is found, else `false`.
28556     * @example
28557     *
28558     * _.includes([1, 2, 3], 1);
28559     * // => true
28560     *
28561     * _.includes([1, 2, 3], 1, 2);
28562     * // => false
28563     *
28564     * _.includes({ 'a': 1, 'b': 2 }, 1);
28565     * // => true
28566     *
28567     * _.includes('abcd', 'bc');
28568     * // => true
28569     */
28570    function includes(collection, value, fromIndex, guard) {
28571      collection = isArrayLike(collection) ? collection : values(collection);
28572      fromIndex = (fromIndex && !guard) ? toInteger(fromIndex) : 0;
28573
28574      var length = collection.length;
28575      if (fromIndex < 0) {
28576        fromIndex = nativeMax(length + fromIndex, 0);
28577      }
28578      return isString(collection)
28579        ? (fromIndex <= length && collection.indexOf(value, fromIndex) > -1)
28580        : (!!length && baseIndexOf(collection, value, fromIndex) > -1);
28581    }
28582
28583    /**
28584     * Invokes the method at `path` of each element in `collection`, returning
28585     * an array of the results of each invoked method. Any additional arguments
28586     * are provided to each invoked method. If `path` is a function, it's invoked
28587     * for, and `this` bound to, each element in `collection`.
28588     *
28589     * @static
28590     * @memberOf _
28591     * @since 4.0.0
28592     * @category Collection
28593     * @param {Array|Object} collection The collection to iterate over.
28594     * @param {Array|Function|string} path The path of the method to invoke or
28595     *  the function invoked per iteration.
28596     * @param {...*} [args] The arguments to invoke each method with.
28597     * @returns {Array} Returns the array of results.
28598     * @example
28599     *
28600     * _.invokeMap([[5, 1, 7], [3, 2, 1]], 'sort');
28601     * // => [[1, 5, 7], [1, 2, 3]]
28602     *
28603     * _.invokeMap([123, 456], String.prototype.split, '');
28604     * // => [['1', '2', '3'], ['4', '5', '6']]
28605     */
28606    var invokeMap = baseRest(function(collection, path, args) {
28607      var index = -1,
28608          isFunc = typeof path == 'function',
28609          result = isArrayLike(collection) ? Array(collection.length) : [];
28610
28611      baseEach(collection, function(value) {
28612        result[++index] = isFunc ? apply(path, value, args) : baseInvoke(value, path, args);
28613      });
28614      return result;
28615    });
28616
28617    /**
28618     * Creates an object composed of keys generated from the results of running
28619     * each element of `collection` thru `iteratee`. The corresponding value of
28620     * each key is the last element responsible for generating the key. The
28621     * iteratee is invoked with one argument: (value).
28622     *
28623     * @static
28624     * @memberOf _
28625     * @since 4.0.0
28626     * @category Collection
28627     * @param {Array|Object} collection The collection to iterate over.
28628     * @param {Function} [iteratee=_.identity] The iteratee to transform keys.
28629     * @returns {Object} Returns the composed aggregate object.
28630     * @example
28631     *
28632     * var array = [
28633     *   { 'dir': 'left', 'code': 97 },
28634     *   { 'dir': 'right', 'code': 100 }
28635     * ];
28636     *
28637     * _.keyBy(array, function(o) {
28638     *   return String.fromCharCode(o.code);
28639     * });
28640     * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } }
28641     *
28642     * _.keyBy(array, 'dir');
28643     * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } }
28644     */
28645    var keyBy = createAggregator(function(result, value, key) {
28646      baseAssignValue(result, key, value);
28647    });
28648
28649    /**
28650     * Creates an array of values by running each element in `collection` thru
28651     * `iteratee`. The iteratee is invoked with three arguments:
28652     * (value, index|key, collection).
28653     *
28654     * Many lodash methods are guarded to work as iteratees for methods like
28655     * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`.
28656     *
28657     * The guarded methods are:
28658     * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`,
28659     * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`,
28660     * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`,
28661     * `template`, `trim`, `trimEnd`, `trimStart`, and `words`
28662     *
28663     * @static
28664     * @memberOf _
28665     * @since 0.1.0
28666     * @category Collection
28667     * @param {Array|Object} collection The collection to iterate over.
28668     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
28669     * @returns {Array} Returns the new mapped array.
28670     * @example
28671     *
28672     * function square(n) {
28673     *   return n * n;
28674     * }
28675     *
28676     * _.map([4, 8], square);
28677     * // => [16, 64]
28678     *
28679     * _.map({ 'a': 4, 'b': 8 }, square);
28680     * // => [16, 64] (iteration order is not guaranteed)
28681     *
28682     * var users = [
28683     *   { 'user': 'barney' },
28684     *   { 'user': 'fred' }
28685     * ];
28686     *
28687     * // The `_.property` iteratee shorthand.
28688     * _.map(users, 'user');
28689     * // => ['barney', 'fred']
28690     */
28691    function map(collection, iteratee) {
28692      var func = isArray(collection) ? arrayMap : baseMap;
28693      return func(collection, getIteratee(iteratee, 3));
28694    }
28695
28696    /**
28697     * This method is like `_.sortBy` except that it allows specifying the sort
28698     * orders of the iteratees to sort by. If `orders` is unspecified, all values
28699     * are sorted in ascending order. Otherwise, specify an order of "desc" for
28700     * descending or "asc" for ascending sort order of corresponding values.
28701     *
28702     * @static
28703     * @memberOf _
28704     * @since 4.0.0
28705     * @category Collection
28706     * @param {Array|Object} collection The collection to iterate over.
28707     * @param {Array[]|Function[]|Object[]|string[]} [iteratees=[_.identity]]
28708     *  The iteratees to sort by.
28709     * @param {string[]} [orders] The sort orders of `iteratees`.
28710     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.
28711     * @returns {Array} Returns the new sorted array.
28712     * @example
28713     *
28714     * var users = [
28715     *   { 'user': 'fred',   'age': 48 },
28716     *   { 'user': 'barney', 'age': 34 },
28717     *   { 'user': 'fred',   'age': 40 },
28718     *   { 'user': 'barney', 'age': 36 }
28719     * ];
28720     *
28721     * // Sort by `user` in ascending order and by `age` in descending order.
28722     * _.orderBy(users, ['user', 'age'], ['asc', 'desc']);
28723     * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]
28724     */
28725    function orderBy(collection, iteratees, orders, guard) {
28726      if (collection == null) {
28727        return [];
28728      }
28729      if (!isArray(iteratees)) {
28730        iteratees = iteratees == null ? [] : [iteratees];
28731      }
28732      orders = guard ? undefined : orders;
28733      if (!isArray(orders)) {
28734        orders = orders == null ? [] : [orders];
28735      }
28736      return baseOrderBy(collection, iteratees, orders);
28737    }
28738
28739    /**
28740     * Creates an array of elements split into two groups, the first of which
28741     * contains elements `predicate` returns truthy for, the second of which
28742     * contains elements `predicate` returns falsey for. The predicate is
28743     * invoked with one argument: (value).
28744     *
28745     * @static
28746     * @memberOf _
28747     * @since 3.0.0
28748     * @category Collection
28749     * @param {Array|Object} collection The collection to iterate over.
28750     * @param {Function} [predicate=_.identity] The function invoked per iteration.
28751     * @returns {Array} Returns the array of grouped elements.
28752     * @example
28753     *
28754     * var users = [
28755     *   { 'user': 'barney',  'age': 36, 'active': false },
28756     *   { 'user': 'fred',    'age': 40, 'active': true },
28757     *   { 'user': 'pebbles', 'age': 1,  'active': false }
28758     * ];
28759     *
28760     * _.partition(users, function(o) { return o.active; });
28761     * // => objects for [['fred'], ['barney', 'pebbles']]
28762     *
28763     * // The `_.matches` iteratee shorthand.
28764     * _.partition(users, { 'age': 1, 'active': false });
28765     * // => objects for [['pebbles'], ['barney', 'fred']]
28766     *
28767     * // The `_.matchesProperty` iteratee shorthand.
28768     * _.partition(users, ['active', false]);
28769     * // => objects for [['barney', 'pebbles'], ['fred']]
28770     *
28771     * // The `_.property` iteratee shorthand.
28772     * _.partition(users, 'active');
28773     * // => objects for [['fred'], ['barney', 'pebbles']]
28774     */
28775    var partition = createAggregator(function(result, value, key) {
28776      result[key ? 0 : 1].push(value);
28777    }, function() { return [[], []]; });
28778
28779    /**
28780     * Reduces `collection` to a value which is the accumulated result of running
28781     * each element in `collection` thru `iteratee`, where each successive
28782     * invocation is supplied the return value of the previous. If `accumulator`
28783     * is not given, the first element of `collection` is used as the initial
28784     * value. The iteratee is invoked with four arguments:
28785     * (accumulator, value, index|key, collection).
28786     *
28787     * Many lodash methods are guarded to work as iteratees for methods like
28788     * `_.reduce`, `_.reduceRight`, and `_.transform`.
28789     *
28790     * The guarded methods are:
28791     * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`,
28792     * and `sortBy`
28793     *
28794     * @static
28795     * @memberOf _
28796     * @since 0.1.0
28797     * @category Collection
28798     * @param {Array|Object} collection The collection to iterate over.
28799     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
28800     * @param {*} [accumulator] The initial value.
28801     * @returns {*} Returns the accumulated value.
28802     * @see _.reduceRight
28803     * @example
28804     *
28805     * _.reduce([1, 2], function(sum, n) {
28806     *   return sum + n;
28807     * }, 0);
28808     * // => 3
28809     *
28810     * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {
28811     *   (result[value] || (result[value] = [])).push(key);
28812     *   return result;
28813     * }, {});
28814     * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed)
28815     */
28816    function reduce(collection, iteratee, accumulator) {
28817      var func = isArray(collection) ? arrayReduce : baseReduce,
28818          initAccum = arguments.length < 3;
28819
28820      return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEach);
28821    }
28822
28823    /**
28824     * This method is like `_.reduce` except that it iterates over elements of
28825     * `collection` from right to left.
28826     *
28827     * @static
28828     * @memberOf _
28829     * @since 0.1.0
28830     * @category Collection
28831     * @param {Array|Object} collection The collection to iterate over.
28832     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
28833     * @param {*} [accumulator] The initial value.
28834     * @returns {*} Returns the accumulated value.
28835     * @see _.reduce
28836     * @example
28837     *
28838     * var array = [[0, 1], [2, 3], [4, 5]];
28839     *
28840     * _.reduceRight(array, function(flattened, other) {
28841     *   return flattened.concat(other);
28842     * }, []);
28843     * // => [4, 5, 2, 3, 0, 1]
28844     */
28845    function reduceRight(collection, iteratee, accumulator) {
28846      var func = isArray(collection) ? arrayReduceRight : baseReduce,
28847          initAccum = arguments.length < 3;
28848
28849      return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEachRight);
28850    }
28851
28852    /**
28853     * The opposite of `_.filter`; this method returns the elements of `collection`
28854     * that `predicate` does **not** return truthy for.
28855     *
28856     * @static
28857     * @memberOf _
28858     * @since 0.1.0
28859     * @category Collection
28860     * @param {Array|Object} collection The collection to iterate over.
28861     * @param {Function} [predicate=_.identity] The function invoked per iteration.
28862     * @returns {Array} Returns the new filtered array.
28863     * @see _.filter
28864     * @example
28865     *
28866     * var users = [
28867     *   { 'user': 'barney', 'age': 36, 'active': false },
28868     *   { 'user': 'fred',   'age': 40, 'active': true }
28869     * ];
28870     *
28871     * _.reject(users, function(o) { return !o.active; });
28872     * // => objects for ['fred']
28873     *
28874     * // The `_.matches` iteratee shorthand.
28875     * _.reject(users, { 'age': 40, 'active': true });
28876     * // => objects for ['barney']
28877     *
28878     * // The `_.matchesProperty` iteratee shorthand.
28879     * _.reject(users, ['active', false]);
28880     * // => objects for ['fred']
28881     *
28882     * // The `_.property` iteratee shorthand.
28883     * _.reject(users, 'active');
28884     * // => objects for ['barney']
28885     */
28886    function reject(collection, predicate) {
28887      var func = isArray(collection) ? arrayFilter : baseFilter;
28888      return func(collection, negate(getIteratee(predicate, 3)));
28889    }
28890
28891    /**
28892     * Gets a random element from `collection`.
28893     *
28894     * @static
28895     * @memberOf _
28896     * @since 2.0.0
28897     * @category Collection
28898     * @param {Array|Object} collection The collection to sample.
28899     * @returns {*} Returns the random element.
28900     * @example
28901     *
28902     * _.sample([1, 2, 3, 4]);
28903     * // => 2
28904     */
28905    function sample(collection) {
28906      var func = isArray(collection) ? arraySample : baseSample;
28907      return func(collection);
28908    }
28909
28910    /**
28911     * Gets `n` random elements at unique keys from `collection` up to the
28912     * size of `collection`.
28913     *
28914     * @static
28915     * @memberOf _
28916     * @since 4.0.0
28917     * @category Collection
28918     * @param {Array|Object} collection The collection to sample.
28919     * @param {number} [n=1] The number of elements to sample.
28920     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
28921     * @returns {Array} Returns the random elements.
28922     * @example
28923     *
28924     * _.sampleSize([1, 2, 3], 2);
28925     * // => [3, 1]
28926     *
28927     * _.sampleSize([1, 2, 3], 4);
28928     * // => [2, 3, 1]
28929     */
28930    function sampleSize(collection, n, guard) {
28931      if ((guard ? isIterateeCall(collection, n, guard) : n === undefined)) {
28932        n = 1;
28933      } else {
28934        n = toInteger(n);
28935      }
28936      var func = isArray(collection) ? arraySampleSize : baseSampleSize;
28937      return func(collection, n);
28938    }
28939
28940    /**
28941     * Creates an array of shuffled values, using a version of the
28942     * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle).
28943     *
28944     * @static
28945     * @memberOf _
28946     * @since 0.1.0
28947     * @category Collection
28948     * @param {Array|Object} collection The collection to shuffle.
28949     * @returns {Array} Returns the new shuffled array.
28950     * @example
28951     *
28952     * _.shuffle([1, 2, 3, 4]);
28953     * // => [4, 1, 3, 2]
28954     */
28955    function shuffle(collection) {
28956      var func = isArray(collection) ? arrayShuffle : baseShuffle;
28957      return func(collection);
28958    }
28959
28960    /**
28961     * Gets the size of `collection` by returning its length for array-like
28962     * values or the number of own enumerable string keyed properties for objects.
28963     *
28964     * @static
28965     * @memberOf _
28966     * @since 0.1.0
28967     * @category Collection
28968     * @param {Array|Object|string} collection The collection to inspect.
28969     * @returns {number} Returns the collection size.
28970     * @example
28971     *
28972     * _.size([1, 2, 3]);
28973     * // => 3
28974     *
28975     * _.size({ 'a': 1, 'b': 2 });
28976     * // => 2
28977     *
28978     * _.size('pebbles');
28979     * // => 7
28980     */
28981    function size(collection) {
28982      if (collection == null) {
28983        return 0;
28984      }
28985      if (isArrayLike(collection)) {
28986        return isString(collection) ? stringSize(collection) : collection.length;
28987      }
28988      var tag = getTag(collection);
28989      if (tag == mapTag || tag == setTag) {
28990        return collection.size;
28991      }
28992      return baseKeys(collection).length;
28993    }
28994
28995    /**
28996     * Checks if `predicate` returns truthy for **any** element of `collection`.
28997     * Iteration is stopped once `predicate` returns truthy. The predicate is
28998     * invoked with three arguments: (value, index|key, collection).
28999     *
29000     * @static
29001     * @memberOf _
29002     * @since 0.1.0
29003     * @category Collection
29004     * @param {Array|Object} collection The collection to iterate over.
29005     * @param {Function} [predicate=_.identity] The function invoked per iteration.
29006     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
29007     * @returns {boolean} Returns `true` if any element passes the predicate check,
29008     *  else `false`.
29009     * @example
29010     *
29011     * _.some([null, 0, 'yes', false], Boolean);
29012     * // => true
29013     *
29014     * var users = [
29015     *   { 'user': 'barney', 'active': true },
29016     *   { 'user': 'fred',   'active': false }
29017     * ];
29018     *
29019     * // The `_.matches` iteratee shorthand.
29020     * _.some(users, { 'user': 'barney', 'active': false });
29021     * // => false
29022     *
29023     * // The `_.matchesProperty` iteratee shorthand.
29024     * _.some(users, ['active', false]);
29025     * // => true
29026     *
29027     * // The `_.property` iteratee shorthand.
29028     * _.some(users, 'active');
29029     * // => true
29030     */
29031    function some(collection, predicate, guard) {
29032      var func = isArray(collection) ? arraySome : baseSome;
29033      if (guard && isIterateeCall(collection, predicate, guard)) {
29034        predicate = undefined;
29035      }
29036      return func(collection, getIteratee(predicate, 3));
29037    }
29038
29039    /**
29040     * Creates an array of elements, sorted in ascending order by the results of
29041     * running each element in a collection thru each iteratee. This method
29042     * performs a stable sort, that is, it preserves the original sort order of
29043     * equal elements. The iteratees are invoked with one argument: (value).
29044     *
29045     * @static
29046     * @memberOf _
29047     * @since 0.1.0
29048     * @category Collection
29049     * @param {Array|Object} collection The collection to iterate over.
29050     * @param {...(Function|Function[])} [iteratees=[_.identity]]
29051     *  The iteratees to sort by.
29052     * @returns {Array} Returns the new sorted array.
29053     * @example
29054     *
29055     * var users = [
29056     *   { 'user': 'fred',   'age': 48 },
29057     *   { 'user': 'barney', 'age': 36 },
29058     *   { 'user': 'fred',   'age': 30 },
29059     *   { 'user': 'barney', 'age': 34 }
29060     * ];
29061     *
29062     * _.sortBy(users, [function(o) { return o.user; }]);
29063     * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 30]]
29064     *
29065     * _.sortBy(users, ['user', 'age']);
29066     * // => objects for [['barney', 34], ['barney', 36], ['fred', 30], ['fred', 48]]
29067     */
29068    var sortBy = baseRest(function(collection, iteratees) {
29069      if (collection == null) {
29070        return [];
29071      }
29072      var length = iteratees.length;
29073      if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) {
29074        iteratees = [];
29075      } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) {
29076        iteratees = [iteratees[0]];
29077      }
29078      return baseOrderBy(collection, baseFlatten(iteratees, 1), []);
29079    });
29080
29081    /*------------------------------------------------------------------------*/
29082
29083    /**
29084     * Gets the timestamp of the number of milliseconds that have elapsed since
29085     * the Unix epoch (1 January 1970 00:00:00 UTC).
29086     *
29087     * @static
29088     * @memberOf _
29089     * @since 2.4.0
29090     * @category Date
29091     * @returns {number} Returns the timestamp.
29092     * @example
29093     *
29094     * _.defer(function(stamp) {
29095     *   console.log(_.now() - stamp);
29096     * }, _.now());
29097     * // => Logs the number of milliseconds it took for the deferred invocation.
29098     */
29099    var now = ctxNow || function() {
29100      return root.Date.now();
29101    };
29102
29103    /*------------------------------------------------------------------------*/
29104
29105    /**
29106     * The opposite of `_.before`; this method creates a function that invokes
29107     * `func` once it's called `n` or more times.
29108     *
29109     * @static
29110     * @memberOf _
29111     * @since 0.1.0
29112     * @category Function
29113     * @param {number} n The number of calls before `func` is invoked.
29114     * @param {Function} func The function to restrict.
29115     * @returns {Function} Returns the new restricted function.
29116     * @example
29117     *
29118     * var saves = ['profile', 'settings'];
29119     *
29120     * var done = _.after(saves.length, function() {
29121     *   console.log('done saving!');
29122     * });
29123     *
29124     * _.forEach(saves, function(type) {
29125     *   asyncSave({ 'type': type, 'complete': done });
29126     * });
29127     * // => Logs 'done saving!' after the two async saves have completed.
29128     */
29129    function after(n, func) {
29130      if (typeof func != 'function') {
29131        throw new TypeError(FUNC_ERROR_TEXT);
29132      }
29133      n = toInteger(n);
29134      return function() {
29135        if (--n < 1) {
29136          return func.apply(this, arguments);
29137        }
29138      };
29139    }
29140
29141    /**
29142     * Creates a function that invokes `func`, with up to `n` arguments,
29143     * ignoring any additional arguments.
29144     *
29145     * @static
29146     * @memberOf _
29147     * @since 3.0.0
29148     * @category Function
29149     * @param {Function} func The function to cap arguments for.
29150     * @param {number} [n=func.length] The arity cap.
29151     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
29152     * @returns {Function} Returns the new capped function.
29153     * @example
29154     *
29155     * _.map(['6', '8', '10'], _.ary(parseInt, 1));
29156     * // => [6, 8, 10]
29157     */
29158    function ary(func, n, guard) {
29159      n = guard ? undefined : n;
29160      n = (func && n == null) ? func.length : n;
29161      return createWrap(func, WRAP_ARY_FLAG, undefined, undefined, undefined, undefined, n);
29162    }
29163
29164    /**
29165     * Creates a function that invokes `func`, with the `this` binding and arguments
29166     * of the created function, while it's called less than `n` times. Subsequent
29167     * calls to the created function return the result of the last `func` invocation.
29168     *
29169     * @static
29170     * @memberOf _
29171     * @since 3.0.0
29172     * @category Function
29173     * @param {number} n The number of calls at which `func` is no longer invoked.
29174     * @param {Function} func The function to restrict.
29175     * @returns {Function} Returns the new restricted function.
29176     * @example
29177     *
29178     * jQuery(element).on('click', _.before(5, addContactToList));
29179     * // => Allows adding up to 4 contacts to the list.
29180     */
29181    function before(n, func) {
29182      var result;
29183      if (typeof func != 'function') {
29184        throw new TypeError(FUNC_ERROR_TEXT);
29185      }
29186      n = toInteger(n);
29187      return function() {
29188        if (--n > 0) {
29189          result = func.apply(this, arguments);
29190        }
29191        if (n <= 1) {
29192          func = undefined;
29193        }
29194        return result;
29195      };
29196    }
29197
29198    /**
29199     * Creates a function that invokes `func` with the `this` binding of `thisArg`
29200     * and `partials` prepended to the arguments it receives.
29201     *
29202     * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds,
29203     * may be used as a placeholder for partially applied arguments.
29204     *
29205     * **Note:** Unlike native `Function#bind`, this method doesn't set the "length"
29206     * property of bound functions.
29207     *
29208     * @static
29209     * @memberOf _
29210     * @since 0.1.0
29211     * @category Function
29212     * @param {Function} func The function to bind.
29213     * @param {*} thisArg The `this` binding of `func`.
29214     * @param {...*} [partials] The arguments to be partially applied.
29215     * @returns {Function} Returns the new bound function.
29216     * @example
29217     *
29218     * function greet(greeting, punctuation) {
29219     *   return greeting + ' ' + this.user + punctuation;
29220     * }
29221     *
29222     * var object = { 'user': 'fred' };
29223     *
29224     * var bound = _.bind(greet, object, 'hi');
29225     * bound('!');
29226     * // => 'hi fred!'
29227     *
29228     * // Bound with placeholders.
29229     * var bound = _.bind(greet, object, _, '!');
29230     * bound('hi');
29231     * // => 'hi fred!'
29232     */
29233    var bind = baseRest(function(func, thisArg, partials) {
29234      var bitmask = WRAP_BIND_FLAG;
29235      if (partials.length) {
29236        var holders = replaceHolders(partials, getHolder(bind));
29237        bitmask |= WRAP_PARTIAL_FLAG;
29238      }
29239      return createWrap(func, bitmask, thisArg, partials, holders);
29240    });
29241
29242    /**
29243     * Creates a function that invokes the method at `object[key]` with `partials`
29244     * prepended to the arguments it receives.
29245     *
29246     * This method differs from `_.bind` by allowing bound functions to reference
29247     * methods that may be redefined or don't yet exist. See
29248     * [Peter Michaux's article](http://peter.michaux.ca/articles/lazy-function-definition-pattern)
29249     * for more details.
29250     *
29251     * The `_.bindKey.placeholder` value, which defaults to `_` in monolithic
29252     * builds, may be used as a placeholder for partially applied arguments.
29253     *
29254     * @static
29255     * @memberOf _
29256     * @since 0.10.0
29257     * @category Function
29258     * @param {Object} object The object to invoke the method on.
29259     * @param {string} key The key of the method.
29260     * @param {...*} [partials] The arguments to be partially applied.
29261     * @returns {Function} Returns the new bound function.
29262     * @example
29263     *
29264     * var object = {
29265     *   'user': 'fred',
29266     *   'greet': function(greeting, punctuation) {
29267     *     return greeting + ' ' + this.user + punctuation;
29268     *   }
29269     * };
29270     *
29271     * var bound = _.bindKey(object, 'greet', 'hi');
29272     * bound('!');
29273     * // => 'hi fred!'
29274     *
29275     * object.greet = function(greeting, punctuation) {
29276     *   return greeting + 'ya ' + this.user + punctuation;
29277     * };
29278     *
29279     * bound('!');
29280     * // => 'hiya fred!'
29281     *
29282     * // Bound with placeholders.
29283     * var bound = _.bindKey(object, 'greet', _, '!');
29284     * bound('hi');
29285     * // => 'hiya fred!'
29286     */
29287    var bindKey = baseRest(function(object, key, partials) {
29288      var bitmask = WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG;
29289      if (partials.length) {
29290        var holders = replaceHolders(partials, getHolder(bindKey));
29291        bitmask |= WRAP_PARTIAL_FLAG;
29292      }
29293      return createWrap(key, bitmask, object, partials, holders);
29294    });
29295
29296    /**
29297     * Creates a function that accepts arguments of `func` and either invokes
29298     * `func` returning its result, if at least `arity` number of arguments have
29299     * been provided, or returns a function that accepts the remaining `func`
29300     * arguments, and so on. The arity of `func` may be specified if `func.length`
29301     * is not sufficient.
29302     *
29303     * The `_.curry.placeholder` value, which defaults to `_` in monolithic builds,
29304     * may be used as a placeholder for provided arguments.
29305     *
29306     * **Note:** This method doesn't set the "length" property of curried functions.
29307     *
29308     * @static
29309     * @memberOf _
29310     * @since 2.0.0
29311     * @category Function
29312     * @param {Function} func The function to curry.
29313     * @param {number} [arity=func.length] The arity of `func`.
29314     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
29315     * @returns {Function} Returns the new curried function.
29316     * @example
29317     *
29318     * var abc = function(a, b, c) {
29319     *   return [a, b, c];
29320     * };
29321     *
29322     * var curried = _.curry(abc);
29323     *
29324     * curried(1)(2)(3);
29325     * // => [1, 2, 3]
29326     *
29327     * curried(1, 2)(3);
29328     * // => [1, 2, 3]
29329     *
29330     * curried(1, 2, 3);
29331     * // => [1, 2, 3]
29332     *
29333     * // Curried with placeholders.
29334     * curried(1)(_, 3)(2);
29335     * // => [1, 2, 3]
29336     */
29337    function curry(func, arity, guard) {
29338      arity = guard ? undefined : arity;
29339      var result = createWrap(func, WRAP_CURRY_FLAG, undefined, undefined, undefined, undefined, undefined, arity);
29340      result.placeholder = curry.placeholder;
29341      return result;
29342    }
29343
29344    /**
29345     * This method is like `_.curry` except that arguments are applied to `func`
29346     * in the manner of `_.partialRight` instead of `_.partial`.
29347     *
29348     * The `_.curryRight.placeholder` value, which defaults to `_` in monolithic
29349     * builds, may be used as a placeholder for provided arguments.
29350     *
29351     * **Note:** This method doesn't set the "length" property of curried functions.
29352     *
29353     * @static
29354     * @memberOf _
29355     * @since 3.0.0
29356     * @category Function
29357     * @param {Function} func The function to curry.
29358     * @param {number} [arity=func.length] The arity of `func`.
29359     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
29360     * @returns {Function} Returns the new curried function.
29361     * @example
29362     *
29363     * var abc = function(a, b, c) {
29364     *   return [a, b, c];
29365     * };
29366     *
29367     * var curried = _.curryRight(abc);
29368     *
29369     * curried(3)(2)(1);
29370     * // => [1, 2, 3]
29371     *
29372     * curried(2, 3)(1);
29373     * // => [1, 2, 3]
29374     *
29375     * curried(1, 2, 3);
29376     * // => [1, 2, 3]
29377     *
29378     * // Curried with placeholders.
29379     * curried(3)(1, _)(2);
29380     * // => [1, 2, 3]
29381     */
29382    function curryRight(func, arity, guard) {
29383      arity = guard ? undefined : arity;
29384      var result = createWrap(func, WRAP_CURRY_RIGHT_FLAG, undefined, undefined, undefined, undefined, undefined, arity);
29385      result.placeholder = curryRight.placeholder;
29386      return result;
29387    }
29388
29389    /**
29390     * Creates a debounced function that delays invoking `func` until after `wait`
29391     * milliseconds have elapsed since the last time the debounced function was
29392     * invoked. The debounced function comes with a `cancel` method to cancel
29393     * delayed `func` invocations and a `flush` method to immediately invoke them.
29394     * Provide `options` to indicate whether `func` should be invoked on the
29395     * leading and/or trailing edge of the `wait` timeout. The `func` is invoked
29396     * with the last arguments provided to the debounced function. Subsequent
29397     * calls to the debounced function return the result of the last `func`
29398     * invocation.
29399     *
29400     * **Note:** If `leading` and `trailing` options are `true`, `func` is
29401     * invoked on the trailing edge of the timeout only if the debounced function
29402     * is invoked more than once during the `wait` timeout.
29403     *
29404     * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred
29405     * until to the next tick, similar to `setTimeout` with a timeout of `0`.
29406     *
29407     * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)
29408     * for details over the differences between `_.debounce` and `_.throttle`.
29409     *
29410     * @static
29411     * @memberOf _
29412     * @since 0.1.0
29413     * @category Function
29414     * @param {Function} func The function to debounce.
29415     * @param {number} [wait=0] The number of milliseconds to delay.
29416     * @param {Object} [options={}] The options object.
29417     * @param {boolean} [options.leading=false]
29418     *  Specify invoking on the leading edge of the timeout.
29419     * @param {number} [options.maxWait]
29420     *  The maximum time `func` is allowed to be delayed before it's invoked.
29421     * @param {boolean} [options.trailing=true]
29422     *  Specify invoking on the trailing edge of the timeout.
29423     * @returns {Function} Returns the new debounced function.
29424     * @example
29425     *
29426     * // Avoid costly calculations while the window size is in flux.
29427     * jQuery(window).on('resize', _.debounce(calculateLayout, 150));
29428     *
29429     * // Invoke `sendMail` when clicked, debouncing subsequent calls.
29430     * jQuery(element).on('click', _.debounce(sendMail, 300, {
29431     *   'leading': true,
29432     *   'trailing': false
29433     * }));
29434     *
29435     * // Ensure `batchLog` is invoked once after 1 second of debounced calls.
29436     * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });
29437     * var source = new EventSource('/stream');
29438     * jQuery(source).on('message', debounced);
29439     *
29440     * // Cancel the trailing debounced invocation.
29441     * jQuery(window).on('popstate', debounced.cancel);
29442     */
29443    function debounce(func, wait, options) {
29444      var lastArgs,
29445          lastThis,
29446          maxWait,
29447          result,
29448          timerId,
29449          lastCallTime,
29450          lastInvokeTime = 0,
29451          leading = false,
29452          maxing = false,
29453          trailing = true;
29454
29455      if (typeof func != 'function') {
29456        throw new TypeError(FUNC_ERROR_TEXT);
29457      }
29458      wait = toNumber(wait) || 0;
29459      if (isObject(options)) {
29460        leading = !!options.leading;
29461        maxing = 'maxWait' in options;
29462        maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;
29463        trailing = 'trailing' in options ? !!options.trailing : trailing;
29464      }
29465
29466      function invokeFunc(time) {
29467        var args = lastArgs,
29468            thisArg = lastThis;
29469
29470        lastArgs = lastThis = undefined;
29471        lastInvokeTime = time;
29472        result = func.apply(thisArg, args);
29473        return result;
29474      }
29475
29476      function leadingEdge(time) {
29477        // Reset any `maxWait` timer.
29478        lastInvokeTime = time;
29479        // Start the timer for the trailing edge.
29480        timerId = setTimeout(timerExpired, wait);
29481        // Invoke the leading edge.
29482        return leading ? invokeFunc(time) : result;
29483      }
29484
29485      function remainingWait(time) {
29486        var timeSinceLastCall = time - lastCallTime,
29487            timeSinceLastInvoke = time - lastInvokeTime,
29488            timeWaiting = wait - timeSinceLastCall;
29489
29490        return maxing
29491          ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)
29492          : timeWaiting;
29493      }
29494
29495      function shouldInvoke(time) {
29496        var timeSinceLastCall = time - lastCallTime,
29497            timeSinceLastInvoke = time - lastInvokeTime;
29498
29499        // Either this is the first call, activity has stopped and we're at the
29500        // trailing edge, the system time has gone backwards and we're treating
29501        // it as the trailing edge, or we've hit the `maxWait` limit.
29502        return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||
29503          (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));
29504      }
29505
29506      function timerExpired() {
29507        var time = now();
29508        if (shouldInvoke(time)) {
29509          return trailingEdge(time);
29510        }
29511        // Restart the timer.
29512        timerId = setTimeout(timerExpired, remainingWait(time));
29513      }
29514
29515      function trailingEdge(time) {
29516        timerId = undefined;
29517
29518        // Only invoke if we have `lastArgs` which means `func` has been
29519        // debounced at least once.
29520        if (trailing && lastArgs) {
29521          return invokeFunc(time);
29522        }
29523        lastArgs = lastThis = undefined;
29524        return result;
29525      }
29526
29527      function cancel() {
29528        if (timerId !== undefined) {
29529          clearTimeout(timerId);
29530        }
29531        lastInvokeTime = 0;
29532        lastArgs = lastCallTime = lastThis = timerId = undefined;
29533      }
29534
29535      function flush() {
29536        return timerId === undefined ? result : trailingEdge(now());
29537      }
29538
29539      function debounced() {
29540        var time = now(),
29541            isInvoking = shouldInvoke(time);
29542
29543        lastArgs = arguments;
29544        lastThis = this;
29545        lastCallTime = time;
29546
29547        if (isInvoking) {
29548          if (timerId === undefined) {
29549            return leadingEdge(lastCallTime);
29550          }
29551          if (maxing) {
29552            // Handle invocations in a tight loop.
29553            clearTimeout(timerId);
29554            timerId = setTimeout(timerExpired, wait);
29555            return invokeFunc(lastCallTime);
29556          }
29557        }
29558        if (timerId === undefined) {
29559          timerId = setTimeout(timerExpired, wait);
29560        }
29561        return result;
29562      }
29563      debounced.cancel = cancel;
29564      debounced.flush = flush;
29565      return debounced;
29566    }
29567
29568    /**
29569     * Defers invoking the `func` until the current call stack has cleared. Any
29570     * additional arguments are provided to `func` when it's invoked.
29571     *
29572     * @static
29573     * @memberOf _
29574     * @since 0.1.0
29575     * @category Function
29576     * @param {Function} func The function to defer.
29577     * @param {...*} [args] The arguments to invoke `func` with.
29578     * @returns {number} Returns the timer id.
29579     * @example
29580     *
29581     * _.defer(function(text) {
29582     *   console.log(text);
29583     * }, 'deferred');
29584     * // => Logs 'deferred' after one millisecond.
29585     */
29586    var defer = baseRest(function(func, args) {
29587      return baseDelay(func, 1, args);
29588    });
29589
29590    /**
29591     * Invokes `func` after `wait` milliseconds. Any additional arguments are
29592     * provided to `func` when it's invoked.
29593     *
29594     * @static
29595     * @memberOf _
29596     * @since 0.1.0
29597     * @category Function
29598     * @param {Function} func The function to delay.
29599     * @param {number} wait The number of milliseconds to delay invocation.
29600     * @param {...*} [args] The arguments to invoke `func` with.
29601     * @returns {number} Returns the timer id.
29602     * @example
29603     *
29604     * _.delay(function(text) {
29605     *   console.log(text);
29606     * }, 1000, 'later');
29607     * // => Logs 'later' after one second.
29608     */
29609    var delay = baseRest(function(func, wait, args) {
29610      return baseDelay(func, toNumber(wait) || 0, args);
29611    });
29612
29613    /**
29614     * Creates a function that invokes `func` with arguments reversed.
29615     *
29616     * @static
29617     * @memberOf _
29618     * @since 4.0.0
29619     * @category Function
29620     * @param {Function} func The function to flip arguments for.
29621     * @returns {Function} Returns the new flipped function.
29622     * @example
29623     *
29624     * var flipped = _.flip(function() {
29625     *   return _.toArray(arguments);
29626     * });
29627     *
29628     * flipped('a', 'b', 'c', 'd');
29629     * // => ['d', 'c', 'b', 'a']
29630     */
29631    function flip(func) {
29632      return createWrap(func, WRAP_FLIP_FLAG);
29633    }
29634
29635    /**
29636     * Creates a function that memoizes the result of `func`. If `resolver` is
29637     * provided, it determines the cache key for storing the result based on the
29638     * arguments provided to the memoized function. By default, the first argument
29639     * provided to the memoized function is used as the map cache key. The `func`
29640     * is invoked with the `this` binding of the memoized function.
29641     *
29642     * **Note:** The cache is exposed as the `cache` property on the memoized
29643     * function. Its creation may be customized by replacing the `_.memoize.Cache`
29644     * constructor with one whose instances implement the
29645     * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)
29646     * method interface of `clear`, `delete`, `get`, `has`, and `set`.
29647     *
29648     * @static
29649     * @memberOf _
29650     * @since 0.1.0
29651     * @category Function
29652     * @param {Function} func The function to have its output memoized.
29653     * @param {Function} [resolver] The function to resolve the cache key.
29654     * @returns {Function} Returns the new memoized function.
29655     * @example
29656     *
29657     * var object = { 'a': 1, 'b': 2 };
29658     * var other = { 'c': 3, 'd': 4 };
29659     *
29660     * var values = _.memoize(_.values);
29661     * values(object);
29662     * // => [1, 2]
29663     *
29664     * values(other);
29665     * // => [3, 4]
29666     *
29667     * object.a = 2;
29668     * values(object);
29669     * // => [1, 2]
29670     *
29671     * // Modify the result cache.
29672     * values.cache.set(object, ['a', 'b']);
29673     * values(object);
29674     * // => ['a', 'b']
29675     *
29676     * // Replace `_.memoize.Cache`.
29677     * _.memoize.Cache = WeakMap;
29678     */
29679    function memoize(func, resolver) {
29680      if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {
29681        throw new TypeError(FUNC_ERROR_TEXT);
29682      }
29683      var memoized = function() {
29684        var args = arguments,
29685            key = resolver ? resolver.apply(this, args) : args[0],
29686            cache = memoized.cache;
29687
29688        if (cache.has(key)) {
29689          return cache.get(key);
29690        }
29691        var result = func.apply(this, args);
29692        memoized.cache = cache.set(key, result) || cache;
29693        return result;
29694      };
29695      memoized.cache = new (memoize.Cache || MapCache);
29696      return memoized;
29697    }
29698
29699    // Expose `MapCache`.
29700    memoize.Cache = MapCache;
29701
29702    /**
29703     * Creates a function that negates the result of the predicate `func`. The
29704     * `func` predicate is invoked with the `this` binding and arguments of the
29705     * created function.
29706     *
29707     * @static
29708     * @memberOf _
29709     * @since 3.0.0
29710     * @category Function
29711     * @param {Function} predicate The predicate to negate.
29712     * @returns {Function} Returns the new negated function.
29713     * @example
29714     *
29715     * function isEven(n) {
29716     *   return n % 2 == 0;
29717     * }
29718     *
29719     * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven));
29720     * // => [1, 3, 5]
29721     */
29722    function negate(predicate) {
29723      if (typeof predicate != 'function') {
29724        throw new TypeError(FUNC_ERROR_TEXT);
29725      }
29726      return function() {
29727        var args = arguments;
29728        switch (args.length) {
29729          case 0: return !predicate.call(this);
29730          case 1: return !predicate.call(this, args[0]);
29731          case 2: return !predicate.call(this, args[0], args[1]);
29732          case 3: return !predicate.call(this, args[0], args[1], args[2]);
29733        }
29734        return !predicate.apply(this, args);
29735      };
29736    }
29737
29738    /**
29739     * Creates a function that is restricted to invoking `func` once. Repeat calls
29740     * to the function return the value of the first invocation. The `func` is
29741     * invoked with the `this` binding and arguments of the created function.
29742     *
29743     * @static
29744     * @memberOf _
29745     * @since 0.1.0
29746     * @category Function
29747     * @param {Function} func The function to restrict.
29748     * @returns {Function} Returns the new restricted function.
29749     * @example
29750     *
29751     * var initialize = _.once(createApplication);
29752     * initialize();
29753     * initialize();
29754     * // => `createApplication` is invoked once
29755     */
29756    function once(func) {
29757      return before(2, func);
29758    }
29759
29760    /**
29761     * Creates a function that invokes `func` with its arguments transformed.
29762     *
29763     * @static
29764     * @since 4.0.0
29765     * @memberOf _
29766     * @category Function
29767     * @param {Function} func The function to wrap.
29768     * @param {...(Function|Function[])} [transforms=[_.identity]]
29769     *  The argument transforms.
29770     * @returns {Function} Returns the new function.
29771     * @example
29772     *
29773     * function doubled(n) {
29774     *   return n * 2;
29775     * }
29776     *
29777     * function square(n) {
29778     *   return n * n;
29779     * }
29780     *
29781     * var func = _.overArgs(function(x, y) {
29782     *   return [x, y];
29783     * }, [square, doubled]);
29784     *
29785     * func(9, 3);
29786     * // => [81, 6]
29787     *
29788     * func(10, 5);
29789     * // => [100, 10]
29790     */
29791    var overArgs = castRest(function(func, transforms) {
29792      transforms = (transforms.length == 1 && isArray(transforms[0]))
29793        ? arrayMap(transforms[0], baseUnary(getIteratee()))
29794        : arrayMap(baseFlatten(transforms, 1), baseUnary(getIteratee()));
29795
29796      var funcsLength = transforms.length;
29797      return baseRest(function(args) {
29798        var index = -1,
29799            length = nativeMin(args.length, funcsLength);
29800
29801        while (++index < length) {
29802          args[index] = transforms[index].call(this, args[index]);
29803        }
29804        return apply(func, this, args);
29805      });
29806    });
29807
29808    /**
29809     * Creates a function that invokes `func` with `partials` prepended to the
29810     * arguments it receives. This method is like `_.bind` except it does **not**
29811     * alter the `this` binding.
29812     *
29813     * The `_.partial.placeholder` value, which defaults to `_` in monolithic
29814     * builds, may be used as a placeholder for partially applied arguments.
29815     *
29816     * **Note:** This method doesn't set the "length" property of partially
29817     * applied functions.
29818     *
29819     * @static
29820     * @memberOf _
29821     * @since 0.2.0
29822     * @category Function
29823     * @param {Function} func The function to partially apply arguments to.
29824     * @param {...*} [partials] The arguments to be partially applied.
29825     * @returns {Function} Returns the new partially applied function.
29826     * @example
29827     *
29828     * function greet(greeting, name) {
29829     *   return greeting + ' ' + name;
29830     * }
29831     *
29832     * var sayHelloTo = _.partial(greet, 'hello');
29833     * sayHelloTo('fred');
29834     * // => 'hello fred'
29835     *
29836     * // Partially applied with placeholders.
29837     * var greetFred = _.partial(greet, _, 'fred');
29838     * greetFred('hi');
29839     * // => 'hi fred'
29840     */
29841    var partial = baseRest(function(func, partials) {
29842      var holders = replaceHolders(partials, getHolder(partial));
29843      return createWrap(func, WRAP_PARTIAL_FLAG, undefined, partials, holders);
29844    });
29845
29846    /**
29847     * This method is like `_.partial` except that partially applied arguments
29848     * are appended to the arguments it receives.
29849     *
29850     * The `_.partialRight.placeholder` value, which defaults to `_` in monolithic
29851     * builds, may be used as a placeholder for partially applied arguments.
29852     *
29853     * **Note:** This method doesn't set the "length" property of partially
29854     * applied functions.
29855     *
29856     * @static
29857     * @memberOf _
29858     * @since 1.0.0
29859     * @category Function
29860     * @param {Function} func The function to partially apply arguments to.
29861     * @param {...*} [partials] The arguments to be partially applied.
29862     * @returns {Function} Returns the new partially applied function.
29863     * @example
29864     *
29865     * function greet(greeting, name) {
29866     *   return greeting + ' ' + name;
29867     * }
29868     *
29869     * var greetFred = _.partialRight(greet, 'fred');
29870     * greetFred('hi');
29871     * // => 'hi fred'
29872     *
29873     * // Partially applied with placeholders.
29874     * var sayHelloTo = _.partialRight(greet, 'hello', _);
29875     * sayHelloTo('fred');
29876     * // => 'hello fred'
29877     */
29878    var partialRight = baseRest(function(func, partials) {
29879      var holders = replaceHolders(partials, getHolder(partialRight));
29880      return createWrap(func, WRAP_PARTIAL_RIGHT_FLAG, undefined, partials, holders);
29881    });
29882
29883    /**
29884     * Creates a function that invokes `func` with arguments arranged according
29885     * to the specified `indexes` where the argument value at the first index is
29886     * provided as the first argument, the argument value at the second index is
29887     * provided as the second argument, and so on.
29888     *
29889     * @static
29890     * @memberOf _
29891     * @since 3.0.0
29892     * @category Function
29893     * @param {Function} func The function to rearrange arguments for.
29894     * @param {...(number|number[])} indexes The arranged argument indexes.
29895     * @returns {Function} Returns the new function.
29896     * @example
29897     *
29898     * var rearged = _.rearg(function(a, b, c) {
29899     *   return [a, b, c];
29900     * }, [2, 0, 1]);
29901     *
29902     * rearged('b', 'c', 'a')
29903     * // => ['a', 'b', 'c']
29904     */
29905    var rearg = flatRest(function(func, indexes) {
29906      return createWrap(func, WRAP_REARG_FLAG, undefined, undefined, undefined, indexes);
29907    });
29908
29909    /**
29910     * Creates a function that invokes `func` with the `this` binding of the
29911     * created function and arguments from `start` and beyond provided as
29912     * an array.
29913     *
29914     * **Note:** This method is based on the
29915     * [rest parameter](https://mdn.io/rest_parameters).
29916     *
29917     * @static
29918     * @memberOf _
29919     * @since 4.0.0
29920     * @category Function
29921     * @param {Function} func The function to apply a rest parameter to.
29922     * @param {number} [start=func.length-1] The start position of the rest parameter.
29923     * @returns {Function} Returns the new function.
29924     * @example
29925     *
29926     * var say = _.rest(function(what, names) {
29927     *   return what + ' ' + _.initial(names).join(', ') +
29928     *     (_.size(names) > 1 ? ', & ' : '') + _.last(names);
29929     * });
29930     *
29931     * say('hello', 'fred', 'barney', 'pebbles');
29932     * // => 'hello fred, barney, & pebbles'
29933     */
29934    function rest(func, start) {
29935      if (typeof func != 'function') {
29936        throw new TypeError(FUNC_ERROR_TEXT);
29937      }
29938      start = start === undefined ? start : toInteger(start);
29939      return baseRest(func, start);
29940    }
29941
29942    /**
29943     * Creates a function that invokes `func` with the `this` binding of the
29944     * create function and an array of arguments much like
29945     * [`Function#apply`](http://www.ecma-international.org/ecma-262/7.0/#sec-function.prototype.apply).
29946     *
29947     * **Note:** This method is based on the
29948     * [spread operator](https://mdn.io/spread_operator).
29949     *
29950     * @static
29951     * @memberOf _
29952     * @since 3.2.0
29953     * @category Function
29954     * @param {Function} func The function to spread arguments over.
29955     * @param {number} [start=0] The start position of the spread.
29956     * @returns {Function} Returns the new function.
29957     * @example
29958     *
29959     * var say = _.spread(function(who, what) {
29960     *   return who + ' says ' + what;
29961     * });
29962     *
29963     * say(['fred', 'hello']);
29964     * // => 'fred says hello'
29965     *
29966     * var numbers = Promise.all([
29967     *   Promise.resolve(40),
29968     *   Promise.resolve(36)
29969     * ]);
29970     *
29971     * numbers.then(_.spread(function(x, y) {
29972     *   return x + y;
29973     * }));
29974     * // => a Promise of 76
29975     */
29976    function spread(func, start) {
29977      if (typeof func != 'function') {
29978        throw new TypeError(FUNC_ERROR_TEXT);
29979      }
29980      start = start == null ? 0 : nativeMax(toInteger(start), 0);
29981      return baseRest(function(args) {
29982        var array = args[start],
29983            otherArgs = castSlice(args, 0, start);
29984
29985        if (array) {
29986          arrayPush(otherArgs, array);
29987        }
29988        return apply(func, this, otherArgs);
29989      });
29990    }
29991
29992    /**
29993     * Creates a throttled function that only invokes `func` at most once per
29994     * every `wait` milliseconds. The throttled function comes with a `cancel`
29995     * method to cancel delayed `func` invocations and a `flush` method to
29996     * immediately invoke them. Provide `options` to indicate whether `func`
29997     * should be invoked on the leading and/or trailing edge of the `wait`
29998     * timeout. The `func` is invoked with the last arguments provided to the
29999     * throttled function. Subsequent calls to the throttled function return the
30000     * result of the last `func` invocation.
30001     *
30002     * **Note:** If `leading` and `trailing` options are `true`, `func` is
30003     * invoked on the trailing edge of the timeout only if the throttled function
30004     * is invoked more than once during the `wait` timeout.
30005     *
30006     * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred
30007     * until to the next tick, similar to `setTimeout` with a timeout of `0`.
30008     *
30009     * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)
30010     * for details over the differences between `_.throttle` and `_.debounce`.
30011     *
30012     * @static
30013     * @memberOf _
30014     * @since 0.1.0
30015     * @category Function
30016     * @param {Function} func The function to throttle.
30017     * @param {number} [wait=0] The number of milliseconds to throttle invocations to.
30018     * @param {Object} [options={}] The options object.
30019     * @param {boolean} [options.leading=true]
30020     *  Specify invoking on the leading edge of the timeout.
30021     * @param {boolean} [options.trailing=true]
30022     *  Specify invoking on the trailing edge of the timeout.
30023     * @returns {Function} Returns the new throttled function.
30024     * @example
30025     *
30026     * // Avoid excessively updating the position while scrolling.
30027     * jQuery(window).on('scroll', _.throttle(updatePosition, 100));
30028     *
30029     * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.
30030     * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });
30031     * jQuery(element).on('click', throttled);
30032     *
30033     * // Cancel the trailing throttled invocation.
30034     * jQuery(window).on('popstate', throttled.cancel);
30035     */
30036    function throttle(func, wait, options) {
30037      var leading = true,
30038          trailing = true;
30039
30040      if (typeof func != 'function') {
30041        throw new TypeError(FUNC_ERROR_TEXT);
30042      }
30043      if (isObject(options)) {
30044        leading = 'leading' in options ? !!options.leading : leading;
30045        trailing = 'trailing' in options ? !!options.trailing : trailing;
30046      }
30047      return debounce(func, wait, {
30048        'leading': leading,
30049        'maxWait': wait,
30050        'trailing': trailing
30051      });
30052    }
30053
30054    /**
30055     * Creates a function that accepts up to one argument, ignoring any
30056     * additional arguments.
30057     *
30058     * @static
30059     * @memberOf _
30060     * @since 4.0.0
30061     * @category Function
30062     * @param {Function} func The function to cap arguments for.
30063     * @returns {Function} Returns the new capped function.
30064     * @example
30065     *
30066     * _.map(['6', '8', '10'], _.unary(parseInt));
30067     * // => [6, 8, 10]
30068     */
30069    function unary(func) {
30070      return ary(func, 1);
30071    }
30072
30073    /**
30074     * Creates a function that provides `value` to `wrapper` as its first
30075     * argument. Any additional arguments provided to the function are appended
30076     * to those provided to the `wrapper`. The wrapper is invoked with the `this`
30077     * binding of the created function.
30078     *
30079     * @static
30080     * @memberOf _
30081     * @since 0.1.0
30082     * @category Function
30083     * @param {*} value The value to wrap.
30084     * @param {Function} [wrapper=identity] The wrapper function.
30085     * @returns {Function} Returns the new function.
30086     * @example
30087     *
30088     * var p = _.wrap(_.escape, function(func, text) {
30089     *   return '<p>' + func(text) + '</p>';
30090     * });
30091     *
30092     * p('fred, barney, & pebbles');
30093     * // => '<p>fred, barney, &amp; pebbles</p>'
30094     */
30095    function wrap(value, wrapper) {
30096      return partial(castFunction(wrapper), value);
30097    }
30098
30099    /*------------------------------------------------------------------------*/
30100
30101    /**
30102     * Casts `value` as an array if it's not one.
30103     *
30104     * @static
30105     * @memberOf _
30106     * @since 4.4.0
30107     * @category Lang
30108     * @param {*} value The value to inspect.
30109     * @returns {Array} Returns the cast array.
30110     * @example
30111     *
30112     * _.castArray(1);
30113     * // => [1]
30114     *
30115     * _.castArray({ 'a': 1 });
30116     * // => [{ 'a': 1 }]
30117     *
30118     * _.castArray('abc');
30119     * // => ['abc']
30120     *
30121     * _.castArray(null);
30122     * // => [null]
30123     *
30124     * _.castArray(undefined);
30125     * // => [undefined]
30126     *
30127     * _.castArray();
30128     * // => []
30129     *
30130     * var array = [1, 2, 3];
30131     * console.log(_.castArray(array) === array);
30132     * // => true
30133     */
30134    function castArray() {
30135      if (!arguments.length) {
30136        return [];
30137      }
30138      var value = arguments[0];
30139      return isArray(value) ? value : [value];
30140    }
30141
30142    /**
30143     * Creates a shallow clone of `value`.
30144     *
30145     * **Note:** This method is loosely based on the
30146     * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm)
30147     * and supports cloning arrays, array buffers, booleans, date objects, maps,
30148     * numbers, `Object` objects, regexes, sets, strings, symbols, and typed
30149     * arrays. The own enumerable properties of `arguments` objects are cloned
30150     * as plain objects. An empty object is returned for uncloneable values such
30151     * as error objects, functions, DOM nodes, and WeakMaps.
30152     *
30153     * @static
30154     * @memberOf _
30155     * @since 0.1.0
30156     * @category Lang
30157     * @param {*} value The value to clone.
30158     * @returns {*} Returns the cloned value.
30159     * @see _.cloneDeep
30160     * @example
30161     *
30162     * var objects = [{ 'a': 1 }, { 'b': 2 }];
30163     *
30164     * var shallow = _.clone(objects);
30165     * console.log(shallow[0] === objects[0]);
30166     * // => true
30167     */
30168    function clone(value) {
30169      return baseClone(value, CLONE_SYMBOLS_FLAG);
30170    }
30171
30172    /**
30173     * This method is like `_.clone` except that it accepts `customizer` which
30174     * is invoked to produce the cloned value. If `customizer` returns `undefined`,
30175     * cloning is handled by the method instead. The `customizer` is invoked with
30176     * up to four arguments; (value [, index|key, object, stack]).
30177     *
30178     * @static
30179     * @memberOf _
30180     * @since 4.0.0
30181     * @category Lang
30182     * @param {*} value The value to clone.
30183     * @param {Function} [customizer] The function to customize cloning.
30184     * @returns {*} Returns the cloned value.
30185     * @see _.cloneDeepWith
30186     * @example
30187     *
30188     * function customizer(value) {
30189     *   if (_.isElement(value)) {
30190     *     return value.cloneNode(false);
30191     *   }
30192     * }
30193     *
30194     * var el = _.cloneWith(document.body, customizer);
30195     *
30196     * console.log(el === document.body);
30197     * // => false
30198     * console.log(el.nodeName);
30199     * // => 'BODY'
30200     * console.log(el.childNodes.length);
30201     * // => 0
30202     */
30203    function cloneWith(value, customizer) {
30204      customizer = typeof customizer == 'function' ? customizer : undefined;
30205      return baseClone(value, CLONE_SYMBOLS_FLAG, customizer);
30206    }
30207
30208    /**
30209     * This method is like `_.clone` except that it recursively clones `value`.
30210     *
30211     * @static
30212     * @memberOf _
30213     * @since 1.0.0
30214     * @category Lang
30215     * @param {*} value The value to recursively clone.
30216     * @returns {*} Returns the deep cloned value.
30217     * @see _.clone
30218     * @example
30219     *
30220     * var objects = [{ 'a': 1 }, { 'b': 2 }];
30221     *
30222     * var deep = _.cloneDeep(objects);
30223     * console.log(deep[0] === objects[0]);
30224     * // => false
30225     */
30226    function cloneDeep(value) {
30227      return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG);
30228    }
30229
30230    /**
30231     * This method is like `_.cloneWith` except that it recursively clones `value`.
30232     *
30233     * @static
30234     * @memberOf _
30235     * @since 4.0.0
30236     * @category Lang
30237     * @param {*} value The value to recursively clone.
30238     * @param {Function} [customizer] The function to customize cloning.
30239     * @returns {*} Returns the deep cloned value.
30240     * @see _.cloneWith
30241     * @example
30242     *
30243     * function customizer(value) {
30244     *   if (_.isElement(value)) {
30245     *     return value.cloneNode(true);
30246     *   }
30247     * }
30248     *
30249     * var el = _.cloneDeepWith(document.body, customizer);
30250     *
30251     * console.log(el === document.body);
30252     * // => false
30253     * console.log(el.nodeName);
30254     * // => 'BODY'
30255     * console.log(el.childNodes.length);
30256     * // => 20
30257     */
30258    function cloneDeepWith(value, customizer) {
30259      customizer = typeof customizer == 'function' ? customizer : undefined;
30260      return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG, customizer);
30261    }
30262
30263    /**
30264     * Checks if `object` conforms to `source` by invoking the predicate
30265     * properties of `source` with the corresponding property values of `object`.
30266     *
30267     * **Note:** This method is equivalent to `_.conforms` when `source` is
30268     * partially applied.
30269     *
30270     * @static
30271     * @memberOf _
30272     * @since 4.14.0
30273     * @category Lang
30274     * @param {Object} object The object to inspect.
30275     * @param {Object} source The object of property predicates to conform to.
30276     * @returns {boolean} Returns `true` if `object` conforms, else `false`.
30277     * @example
30278     *
30279     * var object = { 'a': 1, 'b': 2 };
30280     *
30281     * _.conformsTo(object, { 'b': function(n) { return n > 1; } });
30282     * // => true
30283     *
30284     * _.conformsTo(object, { 'b': function(n) { return n > 2; } });
30285     * // => false
30286     */
30287    function conformsTo(object, source) {
30288      return source == null || baseConformsTo(object, source, keys(source));
30289    }
30290
30291    /**
30292     * Performs a
30293     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
30294     * comparison between two values to determine if they are equivalent.
30295     *
30296     * @static
30297     * @memberOf _
30298     * @since 4.0.0
30299     * @category Lang
30300     * @param {*} value The value to compare.
30301     * @param {*} other The other value to compare.
30302     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
30303     * @example
30304     *
30305     * var object = { 'a': 1 };
30306     * var other = { 'a': 1 };
30307     *
30308     * _.eq(object, object);
30309     * // => true
30310     *
30311     * _.eq(object, other);
30312     * // => false
30313     *
30314     * _.eq('a', 'a');
30315     * // => true
30316     *
30317     * _.eq('a', Object('a'));
30318     * // => false
30319     *
30320     * _.eq(NaN, NaN);
30321     * // => true
30322     */
30323    function eq(value, other) {
30324      return value === other || (value !== value && other !== other);
30325    }
30326
30327    /**
30328     * Checks if `value` is greater than `other`.
30329     *
30330     * @static
30331     * @memberOf _
30332     * @since 3.9.0
30333     * @category Lang
30334     * @param {*} value The value to compare.
30335     * @param {*} other The other value to compare.
30336     * @returns {boolean} Returns `true` if `value` is greater than `other`,
30337     *  else `false`.
30338     * @see _.lt
30339     * @example
30340     *
30341     * _.gt(3, 1);
30342     * // => true
30343     *
30344     * _.gt(3, 3);
30345     * // => false
30346     *
30347     * _.gt(1, 3);
30348     * // => false
30349     */
30350    var gt = createRelationalOperation(baseGt);
30351
30352    /**
30353     * Checks if `value` is greater than or equal to `other`.
30354     *
30355     * @static
30356     * @memberOf _
30357     * @since 3.9.0
30358     * @category Lang
30359     * @param {*} value The value to compare.
30360     * @param {*} other The other value to compare.
30361     * @returns {boolean} Returns `true` if `value` is greater than or equal to
30362     *  `other`, else `false`.
30363     * @see _.lte
30364     * @example
30365     *
30366     * _.gte(3, 1);
30367     * // => true
30368     *
30369     * _.gte(3, 3);
30370     * // => true
30371     *
30372     * _.gte(1, 3);
30373     * // => false
30374     */
30375    var gte = createRelationalOperation(function(value, other) {
30376      return value >= other;
30377    });
30378
30379    /**
30380     * Checks if `value` is likely an `arguments` object.
30381     *
30382     * @static
30383     * @memberOf _
30384     * @since 0.1.0
30385     * @category Lang
30386     * @param {*} value The value to check.
30387     * @returns {boolean} Returns `true` if `value` is an `arguments` object,
30388     *  else `false`.
30389     * @example
30390     *
30391     * _.isArguments(function() { return arguments; }());
30392     * // => true
30393     *
30394     * _.isArguments([1, 2, 3]);
30395     * // => false
30396     */
30397    var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {
30398      return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&
30399        !propertyIsEnumerable.call(value, 'callee');
30400    };
30401
30402    /**
30403     * Checks if `value` is classified as an `Array` object.
30404     *
30405     * @static
30406     * @memberOf _
30407     * @since 0.1.0
30408     * @category Lang
30409     * @param {*} value The value to check.
30410     * @returns {boolean} Returns `true` if `value` is an array, else `false`.
30411     * @example
30412     *
30413     * _.isArray([1, 2, 3]);
30414     * // => true
30415     *
30416     * _.isArray(document.body.children);
30417     * // => false
30418     *
30419     * _.isArray('abc');
30420     * // => false
30421     *
30422     * _.isArray(_.noop);
30423     * // => false
30424     */
30425    var isArray = Array.isArray;
30426
30427    /**
30428     * Checks if `value` is classified as an `ArrayBuffer` object.
30429     *
30430     * @static
30431     * @memberOf _
30432     * @since 4.3.0
30433     * @category Lang
30434     * @param {*} value The value to check.
30435     * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.
30436     * @example
30437     *
30438     * _.isArrayBuffer(new ArrayBuffer(2));
30439     * // => true
30440     *
30441     * _.isArrayBuffer(new Array(2));
30442     * // => false
30443     */
30444    var isArrayBuffer = nodeIsArrayBuffer ? baseUnary(nodeIsArrayBuffer) : baseIsArrayBuffer;
30445
30446    /**
30447     * Checks if `value` is array-like. A value is considered array-like if it's
30448     * not a function and has a `value.length` that's an integer greater than or
30449     * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.
30450     *
30451     * @static
30452     * @memberOf _
30453     * @since 4.0.0
30454     * @category Lang
30455     * @param {*} value The value to check.
30456     * @returns {boolean} Returns `true` if `value` is array-like, else `false`.
30457     * @example
30458     *
30459     * _.isArrayLike([1, 2, 3]);
30460     * // => true
30461     *
30462     * _.isArrayLike(document.body.children);
30463     * // => true
30464     *
30465     * _.isArrayLike('abc');
30466     * // => true
30467     *
30468     * _.isArrayLike(_.noop);
30469     * // => false
30470     */
30471    function isArrayLike(value) {
30472      return value != null && isLength(value.length) && !isFunction(value);
30473    }
30474
30475    /**
30476     * This method is like `_.isArrayLike` except that it also checks if `value`
30477     * is an object.
30478     *
30479     * @static
30480     * @memberOf _
30481     * @since 4.0.0
30482     * @category Lang
30483     * @param {*} value The value to check.
30484     * @returns {boolean} Returns `true` if `value` is an array-like object,
30485     *  else `false`.
30486     * @example
30487     *
30488     * _.isArrayLikeObject([1, 2, 3]);
30489     * // => true
30490     *
30491     * _.isArrayLikeObject(document.body.children);
30492     * // => true
30493     *
30494     * _.isArrayLikeObject('abc');
30495     * // => false
30496     *
30497     * _.isArrayLikeObject(_.noop);
30498     * // => false
30499     */
30500    function isArrayLikeObject(value) {
30501      return isObjectLike(value) && isArrayLike(value);
30502    }
30503
30504    /**
30505     * Checks if `value` is classified as a boolean primitive or object.
30506     *
30507     * @static
30508     * @memberOf _
30509     * @since 0.1.0
30510     * @category Lang
30511     * @param {*} value The value to check.
30512     * @returns {boolean} Returns `true` if `value` is a boolean, else `false`.
30513     * @example
30514     *
30515     * _.isBoolean(false);
30516     * // => true
30517     *
30518     * _.isBoolean(null);
30519     * // => false
30520     */
30521    function isBoolean(value) {
30522      return value === true || value === false ||
30523        (isObjectLike(value) && baseGetTag(value) == boolTag);
30524    }
30525
30526    /**
30527     * Checks if `value` is a buffer.
30528     *
30529     * @static
30530     * @memberOf _
30531     * @since 4.3.0
30532     * @category Lang
30533     * @param {*} value The value to check.
30534     * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.
30535     * @example
30536     *
30537     * _.isBuffer(new Buffer(2));
30538     * // => true
30539     *
30540     * _.isBuffer(new Uint8Array(2));
30541     * // => false
30542     */
30543    var isBuffer = nativeIsBuffer || stubFalse;
30544
30545    /**
30546     * Checks if `value` is classified as a `Date` object.
30547     *
30548     * @static
30549     * @memberOf _
30550     * @since 0.1.0
30551     * @category Lang
30552     * @param {*} value The value to check.
30553     * @returns {boolean} Returns `true` if `value` is a date object, else `false`.
30554     * @example
30555     *
30556     * _.isDate(new Date);
30557     * // => true
30558     *
30559     * _.isDate('Mon April 23 2012');
30560     * // => false
30561     */
30562    var isDate = nodeIsDate ? baseUnary(nodeIsDate) : baseIsDate;
30563
30564    /**
30565     * Checks if `value` is likely a DOM element.
30566     *
30567     * @static
30568     * @memberOf _
30569     * @since 0.1.0
30570     * @category Lang
30571     * @param {*} value The value to check.
30572     * @returns {boolean} Returns `true` if `value` is a DOM element, else `false`.
30573     * @example
30574     *
30575     * _.isElement(document.body);
30576     * // => true
30577     *
30578     * _.isElement('<body>');
30579     * // => false
30580     */
30581    function isElement(value) {
30582      return isObjectLike(value) && value.nodeType === 1 && !isPlainObject(value);
30583    }
30584
30585    /**
30586     * Checks if `value` is an empty object, collection, map, or set.
30587     *
30588     * Objects are considered empty if they have no own enumerable string keyed
30589     * properties.
30590     *
30591     * Array-like values such as `arguments` objects, arrays, buffers, strings, or
30592     * jQuery-like collections are considered empty if they have a `length` of `0`.
30593     * Similarly, maps and sets are considered empty if they have a `size` of `0`.
30594     *
30595     * @static
30596     * @memberOf _
30597     * @since 0.1.0
30598     * @category Lang
30599     * @param {*} value The value to check.
30600     * @returns {boolean} Returns `true` if `value` is empty, else `false`.
30601     * @example
30602     *
30603     * _.isEmpty(null);
30604     * // => true
30605     *
30606     * _.isEmpty(true);
30607     * // => true
30608     *
30609     * _.isEmpty(1);
30610     * // => true
30611     *
30612     * _.isEmpty([1, 2, 3]);
30613     * // => false
30614     *
30615     * _.isEmpty({ 'a': 1 });
30616     * // => false
30617     */
30618    function isEmpty(value) {
30619      if (value == null) {
30620        return true;
30621      }
30622      if (isArrayLike(value) &&
30623          (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' ||
30624            isBuffer(value) || isTypedArray(value) || isArguments(value))) {
30625        return !value.length;
30626      }
30627      var tag = getTag(value);
30628      if (tag == mapTag || tag == setTag) {
30629        return !value.size;
30630      }
30631      if (isPrototype(value)) {
30632        return !baseKeys(value).length;
30633      }
30634      for (var key in value) {
30635        if (hasOwnProperty.call(value, key)) {
30636          return false;
30637        }
30638      }
30639      return true;
30640    }
30641
30642    /**
30643     * Performs a deep comparison between two values to determine if they are
30644     * equivalent.
30645     *
30646     * **Note:** This method supports comparing arrays, array buffers, booleans,
30647     * date objects, error objects, maps, numbers, `Object` objects, regexes,
30648     * sets, strings, symbols, and typed arrays. `Object` objects are compared
30649     * by their own, not inherited, enumerable properties. Functions and DOM
30650     * nodes are compared by strict equality, i.e. `===`.
30651     *
30652     * @static
30653     * @memberOf _
30654     * @since 0.1.0
30655     * @category Lang
30656     * @param {*} value The value to compare.
30657     * @param {*} other The other value to compare.
30658     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
30659     * @example
30660     *
30661     * var object = { 'a': 1 };
30662     * var other = { 'a': 1 };
30663     *
30664     * _.isEqual(object, other);
30665     * // => true
30666     *
30667     * object === other;
30668     * // => false
30669     */
30670    function isEqual(value, other) {
30671      return baseIsEqual(value, other);
30672    }
30673
30674    /**
30675     * This method is like `_.isEqual` except that it accepts `customizer` which
30676     * is invoked to compare values. If `customizer` returns `undefined`, comparisons
30677     * are handled by the method instead. The `customizer` is invoked with up to
30678     * six arguments: (objValue, othValue [, index|key, object, other, stack]).
30679     *
30680     * @static
30681     * @memberOf _
30682     * @since 4.0.0
30683     * @category Lang
30684     * @param {*} value The value to compare.
30685     * @param {*} other The other value to compare.
30686     * @param {Function} [customizer] The function to customize comparisons.
30687     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
30688     * @example
30689     *
30690     * function isGreeting(value) {
30691     *   return /^h(?:i|ello)$/.test(value);
30692     * }
30693     *
30694     * function customizer(objValue, othValue) {
30695     *   if (isGreeting(objValue) && isGreeting(othValue)) {
30696     *     return true;
30697     *   }
30698     * }
30699     *
30700     * var array = ['hello', 'goodbye'];
30701     * var other = ['hi', 'goodbye'];
30702     *
30703     * _.isEqualWith(array, other, customizer);
30704     * // => true
30705     */
30706    function isEqualWith(value, other, customizer) {
30707      customizer = typeof customizer == 'function' ? customizer : undefined;
30708      var result = customizer ? customizer(value, other) : undefined;
30709      return result === undefined ? baseIsEqual(value, other, undefined, customizer) : !!result;
30710    }
30711
30712    /**
30713     * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`,
30714     * `SyntaxError`, `TypeError`, or `URIError` object.
30715     *
30716     * @static
30717     * @memberOf _
30718     * @since 3.0.0
30719     * @category Lang
30720     * @param {*} value The value to check.
30721     * @returns {boolean} Returns `true` if `value` is an error object, else `false`.
30722     * @example
30723     *
30724     * _.isError(new Error);
30725     * // => true
30726     *
30727     * _.isError(Error);
30728     * // => false
30729     */
30730    function isError(value) {
30731      if (!isObjectLike(value)) {
30732        return false;
30733      }
30734      var tag = baseGetTag(value);
30735      return tag == errorTag || tag == domExcTag ||
30736        (typeof value.message == 'string' && typeof value.name == 'string' && !isPlainObject(value));
30737    }
30738
30739    /**
30740     * Checks if `value` is a finite primitive number.
30741     *
30742     * **Note:** This method is based on
30743     * [`Number.isFinite`](https://mdn.io/Number/isFinite).
30744     *
30745     * @static
30746     * @memberOf _
30747     * @since 0.1.0
30748     * @category Lang
30749     * @param {*} value The value to check.
30750     * @returns {boolean} Returns `true` if `value` is a finite number, else `false`.
30751     * @example
30752     *
30753     * _.isFinite(3);
30754     * // => true
30755     *
30756     * _.isFinite(Number.MIN_VALUE);
30757     * // => true
30758     *
30759     * _.isFinite(Infinity);
30760     * // => false
30761     *
30762     * _.isFinite('3');
30763     * // => false
30764     */
30765    function isFinite(value) {
30766      return typeof value == 'number' && nativeIsFinite(value);
30767    }
30768
30769    /**
30770     * Checks if `value` is classified as a `Function` object.
30771     *
30772     * @static
30773     * @memberOf _
30774     * @since 0.1.0
30775     * @category Lang
30776     * @param {*} value The value to check.
30777     * @returns {boolean} Returns `true` if `value` is a function, else `false`.
30778     * @example
30779     *
30780     * _.isFunction(_);
30781     * // => true
30782     *
30783     * _.isFunction(/abc/);
30784     * // => false
30785     */
30786    function isFunction(value) {
30787      if (!isObject(value)) {
30788        return false;
30789      }
30790      // The use of `Object#toString` avoids issues with the `typeof` operator
30791      // in Safari 9 which returns 'object' for typed arrays and other constructors.
30792      var tag = baseGetTag(value);
30793      return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;
30794    }
30795
30796    /**
30797     * Checks if `value` is an integer.
30798     *
30799     * **Note:** This method is based on
30800     * [`Number.isInteger`](https://mdn.io/Number/isInteger).
30801     *
30802     * @static
30803     * @memberOf _
30804     * @since 4.0.0
30805     * @category Lang
30806     * @param {*} value The value to check.
30807     * @returns {boolean} Returns `true` if `value` is an integer, else `false`.
30808     * @example
30809     *
30810     * _.isInteger(3);
30811     * // => true
30812     *
30813     * _.isInteger(Number.MIN_VALUE);
30814     * // => false
30815     *
30816     * _.isInteger(Infinity);
30817     * // => false
30818     *
30819     * _.isInteger('3');
30820     * // => false
30821     */
30822    function isInteger(value) {
30823      return typeof value == 'number' && value == toInteger(value);
30824    }
30825
30826    /**
30827     * Checks if `value` is a valid array-like length.
30828     *
30829     * **Note:** This method is loosely based on
30830     * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).
30831     *
30832     * @static
30833     * @memberOf _
30834     * @since 4.0.0
30835     * @category Lang
30836     * @param {*} value The value to check.
30837     * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.
30838     * @example
30839     *
30840     * _.isLength(3);
30841     * // => true
30842     *
30843     * _.isLength(Number.MIN_VALUE);
30844     * // => false
30845     *
30846     * _.isLength(Infinity);
30847     * // => false
30848     *
30849     * _.isLength('3');
30850     * // => false
30851     */
30852    function isLength(value) {
30853      return typeof value == 'number' &&
30854        value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;
30855    }
30856
30857    /**
30858     * Checks if `value` is the
30859     * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)
30860     * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
30861     *
30862     * @static
30863     * @memberOf _
30864     * @since 0.1.0
30865     * @category Lang
30866     * @param {*} value The value to check.
30867     * @returns {boolean} Returns `true` if `value` is an object, else `false`.
30868     * @example
30869     *
30870     * _.isObject({});
30871     * // => true
30872     *
30873     * _.isObject([1, 2, 3]);
30874     * // => true
30875     *
30876     * _.isObject(_.noop);
30877     * // => true
30878     *
30879     * _.isObject(null);
30880     * // => false
30881     */
30882    function isObject(value) {
30883      var type = typeof value;
30884      return value != null && (type == 'object' || type == 'function');
30885    }
30886
30887    /**
30888     * Checks if `value` is object-like. A value is object-like if it's not `null`
30889     * and has a `typeof` result of "object".
30890     *
30891     * @static
30892     * @memberOf _
30893     * @since 4.0.0
30894     * @category Lang
30895     * @param {*} value The value to check.
30896     * @returns {boolean} Returns `true` if `value` is object-like, else `false`.
30897     * @example
30898     *
30899     * _.isObjectLike({});
30900     * // => true
30901     *
30902     * _.isObjectLike([1, 2, 3]);
30903     * // => true
30904     *
30905     * _.isObjectLike(_.noop);
30906     * // => false
30907     *
30908     * _.isObjectLike(null);
30909     * // => false
30910     */
30911    function isObjectLike(value) {
30912      return value != null && typeof value == 'object';
30913    }
30914
30915    /**
30916     * Checks if `value` is classified as a `Map` object.
30917     *
30918     * @static
30919     * @memberOf _
30920     * @since 4.3.0
30921     * @category Lang
30922     * @param {*} value The value to check.
30923     * @returns {boolean} Returns `true` if `value` is a map, else `false`.
30924     * @example
30925     *
30926     * _.isMap(new Map);
30927     * // => true
30928     *
30929     * _.isMap(new WeakMap);
30930     * // => false
30931     */
30932    var isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;
30933
30934    /**
30935     * Performs a partial deep comparison between `object` and `source` to
30936     * determine if `object` contains equivalent property values.
30937     *
30938     * **Note:** This method is equivalent to `_.matches` when `source` is
30939     * partially applied.
30940     *
30941     * Partial comparisons will match empty array and empty object `source`
30942     * values against any array or object value, respectively. See `_.isEqual`
30943     * for a list of supported value comparisons.
30944     *
30945     * @static
30946     * @memberOf _
30947     * @since 3.0.0
30948     * @category Lang
30949     * @param {Object} object The object to inspect.
30950     * @param {Object} source The object of property values to match.
30951     * @returns {boolean} Returns `true` if `object` is a match, else `false`.
30952     * @example
30953     *
30954     * var object = { 'a': 1, 'b': 2 };
30955     *
30956     * _.isMatch(object, { 'b': 2 });
30957     * // => true
30958     *
30959     * _.isMatch(object, { 'b': 1 });
30960     * // => false
30961     */
30962    function isMatch(object, source) {
30963      return object === source || baseIsMatch(object, source, getMatchData(source));
30964    }
30965
30966    /**
30967     * This method is like `_.isMatch` except that it accepts `customizer` which
30968     * is invoked to compare values. If `customizer` returns `undefined`, comparisons
30969     * are handled by the method instead. The `customizer` is invoked with five
30970     * arguments: (objValue, srcValue, index|key, object, source).
30971     *
30972     * @static
30973     * @memberOf _
30974     * @since 4.0.0
30975     * @category Lang
30976     * @param {Object} object The object to inspect.
30977     * @param {Object} source The object of property values to match.
30978     * @param {Function} [customizer] The function to customize comparisons.
30979     * @returns {boolean} Returns `true` if `object` is a match, else `false`.
30980     * @example
30981     *
30982     * function isGreeting(value) {
30983     *   return /^h(?:i|ello)$/.test(value);
30984     * }
30985     *
30986     * function customizer(objValue, srcValue) {
30987     *   if (isGreeting(objValue) && isGreeting(srcValue)) {
30988     *     return true;
30989     *   }
30990     * }
30991     *
30992     * var object = { 'greeting': 'hello' };
30993     * var source = { 'greeting': 'hi' };
30994     *
30995     * _.isMatchWith(object, source, customizer);
30996     * // => true
30997     */
30998    function isMatchWith(object, source, customizer) {
30999      customizer = typeof customizer == 'function' ? customizer : undefined;
31000      return baseIsMatch(object, source, getMatchData(source), customizer);
31001    }
31002
31003    /**
31004     * Checks if `value` is `NaN`.
31005     *
31006     * **Note:** This method is based on
31007     * [`Number.isNaN`](https://mdn.io/Number/isNaN) and is not the same as
31008     * global [`isNaN`](https://mdn.io/isNaN) which returns `true` for
31009     * `undefined` and other non-number values.
31010     *
31011     * @static
31012     * @memberOf _
31013     * @since 0.1.0
31014     * @category Lang
31015     * @param {*} value The value to check.
31016     * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.
31017     * @example
31018     *
31019     * _.isNaN(NaN);
31020     * // => true
31021     *
31022     * _.isNaN(new Number(NaN));
31023     * // => true
31024     *
31025     * isNaN(undefined);
31026     * // => true
31027     *
31028     * _.isNaN(undefined);
31029     * // => false
31030     */
31031    function isNaN(value) {
31032      // An `NaN` primitive is the only value that is not equal to itself.
31033      // Perform the `toStringTag` check first to avoid errors with some
31034      // ActiveX objects in IE.
31035      return isNumber(value) && value != +value;
31036    }
31037
31038    /**
31039     * Checks if `value` is a pristine native function.
31040     *
31041     * **Note:** This method can't reliably detect native functions in the presence
31042     * of the core-js package because core-js circumvents this kind of detection.
31043     * Despite multiple requests, the core-js maintainer has made it clear: any
31044     * attempt to fix the detection will be obstructed. As a result, we're left
31045     * with little choice but to throw an error. Unfortunately, this also affects
31046     * packages, like [babel-polyfill](https://www.npmjs.com/package/babel-polyfill),
31047     * which rely on core-js.
31048     *
31049     * @static
31050     * @memberOf _
31051     * @since 3.0.0
31052     * @category Lang
31053     * @param {*} value The value to check.
31054     * @returns {boolean} Returns `true` if `value` is a native function,
31055     *  else `false`.
31056     * @example
31057     *
31058     * _.isNative(Array.prototype.push);
31059     * // => true
31060     *
31061     * _.isNative(_);
31062     * // => false
31063     */
31064    function isNative(value) {
31065      if (isMaskable(value)) {
31066        throw new Error(CORE_ERROR_TEXT);
31067      }
31068      return baseIsNative(value);
31069    }
31070
31071    /**
31072     * Checks if `value` is `null`.
31073     *
31074     * @static
31075     * @memberOf _
31076     * @since 0.1.0
31077     * @category Lang
31078     * @param {*} value The value to check.
31079     * @returns {boolean} Returns `true` if `value` is `null`, else `false`.
31080     * @example
31081     *
31082     * _.isNull(null);
31083     * // => true
31084     *
31085     * _.isNull(void 0);
31086     * // => false
31087     */
31088    function isNull(value) {
31089      return value === null;
31090    }
31091
31092    /**
31093     * Checks if `value` is `null` or `undefined`.
31094     *
31095     * @static
31096     * @memberOf _
31097     * @since 4.0.0
31098     * @category Lang
31099     * @param {*} value The value to check.
31100     * @returns {boolean} Returns `true` if `value` is nullish, else `false`.
31101     * @example
31102     *
31103     * _.isNil(null);
31104     * // => true
31105     *
31106     * _.isNil(void 0);
31107     * // => true
31108     *
31109     * _.isNil(NaN);
31110     * // => false
31111     */
31112    function isNil(value) {
31113      return value == null;
31114    }
31115
31116    /**
31117     * Checks if `value` is classified as a `Number` primitive or object.
31118     *
31119     * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are
31120     * classified as numbers, use the `_.isFinite` method.
31121     *
31122     * @static
31123     * @memberOf _
31124     * @since 0.1.0
31125     * @category Lang
31126     * @param {*} value The value to check.
31127     * @returns {boolean} Returns `true` if `value` is a number, else `false`.
31128     * @example
31129     *
31130     * _.isNumber(3);
31131     * // => true
31132     *
31133     * _.isNumber(Number.MIN_VALUE);
31134     * // => true
31135     *
31136     * _.isNumber(Infinity);
31137     * // => true
31138     *
31139     * _.isNumber('3');
31140     * // => false
31141     */
31142    function isNumber(value) {
31143      return typeof value == 'number' ||
31144        (isObjectLike(value) && baseGetTag(value) == numberTag);
31145    }
31146
31147    /**
31148     * Checks if `value` is a plain object, that is, an object created by the
31149     * `Object` constructor or one with a `[[Prototype]]` of `null`.
31150     *
31151     * @static
31152     * @memberOf _
31153     * @since 0.8.0
31154     * @category Lang
31155     * @param {*} value The value to check.
31156     * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.
31157     * @example
31158     *
31159     * function Foo() {
31160     *   this.a = 1;
31161     * }
31162     *
31163     * _.isPlainObject(new Foo);
31164     * // => false
31165     *
31166     * _.isPlainObject([1, 2, 3]);
31167     * // => false
31168     *
31169     * _.isPlainObject({ 'x': 0, 'y': 0 });
31170     * // => true
31171     *
31172     * _.isPlainObject(Object.create(null));
31173     * // => true
31174     */
31175    function isPlainObject(value) {
31176      if (!isObjectLike(value) || baseGetTag(value) != objectTag) {
31177        return false;
31178      }
31179      var proto = getPrototype(value);
31180      if (proto === null) {
31181        return true;
31182      }
31183      var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;
31184      return typeof Ctor == 'function' && Ctor instanceof Ctor &&
31185        funcToString.call(Ctor) == objectCtorString;
31186    }
31187
31188    /**
31189     * Checks if `value` is classified as a `RegExp` object.
31190     *
31191     * @static
31192     * @memberOf _
31193     * @since 0.1.0
31194     * @category Lang
31195     * @param {*} value The value to check.
31196     * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.
31197     * @example
31198     *
31199     * _.isRegExp(/abc/);
31200     * // => true
31201     *
31202     * _.isRegExp('/abc/');
31203     * // => false
31204     */
31205    var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp;
31206
31207    /**
31208     * Checks if `value` is a safe integer. An integer is safe if it's an IEEE-754
31209     * double precision number which isn't the result of a rounded unsafe integer.
31210     *
31211     * **Note:** This method is based on
31212     * [`Number.isSafeInteger`](https://mdn.io/Number/isSafeInteger).
31213     *
31214     * @static
31215     * @memberOf _
31216     * @since 4.0.0
31217     * @category Lang
31218     * @param {*} value The value to check.
31219     * @returns {boolean} Returns `true` if `value` is a safe integer, else `false`.
31220     * @example
31221     *
31222     * _.isSafeInteger(3);
31223     * // => true
31224     *
31225     * _.isSafeInteger(Number.MIN_VALUE);
31226     * // => false
31227     *
31228     * _.isSafeInteger(Infinity);
31229     * // => false
31230     *
31231     * _.isSafeInteger('3');
31232     * // => false
31233     */
31234    function isSafeInteger(value) {
31235      return isInteger(value) && value >= -MAX_SAFE_INTEGER && value <= MAX_SAFE_INTEGER;
31236    }
31237
31238    /**
31239     * Checks if `value` is classified as a `Set` object.
31240     *
31241     * @static
31242     * @memberOf _
31243     * @since 4.3.0
31244     * @category Lang
31245     * @param {*} value The value to check.
31246     * @returns {boolean} Returns `true` if `value` is a set, else `false`.
31247     * @example
31248     *
31249     * _.isSet(new Set);
31250     * // => true
31251     *
31252     * _.isSet(new WeakSet);
31253     * // => false
31254     */
31255    var isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;
31256
31257    /**
31258     * Checks if `value` is classified as a `String` primitive or object.
31259     *
31260     * @static
31261     * @since 0.1.0
31262     * @memberOf _
31263     * @category Lang
31264     * @param {*} value The value to check.
31265     * @returns {boolean} Returns `true` if `value` is a string, else `false`.
31266     * @example
31267     *
31268     * _.isString('abc');
31269     * // => true
31270     *
31271     * _.isString(1);
31272     * // => false
31273     */
31274    function isString(value) {
31275      return typeof value == 'string' ||
31276        (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag);
31277    }
31278
31279    /**
31280     * Checks if `value` is classified as a `Symbol` primitive or object.
31281     *
31282     * @static
31283     * @memberOf _
31284     * @since 4.0.0
31285     * @category Lang
31286     * @param {*} value The value to check.
31287     * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.
31288     * @example
31289     *
31290     * _.isSymbol(Symbol.iterator);
31291     * // => true
31292     *
31293     * _.isSymbol('abc');
31294     * // => false
31295     */
31296    function isSymbol(value) {
31297      return typeof value == 'symbol' ||
31298        (isObjectLike(value) && baseGetTag(value) == symbolTag);
31299    }
31300
31301    /**
31302     * Checks if `value` is classified as a typed array.
31303     *
31304     * @static
31305     * @memberOf _
31306     * @since 3.0.0
31307     * @category Lang
31308     * @param {*} value The value to check.
31309     * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.
31310     * @example
31311     *
31312     * _.isTypedArray(new Uint8Array);
31313     * // => true
31314     *
31315     * _.isTypedArray([]);
31316     * // => false
31317     */
31318    var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;
31319
31320    /**
31321     * Checks if `value` is `undefined`.
31322     *
31323     * @static
31324     * @since 0.1.0
31325     * @memberOf _
31326     * @category Lang
31327     * @param {*} value The value to check.
31328     * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`.
31329     * @example
31330     *
31331     * _.isUndefined(void 0);
31332     * // => true
31333     *
31334     * _.isUndefined(null);
31335     * // => false
31336     */
31337    function isUndefined(value) {
31338      return value === undefined;
31339    }
31340
31341    /**
31342     * Checks if `value` is classified as a `WeakMap` object.
31343     *
31344     * @static
31345     * @memberOf _
31346     * @since 4.3.0
31347     * @category Lang
31348     * @param {*} value The value to check.
31349     * @returns {boolean} Returns `true` if `value` is a weak map, else `false`.
31350     * @example
31351     *
31352     * _.isWeakMap(new WeakMap);
31353     * // => true
31354     *
31355     * _.isWeakMap(new Map);
31356     * // => false
31357     */
31358    function isWeakMap(value) {
31359      return isObjectLike(value) && getTag(value) == weakMapTag;
31360    }
31361
31362    /**
31363     * Checks if `value` is classified as a `WeakSet` object.
31364     *
31365     * @static
31366     * @memberOf _
31367     * @since 4.3.0
31368     * @category Lang
31369     * @param {*} value The value to check.
31370     * @returns {boolean} Returns `true` if `value` is a weak set, else `false`.
31371     * @example
31372     *
31373     * _.isWeakSet(new WeakSet);
31374     * // => true
31375     *
31376     * _.isWeakSet(new Set);
31377     * // => false
31378     */
31379    function isWeakSet(value) {
31380      return isObjectLike(value) && baseGetTag(value) == weakSetTag;
31381    }
31382
31383    /**
31384     * Checks if `value` is less than `other`.
31385     *
31386     * @static
31387     * @memberOf _
31388     * @since 3.9.0
31389     * @category Lang
31390     * @param {*} value The value to compare.
31391     * @param {*} other The other value to compare.
31392     * @returns {boolean} Returns `true` if `value` is less than `other`,
31393     *  else `false`.
31394     * @see _.gt
31395     * @example
31396     *
31397     * _.lt(1, 3);
31398     * // => true
31399     *
31400     * _.lt(3, 3);
31401     * // => false
31402     *
31403     * _.lt(3, 1);
31404     * // => false
31405     */
31406    var lt = createRelationalOperation(baseLt);
31407
31408    /**
31409     * Checks if `value` is less than or equal to `other`.
31410     *
31411     * @static
31412     * @memberOf _
31413     * @since 3.9.0
31414     * @category Lang
31415     * @param {*} value The value to compare.
31416     * @param {*} other The other value to compare.
31417     * @returns {boolean} Returns `true` if `value` is less than or equal to
31418     *  `other`, else `false`.
31419     * @see _.gte
31420     * @example
31421     *
31422     * _.lte(1, 3);
31423     * // => true
31424     *
31425     * _.lte(3, 3);
31426     * // => true
31427     *
31428     * _.lte(3, 1);
31429     * // => false
31430     */
31431    var lte = createRelationalOperation(function(value, other) {
31432      return value <= other;
31433    });
31434
31435    /**
31436     * Converts `value` to an array.
31437     *
31438     * @static
31439     * @since 0.1.0
31440     * @memberOf _
31441     * @category Lang
31442     * @param {*} value The value to convert.
31443     * @returns {Array} Returns the converted array.
31444     * @example
31445     *
31446     * _.toArray({ 'a': 1, 'b': 2 });
31447     * // => [1, 2]
31448     *
31449     * _.toArray('abc');
31450     * // => ['a', 'b', 'c']
31451     *
31452     * _.toArray(1);
31453     * // => []
31454     *
31455     * _.toArray(null);
31456     * // => []
31457     */
31458    function toArray(value) {
31459      if (!value) {
31460        return [];
31461      }
31462      if (isArrayLike(value)) {
31463        return isString(value) ? stringToArray(value) : copyArray(value);
31464      }
31465      if (symIterator && value[symIterator]) {
31466        return iteratorToArray(value[symIterator]());
31467      }
31468      var tag = getTag(value),
31469          func = tag == mapTag ? mapToArray : (tag == setTag ? setToArray : values);
31470
31471      return func(value);
31472    }
31473
31474    /**
31475     * Converts `value` to a finite number.
31476     *
31477     * @static
31478     * @memberOf _
31479     * @since 4.12.0
31480     * @category Lang
31481     * @param {*} value The value to convert.
31482     * @returns {number} Returns the converted number.
31483     * @example
31484     *
31485     * _.toFinite(3.2);
31486     * // => 3.2
31487     *
31488     * _.toFinite(Number.MIN_VALUE);
31489     * // => 5e-324
31490     *
31491     * _.toFinite(Infinity);
31492     * // => 1.7976931348623157e+308
31493     *
31494     * _.toFinite('3.2');
31495     * // => 3.2
31496     */
31497    function toFinite(value) {
31498      if (!value) {
31499        return value === 0 ? value : 0;
31500      }
31501      value = toNumber(value);
31502      if (value === INFINITY || value === -INFINITY) {
31503        var sign = (value < 0 ? -1 : 1);
31504        return sign * MAX_INTEGER;
31505      }
31506      return value === value ? value : 0;
31507    }
31508
31509    /**
31510     * Converts `value` to an integer.
31511     *
31512     * **Note:** This method is loosely based on
31513     * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).
31514     *
31515     * @static
31516     * @memberOf _
31517     * @since 4.0.0
31518     * @category Lang
31519     * @param {*} value The value to convert.
31520     * @returns {number} Returns the converted integer.
31521     * @example
31522     *
31523     * _.toInteger(3.2);
31524     * // => 3
31525     *
31526     * _.toInteger(Number.MIN_VALUE);
31527     * // => 0
31528     *
31529     * _.toInteger(Infinity);
31530     * // => 1.7976931348623157e+308
31531     *
31532     * _.toInteger('3.2');
31533     * // => 3
31534     */
31535    function toInteger(value) {
31536      var result = toFinite(value),
31537          remainder = result % 1;
31538
31539      return result === result ? (remainder ? result - remainder : result) : 0;
31540    }
31541
31542    /**
31543     * Converts `value` to an integer suitable for use as the length of an
31544     * array-like object.
31545     *
31546     * **Note:** This method is based on
31547     * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).
31548     *
31549     * @static
31550     * @memberOf _
31551     * @since 4.0.0
31552     * @category Lang
31553     * @param {*} value The value to convert.
31554     * @returns {number} Returns the converted integer.
31555     * @example
31556     *
31557     * _.toLength(3.2);
31558     * // => 3
31559     *
31560     * _.toLength(Number.MIN_VALUE);
31561     * // => 0
31562     *
31563     * _.toLength(Infinity);
31564     * // => 4294967295
31565     *
31566     * _.toLength('3.2');
31567     * // => 3
31568     */
31569    function toLength(value) {
31570      return value ? baseClamp(toInteger(value), 0, MAX_ARRAY_LENGTH) : 0;
31571    }
31572
31573    /**
31574     * Converts `value` to a number.
31575     *
31576     * @static
31577     * @memberOf _
31578     * @since 4.0.0
31579     * @category Lang
31580     * @param {*} value The value to process.
31581     * @returns {number} Returns the number.
31582     * @example
31583     *
31584     * _.toNumber(3.2);
31585     * // => 3.2
31586     *
31587     * _.toNumber(Number.MIN_VALUE);
31588     * // => 5e-324
31589     *
31590     * _.toNumber(Infinity);
31591     * // => Infinity
31592     *
31593     * _.toNumber('3.2');
31594     * // => 3.2
31595     */
31596    function toNumber(value) {
31597      if (typeof value == 'number') {
31598        return value;
31599      }
31600      if (isSymbol(value)) {
31601        return NAN;
31602      }
31603      if (isObject(value)) {
31604        var other = typeof value.valueOf == 'function' ? value.valueOf() : value;
31605        value = isObject(other) ? (other + '') : other;
31606      }
31607      if (typeof value != 'string') {
31608        return value === 0 ? value : +value;
31609      }
31610      value = baseTrim(value);
31611      var isBinary = reIsBinary.test(value);
31612      return (isBinary || reIsOctal.test(value))
31613        ? freeParseInt(value.slice(2), isBinary ? 2 : 8)
31614        : (reIsBadHex.test(value) ? NAN : +value);
31615    }
31616
31617    /**
31618     * Converts `value` to a plain object flattening inherited enumerable string
31619     * keyed properties of `value` to own properties of the plain object.
31620     *
31621     * @static
31622     * @memberOf _
31623     * @since 3.0.0
31624     * @category Lang
31625     * @param {*} value The value to convert.
31626     * @returns {Object} Returns the converted plain object.
31627     * @example
31628     *
31629     * function Foo() {
31630     *   this.b = 2;
31631     * }
31632     *
31633     * Foo.prototype.c = 3;
31634     *
31635     * _.assign({ 'a': 1 }, new Foo);
31636     * // => { 'a': 1, 'b': 2 }
31637     *
31638     * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));
31639     * // => { 'a': 1, 'b': 2, 'c': 3 }
31640     */
31641    function toPlainObject(value) {
31642      return copyObject(value, keysIn(value));
31643    }
31644
31645    /**
31646     * Converts `value` to a safe integer. A safe integer can be compared and
31647     * represented correctly.
31648     *
31649     * @static
31650     * @memberOf _
31651     * @since 4.0.0
31652     * @category Lang
31653     * @param {*} value The value to convert.
31654     * @returns {number} Returns the converted integer.
31655     * @example
31656     *
31657     * _.toSafeInteger(3.2);
31658     * // => 3
31659     *
31660     * _.toSafeInteger(Number.MIN_VALUE);
31661     * // => 0
31662     *
31663     * _.toSafeInteger(Infinity);
31664     * // => 9007199254740991
31665     *
31666     * _.toSafeInteger('3.2');
31667     * // => 3
31668     */
31669    function toSafeInteger(value) {
31670      return value
31671        ? baseClamp(toInteger(value), -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER)
31672        : (value === 0 ? value : 0);
31673    }
31674
31675    /**
31676     * Converts `value` to a string. An empty string is returned for `null`
31677     * and `undefined` values. The sign of `-0` is preserved.
31678     *
31679     * @static
31680     * @memberOf _
31681     * @since 4.0.0
31682     * @category Lang
31683     * @param {*} value The value to convert.
31684     * @returns {string} Returns the converted string.
31685     * @example
31686     *
31687     * _.toString(null);
31688     * // => ''
31689     *
31690     * _.toString(-0);
31691     * // => '-0'
31692     *
31693     * _.toString([1, 2, 3]);
31694     * // => '1,2,3'
31695     */
31696    function toString(value) {
31697      return value == null ? '' : baseToString(value);
31698    }
31699
31700    /*------------------------------------------------------------------------*/
31701
31702    /**
31703     * Assigns own enumerable string keyed properties of source objects to the
31704     * destination object. Source objects are applied from left to right.
31705     * Subsequent sources overwrite property assignments of previous sources.
31706     *
31707     * **Note:** This method mutates `object` and is loosely based on
31708     * [`Object.assign`](https://mdn.io/Object/assign).
31709     *
31710     * @static
31711     * @memberOf _
31712     * @since 0.10.0
31713     * @category Object
31714     * @param {Object} object The destination object.
31715     * @param {...Object} [sources] The source objects.
31716     * @returns {Object} Returns `object`.
31717     * @see _.assignIn
31718     * @example
31719     *
31720     * function Foo() {
31721     *   this.a = 1;
31722     * }
31723     *
31724     * function Bar() {
31725     *   this.c = 3;
31726     * }
31727     *
31728     * Foo.prototype.b = 2;
31729     * Bar.prototype.d = 4;
31730     *
31731     * _.assign({ 'a': 0 }, new Foo, new Bar);
31732     * // => { 'a': 1, 'c': 3 }
31733     */
31734    var assign = createAssigner(function(object, source) {
31735      if (isPrototype(source) || isArrayLike(source)) {
31736        copyObject(source, keys(source), object);
31737        return;
31738      }
31739      for (var key in source) {
31740        if (hasOwnProperty.call(source, key)) {
31741          assignValue(object, key, source[key]);
31742        }
31743      }
31744    });
31745
31746    /**
31747     * This method is like `_.assign` except that it iterates over own and
31748     * inherited source properties.
31749     *
31750     * **Note:** This method mutates `object`.
31751     *
31752     * @static
31753     * @memberOf _
31754     * @since 4.0.0
31755     * @alias extend
31756     * @category Object
31757     * @param {Object} object The destination object.
31758     * @param {...Object} [sources] The source objects.
31759     * @returns {Object} Returns `object`.
31760     * @see _.assign
31761     * @example
31762     *
31763     * function Foo() {
31764     *   this.a = 1;
31765     * }
31766     *
31767     * function Bar() {
31768     *   this.c = 3;
31769     * }
31770     *
31771     * Foo.prototype.b = 2;
31772     * Bar.prototype.d = 4;
31773     *
31774     * _.assignIn({ 'a': 0 }, new Foo, new Bar);
31775     * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 }
31776     */
31777    var assignIn = createAssigner(function(object, source) {
31778      copyObject(source, keysIn(source), object);
31779    });
31780
31781    /**
31782     * This method is like `_.assignIn` except that it accepts `customizer`
31783     * which is invoked to produce the assigned values. If `customizer` returns
31784     * `undefined`, assignment is handled by the method instead. The `customizer`
31785     * is invoked with five arguments: (objValue, srcValue, key, object, source).
31786     *
31787     * **Note:** This method mutates `object`.
31788     *
31789     * @static
31790     * @memberOf _
31791     * @since 4.0.0
31792     * @alias extendWith
31793     * @category Object
31794     * @param {Object} object The destination object.
31795     * @param {...Object} sources The source objects.
31796     * @param {Function} [customizer] The function to customize assigned values.
31797     * @returns {Object} Returns `object`.
31798     * @see _.assignWith
31799     * @example
31800     *
31801     * function customizer(objValue, srcValue) {
31802     *   return _.isUndefined(objValue) ? srcValue : objValue;
31803     * }
31804     *
31805     * var defaults = _.partialRight(_.assignInWith, customizer);
31806     *
31807     * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });
31808     * // => { 'a': 1, 'b': 2 }
31809     */
31810    var assignInWith = createAssigner(function(object, source, srcIndex, customizer) {
31811      copyObject(source, keysIn(source), object, customizer);
31812    });
31813
31814    /**
31815     * This method is like `_.assign` except that it accepts `customizer`
31816     * which is invoked to produce the assigned values. If `customizer` returns
31817     * `undefined`, assignment is handled by the method instead. The `customizer`
31818     * is invoked with five arguments: (objValue, srcValue, key, object, source).
31819     *
31820     * **Note:** This method mutates `object`.
31821     *
31822     * @static
31823     * @memberOf _
31824     * @since 4.0.0
31825     * @category Object
31826     * @param {Object} object The destination object.
31827     * @param {...Object} sources The source objects.
31828     * @param {Function} [customizer] The function to customize assigned values.
31829     * @returns {Object} Returns `object`.
31830     * @see _.assignInWith
31831     * @example
31832     *
31833     * function customizer(objValue, srcValue) {
31834     *   return _.isUndefined(objValue) ? srcValue : objValue;
31835     * }
31836     *
31837     * var defaults = _.partialRight(_.assignWith, customizer);
31838     *
31839     * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });
31840     * // => { 'a': 1, 'b': 2 }
31841     */
31842    var assignWith = createAssigner(function(object, source, srcIndex, customizer) {
31843      copyObject(source, keys(source), object, customizer);
31844    });
31845
31846    /**
31847     * Creates an array of values corresponding to `paths` of `object`.
31848     *
31849     * @static
31850     * @memberOf _
31851     * @since 1.0.0
31852     * @category Object
31853     * @param {Object} object The object to iterate over.
31854     * @param {...(string|string[])} [paths] The property paths to pick.
31855     * @returns {Array} Returns the picked values.
31856     * @example
31857     *
31858     * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };
31859     *
31860     * _.at(object, ['a[0].b.c', 'a[1]']);
31861     * // => [3, 4]
31862     */
31863    var at = flatRest(baseAt);
31864
31865    /**
31866     * Creates an object that inherits from the `prototype` object. If a
31867     * `properties` object is given, its own enumerable string keyed properties
31868     * are assigned to the created object.
31869     *
31870     * @static
31871     * @memberOf _
31872     * @since 2.3.0
31873     * @category Object
31874     * @param {Object} prototype The object to inherit from.
31875     * @param {Object} [properties] The properties to assign to the object.
31876     * @returns {Object} Returns the new object.
31877     * @example
31878     *
31879     * function Shape() {
31880     *   this.x = 0;
31881     *   this.y = 0;
31882     * }
31883     *
31884     * function Circle() {
31885     *   Shape.call(this);
31886     * }
31887     *
31888     * Circle.prototype = _.create(Shape.prototype, {
31889     *   'constructor': Circle
31890     * });
31891     *
31892     * var circle = new Circle;
31893     * circle instanceof Circle;
31894     * // => true
31895     *
31896     * circle instanceof Shape;
31897     * // => true
31898     */
31899    function create(prototype, properties) {
31900      var result = baseCreate(prototype);
31901      return properties == null ? result : baseAssign(result, properties);
31902    }
31903
31904    /**
31905     * Assigns own and inherited enumerable string keyed properties of source
31906     * objects to the destination object for all destination properties that
31907     * resolve to `undefined`. Source objects are applied from left to right.
31908     * Once a property is set, additional values of the same property are ignored.
31909     *
31910     * **Note:** This method mutates `object`.
31911     *
31912     * @static
31913     * @since 0.1.0
31914     * @memberOf _
31915     * @category Object
31916     * @param {Object} object The destination object.
31917     * @param {...Object} [sources] The source objects.
31918     * @returns {Object} Returns `object`.
31919     * @see _.defaultsDeep
31920     * @example
31921     *
31922     * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });
31923     * // => { 'a': 1, 'b': 2 }
31924     */
31925    var defaults = baseRest(function(object, sources) {
31926      object = Object(object);
31927
31928      var index = -1;
31929      var length = sources.length;
31930      var guard = length > 2 ? sources[2] : undefined;
31931
31932      if (guard && isIterateeCall(sources[0], sources[1], guard)) {
31933        length = 1;
31934      }
31935
31936      while (++index < length) {
31937        var source = sources[index];
31938        var props = keysIn(source);
31939        var propsIndex = -1;
31940        var propsLength = props.length;
31941
31942        while (++propsIndex < propsLength) {
31943          var key = props[propsIndex];
31944          var value = object[key];
31945
31946          if (value === undefined ||
31947              (eq(value, objectProto[key]) && !hasOwnProperty.call(object, key))) {
31948            object[key] = source[key];
31949          }
31950        }
31951      }
31952
31953      return object;
31954    });
31955
31956    /**
31957     * This method is like `_.defaults` except that it recursively assigns
31958     * default properties.
31959     *
31960     * **Note:** This method mutates `object`.
31961     *
31962     * @static
31963     * @memberOf _
31964     * @since 3.10.0
31965     * @category Object
31966     * @param {Object} object The destination object.
31967     * @param {...Object} [sources] The source objects.
31968     * @returns {Object} Returns `object`.
31969     * @see _.defaults
31970     * @example
31971     *
31972     * _.defaultsDeep({ 'a': { 'b': 2 } }, { 'a': { 'b': 1, 'c': 3 } });
31973     * // => { 'a': { 'b': 2, 'c': 3 } }
31974     */
31975    var defaultsDeep = baseRest(function(args) {
31976      args.push(undefined, customDefaultsMerge);
31977      return apply(mergeWith, undefined, args);
31978    });
31979
31980    /**
31981     * This method is like `_.find` except that it returns the key of the first
31982     * element `predicate` returns truthy for instead of the element itself.
31983     *
31984     * @static
31985     * @memberOf _
31986     * @since 1.1.0
31987     * @category Object
31988     * @param {Object} object The object to inspect.
31989     * @param {Function} [predicate=_.identity] The function invoked per iteration.
31990     * @returns {string|undefined} Returns the key of the matched element,
31991     *  else `undefined`.
31992     * @example
31993     *
31994     * var users = {
31995     *   'barney':  { 'age': 36, 'active': true },
31996     *   'fred':    { 'age': 40, 'active': false },
31997     *   'pebbles': { 'age': 1,  'active': true }
31998     * };
31999     *
32000     * _.findKey(users, function(o) { return o.age < 40; });
32001     * // => 'barney' (iteration order is not guaranteed)
32002     *
32003     * // The `_.matches` iteratee shorthand.
32004     * _.findKey(users, { 'age': 1, 'active': true });
32005     * // => 'pebbles'
32006     *
32007     * // The `_.matchesProperty` iteratee shorthand.
32008     * _.findKey(users, ['active', false]);
32009     * // => 'fred'
32010     *
32011     * // The `_.property` iteratee shorthand.
32012     * _.findKey(users, 'active');
32013     * // => 'barney'
32014     */
32015    function findKey(object, predicate) {
32016      return baseFindKey(object, getIteratee(predicate, 3), baseForOwn);
32017    }
32018
32019    /**
32020     * This method is like `_.findKey` except that it iterates over elements of
32021     * a collection in the opposite order.
32022     *
32023     * @static
32024     * @memberOf _
32025     * @since 2.0.0
32026     * @category Object
32027     * @param {Object} object The object to inspect.
32028     * @param {Function} [predicate=_.identity] The function invoked per iteration.
32029     * @returns {string|undefined} Returns the key of the matched element,
32030     *  else `undefined`.
32031     * @example
32032     *
32033     * var users = {
32034     *   'barney':  { 'age': 36, 'active': true },
32035     *   'fred':    { 'age': 40, 'active': false },
32036     *   'pebbles': { 'age': 1,  'active': true }
32037     * };
32038     *
32039     * _.findLastKey(users, function(o) { return o.age < 40; });
32040     * // => returns 'pebbles' assuming `_.findKey` returns 'barney'
32041     *
32042     * // The `_.matches` iteratee shorthand.
32043     * _.findLastKey(users, { 'age': 36, 'active': true });
32044     * // => 'barney'
32045     *
32046     * // The `_.matchesProperty` iteratee shorthand.
32047     * _.findLastKey(users, ['active', false]);
32048     * // => 'fred'
32049     *
32050     * // The `_.property` iteratee shorthand.
32051     * _.findLastKey(users, 'active');
32052     * // => 'pebbles'
32053     */
32054    function findLastKey(object, predicate) {
32055      return baseFindKey(object, getIteratee(predicate, 3), baseForOwnRight);
32056    }
32057
32058    /**
32059     * Iterates over own and inherited enumerable string keyed properties of an
32060     * object and invokes `iteratee` for each property. The iteratee is invoked
32061     * with three arguments: (value, key, object). Iteratee functions may exit
32062     * iteration early by explicitly returning `false`.
32063     *
32064     * @static
32065     * @memberOf _
32066     * @since 0.3.0
32067     * @category Object
32068     * @param {Object} object The object to iterate over.
32069     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
32070     * @returns {Object} Returns `object`.
32071     * @see _.forInRight
32072     * @example
32073     *
32074     * function Foo() {
32075     *   this.a = 1;
32076     *   this.b = 2;
32077     * }
32078     *
32079     * Foo.prototype.c = 3;
32080     *
32081     * _.forIn(new Foo, function(value, key) {
32082     *   console.log(key);
32083     * });
32084     * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed).
32085     */
32086    function forIn(object, iteratee) {
32087      return object == null
32088        ? object
32089        : baseFor(object, getIteratee(iteratee, 3), keysIn);
32090    }
32091
32092    /**
32093     * This method is like `_.forIn` except that it iterates over properties of
32094     * `object` in the opposite order.
32095     *
32096     * @static
32097     * @memberOf _
32098     * @since 2.0.0
32099     * @category Object
32100     * @param {Object} object The object to iterate over.
32101     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
32102     * @returns {Object} Returns `object`.
32103     * @see _.forIn
32104     * @example
32105     *
32106     * function Foo() {
32107     *   this.a = 1;
32108     *   this.b = 2;
32109     * }
32110     *
32111     * Foo.prototype.c = 3;
32112     *
32113     * _.forInRight(new Foo, function(value, key) {
32114     *   console.log(key);
32115     * });
32116     * // => Logs 'c', 'b', then 'a' assuming `_.forIn` logs 'a', 'b', then 'c'.
32117     */
32118    function forInRight(object, iteratee) {
32119      return object == null
32120        ? object
32121        : baseForRight(object, getIteratee(iteratee, 3), keysIn);
32122    }
32123
32124    /**
32125     * Iterates over own enumerable string keyed properties of an object and
32126     * invokes `iteratee` for each property. The iteratee is invoked with three
32127     * arguments: (value, key, object). Iteratee functions may exit iteration
32128     * early by explicitly returning `false`.
32129     *
32130     * @static
32131     * @memberOf _
32132     * @since 0.3.0
32133     * @category Object
32134     * @param {Object} object The object to iterate over.
32135     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
32136     * @returns {Object} Returns `object`.
32137     * @see _.forOwnRight
32138     * @example
32139     *
32140     * function Foo() {
32141     *   this.a = 1;
32142     *   this.b = 2;
32143     * }
32144     *
32145     * Foo.prototype.c = 3;
32146     *
32147     * _.forOwn(new Foo, function(value, key) {
32148     *   console.log(key);
32149     * });
32150     * // => Logs 'a' then 'b' (iteration order is not guaranteed).
32151     */
32152    function forOwn(object, iteratee) {
32153      return object && baseForOwn(object, getIteratee(iteratee, 3));
32154    }
32155
32156    /**
32157     * This method is like `_.forOwn` except that it iterates over properties of
32158     * `object` in the opposite order.
32159     *
32160     * @static
32161     * @memberOf _
32162     * @since 2.0.0
32163     * @category Object
32164     * @param {Object} object The object to iterate over.
32165     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
32166     * @returns {Object} Returns `object`.
32167     * @see _.forOwn
32168     * @example
32169     *
32170     * function Foo() {
32171     *   this.a = 1;
32172     *   this.b = 2;
32173     * }
32174     *
32175     * Foo.prototype.c = 3;
32176     *
32177     * _.forOwnRight(new Foo, function(value, key) {
32178     *   console.log(key);
32179     * });
32180     * // => Logs 'b' then 'a' assuming `_.forOwn` logs 'a' then 'b'.
32181     */
32182    function forOwnRight(object, iteratee) {
32183      return object && baseForOwnRight(object, getIteratee(iteratee, 3));
32184    }
32185
32186    /**
32187     * Creates an array of function property names from own enumerable properties
32188     * of `object`.
32189     *
32190     * @static
32191     * @since 0.1.0
32192     * @memberOf _
32193     * @category Object
32194     * @param {Object} object The object to inspect.
32195     * @returns {Array} Returns the function names.
32196     * @see _.functionsIn
32197     * @example
32198     *
32199     * function Foo() {
32200     *   this.a = _.constant('a');
32201     *   this.b = _.constant('b');
32202     * }
32203     *
32204     * Foo.prototype.c = _.constant('c');
32205     *
32206     * _.functions(new Foo);
32207     * // => ['a', 'b']
32208     */
32209    function functions(object) {
32210      return object == null ? [] : baseFunctions(object, keys(object));
32211    }
32212
32213    /**
32214     * Creates an array of function property names from own and inherited
32215     * enumerable properties of `object`.
32216     *
32217     * @static
32218     * @memberOf _
32219     * @since 4.0.0
32220     * @category Object
32221     * @param {Object} object The object to inspect.
32222     * @returns {Array} Returns the function names.
32223     * @see _.functions
32224     * @example
32225     *
32226     * function Foo() {
32227     *   this.a = _.constant('a');
32228     *   this.b = _.constant('b');
32229     * }
32230     *
32231     * Foo.prototype.c = _.constant('c');
32232     *
32233     * _.functionsIn(new Foo);
32234     * // => ['a', 'b', 'c']
32235     */
32236    function functionsIn(object) {
32237      return object == null ? [] : baseFunctions(object, keysIn(object));
32238    }
32239
32240    /**
32241     * Gets the value at `path` of `object`. If the resolved value is
32242     * `undefined`, the `defaultValue` is returned in its place.
32243     *
32244     * @static
32245     * @memberOf _
32246     * @since 3.7.0
32247     * @category Object
32248     * @param {Object} object The object to query.
32249     * @param {Array|string} path The path of the property to get.
32250     * @param {*} [defaultValue] The value returned for `undefined` resolved values.
32251     * @returns {*} Returns the resolved value.
32252     * @example
32253     *
32254     * var object = { 'a': [{ 'b': { 'c': 3 } }] };
32255     *
32256     * _.get(object, 'a[0].b.c');
32257     * // => 3
32258     *
32259     * _.get(object, ['a', '0', 'b', 'c']);
32260     * // => 3
32261     *
32262     * _.get(object, 'a.b.c', 'default');
32263     * // => 'default'
32264     */
32265    function get(object, path, defaultValue) {
32266      var result = object == null ? undefined : baseGet(object, path);
32267      return result === undefined ? defaultValue : result;
32268    }
32269
32270    /**
32271     * Checks if `path` is a direct property of `object`.
32272     *
32273     * @static
32274     * @since 0.1.0
32275     * @memberOf _
32276     * @category Object
32277     * @param {Object} object The object to query.
32278     * @param {Array|string} path The path to check.
32279     * @returns {boolean} Returns `true` if `path` exists, else `false`.
32280     * @example
32281     *
32282     * var object = { 'a': { 'b': 2 } };
32283     * var other = _.create({ 'a': _.create({ 'b': 2 }) });
32284     *
32285     * _.has(object, 'a');
32286     * // => true
32287     *
32288     * _.has(object, 'a.b');
32289     * // => true
32290     *
32291     * _.has(object, ['a', 'b']);
32292     * // => true
32293     *
32294     * _.has(other, 'a');
32295     * // => false
32296     */
32297    function has(object, path) {
32298      return object != null && hasPath(object, path, baseHas);
32299    }
32300
32301    /**
32302     * Checks if `path` is a direct or inherited property of `object`.
32303     *
32304     * @static
32305     * @memberOf _
32306     * @since 4.0.0
32307     * @category Object
32308     * @param {Object} object The object to query.
32309     * @param {Array|string} path The path to check.
32310     * @returns {boolean} Returns `true` if `path` exists, else `false`.
32311     * @example
32312     *
32313     * var object = _.create({ 'a': _.create({ 'b': 2 }) });
32314     *
32315     * _.hasIn(object, 'a');
32316     * // => true
32317     *
32318     * _.hasIn(object, 'a.b');
32319     * // => true
32320     *
32321     * _.hasIn(object, ['a', 'b']);
32322     * // => true
32323     *
32324     * _.hasIn(object, 'b');
32325     * // => false
32326     */
32327    function hasIn(object, path) {
32328      return object != null && hasPath(object, path, baseHasIn);
32329    }
32330
32331    /**
32332     * Creates an object composed of the inverted keys and values of `object`.
32333     * If `object` contains duplicate values, subsequent values overwrite
32334     * property assignments of previous values.
32335     *
32336     * @static
32337     * @memberOf _
32338     * @since 0.7.0
32339     * @category Object
32340     * @param {Object} object The object to invert.
32341     * @returns {Object} Returns the new inverted object.
32342     * @example
32343     *
32344     * var object = { 'a': 1, 'b': 2, 'c': 1 };
32345     *
32346     * _.invert(object);
32347     * // => { '1': 'c', '2': 'b' }
32348     */
32349    var invert = createInverter(function(result, value, key) {
32350      if (value != null &&
32351          typeof value.toString != 'function') {
32352        value = nativeObjectToString.call(value);
32353      }
32354
32355      result[value] = key;
32356    }, constant(identity));
32357
32358    /**
32359     * This method is like `_.invert` except that the inverted object is generated
32360     * from the results of running each element of `object` thru `iteratee`. The
32361     * corresponding inverted value of each inverted key is an array of keys
32362     * responsible for generating the inverted value. The iteratee is invoked
32363     * with one argument: (value).
32364     *
32365     * @static
32366     * @memberOf _
32367     * @since 4.1.0
32368     * @category Object
32369     * @param {Object} object The object to invert.
32370     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
32371     * @returns {Object} Returns the new inverted object.
32372     * @example
32373     *
32374     * var object = { 'a': 1, 'b': 2, 'c': 1 };
32375     *
32376     * _.invertBy(object);
32377     * // => { '1': ['a', 'c'], '2': ['b'] }
32378     *
32379     * _.invertBy(object, function(value) {
32380     *   return 'group' + value;
32381     * });
32382     * // => { 'group1': ['a', 'c'], 'group2': ['b'] }
32383     */
32384    var invertBy = createInverter(function(result, value, key) {
32385      if (value != null &&
32386          typeof value.toString != 'function') {
32387        value = nativeObjectToString.call(value);
32388      }
32389
32390      if (hasOwnProperty.call(result, value)) {
32391        result[value].push(key);
32392      } else {
32393        result[value] = [key];
32394      }
32395    }, getIteratee);
32396
32397    /**
32398     * Invokes the method at `path` of `object`.
32399     *
32400     * @static
32401     * @memberOf _
32402     * @since 4.0.0
32403     * @category Object
32404     * @param {Object} object The object to query.
32405     * @param {Array|string} path The path of the method to invoke.
32406     * @param {...*} [args] The arguments to invoke the method with.
32407     * @returns {*} Returns the result of the invoked method.
32408     * @example
32409     *
32410     * var object = { 'a': [{ 'b': { 'c': [1, 2, 3, 4] } }] };
32411     *
32412     * _.invoke(object, 'a[0].b.c.slice', 1, 3);
32413     * // => [2, 3]
32414     */
32415    var invoke = baseRest(baseInvoke);
32416
32417    /**
32418     * Creates an array of the own enumerable property names of `object`.
32419     *
32420     * **Note:** Non-object values are coerced to objects. See the
32421     * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)
32422     * for more details.
32423     *
32424     * @static
32425     * @since 0.1.0
32426     * @memberOf _
32427     * @category Object
32428     * @param {Object} object The object to query.
32429     * @returns {Array} Returns the array of property names.
32430     * @example
32431     *
32432     * function Foo() {
32433     *   this.a = 1;
32434     *   this.b = 2;
32435     * }
32436     *
32437     * Foo.prototype.c = 3;
32438     *
32439     * _.keys(new Foo);
32440     * // => ['a', 'b'] (iteration order is not guaranteed)
32441     *
32442     * _.keys('hi');
32443     * // => ['0', '1']
32444     */
32445    function keys(object) {
32446      return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);
32447    }
32448
32449    /**
32450     * Creates an array of the own and inherited enumerable property names of `object`.
32451     *
32452     * **Note:** Non-object values are coerced to objects.
32453     *
32454     * @static
32455     * @memberOf _
32456     * @since 3.0.0
32457     * @category Object
32458     * @param {Object} object The object to query.
32459     * @returns {Array} Returns the array of property names.
32460     * @example
32461     *
32462     * function Foo() {
32463     *   this.a = 1;
32464     *   this.b = 2;
32465     * }
32466     *
32467     * Foo.prototype.c = 3;
32468     *
32469     * _.keysIn(new Foo);
32470     * // => ['a', 'b', 'c'] (iteration order is not guaranteed)
32471     */
32472    function keysIn(object) {
32473      return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);
32474    }
32475
32476    /**
32477     * The opposite of `_.mapValues`; this method creates an object with the
32478     * same values as `object` and keys generated by running each own enumerable
32479     * string keyed property of `object` thru `iteratee`. The iteratee is invoked
32480     * with three arguments: (value, key, object).
32481     *
32482     * @static
32483     * @memberOf _
32484     * @since 3.8.0
32485     * @category Object
32486     * @param {Object} object The object to iterate over.
32487     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
32488     * @returns {Object} Returns the new mapped object.
32489     * @see _.mapValues
32490     * @example
32491     *
32492     * _.mapKeys({ 'a': 1, 'b': 2 }, function(value, key) {
32493     *   return key + value;
32494     * });
32495     * // => { 'a1': 1, 'b2': 2 }
32496     */
32497    function mapKeys(object, iteratee) {
32498      var result = {};
32499      iteratee = getIteratee(iteratee, 3);
32500
32501      baseForOwn(object, function(value, key, object) {
32502        baseAssignValue(result, iteratee(value, key, object), value);
32503      });
32504      return result;
32505    }
32506
32507    /**
32508     * Creates an object with the same keys as `object` and values generated
32509     * by running each own enumerable string keyed property of `object` thru
32510     * `iteratee`. The iteratee is invoked with three arguments:
32511     * (value, key, object).
32512     *
32513     * @static
32514     * @memberOf _
32515     * @since 2.4.0
32516     * @category Object
32517     * @param {Object} object The object to iterate over.
32518     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
32519     * @returns {Object} Returns the new mapped object.
32520     * @see _.mapKeys
32521     * @example
32522     *
32523     * var users = {
32524     *   'fred':    { 'user': 'fred',    'age': 40 },
32525     *   'pebbles': { 'user': 'pebbles', 'age': 1 }
32526     * };
32527     *
32528     * _.mapValues(users, function(o) { return o.age; });
32529     * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)
32530     *
32531     * // The `_.property` iteratee shorthand.
32532     * _.mapValues(users, 'age');
32533     * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)
32534     */
32535    function mapValues(object, iteratee) {
32536      var result = {};
32537      iteratee = getIteratee(iteratee, 3);
32538
32539      baseForOwn(object, function(value, key, object) {
32540        baseAssignValue(result, key, iteratee(value, key, object));
32541      });
32542      return result;
32543    }
32544
32545    /**
32546     * This method is like `_.assign` except that it recursively merges own and
32547     * inherited enumerable string keyed properties of source objects into the
32548     * destination object. Source properties that resolve to `undefined` are
32549     * skipped if a destination value exists. Array and plain object properties
32550     * are merged recursively. Other objects and value types are overridden by
32551     * assignment. Source objects are applied from left to right. Subsequent
32552     * sources overwrite property assignments of previous sources.
32553     *
32554     * **Note:** This method mutates `object`.
32555     *
32556     * @static
32557     * @memberOf _
32558     * @since 0.5.0
32559     * @category Object
32560     * @param {Object} object The destination object.
32561     * @param {...Object} [sources] The source objects.
32562     * @returns {Object} Returns `object`.
32563     * @example
32564     *
32565     * var object = {
32566     *   'a': [{ 'b': 2 }, { 'd': 4 }]
32567     * };
32568     *
32569     * var other = {
32570     *   'a': [{ 'c': 3 }, { 'e': 5 }]
32571     * };
32572     *
32573     * _.merge(object, other);
32574     * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }
32575     */
32576    var merge = createAssigner(function(object, source, srcIndex) {
32577      baseMerge(object, source, srcIndex);
32578    });
32579
32580    /**
32581     * This method is like `_.merge` except that it accepts `customizer` which
32582     * is invoked to produce the merged values of the destination and source
32583     * properties. If `customizer` returns `undefined`, merging is handled by the
32584     * method instead. The `customizer` is invoked with six arguments:
32585     * (objValue, srcValue, key, object, source, stack).
32586     *
32587     * **Note:** This method mutates `object`.
32588     *
32589     * @static
32590     * @memberOf _
32591     * @since 4.0.0
32592     * @category Object
32593     * @param {Object} object The destination object.
32594     * @param {...Object} sources The source objects.
32595     * @param {Function} customizer The function to customize assigned values.
32596     * @returns {Object} Returns `object`.
32597     * @example
32598     *
32599     * function customizer(objValue, srcValue) {
32600     *   if (_.isArray(objValue)) {
32601     *     return objValue.concat(srcValue);
32602     *   }
32603     * }
32604     *
32605     * var object = { 'a': [1], 'b': [2] };
32606     * var other = { 'a': [3], 'b': [4] };
32607     *
32608     * _.mergeWith(object, other, customizer);
32609     * // => { 'a': [1, 3], 'b': [2, 4] }
32610     */
32611    var mergeWith = createAssigner(function(object, source, srcIndex, customizer) {
32612      baseMerge(object, source, srcIndex, customizer);
32613    });
32614
32615    /**
32616     * The opposite of `_.pick`; this method creates an object composed of the
32617     * own and inherited enumerable property paths of `object` that are not omitted.
32618     *
32619     * **Note:** This method is considerably slower than `_.pick`.
32620     *
32621     * @static
32622     * @since 0.1.0
32623     * @memberOf _
32624     * @category Object
32625     * @param {Object} object The source object.
32626     * @param {...(string|string[])} [paths] The property paths to omit.
32627     * @returns {Object} Returns the new object.
32628     * @example
32629     *
32630     * var object = { 'a': 1, 'b': '2', 'c': 3 };
32631     *
32632     * _.omit(object, ['a', 'c']);
32633     * // => { 'b': '2' }
32634     */
32635    var omit = flatRest(function(object, paths) {
32636      var result = {};
32637      if (object == null) {
32638        return result;
32639      }
32640      var isDeep = false;
32641      paths = arrayMap(paths, function(path) {
32642        path = castPath(path, object);
32643        isDeep || (isDeep = path.length > 1);
32644        return path;
32645      });
32646      copyObject(object, getAllKeysIn(object), result);
32647      if (isDeep) {
32648        result = baseClone(result, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG, customOmitClone);
32649      }
32650      var length = paths.length;
32651      while (length--) {
32652        baseUnset(result, paths[length]);
32653      }
32654      return result;
32655    });
32656
32657    /**
32658     * The opposite of `_.pickBy`; this method creates an object composed of
32659     * the own and inherited enumerable string keyed properties of `object` that
32660     * `predicate` doesn't return truthy for. The predicate is invoked with two
32661     * arguments: (value, key).
32662     *
32663     * @static
32664     * @memberOf _
32665     * @since 4.0.0
32666     * @category Object
32667     * @param {Object} object The source object.
32668     * @param {Function} [predicate=_.identity] The function invoked per property.
32669     * @returns {Object} Returns the new object.
32670     * @example
32671     *
32672     * var object = { 'a': 1, 'b': '2', 'c': 3 };
32673     *
32674     * _.omitBy(object, _.isNumber);
32675     * // => { 'b': '2' }
32676     */
32677    function omitBy(object, predicate) {
32678      return pickBy(object, negate(getIteratee(predicate)));
32679    }
32680
32681    /**
32682     * Creates an object composed of the picked `object` properties.
32683     *
32684     * @static
32685     * @since 0.1.0
32686     * @memberOf _
32687     * @category Object
32688     * @param {Object} object The source object.
32689     * @param {...(string|string[])} [paths] The property paths to pick.
32690     * @returns {Object} Returns the new object.
32691     * @example
32692     *
32693     * var object = { 'a': 1, 'b': '2', 'c': 3 };
32694     *
32695     * _.pick(object, ['a', 'c']);
32696     * // => { 'a': 1, 'c': 3 }
32697     */
32698    var pick = flatRest(function(object, paths) {
32699      return object == null ? {} : basePick(object, paths);
32700    });
32701
32702    /**
32703     * Creates an object composed of the `object` properties `predicate` returns
32704     * truthy for. The predicate is invoked with two arguments: (value, key).
32705     *
32706     * @static
32707     * @memberOf _
32708     * @since 4.0.0
32709     * @category Object
32710     * @param {Object} object The source object.
32711     * @param {Function} [predicate=_.identity] The function invoked per property.
32712     * @returns {Object} Returns the new object.
32713     * @example
32714     *
32715     * var object = { 'a': 1, 'b': '2', 'c': 3 };
32716     *
32717     * _.pickBy(object, _.isNumber);
32718     * // => { 'a': 1, 'c': 3 }
32719     */
32720    function pickBy(object, predicate) {
32721      if (object == null) {
32722        return {};
32723      }
32724      var props = arrayMap(getAllKeysIn(object), function(prop) {
32725        return [prop];
32726      });
32727      predicate = getIteratee(predicate);
32728      return basePickBy(object, props, function(value, path) {
32729        return predicate(value, path[0]);
32730      });
32731    }
32732
32733    /**
32734     * This method is like `_.get` except that if the resolved value is a
32735     * function it's invoked with the `this` binding of its parent object and
32736     * its result is returned.
32737     *
32738     * @static
32739     * @since 0.1.0
32740     * @memberOf _
32741     * @category Object
32742     * @param {Object} object The object to query.
32743     * @param {Array|string} path The path of the property to resolve.
32744     * @param {*} [defaultValue] The value returned for `undefined` resolved values.
32745     * @returns {*} Returns the resolved value.
32746     * @example
32747     *
32748     * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] };
32749     *
32750     * _.result(object, 'a[0].b.c1');
32751     * // => 3
32752     *
32753     * _.result(object, 'a[0].b.c2');
32754     * // => 4
32755     *
32756     * _.result(object, 'a[0].b.c3', 'default');
32757     * // => 'default'
32758     *
32759     * _.result(object, 'a[0].b.c3', _.constant('default'));
32760     * // => 'default'
32761     */
32762    function result(object, path, defaultValue) {
32763      path = castPath(path, object);
32764
32765      var index = -1,
32766          length = path.length;
32767
32768      // Ensure the loop is entered when path is empty.
32769      if (!length) {
32770        length = 1;
32771        object = undefined;
32772      }
32773      while (++index < length) {
32774        var value = object == null ? undefined : object[toKey(path[index])];
32775        if (value === undefined) {
32776          index = length;
32777          value = defaultValue;
32778        }
32779        object = isFunction(value) ? value.call(object) : value;
32780      }
32781      return object;
32782    }
32783
32784    /**
32785     * Sets the value at `path` of `object`. If a portion of `path` doesn't exist,
32786     * it's created. Arrays are created for missing index properties while objects
32787     * are created for all other missing properties. Use `_.setWith` to customize
32788     * `path` creation.
32789     *
32790     * **Note:** This method mutates `object`.
32791     *
32792     * @static
32793     * @memberOf _
32794     * @since 3.7.0
32795     * @category Object
32796     * @param {Object} object The object to modify.
32797     * @param {Array|string} path The path of the property to set.
32798     * @param {*} value The value to set.
32799     * @returns {Object} Returns `object`.
32800     * @example
32801     *
32802     * var object = { 'a': [{ 'b': { 'c': 3 } }] };
32803     *
32804     * _.set(object, 'a[0].b.c', 4);
32805     * console.log(object.a[0].b.c);
32806     * // => 4
32807     *
32808     * _.set(object, ['x', '0', 'y', 'z'], 5);
32809     * console.log(object.x[0].y.z);
32810     * // => 5
32811     */
32812    function set(object, path, value) {
32813      return object == null ? object : baseSet(object, path, value);
32814    }
32815
32816    /**
32817     * This method is like `_.set` except that it accepts `customizer` which is
32818     * invoked to produce the objects of `path`.  If `customizer` returns `undefined`
32819     * path creation is handled by the method instead. The `customizer` is invoked
32820     * with three arguments: (nsValue, key, nsObject).
32821     *
32822     * **Note:** This method mutates `object`.
32823     *
32824     * @static
32825     * @memberOf _
32826     * @since 4.0.0
32827     * @category Object
32828     * @param {Object} object The object to modify.
32829     * @param {Array|string} path The path of the property to set.
32830     * @param {*} value The value to set.
32831     * @param {Function} [customizer] The function to customize assigned values.
32832     * @returns {Object} Returns `object`.
32833     * @example
32834     *
32835     * var object = {};
32836     *
32837     * _.setWith(object, '[0][1]', 'a', Object);
32838     * // => { '0': { '1': 'a' } }
32839     */
32840    function setWith(object, path, value, customizer) {
32841      customizer = typeof customizer == 'function' ? customizer : undefined;
32842      return object == null ? object : baseSet(object, path, value, customizer);
32843    }
32844
32845    /**
32846     * Creates an array of own enumerable string keyed-value pairs for `object`
32847     * which can be consumed by `_.fromPairs`. If `object` is a map or set, its
32848     * entries are returned.
32849     *
32850     * @static
32851     * @memberOf _
32852     * @since 4.0.0
32853     * @alias entries
32854     * @category Object
32855     * @param {Object} object The object to query.
32856     * @returns {Array} Returns the key-value pairs.
32857     * @example
32858     *
32859     * function Foo() {
32860     *   this.a = 1;
32861     *   this.b = 2;
32862     * }
32863     *
32864     * Foo.prototype.c = 3;
32865     *
32866     * _.toPairs(new Foo);
32867     * // => [['a', 1], ['b', 2]] (iteration order is not guaranteed)
32868     */
32869    var toPairs = createToPairs(keys);
32870
32871    /**
32872     * Creates an array of own and inherited enumerable string keyed-value pairs
32873     * for `object` which can be consumed by `_.fromPairs`. If `object` is a map
32874     * or set, its entries are returned.
32875     *
32876     * @static
32877     * @memberOf _
32878     * @since 4.0.0
32879     * @alias entriesIn
32880     * @category Object
32881     * @param {Object} object The object to query.
32882     * @returns {Array} Returns the key-value pairs.
32883     * @example
32884     *
32885     * function Foo() {
32886     *   this.a = 1;
32887     *   this.b = 2;
32888     * }
32889     *
32890     * Foo.prototype.c = 3;
32891     *
32892     * _.toPairsIn(new Foo);
32893     * // => [['a', 1], ['b', 2], ['c', 3]] (iteration order is not guaranteed)
32894     */
32895    var toPairsIn = createToPairs(keysIn);
32896
32897    /**
32898     * An alternative to `_.reduce`; this method transforms `object` to a new
32899     * `accumulator` object which is the result of running each of its own
32900     * enumerable string keyed properties thru `iteratee`, with each invocation
32901     * potentially mutating the `accumulator` object. If `accumulator` is not
32902     * provided, a new object with the same `[[Prototype]]` will be used. The
32903     * iteratee is invoked with four arguments: (accumulator, value, key, object).
32904     * Iteratee functions may exit iteration early by explicitly returning `false`.
32905     *
32906     * @static
32907     * @memberOf _
32908     * @since 1.3.0
32909     * @category Object
32910     * @param {Object} object The object to iterate over.
32911     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
32912     * @param {*} [accumulator] The custom accumulator value.
32913     * @returns {*} Returns the accumulated value.
32914     * @example
32915     *
32916     * _.transform([2, 3, 4], function(result, n) {
32917     *   result.push(n *= n);
32918     *   return n % 2 == 0;
32919     * }, []);
32920     * // => [4, 9]
32921     *
32922     * _.transform({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {
32923     *   (result[value] || (result[value] = [])).push(key);
32924     * }, {});
32925     * // => { '1': ['a', 'c'], '2': ['b'] }
32926     */
32927    function transform(object, iteratee, accumulator) {
32928      var isArr = isArray(object),
32929          isArrLike = isArr || isBuffer(object) || isTypedArray(object);
32930
32931      iteratee = getIteratee(iteratee, 4);
32932      if (accumulator == null) {
32933        var Ctor = object && object.constructor;
32934        if (isArrLike) {
32935          accumulator = isArr ? new Ctor : [];
32936        }
32937        else if (isObject(object)) {
32938          accumulator = isFunction(Ctor) ? baseCreate(getPrototype(object)) : {};
32939        }
32940        else {
32941          accumulator = {};
32942        }
32943      }
32944      (isArrLike ? arrayEach : baseForOwn)(object, function(value, index, object) {
32945        return iteratee(accumulator, value, index, object);
32946      });
32947      return accumulator;
32948    }
32949
32950    /**
32951     * Removes the property at `path` of `object`.
32952     *
32953     * **Note:** This method mutates `object`.
32954     *
32955     * @static
32956     * @memberOf _
32957     * @since 4.0.0
32958     * @category Object
32959     * @param {Object} object The object to modify.
32960     * @param {Array|string} path The path of the property to unset.
32961     * @returns {boolean} Returns `true` if the property is deleted, else `false`.
32962     * @example
32963     *
32964     * var object = { 'a': [{ 'b': { 'c': 7 } }] };
32965     * _.unset(object, 'a[0].b.c');
32966     * // => true
32967     *
32968     * console.log(object);
32969     * // => { 'a': [{ 'b': {} }] };
32970     *
32971     * _.unset(object, ['a', '0', 'b', 'c']);
32972     * // => true
32973     *
32974     * console.log(object);
32975     * // => { 'a': [{ 'b': {} }] };
32976     */
32977    function unset(object, path) {
32978      return object == null ? true : baseUnset(object, path);
32979    }
32980
32981    /**
32982     * This method is like `_.set` except that accepts `updater` to produce the
32983     * value to set. Use `_.updateWith` to customize `path` creation. The `updater`
32984     * is invoked with one argument: (value).
32985     *
32986     * **Note:** This method mutates `object`.
32987     *
32988     * @static
32989     * @memberOf _
32990     * @since 4.6.0
32991     * @category Object
32992     * @param {Object} object The object to modify.
32993     * @param {Array|string} path The path of the property to set.
32994     * @param {Function} updater The function to produce the updated value.
32995     * @returns {Object} Returns `object`.
32996     * @example
32997     *
32998     * var object = { 'a': [{ 'b': { 'c': 3 } }] };
32999     *
33000     * _.update(object, 'a[0].b.c', function(n) { return n * n; });
33001     * console.log(object.a[0].b.c);
33002     * // => 9
33003     *
33004     * _.update(object, 'x[0].y.z', function(n) { return n ? n + 1 : 0; });
33005     * console.log(object.x[0].y.z);
33006     * // => 0
33007     */
33008    function update(object, path, updater) {
33009      return object == null ? object : baseUpdate(object, path, castFunction(updater));
33010    }
33011
33012    /**
33013     * This method is like `_.update` except that it accepts `customizer` which is
33014     * invoked to produce the objects of `path`.  If `customizer` returns `undefined`
33015     * path creation is handled by the method instead. The `customizer` is invoked
33016     * with three arguments: (nsValue, key, nsObject).
33017     *
33018     * **Note:** This method mutates `object`.
33019     *
33020     * @static
33021     * @memberOf _
33022     * @since 4.6.0
33023     * @category Object
33024     * @param {Object} object The object to modify.
33025     * @param {Array|string} path The path of the property to set.
33026     * @param {Function} updater The function to produce the updated value.
33027     * @param {Function} [customizer] The function to customize assigned values.
33028     * @returns {Object} Returns `object`.
33029     * @example
33030     *
33031     * var object = {};
33032     *
33033     * _.updateWith(object, '[0][1]', _.constant('a'), Object);
33034     * // => { '0': { '1': 'a' } }
33035     */
33036    function updateWith(object, path, updater, customizer) {
33037      customizer = typeof customizer == 'function' ? customizer : undefined;
33038      return object == null ? object : baseUpdate(object, path, castFunction(updater), customizer);
33039    }
33040
33041    /**
33042     * Creates an array of the own enumerable string keyed property values of `object`.
33043     *
33044     * **Note:** Non-object values are coerced to objects.
33045     *
33046     * @static
33047     * @since 0.1.0
33048     * @memberOf _
33049     * @category Object
33050     * @param {Object} object The object to query.
33051     * @returns {Array} Returns the array of property values.
33052     * @example
33053     *
33054     * function Foo() {
33055     *   this.a = 1;
33056     *   this.b = 2;
33057     * }
33058     *
33059     * Foo.prototype.c = 3;
33060     *
33061     * _.values(new Foo);
33062     * // => [1, 2] (iteration order is not guaranteed)
33063     *
33064     * _.values('hi');
33065     * // => ['h', 'i']
33066     */
33067    function values(object) {
33068      return object == null ? [] : baseValues(object, keys(object));
33069    }
33070
33071    /**
33072     * Creates an array of the own and inherited enumerable string keyed property
33073     * values of `object`.
33074     *
33075     * **Note:** Non-object values are coerced to objects.
33076     *
33077     * @static
33078     * @memberOf _
33079     * @since 3.0.0
33080     * @category Object
33081     * @param {Object} object The object to query.
33082     * @returns {Array} Returns the array of property values.
33083     * @example
33084     *
33085     * function Foo() {
33086     *   this.a = 1;
33087     *   this.b = 2;
33088     * }
33089     *
33090     * Foo.prototype.c = 3;
33091     *
33092     * _.valuesIn(new Foo);
33093     * // => [1, 2, 3] (iteration order is not guaranteed)
33094     */
33095    function valuesIn(object) {
33096      return object == null ? [] : baseValues(object, keysIn(object));
33097    }
33098
33099    /*------------------------------------------------------------------------*/
33100
33101    /**
33102     * Clamps `number` within the inclusive `lower` and `upper` bounds.
33103     *
33104     * @static
33105     * @memberOf _
33106     * @since 4.0.0
33107     * @category Number
33108     * @param {number} number The number to clamp.
33109     * @param {number} [lower] The lower bound.
33110     * @param {number} upper The upper bound.
33111     * @returns {number} Returns the clamped number.
33112     * @example
33113     *
33114     * _.clamp(-10, -5, 5);
33115     * // => -5
33116     *
33117     * _.clamp(10, -5, 5);
33118     * // => 5
33119     */
33120    function clamp(number, lower, upper) {
33121      if (upper === undefined) {
33122        upper = lower;
33123        lower = undefined;
33124      }
33125      if (upper !== undefined) {
33126        upper = toNumber(upper);
33127        upper = upper === upper ? upper : 0;
33128      }
33129      if (lower !== undefined) {
33130        lower = toNumber(lower);
33131        lower = lower === lower ? lower : 0;
33132      }
33133      return baseClamp(toNumber(number), lower, upper);
33134    }
33135
33136    /**
33137     * Checks if `n` is between `start` and up to, but not including, `end`. If
33138     * `end` is not specified, it's set to `start` with `start` then set to `0`.
33139     * If `start` is greater than `end` the params are swapped to support
33140     * negative ranges.
33141     *
33142     * @static
33143     * @memberOf _
33144     * @since 3.3.0
33145     * @category Number
33146     * @param {number} number The number to check.
33147     * @param {number} [start=0] The start of the range.
33148     * @param {number} end The end of the range.
33149     * @returns {boolean} Returns `true` if `number` is in the range, else `false`.
33150     * @see _.range, _.rangeRight
33151     * @example
33152     *
33153     * _.inRange(3, 2, 4);
33154     * // => true
33155     *
33156     * _.inRange(4, 8);
33157     * // => true
33158     *
33159     * _.inRange(4, 2);
33160     * // => false
33161     *
33162     * _.inRange(2, 2);
33163     * // => false
33164     *
33165     * _.inRange(1.2, 2);
33166     * // => true
33167     *
33168     * _.inRange(5.2, 4);
33169     * // => false
33170     *
33171     * _.inRange(-3, -2, -6);
33172     * // => true
33173     */
33174    function inRange(number, start, end) {
33175      start = toFinite(start);
33176      if (end === undefined) {
33177        end = start;
33178        start = 0;
33179      } else {
33180        end = toFinite(end);
33181      }
33182      number = toNumber(number);
33183      return baseInRange(number, start, end);
33184    }
33185
33186    /**
33187     * Produces a random number between the inclusive `lower` and `upper` bounds.
33188     * If only one argument is provided a number between `0` and the given number
33189     * is returned. If `floating` is `true`, or either `lower` or `upper` are
33190     * floats, a floating-point number is returned instead of an integer.
33191     *
33192     * **Note:** JavaScript follows the IEEE-754 standard for resolving
33193     * floating-point values which can produce unexpected results.
33194     *
33195     * @static
33196     * @memberOf _
33197     * @since 0.7.0
33198     * @category Number
33199     * @param {number} [lower=0] The lower bound.
33200     * @param {number} [upper=1] The upper bound.
33201     * @param {boolean} [floating] Specify returning a floating-point number.
33202     * @returns {number} Returns the random number.
33203     * @example
33204     *
33205     * _.random(0, 5);
33206     * // => an integer between 0 and 5
33207     *
33208     * _.random(5);
33209     * // => also an integer between 0 and 5
33210     *
33211     * _.random(5, true);
33212     * // => a floating-point number between 0 and 5
33213     *
33214     * _.random(1.2, 5.2);
33215     * // => a floating-point number between 1.2 and 5.2
33216     */
33217    function random(lower, upper, floating) {
33218      if (floating && typeof floating != 'boolean' && isIterateeCall(lower, upper, floating)) {
33219        upper = floating = undefined;
33220      }
33221      if (floating === undefined) {
33222        if (typeof upper == 'boolean') {
33223          floating = upper;
33224          upper = undefined;
33225        }
33226        else if (typeof lower == 'boolean') {
33227          floating = lower;
33228          lower = undefined;
33229        }
33230      }
33231      if (lower === undefined && upper === undefined) {
33232        lower = 0;
33233        upper = 1;
33234      }
33235      else {
33236        lower = toFinite(lower);
33237        if (upper === undefined) {
33238          upper = lower;
33239          lower = 0;
33240        } else {
33241          upper = toFinite(upper);
33242        }
33243      }
33244      if (lower > upper) {
33245        var temp = lower;
33246        lower = upper;
33247        upper = temp;
33248      }
33249      if (floating || lower % 1 || upper % 1) {
33250        var rand = nativeRandom();
33251        return nativeMin(lower + (rand * (upper - lower + freeParseFloat('1e-' + ((rand + '').length - 1)))), upper);
33252      }
33253      return baseRandom(lower, upper);
33254    }
33255
33256    /*------------------------------------------------------------------------*/
33257
33258    /**
33259     * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase).
33260     *
33261     * @static
33262     * @memberOf _
33263     * @since 3.0.0
33264     * @category String
33265     * @param {string} [string=''] The string to convert.
33266     * @returns {string} Returns the camel cased string.
33267     * @example
33268     *
33269     * _.camelCase('Foo Bar');
33270     * // => 'fooBar'
33271     *
33272     * _.camelCase('--foo-bar--');
33273     * // => 'fooBar'
33274     *
33275     * _.camelCase('__FOO_BAR__');
33276     * // => 'fooBar'
33277     */
33278    var camelCase = createCompounder(function(result, word, index) {
33279      word = word.toLowerCase();
33280      return result + (index ? capitalize(word) : word);
33281    });
33282
33283    /**
33284     * Converts the first character of `string` to upper case and the remaining
33285     * to lower case.
33286     *
33287     * @static
33288     * @memberOf _
33289     * @since 3.0.0
33290     * @category String
33291     * @param {string} [string=''] The string to capitalize.
33292     * @returns {string} Returns the capitalized string.
33293     * @example
33294     *
33295     * _.capitalize('FRED');
33296     * // => 'Fred'
33297     */
33298    function capitalize(string) {
33299      return upperFirst(toString(string).toLowerCase());
33300    }
33301
33302    /**
33303     * Deburrs `string` by converting
33304     * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table)
33305     * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A)
33306     * letters to basic Latin letters and removing
33307     * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks).
33308     *
33309     * @static
33310     * @memberOf _
33311     * @since 3.0.0
33312     * @category String
33313     * @param {string} [string=''] The string to deburr.
33314     * @returns {string} Returns the deburred string.
33315     * @example
33316     *
33317     * _.deburr('déjà vu');
33318     * // => 'deja vu'
33319     */
33320    function deburr(string) {
33321      string = toString(string);
33322      return string && string.replace(reLatin, deburrLetter).replace(reComboMark, '');
33323    }
33324
33325    /**
33326     * Checks if `string` ends with the given target string.
33327     *
33328     * @static
33329     * @memberOf _
33330     * @since 3.0.0
33331     * @category String
33332     * @param {string} [string=''] The string to inspect.
33333     * @param {string} [target] The string to search for.
33334     * @param {number} [position=string.length] The position to search up to.
33335     * @returns {boolean} Returns `true` if `string` ends with `target`,
33336     *  else `false`.
33337     * @example
33338     *
33339     * _.endsWith('abc', 'c');
33340     * // => true
33341     *
33342     * _.endsWith('abc', 'b');
33343     * // => false
33344     *
33345     * _.endsWith('abc', 'b', 2);
33346     * // => true
33347     */
33348    function endsWith(string, target, position) {
33349      string = toString(string);
33350      target = baseToString(target);
33351
33352      var length = string.length;
33353      position = position === undefined
33354        ? length
33355        : baseClamp(toInteger(position), 0, length);
33356
33357      var end = position;
33358      position -= target.length;
33359      return position >= 0 && string.slice(position, end) == target;
33360    }
33361
33362    /**
33363     * Converts the characters "&", "<", ">", '"', and "'" in `string` to their
33364     * corresponding HTML entities.
33365     *
33366     * **Note:** No other characters are escaped. To escape additional
33367     * characters use a third-party library like [_he_](https://mths.be/he).
33368     *
33369     * Though the ">" character is escaped for symmetry, characters like
33370     * ">" and "/" don't need escaping in HTML and have no special meaning
33371     * unless they're part of a tag or unquoted attribute value. See
33372     * [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands)
33373     * (under "semi-related fun fact") for more details.
33374     *
33375     * When working with HTML you should always
33376     * [quote attribute values](http://wonko.com/post/html-escaping) to reduce
33377     * XSS vectors.
33378     *
33379     * @static
33380     * @since 0.1.0
33381     * @memberOf _
33382     * @category String
33383     * @param {string} [string=''] The string to escape.
33384     * @returns {string} Returns the escaped string.
33385     * @example
33386     *
33387     * _.escape('fred, barney, & pebbles');
33388     * // => 'fred, barney, &amp; pebbles'
33389     */
33390    function escape(string) {
33391      string = toString(string);
33392      return (string && reHasUnescapedHtml.test(string))
33393        ? string.replace(reUnescapedHtml, escapeHtmlChar)
33394        : string;
33395    }
33396
33397    /**
33398     * Escapes the `RegExp` special characters "^", "$", "\", ".", "*", "+",
33399     * "?", "(", ")", "[", "]", "{", "}", and "|" in `string`.
33400     *
33401     * @static
33402     * @memberOf _
33403     * @since 3.0.0
33404     * @category String
33405     * @param {string} [string=''] The string to escape.
33406     * @returns {string} Returns the escaped string.
33407     * @example
33408     *
33409     * _.escapeRegExp('[lodash](https://lodash.com/)');
33410     * // => '\[lodash\]\(https://lodash\.com/\)'
33411     */
33412    function escapeRegExp(string) {
33413      string = toString(string);
33414      return (string && reHasRegExpChar.test(string))
33415        ? string.replace(reRegExpChar, '\\$&')
33416        : string;
33417    }
33418
33419    /**
33420     * Converts `string` to
33421     * [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles).
33422     *
33423     * @static
33424     * @memberOf _
33425     * @since 3.0.0
33426     * @category String
33427     * @param {string} [string=''] The string to convert.
33428     * @returns {string} Returns the kebab cased string.
33429     * @example
33430     *
33431     * _.kebabCase('Foo Bar');
33432     * // => 'foo-bar'
33433     *
33434     * _.kebabCase('fooBar');
33435     * // => 'foo-bar'
33436     *
33437     * _.kebabCase('__FOO_BAR__');
33438     * // => 'foo-bar'
33439     */
33440    var kebabCase = createCompounder(function(result, word, index) {
33441      return result + (index ? '-' : '') + word.toLowerCase();
33442    });
33443
33444    /**
33445     * Converts `string`, as space separated words, to lower case.
33446     *
33447     * @static
33448     * @memberOf _
33449     * @since 4.0.0
33450     * @category String
33451     * @param {string} [string=''] The string to convert.
33452     * @returns {string} Returns the lower cased string.
33453     * @example
33454     *
33455     * _.lowerCase('--Foo-Bar--');
33456     * // => 'foo bar'
33457     *
33458     * _.lowerCase('fooBar');
33459     * // => 'foo bar'
33460     *
33461     * _.lowerCase('__FOO_BAR__');
33462     * // => 'foo bar'
33463     */
33464    var lowerCase = createCompounder(function(result, word, index) {
33465      return result + (index ? ' ' : '') + word.toLowerCase();
33466    });
33467
33468    /**
33469     * Converts the first character of `string` to lower case.
33470     *
33471     * @static
33472     * @memberOf _
33473     * @since 4.0.0
33474     * @category String
33475     * @param {string} [string=''] The string to convert.
33476     * @returns {string} Returns the converted string.
33477     * @example
33478     *
33479     * _.lowerFirst('Fred');
33480     * // => 'fred'
33481     *
33482     * _.lowerFirst('FRED');
33483     * // => 'fRED'
33484     */
33485    var lowerFirst = createCaseFirst('toLowerCase');
33486
33487    /**
33488     * Pads `string` on the left and right sides if it's shorter than `length`.
33489     * Padding characters are truncated if they can't be evenly divided by `length`.
33490     *
33491     * @static
33492     * @memberOf _
33493     * @since 3.0.0
33494     * @category String
33495     * @param {string} [string=''] The string to pad.
33496     * @param {number} [length=0] The padding length.
33497     * @param {string} [chars=' '] The string used as padding.
33498     * @returns {string} Returns the padded string.
33499     * @example
33500     *
33501     * _.pad('abc', 8);
33502     * // => '  abc   '
33503     *
33504     * _.pad('abc', 8, '_-');
33505     * // => '_-abc_-_'
33506     *
33507     * _.pad('abc', 3);
33508     * // => 'abc'
33509     */
33510    function pad(string, length, chars) {
33511      string = toString(string);
33512      length = toInteger(length);
33513
33514      var strLength = length ? stringSize(string) : 0;
33515      if (!length || strLength >= length) {
33516        return string;
33517      }
33518      var mid = (length - strLength) / 2;
33519      return (
33520        createPadding(nativeFloor(mid), chars) +
33521        string +
33522        createPadding(nativeCeil(mid), chars)
33523      );
33524    }
33525
33526    /**
33527     * Pads `string` on the right side if it's shorter than `length`. Padding
33528     * characters are truncated if they exceed `length`.
33529     *
33530     * @static
33531     * @memberOf _
33532     * @since 4.0.0
33533     * @category String
33534     * @param {string} [string=''] The string to pad.
33535     * @param {number} [length=0] The padding length.
33536     * @param {string} [chars=' '] The string used as padding.
33537     * @returns {string} Returns the padded string.
33538     * @example
33539     *
33540     * _.padEnd('abc', 6);
33541     * // => 'abc   '
33542     *
33543     * _.padEnd('abc', 6, '_-');
33544     * // => 'abc_-_'
33545     *
33546     * _.padEnd('abc', 3);
33547     * // => 'abc'
33548     */
33549    function padEnd(string, length, chars) {
33550      string = toString(string);
33551      length = toInteger(length);
33552
33553      var strLength = length ? stringSize(string) : 0;
33554      return (length && strLength < length)
33555        ? (string + createPadding(length - strLength, chars))
33556        : string;
33557    }
33558
33559    /**
33560     * Pads `string` on the left side if it's shorter than `length`. Padding
33561     * characters are truncated if they exceed `length`.
33562     *
33563     * @static
33564     * @memberOf _
33565     * @since 4.0.0
33566     * @category String
33567     * @param {string} [string=''] The string to pad.
33568     * @param {number} [length=0] The padding length.
33569     * @param {string} [chars=' '] The string used as padding.
33570     * @returns {string} Returns the padded string.
33571     * @example
33572     *
33573     * _.padStart('abc', 6);
33574     * // => '   abc'
33575     *
33576     * _.padStart('abc', 6, '_-');
33577     * // => '_-_abc'
33578     *
33579     * _.padStart('abc', 3);
33580     * // => 'abc'
33581     */
33582    function padStart(string, length, chars) {
33583      string = toString(string);
33584      length = toInteger(length);
33585
33586      var strLength = length ? stringSize(string) : 0;
33587      return (length && strLength < length)
33588        ? (createPadding(length - strLength, chars) + string)
33589        : string;
33590    }
33591
33592    /**
33593     * Converts `string` to an integer of the specified radix. If `radix` is
33594     * `undefined` or `0`, a `radix` of `10` is used unless `value` is a
33595     * hexadecimal, in which case a `radix` of `16` is used.
33596     *
33597     * **Note:** This method aligns with the
33598     * [ES5 implementation](https://es5.github.io/#x15.1.2.2) of `parseInt`.
33599     *
33600     * @static
33601     * @memberOf _
33602     * @since 1.1.0
33603     * @category String
33604     * @param {string} string The string to convert.
33605     * @param {number} [radix=10] The radix to interpret `value` by.
33606     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
33607     * @returns {number} Returns the converted integer.
33608     * @example
33609     *
33610     * _.parseInt('08');
33611     * // => 8
33612     *
33613     * _.map(['6', '08', '10'], _.parseInt);
33614     * // => [6, 8, 10]
33615     */
33616    function parseInt(string, radix, guard) {
33617      if (guard || radix == null) {
33618        radix = 0;
33619      } else if (radix) {
33620        radix = +radix;
33621      }
33622      return nativeParseInt(toString(string).replace(reTrimStart, ''), radix || 0);
33623    }
33624
33625    /**
33626     * Repeats the given string `n` times.
33627     *
33628     * @static
33629     * @memberOf _
33630     * @since 3.0.0
33631     * @category String
33632     * @param {string} [string=''] The string to repeat.
33633     * @param {number} [n=1] The number of times to repeat the string.
33634     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
33635     * @returns {string} Returns the repeated string.
33636     * @example
33637     *
33638     * _.repeat('*', 3);
33639     * // => '***'
33640     *
33641     * _.repeat('abc', 2);
33642     * // => 'abcabc'
33643     *
33644     * _.repeat('abc', 0);
33645     * // => ''
33646     */
33647    function repeat(string, n, guard) {
33648      if ((guard ? isIterateeCall(string, n, guard) : n === undefined)) {
33649        n = 1;
33650      } else {
33651        n = toInteger(n);
33652      }
33653      return baseRepeat(toString(string), n);
33654    }
33655
33656    /**
33657     * Replaces matches for `pattern` in `string` with `replacement`.
33658     *
33659     * **Note:** This method is based on
33660     * [`String#replace`](https://mdn.io/String/replace).
33661     *
33662     * @static
33663     * @memberOf _
33664     * @since 4.0.0
33665     * @category String
33666     * @param {string} [string=''] The string to modify.
33667     * @param {RegExp|string} pattern The pattern to replace.
33668     * @param {Function|string} replacement The match replacement.
33669     * @returns {string} Returns the modified string.
33670     * @example
33671     *
33672     * _.replace('Hi Fred', 'Fred', 'Barney');
33673     * // => 'Hi Barney'
33674     */
33675    function replace() {
33676      var args = arguments,
33677          string = toString(args[0]);
33678
33679      return args.length < 3 ? string : string.replace(args[1], args[2]);
33680    }
33681
33682    /**
33683     * Converts `string` to
33684     * [snake case](https://en.wikipedia.org/wiki/Snake_case).
33685     *
33686     * @static
33687     * @memberOf _
33688     * @since 3.0.0
33689     * @category String
33690     * @param {string} [string=''] The string to convert.
33691     * @returns {string} Returns the snake cased string.
33692     * @example
33693     *
33694     * _.snakeCase('Foo Bar');
33695     * // => 'foo_bar'
33696     *
33697     * _.snakeCase('fooBar');
33698     * // => 'foo_bar'
33699     *
33700     * _.snakeCase('--FOO-BAR--');
33701     * // => 'foo_bar'
33702     */
33703    var snakeCase = createCompounder(function(result, word, index) {
33704      return result + (index ? '_' : '') + word.toLowerCase();
33705    });
33706
33707    /**
33708     * Splits `string` by `separator`.
33709     *
33710     * **Note:** This method is based on
33711     * [`String#split`](https://mdn.io/String/split).
33712     *
33713     * @static
33714     * @memberOf _
33715     * @since 4.0.0
33716     * @category String
33717     * @param {string} [string=''] The string to split.
33718     * @param {RegExp|string} separator The separator pattern to split by.
33719     * @param {number} [limit] The length to truncate results to.
33720     * @returns {Array} Returns the string segments.
33721     * @example
33722     *
33723     * _.split('a-b-c', '-', 2);
33724     * // => ['a', 'b']
33725     */
33726    function split(string, separator, limit) {
33727      if (limit && typeof limit != 'number' && isIterateeCall(string, separator, limit)) {
33728        separator = limit = undefined;
33729      }
33730      limit = limit === undefined ? MAX_ARRAY_LENGTH : limit >>> 0;
33731      if (!limit) {
33732        return [];
33733      }
33734      string = toString(string);
33735      if (string && (
33736            typeof separator == 'string' ||
33737            (separator != null && !isRegExp(separator))
33738          )) {
33739        separator = baseToString(separator);
33740        if (!separator && hasUnicode(string)) {
33741          return castSlice(stringToArray(string), 0, limit);
33742        }
33743      }
33744      return string.split(separator, limit);
33745    }
33746
33747    /**
33748     * Converts `string` to
33749     * [start case](https://en.wikipedia.org/wiki/Letter_case#Stylistic_or_specialised_usage).
33750     *
33751     * @static
33752     * @memberOf _
33753     * @since 3.1.0
33754     * @category String
33755     * @param {string} [string=''] The string to convert.
33756     * @returns {string} Returns the start cased string.
33757     * @example
33758     *
33759     * _.startCase('--foo-bar--');
33760     * // => 'Foo Bar'
33761     *
33762     * _.startCase('fooBar');
33763     * // => 'Foo Bar'
33764     *
33765     * _.startCase('__FOO_BAR__');
33766     * // => 'FOO BAR'
33767     */
33768    var startCase = createCompounder(function(result, word, index) {
33769      return result + (index ? ' ' : '') + upperFirst(word);
33770    });
33771
33772    /**
33773     * Checks if `string` starts with the given target string.
33774     *
33775     * @static
33776     * @memberOf _
33777     * @since 3.0.0
33778     * @category String
33779     * @param {string} [string=''] The string to inspect.
33780     * @param {string} [target] The string to search for.
33781     * @param {number} [position=0] The position to search from.
33782     * @returns {boolean} Returns `true` if `string` starts with `target`,
33783     *  else `false`.
33784     * @example
33785     *
33786     * _.startsWith('abc', 'a');
33787     * // => true
33788     *
33789     * _.startsWith('abc', 'b');
33790     * // => false
33791     *
33792     * _.startsWith('abc', 'b', 1);
33793     * // => true
33794     */
33795    function startsWith(string, target, position) {
33796      string = toString(string);
33797      position = position == null
33798        ? 0
33799        : baseClamp(toInteger(position), 0, string.length);
33800
33801      target = baseToString(target);
33802      return string.slice(position, position + target.length) == target;
33803    }
33804
33805    /**
33806     * Creates a compiled template function that can interpolate data properties
33807     * in "interpolate" delimiters, HTML-escape interpolated data properties in
33808     * "escape" delimiters, and execute JavaScript in "evaluate" delimiters. Data
33809     * properties may be accessed as free variables in the template. If a setting
33810     * object is given, it takes precedence over `_.templateSettings` values.
33811     *
33812     * **Note:** In the development build `_.template` utilizes
33813     * [sourceURLs](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl)
33814     * for easier debugging.
33815     *
33816     * For more information on precompiling templates see
33817     * [lodash's custom builds documentation](https://lodash.com/custom-builds).
33818     *
33819     * For more information on Chrome extension sandboxes see
33820     * [Chrome's extensions documentation](https://developer.chrome.com/extensions/sandboxingEval).
33821     *
33822     * @static
33823     * @since 0.1.0
33824     * @memberOf _
33825     * @category String
33826     * @param {string} [string=''] The template string.
33827     * @param {Object} [options={}] The options object.
33828     * @param {RegExp} [options.escape=_.templateSettings.escape]
33829     *  The HTML "escape" delimiter.
33830     * @param {RegExp} [options.evaluate=_.templateSettings.evaluate]
33831     *  The "evaluate" delimiter.
33832     * @param {Object} [options.imports=_.templateSettings.imports]
33833     *  An object to import into the template as free variables.
33834     * @param {RegExp} [options.interpolate=_.templateSettings.interpolate]
33835     *  The "interpolate" delimiter.
33836     * @param {string} [options.sourceURL='lodash.templateSources[n]']
33837     *  The sourceURL of the compiled template.
33838     * @param {string} [options.variable='obj']
33839     *  The data object variable name.
33840     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
33841     * @returns {Function} Returns the compiled template function.
33842     * @example
33843     *
33844     * // Use the "interpolate" delimiter to create a compiled template.
33845     * var compiled = _.template('hello <%= user %>!');
33846     * compiled({ 'user': 'fred' });
33847     * // => 'hello fred!'
33848     *
33849     * // Use the HTML "escape" delimiter to escape data property values.
33850     * var compiled = _.template('<b><%- value %></b>');
33851     * compiled({ 'value': '<script>' });
33852     * // => '<b>&lt;script&gt;</b>'
33853     *
33854     * // Use the "evaluate" delimiter to execute JavaScript and generate HTML.
33855     * var compiled = _.template('<% _.forEach(users, function(user) { %><li><%- user %></li><% }); %>');
33856     * compiled({ 'users': ['fred', 'barney'] });
33857     * // => '<li>fred</li><li>barney</li>'
33858     *
33859     * // Use the internal `print` function in "evaluate" delimiters.
33860     * var compiled = _.template('<% print("hello " + user); %>!');
33861     * compiled({ 'user': 'barney' });
33862     * // => 'hello barney!'
33863     *
33864     * // Use the ES template literal delimiter as an "interpolate" delimiter.
33865     * // Disable support by replacing the "interpolate" delimiter.
33866     * var compiled = _.template('hello ${ user }!');
33867     * compiled({ 'user': 'pebbles' });
33868     * // => 'hello pebbles!'
33869     *
33870     * // Use backslashes to treat delimiters as plain text.
33871     * var compiled = _.template('<%= "\\<%- value %\\>" %>');
33872     * compiled({ 'value': 'ignored' });
33873     * // => '<%- value %>'
33874     *
33875     * // Use the `imports` option to import `jQuery` as `jq`.
33876     * var text = '<% jq.each(users, function(user) { %><li><%- user %></li><% }); %>';
33877     * var compiled = _.template(text, { 'imports': { 'jq': jQuery } });
33878     * compiled({ 'users': ['fred', 'barney'] });
33879     * // => '<li>fred</li><li>barney</li>'
33880     *
33881     * // Use the `sourceURL` option to specify a custom sourceURL for the template.
33882     * var compiled = _.template('hello <%= user %>!', { 'sourceURL': '/basic/greeting.jst' });
33883     * compiled(data);
33884     * // => Find the source of "greeting.jst" under the Sources tab or Resources panel of the web inspector.
33885     *
33886     * // Use the `variable` option to ensure a with-statement isn't used in the compiled template.
33887     * var compiled = _.template('hi <%= data.user %>!', { 'variable': 'data' });
33888     * compiled.source;
33889     * // => function(data) {
33890     * //   var __t, __p = '';
33891     * //   __p += 'hi ' + ((__t = ( data.user )) == null ? '' : __t) + '!';
33892     * //   return __p;
33893     * // }
33894     *
33895     * // Use custom template delimiters.
33896     * _.templateSettings.interpolate = /{{([\s\S]+?)}}/g;
33897     * var compiled = _.template('hello {{ user }}!');
33898     * compiled({ 'user': 'mustache' });
33899     * // => 'hello mustache!'
33900     *
33901     * // Use the `source` property to inline compiled templates for meaningful
33902     * // line numbers in error messages and stack traces.
33903     * fs.writeFileSync(path.join(process.cwd(), 'jst.js'), '\
33904     *   var JST = {\
33905     *     "main": ' + _.template(mainText).source + '\
33906     *   };\
33907     * ');
33908     */
33909    function template(string, options, guard) {
33910      // Based on John Resig's `tmpl` implementation
33911      // (http://ejohn.org/blog/javascript-micro-templating/)
33912      // and Laura Doktorova's doT.js (https://github.com/olado/doT).
33913      var settings = lodash.templateSettings;
33914
33915      if (guard && isIterateeCall(string, options, guard)) {
33916        options = undefined;
33917      }
33918      string = toString(string);
33919      options = assignInWith({}, options, settings, customDefaultsAssignIn);
33920
33921      var imports = assignInWith({}, options.imports, settings.imports, customDefaultsAssignIn),
33922          importsKeys = keys(imports),
33923          importsValues = baseValues(imports, importsKeys);
33924
33925      var isEscaping,
33926          isEvaluating,
33927          index = 0,
33928          interpolate = options.interpolate || reNoMatch,
33929          source = "__p += '";
33930
33931      // Compile the regexp to match each delimiter.
33932      var reDelimiters = RegExp(
33933        (options.escape || reNoMatch).source + '|' +
33934        interpolate.source + '|' +
33935        (interpolate === reInterpolate ? reEsTemplate : reNoMatch).source + '|' +
33936        (options.evaluate || reNoMatch).source + '|$'
33937      , 'g');
33938
33939      // Use a sourceURL for easier debugging.
33940      // The sourceURL gets injected into the source that's eval-ed, so be careful
33941      // to normalize all kinds of whitespace, so e.g. newlines (and unicode versions of it) can't sneak in
33942      // and escape the comment, thus injecting code that gets evaled.
33943      var sourceURL = '//# sourceURL=' +
33944        (hasOwnProperty.call(options, 'sourceURL')
33945          ? (options.sourceURL + '').replace(/\s/g, ' ')
33946          : ('lodash.templateSources[' + (++templateCounter) + ']')
33947        ) + '\n';
33948
33949      string.replace(reDelimiters, function(match, escapeValue, interpolateValue, esTemplateValue, evaluateValue, offset) {
33950        interpolateValue || (interpolateValue = esTemplateValue);
33951
33952        // Escape characters that can't be included in string literals.
33953        source += string.slice(index, offset).replace(reUnescapedString, escapeStringChar);
33954
33955        // Replace delimiters with snippets.
33956        if (escapeValue) {
33957          isEscaping = true;
33958          source += "' +\n__e(" + escapeValue + ") +\n'";
33959        }
33960        if (evaluateValue) {
33961          isEvaluating = true;
33962          source += "';\n" + evaluateValue + ";\n__p += '";
33963        }
33964        if (interpolateValue) {
33965          source += "' +\n((__t = (" + interpolateValue + ")) == null ? '' : __t) +\n'";
33966        }
33967        index = offset + match.length;
33968
33969        // The JS engine embedded in Adobe products needs `match` returned in
33970        // order to produce the correct `offset` value.
33971        return match;
33972      });
33973
33974      source += "';\n";
33975
33976      // If `variable` is not specified wrap a with-statement around the generated
33977      // code to add the data object to the top of the scope chain.
33978      var variable = hasOwnProperty.call(options, 'variable') && options.variable;
33979      if (!variable) {
33980        source = 'with (obj) {\n' + source + '\n}\n';
33981      }
33982      // Throw an error if a forbidden character was found in `variable`, to prevent
33983      // potential command injection attacks.
33984      else if (reForbiddenIdentifierChars.test(variable)) {
33985        throw new Error(INVALID_TEMPL_VAR_ERROR_TEXT);
33986      }
33987
33988      // Cleanup code by stripping empty strings.
33989      source = (isEvaluating ? source.replace(reEmptyStringLeading, '') : source)
33990        .replace(reEmptyStringMiddle, '$1')
33991        .replace(reEmptyStringTrailing, '$1;');
33992
33993      // Frame code as the function body.
33994      source = 'function(' + (variable || 'obj') + ') {\n' +
33995        (variable
33996          ? ''
33997          : 'obj || (obj = {});\n'
33998        ) +
33999        "var __t, __p = ''" +
34000        (isEscaping
34001           ? ', __e = _.escape'
34002           : ''
34003        ) +
34004        (isEvaluating
34005          ? ', __j = Array.prototype.join;\n' +
34006            "function print() { __p += __j.call(arguments, '') }\n"
34007          : ';\n'
34008        ) +
34009        source +
34010        'return __p\n}';
34011
34012      var result = attempt(function() {
34013        return Function(importsKeys, sourceURL + 'return ' + source)
34014          .apply(undefined, importsValues);
34015      });
34016
34017      // Provide the compiled function's source by its `toString` method or
34018      // the `source` property as a convenience for inlining compiled templates.
34019      result.source = source;
34020      if (isError(result)) {
34021        throw result;
34022      }
34023      return result;
34024    }
34025
34026    /**
34027     * Converts `string`, as a whole, to lower case just like
34028     * [String#toLowerCase](https://mdn.io/toLowerCase).
34029     *
34030     * @static
34031     * @memberOf _
34032     * @since 4.0.0
34033     * @category String
34034     * @param {string} [string=''] The string to convert.
34035     * @returns {string} Returns the lower cased string.
34036     * @example
34037     *
34038     * _.toLower('--Foo-Bar--');
34039     * // => '--foo-bar--'
34040     *
34041     * _.toLower('fooBar');
34042     * // => 'foobar'
34043     *
34044     * _.toLower('__FOO_BAR__');
34045     * // => '__foo_bar__'
34046     */
34047    function toLower(value) {
34048      return toString(value).toLowerCase();
34049    }
34050
34051    /**
34052     * Converts `string`, as a whole, to upper case just like
34053     * [String#toUpperCase](https://mdn.io/toUpperCase).
34054     *
34055     * @static
34056     * @memberOf _
34057     * @since 4.0.0
34058     * @category String
34059     * @param {string} [string=''] The string to convert.
34060     * @returns {string} Returns the upper cased string.
34061     * @example
34062     *
34063     * _.toUpper('--foo-bar--');
34064     * // => '--FOO-BAR--'
34065     *
34066     * _.toUpper('fooBar');
34067     * // => 'FOOBAR'
34068     *
34069     * _.toUpper('__foo_bar__');
34070     * // => '__FOO_BAR__'
34071     */
34072    function toUpper(value) {
34073      return toString(value).toUpperCase();
34074    }
34075
34076    /**
34077     * Removes leading and trailing whitespace or specified characters from `string`.
34078     *
34079     * @static
34080     * @memberOf _
34081     * @since 3.0.0
34082     * @category String
34083     * @param {string} [string=''] The string to trim.
34084     * @param {string} [chars=whitespace] The characters to trim.
34085     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
34086     * @returns {string} Returns the trimmed string.
34087     * @example
34088     *
34089     * _.trim('  abc  ');
34090     * // => 'abc'
34091     *
34092     * _.trim('-_-abc-_-', '_-');
34093     * // => 'abc'
34094     *
34095     * _.map(['  foo  ', '  bar  '], _.trim);
34096     * // => ['foo', 'bar']
34097     */
34098    function trim(string, chars, guard) {
34099      string = toString(string);
34100      if (string && (guard || chars === undefined)) {
34101        return baseTrim(string);
34102      }
34103      if (!string || !(chars = baseToString(chars))) {
34104        return string;
34105      }
34106      var strSymbols = stringToArray(string),
34107          chrSymbols = stringToArray(chars),
34108          start = charsStartIndex(strSymbols, chrSymbols),
34109          end = charsEndIndex(strSymbols, chrSymbols) + 1;
34110
34111      return castSlice(strSymbols, start, end).join('');
34112    }
34113
34114    /**
34115     * Removes trailing whitespace or specified characters from `string`.
34116     *
34117     * @static
34118     * @memberOf _
34119     * @since 4.0.0
34120     * @category String
34121     * @param {string} [string=''] The string to trim.
34122     * @param {string} [chars=whitespace] The characters to trim.
34123     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
34124     * @returns {string} Returns the trimmed string.
34125     * @example
34126     *
34127     * _.trimEnd('  abc  ');
34128     * // => '  abc'
34129     *
34130     * _.trimEnd('-_-abc-_-', '_-');
34131     * // => '-_-abc'
34132     */
34133    function trimEnd(string, chars, guard) {
34134      string = toString(string);
34135      if (string && (guard || chars === undefined)) {
34136        return string.slice(0, trimmedEndIndex(string) + 1);
34137      }
34138      if (!string || !(chars = baseToString(chars))) {
34139        return string;
34140      }
34141      var strSymbols = stringToArray(string),
34142          end = charsEndIndex(strSymbols, stringToArray(chars)) + 1;
34143
34144      return castSlice(strSymbols, 0, end).join('');
34145    }
34146
34147    /**
34148     * Removes leading whitespace or specified characters from `string`.
34149     *
34150     * @static
34151     * @memberOf _
34152     * @since 4.0.0
34153     * @category String
34154     * @param {string} [string=''] The string to trim.
34155     * @param {string} [chars=whitespace] The characters to trim.
34156     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
34157     * @returns {string} Returns the trimmed string.
34158     * @example
34159     *
34160     * _.trimStart('  abc  ');
34161     * // => 'abc  '
34162     *
34163     * _.trimStart('-_-abc-_-', '_-');
34164     * // => 'abc-_-'
34165     */
34166    function trimStart(string, chars, guard) {
34167      string = toString(string);
34168      if (string && (guard || chars === undefined)) {
34169        return string.replace(reTrimStart, '');
34170      }
34171      if (!string || !(chars = baseToString(chars))) {
34172        return string;
34173      }
34174      var strSymbols = stringToArray(string),
34175          start = charsStartIndex(strSymbols, stringToArray(chars));
34176
34177      return castSlice(strSymbols, start).join('');
34178    }
34179
34180    /**
34181     * Truncates `string` if it's longer than the given maximum string length.
34182     * The last characters of the truncated string are replaced with the omission
34183     * string which defaults to "...".
34184     *
34185     * @static
34186     * @memberOf _
34187     * @since 4.0.0
34188     * @category String
34189     * @param {string} [string=''] The string to truncate.
34190     * @param {Object} [options={}] The options object.
34191     * @param {number} [options.length=30] The maximum string length.
34192     * @param {string} [options.omission='...'] The string to indicate text is omitted.
34193     * @param {RegExp|string} [options.separator] The separator pattern to truncate to.
34194     * @returns {string} Returns the truncated string.
34195     * @example
34196     *
34197     * _.truncate('hi-diddly-ho there, neighborino');
34198     * // => 'hi-diddly-ho there, neighbo...'
34199     *
34200     * _.truncate('hi-diddly-ho there, neighborino', {
34201     *   'length': 24,
34202     *   'separator': ' '
34203     * });
34204     * // => 'hi-diddly-ho there,...'
34205     *
34206     * _.truncate('hi-diddly-ho there, neighborino', {
34207     *   'length': 24,
34208     *   'separator': /,? +/
34209     * });
34210     * // => 'hi-diddly-ho there...'
34211     *
34212     * _.truncate('hi-diddly-ho there, neighborino', {
34213     *   'omission': ' [...]'
34214     * });
34215     * // => 'hi-diddly-ho there, neig [...]'
34216     */
34217    function truncate(string, options) {
34218      var length = DEFAULT_TRUNC_LENGTH,
34219          omission = DEFAULT_TRUNC_OMISSION;
34220
34221      if (isObject(options)) {
34222        var separator = 'separator' in options ? options.separator : separator;
34223        length = 'length' in options ? toInteger(options.length) : length;
34224        omission = 'omission' in options ? baseToString(options.omission) : omission;
34225      }
34226      string = toString(string);
34227
34228      var strLength = string.length;
34229      if (hasUnicode(string)) {
34230        var strSymbols = stringToArray(string);
34231        strLength = strSymbols.length;
34232      }
34233      if (length >= strLength) {
34234        return string;
34235      }
34236      var end = length - stringSize(omission);
34237      if (end < 1) {
34238        return omission;
34239      }
34240      var result = strSymbols
34241        ? castSlice(strSymbols, 0, end).join('')
34242        : string.slice(0, end);
34243
34244      if (separator === undefined) {
34245        return result + omission;
34246      }
34247      if (strSymbols) {
34248        end += (result.length - end);
34249      }
34250      if (isRegExp(separator)) {
34251        if (string.slice(end).search(separator)) {
34252          var match,
34253              substring = result;
34254
34255          if (!separator.global) {
34256            separator = RegExp(separator.source, toString(reFlags.exec(separator)) + 'g');
34257          }
34258          separator.lastIndex = 0;
34259          while ((match = separator.exec(substring))) {
34260            var newEnd = match.index;
34261          }
34262          result = result.slice(0, newEnd === undefined ? end : newEnd);
34263        }
34264      } else if (string.indexOf(baseToString(separator), end) != end) {
34265        var index = result.lastIndexOf(separator);
34266        if (index > -1) {
34267          result = result.slice(0, index);
34268        }
34269      }
34270      return result + omission;
34271    }
34272
34273    /**
34274     * The inverse of `_.escape`; this method converts the HTML entities
34275     * `&amp;`, `&lt;`, `&gt;`, `&quot;`, and `&#39;` in `string` to
34276     * their corresponding characters.
34277     *
34278     * **Note:** No other HTML entities are unescaped. To unescape additional
34279     * HTML entities use a third-party library like [_he_](https://mths.be/he).
34280     *
34281     * @static
34282     * @memberOf _
34283     * @since 0.6.0
34284     * @category String
34285     * @param {string} [string=''] The string to unescape.
34286     * @returns {string} Returns the unescaped string.
34287     * @example
34288     *
34289     * _.unescape('fred, barney, &amp; pebbles');
34290     * // => 'fred, barney, & pebbles'
34291     */
34292    function unescape(string) {
34293      string = toString(string);
34294      return (string && reHasEscapedHtml.test(string))
34295        ? string.replace(reEscapedHtml, unescapeHtmlChar)
34296        : string;
34297    }
34298
34299    /**
34300     * Converts `string`, as space separated words, to upper case.
34301     *
34302     * @static
34303     * @memberOf _
34304     * @since 4.0.0
34305     * @category String
34306     * @param {string} [string=''] The string to convert.
34307     * @returns {string} Returns the upper cased string.
34308     * @example
34309     *
34310     * _.upperCase('--foo-bar');
34311     * // => 'FOO BAR'
34312     *
34313     * _.upperCase('fooBar');
34314     * // => 'FOO BAR'
34315     *
34316     * _.upperCase('__foo_bar__');
34317     * // => 'FOO BAR'
34318     */
34319    var upperCase = createCompounder(function(result, word, index) {
34320      return result + (index ? ' ' : '') + word.toUpperCase();
34321    });
34322
34323    /**
34324     * Converts the first character of `string` to upper case.
34325     *
34326     * @static
34327     * @memberOf _
34328     * @since 4.0.0
34329     * @category String
34330     * @param {string} [string=''] The string to convert.
34331     * @returns {string} Returns the converted string.
34332     * @example
34333     *
34334     * _.upperFirst('fred');
34335     * // => 'Fred'
34336     *
34337     * _.upperFirst('FRED');
34338     * // => 'FRED'
34339     */
34340    var upperFirst = createCaseFirst('toUpperCase');
34341
34342    /**
34343     * Splits `string` into an array of its words.
34344     *
34345     * @static
34346     * @memberOf _
34347     * @since 3.0.0
34348     * @category String
34349     * @param {string} [string=''] The string to inspect.
34350     * @param {RegExp|string} [pattern] The pattern to match words.
34351     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
34352     * @returns {Array} Returns the words of `string`.
34353     * @example
34354     *
34355     * _.words('fred, barney, & pebbles');
34356     * // => ['fred', 'barney', 'pebbles']
34357     *
34358     * _.words('fred, barney, & pebbles', /[^, ]+/g);
34359     * // => ['fred', 'barney', '&', 'pebbles']
34360     */
34361    function words(string, pattern, guard) {
34362      string = toString(string);
34363      pattern = guard ? undefined : pattern;
34364
34365      if (pattern === undefined) {
34366        return hasUnicodeWord(string) ? unicodeWords(string) : asciiWords(string);
34367      }
34368      return string.match(pattern) || [];
34369    }
34370
34371    /*------------------------------------------------------------------------*/
34372
34373    /**
34374     * Attempts to invoke `func`, returning either the result or the caught error
34375     * object. Any additional arguments are provided to `func` when it's invoked.
34376     *
34377     * @static
34378     * @memberOf _
34379     * @since 3.0.0
34380     * @category Util
34381     * @param {Function} func The function to attempt.
34382     * @param {...*} [args] The arguments to invoke `func` with.
34383     * @returns {*} Returns the `func` result or error object.
34384     * @example
34385     *
34386     * // Avoid throwing errors for invalid selectors.
34387     * var elements = _.attempt(function(selector) {
34388     *   return document.querySelectorAll(selector);
34389     * }, '>_>');
34390     *
34391     * if (_.isError(elements)) {
34392     *   elements = [];
34393     * }
34394     */
34395    var attempt = baseRest(function(func, args) {
34396      try {
34397        return apply(func, undefined, args);
34398      } catch (e) {
34399        return isError(e) ? e : new Error(e);
34400      }
34401    });
34402
34403    /**
34404     * Binds methods of an object to the object itself, overwriting the existing
34405     * method.
34406     *
34407     * **Note:** This method doesn't set the "length" property of bound functions.
34408     *
34409     * @static
34410     * @since 0.1.0
34411     * @memberOf _
34412     * @category Util
34413     * @param {Object} object The object to bind and assign the bound methods to.
34414     * @param {...(string|string[])} methodNames The object method names to bind.
34415     * @returns {Object} Returns `object`.
34416     * @example
34417     *
34418     * var view = {
34419     *   'label': 'docs',
34420     *   'click': function() {
34421     *     console.log('clicked ' + this.label);
34422     *   }
34423     * };
34424     *
34425     * _.bindAll(view, ['click']);
34426     * jQuery(element).on('click', view.click);
34427     * // => Logs 'clicked docs' when clicked.
34428     */
34429    var bindAll = flatRest(function(object, methodNames) {
34430      arrayEach(methodNames, function(key) {
34431        key = toKey(key);
34432        baseAssignValue(object, key, bind(object[key], object));
34433      });
34434      return object;
34435    });
34436
34437    /**
34438     * Creates a function that iterates over `pairs` and invokes the corresponding
34439     * function of the first predicate to return truthy. The predicate-function
34440     * pairs are invoked with the `this` binding and arguments of the created
34441     * function.
34442     *
34443     * @static
34444     * @memberOf _
34445     * @since 4.0.0
34446     * @category Util
34447     * @param {Array} pairs The predicate-function pairs.
34448     * @returns {Function} Returns the new composite function.
34449     * @example
34450     *
34451     * var func = _.cond([
34452     *   [_.matches({ 'a': 1 }),           _.constant('matches A')],
34453     *   [_.conforms({ 'b': _.isNumber }), _.constant('matches B')],
34454     *   [_.stubTrue,                      _.constant('no match')]
34455     * ]);
34456     *
34457     * func({ 'a': 1, 'b': 2 });
34458     * // => 'matches A'
34459     *
34460     * func({ 'a': 0, 'b': 1 });
34461     * // => 'matches B'
34462     *
34463     * func({ 'a': '1', 'b': '2' });
34464     * // => 'no match'
34465     */
34466    function cond(pairs) {
34467      var length = pairs == null ? 0 : pairs.length,
34468          toIteratee = getIteratee();
34469
34470      pairs = !length ? [] : arrayMap(pairs, function(pair) {
34471        if (typeof pair[1] != 'function') {
34472          throw new TypeError(FUNC_ERROR_TEXT);
34473        }
34474        return [toIteratee(pair[0]), pair[1]];
34475      });
34476
34477      return baseRest(function(args) {
34478        var index = -1;
34479        while (++index < length) {
34480          var pair = pairs[index];
34481          if (apply(pair[0], this, args)) {
34482            return apply(pair[1], this, args);
34483          }
34484        }
34485      });
34486    }
34487
34488    /**
34489     * Creates a function that invokes the predicate properties of `source` with
34490     * the corresponding property values of a given object, returning `true` if
34491     * all predicates return truthy, else `false`.
34492     *
34493     * **Note:** The created function is equivalent to `_.conformsTo` with
34494     * `source` partially applied.
34495     *
34496     * @static
34497     * @memberOf _
34498     * @since 4.0.0
34499     * @category Util
34500     * @param {Object} source The object of property predicates to conform to.
34501     * @returns {Function} Returns the new spec function.
34502     * @example
34503     *
34504     * var objects = [
34505     *   { 'a': 2, 'b': 1 },
34506     *   { 'a': 1, 'b': 2 }
34507     * ];
34508     *
34509     * _.filter(objects, _.conforms({ 'b': function(n) { return n > 1; } }));
34510     * // => [{ 'a': 1, 'b': 2 }]
34511     */
34512    function conforms(source) {
34513      return baseConforms(baseClone(source, CLONE_DEEP_FLAG));
34514    }
34515
34516    /**
34517     * Creates a function that returns `value`.
34518     *
34519     * @static
34520     * @memberOf _
34521     * @since 2.4.0
34522     * @category Util
34523     * @param {*} value The value to return from the new function.
34524     * @returns {Function} Returns the new constant function.
34525     * @example
34526     *
34527     * var objects = _.times(2, _.constant({ 'a': 1 }));
34528     *
34529     * console.log(objects);
34530     * // => [{ 'a': 1 }, { 'a': 1 }]
34531     *
34532     * console.log(objects[0] === objects[1]);
34533     * // => true
34534     */
34535    function constant(value) {
34536      return function() {
34537        return value;
34538      };
34539    }
34540
34541    /**
34542     * Checks `value` to determine whether a default value should be returned in
34543     * its place. The `defaultValue` is returned if `value` is `NaN`, `null`,
34544     * or `undefined`.
34545     *
34546     * @static
34547     * @memberOf _
34548     * @since 4.14.0
34549     * @category Util
34550     * @param {*} value The value to check.
34551     * @param {*} defaultValue The default value.
34552     * @returns {*} Returns the resolved value.
34553     * @example
34554     *
34555     * _.defaultTo(1, 10);
34556     * // => 1
34557     *
34558     * _.defaultTo(undefined, 10);
34559     * // => 10
34560     */
34561    function defaultTo(value, defaultValue) {
34562      return (value == null || value !== value) ? defaultValue : value;
34563    }
34564
34565    /**
34566     * Creates a function that returns the result of invoking the given functions
34567     * with the `this` binding of the created function, where each successive
34568     * invocation is supplied the return value of the previous.
34569     *
34570     * @static
34571     * @memberOf _
34572     * @since 3.0.0
34573     * @category Util
34574     * @param {...(Function|Function[])} [funcs] The functions to invoke.
34575     * @returns {Function} Returns the new composite function.
34576     * @see _.flowRight
34577     * @example
34578     *
34579     * function square(n) {
34580     *   return n * n;
34581     * }
34582     *
34583     * var addSquare = _.flow([_.add, square]);
34584     * addSquare(1, 2);
34585     * // => 9
34586     */
34587    var flow = createFlow();
34588
34589    /**
34590     * This method is like `_.flow` except that it creates a function that
34591     * invokes the given functions from right to left.
34592     *
34593     * @static
34594     * @since 3.0.0
34595     * @memberOf _
34596     * @category Util
34597     * @param {...(Function|Function[])} [funcs] The functions to invoke.
34598     * @returns {Function} Returns the new composite function.
34599     * @see _.flow
34600     * @example
34601     *
34602     * function square(n) {
34603     *   return n * n;
34604     * }
34605     *
34606     * var addSquare = _.flowRight([square, _.add]);
34607     * addSquare(1, 2);
34608     * // => 9
34609     */
34610    var flowRight = createFlow(true);
34611
34612    /**
34613     * This method returns the first argument it receives.
34614     *
34615     * @static
34616     * @since 0.1.0
34617     * @memberOf _
34618     * @category Util
34619     * @param {*} value Any value.
34620     * @returns {*} Returns `value`.
34621     * @example
34622     *
34623     * var object = { 'a': 1 };
34624     *
34625     * console.log(_.identity(object) === object);
34626     * // => true
34627     */
34628    function identity(value) {
34629      return value;
34630    }
34631
34632    /**
34633     * Creates a function that invokes `func` with the arguments of the created
34634     * function. If `func` is a property name, the created function returns the
34635     * property value for a given element. If `func` is an array or object, the
34636     * created function returns `true` for elements that contain the equivalent
34637     * source properties, otherwise it returns `false`.
34638     *
34639     * @static
34640     * @since 4.0.0
34641     * @memberOf _
34642     * @category Util
34643     * @param {*} [func=_.identity] The value to convert to a callback.
34644     * @returns {Function} Returns the callback.
34645     * @example
34646     *
34647     * var users = [
34648     *   { 'user': 'barney', 'age': 36, 'active': true },
34649     *   { 'user': 'fred',   'age': 40, 'active': false }
34650     * ];
34651     *
34652     * // The `_.matches` iteratee shorthand.
34653     * _.filter(users, _.iteratee({ 'user': 'barney', 'active': true }));
34654     * // => [{ 'user': 'barney', 'age': 36, 'active': true }]
34655     *
34656     * // The `_.matchesProperty` iteratee shorthand.
34657     * _.filter(users, _.iteratee(['user', 'fred']));
34658     * // => [{ 'user': 'fred', 'age': 40 }]
34659     *
34660     * // The `_.property` iteratee shorthand.
34661     * _.map(users, _.iteratee('user'));
34662     * // => ['barney', 'fred']
34663     *
34664     * // Create custom iteratee shorthands.
34665     * _.iteratee = _.wrap(_.iteratee, function(iteratee, func) {
34666     *   return !_.isRegExp(func) ? iteratee(func) : function(string) {
34667     *     return func.test(string);
34668     *   };
34669     * });
34670     *
34671     * _.filter(['abc', 'def'], /ef/);
34672     * // => ['def']
34673     */
34674    function iteratee(func) {
34675      return baseIteratee(typeof func == 'function' ? func : baseClone(func, CLONE_DEEP_FLAG));
34676    }
34677
34678    /**
34679     * Creates a function that performs a partial deep comparison between a given
34680     * object and `source`, returning `true` if the given object has equivalent
34681     * property values, else `false`.
34682     *
34683     * **Note:** The created function is equivalent to `_.isMatch` with `source`
34684     * partially applied.
34685     *
34686     * Partial comparisons will match empty array and empty object `source`
34687     * values against any array or object value, respectively. See `_.isEqual`
34688     * for a list of supported value comparisons.
34689     *
34690     * **Note:** Multiple values can be checked by combining several matchers
34691     * using `_.overSome`
34692     *
34693     * @static
34694     * @memberOf _
34695     * @since 3.0.0
34696     * @category Util
34697     * @param {Object} source The object of property values to match.
34698     * @returns {Function} Returns the new spec function.
34699     * @example
34700     *
34701     * var objects = [
34702     *   { 'a': 1, 'b': 2, 'c': 3 },
34703     *   { 'a': 4, 'b': 5, 'c': 6 }
34704     * ];
34705     *
34706     * _.filter(objects, _.matches({ 'a': 4, 'c': 6 }));
34707     * // => [{ 'a': 4, 'b': 5, 'c': 6 }]
34708     *
34709     * // Checking for several possible values
34710     * _.filter(objects, _.overSome([_.matches({ 'a': 1 }), _.matches({ 'a': 4 })]));
34711     * // => [{ 'a': 1, 'b': 2, 'c': 3 }, { 'a': 4, 'b': 5, 'c': 6 }]
34712     */
34713    function matches(source) {
34714      return baseMatches(baseClone(source, CLONE_DEEP_FLAG));
34715    }
34716
34717    /**
34718     * Creates a function that performs a partial deep comparison between the
34719     * value at `path` of a given object to `srcValue`, returning `true` if the
34720     * object value is equivalent, else `false`.
34721     *
34722     * **Note:** Partial comparisons will match empty array and empty object
34723     * `srcValue` values against any array or object value, respectively. See
34724     * `_.isEqual` for a list of supported value comparisons.
34725     *
34726     * **Note:** Multiple values can be checked by combining several matchers
34727     * using `_.overSome`
34728     *
34729     * @static
34730     * @memberOf _
34731     * @since 3.2.0
34732     * @category Util
34733     * @param {Array|string} path The path of the property to get.
34734     * @param {*} srcValue The value to match.
34735     * @returns {Function} Returns the new spec function.
34736     * @example
34737     *
34738     * var objects = [
34739     *   { 'a': 1, 'b': 2, 'c': 3 },
34740     *   { 'a': 4, 'b': 5, 'c': 6 }
34741     * ];
34742     *
34743     * _.find(objects, _.matchesProperty('a', 4));
34744     * // => { 'a': 4, 'b': 5, 'c': 6 }
34745     *
34746     * // Checking for several possible values
34747     * _.filter(objects, _.overSome([_.matchesProperty('a', 1), _.matchesProperty('a', 4)]));
34748     * // => [{ 'a': 1, 'b': 2, 'c': 3 }, { 'a': 4, 'b': 5, 'c': 6 }]
34749     */
34750    function matchesProperty(path, srcValue) {
34751      return baseMatchesProperty(path, baseClone(srcValue, CLONE_DEEP_FLAG));
34752    }
34753
34754    /**
34755     * Creates a function that invokes the method at `path` of a given object.
34756     * Any additional arguments are provided to the invoked method.
34757     *
34758     * @static
34759     * @memberOf _
34760     * @since 3.7.0
34761     * @category Util
34762     * @param {Array|string} path The path of the method to invoke.
34763     * @param {...*} [args] The arguments to invoke the method with.
34764     * @returns {Function} Returns the new invoker function.
34765     * @example
34766     *
34767     * var objects = [
34768     *   { 'a': { 'b': _.constant(2) } },
34769     *   { 'a': { 'b': _.constant(1) } }
34770     * ];
34771     *
34772     * _.map(objects, _.method('a.b'));
34773     * // => [2, 1]
34774     *
34775     * _.map(objects, _.method(['a', 'b']));
34776     * // => [2, 1]
34777     */
34778    var method = baseRest(function(path, args) {
34779      return function(object) {
34780        return baseInvoke(object, path, args);
34781      };
34782    });
34783
34784    /**
34785     * The opposite of `_.method`; this method creates a function that invokes
34786     * the method at a given path of `object`. Any additional arguments are
34787     * provided to the invoked method.
34788     *
34789     * @static
34790     * @memberOf _
34791     * @since 3.7.0
34792     * @category Util
34793     * @param {Object} object The object to query.
34794     * @param {...*} [args] The arguments to invoke the method with.
34795     * @returns {Function} Returns the new invoker function.
34796     * @example
34797     *
34798     * var array = _.times(3, _.constant),
34799     *     object = { 'a': array, 'b': array, 'c': array };
34800     *
34801     * _.map(['a[2]', 'c[0]'], _.methodOf(object));
34802     * // => [2, 0]
34803     *
34804     * _.map([['a', '2'], ['c', '0']], _.methodOf(object));
34805     * // => [2, 0]
34806     */
34807    var methodOf = baseRest(function(object, args) {
34808      return function(path) {
34809        return baseInvoke(object, path, args);
34810      };
34811    });
34812
34813    /**
34814     * Adds all own enumerable string keyed function properties of a source
34815     * object to the destination object. If `object` is a function, then methods
34816     * are added to its prototype as well.
34817     *
34818     * **Note:** Use `_.runInContext` to create a pristine `lodash` function to
34819     * avoid conflicts caused by modifying the original.
34820     *
34821     * @static
34822     * @since 0.1.0
34823     * @memberOf _
34824     * @category Util
34825     * @param {Function|Object} [object=lodash] The destination object.
34826     * @param {Object} source The object of functions to add.
34827     * @param {Object} [options={}] The options object.
34828     * @param {boolean} [options.chain=true] Specify whether mixins are chainable.
34829     * @returns {Function|Object} Returns `object`.
34830     * @example
34831     *
34832     * function vowels(string) {
34833     *   return _.filter(string, function(v) {
34834     *     return /[aeiou]/i.test(v);
34835     *   });
34836     * }
34837     *
34838     * _.mixin({ 'vowels': vowels });
34839     * _.vowels('fred');
34840     * // => ['e']
34841     *
34842     * _('fred').vowels().value();
34843     * // => ['e']
34844     *
34845     * _.mixin({ 'vowels': vowels }, { 'chain': false });
34846     * _('fred').vowels();
34847     * // => ['e']
34848     */
34849    function mixin(object, source, options) {
34850      var props = keys(source),
34851          methodNames = baseFunctions(source, props);
34852
34853      if (options == null &&
34854          !(isObject(source) && (methodNames.length || !props.length))) {
34855        options = source;
34856        source = object;
34857        object = this;
34858        methodNames = baseFunctions(source, keys(source));
34859      }
34860      var chain = !(isObject(options) && 'chain' in options) || !!options.chain,
34861          isFunc = isFunction(object);
34862
34863      arrayEach(methodNames, function(methodName) {
34864        var func = source[methodName];
34865        object[methodName] = func;
34866        if (isFunc) {
34867          object.prototype[methodName] = function() {
34868            var chainAll = this.__chain__;
34869            if (chain || chainAll) {
34870              var result = object(this.__wrapped__),
34871                  actions = result.__actions__ = copyArray(this.__actions__);
34872
34873              actions.push({ 'func': func, 'args': arguments, 'thisArg': object });
34874              result.__chain__ = chainAll;
34875              return result;
34876            }
34877            return func.apply(object, arrayPush([this.value()], arguments));
34878          };
34879        }
34880      });
34881
34882      return object;
34883    }
34884
34885    /**
34886     * Reverts the `_` variable to its previous value and returns a reference to
34887     * the `lodash` function.
34888     *
34889     * @static
34890     * @since 0.1.0
34891     * @memberOf _
34892     * @category Util
34893     * @returns {Function} Returns the `lodash` function.
34894     * @example
34895     *
34896     * var lodash = _.noConflict();
34897     */
34898    function noConflict() {
34899      if (root._ === this) {
34900        root._ = oldDash;
34901      }
34902      return this;
34903    }
34904
34905    /**
34906     * This method returns `undefined`.
34907     *
34908     * @static
34909     * @memberOf _
34910     * @since 2.3.0
34911     * @category Util
34912     * @example
34913     *
34914     * _.times(2, _.noop);
34915     * // => [undefined, undefined]
34916     */
34917    function noop() {
34918      // No operation performed.
34919    }
34920
34921    /**
34922     * Creates a function that gets the argument at index `n`. If `n` is negative,
34923     * the nth argument from the end is returned.
34924     *
34925     * @static
34926     * @memberOf _
34927     * @since 4.0.0
34928     * @category Util
34929     * @param {number} [n=0] The index of the argument to return.
34930     * @returns {Function} Returns the new pass-thru function.
34931     * @example
34932     *
34933     * var func = _.nthArg(1);
34934     * func('a', 'b', 'c', 'd');
34935     * // => 'b'
34936     *
34937     * var func = _.nthArg(-2);
34938     * func('a', 'b', 'c', 'd');
34939     * // => 'c'
34940     */
34941    function nthArg(n) {
34942      n = toInteger(n);
34943      return baseRest(function(args) {
34944        return baseNth(args, n);
34945      });
34946    }
34947
34948    /**
34949     * Creates a function that invokes `iteratees` with the arguments it receives
34950     * and returns their results.
34951     *
34952     * @static
34953     * @memberOf _
34954     * @since 4.0.0
34955     * @category Util
34956     * @param {...(Function|Function[])} [iteratees=[_.identity]]
34957     *  The iteratees to invoke.
34958     * @returns {Function} Returns the new function.
34959     * @example
34960     *
34961     * var func = _.over([Math.max, Math.min]);
34962     *
34963     * func(1, 2, 3, 4);
34964     * // => [4, 1]
34965     */
34966    var over = createOver(arrayMap);
34967
34968    /**
34969     * Creates a function that checks if **all** of the `predicates` return
34970     * truthy when invoked with the arguments it receives.
34971     *
34972     * Following shorthands are possible for providing predicates.
34973     * Pass an `Object` and it will be used as an parameter for `_.matches` to create the predicate.
34974     * Pass an `Array` of parameters for `_.matchesProperty` and the predicate will be created using them.
34975     *
34976     * @static
34977     * @memberOf _
34978     * @since 4.0.0
34979     * @category Util
34980     * @param {...(Function|Function[])} [predicates=[_.identity]]
34981     *  The predicates to check.
34982     * @returns {Function} Returns the new function.
34983     * @example
34984     *
34985     * var func = _.overEvery([Boolean, isFinite]);
34986     *
34987     * func('1');
34988     * // => true
34989     *
34990     * func(null);
34991     * // => false
34992     *
34993     * func(NaN);
34994     * // => false
34995     */
34996    var overEvery = createOver(arrayEvery);
34997
34998    /**
34999     * Creates a function that checks if **any** of the `predicates` return
35000     * truthy when invoked with the arguments it receives.
35001     *
35002     * Following shorthands are possible for providing predicates.
35003     * Pass an `Object` and it will be used as an parameter for `_.matches` to create the predicate.
35004     * Pass an `Array` of parameters for `_.matchesProperty` and the predicate will be created using them.
35005     *
35006     * @static
35007     * @memberOf _
35008     * @since 4.0.0
35009     * @category Util
35010     * @param {...(Function|Function[])} [predicates=[_.identity]]
35011     *  The predicates to check.
35012     * @returns {Function} Returns the new function.
35013     * @example
35014     *
35015     * var func = _.overSome([Boolean, isFinite]);
35016     *
35017     * func('1');
35018     * // => true
35019     *
35020     * func(null);
35021     * // => true
35022     *
35023     * func(NaN);
35024     * // => false
35025     *
35026     * var matchesFunc = _.overSome([{ 'a': 1 }, { 'a': 2 }])
35027     * var matchesPropertyFunc = _.overSome([['a', 1], ['a', 2]])
35028     */
35029    var overSome = createOver(arraySome);
35030
35031    /**
35032     * Creates a function that returns the value at `path` of a given object.
35033     *
35034     * @static
35035     * @memberOf _
35036     * @since 2.4.0
35037     * @category Util
35038     * @param {Array|string} path The path of the property to get.
35039     * @returns {Function} Returns the new accessor function.
35040     * @example
35041     *
35042     * var objects = [
35043     *   { 'a': { 'b': 2 } },
35044     *   { 'a': { 'b': 1 } }
35045     * ];
35046     *
35047     * _.map(objects, _.property('a.b'));
35048     * // => [2, 1]
35049     *
35050     * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');
35051     * // => [1, 2]
35052     */
35053    function property(path) {
35054      return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);
35055    }
35056
35057    /**
35058     * The opposite of `_.property`; this method creates a function that returns
35059     * the value at a given path of `object`.
35060     *
35061     * @static
35062     * @memberOf _
35063     * @since 3.0.0
35064     * @category Util
35065     * @param {Object} object The object to query.
35066     * @returns {Function} Returns the new accessor function.
35067     * @example
35068     *
35069     * var array = [0, 1, 2],
35070     *     object = { 'a': array, 'b': array, 'c': array };
35071     *
35072     * _.map(['a[2]', 'c[0]'], _.propertyOf(object));
35073     * // => [2, 0]
35074     *
35075     * _.map([['a', '2'], ['c', '0']], _.propertyOf(object));
35076     * // => [2, 0]
35077     */
35078    function propertyOf(object) {
35079      return function(path) {
35080        return object == null ? undefined : baseGet(object, path);
35081      };
35082    }
35083
35084    /**
35085     * Creates an array of numbers (positive and/or negative) progressing from
35086     * `start` up to, but not including, `end`. A step of `-1` is used if a negative
35087     * `start` is specified without an `end` or `step`. If `end` is not specified,
35088     * it's set to `start` with `start` then set to `0`.
35089     *
35090     * **Note:** JavaScript follows the IEEE-754 standard for resolving
35091     * floating-point values which can produce unexpected results.
35092     *
35093     * @static
35094     * @since 0.1.0
35095     * @memberOf _
35096     * @category Util
35097     * @param {number} [start=0] The start of the range.
35098     * @param {number} end The end of the range.
35099     * @param {number} [step=1] The value to increment or decrement by.
35100     * @returns {Array} Returns the range of numbers.
35101     * @see _.inRange, _.rangeRight
35102     * @example
35103     *
35104     * _.range(4);
35105     * // => [0, 1, 2, 3]
35106     *
35107     * _.range(-4);
35108     * // => [0, -1, -2, -3]
35109     *
35110     * _.range(1, 5);
35111     * // => [1, 2, 3, 4]
35112     *
35113     * _.range(0, 20, 5);
35114     * // => [0, 5, 10, 15]
35115     *
35116     * _.range(0, -4, -1);
35117     * // => [0, -1, -2, -3]
35118     *
35119     * _.range(1, 4, 0);
35120     * // => [1, 1, 1]
35121     *
35122     * _.range(0);
35123     * // => []
35124     */
35125    var range = createRange();
35126
35127    /**
35128     * This method is like `_.range` except that it populates values in
35129     * descending order.
35130     *
35131     * @static
35132     * @memberOf _
35133     * @since 4.0.0
35134     * @category Util
35135     * @param {number} [start=0] The start of the range.
35136     * @param {number} end The end of the range.
35137     * @param {number} [step=1] The value to increment or decrement by.
35138     * @returns {Array} Returns the range of numbers.
35139     * @see _.inRange, _.range
35140     * @example
35141     *
35142     * _.rangeRight(4);
35143     * // => [3, 2, 1, 0]
35144     *
35145     * _.rangeRight(-4);
35146     * // => [-3, -2, -1, 0]
35147     *
35148     * _.rangeRight(1, 5);
35149     * // => [4, 3, 2, 1]
35150     *
35151     * _.rangeRight(0, 20, 5);
35152     * // => [15, 10, 5, 0]
35153     *
35154     * _.rangeRight(0, -4, -1);
35155     * // => [-3, -2, -1, 0]
35156     *
35157     * _.rangeRight(1, 4, 0);
35158     * // => [1, 1, 1]
35159     *
35160     * _.rangeRight(0);
35161     * // => []
35162     */
35163    var rangeRight = createRange(true);
35164
35165    /**
35166     * This method returns a new empty array.
35167     *
35168     * @static
35169     * @memberOf _
35170     * @since 4.13.0
35171     * @category Util
35172     * @returns {Array} Returns the new empty array.
35173     * @example
35174     *
35175     * var arrays = _.times(2, _.stubArray);
35176     *
35177     * console.log(arrays);
35178     * // => [[], []]
35179     *
35180     * console.log(arrays[0] === arrays[1]);
35181     * // => false
35182     */
35183    function stubArray() {
35184      return [];
35185    }
35186
35187    /**
35188     * This method returns `false`.
35189     *
35190     * @static
35191     * @memberOf _
35192     * @since 4.13.0
35193     * @category Util
35194     * @returns {boolean} Returns `false`.
35195     * @example
35196     *
35197     * _.times(2, _.stubFalse);
35198     * // => [false, false]
35199     */
35200    function stubFalse() {
35201      return false;
35202    }
35203
35204    /**
35205     * This method returns a new empty object.
35206     *
35207     * @static
35208     * @memberOf _
35209     * @since 4.13.0
35210     * @category Util
35211     * @returns {Object} Returns the new empty object.
35212     * @example
35213     *
35214     * var objects = _.times(2, _.stubObject);
35215     *
35216     * console.log(objects);
35217     * // => [{}, {}]
35218     *
35219     * console.log(objects[0] === objects[1]);
35220     * // => false
35221     */
35222    function stubObject() {
35223      return {};
35224    }
35225
35226    /**
35227     * This method returns an empty string.
35228     *
35229     * @static
35230     * @memberOf _
35231     * @since 4.13.0
35232     * @category Util
35233     * @returns {string} Returns the empty string.
35234     * @example
35235     *
35236     * _.times(2, _.stubString);
35237     * // => ['', '']
35238     */
35239    function stubString() {
35240      return '';
35241    }
35242
35243    /**
35244     * This method returns `true`.
35245     *
35246     * @static
35247     * @memberOf _
35248     * @since 4.13.0
35249     * @category Util
35250     * @returns {boolean} Returns `true`.
35251     * @example
35252     *
35253     * _.times(2, _.stubTrue);
35254     * // => [true, true]
35255     */
35256    function stubTrue() {
35257      return true;
35258    }
35259
35260    /**
35261     * Invokes the iteratee `n` times, returning an array of the results of
35262     * each invocation. The iteratee is invoked with one argument; (index).
35263     *
35264     * @static
35265     * @since 0.1.0
35266     * @memberOf _
35267     * @category Util
35268     * @param {number} n The number of times to invoke `iteratee`.
35269     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
35270     * @returns {Array} Returns the array of results.
35271     * @example
35272     *
35273     * _.times(3, String);
35274     * // => ['0', '1', '2']
35275     *
35276     *  _.times(4, _.constant(0));
35277     * // => [0, 0, 0, 0]
35278     */
35279    function times(n, iteratee) {
35280      n = toInteger(n);
35281      if (n < 1 || n > MAX_SAFE_INTEGER) {
35282        return [];
35283      }
35284      var index = MAX_ARRAY_LENGTH,
35285          length = nativeMin(n, MAX_ARRAY_LENGTH);
35286
35287      iteratee = getIteratee(iteratee);
35288      n -= MAX_ARRAY_LENGTH;
35289
35290      var result = baseTimes(length, iteratee);
35291      while (++index < n) {
35292        iteratee(index);
35293      }
35294      return result;
35295    }
35296
35297    /**
35298     * Converts `value` to a property path array.
35299     *
35300     * @static
35301     * @memberOf _
35302     * @since 4.0.0
35303     * @category Util
35304     * @param {*} value The value to convert.
35305     * @returns {Array} Returns the new property path array.
35306     * @example
35307     *
35308     * _.toPath('a.b.c');
35309     * // => ['a', 'b', 'c']
35310     *
35311     * _.toPath('a[0].b.c');
35312     * // => ['a', '0', 'b', 'c']
35313     */
35314    function toPath(value) {
35315      if (isArray(value)) {
35316        return arrayMap(value, toKey);
35317      }
35318      return isSymbol(value) ? [value] : copyArray(stringToPath(toString(value)));
35319    }
35320
35321    /**
35322     * Generates a unique ID. If `prefix` is given, the ID is appended to it.
35323     *
35324     * @static
35325     * @since 0.1.0
35326     * @memberOf _
35327     * @category Util
35328     * @param {string} [prefix=''] The value to prefix the ID with.
35329     * @returns {string} Returns the unique ID.
35330     * @example
35331     *
35332     * _.uniqueId('contact_');
35333     * // => 'contact_104'
35334     *
35335     * _.uniqueId();
35336     * // => '105'
35337     */
35338    function uniqueId(prefix) {
35339      var id = ++idCounter;
35340      return toString(prefix) + id;
35341    }
35342
35343    /*------------------------------------------------------------------------*/
35344
35345    /**
35346     * Adds two numbers.
35347     *
35348     * @static
35349     * @memberOf _
35350     * @since 3.4.0
35351     * @category Math
35352     * @param {number} augend The first number in an addition.
35353     * @param {number} addend The second number in an addition.
35354     * @returns {number} Returns the total.
35355     * @example
35356     *
35357     * _.add(6, 4);
35358     * // => 10
35359     */
35360    var add = createMathOperation(function(augend, addend) {
35361      return augend + addend;
35362    }, 0);
35363
35364    /**
35365     * Computes `number` rounded up to `precision`.
35366     *
35367     * @static
35368     * @memberOf _
35369     * @since 3.10.0
35370     * @category Math
35371     * @param {number} number The number to round up.
35372     * @param {number} [precision=0] The precision to round up to.
35373     * @returns {number} Returns the rounded up number.
35374     * @example
35375     *
35376     * _.ceil(4.006);
35377     * // => 5
35378     *
35379     * _.ceil(6.004, 2);
35380     * // => 6.01
35381     *
35382     * _.ceil(6040, -2);
35383     * // => 6100
35384     */
35385    var ceil = createRound('ceil');
35386
35387    /**
35388     * Divide two numbers.
35389     *
35390     * @static
35391     * @memberOf _
35392     * @since 4.7.0
35393     * @category Math
35394     * @param {number} dividend The first number in a division.
35395     * @param {number} divisor The second number in a division.
35396     * @returns {number} Returns the quotient.
35397     * @example
35398     *
35399     * _.divide(6, 4);
35400     * // => 1.5
35401     */
35402    var divide = createMathOperation(function(dividend, divisor) {
35403      return dividend / divisor;
35404    }, 1);
35405
35406    /**
35407     * Computes `number` rounded down to `precision`.
35408     *
35409     * @static
35410     * @memberOf _
35411     * @since 3.10.0
35412     * @category Math
35413     * @param {number} number The number to round down.
35414     * @param {number} [precision=0] The precision to round down to.
35415     * @returns {number} Returns the rounded down number.
35416     * @example
35417     *
35418     * _.floor(4.006);
35419     * // => 4
35420     *
35421     * _.floor(0.046, 2);
35422     * // => 0.04
35423     *
35424     * _.floor(4060, -2);
35425     * // => 4000
35426     */
35427    var floor = createRound('floor');
35428
35429    /**
35430     * Computes the maximum value of `array`. If `array` is empty or falsey,
35431     * `undefined` is returned.
35432     *
35433     * @static
35434     * @since 0.1.0
35435     * @memberOf _
35436     * @category Math
35437     * @param {Array} array The array to iterate over.
35438     * @returns {*} Returns the maximum value.
35439     * @example
35440     *
35441     * _.max([4, 2, 8, 6]);
35442     * // => 8
35443     *
35444     * _.max([]);
35445     * // => undefined
35446     */
35447    function max(array) {
35448      return (array && array.length)
35449        ? baseExtremum(array, identity, baseGt)
35450        : undefined;
35451    }
35452
35453    /**
35454     * This method is like `_.max` except that it accepts `iteratee` which is
35455     * invoked for each element in `array` to generate the criterion by which
35456     * the value is ranked. The iteratee is invoked with one argument: (value).
35457     *
35458     * @static
35459     * @memberOf _
35460     * @since 4.0.0
35461     * @category Math
35462     * @param {Array} array The array to iterate over.
35463     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
35464     * @returns {*} Returns the maximum value.
35465     * @example
35466     *
35467     * var objects = [{ 'n': 1 }, { 'n': 2 }];
35468     *
35469     * _.maxBy(objects, function(o) { return o.n; });
35470     * // => { 'n': 2 }
35471     *
35472     * // The `_.property` iteratee shorthand.
35473     * _.maxBy(objects, 'n');
35474     * // => { 'n': 2 }
35475     */
35476    function maxBy(array, iteratee) {
35477      return (array && array.length)
35478        ? baseExtremum(array, getIteratee(iteratee, 2), baseGt)
35479        : undefined;
35480    }
35481
35482    /**
35483     * Computes the mean of the values in `array`.
35484     *
35485     * @static
35486     * @memberOf _
35487     * @since 4.0.0
35488     * @category Math
35489     * @param {Array} array The array to iterate over.
35490     * @returns {number} Returns the mean.
35491     * @example
35492     *
35493     * _.mean([4, 2, 8, 6]);
35494     * // => 5
35495     */
35496    function mean(array) {
35497      return baseMean(array, identity);
35498    }
35499
35500    /**
35501     * This method is like `_.mean` except that it accepts `iteratee` which is
35502     * invoked for each element in `array` to generate the value to be averaged.
35503     * The iteratee is invoked with one argument: (value).
35504     *
35505     * @static
35506     * @memberOf _
35507     * @since 4.7.0
35508     * @category Math
35509     * @param {Array} array The array to iterate over.
35510     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
35511     * @returns {number} Returns the mean.
35512     * @example
35513     *
35514     * var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }];
35515     *
35516     * _.meanBy(objects, function(o) { return o.n; });
35517     * // => 5
35518     *
35519     * // The `_.property` iteratee shorthand.
35520     * _.meanBy(objects, 'n');
35521     * // => 5
35522     */
35523    function meanBy(array, iteratee) {
35524      return baseMean(array, getIteratee(iteratee, 2));
35525    }
35526
35527    /**
35528     * Computes the minimum value of `array`. If `array` is empty or falsey,
35529     * `undefined` is returned.
35530     *
35531     * @static
35532     * @since 0.1.0
35533     * @memberOf _
35534     * @category Math
35535     * @param {Array} array The array to iterate over.
35536     * @returns {*} Returns the minimum value.
35537     * @example
35538     *
35539     * _.min([4, 2, 8, 6]);
35540     * // => 2
35541     *
35542     * _.min([]);
35543     * // => undefined
35544     */
35545    function min(array) {
35546      return (array && array.length)
35547        ? baseExtremum(array, identity, baseLt)
35548        : undefined;
35549    }
35550
35551    /**
35552     * This method is like `_.min` except that it accepts `iteratee` which is
35553     * invoked for each element in `array` to generate the criterion by which
35554     * the value is ranked. The iteratee is invoked with one argument: (value).
35555     *
35556     * @static
35557     * @memberOf _
35558     * @since 4.0.0
35559     * @category Math
35560     * @param {Array} array The array to iterate over.
35561     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
35562     * @returns {*} Returns the minimum value.
35563     * @example
35564     *
35565     * var objects = [{ 'n': 1 }, { 'n': 2 }];
35566     *
35567     * _.minBy(objects, function(o) { return o.n; });
35568     * // => { 'n': 1 }
35569     *
35570     * // The `_.property` iteratee shorthand.
35571     * _.minBy(objects, 'n');
35572     * // => { 'n': 1 }
35573     */
35574    function minBy(array, iteratee) {
35575      return (array && array.length)
35576        ? baseExtremum(array, getIteratee(iteratee, 2), baseLt)
35577        : undefined;
35578    }
35579
35580    /**
35581     * Multiply two numbers.
35582     *
35583     * @static
35584     * @memberOf _
35585     * @since 4.7.0
35586     * @category Math
35587     * @param {number} multiplier The first number in a multiplication.
35588     * @param {number} multiplicand The second number in a multiplication.
35589     * @returns {number} Returns the product.
35590     * @example
35591     *
35592     * _.multiply(6, 4);
35593     * // => 24
35594     */
35595    var multiply = createMathOperation(function(multiplier, multiplicand) {
35596      return multiplier * multiplicand;
35597    }, 1);
35598
35599    /**
35600     * Computes `number` rounded to `precision`.
35601     *
35602     * @static
35603     * @memberOf _
35604     * @since 3.10.0
35605     * @category Math
35606     * @param {number} number The number to round.
35607     * @param {number} [precision=0] The precision to round to.
35608     * @returns {number} Returns the rounded number.
35609     * @example
35610     *
35611     * _.round(4.006);
35612     * // => 4
35613     *
35614     * _.round(4.006, 2);
35615     * // => 4.01
35616     *
35617     * _.round(4060, -2);
35618     * // => 4100
35619     */
35620    var round = createRound('round');
35621
35622    /**
35623     * Subtract two numbers.
35624     *
35625     * @static
35626     * @memberOf _
35627     * @since 4.0.0
35628     * @category Math
35629     * @param {number} minuend The first number in a subtraction.
35630     * @param {number} subtrahend The second number in a subtraction.
35631     * @returns {number} Returns the difference.
35632     * @example
35633     *
35634     * _.subtract(6, 4);
35635     * // => 2
35636     */
35637    var subtract = createMathOperation(function(minuend, subtrahend) {
35638      return minuend - subtrahend;
35639    }, 0);
35640
35641    /**
35642     * Computes the sum of the values in `array`.
35643     *
35644     * @static
35645     * @memberOf _
35646     * @since 3.4.0
35647     * @category Math
35648     * @param {Array} array The array to iterate over.
35649     * @returns {number} Returns the sum.
35650     * @example
35651     *
35652     * _.sum([4, 2, 8, 6]);
35653     * // => 20
35654     */
35655    function sum(array) {
35656      return (array && array.length)
35657        ? baseSum(array, identity)
35658        : 0;
35659    }
35660
35661    /**
35662     * This method is like `_.sum` except that it accepts `iteratee` which is
35663     * invoked for each element in `array` to generate the value to be summed.
35664     * The iteratee is invoked with one argument: (value).
35665     *
35666     * @static
35667     * @memberOf _
35668     * @since 4.0.0
35669     * @category Math
35670     * @param {Array} array The array to iterate over.
35671     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
35672     * @returns {number} Returns the sum.
35673     * @example
35674     *
35675     * var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }];
35676     *
35677     * _.sumBy(objects, function(o) { return o.n; });
35678     * // => 20
35679     *
35680     * // The `_.property` iteratee shorthand.
35681     * _.sumBy(objects, 'n');
35682     * // => 20
35683     */
35684    function sumBy(array, iteratee) {
35685      return (array && array.length)
35686        ? baseSum(array, getIteratee(iteratee, 2))
35687        : 0;
35688    }
35689
35690    /*------------------------------------------------------------------------*/
35691
35692    // Add methods that return wrapped values in chain sequences.
35693    lodash.after = after;
35694    lodash.ary = ary;
35695    lodash.assign = assign;
35696    lodash.assignIn = assignIn;
35697    lodash.assignInWith = assignInWith;
35698    lodash.assignWith = assignWith;
35699    lodash.at = at;
35700    lodash.before = before;
35701    lodash.bind = bind;
35702    lodash.bindAll = bindAll;
35703    lodash.bindKey = bindKey;
35704    lodash.castArray = castArray;
35705    lodash.chain = chain;
35706    lodash.chunk = chunk;
35707    lodash.compact = compact;
35708    lodash.concat = concat;
35709    lodash.cond = cond;
35710    lodash.conforms = conforms;
35711    lodash.constant = constant;
35712    lodash.countBy = countBy;
35713    lodash.create = create;
35714    lodash.curry = curry;
35715    lodash.curryRight = curryRight;
35716    lodash.debounce = debounce;
35717    lodash.defaults = defaults;
35718    lodash.defaultsDeep = defaultsDeep;
35719    lodash.defer = defer;
35720    lodash.delay = delay;
35721    lodash.difference = difference;
35722    lodash.differenceBy = differenceBy;
35723    lodash.differenceWith = differenceWith;
35724    lodash.drop = drop;
35725    lodash.dropRight = dropRight;
35726    lodash.dropRightWhile = dropRightWhile;
35727    lodash.dropWhile = dropWhile;
35728    lodash.fill = fill;
35729    lodash.filter = filter;
35730    lodash.flatMap = flatMap;
35731    lodash.flatMapDeep = flatMapDeep;
35732    lodash.flatMapDepth = flatMapDepth;
35733    lodash.flatten = flatten;
35734    lodash.flattenDeep = flattenDeep;
35735    lodash.flattenDepth = flattenDepth;
35736    lodash.flip = flip;
35737    lodash.flow = flow;
35738    lodash.flowRight = flowRight;
35739    lodash.fromPairs = fromPairs;
35740    lodash.functions = functions;
35741    lodash.functionsIn = functionsIn;
35742    lodash.groupBy = groupBy;
35743    lodash.initial = initial;
35744    lodash.intersection = intersection;
35745    lodash.intersectionBy = intersectionBy;
35746    lodash.intersectionWith = intersectionWith;
35747    lodash.invert = invert;
35748    lodash.invertBy = invertBy;
35749    lodash.invokeMap = invokeMap;
35750    lodash.iteratee = iteratee;
35751    lodash.keyBy = keyBy;
35752    lodash.keys = keys;
35753    lodash.keysIn = keysIn;
35754    lodash.map = map;
35755    lodash.mapKeys = mapKeys;
35756    lodash.mapValues = mapValues;
35757    lodash.matches = matches;
35758    lodash.matchesProperty = matchesProperty;
35759    lodash.memoize = memoize;
35760    lodash.merge = merge;
35761    lodash.mergeWith = mergeWith;
35762    lodash.method = method;
35763    lodash.methodOf = methodOf;
35764    lodash.mixin = mixin;
35765    lodash.negate = negate;
35766    lodash.nthArg = nthArg;
35767    lodash.omit = omit;
35768    lodash.omitBy = omitBy;
35769    lodash.once = once;
35770    lodash.orderBy = orderBy;
35771    lodash.over = over;
35772    lodash.overArgs = overArgs;
35773    lodash.overEvery = overEvery;
35774    lodash.overSome = overSome;
35775    lodash.partial = partial;
35776    lodash.partialRight = partialRight;
35777    lodash.partition = partition;
35778    lodash.pick = pick;
35779    lodash.pickBy = pickBy;
35780    lodash.property = property;
35781    lodash.propertyOf = propertyOf;
35782    lodash.pull = pull;
35783    lodash.pullAll = pullAll;
35784    lodash.pullAllBy = pullAllBy;
35785    lodash.pullAllWith = pullAllWith;
35786    lodash.pullAt = pullAt;
35787    lodash.range = range;
35788    lodash.rangeRight = rangeRight;
35789    lodash.rearg = rearg;
35790    lodash.reject = reject;
35791    lodash.remove = remove;
35792    lodash.rest = rest;
35793    lodash.reverse = reverse;
35794    lodash.sampleSize = sampleSize;
35795    lodash.set = set;
35796    lodash.setWith = setWith;
35797    lodash.shuffle = shuffle;
35798    lodash.slice = slice;
35799    lodash.sortBy = sortBy;
35800    lodash.sortedUniq = sortedUniq;
35801    lodash.sortedUniqBy = sortedUniqBy;
35802    lodash.split = split;
35803    lodash.spread = spread;
35804    lodash.tail = tail;
35805    lodash.take = take;
35806    lodash.takeRight = takeRight;
35807    lodash.takeRightWhile = takeRightWhile;
35808    lodash.takeWhile = takeWhile;
35809    lodash.tap = tap;
35810    lodash.throttle = throttle;
35811    lodash.thru = thru;
35812    lodash.toArray = toArray;
35813    lodash.toPairs = toPairs;
35814    lodash.toPairsIn = toPairsIn;
35815    lodash.toPath = toPath;
35816    lodash.toPlainObject = toPlainObject;
35817    lodash.transform = transform;
35818    lodash.unary = unary;
35819    lodash.union = union;
35820    lodash.unionBy = unionBy;
35821    lodash.unionWith = unionWith;
35822    lodash.uniq = uniq;
35823    lodash.uniqBy = uniqBy;
35824    lodash.uniqWith = uniqWith;
35825    lodash.unset = unset;
35826    lodash.unzip = unzip;
35827    lodash.unzipWith = unzipWith;
35828    lodash.update = update;
35829    lodash.updateWith = updateWith;
35830    lodash.values = values;
35831    lodash.valuesIn = valuesIn;
35832    lodash.without = without;
35833    lodash.words = words;
35834    lodash.wrap = wrap;
35835    lodash.xor = xor;
35836    lodash.xorBy = xorBy;
35837    lodash.xorWith = xorWith;
35838    lodash.zip = zip;
35839    lodash.zipObject = zipObject;
35840    lodash.zipObjectDeep = zipObjectDeep;
35841    lodash.zipWith = zipWith;
35842
35843    // Add aliases.
35844    lodash.entries = toPairs;
35845    lodash.entriesIn = toPairsIn;
35846    lodash.extend = assignIn;
35847    lodash.extendWith = assignInWith;
35848
35849    // Add methods to `lodash.prototype`.
35850    mixin(lodash, lodash);
35851
35852    /*------------------------------------------------------------------------*/
35853
35854    // Add methods that return unwrapped values in chain sequences.
35855    lodash.add = add;
35856    lodash.attempt = attempt;
35857    lodash.camelCase = camelCase;
35858    lodash.capitalize = capitalize;
35859    lodash.ceil = ceil;
35860    lodash.clamp = clamp;
35861    lodash.clone = clone;
35862    lodash.cloneDeep = cloneDeep;
35863    lodash.cloneDeepWith = cloneDeepWith;
35864    lodash.cloneWith = cloneWith;
35865    lodash.conformsTo = conformsTo;
35866    lodash.deburr = deburr;
35867    lodash.defaultTo = defaultTo;
35868    lodash.divide = divide;
35869    lodash.endsWith = endsWith;
35870    lodash.eq = eq;
35871    lodash.escape = escape;
35872    lodash.escapeRegExp = escapeRegExp;
35873    lodash.every = every;
35874    lodash.find = find;
35875    lodash.findIndex = findIndex;
35876    lodash.findKey = findKey;
35877    lodash.findLast = findLast;
35878    lodash.findLastIndex = findLastIndex;
35879    lodash.findLastKey = findLastKey;
35880    lodash.floor = floor;
35881    lodash.forEach = forEach;
35882    lodash.forEachRight = forEachRight;
35883    lodash.forIn = forIn;
35884    lodash.forInRight = forInRight;
35885    lodash.forOwn = forOwn;
35886    lodash.forOwnRight = forOwnRight;
35887    lodash.get = get;
35888    lodash.gt = gt;
35889    lodash.gte = gte;
35890    lodash.has = has;
35891    lodash.hasIn = hasIn;
35892    lodash.head = head;
35893    lodash.identity = identity;
35894    lodash.includes = includes;
35895    lodash.indexOf = indexOf;
35896    lodash.inRange = inRange;
35897    lodash.invoke = invoke;
35898    lodash.isArguments = isArguments;
35899    lodash.isArray = isArray;
35900    lodash.isArrayBuffer = isArrayBuffer;
35901    lodash.isArrayLike = isArrayLike;
35902    lodash.isArrayLikeObject = isArrayLikeObject;
35903    lodash.isBoolean = isBoolean;
35904    lodash.isBuffer = isBuffer;
35905    lodash.isDate = isDate;
35906    lodash.isElement = isElement;
35907    lodash.isEmpty = isEmpty;
35908    lodash.isEqual = isEqual;
35909    lodash.isEqualWith = isEqualWith;
35910    lodash.isError = isError;
35911    lodash.isFinite = isFinite;
35912    lodash.isFunction = isFunction;
35913    lodash.isInteger = isInteger;
35914    lodash.isLength = isLength;
35915    lodash.isMap = isMap;
35916    lodash.isMatch = isMatch;
35917    lodash.isMatchWith = isMatchWith;
35918    lodash.isNaN = isNaN;
35919    lodash.isNative = isNative;
35920    lodash.isNil = isNil;
35921    lodash.isNull = isNull;
35922    lodash.isNumber = isNumber;
35923    lodash.isObject = isObject;
35924    lodash.isObjectLike = isObjectLike;
35925    lodash.isPlainObject = isPlainObject;
35926    lodash.isRegExp = isRegExp;
35927    lodash.isSafeInteger = isSafeInteger;
35928    lodash.isSet = isSet;
35929    lodash.isString = isString;
35930    lodash.isSymbol = isSymbol;
35931    lodash.isTypedArray = isTypedArray;
35932    lodash.isUndefined = isUndefined;
35933    lodash.isWeakMap = isWeakMap;
35934    lodash.isWeakSet = isWeakSet;
35935    lodash.join = join;
35936    lodash.kebabCase = kebabCase;
35937    lodash.last = last;
35938    lodash.lastIndexOf = lastIndexOf;
35939    lodash.lowerCase = lowerCase;
35940    lodash.lowerFirst = lowerFirst;
35941    lodash.lt = lt;
35942    lodash.lte = lte;
35943    lodash.max = max;
35944    lodash.maxBy = maxBy;
35945    lodash.mean = mean;
35946    lodash.meanBy = meanBy;
35947    lodash.min = min;
35948    lodash.minBy = minBy;
35949    lodash.stubArray = stubArray;
35950    lodash.stubFalse = stubFalse;
35951    lodash.stubObject = stubObject;
35952    lodash.stubString = stubString;
35953    lodash.stubTrue = stubTrue;
35954    lodash.multiply = multiply;
35955    lodash.nth = nth;
35956    lodash.noConflict = noConflict;
35957    lodash.noop = noop;
35958    lodash.now = now;
35959    lodash.pad = pad;
35960    lodash.padEnd = padEnd;
35961    lodash.padStart = padStart;
35962    lodash.parseInt = parseInt;
35963    lodash.random = random;
35964    lodash.reduce = reduce;
35965    lodash.reduceRight = reduceRight;
35966    lodash.repeat = repeat;
35967    lodash.replace = replace;
35968    lodash.result = result;
35969    lodash.round = round;
35970    lodash.runInContext = runInContext;
35971    lodash.sample = sample;
35972    lodash.size = size;
35973    lodash.snakeCase = snakeCase;
35974    lodash.some = some;
35975    lodash.sortedIndex = sortedIndex;
35976    lodash.sortedIndexBy = sortedIndexBy;
35977    lodash.sortedIndexOf = sortedIndexOf;
35978    lodash.sortedLastIndex = sortedLastIndex;
35979    lodash.sortedLastIndexBy = sortedLastIndexBy;
35980    lodash.sortedLastIndexOf = sortedLastIndexOf;
35981    lodash.startCase = startCase;
35982    lodash.startsWith = startsWith;
35983    lodash.subtract = subtract;
35984    lodash.sum = sum;
35985    lodash.sumBy = sumBy;
35986    lodash.template = template;
35987    lodash.times = times;
35988    lodash.toFinite = toFinite;
35989    lodash.toInteger = toInteger;
35990    lodash.toLength = toLength;
35991    lodash.toLower = toLower;
35992    lodash.toNumber = toNumber;
35993    lodash.toSafeInteger = toSafeInteger;
35994    lodash.toString = toString;
35995    lodash.toUpper = toUpper;
35996    lodash.trim = trim;
35997    lodash.trimEnd = trimEnd;
35998    lodash.trimStart = trimStart;
35999    lodash.truncate = truncate;
36000    lodash.unescape = unescape;
36001    lodash.uniqueId = uniqueId;
36002    lodash.upperCase = upperCase;
36003    lodash.upperFirst = upperFirst;
36004
36005    // Add aliases.
36006    lodash.each = forEach;
36007    lodash.eachRight = forEachRight;
36008    lodash.first = head;
36009
36010    mixin(lodash, (function() {
36011      var source = {};
36012      baseForOwn(lodash, function(func, methodName) {
36013        if (!hasOwnProperty.call(lodash.prototype, methodName)) {
36014          source[methodName] = func;
36015        }
36016      });
36017      return source;
36018    }()), { 'chain': false });
36019
36020    /*------------------------------------------------------------------------*/
36021
36022    /**
36023     * The semantic version number.
36024     *
36025     * @static
36026     * @memberOf _
36027     * @type {string}
36028     */
36029    lodash.VERSION = VERSION;
36030
36031    // Assign default placeholders.
36032    arrayEach(['bind', 'bindKey', 'curry', 'curryRight', 'partial', 'partialRight'], function(methodName) {
36033      lodash[methodName].placeholder = lodash;
36034    });
36035
36036    // Add `LazyWrapper` methods for `_.drop` and `_.take` variants.
36037    arrayEach(['drop', 'take'], function(methodName, index) {
36038      LazyWrapper.prototype[methodName] = function(n) {
36039        n = n === undefined ? 1 : nativeMax(toInteger(n), 0);
36040
36041        var result = (this.__filtered__ && !index)
36042          ? new LazyWrapper(this)
36043          : this.clone();
36044
36045        if (result.__filtered__) {
36046          result.__takeCount__ = nativeMin(n, result.__takeCount__);
36047        } else {
36048          result.__views__.push({
36049            'size': nativeMin(n, MAX_ARRAY_LENGTH),
36050            'type': methodName + (result.__dir__ < 0 ? 'Right' : '')
36051          });
36052        }
36053        return result;
36054      };
36055
36056      LazyWrapper.prototype[methodName + 'Right'] = function(n) {
36057        return this.reverse()[methodName](n).reverse();
36058      };
36059    });
36060
36061    // Add `LazyWrapper` methods that accept an `iteratee` value.
36062    arrayEach(['filter', 'map', 'takeWhile'], function(methodName, index) {
36063      var type = index + 1,
36064          isFilter = type == LAZY_FILTER_FLAG || type == LAZY_WHILE_FLAG;
36065
36066      LazyWrapper.prototype[methodName] = function(iteratee) {
36067        var result = this.clone();
36068        result.__iteratees__.push({
36069          'iteratee': getIteratee(iteratee, 3),
36070          'type': type
36071        });
36072        result.__filtered__ = result.__filtered__ || isFilter;
36073        return result;
36074      };
36075    });
36076
36077    // Add `LazyWrapper` methods for `_.head` and `_.last`.
36078    arrayEach(['head', 'last'], function(methodName, index) {
36079      var takeName = 'take' + (index ? 'Right' : '');
36080
36081      LazyWrapper.prototype[methodName] = function() {
36082        return this[takeName](1).value()[0];
36083      };
36084    });
36085
36086    // Add `LazyWrapper` methods for `_.initial` and `_.tail`.
36087    arrayEach(['initial', 'tail'], function(methodName, index) {
36088      var dropName = 'drop' + (index ? '' : 'Right');
36089
36090      LazyWrapper.prototype[methodName] = function() {
36091        return this.__filtered__ ? new LazyWrapper(this) : this[dropName](1);
36092      };
36093    });
36094
36095    LazyWrapper.prototype.compact = function() {
36096      return this.filter(identity);
36097    };
36098
36099    LazyWrapper.prototype.find = function(predicate) {
36100      return this.filter(predicate).head();
36101    };
36102
36103    LazyWrapper.prototype.findLast = function(predicate) {
36104      return this.reverse().find(predicate);
36105    };
36106
36107    LazyWrapper.prototype.invokeMap = baseRest(function(path, args) {
36108      if (typeof path == 'function') {
36109        return new LazyWrapper(this);
36110      }
36111      return this.map(function(value) {
36112        return baseInvoke(value, path, args);
36113      });
36114    });
36115
36116    LazyWrapper.prototype.reject = function(predicate) {
36117      return this.filter(negate(getIteratee(predicate)));
36118    };
36119
36120    LazyWrapper.prototype.slice = function(start, end) {
36121      start = toInteger(start);
36122
36123      var result = this;
36124      if (result.__filtered__ && (start > 0 || end < 0)) {
36125        return new LazyWrapper(result);
36126      }
36127      if (start < 0) {
36128        result = result.takeRight(-start);
36129      } else if (start) {
36130        result = result.drop(start);
36131      }
36132      if (end !== undefined) {
36133        end = toInteger(end);
36134        result = end < 0 ? result.dropRight(-end) : result.take(end - start);
36135      }
36136      return result;
36137    };
36138
36139    LazyWrapper.prototype.takeRightWhile = function(predicate) {
36140      return this.reverse().takeWhile(predicate).reverse();
36141    };
36142
36143    LazyWrapper.prototype.toArray = function() {
36144      return this.take(MAX_ARRAY_LENGTH);
36145    };
36146
36147    // Add `LazyWrapper` methods to `lodash.prototype`.
36148    baseForOwn(LazyWrapper.prototype, function(func, methodName) {
36149      var checkIteratee = /^(?:filter|find|map|reject)|While$/.test(methodName),
36150          isTaker = /^(?:head|last)$/.test(methodName),
36151          lodashFunc = lodash[isTaker ? ('take' + (methodName == 'last' ? 'Right' : '')) : methodName],
36152          retUnwrapped = isTaker || /^find/.test(methodName);
36153
36154      if (!lodashFunc) {
36155        return;
36156      }
36157      lodash.prototype[methodName] = function() {
36158        var value = this.__wrapped__,
36159            args = isTaker ? [1] : arguments,
36160            isLazy = value instanceof LazyWrapper,
36161            iteratee = args[0],
36162            useLazy = isLazy || isArray(value);
36163
36164        var interceptor = function(value) {
36165          var result = lodashFunc.apply(lodash, arrayPush([value], args));
36166          return (isTaker && chainAll) ? result[0] : result;
36167        };
36168
36169        if (useLazy && checkIteratee && typeof iteratee == 'function' && iteratee.length != 1) {
36170          // Avoid lazy use if the iteratee has a "length" value other than `1`.
36171          isLazy = useLazy = false;
36172        }
36173        var chainAll = this.__chain__,
36174            isHybrid = !!this.__actions__.length,
36175            isUnwrapped = retUnwrapped && !chainAll,
36176            onlyLazy = isLazy && !isHybrid;
36177
36178        if (!retUnwrapped && useLazy) {
36179          value = onlyLazy ? value : new LazyWrapper(this);
36180          var result = func.apply(value, args);
36181          result.__actions__.push({ 'func': thru, 'args': [interceptor], 'thisArg': undefined });
36182          return new LodashWrapper(result, chainAll);
36183        }
36184        if (isUnwrapped && onlyLazy) {
36185          return func.apply(this, args);
36186        }
36187        result = this.thru(interceptor);
36188        return isUnwrapped ? (isTaker ? result.value()[0] : result.value()) : result;
36189      };
36190    });
36191
36192    // Add `Array` methods to `lodash.prototype`.
36193    arrayEach(['pop', 'push', 'shift', 'sort', 'splice', 'unshift'], function(methodName) {
36194      var func = arrayProto[methodName],
36195          chainName = /^(?:push|sort|unshift)$/.test(methodName) ? 'tap' : 'thru',
36196          retUnwrapped = /^(?:pop|shift)$/.test(methodName);
36197
36198      lodash.prototype[methodName] = function() {
36199        var args = arguments;
36200        if (retUnwrapped && !this.__chain__) {
36201          var value = this.value();
36202          return func.apply(isArray(value) ? value : [], args);
36203        }
36204        return this[chainName](function(value) {
36205          return func.apply(isArray(value) ? value : [], args);
36206        });
36207      };
36208    });
36209
36210    // Map minified method names to their real names.
36211    baseForOwn(LazyWrapper.prototype, function(func, methodName) {
36212      var lodashFunc = lodash[methodName];
36213      if (lodashFunc) {
36214        var key = lodashFunc.name + '';
36215        if (!hasOwnProperty.call(realNames, key)) {
36216          realNames[key] = [];
36217        }
36218        realNames[key].push({ 'name': methodName, 'func': lodashFunc });
36219      }
36220    });
36221
36222    realNames[createHybrid(undefined, WRAP_BIND_KEY_FLAG).name] = [{
36223      'name': 'wrapper',
36224      'func': undefined
36225    }];
36226
36227    // Add methods to `LazyWrapper`.
36228    LazyWrapper.prototype.clone = lazyClone;
36229    LazyWrapper.prototype.reverse = lazyReverse;
36230    LazyWrapper.prototype.value = lazyValue;
36231
36232    // Add chain sequence methods to the `lodash` wrapper.
36233    lodash.prototype.at = wrapperAt;
36234    lodash.prototype.chain = wrapperChain;
36235    lodash.prototype.commit = wrapperCommit;
36236    lodash.prototype.next = wrapperNext;
36237    lodash.prototype.plant = wrapperPlant;
36238    lodash.prototype.reverse = wrapperReverse;
36239    lodash.prototype.toJSON = lodash.prototype.valueOf = lodash.prototype.value = wrapperValue;
36240
36241    // Add lazy aliases.
36242    lodash.prototype.first = lodash.prototype.head;
36243
36244    if (symIterator) {
36245      lodash.prototype[symIterator] = wrapperToIterator;
36246    }
36247    return lodash;
36248  });
36249
36250  /*--------------------------------------------------------------------------*/
36251
36252  // Export lodash.
36253  var _ = runInContext();
36254
36255  // Some AMD build optimizers, like r.js, check for condition patterns like:
36256  if (true) {
36257    // Expose Lodash on the global object to prevent errors when Lodash is
36258    // loaded by a script tag in the presence of an AMD loader.
36259    // See http://requirejs.org/docs/errors.html#mismatch for more details.
36260    // Use `_.noConflict` to remove Lodash from the global object.
36261    root._ = _;
36262
36263    // Define as an anonymous module so, through path mapping, it can be
36264    // referenced as the "underscore" module.
36265    !(__WEBPACK_AMD_DEFINE_RESULT__ = (function() {
36266      return _;
36267    }).call(exports, __webpack_require__, exports, module),
36268		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
36269  }
36270  // Check for `exports` after `define` in case a build optimizer adds it.
36271  else {}
36272}.call(this));
36273
36274
36275/***/ }),
36276
vendor: 5,636 bytes, lines 36277-36470
36277/***/ "./node_modules/process/browser.js":
36278/*!*****************************************!*\
36279  !*** ./node_modules/process/browser.js ***!
36280  \*****************************************/
36281/***/ ((module) => {
36282
36283// shim for using process in browser
36284var process = module.exports = {};
36285
36286// cached from whatever global is present so that test runners that stub it
36287// don't break things.  But we need to wrap it in a try catch in case it is
36288// wrapped in strict mode code which doesn't define any globals.  It's inside a
36289// function because try/catches deoptimize in certain engines.
36290
36291var cachedSetTimeout;
36292var cachedClearTimeout;
36293
36294function defaultSetTimout() {
36295    throw new Error('setTimeout has not been defined');
36296}
36297function defaultClearTimeout () {
36298    throw new Error('clearTimeout has not been defined');
36299}
36300(function () {
36301    try {
36302        if (typeof setTimeout === 'function') {
36303            cachedSetTimeout = setTimeout;
36304        } else {
36305            cachedSetTimeout = defaultSetTimout;
36306        }
36307    } catch (e) {
36308        cachedSetTimeout = defaultSetTimout;
36309    }
36310    try {
36311        if (typeof clearTimeout === 'function') {
36312            cachedClearTimeout = clearTimeout;
36313        } else {
36314            cachedClearTimeout = defaultClearTimeout;
36315        }
36316    } catch (e) {
36317        cachedClearTimeout = defaultClearTimeout;
36318    }
36319} ())
36320function runTimeout(fun) {
36321    if (cachedSetTimeout === setTimeout) {
36322        //normal enviroments in sane situations
36323        return setTimeout(fun, 0);
36324    }
36325    // if setTimeout wasn't available but was latter defined
36326    if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {
36327        cachedSetTimeout = setTimeout;
36328        return setTimeout(fun, 0);
36329    }
36330    try {
36331        // when when somebody has screwed with setTimeout but no I.E. maddness
36332        return cachedSetTimeout(fun, 0);
36333    } catch(e){
36334        try {
36335            // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
36336            return cachedSetTimeout.call(null, fun, 0);
36337        } catch(e){
36338            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error
36339            return cachedSetTimeout.call(this, fun, 0);
36340        }
36341    }
36342
36343
36344}
36345function runClearTimeout(marker) {
36346    if (cachedClearTimeout === clearTimeout) {
36347        //normal enviroments in sane situations
36348        return clearTimeout(marker);
36349    }
36350    // if clearTimeout wasn't available but was latter defined
36351    if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {
36352        cachedClearTimeout = clearTimeout;
36353        return clearTimeout(marker);
36354    }
36355    try {
36356        // when when somebody has screwed with setTimeout but no I.E. maddness
36357        return cachedClearTimeout(marker);
36358    } catch (e){
36359        try {
36360            // When we are in I.E. but the script has been evaled so I.E. doesn't  trust the global object when called normally
36361            return cachedClearTimeout.call(null, marker);
36362        } catch (e){
36363            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.
36364            // Some versions of I.E. have different rules for clearTimeout vs setTimeout
36365            return cachedClearTimeout.call(this, marker);
36366        }
36367    }
36368
36369
36370
36371}
36372var queue = [];
36373var draining = false;
36374var currentQueue;
36375var queueIndex = -1;
36376
36377function cleanUpNextTick() {
36378    if (!draining || !currentQueue) {
36379        return;
36380    }
36381    draining = false;
36382    if (currentQueue.length) {
36383        queue = currentQueue.concat(queue);
36384    } else {
36385        queueIndex = -1;
36386    }
36387    if (queue.length) {
36388        drainQueue();
36389    }
36390}
36391
36392function drainQueue() {
36393    if (draining) {
36394        return;
36395    }
36396    var timeout = runTimeout(cleanUpNextTick);
36397    draining = true;
36398
36399    var len = queue.length;
36400    while(len) {
36401        currentQueue = queue;
36402        queue = [];
36403        while (++queueIndex < len) {
36404            if (currentQueue) {
36405                currentQueue[queueIndex].run();
36406            }
36407        }
36408        queueIndex = -1;
36409        len = queue.length;
36410    }
36411    currentQueue = null;
36412    draining = false;
36413    runClearTimeout(timeout);
36414}
36415
36416process.nextTick = function (fun) {
36417    var args = new Array(arguments.length - 1);
36418    if (arguments.length > 1) {
36419        for (var i = 1; i < arguments.length; i++) {
36420            args[i - 1] = arguments[i];
36421        }
36422    }
36423    queue.push(new Item(fun, args));
36424    if (queue.length === 1 && !draining) {
36425        runTimeout(drainQueue);
36426    }
36427};
36428
36429// v8 likes predictible objects
36430function Item(fun, array) {
36431    this.fun = fun;
36432    this.array = array;
36433}
36434Item.prototype.run = function () {
36435    this.fun.apply(null, this.array);
36436};
36437process.title = 'browser';
36438process.browser = true;
36439process.env = {};
36440process.argv = [];
36441process.version = ''; // empty string to avoid regexp issues
36442process.versions = {};
36443
36444function noop() {}
36445
36446process.on = noop;
36447process.addListener = noop;
36448process.once = noop;
36449process.off = noop;
36450process.removeListener = noop;
36451process.removeAllListeners = noop;
36452process.emit = noop;
36453process.prependListener = noop;
36454process.prependOnceListener = noop;
36455
36456process.listeners = function (name) { return [] }
36457
36458process.binding = function (name) {
36459    throw new Error('process.binding is not supported');
36460};
36461
36462process.cwd = function () { return '/' };
36463process.chdir = function (dir) {
36464    throw new Error('process.chdir is not supported');
36465};
36466process.umask = function() { return 0; };
36467
36468
36469/***/ }),
36470
vendor: 32,553 bytes, lines 36471-37608
36471/***/ "./node_modules/qrcode.vue/dist/qrcode.vue.esm.js":
36472/*!********************************************************!*\
36473  !*** ./node_modules/qrcode.vue/dist/qrcode.vue.esm.js ***!
36474  \********************************************************/
36475/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
36476
36477"use strict";
36478__webpack_require__.r(__webpack_exports__);
36479/* harmony export */ __webpack_require__.d(__webpack_exports__, {
36480/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
36481/* harmony export */ });
36482/*!
36483 * qrcode.vue v1.7.0
36484 * A Vue component to generate QRCode.
36485 * © 2017-2019 @scopewu(https://github.com/scopewu)
36486 * MIT License.
36487 */
36488var mode = {
36489  MODE_NUMBER: 1 << 0,
36490  MODE_ALPHA_NUM: 1 << 1,
36491  MODE_8BIT_BYTE: 1 << 2,
36492  MODE_KANJI: 1 << 3
36493};
36494
36495function QR8bitByte(data) {
36496  this.mode = mode.MODE_8BIT_BYTE;
36497  this.data = data;
36498}
36499
36500QR8bitByte.prototype = {
36501  getLength: function (buffer) {
36502    return this.data.length;
36503  },
36504  write: function (buffer) {
36505    for (var i = 0; i < this.data.length; i++) {
36506      // not JIS ...
36507      buffer.put(this.data.charCodeAt(i), 8);
36508    }
36509  }
36510};
36511var _8BitByte = QR8bitByte;
36512
36513var ErrorCorrectLevel = {
36514  L: 1,
36515  M: 0,
36516  Q: 3,
36517  H: 2
36518};
36519
36520function QRRSBlock(totalCount, dataCount) {
36521  this.totalCount = totalCount;
36522  this.dataCount = dataCount;
36523}
36524
36525QRRSBlock.RS_BLOCK_TABLE = [// L
36526// M
36527// Q
36528// H
36529// 1
36530[1, 26, 19], [1, 26, 16], [1, 26, 13], [1, 26, 9], // 2
36531[1, 44, 34], [1, 44, 28], [1, 44, 22], [1, 44, 16], // 3
36532[1, 70, 55], [1, 70, 44], [2, 35, 17], [2, 35, 13], // 4		
36533[1, 100, 80], [2, 50, 32], [2, 50, 24], [4, 25, 9], // 5
36534[1, 134, 108], [2, 67, 43], [2, 33, 15, 2, 34, 16], [2, 33, 11, 2, 34, 12], // 6
36535[2, 86, 68], [4, 43, 27], [4, 43, 19], [4, 43, 15], // 7		
36536[2, 98, 78], [4, 49, 31], [2, 32, 14, 4, 33, 15], [4, 39, 13, 1, 40, 14], // 8
36537[2, 121, 97], [2, 60, 38, 2, 61, 39], [4, 40, 18, 2, 41, 19], [4, 40, 14, 2, 41, 15], // 9
36538[2, 146, 116], [3, 58, 36, 2, 59, 37], [4, 36, 16, 4, 37, 17], [4, 36, 12, 4, 37, 13], // 10		
36539[2, 86, 68, 2, 87, 69], [4, 69, 43, 1, 70, 44], [6, 43, 19, 2, 44, 20], [6, 43, 15, 2, 44, 16], // 11
36540[4, 101, 81], [1, 80, 50, 4, 81, 51], [4, 50, 22, 4, 51, 23], [3, 36, 12, 8, 37, 13], // 12
36541[2, 116, 92, 2, 117, 93], [6, 58, 36, 2, 59, 37], [4, 46, 20, 6, 47, 21], [7, 42, 14, 4, 43, 15], // 13
36542[4, 133, 107], [8, 59, 37, 1, 60, 38], [8, 44, 20, 4, 45, 21], [12, 33, 11, 4, 34, 12], // 14
36543[3, 145, 115, 1, 146, 116], [4, 64, 40, 5, 65, 41], [11, 36, 16, 5, 37, 17], [11, 36, 12, 5, 37, 13], // 15
36544[5, 109, 87, 1, 110, 88], [5, 65, 41, 5, 66, 42], [5, 54, 24, 7, 55, 25], [11, 36, 12], // 16
36545[5, 122, 98, 1, 123, 99], [7, 73, 45, 3, 74, 46], [15, 43, 19, 2, 44, 20], [3, 45, 15, 13, 46, 16], // 17
36546[1, 135, 107, 5, 136, 108], [10, 74, 46, 1, 75, 47], [1, 50, 22, 15, 51, 23], [2, 42, 14, 17, 43, 15], // 18
36547[5, 150, 120, 1, 151, 121], [9, 69, 43, 4, 70, 44], [17, 50, 22, 1, 51, 23], [2, 42, 14, 19, 43, 15], // 19
36548[3, 141, 113, 4, 142, 114], [3, 70, 44, 11, 71, 45], [17, 47, 21, 4, 48, 22], [9, 39, 13, 16, 40, 14], // 20
36549[3, 135, 107, 5, 136, 108], [3, 67, 41, 13, 68, 42], [15, 54, 24, 5, 55, 25], [15, 43, 15, 10, 44, 16], // 21
36550[4, 144, 116, 4, 145, 117], [17, 68, 42], [17, 50, 22, 6, 51, 23], [19, 46, 16, 6, 47, 17], // 22
36551[2, 139, 111, 7, 140, 112], [17, 74, 46], [7, 54, 24, 16, 55, 25], [34, 37, 13], // 23
36552[4, 151, 121, 5, 152, 122], [4, 75, 47, 14, 76, 48], [11, 54, 24, 14, 55, 25], [16, 45, 15, 14, 46, 16], // 24
36553[6, 147, 117, 4, 148, 118], [6, 73, 45, 14, 74, 46], [11, 54, 24, 16, 55, 25], [30, 46, 16, 2, 47, 17], // 25
36554[8, 132, 106, 4, 133, 107], [8, 75, 47, 13, 76, 48], [7, 54, 24, 22, 55, 25], [22, 45, 15, 13, 46, 16], // 26
36555[10, 142, 114, 2, 143, 115], [19, 74, 46, 4, 75, 47], [28, 50, 22, 6, 51, 23], [33, 46, 16, 4, 47, 17], // 27
36556[8, 152, 122, 4, 153, 123], [22, 73, 45, 3, 74, 46], [8, 53, 23, 26, 54, 24], [12, 45, 15, 28, 46, 16], // 28
36557[3, 147, 117, 10, 148, 118], [3, 73, 45, 23, 74, 46], [4, 54, 24, 31, 55, 25], [11, 45, 15, 31, 46, 16], // 29
36558[7, 146, 116, 7, 147, 117], [21, 73, 45, 7, 74, 46], [1, 53, 23, 37, 54, 24], [19, 45, 15, 26, 46, 16], // 30
36559[5, 145, 115, 10, 146, 116], [19, 75, 47, 10, 76, 48], [15, 54, 24, 25, 55, 25], [23, 45, 15, 25, 46, 16], // 31
36560[13, 145, 115, 3, 146, 116], [2, 74, 46, 29, 75, 47], [42, 54, 24, 1, 55, 25], [23, 45, 15, 28, 46, 16], // 32
36561[17, 145, 115], [10, 74, 46, 23, 75, 47], [10, 54, 24, 35, 55, 25], [19, 45, 15, 35, 46, 16], // 33
36562[17, 145, 115, 1, 146, 116], [14, 74, 46, 21, 75, 47], [29, 54, 24, 19, 55, 25], [11, 45, 15, 46, 46, 16], // 34
36563[13, 145, 115, 6, 146, 116], [14, 74, 46, 23, 75, 47], [44, 54, 24, 7, 55, 25], [59, 46, 16, 1, 47, 17], // 35
36564[12, 151, 121, 7, 152, 122], [12, 75, 47, 26, 76, 48], [39, 54, 24, 14, 55, 25], [22, 45, 15, 41, 46, 16], // 36
36565[6, 151, 121, 14, 152, 122], [6, 75, 47, 34, 76, 48], [46, 54, 24, 10, 55, 25], [2, 45, 15, 64, 46, 16], // 37
36566[17, 152, 122, 4, 153, 123], [29, 74, 46, 14, 75, 47], [49, 54, 24, 10, 55, 25], [24, 45, 15, 46, 46, 16], // 38
36567[4, 152, 122, 18, 153, 123], [13, 74, 46, 32, 75, 47], [48, 54, 24, 14, 55, 25], [42, 45, 15, 32, 46, 16], // 39
36568[20, 147, 117, 4, 148, 118], [40, 75, 47, 7, 76, 48], [43, 54, 24, 22, 55, 25], [10, 45, 15, 67, 46, 16], // 40
36569[19, 148, 118, 6, 149, 119], [18, 75, 47, 31, 76, 48], [34, 54, 24, 34, 55, 25], [20, 45, 15, 61, 46, 16]];
36570
36571QRRSBlock.getRSBlocks = function (typeNumber, errorCorrectLevel) {
36572  var rsBlock = QRRSBlock.getRsBlockTable(typeNumber, errorCorrectLevel);
36573
36574  if (rsBlock == undefined) {
36575    throw new Error("bad rs block @ typeNumber:" + typeNumber + "/errorCorrectLevel:" + errorCorrectLevel);
36576  }
36577
36578  var length = rsBlock.length / 3;
36579  var list = new Array();
36580
36581  for (var i = 0; i < length; i++) {
36582    var count = rsBlock[i * 3 + 0];
36583    var totalCount = rsBlock[i * 3 + 1];
36584    var dataCount = rsBlock[i * 3 + 2];
36585
36586    for (var j = 0; j < count; j++) {
36587      list.push(new QRRSBlock(totalCount, dataCount));
36588    }
36589  }
36590
36591  return list;
36592};
36593
36594QRRSBlock.getRsBlockTable = function (typeNumber, errorCorrectLevel) {
36595  switch (errorCorrectLevel) {
36596    case ErrorCorrectLevel.L:
36597      return QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 0];
36598
36599    case ErrorCorrectLevel.M:
36600      return QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 1];
36601
36602    case ErrorCorrectLevel.Q:
36603      return QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 2];
36604
36605    case ErrorCorrectLevel.H:
36606      return QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 3];
36607
36608    default:
36609      return undefined;
36610  }
36611};
36612
36613var RSBlock = QRRSBlock;
36614
36615function QRBitBuffer() {
36616  this.buffer = new Array();
36617  this.length = 0;
36618}
36619
36620QRBitBuffer.prototype = {
36621  get: function (index) {
36622    var bufIndex = Math.floor(index / 8);
36623    return (this.buffer[bufIndex] >>> 7 - index % 8 & 1) == 1;
36624  },
36625  put: function (num, length) {
36626    for (var i = 0; i < length; i++) {
36627      this.putBit((num >>> length - i - 1 & 1) == 1);
36628    }
36629  },
36630  getLengthInBits: function () {
36631    return this.length;
36632  },
36633  putBit: function (bit) {
36634    var bufIndex = Math.floor(this.length / 8);
36635
36636    if (this.buffer.length <= bufIndex) {
36637      this.buffer.push(0);
36638    }
36639
36640    if (bit) {
36641      this.buffer[bufIndex] |= 0x80 >>> this.length % 8;
36642    }
36643
36644    this.length++;
36645  }
36646};
36647var BitBuffer = QRBitBuffer;
36648
36649var QRMath = {
36650  glog: function (n) {
36651    if (n < 1) {
36652      throw new Error("glog(" + n + ")");
36653    }
36654
36655    return QRMath.LOG_TABLE[n];
36656  },
36657  gexp: function (n) {
36658    while (n < 0) {
36659      n += 255;
36660    }
36661
36662    while (n >= 256) {
36663      n -= 255;
36664    }
36665
36666    return QRMath.EXP_TABLE[n];
36667  },
36668  EXP_TABLE: new Array(256),
36669  LOG_TABLE: new Array(256)
36670};
36671
36672for (var i = 0; i < 8; i++) {
36673  QRMath.EXP_TABLE[i] = 1 << i;
36674}
36675
36676for (var i = 8; i < 256; i++) {
36677  QRMath.EXP_TABLE[i] = QRMath.EXP_TABLE[i - 4] ^ QRMath.EXP_TABLE[i - 5] ^ QRMath.EXP_TABLE[i - 6] ^ QRMath.EXP_TABLE[i - 8];
36678}
36679
36680for (var i = 0; i < 255; i++) {
36681  QRMath.LOG_TABLE[QRMath.EXP_TABLE[i]] = i;
36682}
36683
36684var math = QRMath;
36685
36686function QRPolynomial(num, shift) {
36687  if (num.length == undefined) {
36688    throw new Error(num.length + "/" + shift);
36689  }
36690
36691  var offset = 0;
36692
36693  while (offset < num.length && num[offset] == 0) {
36694    offset++;
36695  }
36696
36697  this.num = new Array(num.length - offset + shift);
36698
36699  for (var i = 0; i < num.length - offset; i++) {
36700    this.num[i] = num[i + offset];
36701  }
36702}
36703
36704QRPolynomial.prototype = {
36705  get: function (index) {
36706    return this.num[index];
36707  },
36708  getLength: function () {
36709    return this.num.length;
36710  },
36711  multiply: function (e) {
36712    var num = new Array(this.getLength() + e.getLength() - 1);
36713
36714    for (var i = 0; i < this.getLength(); i++) {
36715      for (var j = 0; j < e.getLength(); j++) {
36716        num[i + j] ^= math.gexp(math.glog(this.get(i)) + math.glog(e.get(j)));
36717      }
36718    }
36719
36720    return new QRPolynomial(num, 0);
36721  },
36722  mod: function (e) {
36723    if (this.getLength() - e.getLength() < 0) {
36724      return this;
36725    }
36726
36727    var ratio = math.glog(this.get(0)) - math.glog(e.get(0));
36728    var num = new Array(this.getLength());
36729
36730    for (var i = 0; i < this.getLength(); i++) {
36731      num[i] = this.get(i);
36732    }
36733
36734    for (var i = 0; i < e.getLength(); i++) {
36735      num[i] ^= math.gexp(math.glog(e.get(i)) + ratio);
36736    } // recursive call
36737
36738
36739    return new QRPolynomial(num, 0).mod(e);
36740  }
36741};
36742var Polynomial = QRPolynomial;
36743
36744var QRMaskPattern = {
36745  PATTERN000: 0,
36746  PATTERN001: 1,
36747  PATTERN010: 2,
36748  PATTERN011: 3,
36749  PATTERN100: 4,
36750  PATTERN101: 5,
36751  PATTERN110: 6,
36752  PATTERN111: 7
36753};
36754var QRUtil = {
36755  PATTERN_POSITION_TABLE: [[], [6, 18], [6, 22], [6, 26], [6, 30], [6, 34], [6, 22, 38], [6, 24, 42], [6, 26, 46], [6, 28, 50], [6, 30, 54], [6, 32, 58], [6, 34, 62], [6, 26, 46, 66], [6, 26, 48, 70], [6, 26, 50, 74], [6, 30, 54, 78], [6, 30, 56, 82], [6, 30, 58, 86], [6, 34, 62, 90], [6, 28, 50, 72, 94], [6, 26, 50, 74, 98], [6, 30, 54, 78, 102], [6, 28, 54, 80, 106], [6, 32, 58, 84, 110], [6, 30, 58, 86, 114], [6, 34, 62, 90, 118], [6, 26, 50, 74, 98, 122], [6, 30, 54, 78, 102, 126], [6, 26, 52, 78, 104, 130], [6, 30, 56, 82, 108, 134], [6, 34, 60, 86, 112, 138], [6, 30, 58, 86, 114, 142], [6, 34, 62, 90, 118, 146], [6, 30, 54, 78, 102, 126, 150], [6, 24, 50, 76, 102, 128, 154], [6, 28, 54, 80, 106, 132, 158], [6, 32, 58, 84, 110, 136, 162], [6, 26, 54, 82, 110, 138, 166], [6, 30, 58, 86, 114, 142, 170]],
36756  G15: 1 << 10 | 1 << 8 | 1 << 5 | 1 << 4 | 1 << 2 | 1 << 1 | 1 << 0,
36757  G18: 1 << 12 | 1 << 11 | 1 << 10 | 1 << 9 | 1 << 8 | 1 << 5 | 1 << 2 | 1 << 0,
36758  G15_MASK: 1 << 14 | 1 << 12 | 1 << 10 | 1 << 4 | 1 << 1,
36759  getBCHTypeInfo: function (data) {
36760    var d = data << 10;
36761
36762    while (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G15) >= 0) {
36763      d ^= QRUtil.G15 << QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G15);
36764    }
36765
36766    return (data << 10 | d) ^ QRUtil.G15_MASK;
36767  },
36768  getBCHTypeNumber: function (data) {
36769    var d = data << 12;
36770
36771    while (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G18) >= 0) {
36772      d ^= QRUtil.G18 << QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G18);
36773    }
36774
36775    return data << 12 | d;
36776  },
36777  getBCHDigit: function (data) {
36778    var digit = 0;
36779
36780    while (data != 0) {
36781      digit++;
36782      data >>>= 1;
36783    }
36784
36785    return digit;
36786  },
36787  getPatternPosition: function (typeNumber) {
36788    return QRUtil.PATTERN_POSITION_TABLE[typeNumber - 1];
36789  },
36790  getMask: function (maskPattern, i, j) {
36791    switch (maskPattern) {
36792      case QRMaskPattern.PATTERN000:
36793        return (i + j) % 2 == 0;
36794
36795      case QRMaskPattern.PATTERN001:
36796        return i % 2 == 0;
36797
36798      case QRMaskPattern.PATTERN010:
36799        return j % 3 == 0;
36800
36801      case QRMaskPattern.PATTERN011:
36802        return (i + j) % 3 == 0;
36803
36804      case QRMaskPattern.PATTERN100:
36805        return (Math.floor(i / 2) + Math.floor(j / 3)) % 2 == 0;
36806
36807      case QRMaskPattern.PATTERN101:
36808        return i * j % 2 + i * j % 3 == 0;
36809
36810      case QRMaskPattern.PATTERN110:
36811        return (i * j % 2 + i * j % 3) % 2 == 0;
36812
36813      case QRMaskPattern.PATTERN111:
36814        return (i * j % 3 + (i + j) % 2) % 2 == 0;
36815
36816      default:
36817        throw new Error("bad maskPattern:" + maskPattern);
36818    }
36819  },
36820  getErrorCorrectPolynomial: function (errorCorrectLength) {
36821    var a = new Polynomial([1], 0);
36822
36823    for (var i = 0; i < errorCorrectLength; i++) {
36824      a = a.multiply(new Polynomial([1, math.gexp(i)], 0));
36825    }
36826
36827    return a;
36828  },
36829  getLengthInBits: function (mode$1, type) {
36830    if (1 <= type && type < 10) {
36831      // 1 - 9
36832      switch (mode$1) {
36833        case mode.MODE_NUMBER:
36834          return 10;
36835
36836        case mode.MODE_ALPHA_NUM:
36837          return 9;
36838
36839        case mode.MODE_8BIT_BYTE:
36840          return 8;
36841
36842        case mode.MODE_KANJI:
36843          return 8;
36844
36845        default:
36846          throw new Error("mode:" + mode$1);
36847      }
36848    } else if (type < 27) {
36849      // 10 - 26
36850      switch (mode$1) {
36851        case mode.MODE_NUMBER:
36852          return 12;
36853
36854        case mode.MODE_ALPHA_NUM:
36855          return 11;
36856
36857        case mode.MODE_8BIT_BYTE:
36858          return 16;
36859
36860        case mode.MODE_KANJI:
36861          return 10;
36862
36863        default:
36864          throw new Error("mode:" + mode$1);
36865      }
36866    } else if (type < 41) {
36867      // 27 - 40
36868      switch (mode$1) {
36869        case mode.MODE_NUMBER:
36870          return 14;
36871
36872        case mode.MODE_ALPHA_NUM:
36873          return 13;
36874
36875        case mode.MODE_8BIT_BYTE:
36876          return 16;
36877
36878        case mode.MODE_KANJI:
36879          return 12;
36880
36881        default:
36882          throw new Error("mode:" + mode$1);
36883      }
36884    } else {
36885      throw new Error("type:" + type);
36886    }
36887  },
36888  getLostPoint: function (qrCode) {
36889    var moduleCount = qrCode.getModuleCount();
36890    var lostPoint = 0; // LEVEL1
36891
36892    for (var row = 0; row < moduleCount; row++) {
36893      for (var col = 0; col < moduleCount; col++) {
36894        var sameCount = 0;
36895        var dark = qrCode.isDark(row, col);
36896
36897        for (var r = -1; r <= 1; r++) {
36898          if (row + r < 0 || moduleCount <= row + r) {
36899            continue;
36900          }
36901
36902          for (var c = -1; c <= 1; c++) {
36903            if (col + c < 0 || moduleCount <= col + c) {
36904              continue;
36905            }
36906
36907            if (r == 0 && c == 0) {
36908              continue;
36909            }
36910
36911            if (dark == qrCode.isDark(row + r, col + c)) {
36912              sameCount++;
36913            }
36914          }
36915        }
36916
36917        if (sameCount > 5) {
36918          lostPoint += 3 + sameCount - 5;
36919        }
36920      }
36921    } // LEVEL2
36922
36923
36924    for (var row = 0; row < moduleCount - 1; row++) {
36925      for (var col = 0; col < moduleCount - 1; col++) {
36926        var count = 0;
36927        if (qrCode.isDark(row, col)) count++;
36928        if (qrCode.isDark(row + 1, col)) count++;
36929        if (qrCode.isDark(row, col + 1)) count++;
36930        if (qrCode.isDark(row + 1, col + 1)) count++;
36931
36932        if (count == 0 || count == 4) {
36933          lostPoint += 3;
36934        }
36935      }
36936    } // LEVEL3
36937
36938
36939    for (var row = 0; row < moduleCount; row++) {
36940      for (var col = 0; col < moduleCount - 6; col++) {
36941        if (qrCode.isDark(row, col) && !qrCode.isDark(row, col + 1) && qrCode.isDark(row, col + 2) && qrCode.isDark(row, col + 3) && qrCode.isDark(row, col + 4) && !qrCode.isDark(row, col + 5) && qrCode.isDark(row, col + 6)) {
36942          lostPoint += 40;
36943        }
36944      }
36945    }
36946
36947    for (var col = 0; col < moduleCount; col++) {
36948      for (var row = 0; row < moduleCount - 6; row++) {
36949        if (qrCode.isDark(row, col) && !qrCode.isDark(row + 1, col) && qrCode.isDark(row + 2, col) && qrCode.isDark(row + 3, col) && qrCode.isDark(row + 4, col) && !qrCode.isDark(row + 5, col) && qrCode.isDark(row + 6, col)) {
36950          lostPoint += 40;
36951        }
36952      }
36953    } // LEVEL4
36954
36955
36956    var darkCount = 0;
36957
36958    for (var col = 0; col < moduleCount; col++) {
36959      for (var row = 0; row < moduleCount; row++) {
36960        if (qrCode.isDark(row, col)) {
36961          darkCount++;
36962        }
36963      }
36964    }
36965
36966    var ratio = Math.abs(100 * darkCount / moduleCount / moduleCount - 50) / 5;
36967    lostPoint += ratio * 10;
36968    return lostPoint;
36969  }
36970};
36971var util = QRUtil;
36972
36973function QRCode(typeNumber, errorCorrectLevel) {
36974  this.typeNumber = typeNumber;
36975  this.errorCorrectLevel = errorCorrectLevel;
36976  this.modules = null;
36977  this.moduleCount = 0;
36978  this.dataCache = null;
36979  this.dataList = [];
36980} // for client side minification
36981
36982
36983var proto = QRCode.prototype;
36984
36985proto.addData = function (data) {
36986  var newData = new _8BitByte(data);
36987  this.dataList.push(newData);
36988  this.dataCache = null;
36989};
36990
36991proto.isDark = function (row, col) {
36992  if (row < 0 || this.moduleCount <= row || col < 0 || this.moduleCount <= col) {
36993    throw new Error(row + "," + col);
36994  }
36995
36996  return this.modules[row][col];
36997};
36998
36999proto.getModuleCount = function () {
37000  return this.moduleCount;
37001};
37002
37003proto.make = function () {
37004  // Calculate automatically typeNumber if provided is < 1
37005  if (this.typeNumber < 1) {
37006    var typeNumber = 1;
37007
37008    for (typeNumber = 1; typeNumber < 40; typeNumber++) {
37009      var rsBlocks = RSBlock.getRSBlocks(typeNumber, this.errorCorrectLevel);
37010      var buffer = new BitBuffer();
37011      var totalDataCount = 0;
37012
37013      for (var i = 0; i < rsBlocks.length; i++) {
37014        totalDataCount += rsBlocks[i].dataCount;
37015      }
37016
37017      for (var i = 0; i < this.dataList.length; i++) {
37018        var data = this.dataList[i];
37019        buffer.put(data.mode, 4);
37020        buffer.put(data.getLength(), util.getLengthInBits(data.mode, typeNumber));
37021        data.write(buffer);
37022      }
37023
37024      if (buffer.getLengthInBits() <= totalDataCount * 8) break;
37025    }
37026
37027    this.typeNumber = typeNumber;
37028  }
37029
37030  this.makeImpl(false, this.getBestMaskPattern());
37031};
37032
37033proto.makeImpl = function (test, maskPattern) {
37034  this.moduleCount = this.typeNumber * 4 + 17;
37035  this.modules = new Array(this.moduleCount);
37036
37037  for (var row = 0; row < this.moduleCount; row++) {
37038    this.modules[row] = new Array(this.moduleCount);
37039
37040    for (var col = 0; col < this.moduleCount; col++) {
37041      this.modules[row][col] = null; //(col + row) % 3;
37042    }
37043  }
37044
37045  this.setupPositionProbePattern(0, 0);
37046  this.setupPositionProbePattern(this.moduleCount - 7, 0);
37047  this.setupPositionProbePattern(0, this.moduleCount - 7);
37048  this.setupPositionAdjustPattern();
37049  this.setupTimingPattern();
37050  this.setupTypeInfo(test, maskPattern);
37051
37052  if (this.typeNumber >= 7) {
37053    this.setupTypeNumber(test);
37054  }
37055
37056  if (this.dataCache == null) {
37057    this.dataCache = QRCode.createData(this.typeNumber, this.errorCorrectLevel, this.dataList);
37058  }
37059
37060  this.mapData(this.dataCache, maskPattern);
37061};
37062
37063proto.setupPositionProbePattern = function (row, col) {
37064  for (var r = -1; r <= 7; r++) {
37065    if (row + r <= -1 || this.moduleCount <= row + r) continue;
37066
37067    for (var c = -1; c <= 7; c++) {
37068      if (col + c <= -1 || this.moduleCount <= col + c) continue;
37069
37070      if (0 <= r && r <= 6 && (c == 0 || c == 6) || 0 <= c && c <= 6 && (r == 0 || r == 6) || 2 <= r && r <= 4 && 2 <= c && c <= 4) {
37071        this.modules[row + r][col + c] = true;
37072      } else {
37073        this.modules[row + r][col + c] = false;
37074      }
37075    }
37076  }
37077};
37078
37079proto.getBestMaskPattern = function () {
37080  var minLostPoint = 0;
37081  var pattern = 0;
37082
37083  for (var i = 0; i < 8; i++) {
37084    this.makeImpl(true, i);
37085    var lostPoint = util.getLostPoint(this);
37086
37087    if (i == 0 || minLostPoint > lostPoint) {
37088      minLostPoint = lostPoint;
37089      pattern = i;
37090    }
37091  }
37092
37093  return pattern;
37094};
37095
37096proto.createMovieClip = function (target_mc, instance_name, depth) {
37097  var qr_mc = target_mc.createEmptyMovieClip(instance_name, depth);
37098  var cs = 1;
37099  this.make();
37100
37101  for (var row = 0; row < this.modules.length; row++) {
37102    var y = row * cs;
37103
37104    for (var col = 0; col < this.modules[row].length; col++) {
37105      var x = col * cs;
37106      var dark = this.modules[row][col];
37107
37108      if (dark) {
37109        qr_mc.beginFill(0, 100);
37110        qr_mc.moveTo(x, y);
37111        qr_mc.lineTo(x + cs, y);
37112        qr_mc.lineTo(x + cs, y + cs);
37113        qr_mc.lineTo(x, y + cs);
37114        qr_mc.endFill();
37115      }
37116    }
37117  }
37118
37119  return qr_mc;
37120};
37121
37122proto.setupTimingPattern = function () {
37123  for (var r = 8; r < this.moduleCount - 8; r++) {
37124    if (this.modules[r][6] != null) {
37125      continue;
37126    }
37127
37128    this.modules[r][6] = r % 2 == 0;
37129  }
37130
37131  for (var c = 8; c < this.moduleCount - 8; c++) {
37132    if (this.modules[6][c] != null) {
37133      continue;
37134    }
37135
37136    this.modules[6][c] = c % 2 == 0;
37137  }
37138};
37139
37140proto.setupPositionAdjustPattern = function () {
37141  var pos = util.getPatternPosition(this.typeNumber);
37142
37143  for (var i = 0; i < pos.length; i++) {
37144    for (var j = 0; j < pos.length; j++) {
37145      var row = pos[i];
37146      var col = pos[j];
37147
37148      if (this.modules[row][col] != null) {
37149        continue;
37150      }
37151
37152      for (var r = -2; r <= 2; r++) {
37153        for (var c = -2; c <= 2; c++) {
37154          if (r == -2 || r == 2 || c == -2 || c == 2 || r == 0 && c == 0) {
37155            this.modules[row + r][col + c] = true;
37156          } else {
37157            this.modules[row + r][col + c] = false;
37158          }
37159        }
37160      }
37161    }
37162  }
37163};
37164
37165proto.setupTypeNumber = function (test) {
37166  var bits = util.getBCHTypeNumber(this.typeNumber);
37167
37168  for (var i = 0; i < 18; i++) {
37169    var mod = !test && (bits >> i & 1) == 1;
37170    this.modules[Math.floor(i / 3)][i % 3 + this.moduleCount - 8 - 3] = mod;
37171  }
37172
37173  for (var i = 0; i < 18; i++) {
37174    var mod = !test && (bits >> i & 1) == 1;
37175    this.modules[i % 3 + this.moduleCount - 8 - 3][Math.floor(i / 3)] = mod;
37176  }
37177};
37178
37179proto.setupTypeInfo = function (test, maskPattern) {
37180  var data = this.errorCorrectLevel << 3 | maskPattern;
37181  var bits = util.getBCHTypeInfo(data); // vertical		
37182
37183  for (var i = 0; i < 15; i++) {
37184    var mod = !test && (bits >> i & 1) == 1;
37185
37186    if (i < 6) {
37187      this.modules[i][8] = mod;
37188    } else if (i < 8) {
37189      this.modules[i + 1][8] = mod;
37190    } else {
37191      this.modules[this.moduleCount - 15 + i][8] = mod;
37192    }
37193  } // horizontal
37194
37195
37196  for (var i = 0; i < 15; i++) {
37197    var mod = !test && (bits >> i & 1) == 1;
37198
37199    if (i < 8) {
37200      this.modules[8][this.moduleCount - i - 1] = mod;
37201    } else if (i < 9) {
37202      this.modules[8][15 - i - 1 + 1] = mod;
37203    } else {
37204      this.modules[8][15 - i - 1] = mod;
37205    }
37206  } // fixed module
37207
37208
37209  this.modules[this.moduleCount - 8][8] = !test;
37210};
37211
37212proto.mapData = function (data, maskPattern) {
37213  var inc = -1;
37214  var row = this.moduleCount - 1;
37215  var bitIndex = 7;
37216  var byteIndex = 0;
37217
37218  for (var col = this.moduleCount - 1; col > 0; col -= 2) {
37219    if (col == 6) col--;
37220
37221    while (true) {
37222      for (var c = 0; c < 2; c++) {
37223        if (this.modules[row][col - c] == null) {
37224          var dark = false;
37225
37226          if (byteIndex < data.length) {
37227            dark = (data[byteIndex] >>> bitIndex & 1) == 1;
37228          }
37229
37230          var mask = util.getMask(maskPattern, row, col - c);
37231
37232          if (mask) {
37233            dark = !dark;
37234          }
37235
37236          this.modules[row][col - c] = dark;
37237          bitIndex--;
37238
37239          if (bitIndex == -1) {
37240            byteIndex++;
37241            bitIndex = 7;
37242          }
37243        }
37244      }
37245
37246      row += inc;
37247
37248      if (row < 0 || this.moduleCount <= row) {
37249        row -= inc;
37250        inc = -inc;
37251        break;
37252      }
37253    }
37254  }
37255};
37256
37257QRCode.PAD0 = 0xEC;
37258QRCode.PAD1 = 0x11;
37259
37260QRCode.createData = function (typeNumber, errorCorrectLevel, dataList) {
37261  var rsBlocks = RSBlock.getRSBlocks(typeNumber, errorCorrectLevel);
37262  var buffer = new BitBuffer();
37263
37264  for (var i = 0; i < dataList.length; i++) {
37265    var data = dataList[i];
37266    buffer.put(data.mode, 4);
37267    buffer.put(data.getLength(), util.getLengthInBits(data.mode, typeNumber));
37268    data.write(buffer);
37269  } // calc num max data.
37270
37271
37272  var totalDataCount = 0;
37273
37274  for (var i = 0; i < rsBlocks.length; i++) {
37275    totalDataCount += rsBlocks[i].dataCount;
37276  }
37277
37278  if (buffer.getLengthInBits() > totalDataCount * 8) {
37279    throw new Error("code length overflow. (" + buffer.getLengthInBits() + ">" + totalDataCount * 8 + ")");
37280  } // end code
37281
37282
37283  if (buffer.getLengthInBits() + 4 <= totalDataCount * 8) {
37284    buffer.put(0, 4);
37285  } // padding
37286
37287
37288  while (buffer.getLengthInBits() % 8 != 0) {
37289    buffer.putBit(false);
37290  } // padding
37291
37292
37293  while (true) {
37294    if (buffer.getLengthInBits() >= totalDataCount * 8) {
37295      break;
37296    }
37297
37298    buffer.put(QRCode.PAD0, 8);
37299
37300    if (buffer.getLengthInBits() >= totalDataCount * 8) {
37301      break;
37302    }
37303
37304    buffer.put(QRCode.PAD1, 8);
37305  }
37306
37307  return QRCode.createBytes(buffer, rsBlocks);
37308};
37309
37310QRCode.createBytes = function (buffer, rsBlocks) {
37311  var offset = 0;
37312  var maxDcCount = 0;
37313  var maxEcCount = 0;
37314  var dcdata = new Array(rsBlocks.length);
37315  var ecdata = new Array(rsBlocks.length);
37316
37317  for (var r = 0; r < rsBlocks.length; r++) {
37318    var dcCount = rsBlocks[r].dataCount;
37319    var ecCount = rsBlocks[r].totalCount - dcCount;
37320    maxDcCount = Math.max(maxDcCount, dcCount);
37321    maxEcCount = Math.max(maxEcCount, ecCount);
37322    dcdata[r] = new Array(dcCount);
37323
37324    for (var i = 0; i < dcdata[r].length; i++) {
37325      dcdata[r][i] = 0xff & buffer.buffer[i + offset];
37326    }
37327
37328    offset += dcCount;
37329    var rsPoly = util.getErrorCorrectPolynomial(ecCount);
37330    var rawPoly = new Polynomial(dcdata[r], rsPoly.getLength() - 1);
37331    var modPoly = rawPoly.mod(rsPoly);
37332    ecdata[r] = new Array(rsPoly.getLength() - 1);
37333
37334    for (var i = 0; i < ecdata[r].length; i++) {
37335      var modIndex = i + modPoly.getLength() - ecdata[r].length;
37336      ecdata[r][i] = modIndex >= 0 ? modPoly.get(modIndex) : 0;
37337    }
37338  }
37339
37340  var totalCodeCount = 0;
37341
37342  for (var i = 0; i < rsBlocks.length; i++) {
37343    totalCodeCount += rsBlocks[i].totalCount;
37344  }
37345
37346  var data = new Array(totalCodeCount);
37347  var index = 0;
37348
37349  for (var i = 0; i < maxDcCount; i++) {
37350    for (var r = 0; r < rsBlocks.length; r++) {
37351      if (i < dcdata[r].length) {
37352        data[index++] = dcdata[r][i];
37353      }
37354    }
37355  }
37356
37357  for (var i = 0; i < maxEcCount; i++) {
37358    for (var r = 0; r < rsBlocks.length; r++) {
37359      if (i < ecdata[r].length) {
37360        data[index++] = ecdata[r][i];
37361      }
37362    }
37363  }
37364
37365  return data;
37366};
37367
37368var QRCode_1 = QRCode;
37369
37370/**
37371 * Encode UTF16 to UTF8.
37372 * See: http://jonisalonen.com/2012/from-utf-16-to-utf-8-in-javascript/
37373 * @param str {string}
37374 * @returns {string}
37375 */
37376
37377function toUTF8String(str) {
37378  var utf8Str = '';
37379
37380  for (var i = 0; i < str.length; i++) {
37381    var charCode = str.charCodeAt(i);
37382
37383    if (charCode < 0x0080) {
37384      utf8Str += String.fromCharCode(charCode);
37385    } else if (charCode < 0x0800) {
37386      utf8Str += String.fromCharCode(0xc0 | charCode >> 6);
37387      utf8Str += String.fromCharCode(0x80 | charCode & 0x3f);
37388    } else if (charCode < 0xd800 || charCode >= 0xe000) {
37389      utf8Str += String.fromCharCode(0xe0 | charCode >> 12);
37390      utf8Str += String.fromCharCode(0x80 | charCode >> 6 & 0x3f);
37391      utf8Str += String.fromCharCode(0x80 | charCode & 0x3f);
37392    } else {
37393      // surrogate pair
37394      i++; // UTF-16 encodes 0x10000-0x10FFFF by
37395      // subtracting 0x10000 and splitting the
37396      // 20 bits of 0x0-0xFFFFF into two halves
37397
37398      charCode = 0x10000 + ((charCode & 0x3ff) << 10 | str.charCodeAt(i) & 0x3ff);
37399      utf8Str += String.fromCharCode(0xf0 | charCode >> 18);
37400      utf8Str += String.fromCharCode(0x80 | charCode >> 12 & 0x3f);
37401      utf8Str += String.fromCharCode(0x80 | charCode >> 6 & 0x3f);
37402      utf8Str += String.fromCharCode(0x80 | charCode & 0x3f);
37403    }
37404  }
37405
37406  return utf8Str;
37407}
37408
37409function generatePath(modules) {
37410  var margin = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
37411  var ops = [];
37412  modules.forEach(function (row, y) {
37413    var start = null;
37414    row.forEach(function (cell, x) {
37415      if (!cell && start !== null) {
37416        // M0 0h7v1H0z injects the space with the move and drops the comma,
37417        // saving a char per operation
37418        ops.push("M".concat(start + margin, " ").concat(y + margin, "h").concat(x - start, "v1H").concat(start + margin, "z"));
37419        start = null;
37420        return;
37421      } // end of row, clean up or skip
37422
37423
37424      if (x === row.length - 1) {
37425        if (!cell) {
37426          // We would have closed the op above already so this can only mean
37427          // 2+ light modules in a row.
37428          return;
37429        }
37430
37431        if (start === null) {
37432          // Just a single dark module.
37433          ops.push("M".concat(x + margin, ",").concat(y + margin, " h1v1H").concat(x + margin, "z"));
37434        } else {
37435          // Otherwise finish the current line.
37436          ops.push("M".concat(start + margin, ",").concat(y + margin, " h").concat(x + 1 - start, "v1H").concat(start + margin, "z"));
37437        }
37438
37439        return;
37440      }
37441
37442      if (cell && start === null) {
37443        start = x;
37444      }
37445    });
37446  });
37447  return ops.join('');
37448} // @vue/component
37449
37450
37451var QrcodeVue = {
37452  props: {
37453    value: {
37454      type: String,
37455      required: true,
37456      default: ''
37457    },
37458    className: {
37459      type: String,
37460      default: ''
37461    },
37462    size: {
37463      type: [Number, String],
37464      default: 100,
37465      validator: function validator(s) {
37466        return isNaN(Number(s)) !== true;
37467      }
37468    },
37469    level: {
37470      type: String,
37471      default: 'L',
37472      validator: function validator(l) {
37473        return ['L', 'Q', 'M', 'H'].indexOf(l) > -1;
37474      }
37475    },
37476    background: {
37477      type: String,
37478      default: '#fff'
37479    },
37480    foreground: {
37481      type: String,
37482      default: '#000'
37483    },
37484    renderAs: {
37485      type: String,
37486      required: false,
37487      default: 'canvas',
37488      validator: function validator(as) {
37489        return ['canvas', 'svg'].indexOf(as) > -1;
37490      }
37491    }
37492  },
37493  data: function data() {
37494    return {
37495      numCells: 0,
37496      fgPath: ''
37497    };
37498  },
37499  updated: function updated() {
37500    this.render();
37501  },
37502  mounted: function mounted() {
37503    this.render();
37504  },
37505  methods: {
37506    render: function render() {
37507      var value = this.value,
37508          size = this.size,
37509          level = this.level,
37510          background = this.background,
37511          foreground = this.foreground,
37512          renderAs = this.renderAs;
37513
37514      var _size = size >>> 0; // size to number
37515      // We'll use type===-1 to force QRCode to automatically pick the best type
37516
37517
37518      var qrCode = new QRCode_1(-1, ErrorCorrectLevel[level]);
37519      qrCode.addData(toUTF8String(value));
37520      qrCode.make();
37521      var cells = qrCode.modules;
37522      var tileW = _size / cells.length;
37523      var tileH = _size / cells.length;
37524      var scale = window.devicePixelRatio || 1;
37525
37526      if (renderAs === 'svg') {
37527        this.numCells = cells.length; // Drawing strategy: instead of a rect per module, we're going to create a
37528        // single path for the dark modules and layer that on top of a light rect,
37529        // for a total of 2 DOM nodes. We pay a bit more in string concat but that's
37530        // way faster than DOM ops.
37531        // For level 1, 441 nodes -> 2
37532        // For level 40, 31329 -> 2
37533
37534        this.fgPath = generatePath(cells);
37535      } else {
37536        var canvas = this.$refs['qrcode-vue'];
37537        var ctx = canvas.getContext('2d');
37538        canvas.height = canvas.width = _size * scale;
37539        ctx.scale(scale, scale);
37540        cells.forEach(function (row, rdx) {
37541          row.forEach(function (cell, cdx) {
37542            ctx.fillStyle = cell ? foreground : background;
37543            var w = Math.ceil((cdx + 1) * tileW) - Math.floor(cdx * tileW);
37544            var h = Math.ceil((rdx + 1) * tileH) - Math.floor(rdx * tileH);
37545            ctx.fillRect(Math.round(cdx * tileW), Math.round(rdx * tileH), w, h);
37546          });
37547        });
37548      }
37549    }
37550  },
37551  render: function render(createElement) {
37552    var className = this.className,
37553        value = this.value,
37554        level = this.level,
37555        background = this.background,
37556        foreground = this.foreground,
37557        size = this.size,
37558        renderAs = this.renderAs,
37559        numCells = this.numCells,
37560        fgPath = this.fgPath;
37561    return createElement('div', {
37562      class: this.class || className,
37563      attrs: {
37564        value: value,
37565        level: level,
37566        background: background,
37567        foreground: foreground
37568      }
37569    }, [renderAs === 'svg' ? createElement('svg', {
37570      attrs: {
37571        height: size,
37572        width: size,
37573        shapeRendering: 'crispEdges',
37574        viewBox: "0 0 ".concat(numCells, " ").concat(numCells)
37575      },
37576      style: {
37577        width: size + 'px',
37578        height: size + 'px'
37579      }
37580    }, [createElement('path', {
37581      attrs: {
37582        fill: background,
37583        d: "M0,0 h".concat(numCells, "v").concat(numCells, "H0z")
37584      }
37585    }), createElement('path', {
37586      attrs: {
37587        fill: foreground,
37588        d: fgPath
37589      }
37590    })]) : createElement('canvas', {
37591      attrs: {
37592        height: size,
37593        width: size
37594      },
37595      style: {
37596        width: size + 'px',
37597        height: size + 'px'
37598      },
37599      ref: 'qrcode-vue'
37600    }, [])]);
37601  }
37602};
37603
37604/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (QrcodeVue);
37605
37606
37607/***/ }),
37608
vendor: 42,935 bytes, lines 37609-37920
37609/***/ "./node_modules/sister/src/sister.js":
37610/*!*******************************************!*\
37611  !*** ./node_modules/sister/src/sister.js ***!
37612  \*******************************************/
37613/***/ ((module) => {
37614
37615"use strict";
37616
37617
37618var Sister;
37619
37620/**
37621* @link https://github.com/gajus/sister for the canonical source repository
37622* @license https://github.com/gajus/sister/blob/master/LICENSE BSD 3-Clause
37623*/
37624Sister = function () {
37625    var sister = {},
37626        events = {};
37627
37628    /**
37629     * @name handler
37630     * @function
37631     * @param {Object} data Event data.
37632     */
37633
37634    /**
37635     * @param {String} name Event name.
37636     * @param {handler} handler
37637     * @return {listener}
37638     */
37639    sister.on = function (name, handler) {
37640        var listener = {name: name, handler: handler};
37641        events[name] = events[name] || [];
37642        events[name].unshift(listener);
37643        return listener;
37644    };
37645
37646    /**
37647     * @param {listener}
37648     */
37649    sister.off = function (listener) {
37650        var index = events[listener.name].indexOf(listener);
37651
37652        if (index !== -1) {
37653            events[listener.name].splice(index, 1);
37654        }
37655    };
37656
37657    /**
37658     * @param {String} name Event name.
37659     * @param {Object} data Event data.
37660     */
37661    sister.trigger = function (name, data) {
37662        var listeners = events[name],
37663            i;
37664
37665        if (listeners) {
37666            i = listeners.length;
37667            while (i--) {
37668                listeners[i].handler(data);
37669            }
37670        }
37671    };
37672
37673    return sister;
37674};
37675
37676module.exports = Sister;
37677
37678
37679/***/ }),
37680
37681/***/ "./node_modules/style-loader/dist/cjs.js!./node_modules/laravel-mix/node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-12.use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/NewsList.vue?vue&type=style&index=0&id=b8a09a08&scoped=true&lang=scss":
37682/*!**********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
37683  !*** ./node_modules/style-loader/dist/cjs.js!./node_modules/laravel-mix/node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-12.use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/NewsList.vue?vue&type=style&index=0&id=b8a09a08&scoped=true&lang=scss ***!
37684  \**********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
37685/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
37686
37687"use strict";
37688__webpack_require__.r(__webpack_exports__);
37689/* harmony export */ __webpack_require__.d(__webpack_exports__, {
37690/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
37691/* harmony export */ });
37692/* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! !../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js */ "./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js");
37693/* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__);
37694/* harmony import */ var _node_modules_laravel_mix_node_modules_css_loader_dist_cjs_js_clonedRuleSet_12_use_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_dist_cjs_js_clonedRuleSet_12_use_2_node_modules_sass_loader_dist_cjs_js_clonedRuleSet_12_use_3_node_modules_vue_loader_lib_index_js_vue_loader_options_NewsList_vue_vue_type_style_index_0_id_b8a09a08_scoped_true_lang_scss__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! !!../../../node_modules/laravel-mix/node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!../../../node_modules/sass-loader/dist/cjs.js??clonedRuleSet-12.use[3]!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./NewsList.vue?vue&type=style&index=0&id=b8a09a08&scoped=true&lang=scss */ "./node_modules/laravel-mix/node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-12.use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/NewsList.vue?vue&type=style&index=0&id=b8a09a08&scoped=true&lang=scss");
37695
37696            
37697
37698var options = {};
37699
37700options.insert = "head";
37701options.singleton = false;
37702
37703var update = _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default()(_node_modules_laravel_mix_node_modules_css_loader_dist_cjs_js_clonedRuleSet_12_use_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_dist_cjs_js_clonedRuleSet_12_use_2_node_modules_sass_loader_dist_cjs_js_clonedRuleSet_12_use_3_node_modules_vue_loader_lib_index_js_vue_loader_options_NewsList_vue_vue_type_style_index_0_id_b8a09a08_scoped_true_lang_scss__WEBPACK_IMPORTED_MODULE_1__["default"], options);
37704
37705
37706
37707/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_laravel_mix_node_modules_css_loader_dist_cjs_js_clonedRuleSet_12_use_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_dist_cjs_js_clonedRuleSet_12_use_2_node_modules_sass_loader_dist_cjs_js_clonedRuleSet_12_use_3_node_modules_vue_loader_lib_index_js_vue_loader_options_NewsList_vue_vue_type_style_index_0_id_b8a09a08_scoped_true_lang_scss__WEBPACK_IMPORTED_MODULE_1__["default"].locals || {});
37708
37709/***/ }),
37710
37711/***/ "./node_modules/style-loader/dist/cjs.js!./node_modules/laravel-mix/node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-12.use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/gallery/Albums.vue?vue&type=style&index=0&id=52e77a42&scoped=true&lang=scss":
37712/*!*****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
37713  !*** ./node_modules/style-loader/dist/cjs.js!./node_modules/laravel-mix/node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-12.use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/gallery/Albums.vue?vue&type=style&index=0&id=52e77a42&scoped=true&lang=scss ***!
37714  \*****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
37715/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
37716
37717"use strict";
37718__webpack_require__.r(__webpack_exports__);
37719/* harmony export */ __webpack_require__.d(__webpack_exports__, {
37720/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
37721/* harmony export */ });
37722/* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! !../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js */ "./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js");
37723/* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__);
37724/* harmony import */ var _node_modules_laravel_mix_node_modules_css_loader_dist_cjs_js_clonedRuleSet_12_use_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_dist_cjs_js_clonedRuleSet_12_use_2_node_modules_sass_loader_dist_cjs_js_clonedRuleSet_12_use_3_node_modules_vue_loader_lib_index_js_vue_loader_options_Albums_vue_vue_type_style_index_0_id_52e77a42_scoped_true_lang_scss__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! !!../../../node_modules/laravel-mix/node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!../../../node_modules/sass-loader/dist/cjs.js??clonedRuleSet-12.use[3]!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Albums.vue?vue&type=style&index=0&id=52e77a42&scoped=true&lang=scss */ "./node_modules/laravel-mix/node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-12.use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/gallery/Albums.vue?vue&type=style&index=0&id=52e77a42&scoped=true&lang=scss");
37725
37726            
37727
37728var options = {};
37729
37730options.insert = "head";
37731options.singleton = false;
37732
37733var update = _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default()(_node_modules_laravel_mix_node_modules_css_loader_dist_cjs_js_clonedRuleSet_12_use_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_dist_cjs_js_clonedRuleSet_12_use_2_node_modules_sass_loader_dist_cjs_js_clonedRuleSet_12_use_3_node_modules_vue_loader_lib_index_js_vue_loader_options_Albums_vue_vue_type_style_index_0_id_52e77a42_scoped_true_lang_scss__WEBPACK_IMPORTED_MODULE_1__["default"], options);
37734
37735
37736
37737/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_laravel_mix_node_modules_css_loader_dist_cjs_js_clonedRuleSet_12_use_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_dist_cjs_js_clonedRuleSet_12_use_2_node_modules_sass_loader_dist_cjs_js_clonedRuleSet_12_use_3_node_modules_vue_loader_lib_index_js_vue_loader_options_Albums_vue_vue_type_style_index_0_id_52e77a42_scoped_true_lang_scss__WEBPACK_IMPORTED_MODULE_1__["default"].locals || {});
37738
37739/***/ }),
37740
37741/***/ "./node_modules/style-loader/dist/cjs.js!./node_modules/laravel-mix/node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-12.use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/gallery/FrontendAlbums.vue?vue&type=style&index=0&id=6feaa8de&scoped=true&lang=scss":
37742/*!*************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
37743  !*** ./node_modules/style-loader/dist/cjs.js!./node_modules/laravel-mix/node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-12.use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/gallery/FrontendAlbums.vue?vue&type=style&index=0&id=6feaa8de&scoped=true&lang=scss ***!
37744  \*************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
37745/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
37746
37747"use strict";
37748__webpack_require__.r(__webpack_exports__);
37749/* harmony export */ __webpack_require__.d(__webpack_exports__, {
37750/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
37751/* harmony export */ });
37752/* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! !../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js */ "./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js");
37753/* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__);
37754/* harmony import */ var _node_modules_laravel_mix_node_modules_css_loader_dist_cjs_js_clonedRuleSet_12_use_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_dist_cjs_js_clonedRuleSet_12_use_2_node_modules_sass_loader_dist_cjs_js_clonedRuleSet_12_use_3_node_modules_vue_loader_lib_index_js_vue_loader_options_FrontendAlbums_vue_vue_type_style_index_0_id_6feaa8de_scoped_true_lang_scss__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! !!../../../node_modules/laravel-mix/node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!../../../node_modules/sass-loader/dist/cjs.js??clonedRuleSet-12.use[3]!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FrontendAlbums.vue?vue&type=style&index=0&id=6feaa8de&scoped=true&lang=scss */ "./node_modules/laravel-mix/node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-12.use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/gallery/FrontendAlbums.vue?vue&type=style&index=0&id=6feaa8de&scoped=true&lang=scss");
37755
37756            
37757
37758var options = {};
37759
37760options.insert = "head";
37761options.singleton = false;
37762
37763var update = _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default()(_node_modules_laravel_mix_node_modules_css_loader_dist_cjs_js_clonedRuleSet_12_use_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_dist_cjs_js_clonedRuleSet_12_use_2_node_modules_sass_loader_dist_cjs_js_clonedRuleSet_12_use_3_node_modules_vue_loader_lib_index_js_vue_loader_options_FrontendAlbums_vue_vue_type_style_index_0_id_6feaa8de_scoped_true_lang_scss__WEBPACK_IMPORTED_MODULE_1__["default"], options);
37764
37765
37766
37767/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_laravel_mix_node_modules_css_loader_dist_cjs_js_clonedRuleSet_12_use_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_dist_cjs_js_clonedRuleSet_12_use_2_node_modules_sass_loader_dist_cjs_js_clonedRuleSet_12_use_3_node_modules_vue_loader_lib_index_js_vue_loader_options_FrontendAlbums_vue_vue_type_style_index_0_id_6feaa8de_scoped_true_lang_scss__WEBPACK_IMPORTED_MODULE_1__["default"].locals || {});
37768
37769/***/ }),
37770
37771/***/ "./node_modules/style-loader/dist/cjs.js!./node_modules/laravel-mix/node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-12.use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/gallery/Uploader.vue?vue&type=style&index=0&id=6e95a0ae&scoped=true&lang=scss":
37772/*!*******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
37773  !*** ./node_modules/style-loader/dist/cjs.js!./node_modules/laravel-mix/node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-12.use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/gallery/Uploader.vue?vue&type=style&index=0&id=6e95a0ae&scoped=true&lang=scss ***!
37774  \*******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
37775/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
37776
37777"use strict";
37778__webpack_require__.r(__webpack_exports__);
37779/* harmony export */ __webpack_require__.d(__webpack_exports__, {
37780/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
37781/* harmony export */ });
37782/* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! !../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js */ "./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js");
37783/* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__);
37784/* harmony import */ var _node_modules_laravel_mix_node_modules_css_loader_dist_cjs_js_clonedRuleSet_12_use_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_dist_cjs_js_clonedRuleSet_12_use_2_node_modules_sass_loader_dist_cjs_js_clonedRuleSet_12_use_3_node_modules_vue_loader_lib_index_js_vue_loader_options_Uploader_vue_vue_type_style_index_0_id_6e95a0ae_scoped_true_lang_scss__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! !!../../../node_modules/laravel-mix/node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!../../../node_modules/sass-loader/dist/cjs.js??clonedRuleSet-12.use[3]!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Uploader.vue?vue&type=style&index=0&id=6e95a0ae&scoped=true&lang=scss */ "./node_modules/laravel-mix/node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-12.use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/gallery/Uploader.vue?vue&type=style&index=0&id=6e95a0ae&scoped=true&lang=scss");
37785
37786            
37787
37788var options = {};
37789
37790options.insert = "head";
37791options.singleton = false;
37792
37793var update = _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default()(_node_modules_laravel_mix_node_modules_css_loader_dist_cjs_js_clonedRuleSet_12_use_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_dist_cjs_js_clonedRuleSet_12_use_2_node_modules_sass_loader_dist_cjs_js_clonedRuleSet_12_use_3_node_modules_vue_loader_lib_index_js_vue_loader_options_Uploader_vue_vue_type_style_index_0_id_6e95a0ae_scoped_true_lang_scss__WEBPACK_IMPORTED_MODULE_1__["default"], options);
37794
37795
37796
37797/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_laravel_mix_node_modules_css_loader_dist_cjs_js_clonedRuleSet_12_use_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_dist_cjs_js_clonedRuleSet_12_use_2_node_modules_sass_loader_dist_cjs_js_clonedRuleSet_12_use_3_node_modules_vue_loader_lib_index_js_vue_loader_options_Uploader_vue_vue_type_style_index_0_id_6e95a0ae_scoped_true_lang_scss__WEBPACK_IMPORTED_MODULE_1__["default"].locals || {});
37798
37799/***/ }),
37800
37801/***/ "./node_modules/style-loader/dist/cjs.js!./node_modules/laravel-mix/node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-12.use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/gallery/ViewAlbum.vue?vue&type=style&index=0&id=923d41c2&scoped=true&lang=scss":
37802/*!********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
37803  !*** ./node_modules/style-loader/dist/cjs.js!./node_modules/laravel-mix/node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-12.use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/gallery/ViewAlbum.vue?vue&type=style&index=0&id=923d41c2&scoped=true&lang=scss ***!
37804  \********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
37805/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
37806
37807"use strict";
37808__webpack_require__.r(__webpack_exports__);
37809/* harmony export */ __webpack_require__.d(__webpack_exports__, {
37810/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
37811/* harmony export */ });
37812/* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! !../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js */ "./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js");
37813/* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__);
37814/* harmony import */ var _node_modules_laravel_mix_node_modules_css_loader_dist_cjs_js_clonedRuleSet_12_use_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_dist_cjs_js_clonedRuleSet_12_use_2_node_modules_sass_loader_dist_cjs_js_clonedRuleSet_12_use_3_node_modules_vue_loader_lib_index_js_vue_loader_options_ViewAlbum_vue_vue_type_style_index_0_id_923d41c2_scoped_true_lang_scss__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! !!../../../node_modules/laravel-mix/node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!../../../node_modules/sass-loader/dist/cjs.js??clonedRuleSet-12.use[3]!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ViewAlbum.vue?vue&type=style&index=0&id=923d41c2&scoped=true&lang=scss */ "./node_modules/laravel-mix/node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-12.use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/gallery/ViewAlbum.vue?vue&type=style&index=0&id=923d41c2&scoped=true&lang=scss");
37815
37816            
37817
37818var options = {};
37819
37820options.insert = "head";
37821options.singleton = false;
37822
37823var update = _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default()(_node_modules_laravel_mix_node_modules_css_loader_dist_cjs_js_clonedRuleSet_12_use_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_dist_cjs_js_clonedRuleSet_12_use_2_node_modules_sass_loader_dist_cjs_js_clonedRuleSet_12_use_3_node_modules_vue_loader_lib_index_js_vue_loader_options_ViewAlbum_vue_vue_type_style_index_0_id_923d41c2_scoped_true_lang_scss__WEBPACK_IMPORTED_MODULE_1__["default"], options);
37824
37825
37826
37827/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_laravel_mix_node_modules_css_loader_dist_cjs_js_clonedRuleSet_12_use_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_dist_cjs_js_clonedRuleSet_12_use_2_node_modules_sass_loader_dist_cjs_js_clonedRuleSet_12_use_3_node_modules_vue_loader_lib_index_js_vue_loader_options_ViewAlbum_vue_vue_type_style_index_0_id_923d41c2_scoped_true_lang_scss__WEBPACK_IMPORTED_MODULE_1__["default"].locals || {});
37828
37829/***/ }),
37830
37831/***/ "./node_modules/style-loader/dist/cjs.js!./node_modules/laravel-mix/node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-12.use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/video/VideoGallery.vue?vue&type=style&index=0&id=05149dee&lang=scss&scoped=true":
37832/*!*********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
37833  !*** ./node_modules/style-loader/dist/cjs.js!./node_modules/laravel-mix/node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-12.use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/video/VideoGallery.vue?vue&type=style&index=0&id=05149dee&lang=scss&scoped=true ***!
37834  \*********************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
37835/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
37836
37837"use strict";
37838__webpack_require__.r(__webpack_exports__);
37839/* harmony export */ __webpack_require__.d(__webpack_exports__, {
37840/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
37841/* harmony export */ });
37842/* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! !../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js */ "./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js");
37843/* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__);
37844/* harmony import */ var _node_modules_laravel_mix_node_modules_css_loader_dist_cjs_js_clonedRuleSet_12_use_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_dist_cjs_js_clonedRuleSet_12_use_2_node_modules_sass_loader_dist_cjs_js_clonedRuleSet_12_use_3_node_modules_vue_loader_lib_index_js_vue_loader_options_VideoGallery_vue_vue_type_style_index_0_id_05149dee_lang_scss_scoped_true__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! !!../../../node_modules/laravel-mix/node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!../../../node_modules/sass-loader/dist/cjs.js??clonedRuleSet-12.use[3]!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./VideoGallery.vue?vue&type=style&index=0&id=05149dee&lang=scss&scoped=true */ "./node_modules/laravel-mix/node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-12.use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/video/VideoGallery.vue?vue&type=style&index=0&id=05149dee&lang=scss&scoped=true");
37845
37846            
37847
37848var options = {};
37849
37850options.insert = "head";
37851options.singleton = false;
37852
37853var update = _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default()(_node_modules_laravel_mix_node_modules_css_loader_dist_cjs_js_clonedRuleSet_12_use_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_dist_cjs_js_clonedRuleSet_12_use_2_node_modules_sass_loader_dist_cjs_js_clonedRuleSet_12_use_3_node_modules_vue_loader_lib_index_js_vue_loader_options_VideoGallery_vue_vue_type_style_index_0_id_05149dee_lang_scss_scoped_true__WEBPACK_IMPORTED_MODULE_1__["default"], options);
37854
37855
37856
37857/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_laravel_mix_node_modules_css_loader_dist_cjs_js_clonedRuleSet_12_use_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_dist_cjs_js_clonedRuleSet_12_use_2_node_modules_sass_loader_dist_cjs_js_clonedRuleSet_12_use_3_node_modules_vue_loader_lib_index_js_vue_loader_options_VideoGallery_vue_vue_type_style_index_0_id_05149dee_lang_scss_scoped_true__WEBPACK_IMPORTED_MODULE_1__["default"].locals || {});
37858
37859/***/ }),
37860
37861/***/ "./node_modules/style-loader/dist/cjs.js!./node_modules/laravel-mix/node_modules/css-loader/dist/cjs.js??clonedRuleSet-9.use[1]!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-9.use[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/SuchiForm.vue?vue&type=style&index=0&id=cd9393ea&scoped=true&lang=css":
37862/*!****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
37863  !*** ./node_modules/style-loader/dist/cjs.js!./node_modules/laravel-mix/node_modules/css-loader/dist/cjs.js??clonedRuleSet-9.use[1]!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-9.use[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/SuchiForm.vue?vue&type=style&index=0&id=cd9393ea&scoped=true&lang=css ***!
37864  \****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
37865/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
37866
37867"use strict";
37868__webpack_require__.r(__webpack_exports__);
37869/* harmony export */ __webpack_require__.d(__webpack_exports__, {
37870/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
37871/* harmony export */ });
37872/* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! !../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js */ "./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js");
37873/* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__);
37874/* harmony import */ var _node_modules_laravel_mix_node_modules_css_loader_dist_cjs_js_clonedRuleSet_9_use_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_dist_cjs_js_clonedRuleSet_9_use_2_node_modules_vue_loader_lib_index_js_vue_loader_options_SuchiForm_vue_vue_type_style_index_0_id_cd9393ea_scoped_true_lang_css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! !!../../../node_modules/laravel-mix/node_modules/css-loader/dist/cjs.js??clonedRuleSet-9.use[1]!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-9.use[2]!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SuchiForm.vue?vue&type=style&index=0&id=cd9393ea&scoped=true&lang=css */ "./node_modules/laravel-mix/node_modules/css-loader/dist/cjs.js??clonedRuleSet-9.use[1]!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-9.use[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/SuchiForm.vue?vue&type=style&index=0&id=cd9393ea&scoped=true&lang=css");
37875
37876            
37877
37878var options = {};
37879
37880options.insert = "head";
37881options.singleton = false;
37882
37883var update = _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default()(_node_modules_laravel_mix_node_modules_css_loader_dist_cjs_js_clonedRuleSet_9_use_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_dist_cjs_js_clonedRuleSet_9_use_2_node_modules_vue_loader_lib_index_js_vue_loader_options_SuchiForm_vue_vue_type_style_index_0_id_cd9393ea_scoped_true_lang_css__WEBPACK_IMPORTED_MODULE_1__["default"], options);
37884
37885
37886
37887/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_laravel_mix_node_modules_css_loader_dist_cjs_js_clonedRuleSet_9_use_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_dist_cjs_js_clonedRuleSet_9_use_2_node_modules_vue_loader_lib_index_js_vue_loader_options_SuchiForm_vue_vue_type_style_index_0_id_cd9393ea_scoped_true_lang_css__WEBPACK_IMPORTED_MODULE_1__["default"].locals || {});
37888
37889/***/ }),
37890
37891/***/ "./node_modules/style-loader/dist/cjs.js!./node_modules/laravel-mix/node_modules/css-loader/dist/cjs.js??clonedRuleSet-9.use[1]!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-9.use[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/TokenSearch.vue?vue&type=style&index=0&id=dc6d0134&scoped=true&lang=css":
37892/*!******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
37893  !*** ./node_modules/style-loader/dist/cjs.js!./node_modules/laravel-mix/node_modules/css-loader/dist/cjs.js??clonedRuleSet-9.use[1]!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-9.use[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/TokenSearch.vue?vue&type=style&index=0&id=dc6d0134&scoped=true&lang=css ***!
37894  \******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
37895/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
37896
37897"use strict";
37898__webpack_require__.r(__webpack_exports__);
37899/* harmony export */ __webpack_require__.d(__webpack_exports__, {
37900/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
37901/* harmony export */ });
37902/* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! !../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js */ "./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js");
37903/* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__);
37904/* harmony import */ var _node_modules_laravel_mix_node_modules_css_loader_dist_cjs_js_clonedRuleSet_9_use_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_dist_cjs_js_clonedRuleSet_9_use_2_node_modules_vue_loader_lib_index_js_vue_loader_options_TokenSearch_vue_vue_type_style_index_0_id_dc6d0134_scoped_true_lang_css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! !!../../../node_modules/laravel-mix/node_modules/css-loader/dist/cjs.js??clonedRuleSet-9.use[1]!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-9.use[2]!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TokenSearch.vue?vue&type=style&index=0&id=dc6d0134&scoped=true&lang=css */ "./node_modules/laravel-mix/node_modules/css-loader/dist/cjs.js??clonedRuleSet-9.use[1]!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-9.use[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/TokenSearch.vue?vue&type=style&index=0&id=dc6d0134&scoped=true&lang=css");
37905
37906            
37907
37908var options = {};
37909
37910options.insert = "head";
37911options.singleton = false;
37912
37913var update = _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default()(_node_modules_laravel_mix_node_modules_css_loader_dist_cjs_js_clonedRuleSet_9_use_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_dist_cjs_js_clonedRuleSet_9_use_2_node_modules_vue_loader_lib_index_js_vue_loader_options_TokenSearch_vue_vue_type_style_index_0_id_dc6d0134_scoped_true_lang_css__WEBPACK_IMPORTED_MODULE_1__["default"], options);
37914
37915
37916
37917/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_laravel_mix_node_modules_css_loader_dist_cjs_js_clonedRuleSet_9_use_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_dist_cjs_js_clonedRuleSet_9_use_2_node_modules_vue_loader_lib_index_js_vue_loader_options_TokenSearch_vue_vue_type_style_index_0_id_dc6d0134_scoped_true_lang_css__WEBPACK_IMPORTED_MODULE_1__["default"].locals || {});
37918
37919/***/ }),
37920
vendor: 7,200 bytes, lines 37921-38199
37921/***/ "./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js":
37922/*!****************************************************************************!*\
37923  !*** ./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js ***!
37924  \****************************************************************************/
37925/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
37926
37927"use strict";
37928
37929
37930var isOldIE = function isOldIE() {
37931  var memo;
37932  return function memorize() {
37933    if (typeof memo === 'undefined') {
37934      // Test for IE <= 9 as proposed by Browserhacks
37935      // @see http://browserhacks.com/#hack-e71d8692f65334173fee715c222cb805
37936      // Tests for existence of standard globals is to allow style-loader
37937      // to operate correctly into non-standard environments
37938      // @see https://github.com/webpack-contrib/style-loader/issues/177
37939      memo = Boolean(window && document && document.all && !window.atob);
37940    }
37941
37942    return memo;
37943  };
37944}();
37945
37946var getTarget = function getTarget() {
37947  var memo = {};
37948  return function memorize(target) {
37949    if (typeof memo[target] === 'undefined') {
37950      var styleTarget = document.querySelector(target); // Special case to return head of iframe instead of iframe itself
37951
37952      if (window.HTMLIFrameElement && styleTarget instanceof window.HTMLIFrameElement) {
37953        try {
37954          // This will throw an exception if access to iframe is blocked
37955          // due to cross-origin restrictions
37956          styleTarget = styleTarget.contentDocument.head;
37957        } catch (e) {
37958          // istanbul ignore next
37959          styleTarget = null;
37960        }
37961      }
37962
37963      memo[target] = styleTarget;
37964    }
37965
37966    return memo[target];
37967  };
37968}();
37969
37970var stylesInDom = [];
37971
37972function getIndexByIdentifier(identifier) {
37973  var result = -1;
37974
37975  for (var i = 0; i < stylesInDom.length; i++) {
37976    if (stylesInDom[i].identifier === identifier) {
37977      result = i;
37978      break;
37979    }
37980  }
37981
37982  return result;
37983}
37984
37985function modulesToDom(list, options) {
37986  var idCountMap = {};
37987  var identifiers = [];
37988
37989  for (var i = 0; i < list.length; i++) {
37990    var item = list[i];
37991    var id = options.base ? item[0] + options.base : item[0];
37992    var count = idCountMap[id] || 0;
37993    var identifier = "".concat(id, " ").concat(count);
37994    idCountMap[id] = count + 1;
37995    var index = getIndexByIdentifier(identifier);
37996    var obj = {
37997      css: item[1],
37998      media: item[2],
37999      sourceMap: item[3]
38000    };
38001
38002    if (index !== -1) {
38003      stylesInDom[index].references++;
38004      stylesInDom[index].updater(obj);
38005    } else {
38006      stylesInDom.push({
38007        identifier: identifier,
38008        updater: addStyle(obj, options),
38009        references: 1
38010      });
38011    }
38012
38013    identifiers.push(identifier);
38014  }
38015
38016  return identifiers;
38017}
38018
38019function insertStyleElement(options) {
38020  var style = document.createElement('style');
38021  var attributes = options.attributes || {};
38022
38023  if (typeof attributes.nonce === 'undefined') {
38024    var nonce =  true ? __webpack_require__.nc : 0;
38025
38026    if (nonce) {
38027      attributes.nonce = nonce;
38028    }
38029  }
38030
38031  Object.keys(attributes).forEach(function (key) {
38032    style.setAttribute(key, attributes[key]);
38033  });
38034
38035  if (typeof options.insert === 'function') {
38036    options.insert(style);
38037  } else {
38038    var target = getTarget(options.insert || 'head');
38039
38040    if (!target) {
38041      throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");
38042    }
38043
38044    target.appendChild(style);
38045  }
38046
38047  return style;
38048}
38049
38050function removeStyleElement(style) {
38051  // istanbul ignore if
38052  if (style.parentNode === null) {
38053    return false;
38054  }
38055
38056  style.parentNode.removeChild(style);
38057}
38058/* istanbul ignore next  */
38059
38060
38061var replaceText = function replaceText() {
38062  var textStore = [];
38063  return function replace(index, replacement) {
38064    textStore[index] = replacement;
38065    return textStore.filter(Boolean).join('\n');
38066  };
38067}();
38068
38069function applyToSingletonTag(style, index, remove, obj) {
38070  var css = remove ? '' : obj.media ? "@media ".concat(obj.media, " {").concat(obj.css, "}") : obj.css; // For old IE
38071
38072  /* istanbul ignore if  */
38073
38074  if (style.styleSheet) {
38075    style.styleSheet.cssText = replaceText(index, css);
38076  } else {
38077    var cssNode = document.createTextNode(css);
38078    var childNodes = style.childNodes;
38079
38080    if (childNodes[index]) {
38081      style.removeChild(childNodes[index]);
38082    }
38083
38084    if (childNodes.length) {
38085      style.insertBefore(cssNode, childNodes[index]);
38086    } else {
38087      style.appendChild(cssNode);
38088    }
38089  }
38090}
38091
38092function applyToTag(style, options, obj) {
38093  var css = obj.css;
38094  var media = obj.media;
38095  var sourceMap = obj.sourceMap;
38096
38097  if (media) {
38098    style.setAttribute('media', media);
38099  } else {
38100    style.removeAttribute('media');
38101  }
38102
38103  if (sourceMap && typeof btoa !== 'undefined') {
38104    css += "\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))), " */");
38105  } // For old IE
38106
38107  /* istanbul ignore if  */
38108
38109
38110  if (style.styleSheet) {
38111    style.styleSheet.cssText = css;
38112  } else {
38113    while (style.firstChild) {
38114      style.removeChild(style.firstChild);
38115    }
38116
38117    style.appendChild(document.createTextNode(css));
38118  }
38119}
38120
38121var singleton = null;
38122var singletonCounter = 0;
38123
38124function addStyle(obj, options) {
38125  var style;
38126  var update;
38127  var remove;
38128
38129  if (options.singleton) {
38130    var styleIndex = singletonCounter++;
38131    style = singleton || (singleton = insertStyleElement(options));
38132    update = applyToSingletonTag.bind(null, style, styleIndex, false);
38133    remove = applyToSingletonTag.bind(null, style, styleIndex, true);
38134  } else {
38135    style = insertStyleElement(options);
38136    update = applyToTag.bind(null, style, options);
38137
38138    remove = function remove() {
38139      removeStyleElement(style);
38140    };
38141  }
38142
38143  update(obj);
38144  return function updateStyle(newObj) {
38145    if (newObj) {
38146      if (newObj.css === obj.css && newObj.media === obj.media && newObj.sourceMap === obj.sourceMap) {
38147        return;
38148      }
38149
38150      update(obj = newObj);
38151    } else {
38152      remove();
38153    }
38154  };
38155}
38156
38157module.exports = function (list, options) {
38158  options = options || {}; // Force single-tag solution on IE6-9, which has a hard limit on the # of <style>
38159  // tags it will allow on a page
38160
38161  if (!options.singleton && typeof options.singleton !== 'boolean') {
38162    options.singleton = isOldIE();
38163  }
38164
38165  list = list || [];
38166  var lastIdentifiers = modulesToDom(list, options);
38167  return function update(newList) {
38168    newList = newList || [];
38169
38170    if (Object.prototype.toString.call(newList) !== '[object Array]') {
38171      return;
38172    }
38173
38174    for (var i = 0; i < lastIdentifiers.length; i++) {
38175      var identifier = lastIdentifiers[i];
38176      var index = getIndexByIdentifier(identifier);
38177      stylesInDom[index].references--;
38178    }
38179
38180    var newLastIdentifiers = modulesToDom(newList, options);
38181
38182    for (var _i = 0; _i < lastIdentifiers.length; _i++) {
38183      var _identifier = lastIdentifiers[_i];
38184
38185      var _index = getIndexByIdentifier(_identifier);
38186
38187      if (stylesInDom[_index].references === 0) {
38188        stylesInDom[_index].updater();
38189
38190        stylesInDom.splice(_index, 1);
38191      }
38192    }
38193
38194    lastIdentifiers = newLastIdentifiers;
38195  };
38196};
38197
38198/***/ }),
38199
vendor: 2,317 bytes, lines 38200-38229
38200/***/ "./node_modules/sweetalert2/dist/sweetalert2.min.css":
38201/*!***********************************************************!*\
38202  !*** ./node_modules/sweetalert2/dist/sweetalert2.min.css ***!
38203  \***********************************************************/
38204/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
38205
38206"use strict";
38207__webpack_require__.r(__webpack_exports__);
38208/* harmony export */ __webpack_require__.d(__webpack_exports__, {
38209/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
38210/* harmony export */ });
38211/* harmony import */ var _style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! !../../style-loader/dist/runtime/injectStylesIntoStyleTag.js */ "./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js");
38212/* harmony import */ var _style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__);
38213/* harmony import */ var _laravel_mix_node_modules_css_loader_dist_cjs_js_clonedRuleSet_9_use_1_postcss_loader_dist_cjs_js_clonedRuleSet_9_use_2_sweetalert2_min_css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! !!../../laravel-mix/node_modules/css-loader/dist/cjs.js??clonedRuleSet-9.use[1]!../../postcss-loader/dist/cjs.js??clonedRuleSet-9.use[2]!./sweetalert2.min.css */ "./node_modules/laravel-mix/node_modules/css-loader/dist/cjs.js??clonedRuleSet-9.use[1]!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-9.use[2]!./node_modules/sweetalert2/dist/sweetalert2.min.css");
38214
38215            
38216
38217var options = {};
38218
38219options.insert = "head";
38220options.singleton = false;
38221
38222var update = _style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default()(_laravel_mix_node_modules_css_loader_dist_cjs_js_clonedRuleSet_9_use_1_postcss_loader_dist_cjs_js_clonedRuleSet_9_use_2_sweetalert2_min_css__WEBPACK_IMPORTED_MODULE_1__["default"], options);
38223
38224
38225
38226/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_laravel_mix_node_modules_css_loader_dist_cjs_js_clonedRuleSet_9_use_1_postcss_loader_dist_cjs_js_clonedRuleSet_9_use_2_sweetalert2_min_css__WEBPACK_IMPORTED_MODULE_1__["default"].locals || {});
38227
38228/***/ }),
38229
vendor: 64,197 bytes, lines 38230-40118
38230/***/ "./node_modules/vue-cool-lightbox/dist/vue-cool-lightbox.esm.js":
38231/*!**********************************************************************!*\
38232  !*** ./node_modules/vue-cool-lightbox/dist/vue-cool-lightbox.esm.js ***!
38233  \**********************************************************************/
38234/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
38235
38236"use strict";
38237__webpack_require__.r(__webpack_exports__);
38238/* harmony export */ __webpack_require__.d(__webpack_exports__, {
38239/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
38240/* harmony export */ });
38241/* harmony import */ var body_scroll_lock__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! body-scroll-lock */ "./node_modules/body-scroll-lock/lib/bodyScrollLock.esm.js");
38242
38243
38244var attributes = ['media', 'srcset', 'sizes', 'src'];
38245
38246var LazyLoadDirective = {
38247  inserted: function (el) {
38248
38249    function loadImage() {
38250      var imageElement = findChild(el, 'img');
38251      var pictureElement = findChild(el, 'picture');
38252      if (imageElement) {
38253        setLoadListeners(imageElement);
38254        swapAttributes(imageElement);
38255      } else if (pictureElement) {
38256        var pictureImg = findChild(pictureElement, 'img');
38257        var pictureSources = Array.from(pictureElement.children).filter(
38258            function (child) { return child.nodeName === "SOURCE"; }
38259        );
38260        if (pictureImg) {
38261          setLoadListeners(pictureImg);
38262          if (pictureSources.length) {
38263            pictureSources.forEach(function (source) {
38264              swapAttributes(source);
38265            });
38266          }
38267          swapAttributes(pictureImg);
38268        }
38269      }
38270    }
38271
38272    function handleIntersect(entries, observer) {
38273      entries.forEach(function (entry) {
38274        if (entry.isIntersecting) {
38275          loadImage();
38276          observer.unobserve(el);
38277        }
38278      });
38279    }
38280
38281    function createObserver() {
38282      var options = {
38283        root: null,
38284        threshold: "0"
38285      };
38286      var observer = new IntersectionObserver(handleIntersect, options);
38287      observer.observe(el);
38288    }
38289    if (window["IntersectionObserver"]) {
38290      createObserver();
38291    } else {
38292      loadImage();
38293    }
38294  }
38295};
38296
38297function swapAttributes(el) {
38298  attributes.forEach(function (attribute) {
38299    var dataAttribute = el.dataset[attribute];
38300    if (dataAttribute) {
38301      el[attribute] = dataAttribute;
38302      el.removeAttribute(("data-" + attribute));
38303    }
38304  });
38305}
38306
38307function setLoadListeners(el) {
38308  el.addEventListener("load", function () {
38309    setTimeout(function () { return el.classList.add("loaded"); }, 100);
38310  });
38311  el.addEventListener("error", function () { return console.log("error"); });
38312}
38313
38314function findChild(parent, nodeName) {
38315  return Array.from(parent.children).find(
38316      function (el) { return el.nodeName === nodeName.toUpperCase(); }
38317  );
38318}
38319
38320var AutoplayObserver = {
38321    inserted: function (el) {
38322      // getYoutube ID
38323      function isYoutubeVideo(url) {
38324
38325        // youtube data
38326        var youtubeRegex = /^(?:https?:\/\/)?(?:www\.)?(?:youtu\.be\/|youtube\.com\/(?:embed\/|v\/|watch\?v=|watch\?.+&v=))((\w|-){11})(?:\S+)?$/;
38327        var ytId = (url.match(youtubeRegex)) ? RegExp.$1 : false;
38328
38329        if(ytId) {
38330          return true;
38331        }
38332
38333        return false;
38334      }
38335
38336      function autoplayVideo() {
38337        var tagName = el.tagName;
38338        var autoplay = el.dataset.autoplay; 
38339        if(autoplay) {
38340          if(tagName === 'VIDEO') {
38341            el.muted = true;
38342            el.autoplay = true;
38343
38344            return;
38345          }
38346
38347          if(tagName === 'IFRAME') {
38348            var url = new URL(el.src);
38349            var muted = 'muted';
38350
38351            if(isYoutubeVideo(el.src)) {
38352              muted = 'mute';
38353            }
38354
38355            // append autoplay
38356            url.searchParams.append(muted, 1);
38357            url.searchParams.append('autoplay', 1);
38358
38359            el.src = url.href;
38360          }
38361        }
38362      }
38363  
38364      function handleIntersect(entries, observer) {
38365        entries.forEach(function (entry) {
38366          if (entry.isIntersecting) {
38367            autoplayVideo();
38368            observer.unobserve(el);
38369          }
38370        });
38371      }
38372  
38373      function createObserver() {
38374        var options = {
38375          root: null,
38376          threshold: "0"
38377        };
38378        var observer = new IntersectionObserver(handleIntersect, options);
38379        observer.observe(el);
38380      }
38381      if (window["IntersectionObserver"]) {
38382        createObserver();
38383      } else {
38384        loadImage();
38385      }
38386    }
38387  };
38388
38389//
38390
38391var script = {
38392  directives: {
38393    lazyload: LazyLoadDirective,
38394    autoplayObserver: AutoplayObserver,
38395  },
38396
38397  data: function data() {
38398    return {
38399      // swipe data
38400      initialMouseX: 0,
38401      initialMouseY: 0,
38402      endMouseX: 0,
38403      endMouseY: 0,
38404      swipeType: null,
38405      IsSwipping: false,
38406      isDraggingSwipe: false,
38407
38408      // use for mouse wheel
38409      prevTime: 0,
38410
38411      // swipe effect
38412      xSwipeWrapper: 0,
38413      ySwipeWrapper: 0,
38414      swipeAnimation: null,
38415      swipeInterval: null,
38416      lightboxInnerWidth: null,
38417
38418      // styles data
38419      imgIndex: this.index,
38420      isVisible: false,
38421      paddingBottom: false,
38422      imageLoading: false,
38423      showThumbs: false,
38424      isFullScreenMode: false,
38425
38426      // aspect ratio videos
38427      aspectRatioVideo: {
38428        width: 'auto',
38429        height: 'auto',
38430      },
38431
38432      // props to bind styles
38433      buttonsVisible: true,
38434      scale: 1,
38435      top: 0,
38436      left: 0,
38437      lastX: 0,
38438      lastY: 0,
38439      isDraging: false,
38440      canZoom: true,
38441      isZooming: false,
38442      transition: 'all .3s ease',
38443      zoomBar: 0,
38444
38445      // slideshow playing data
38446      isPlayingSlideShow: false,
38447      intervalProgress: null,
38448      loopData: false,
38449      stylesInterval: {
38450        'display': 'block'
38451      }
38452    }
38453  },
38454
38455  props: {
38456    index: {
38457      required: true
38458    },
38459
38460    effect: {
38461      type: String,
38462      default: 'swipe'
38463    },
38464
38465    items: {
38466      type: Array,
38467      required: true,
38468    },
38469
38470    loop: {
38471      type: Boolean,
38472      default: true,
38473    },
38474
38475    slideshow: {
38476      type: Boolean,
38477      default: true,
38478    },
38479
38480    slideshowColorBar: {
38481      type: String,
38482      default: '#fa4242',
38483    },
38484
38485    slideshowDuration: {
38486      type: Number,
38487      default: 3000,
38488    },
38489
38490    useZoomBar: {
38491      type: Boolean,
38492      default: false,
38493    },
38494
38495    closeOnClickOutsideMobile: {
38496      type: Boolean,
38497      default: false,
38498    },
38499
38500    srcName: {
38501      type: String,
38502      default: 'src',
38503    },
38504
38505    srcSetName: {
38506      type: String,
38507      default: 'srcset'
38508    },
38509
38510    srcThumb: {
38511      type: String,
38512      default: 'thumb',
38513    },
38514
38515    srcMediaType: {
38516      type: String,
38517      default: 'mediaType',
38518    },
38519
38520    overlayColor: {
38521      type: String,
38522      default: 'rgba(30, 30, 30, .9)'
38523    },
38524
38525    zIndex: {
38526      type: Number,
38527      default: 9999,
38528    },
38529
38530    gallery: {
38531      type: Boolean,
38532      default: true,
38533    },
38534
38535    fullScreen: {
38536      type: Boolean,
38537      default: false,
38538    },
38539
38540    thumbsPosition: {
38541      type: String,
38542      default: 'right',
38543    },
38544
38545    youtubeCookies: {
38546      type: Boolean,
38547      default: true,
38548    },
38549
38550    enableWheelEvent: {
38551      type: Boolean,
38552      default: false,
38553    },
38554
38555    showCloseButton: {
38556      type: Boolean,
38557      default: true,
38558    },
38559
38560    disableZoom: {
38561      type: Boolean,
38562      default: false,
38563    },
38564
38565    dir: {
38566      type: String,
38567      default: 'ltr',
38568    },
38569
38570    enableScrollLock: {
38571      type: Boolean,
38572      default: true,
38573    },
38574    translations: {
38575      type: Object,
38576      default: function default$1() {
38577        return {
38578          previous: 'Previous',
38579          next: 'Next',
38580          showThumbNails: 'Show thumbnails',
38581          playSlideShow: 'Play slideshow',
38582          fullScreen: 'Fullscreen',
38583          close: 'Close',
38584        }
38585      }
38586    }
38587  },
38588
38589  watch: {
38590    zoomBar: function zoomBar(newVal, prevVal) {
38591      var item;
38592      if(this.isZooming) {
38593        if(this.effect == 'swipe') {
38594          item = this.$refs.items[this.imgIndex].childNodes[0];
38595        } else {
38596          item = this.$refs.items.childNodes[0];
38597        }
38598
38599        var newZoom = 1.6 + newVal/10;
38600        item.style.transform  = 'translate3d(calc(-50% + '+this.left+'px), calc(-50% + '+this.top+'px), 0px) scale3d('+newZoom+', '+newZoom+', '+newZoom+')';
38601      }
38602    },
38603
38604    showThumbs: function showThumbs(prev, val) {
38605      var widthGalleryBlock = 212;
38606      var swipeAnimation = 'all .3s ease';
38607      if(window.innerWidth < 767) {
38608        widthGalleryBlock = 102;
38609        swipeAnimation = null;
38610      }
38611
38612      if (this.thumbsPosition === 'bottom') {
38613        widthGalleryBlock = 0;
38614      }
38615
38616      var self = this;
38617      this.swipeAnimation = swipeAnimation;
38618
38619      if(prev) {
38620
38621        if(this.dir === 'rtl') {
38622          this.xSwipeWrapper = this.imgIndex*(window.innerWidth - widthGalleryBlock) + 30*this.imgIndex;
38623        } else {
38624          this.xSwipeWrapper = -this.imgIndex*(window.innerWidth - widthGalleryBlock) - 30*this.imgIndex;
38625        }
38626
38627      } else {
38628
38629        if(this.dir === 'rtl') {
38630          this.xSwipeWrapper = this.imgIndex*window.innerWidth + 30*this.imgIndex;
38631        } else {
38632          this.xSwipeWrapper = -this.imgIndex*window.innerWidth - 30*this.imgIndex;
38633        }
38634
38635      }
38636
38637      setTimeout(function() {
38638        self.swipeAnimation = null;
38639      }, 300);
38640    },
38641
38642    index: function index(prev, val) {
38643      var self = this;
38644
38645      // body scroll lock
38646      var $body = document.querySelector('body');
38647
38648      if(prev !== null) {
38649
38650        // swipe type
38651        this.swipeType = null;
38652        this.initialMouseY = 0;
38653        this.ySwipeWrapper = 0;
38654
38655        // set loop from data
38656        this.loopData = this.loop;
38657
38658        // swipe effect case remove loop
38659        if(this.effect === 'swipe') {
38660          this.loopData = false;
38661          window.addEventListener('resize', this.xPositionOnResize);
38662        }
38663
38664        // add img index
38665        this.imgIndex = prev;
38666        this.isVisible = true;
38667
38668        // add events listener
38669        window.addEventListener('keydown', this.eventListener);
38670
38671        // add wheel event
38672        if(this.enableWheelEvent) {
38673          window.addEventListener('wheel', this.wheelEvent);
38674        }
38675        
38676        // add click event
38677        setTimeout(function() {
38678          window.addEventListener('click', self.showButtons);
38679        }, 200);
38680
38681        if (this.enableScrollLock) {
38682          setTimeout(function() {
38683            self.setCompensateForScrollbar();
38684            (0,body_scroll_lock__WEBPACK_IMPORTED_MODULE_0__.disableBodyScroll)(self.$refs.coolLightbox);
38685          }, 50);
38686        }
38687
38688      } else {
38689
38690        // hide and stop slideshow
38691        this.isVisible = false;
38692        this.stopSlideShow();
38693
38694        // set starts X to 0
38695        this.startsX = 0;
38696        this.initialMouseY = 0;
38697        this.swipeType = null;
38698
38699        // clear interval
38700        clearInterval(this.swipeInterval);
38701        this.swipeAnimation = null;
38702
38703        // finish swipe
38704        this.isDraggingSwipe = false;
38705        this.isZooming = true;
38706
38707        // remove events listener
38708        window.removeEventListener('keydown', this.eventListener);
38709
38710        if (this.enableScrollLock) {
38711          self.removeCompensateForScrollbar();
38712          (0,body_scroll_lock__WEBPACK_IMPORTED_MODULE_0__.enableBodyScroll)(self.$refs.coolLightbox);
38713        }
38714
38715        // remove click event
38716        window.removeEventListener('click', this.showButtons);
38717
38718        // remove resize event
38719        window.removeEventListener('resize', this.xPositionOnResize);
38720
38721        // remove wheel event
38722        if(this.enableWheelEvent) {
38723          window.removeEventListener('wheel', this.wheelEvent);
38724        }
38725      }
38726
38727    },
38728
38729    imgIndex: function imgIndex(prev, val) {
38730      var this$1 = this;
38731
38732      // when animation is loaded
38733      this.$nextTick(function () {
38734
38735        if(this$1.effect === 'swipe') {
38736          this$1.setLightboxInnerWidth();
38737          this$1.setXPosition(prev);
38738        }
38739
38740        if(prev !== null & val === null) {
38741          this$1.$emit('on-open', prev);
38742        }
38743
38744        if(prev !== null) {
38745          if(prev !== val) {
38746            if(!this$1.getYoutubeUrl(this$1.getItemSrc(prev)) && !this$1.getVimeoUrl(this$1.getItemSrc(prev))) {
38747              this$1.stopVideos();
38748            }
38749          }
38750
38751          // if is an image change imageLoading to true
38752          if(!this$1.getVideoUrl(this$1.getItemSrc(prev))) {
38753            if(!this$1.is_cached(this$1.getItemSrc(prev))) {
38754              this$1.imageLoading = true;
38755            }
38756          }
38757
38758          // add caption padding to Lightbox wrapper
38759          this$1.addCaptionPadding();
38760
38761          // setAspectRatioVideo when is swipe
38762          if(this$1.effect === 'swipe') {
38763            this$1.setAspectRatioVideo();
38764          } else {
38765
38766            if(this$1.getVideoUrl(this$1.getItemSrc(prev))) {
38767              this$1.setAspectRatioVideo();
38768            }
38769          }
38770        }
38771
38772        // reset zoom
38773        this$1.resetZoom();
38774
38775        // reset swipe type
38776        this$1.swipeType = null;
38777        this$1.ySwipeWrapper = 0;
38778
38779      });
38780    },
38781  },
38782
38783  beforeDestroy: function beforeDestroy() {
38784    if (this.enableScrollLock) {
38785      this.removeCompensateForScrollbar();
38786      if(this.$refs.coolLightbox) {
38787        (0,body_scroll_lock__WEBPACK_IMPORTED_MODULE_0__.enableBodyScroll)(this.$refs.coolLightbox);
38788      }
38789    }
38790  },
38791
38792  methods: {
38793    getExtFromItem: function getExtFromItem(imgIndex) {
38794      if(imgIndex === null) {
38795        return false
38796      }
38797
38798      if(this.checkIfIsObject(imgIndex)) {
38799        var item = this.items[imgIndex];
38800
38801        //item extension is specified, so return it
38802        if (item['ext']) {
38803          return item['ext']
38804        }
38805
38806        return 'mp4'
38807      }
38808    },
38809
38810    stopVideos: function stopVideos() {
38811      var videos = document.getElementsByClassName('cool-lightbox-video');
38812      var isVideoPlaying = function (video) { return !!(video.currentTime > 0 && !video.paused && !video.ended && video.readyState > 2); };
38813      if(videos.length > 0) {
38814        Array.prototype.forEach.call(videos, function (video) {
38815          var type = video.tagName;
38816
38817          if(type === 'IFRAME') {
38818            var iframeSrc = video.src;
38819            return video.src = iframeSrc
38820          }
38821
38822          if(isVideoPlaying(video)) {
38823            return video.pause()
38824          }
38825
38826        });
38827      }
38828    },
38829
38830    removeCompensateForScrollbar: function removeCompensateForScrollbar() {
38831      document.body.classList.remove('compensate-for-scrollbar');
38832      var noscrollStyle = document.getElementById('coollightbox-style-noscroll');
38833      if(noscrollStyle !== null) {
38834        document.getElementById('coollightbox-style-noscroll').remove();
38835      }
38836    },
38837
38838    setCompensateForScrollbar: function setCompensateForScrollbar() {
38839      var isMobile = /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);
38840
38841      if (
38842        !isMobile &&
38843        document.body.scrollHeight > window.innerHeight
38844      ) {
38845        document.getElementsByTagName('head')[0].insertAdjacentHTML('beforeend',
38846          '<style id="coollightbox-style-noscroll" type="text/css">.compensate-for-scrollbar{margin-right:' +
38847            (window.innerWidth - document.documentElement.clientWidth) +
38848          'px;}</style>'
38849        );
38850
38851        document.body.classList.add('compensate-for-scrollbar');
38852      }
38853    },
38854
38855    setAutoplay: function setAutoplay(itemIndex) {
38856      if(this.checkIfIsObject(itemIndex) && this.items[itemIndex].hasOwnProperty('autoplay') && this.items[itemIndex].autoplay) {
38857        return true
38858      }
38859
38860      return false
38861    },
38862
38863    toggleFullScreenMode: function toggleFullScreenMode() {
38864      if(this.isFullScreenMode) {
38865        this.closeFullscreen();
38866      } else {
38867        this.fullScreenMode();
38868      }
38869
38870      this.isFullScreenMode = !this.isFullScreenMode;
38871    },
38872
38873    closeFullscreen: function closeFullscreen() {
38874      if (document.exitFullscreen) {
38875        document.exitFullscreen();
38876      } else if (document.mozCancelFullScreen) { /* Firefox */
38877        document.mozCancelFullScreen();
38878      } else if (document.webkitExitFullscreen) { /* Chrome, Safari and Opera */
38879        document.webkitExitFullscreen();
38880      } else if (document.msExitFullscreen) { /* IE/Edge */
38881        document.msExitFullscreen();
38882      }
38883    },
38884
38885    fullScreenMode: function fullScreenMode() {
38886      /* Get the documentElement (<html>) to display the page in fullscreen */
38887      var elem = document.documentElement;
38888      if (elem.requestFullscreen) {
38889        elem.requestFullscreen();
38890      } else if (elem.mozRequestFullScreen) { /* Firefox */
38891        elem.mozRequestFullScreen();
38892      } else if (elem.webkitRequestFullscreen) { /* Chrome, Safari and Opera */
38893        elem.webkitRequestFullscreen();
38894      } else if (elem.msRequestFullscreen) { /* IE/Edge */
38895        elem.msRequestFullscreen();
38896      }
38897    },
38898
38899    // check if event is arrow button or toolbar button
38900    checkIfIsButton: function checkIfIsButton(event) {
38901      var elements = '.cool-lightbox__iframe *, .cool-lightbox-button, .cool-lightbox-button *, .cool-lightbox-toolbar__btn, .cool-lightbox-toolbar__btn *, .cool-lightbox-caption h6, .cool-lightbox-caption p, .cool-lightbox-caption a';
38902      if (event.target.matches(elements)) {
38903        return true
38904      }
38905
38906      return false
38907    },
38908
38909    // start swipe event
38910    startSwipe: function startSwipe(event) {
38911      if(this.isZooming) {
38912        return false
38913      }
38914
38915      // check if is some button
38916      if(this.checkIfIsButton(event)) {
38917        return false
38918      }
38919
38920      // clear interval
38921      clearInterval(this.swipeInterval);
38922      this.swipeAnimation = null;
38923
38924      // starts swipe
38925      this.isDraggingSwipe = true;
38926      this.initialMouseX = this.getMouseXPosFromEvent(event);
38927      this.initialMouseY = this.getMouseYPosFromEvent(event);
38928    },
38929
38930    // continue swipe event
38931    continueSwipe: function continueSwipe(event) {
38932      if(this.isDraggingSwipe) {
38933        this.IsSwipping = true;
38934        var currentPosX = this.getMouseXPosFromEvent(event);
38935        var currentPosY = this.getMouseYPosFromEvent(event);
38936        var windowWidth = this.lightboxInnerWidth;
38937
38938        // diffs
38939        var diffX = Math.abs(currentPosX - this.initialMouseX);
38940        var diffY = Math.abs(currentPosY - this.initialMouseY);
38941
38942        // swipe type
38943        if(this.swipeType == null) {
38944          if(diffY > 5 || diffX > 5) {
38945            if(diffY > diffX) {
38946              this.swipeType = 'v';
38947            } else {
38948              this.swipeType = 'h';
38949            }
38950          }
38951        }
38952
38953        // swipe
38954        if(this.swipeType == 'h') {
38955          // swipe wrapper
38956          if(this.dir === 'rtl') {
38957            this.xSwipeWrapper = (windowWidth*this.imgIndex) + currentPosX - this.initialMouseX + 30*this.imgIndex;
38958          } else {
38959            this.xSwipeWrapper = -(windowWidth*this.imgIndex) + currentPosX - this.initialMouseX - 30*this.imgIndex;
38960          }
38961
38962        } else {
38963          this.ySwipeWrapper = currentPosY - this.initialMouseY;
38964        }
38965
38966        // mobile caseS
38967        if(event.type === 'touchmove') {
38968          this.endMouseX = this.getMouseXPosFromEvent(event);
38969          this.endMouseY = this.getMouseYPosFromEvent(event);
38970        }
38971      }
38972    },
38973
38974    // end swipe event
38975    endSwipe: function endSwipe(event) {
38976      if(this.checkIfIsButton(event) && this.initialMouseX === 0) {
38977        return false
38978      }
38979
38980      // event check is dragging and swipe
38981      var self = this;
38982      var swipeType = this.swipeType;
38983      this.isDraggingSwipe = false;
38984
38985      // horizontal swipe type
38986      if(this.initialMouseX === 0 && swipeType == 'h') {
38987        return false
38988      }
38989
38990      // touch end fixes
38991      if(event.type !== 'touchend') {
38992        this.endMouseX = this.getMouseXPosFromEvent(event);
38993        this.endMouseY = this.getMouseYPosFromEvent(event);
38994      } else {
38995        if(this.endMouseX === 0) {
38996          return
38997        }
38998      }
38999
39000      // check if is dragged
39001      if(
39002        ((this.endMouseX - this.initialMouseX === 0) && swipeType == 'h') ||
39003        this.isZooming ||
39004        ((this.endMouseY - this.initialMouseY === 0) && swipeType == 'v')
39005      ) {
39006        return
39007      }
39008
39009      // set swipe animation
39010      this.setSwipeAnimation();
39011
39012      // reset swipe data
39013      setTimeout(function() {
39014        self.IsSwipping = false;
39015        self.initialMouseX = 0;
39016        self.endMouseX = 0;
39017      }, 10);
39018
39019      // type of swipe
39020      if(this.swipeType === 'h') {
39021
39022        // if the swipe is to the right
39023        if((this.endMouseX - this.initialMouseX) < -40) {
39024          if(this.dir === 'rtl') {
39025            return this.swipeToLeft()
39026          }
39027          return this.swipeToRight()
39028        }
39029
39030        // if the swipe is to the left
39031        if((this.endMouseX - this.initialMouseX) > 40) {
39032          if(this.dir === 'rtl') {
39033            return this.swipeToRight()
39034          }
39035          return this.swipeToLeft()
39036        }
39037      }
39038
39039
39040      if(this.swipeType === 'v') {
39041        var diffY = Math.abs(this.endMouseY - this.initialMouseY);
39042
39043        // diff Y
39044        if(diffY >= 90) {
39045          this.close();
39046        } else {
39047          this.ySwipeWrapper = 0;
39048        }
39049      }
39050
39051      this.swipeType = null;
39052      var windowWidth = this.lightboxInnerWidth;
39053
39054      if(this.dir === 'rtl') {
39055        this.xSwipeWrapper = this.imgIndex*windowWidth + 30*this.imgIndex;
39056        return
39057      }
39058
39059      this.xSwipeWrapper = -this.imgIndex*windowWidth - 30*this.imgIndex;
39060    },
39061
39062    // swipe to left effect
39063    swipeToLeft: function swipeToLeft() {
39064      if(!this.hasPrevious && this.effect === 'swipe') {
39065
39066        if(this.dir === 'rtl') {
39067          return this.xSwipeWrapper = this.imgIndex*this.lightboxInnerWidth + 30*this.imgIndex
39068        }
39069
39070        return this.xSwipeWrapper = -this.imgIndex*this.lightboxInnerWidth - 30*this.imgIndex
39071      }
39072
39073      this.changeIndexToPrev();
39074    },
39075
39076    // swipe to right effect
39077    swipeToRight: function swipeToRight() {
39078      if(!this.hasNext && this.effect === 'swipe') {
39079
39080        if(this.dir === 'rtl') {
39081          return this.xSwipeWrapper = this.imgIndex*this.lightboxInnerWidth + 30*this.imgIndex
39082        }
39083
39084        return this.xSwipeWrapper = -this.imgIndex*this.lightboxInnerWidth - 30*this.imgIndex
39085      }
39086
39087      this.changeIndexToNext();
39088    },
39089
39090    // function that return x position from event
39091    getMouseXPosFromEvent: function getMouseXPosFromEvent(event) {
39092      if(event.type.indexOf('mouse') !== -1){
39093        return event.clientX
39094      }
39095      return event.touches[0].clientX
39096    },
39097
39098    // function that return Y position from event
39099    getMouseYPosFromEvent: function getMouseYPosFromEvent(event) {
39100      if(event.type.indexOf('mouse') !== -1){
39101        return event.clientY
39102      }
39103      return event.touches[0].clientY
39104    },
39105
39106    // check if the image is cached
39107    is_cached: function is_cached(src) {
39108      var image = new Image();
39109      image.src = src;
39110
39111      return image.complete
39112    },
39113
39114    // image loaded event
39115    imageLoaded: function imageLoaded() {
39116      this.imageLoading = false;
39117    },
39118
39119    // get video url
39120    itemThumb: function itemThumb(itemUrl, itemIndex) {
39121
39122      var thumb = this.getItemThumb(itemIndex);
39123      if(thumb) {
39124        return thumb
39125      }
39126
39127      var youtubeID = this.getYoutubeID(itemUrl);
39128      if(youtubeID) {
39129        return 'https://img.youtube.com/vi/'+youtubeID+'/mqdefault.jpg'
39130      }
39131
39132      var vimeoID = this.getVimeoID(itemUrl);
39133      if(vimeoID) {
39134        return false
39135      }
39136
39137      return itemUrl
39138    },
39139
39140    isItemPicture: function isItemPicture(imgIndex) {
39141      if(imgIndex === null) {
39142        return false
39143      }
39144
39145      var item = this.items[imgIndex];
39146      if(this.checkIfIsObject(imgIndex)) {
39147        return item.picture
39148      }
39149
39150      return false
39151    },
39152
39153    getPictureSources: function getPictureSources(imgIndex) {
39154      if(imgIndex === null) {
39155        return false
39156      }
39157
39158      var picture = this.items[imgIndex].picture;
39159
39160      return picture.sources ? picture.sources : []
39161    },
39162
39163    // get item src
39164    getItemSrc: function getItemSrc(imgIndex) {
39165      if(imgIndex === null) {
39166        return false
39167      }
39168
39169      var item = this.items[imgIndex];
39170      if(this.checkIfIsObject(imgIndex)) {
39171        return item[this.srcName]
39172      }
39173
39174      return item
39175    },
39176
39177    getItemSrcSet: function getItemSrcSet(imgIndex) {
39178      if(imgIndex === null) {
39179        return false
39180      }
39181
39182      var item = this.items[imgIndex];
39183      if(this.checkIfIsObject(imgIndex)) {
39184        return item[this.srcSetName]
39185      }
39186
39187      return null
39188    },
39189
39190    getItemSizes: function getItemSizes(imgIndex) {
39191      if(imgIndex === null) {
39192        return false
39193      }
39194
39195      var item = this.items[imgIndex];
39196      if(this.checkIfIsObject(imgIndex)) {
39197        return item.sizes
39198      }
39199
39200      return null
39201    },
39202
39203    getItemAlt: function getItemAlt(imgIndex) {
39204      if(imgIndex === null) {
39205        return false
39206      }
39207
39208      var item = this.items[imgIndex];
39209      if(this.checkIfIsObject(imgIndex)) {
39210        return item.alt
39211      }
39212
39213      return null
39214    },
39215
39216    getItemThumb: function getItemThumb(imgIndex) {
39217      if(imgIndex === null) {
39218        return false
39219      }
39220
39221      var item = this.items[imgIndex];
39222      if(this.checkIfIsObject(imgIndex)) {
39223        return item[this.srcThumb]
39224      }
39225
39226      if(this.getVideoUrl(item)) {
39227        return false
39228      }
39229
39230      return item
39231    },
39232
39233    // get item media type
39234    getMediaType: function getMediaType(imgIndex) {
39235      if(imgIndex === null) {
39236        return false
39237      }
39238
39239      if(this.checkIfIsObject(imgIndex)) {
39240
39241        var item$1 = this.items[imgIndex];
39242
39243        //item type is specified, so return it
39244        if (item$1[this.srcMediaType]) {
39245          return item$1[this.srcMediaType]
39246        }
39247      }
39248
39249      if (this.getVideoUrl(this.getItemSrc(imgIndex))) {
39250        return 'video'
39251      } else if (this.getPDFurl(this.getItemSrc(imgIndex))) {
39252        return 'iframe'
39253      } else {
39254        return 'image'
39255      }
39256    },
39257
39258    // toggle play slideshow event
39259    togglePlaySlideshow: function togglePlaySlideshow() {
39260      if(!this.slideshow) {
39261        return false
39262      }
39263
39264      if(!this.hasNext && !this.loopData) {
39265        return false
39266      }
39267      this.isPlayingSlideShow = !this.isPlayingSlideShow;
39268
39269      // if is playing move if not stop it
39270      if(this.isPlayingSlideShow) {
39271        this.move();
39272      } else {
39273        this.stopSlideShow();
39274      }
39275    },
39276
39277    // stop slideshow
39278    stopSlideShow: function stopSlideShow() {
39279      this.isPlayingSlideShow = false;
39280      clearInterval(this.intervalProgress);
39281      this.stylesInterval = {
39282        'transform': 'scaleX(0)',
39283        'transition': 'none',
39284      };
39285    },
39286
39287    // move event in zoom
39288    move: function move() {
39289      var self = this;
39290      this.progressWidth = 100;
39291      this.intervalProgress = setInterval(frame, this.slideshowDuration + 90);
39292
39293      self.stylesInterval = {
39294        'transform': 'scaleX(1)',
39295        'background': this.slideshowColorBar,
39296        'transition-duration': this.slideshowDuration+'ms',
39297      };
39298      function frame() {
39299        self.stylesInterval = {
39300          'transform': 'scaleX(0)',
39301          'transition': 'none',
39302        };
39303
39304        if(self.dir === 'rtl') {
39305          self.onPrevClick(true);
39306        } else {
39307          self.onNextClick(true);
39308        }
39309
39310        if(!self.hasNext && !self.loopData) {
39311          self.stopSlideShow();
39312        } else {
39313          setTimeout(function() {
39314            self.stylesInterval = {
39315              'transform': 'scaleX(1)',
39316              'background': self.slideshowColorBar,
39317              'transition-duration': self.slideshowDuration+'ms',
39318            };
39319          }, 50);
39320        }
39321      }
39322    },
39323
39324    // show buttons event
39325    showButtons: function showButtons(event) {
39326      if (this.disableZoom && !this.checkIfIsButton(event)) {
39327        var self = this;
39328        setTimeout(function() {
39329          self.buttonsVisible = !self.buttonsVisible;
39330        }, 100);
39331      }
39332    },
39333
39334    // check if is allowed to drag
39335    checkMouseEventPropButton: function checkMouseEventPropButton(button) {
39336      if (!this.isZooming) { return false }
39337      // mouse left btn click
39338      return button === 0
39339    },
39340
39341    // handle mouse down event
39342    handleMouseDown: function handleMouseDown(e) {
39343      if (!( e.type === 'touchstart' && this.isZooming || e.type === 'mousedown' && this.checkMouseEventPropButton(e.button))) { return }
39344      this.lastX = (e.type === 'touchstart' ? e.touches[0] : e).clientX;
39345      this.lastY = (e.type === 'touchstart' ? e.touches[0] : e).clientY;
39346
39347      if (this.isZooming) {
39348        this.isDraging = true;
39349      }
39350
39351      e.stopPropagation();
39352    },
39353
39354    // handle mouse up event
39355    handleMouseUp: function handleMouseUp(e) {
39356      if (!(e.type === 'touchend' && this.isZooming || e.type === 'mouseup' && this.checkMouseEventPropButton(e.button))) { return }
39357      this.isDraging = false;
39358      this.lastX = this.lastY = 0;
39359
39360      // Fix drag zoom out
39361      var thisContext = this;
39362      setTimeout(function() {
39363        thisContext.canZoom = true;
39364      }, 100);
39365    },
39366
39367    // handle mouse leave event
39368    handleMouseLeave: function handleMouseLeave(e) {
39369      if (!(e.type === 'mouseleave' && this.isZooming)) { return }
39370      this.isDraging = false;
39371      this.lastX = this.lastY = 0;
39372
39373      // Fix drag zoom out
39374      var thisContext = this;
39375      setTimeout(function() {
39376        thisContext.canZoom = true;
39377      }, 100);
39378    },
39379
39380    // handle mouse move event
39381    handleMouseMove: function handleMouseMove(e) {
39382      if (!(e.type === "touchmove" && this.isZooming || e.type === "mousemove" && this.checkMouseEventPropButton(e.button))) { return }
39383      if (this.isDraging) {
39384        var clientX = (e.type === 'touchmove' ? e.touches[0] : e).clientX;
39385        var clientY = (e.type === 'touchmove' ? e.touches[0] : e).clientY;
39386        this.top = this.top - this.lastY + clientY;
39387        this.left = this.left - this.lastX + clientX;
39388        this.lastX = clientX;
39389        this.lastY = clientY;
39390        this.canZoom = false;
39391
39392        var item = e.target.parentNode.nodeName === 'PICTURE'
39393          ? e.target.parentNode.parentNode
39394          : e.target.parentNode;
39395        var newZoom = 1.6 + this.zoomBar/10;
39396        item.style.transform  = 'translate3d(calc(-50% + '+this.left+'px), calc(-50% + '+this.top+'px), 0px) scale3d('+newZoom+', '+newZoom+', '+newZoom+')';
39397      }
39398      e.stopPropagation();
39399    },
39400
39401    // zoom image event
39402    zoomImage: function zoomImage(indexImage) {
39403      if(this.disableZoom) {
39404        return false
39405      }
39406
39407      if(!this.canZoom) {
39408        return false
39409      }
39410
39411      if(this.IsSwipping) {
39412        return false
39413      }
39414
39415      // item zoom
39416      var item;
39417      if(this.effect == 'swipe') {
39418        item = this.$refs.items[this.imgIndex].childNodes[0];
39419      } else {
39420        item = this.$refs.items.childNodes[0];
39421      }
39422
39423      // zoom variables
39424      var isZooming = this.isZooming;
39425      var thisContext = this;
39426
39427      // Is zooming check
39428      if(isZooming) {
39429        if(!this.isDraging) {
39430          this.isZooming = false;
39431          this.zoomBar = 0;
39432        }
39433      } else {
39434        this.isZooming = true;
39435      }
39436
39437      // check if is zooming
39438      if(this.isZooming) {
39439        this.stopSlideShow();
39440
39441        // add scale
39442        item.style.transform  = 'translate3d(calc(-50%), calc(-50%), 0px) scale3d(1.6, 1.6, 1.6)';
39443
39444        // hide buttons
39445        this.buttonsVisible = false;
39446
39447        // fix drag transition problems
39448        setTimeout(function() {
39449          thisContext.transition = 'all .0s ease';
39450        }, 100);
39451
39452      } else {
39453
39454        // show buttons
39455        this.buttonsVisible = true;
39456        this.resetZoom();
39457      }
39458    },
39459
39460    // Reset zoom data
39461    resetZoom: function resetZoom() {
39462      this.scale = 1;
39463      this.left = 0;
39464      this.top = 0;
39465      this.zoomBar = 0;
39466      this.isZooming = false;
39467      this.swipeType = null;
39468      this.transition = 'all .3s ease';
39469
39470      // only if index is not null
39471      if(this.imgIndex != null) {
39472
39473        var item;
39474        if(this.effect == 'swipe') {
39475          item = this.$refs.items[this.imgIndex].childNodes[0];
39476        } else {
39477          item = this.$refs.items.childNodes[0];
39478        }
39479
39480        // reset styles
39481        if(this.disableZoom) {
39482          item.style.transform  = 'translate3d(calc(-50% + '+this.left+'px), calc(-50% + '+this.top+'px), 0px)';
39483        } else {
39484          item.style.transform  = 'translate3d(calc(-50% + '+this.left+'px), calc(-50% + '+this.top+'px), 0px) scale3d(1, 1, 1)';
39485        }
39486
39487        this.initialMouseX = 0;
39488        if(window.innerWidth >= 700) {
39489          this.buttonsVisible = true;
39490        }
39491      }
39492    },
39493
39494    // Aspect Ratio responsive video
39495    setAspectRatioVideo: function setAspectRatioVideo() {
39496      var thisContext = this;
39497      var el = document.getElementsByClassName('cool-lightbox__inner');
39498      el = el[0];
39499
39500      var computedStyle = getComputedStyle(el);
39501      if(window.innerWidth < 1440) {
39502
39503        var width = el.clientWidth;
39504        var height = Math.round((width/16)*9);
39505
39506        this.aspectRatioVideo.height = height+'px';
39507        this.aspectRatioVideo.width = width+'px';
39508
39509      } else {
39510
39511        setTimeout(function() {
39512          var height = el.clientHeight;
39513          height -= parseFloat(computedStyle.paddingTop) + parseFloat(computedStyle.paddingBottom);
39514
39515          var width = (height/9)*16;
39516
39517          thisContext.aspectRatioVideo.height = height+'px';
39518          thisContext.aspectRatioVideo.width = width+'px';
39519        }, 150);
39520
39521      }
39522    },
39523
39524    // close event
39525    close: function close() {
39526      this.stopSlideShow();
39527      this.swipeType = null;
39528      this.$emit('close', this.imgIndex);
39529      this.showThumbs = false;
39530      this.imgIndex = null;
39531    },
39532
39533    wheelEvent: function wheelEvent(event) {
39534      var delay = 350;
39535      var currentTime = new Date().getTime();
39536      var direction = event.deltaY > 0 ? 'top' : 'down';
39537
39538      if (currentTime - this.prevTime < delay) { return }
39539
39540      this.prevTime = currentTime;
39541
39542      switch (direction) {
39543        case 'top':
39544          return this.changeIndexToPrev()
39545        case 'down':
39546          return this.changeIndexToNext()
39547      }
39548    },
39549
39550    // close event click outside
39551    closeModal: function closeModal(event) {
39552      if(!this.closeOnClickOutsideMobile) {
39553        if(window.innerWidth < 700) {
39554          return false
39555        }
39556      }
39557
39558      if(this.IsSwipping) {
39559        return false
39560      }
39561
39562      var elements = '.cool-lightbox__iframe, .cool-lightbox__iframe *, .cool-lightbox-zoom, .cool-lightbox-zoom *, .cool-lightbox-thumbs, svg, path, rect, .cool-lightbox-thumbs *, .cool-lightbox-button, .cool-lightbox-toolbar__btn, .cool-lightbox-toolbar__btn *, .cool-lightbox-button *, .cool-lightbox__slide__img *, .cool-lightbox-video, .cool-lightbox-caption h6, .cool-lightbox-caption p, .cool-lightbox-caption a';
39563      if (!event.target.matches(elements)) {
39564        this.close();
39565      }
39566    },
39567
39568    // set swipe animation
39569    setSwipeAnimation: function setSwipeAnimation() {
39570      var self = this;
39571      clearInterval(this.swipeInterval);
39572      this.swipeAnimation = null;
39573
39574      // animation swipe
39575      this.swipeAnimation = 'all .3s ease';
39576      this.swipeInterval = setInterval(interval, 330);
39577
39578      function interval() {
39579        self.swipeAnimation = null;
39580      }
39581    },
39582
39583    // next slide event
39584    onNextClick: function onNextClick(isFromSlideshow) {
39585      if ( isFromSlideshow === void 0 ) isFromSlideshow = false;
39586
39587      if(this.isZooming) {
39588        return false
39589      }
39590
39591      if(!isFromSlideshow) {
39592        this.stopSlideShow();
39593      }
39594
39595      this.setSwipeAnimation();
39596
39597      if(this.dir === 'rtl') {
39598        return this.changeIndexToPrev()
39599      }
39600
39601      this.changeIndexToNext();
39602    },
39603
39604    // prev slide event
39605    onPrevClick: function onPrevClick(isFromSlideshow) {
39606      if ( isFromSlideshow === void 0 ) isFromSlideshow = false;
39607
39608      if(this.isZooming) {
39609        return false
39610      }
39611
39612      if(!isFromSlideshow) {
39613        this.stopSlideShow();
39614      }
39615
39616      this.setSwipeAnimation();
39617
39618      if(this.dir === 'rtl') {
39619        return this.changeIndexToNext()
39620      }
39621
39622      this.changeIndexToPrev();
39623    },
39624
39625    // change to next index
39626    changeIndexToNext: function changeIndexToNext() {
39627      if(this.hasNext) {
39628        this.onIndexChange(this.imgIndex + 1);
39629      } else {
39630        // only if has loop prop
39631        if(this.loopData) {
39632          this.onIndexChange(0);
39633        }
39634      }
39635    },
39636
39637    // change to prev index
39638    changeIndexToPrev: function changeIndexToPrev() {
39639      if(this.hasPrevious) {
39640        this.onIndexChange(this.imgIndex - 1);
39641      } else {
39642        // only if has loop prop
39643        if(this.loopData) {
39644          this.onIndexChange(this.items.length - 1);
39645        }
39646      }
39647    },
39648
39649    // set lightbox inner width
39650    setLightboxInnerWidth: function setLightboxInnerWidth() {
39651      var el = document.getElementsByClassName('cool-lightbox__inner');
39652      var width = el[0].clientWidth;
39653      this.lightboxInnerWidth = width;
39654    },
39655
39656    // x position on resize event
39657    xPositionOnResize: function xPositionOnResize() {
39658      this.setLightboxInnerWidth();
39659      var index = this.imgIndex;
39660
39661      if(this.dir === 'rtl') {
39662        this.xSwipeWrapper = index*this.lightboxInnerWidth+30*index;
39663        return
39664      }
39665
39666      // set x position
39667      this.xSwipeWrapper = -index*this.lightboxInnerWidth-30*index;
39668    },
39669
39670    // set x position by img index
39671    setXPosition: function setXPosition(index) {
39672      if(this.dir === 'rtl') {
39673        this.xSwipeWrapper = index*this.lightboxInnerWidth+30*index;
39674        return
39675      }
39676
39677      // set x position
39678      this.xSwipeWrapper = -index*this.lightboxInnerWidth-30*index;
39679      return
39680    },
39681
39682    // index change
39683    onIndexChange: function onIndexChange(index) {
39684      var self = this;
39685      this.imgIndex = index;
39686      this.$emit('on-change', index);
39687
39688      setTimeout(function() {
39689        self.$emit('on-change-end', index);
39690      }, 400);
39691    },
39692
39693    // caption size
39694    addCaptionPadding: function addCaptionPadding() {
39695      if(this.checkIfIsObject(this.imgIndex) && (this.items[this.imgIndex].title || this.items[this.imgIndex].descripcion)) {
39696        var el = document.getElementsByClassName('cool-lightbox-caption');
39697        if(el.length > 0) {
39698          this.paddingBottom = el[0].offsetHeight;
39699        }
39700      } else {
39701        this.paddingBottom = 60;
39702      }
39703    },
39704
39705    getPDFurl: function getPDFurl(url) {
39706      if(this.imgIndex === null) {
39707        return false
39708      }
39709
39710      var str = new String(url);
39711      if(str.endsWith('.pdf')){
39712        return url
39713      }
39714
39715      return false
39716    },
39717
39718    // check if is video
39719    getVideoUrl: function getVideoUrl(itemSrc) {
39720
39721      var youtubeUrl = this.getYoutubeUrl(itemSrc);
39722      var vimeoUrl = this.getVimeoUrl(itemSrc);
39723      var mp4Url = this.checkIsMp4(itemSrc);
39724
39725      if(youtubeUrl) {
39726        return youtubeUrl
39727      }
39728
39729      if(vimeoUrl) {
39730        return vimeoUrl
39731      }
39732
39733      if(mp4Url) {
39734        return mp4Url
39735      }
39736
39737      return false
39738    },
39739
39740    // getYoutube ID
39741    getYoutubeID: function getYoutubeID(url) {
39742
39743      // youtube data
39744      var youtubeRegex = /^(?:https?:\/\/)?(?:www\.)?(?:youtu\.be\/|youtube\.com\/(?:embed\/|v\/|watch\?v=|watch\?.+&v=))((\w|-){11})(?:\S+)?$/;
39745      var ytId = (url.match(youtubeRegex)) ? RegExp.$1 : false;
39746
39747      if(ytId) {
39748        return ytId
39749      }
39750
39751      return false
39752    },
39753
39754    // get youtube url
39755    getYoutubeUrl: function getYoutubeUrl(url) {
39756
39757      // youtube data
39758      var ytId = this.getYoutubeID(url);
39759
39760      // if is youtube video
39761      if(ytId) {
39762
39763        // check if allows youtube cookies
39764        if(this.youtubeCookies) {
39765          return 'https://www.youtube.com/embed/'+ytId
39766        }
39767
39768        return 'https://www.youtube-nocookie.com/embed/'+ytId
39769      }
39770
39771      return false
39772    },
39773
39774    // vimeo ID
39775    getVimeoID: function getVimeoID(url) {
39776
39777      // if is vimeo video
39778      var result = url.match(/(?:www\.|player\.)?vimeo.com\/(?:channels\/(?:\w+\/)?|groups\/(?:[^\/]*)\/videos\/|album\/(?:\d+)\/video\/|video\/|)(\d+)(?:[a-zA-Z0-9_\-]+)?/i);
39779      if(result !== null) {
39780        return result[1]
39781      }
39782
39783      return false
39784    },
39785
39786    // get vimeo url
39787    getVimeoUrl: function getVimeoUrl(url) {
39788
39789      // if is vimeo video
39790      var result = url.match(/(?:www\.|player\.)?vimeo.com\/(?:channels\/(?:\w+\/)?|groups\/(?:[^\/]*)\/videos\/|album\/(?:\d+)\/video\/|video\/|)(\d+)(?:[a-zA-Z0-9_\-]+)?/i);
39791      if(result !== null) {
39792        return '//player.vimeo.com/video/'+result[1]+'?hd=1&show_title=1&show_byline=1&show_portrait=0&fullscreen=1'
39793      }
39794
39795      return false
39796    },
39797
39798    // check if video is mp4
39799    checkIsMp4: function checkIsMp4(url) {
39800      if(this.imgIndex === null) {
39801        return false
39802      }
39803
39804      var str = new String(url);
39805      var videoExtensions = [
39806        '.mp4',
39807        '.mov',
39808        '.webm',
39809        '.ogg',
39810        '.avi'
39811      ];
39812      var isValidExtension = videoExtensions.filter(function (videoExtension) {
39813        return (
39814          str.indexOf(videoExtension) !== -1
39815          || str.indexOf(videoExtension.toUpperCase()) !== -1
39816        );
39817      }).length > 0;
39818      if (isValidExtension) {
39819        return url;
39820      }
39821
39822      return false
39823    },
39824
39825    // if is video get extension
39826    getVideoExt: function getVideoExt(url) {
39827      if(this.imgIndex === null) {
39828        return false
39829      }
39830
39831      var str = new String(url);
39832      if(str.indexOf('.mp4') !== -1 || str.indexOf('.mov') !== -1){
39833        return 'mp4'
39834      }
39835
39836      if(str.indexOf('.webm') !== -1) {
39837        return 'webm'
39838      }
39839
39840      if(str.indexOf('.ogg') !== -1) {
39841        return 'ogg'
39842      }
39843
39844      if(str.indexOf('.avi') !== -1) {
39845        return 'avi'
39846      }
39847
39848      return false
39849    },
39850
39851    // check if item is object
39852    checkIfIsObject: function checkIfIsObject(itemIndex) {
39853      var item = this.items[itemIndex];
39854      if(typeof item === 'object' && item !== null) {
39855        return true
39856      }
39857      return false
39858    },
39859
39860    // arrows and escape events
39861    eventListener: function eventListener(e) {
39862      switch (e.keyCode) {
39863        case 39:
39864          return this.onNextClick()
39865        case 37:
39866          return this.onPrevClick()
39867        case 38:
39868        case 40:
39869        case ' ':
39870          return e.preventDefault()
39871        case 27:
39872          return this.close()
39873      }
39874    },
39875  },
39876
39877  computed: {
39878
39879    // Images wrapper styles to use drag and zoom
39880    imgWrapperStyle: function imgWrapperStyle() {
39881      return {
39882        top: '50%',
39883        left: '50%',
39884        transition: this.transition,
39885      }
39886    },
39887
39888    // lightbox styles
39889    lightboxStyles: function lightboxStyles() {
39890      return {
39891        'z-index': this.zIndex,
39892        'background-color': this.overlayColor,
39893      }
39894    },
39895
39896    innerStyles: function innerStyles() {
39897      return {
39898        'padding-bottom': this.paddingBottom+'px',
39899      }
39900    },
39901
39902    // get item src
39903    itemSrc: function itemSrc() {
39904      if(this.imgIndex === null) {
39905        return false
39906      }
39907
39908      var item = this.items[this.imgIndex];
39909      if(this.checkIfIsObject(this.imgIndex)) {
39910        return item[this.srcName]
39911      }
39912
39913      return item
39914    },
39915
39916    // Lightbox classes
39917    lightboxClasses: function lightboxClasses() {
39918      var classesReturn = [
39919        { 'cool-lightbox--can-zoom': this.canZoom && !this.disableZoom },
39920        { 'cool-lightbox--zoom-disabled': this.disableZoom},
39921        { 'cool-lightbox--is-zooming': this.isZooming },
39922        { 'cool-lightbox--show-thumbs': this.showThumbs },
39923        { 'cool-lightbox--is-swipping': this.isDraggingSwipe }
39924      ];
39925
39926      var classString = 'cool-lightbox--thumbs-'+this.thumbsPosition;
39927      classesReturn.push(classString);
39928
39929      return classesReturn
39930    },
39931
39932    // Buttons classes
39933    buttonsClasses: function buttonsClasses() {
39934      return {
39935        'hidden': !this.buttonsVisible,
39936      }
39937    },
39938
39939    // check if the slide has next element
39940    hasNextButton: function hasNextButton() {
39941      if(this.dir === 'rtl') {
39942        return (this.imgIndex - 1 >= 0)
39943      }
39944
39945      return (this.imgIndex + 1 < this.items.length)
39946    },
39947
39948    // check if the slide has previous element
39949    hasPreviousButton: function hasPreviousButton() {
39950      if(this.dir === 'rtl') {
39951        return (this.imgIndex + 1 < this.items.length)
39952      }
39953
39954      return (this.imgIndex - 1 >= 0)
39955    },
39956
39957    // check if the slide has next element
39958    hasNext: function hasNext() {
39959      return (this.imgIndex + 1 < this.items.length)
39960    },
39961
39962    // check if the slide has previous element
39963    hasPrevious: function hasPrevious() {
39964      return (this.imgIndex - 1 >= 0)
39965    },
39966  }
39967};
39968
39969function normalizeComponent(template, style, script, scopeId, isFunctionalTemplate, moduleIdentifier
39970/* server only */
39971, shadowMode, createInjector, createInjectorSSR, createInjectorShadow) {
39972  if (typeof shadowMode !== 'boolean') {
39973    createInjectorSSR = createInjector;
39974    createInjector = shadowMode;
39975    shadowMode = false;
39976  } // Vue.extend constructor export interop.
39977
39978
39979  var options = typeof script === 'function' ? script.options : script; // render functions
39980
39981  if (template && template.render) {
39982    options.render = template.render;
39983    options.staticRenderFns = template.staticRenderFns;
39984    options._compiled = true; // functional template
39985
39986    if (isFunctionalTemplate) {
39987      options.functional = true;
39988    }
39989  } // scopedId
39990
39991
39992  if (scopeId) {
39993    options._scopeId = scopeId;
39994  }
39995
39996  var hook;
39997
39998  if (moduleIdentifier) {
39999    // server build
40000    hook = function hook(context) {
40001      // 2.3 injection
40002      context = context || // cached call
40003      this.$vnode && this.$vnode.ssrContext || // stateful
40004      this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext; // functional
40005      // 2.2 with runInNewContext: true
40006
40007      if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {
40008        context = __VUE_SSR_CONTEXT__;
40009      } // inject component styles
40010
40011
40012      if (style) {
40013        style.call(this, createInjectorSSR(context));
40014      } // register component module identifier for async chunk inference
40015
40016
40017      if (context && context._registeredComponents) {
40018        context._registeredComponents.add(moduleIdentifier);
40019      }
40020    }; // used by ssr in case component is cached and beforeCreate
40021    // never gets called
40022
40023
40024    options._ssrRegister = hook;
40025  } else if (style) {
40026    hook = shadowMode ? function () {
40027      style.call(this, createInjectorShadow(this.$root.$options.shadowRoot));
40028    } : function (context) {
40029      style.call(this, createInjector(context));
40030    };
40031  }
40032
40033  if (hook) {
40034    if (options.functional) {
40035      // register for functional component in vue file
40036      var originalRender = options.render;
40037
40038      options.render = function renderWithStyleInjection(h, context) {
40039        hook.call(context);
40040        return originalRender(h, context);
40041      };
40042    } else {
40043      // inject component registration as beforeCreate hook
40044      var existing = options.beforeCreate;
40045      options.beforeCreate = existing ? [].concat(existing, hook) : [hook];
40046    }
40047  }
40048
40049  return script;
40050}
40051
40052var normalizeComponent_1 = normalizeComponent;
40053
40054/* script */
40055var __vue_script__ = script;
40056/* template */
40057var __vue_render__ = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('transition',{attrs:{"name":"cool-lightbox-modal"}},[(_vm.isVisible)?_c('div',{ref:"coolLightbox",staticClass:"cool-lightbox",class:_vm.lightboxClasses,style:(_vm.lightboxStyles),on:{"click":_vm.closeModal}},[(_vm.gallery)?_c('div',{staticClass:"cool-lightbox-thumbs"},[_c('div',{staticClass:"cool-lightbox-thumbs__list"},_vm._l((_vm.items),function(item,itemIndex){return _c('button',{key:itemIndex,staticClass:"cool-lightbox__thumb",class:{
40058            active: itemIndex === _vm.imgIndex,
40059            'is-video': _vm.getMediaType(itemIndex) === 'video'
40060          },attrs:{"type":"button"},on:{"click":function($event){_vm.imgIndex = itemIndex;}}},[(_vm.getMediaType(itemIndex) === 'video')?_c('svg',{staticClass:"cool-lightbox__thumb__icon",attrs:{"xmlns":"http://www.w3.org/2000/svg","viewBox":"0 0 24 24"}},[_c('path',{attrs:{"d":"M6.5 5.4v13.2l11-6.6z"}})]):_vm._e(),_vm._v(" "),_c('img',{attrs:{"src":_vm.itemThumb(_vm.getItemSrc(itemIndex), itemIndex),"alt":""}})])}),0)]):_vm._e(),_vm._v(" "),_c('div',{staticClass:"cool-lightbox__inner",style:(_vm.innerStyles),on:{"mousedown":_vm.startSwipe,"mousemove":_vm.continueSwipe,"mouseup":_vm.endSwipe,"touchstart":_vm.startSwipe,"touchmove":_vm.continueSwipe,"touchend":_vm.endSwipe}},[_c('div',{staticClass:"cool-lightbox__progressbar",style:(_vm.stylesInterval)}),_vm._v(" "),_c('div',{staticClass:"cool-lightbox__navigation"},[_c('button',{directives:[{name:"show",rawName:"v-show",value:((_vm.hasPreviousButton || _vm.loopData) && _vm.items.length > 1),expression:"(hasPreviousButton || loopData) && items.length > 1"}],staticClass:"cool-lightbox-button cool-lightbox-button--prev",class:_vm.buttonsClasses,attrs:{"type":"button","title":_vm.translations.previous},on:{"click":_vm.onPrevClick}},[_vm._t("icon-previous",function(){return [_c('div',{staticClass:"cool-lightbox-button__icon"},[_c('svg',{attrs:{"xmlns":"http://www.w3.org/2000/svg","viewBox":"0 0 24 24"}},[_c('path',{attrs:{"d":"M11.28 15.7l-1.34 1.37L5 12l4.94-5.07 1.34 1.38-2.68 2.72H19v1.94H8.6z"}})])])]})],2),_vm._v(" "),_c('button',{directives:[{name:"show",rawName:"v-show",value:((_vm.hasNextButton || _vm.loopData) && _vm.items.length > 1),expression:"(hasNextButton || loopData) && items.length > 1"}],staticClass:"cool-lightbox-button cool-lightbox-button--next",class:_vm.buttonsClasses,attrs:{"type":"button","title":_vm.translations.next},on:{"click":function($event){return _vm.onNextClick(false)}}},[_vm._t("icon-next",function(){return [_c('div',{staticClass:"cool-lightbox-button__icon"},[_c('svg',{attrs:{"xmlns":"http://www.w3.org/2000/svg","viewBox":"0 0 24 24"}},[_c('path',{attrs:{"d":"M15.4 12.97l-2.68 2.72 1.34 1.38L19 12l-4.94-5.07-1.34 1.38 2.68 2.72H5v1.94z"}})])])]})],2)]),_vm._v(" "),(_vm.effect === 'swipe')?_c('div',{staticClass:"cool-lightbox__wrapper cool-lightbox__wrapper--swipe",style:({
40061          transform: 'translate3d('+_vm.xSwipeWrapper+'px, '+_vm.ySwipeWrapper+'px, 0)',
40062          transition: _vm.swipeAnimation
40063        })},_vm._l((_vm.items),function(item,itemIndex){return _c('div',{key:itemIndex,ref:"items",refInFor:true,staticClass:"cool-lightbox__slide",class:{ 'cool-lightbox__slide--current': itemIndex === _vm.imgIndex }},[(_vm.getMediaType(itemIndex) === 'image')?_c('div',{directives:[{name:"lazyload",rawName:"v-lazyload"}],key:"image",staticClass:"cool-lightbox__slide__img",style:(_vm.imgWrapperStyle)},[(!_vm.isItemPicture(itemIndex))?_c('img',{key:itemIndex,attrs:{"data-src":_vm.getItemSrc(itemIndex),"data-srcset":_vm.getItemSrcSet(itemIndex),"data-sizes":_vm.getItemSizes(itemIndex),"draggable":"false","alt":_vm.getItemAlt(itemIndex)},on:{"load":_vm.imageLoaded,"click":function($event){return _vm.zoomImage(itemIndex)},"mousedown":function($event){return _vm.handleMouseDown($event)},"mouseup":function($event){return _vm.handleMouseUp($event)},"mouseleave":function($event){return _vm.handleMouseLeave($event)},"mousemove":function($event){return _vm.handleMouseMove($event)},"touchstart":function($event){return _vm.handleMouseDown($event)},"touchmove":function($event){return _vm.handleMouseMove($event)},"touchend":function($event){return _vm.handleMouseUp($event)}}}):_c('picture',{key:itemIndex},[_vm._l((_vm.getPictureSources(itemIndex)),function(source,sourceIndex){return _c('source',{key:("source-" + _vm.imgIndex + "-" + sourceIndex),attrs:{"data-srcset":source.srcset,"data-media":source.media,"type":source.type,"data-sizes":source.sizes || _vm.getItemSizes(_vm.imgIndex)}})}),_vm._v(" "),_c('img',{attrs:{"data-src":_vm.getItemSrc(itemIndex),"data-srcset":_vm.getItemSrcSet(itemIndex),"data-sizes":_vm.getItemSizes(itemIndex),"draggable":"false","alt":_vm.getItemAlt(itemIndex)},on:{"load":_vm.imageLoaded,"click":function($event){return _vm.zoomImage(itemIndex)},"mousedown":function($event){return _vm.handleMouseDown($event)},"mouseup":function($event){return _vm.handleMouseUp($event)},"mouseleave":function($event){return _vm.handleMouseLeave($event)},"mousemove":function($event){return _vm.handleMouseMove($event)},"touchstart":function($event){return _vm.handleMouseDown($event)},"touchmove":function($event){return _vm.handleMouseMove($event)},"touchend":function($event){return _vm.handleMouseUp($event)}}})],2),_vm._v(" "),_c('div',{directives:[{name:"show",rawName:"v-show",value:(_vm.imageLoading),expression:"imageLoading"}],staticClass:"cool-lightbox-loading-wrapper"},[_vm._t("loading",function(){return [_c('div',{staticClass:"cool-lightbox-loading"})]})],2)]):_c('div',{key:"video",staticClass:"cool-lightbox__iframe"},[((!_vm.checkIsMp4(_vm.getItemSrc(itemIndex)) && _vm.getMediaType(itemIndex) === 'video'))?_c('iframe',{directives:[{name:"autoplayObserver",rawName:"v-autoplayObserver"}],key:itemIndex,staticClass:"cool-lightbox-video",style:(_vm.aspectRatioVideo),attrs:{"data-autoplay":_vm.setAutoplay(itemIndex),"src":_vm.getVideoUrl(_vm.getItemSrc(itemIndex)),"frameborder":"0","allow":"accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture","allowfullscreen":""}}):_vm._e(),_vm._v(" "),((_vm.getMediaType(itemIndex) === 'iframe') || (_vm.getPDFurl(_vm.getItemSrc(itemIndex))))?_c('iframe',{key:itemIndex,staticClass:"cool-lightbox-pdf",attrs:{"src":_vm.getItemSrc(itemIndex),"frameborder":"0","allowfullscreen":""}}):_vm._e(),_vm._v(" "),(_vm.checkIsMp4(_vm.getItemSrc(itemIndex)) || _vm.getMediaType(itemIndex) === 'webVideo')?_c('video',{directives:[{name:"autoplayObserver",rawName:"v-autoplayObserver"}],key:_vm.checkIsMp4(_vm.getItemSrc(itemIndex)),staticClass:"cool-lightbox-video",style:(_vm.aspectRatioVideo),attrs:{"data-autoplay":_vm.setAutoplay(itemIndex),"controls":"","controlslist":"nodownload","l":"","poster":""}},[_c('source',{attrs:{"src":_vm.checkIsMp4(_vm.getItemSrc(itemIndex)),"type":'video/'+(_vm.getVideoExt(_vm.getItemSrc(itemIndex)) ? _vm.getVideoExt(_vm.getItemSrc(itemIndex)) : _vm.getExtFromItem(itemIndex))}}),_vm._v("\n              Sorry, your browser doesn't support embedded videos\n            ")]):_vm._e()])])}),0):_vm._e(),_vm._v(" "),(_vm.effect === 'fade')?_c('div',{staticClass:"cool-lightbox__wrapper"},[_c('div',{ref:"items",staticClass:"cool-lightbox__slide cool-lightbox__slide--current"},[_c('transition',{attrs:{"name":"cool-lightbox-slide-change","mode":"out-in"}},[(_vm.getMediaType(_vm.imgIndex) === 'image')?_c('div',{key:"image",staticClass:"cool-lightbox__slide__img",style:(_vm.imgWrapperStyle)},[(!_vm.isItemPicture(_vm.imgIndex))?_c('transition',{attrs:{"name":"cool-lightbox-slide-change","mode":"out-in"}},[_c('img',{key:_vm.imgIndex,attrs:{"src":_vm.getItemSrc(_vm.imgIndex),"srcset":_vm.getItemSrcSet(_vm.imgIndex),"sizes":_vm.getItemSizes(_vm.imgIndex),"draggable":"false","alt":_vm.getItemAlt(_vm.imgIndex)},on:{"load":_vm.imageLoaded,"click":_vm.zoomImage,"mousedown":function($event){return _vm.handleMouseDown($event)},"mouseup":function($event){return _vm.handleMouseUp($event)},"mouseleave":function($event){return _vm.handleMouseLeave($event)},"mousemove":function($event){return _vm.handleMouseMove($event)}}})]):_c('transition',{attrs:{"name":"cool-lightbox-slide-change","mode":"out-in"}},[_c('picture',{key:_vm.imgIndex},[_vm._l((_vm.getPictureSources(_vm.imgIndex)),function(source,sourceIndex){return _c('source',{key:("source-" + _vm.imgIndex + "-" + sourceIndex),attrs:{"srcset":source.srcset,"type":source.type,"media":source.media,"sizes":source.sizes || _vm.getItemSizes(_vm.imgIndex)}})}),_vm._v(" "),_c('img',{attrs:{"src":_vm.getItemSrc(_vm.imgIndex),"srcset":_vm.getItemSrcSet(_vm.imgIndex),"sizes":_vm.getItemSizes(_vm.imgIndex),"draggable":"false","alt":_vm.getItemAlt(_vm.imgIndex)},on:{"load":_vm.imageLoaded,"click":function($event){return _vm.zoomImage(_vm.imgIndex)},"mousedown":function($event){return _vm.handleMouseDown($event)},"mouseup":function($event){return _vm.handleMouseUp($event)},"mouseleave":function($event){return _vm.handleMouseLeave($event)},"mousemove":function($event){return _vm.handleMouseMove($event)}}})],2)]),_vm._v(" "),_c('div',{directives:[{name:"show",rawName:"v-show",value:(_vm.imageLoading),expression:"imageLoading"}],staticClass:"cool-lightbox-loading-wrapper"},[_vm._t("loading",function(){return [_c('div',{staticClass:"cool-lightbox-loading"})]})],2)],1):_c('div',{key:"video",staticClass:"cool-lightbox__iframe"},[_c('transition',{attrs:{"name":"cool-lightbox-slide-change","mode":"out-in"}},[((!_vm.checkIsMp4(_vm.getItemSrc(_vm.imgIndex)) && _vm.getMediaType(_vm.imgIndex) === 'video'))?_c('iframe',{directives:[{name:"autoplayObserver",rawName:"v-autoplayObserver"}],key:_vm.getVideoUrl(_vm.getItemSrc(_vm.imgIndex)),staticClass:"cool-lightbox-video",style:(_vm.aspectRatioVideo),attrs:{"data-autoplay":_vm.setAutoplay(_vm.imgIndex),"src":_vm.getVideoUrl(_vm.getItemSrc(_vm.imgIndex)),"frameborder":"0","allow":"accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture","allowfullscreen":""}}):_vm._e(),_vm._v(" "),((_vm.getMediaType(_vm.imgIndex) === 'iframe') || (_vm.getPDFurl(_vm.getItemSrc(_vm.imgIndex))))?_c('iframe',{key:_vm.imgIndex,staticClass:"cool-lightbox-pdf",attrs:{"src":_vm.getItemSrc(_vm.imgIndex),"frameborder":"0","allowfullscreen":""}}):_vm._e(),_vm._v(" "),(_vm.checkIsMp4(_vm.getItemSrc(_vm.imgIndex)) || _vm.getMediaType(_vm.imgIndex) === 'webVideo')?_c('video',{directives:[{name:"autoplayObserver",rawName:"v-autoplayObserver"}],key:_vm.checkIsMp4(_vm.getItemSrc(_vm.imgIndex)),staticClass:"cool-lightbox-video",style:(_vm.aspectRatioVideo),attrs:{"data-autoplay":_vm.setAutoplay(_vm.imgIndex),"controls":"","controlslist":"nodownload","poster":""}},[_c('source',{attrs:{"src":_vm.checkIsMp4(_vm.getItemSrc(_vm.imgIndex)),"type":'video/'+(_vm.getVideoExt(_vm.getItemSrc(_vm.imgIndex)) ? _vm.getVideoExt(_vm.getItemSrc(_vm.imgIndex)) : _vm.getExtFromItem(_vm.imgIndex))}}),_vm._v("\n                  Sorry, your browser doesn't support embedded videos\n                ")]):_vm._e()])],1)])],1)]):_vm._e(),_vm._v(" "),_c('transition',{attrs:{"name":"cool-lightbox-modal"}},[_c('div',{directives:[{name:"show",rawName:"v-show",value:(_vm.checkIfIsObject(_vm.imgIndex) && (_vm.items[_vm.imgIndex].title || _vm.items[_vm.imgIndex].description)),expression:"checkIfIsObject(imgIndex) && (items[imgIndex].title || items[imgIndex].description)"}],key:"caption-block",staticClass:"cool-lightbox-caption"},[_c('transition',{attrs:{"name":"cool-lightbox-slide-change","mode":"out-in"}},[(_vm.checkIfIsObject(_vm.imgIndex) && _vm.items[_vm.imgIndex].title)?_c('h6',{key:"title",domProps:{"innerHTML":_vm._s(_vm.items[_vm.imgIndex].title)}}):_vm._e()]),_vm._v(" "),_c('transition',{attrs:{"name":"cool-lightbox-slide-change","mode":"out-in"}},[(_vm.checkIfIsObject(_vm.imgIndex) && _vm.items[_vm.imgIndex].description)?_c('p',{key:"description",domProps:{"innerHTML":_vm._s(_vm.items[_vm.imgIndex].description)}}):_vm._e()])],1)]),_vm._v(" "),_c('div',{staticClass:"cool-lightbox-toolbar",class:_vm.buttonsClasses},[(this.slideshow && _vm.items.length > 1)?_c('button',{staticClass:"cool-lightbox-toolbar__btn",attrs:{"type":"button","title":_vm.translations.playSlideShow},on:{"click":_vm.togglePlaySlideshow}},[(!_vm.isPlayingSlideShow)?_c('svg',{attrs:{"xmlns":"http://www.w3.org/2000/svg","viewBox":"0 0 24 24"}},[_c('path',{attrs:{"d":"M6.5 5.4v13.2l11-6.6z"}})]):_c('svg',{attrs:{"xmlns":"http://www.w3.org/2000/svg"}},[_c('g',[_c('rect',{attrs:{"id":"svg_4","height":"11.97529","width":"11.728392","y":"6.030873","x":"6.259265","stroke-width":"1.5","stroke":"#000","fill":"#000000"}})])])]):_vm._e(),_vm._v(" "),(_vm.items.length > 1 && _vm.gallery)?_c('button',{staticClass:"cool-lightbox-toolbar__btn",attrs:{"type":"button","title":_vm.translations.showThumbNails},on:{"click":function($event){_vm.showThumbs = !_vm.showThumbs;}}},[_c('svg',{attrs:{"xmlns":"http://www.w3.org/2000/svg","viewBox":"0 0 24 24"}},[_c('path',{attrs:{"d":"M14.59 14.59h3.76v3.76h-3.76v-3.76zm-4.47\n            0h3.76v3.76h-3.76v-3.76zm-4.47 0h3.76v3.76H5.65v-3.76zm8.94-4.47h3.76v3.76h-3.76v-3.76zm-4.47\n            0h3.76v3.76h-3.76v-3.76zm-4.47 0h3.76v3.76H5.65v-3.76zm8.94-4.47h3.76v3.76h-3.76V5.65zm-4.47\n            0h3.76v3.76h-3.76V5.65zm-4.47 0h3.76v3.76H5.65V5.65z"}})])]):_vm._e(),_vm._v(" "),(_vm.fullScreen)?_c('button',{staticClass:"cool-lightbox-toolbar__btn",attrs:{"type":"button","title":_vm.translations.fullScreen},on:{"click":_vm.toggleFullScreenMode}},[_c('svg',{attrs:{"width":"20px","height":"20px","viewBox":"0 0 18 18","xmlns":"http://www.w3.org/2000/svg"}},[_c('path',{attrs:{"d":"M4.5 11H3v4h4v-1.5H4.5V11zM3 7h1.5V4.5H7V3H3v4zm10.5 6.5H11V15h4v-4h-1.5v2.5zM11 3v1.5h2.5V7H15V3h-4z"}})])]):_vm._e(),_vm._v(" "),(_vm.showCloseButton)?_c('button',{staticClass:"cool-lightbox-toolbar__btn",attrs:{"type":"button","title":_vm.translations.close},on:{"click":_vm.close}},[_vm._t("close",function(){return [_c('svg',{attrs:{"xmlns":"http://www.w3.org/2000/svg","viewBox":"0 0 24 24"}},[_c('path',{attrs:{"d":"M12 10.6L6.6 5.2 5.2 6.6l5.4 5.4-5.4 5.4 1.4 1.4 5.4-5.4 5.4 5.4 1.4-1.4-5.4-5.4 5.4-5.4-1.4-1.4-5.4 5.4z"}})])]})],2):_vm._e()])],1),_vm._v(" "),_c('transition',{attrs:{"name":"cool-lightbox-modal"}},[(_vm.isZooming && _vm.useZoomBar)?_c('div',{staticClass:"cool-lightbox-zoom"},[_c('svg',{staticClass:"cool-lightbox-zoom__icon",attrs:{"height":"469pt","viewBox":"0 -192 469.33333 469","width":"469pt","xmlns":"http://www.w3.org/2000/svg"}},[_c('path',{attrs:{"d":"m437.332031.167969h-405.332031c-17.664062\n          0-32 14.335937-32 32v21.332031c0 17.664062 14.335938 32 32 32h405.332031c17.664063 0 32-14.335938\n          32-32v-21.332031c0-17.664063-14.335937-32-32-32zm0 0"}})]),_vm._v(" "),_c('input',{directives:[{name:"model",rawName:"v-model",value:(_vm.zoomBar),expression:"zoomBar"}],attrs:{"type":"range","name":"points","min":"0","max":"50"},domProps:{"value":(_vm.zoomBar)},on:{"__r":function($event){_vm.zoomBar=$event.target.value;}}}),_vm._v(" "),_c('svg',{staticClass:"cool-lightbox-zoom__icon",attrs:{"height":"426.66667pt","viewBox":"0 0 426.66667 426.66667","width":"426.66667pt","xmlns":"http://www.w3.org/2000/svg"}},[_c('path',{attrs:{"d":"m405.332031 192h-170.664062v-170.667969c0-11.773437-9.558594-21.332031-21.335938-21.332031-11.773437 0-21.332031\n          9.558594-21.332031 21.332031v170.667969h-170.667969c-11.773437 0-21.332031 9.558594-21.332031 21.332031 0\n          11.777344 9.558594 21.335938 21.332031 21.335938h170.667969v170.664062c0 11.777344 9.558594 21.335938 21.332031\n          21.335938 11.777344 0 21.335938-9.558594 21.335938-21.335938v-170.664062h170.664062c11.777344 0 21.335938-9.558594\n          21.335938-21.335938 0-11.773437-9.558594-21.332031-21.335938-21.332031zm0 0"}})])]):_vm._e()])],1):_vm._e()])};
40064var __vue_staticRenderFns__ = [];
40065
40066  /* style */
40067  var __vue_inject_styles__ = undefined;
40068  /* scoped */
40069  var __vue_scope_id__ = undefined;
40070  /* module identifier */
40071  var __vue_module_identifier__ = undefined;
40072  /* functional template */
40073  var __vue_is_functional_template__ = false;
40074  /* style inject */
40075  
40076  /* style inject SSR */
40077  
40078
40079  
40080  var CoolLightBox = normalizeComponent_1(
40081    { render: __vue_render__, staticRenderFns: __vue_staticRenderFns__ },
40082    __vue_inject_styles__,
40083    __vue_script__,
40084    __vue_scope_id__,
40085    __vue_is_functional_template__,
40086    __vue_module_identifier__,
40087    undefined,
40088    undefined
40089  );
40090
40091function install(Vue) {
40092  if (install.installed) { return; }
40093  install.installed = true;
40094  Vue.component("CoolLightBox", CoolLightBox);
40095}
40096
40097var plugin = {
40098  install: install
40099};
40100
40101var GlobalVue = null;
40102if (typeof window !== "undefined") {
40103  GlobalVue = window.Vue;
40104} else if (typeof __webpack_require__.g !== "undefined") {
40105  GlobalVue = __webpack_require__.g.vue;
40106}
40107
40108if (GlobalVue) {
40109  GlobalVue.use(plugin);
40110}
40111
40112CoolLightBox.install = install;
40113
40114/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (CoolLightBox);
40115
40116
40117/***/ }),
40118
vendor: 2,401 bytes, lines 40119-40148
40119/***/ "./node_modules/vue-cool-lightbox/dist/vue-cool-lightbox.min.css":
40120/*!***********************************************************************!*\
40121  !*** ./node_modules/vue-cool-lightbox/dist/vue-cool-lightbox.min.css ***!
40122  \***********************************************************************/
40123/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
40124
40125"use strict";
40126__webpack_require__.r(__webpack_exports__);
40127/* harmony export */ __webpack_require__.d(__webpack_exports__, {
40128/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
40129/* harmony export */ });
40130/* harmony import */ var _style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! !../../style-loader/dist/runtime/injectStylesIntoStyleTag.js */ "./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js");
40131/* harmony import */ var _style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__);
40132/* harmony import */ var _laravel_mix_node_modules_css_loader_dist_cjs_js_clonedRuleSet_9_use_1_postcss_loader_dist_cjs_js_clonedRuleSet_9_use_2_vue_cool_lightbox_min_css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! !!../../laravel-mix/node_modules/css-loader/dist/cjs.js??clonedRuleSet-9.use[1]!../../postcss-loader/dist/cjs.js??clonedRuleSet-9.use[2]!./vue-cool-lightbox.min.css */ "./node_modules/laravel-mix/node_modules/css-loader/dist/cjs.js??clonedRuleSet-9.use[1]!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-9.use[2]!./node_modules/vue-cool-lightbox/dist/vue-cool-lightbox.min.css");
40133
40134            
40135
40136var options = {};
40137
40138options.insert = "head";
40139options.singleton = false;
40140
40141var update = _style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default()(_laravel_mix_node_modules_css_loader_dist_cjs_js_clonedRuleSet_9_use_1_postcss_loader_dist_cjs_js_clonedRuleSet_9_use_2_vue_cool_lightbox_min_css__WEBPACK_IMPORTED_MODULE_1__["default"], options);
40142
40143
40144
40145/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_laravel_mix_node_modules_css_loader_dist_cjs_js_clonedRuleSet_9_use_1_postcss_loader_dist_cjs_js_clonedRuleSet_9_use_2_vue_cool_lightbox_min_css__WEBPACK_IMPORTED_MODULE_1__["default"].locals || {});
40146
40147/***/ }),
40148
vendor: 3,357 bytes, lines 40149-40259
40149/***/ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js":
40150/*!********************************************************************!*\
40151  !*** ./node_modules/vue-loader/lib/runtime/componentNormalizer.js ***!
40152  \********************************************************************/
40153/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
40154
40155"use strict";
40156__webpack_require__.r(__webpack_exports__);
40157/* harmony export */ __webpack_require__.d(__webpack_exports__, {
40158/* harmony export */   "default": () => (/* binding */ normalizeComponent)
40159/* harmony export */ });
40160/* globals __VUE_SSR_CONTEXT__ */
40161
40162// IMPORTANT: Do NOT use ES2015 features in this file (except for modules).
40163// This module is a runtime utility for cleaner component module output and will
40164// be included in the final webpack user bundle.
40165
40166function normalizeComponent(
40167  scriptExports,
40168  render,
40169  staticRenderFns,
40170  functionalTemplate,
40171  injectStyles,
40172  scopeId,
40173  moduleIdentifier /* server only */,
40174  shadowMode /* vue-cli only */
40175) {
40176  // Vue.extend constructor export interop
40177  var options =
40178    typeof scriptExports === 'function' ? scriptExports.options : scriptExports
40179
40180  // render functions
40181  if (render) {
40182    options.render = render
40183    options.staticRenderFns = staticRenderFns
40184    options._compiled = true
40185  }
40186
40187  // functional template
40188  if (functionalTemplate) {
40189    options.functional = true
40190  }
40191
40192  // scopedId
40193  if (scopeId) {
40194    options._scopeId = 'data-v-' + scopeId
40195  }
40196
40197  var hook
40198  if (moduleIdentifier) {
40199    // server build
40200    hook = function (context) {
40201      // 2.3 injection
40202      context =
40203        context || // cached call
40204        (this.$vnode && this.$vnode.ssrContext) || // stateful
40205        (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional
40206      // 2.2 with runInNewContext: true
40207      if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {
40208        context = __VUE_SSR_CONTEXT__
40209      }
40210      // inject component styles
40211      if (injectStyles) {
40212        injectStyles.call(this, context)
40213      }
40214      // register component module identifier for async chunk inferrence
40215      if (context && context._registeredComponents) {
40216        context._registeredComponents.add(moduleIdentifier)
40217      }
40218    }
40219    // used by ssr in case component is cached and beforeCreate
40220    // never gets called
40221    options._ssrRegister = hook
40222  } else if (injectStyles) {
40223    hook = shadowMode
40224      ? function () {
40225          injectStyles.call(
40226            this,
40227            (options.functional ? this.parent : this).$root.$options.shadowRoot
40228          )
40229        }
40230      : injectStyles
40231  }
40232
40233  if (hook) {
40234    if (options.functional) {
40235      // for template-only hot-reload because in that case the render fn doesn't
40236      // go through the normalizer
40237      options._injectStyles = hook
40238      // register for functional component in vue file
40239      var originalRender = options.render
40240      options.render = function renderWithStyleInjection(h, context) {
40241        hook.call(context)
40242        return originalRender(h, context)
40243      }
40244    } else {
40245      // inject component registration as beforeCreate hook
40246      var existing = options.beforeCreate
40247      options.beforeCreate = existing ? [].concat(existing, hook) : [hook]
40248    }
40249  }
40250
40251  return {
40252    exports: scriptExports,
40253    options: options
40254  }
40255}
40256
40257
40258/***/ }),
40259
vendor: 83,571 bytes, lines 40260-43439
40260/***/ "./node_modules/vue-router/dist/vue-router.esm.js":
40261/*!********************************************************!*\
40262  !*** ./node_modules/vue-router/dist/vue-router.esm.js ***!
40263  \********************************************************/
40264/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
40265
40266"use strict";
40267__webpack_require__.r(__webpack_exports__);
40268/* harmony export */ __webpack_require__.d(__webpack_exports__, {
40269/* harmony export */   NavigationFailureType: () => (/* binding */ NavigationFailureType),
40270/* harmony export */   RouterLink: () => (/* binding */ Link),
40271/* harmony export */   RouterView: () => (/* binding */ View),
40272/* harmony export */   START_LOCATION: () => (/* binding */ START),
40273/* harmony export */   "default": () => (/* binding */ VueRouter$1),
40274/* harmony export */   isNavigationFailure: () => (/* binding */ isNavigationFailure),
40275/* harmony export */   version: () => (/* binding */ version)
40276/* harmony export */ });
40277/*!
40278  * vue-router v3.6.5
40279  * (c) 2022 Evan You
40280  * @license MIT
40281  */
40282/*  */
40283
40284function assert (condition, message) {
40285  if (!condition) {
40286    throw new Error(("[vue-router] " + message))
40287  }
40288}
40289
40290function warn (condition, message) {
40291  if (!condition) {
40292    typeof console !== 'undefined' && console.warn(("[vue-router] " + message));
40293  }
40294}
40295
40296function extend (a, b) {
40297  for (var key in b) {
40298    a[key] = b[key];
40299  }
40300  return a
40301}
40302
40303/*  */
40304
40305var encodeReserveRE = /[!'()*]/g;
40306var encodeReserveReplacer = function (c) { return '%' + c.charCodeAt(0).toString(16); };
40307var commaRE = /%2C/g;
40308
40309// fixed encodeURIComponent which is more conformant to RFC3986:
40310// - escapes [!'()*]
40311// - preserve commas
40312var encode = function (str) { return encodeURIComponent(str)
40313    .replace(encodeReserveRE, encodeReserveReplacer)
40314    .replace(commaRE, ','); };
40315
40316function decode (str) {
40317  try {
40318    return decodeURIComponent(str)
40319  } catch (err) {
40320    if (true) {
40321      warn(false, ("Error decoding \"" + str + "\". Leaving it intact."));
40322    }
40323  }
40324  return str
40325}
40326
40327function resolveQuery (
40328  query,
40329  extraQuery,
40330  _parseQuery
40331) {
40332  if ( extraQuery === void 0 ) extraQuery = {};
40333
40334  var parse = _parseQuery || parseQuery;
40335  var parsedQuery;
40336  try {
40337    parsedQuery = parse(query || '');
40338  } catch (e) {
40339     true && warn(false, e.message);
40340    parsedQuery = {};
40341  }
40342  for (var key in extraQuery) {
40343    var value = extraQuery[key];
40344    parsedQuery[key] = Array.isArray(value)
40345      ? value.map(castQueryParamValue)
40346      : castQueryParamValue(value);
40347  }
40348  return parsedQuery
40349}
40350
40351var castQueryParamValue = function (value) { return (value == null || typeof value === 'object' ? value : String(value)); };
40352
40353function parseQuery (query) {
40354  var res = {};
40355
40356  query = query.trim().replace(/^(\?|#|&)/, '');
40357
40358  if (!query) {
40359    return res
40360  }
40361
40362  query.split('&').forEach(function (param) {
40363    var parts = param.replace(/\+/g, ' ').split('=');
40364    var key = decode(parts.shift());
40365    var val = parts.length > 0 ? decode(parts.join('=')) : null;
40366
40367    if (res[key] === undefined) {
40368      res[key] = val;
40369    } else if (Array.isArray(res[key])) {
40370      res[key].push(val);
40371    } else {
40372      res[key] = [res[key], val];
40373    }
40374  });
40375
40376  return res
40377}
40378
40379function stringifyQuery (obj) {
40380  var res = obj
40381    ? Object.keys(obj)
40382      .map(function (key) {
40383        var val = obj[key];
40384
40385        if (val === undefined) {
40386          return ''
40387        }
40388
40389        if (val === null) {
40390          return encode(key)
40391        }
40392
40393        if (Array.isArray(val)) {
40394          var result = [];
40395          val.forEach(function (val2) {
40396            if (val2 === undefined) {
40397              return
40398            }
40399            if (val2 === null) {
40400              result.push(encode(key));
40401            } else {
40402              result.push(encode(key) + '=' + encode(val2));
40403            }
40404          });
40405          return result.join('&')
40406        }
40407
40408        return encode(key) + '=' + encode(val)
40409      })
40410      .filter(function (x) { return x.length > 0; })
40411      .join('&')
40412    : null;
40413  return res ? ("?" + res) : ''
40414}
40415
40416/*  */
40417
40418var trailingSlashRE = /\/?$/;
40419
40420function createRoute (
40421  record,
40422  location,
40423  redirectedFrom,
40424  router
40425) {
40426  var stringifyQuery = router && router.options.stringifyQuery;
40427
40428  var query = location.query || {};
40429  try {
40430    query = clone(query);
40431  } catch (e) {}
40432
40433  var route = {
40434    name: location.name || (record && record.name),
40435    meta: (record && record.meta) || {},
40436    path: location.path || '/',
40437    hash: location.hash || '',
40438    query: query,
40439    params: location.params || {},
40440    fullPath: getFullPath(location, stringifyQuery),
40441    matched: record ? formatMatch(record) : []
40442  };
40443  if (redirectedFrom) {
40444    route.redirectedFrom = getFullPath(redirectedFrom, stringifyQuery);
40445  }
40446  return Object.freeze(route)
40447}
40448
40449function clone (value) {
40450  if (Array.isArray(value)) {
40451    return value.map(clone)
40452  } else if (value && typeof value === 'object') {
40453    var res = {};
40454    for (var key in value) {
40455      res[key] = clone(value[key]);
40456    }
40457    return res
40458  } else {
40459    return value
40460  }
40461}
40462
40463// the starting route that represents the initial state
40464var START = createRoute(null, {
40465  path: '/'
40466});
40467
40468function formatMatch (record) {
40469  var res = [];
40470  while (record) {
40471    res.unshift(record);
40472    record = record.parent;
40473  }
40474  return res
40475}
40476
40477function getFullPath (
40478  ref,
40479  _stringifyQuery
40480) {
40481  var path = ref.path;
40482  var query = ref.query; if ( query === void 0 ) query = {};
40483  var hash = ref.hash; if ( hash === void 0 ) hash = '';
40484
40485  var stringify = _stringifyQuery || stringifyQuery;
40486  return (path || '/') + stringify(query) + hash
40487}
40488
40489function isSameRoute (a, b, onlyPath) {
40490  if (b === START) {
40491    return a === b
40492  } else if (!b) {
40493    return false
40494  } else if (a.path && b.path) {
40495    return a.path.replace(trailingSlashRE, '') === b.path.replace(trailingSlashRE, '') && (onlyPath ||
40496      a.hash === b.hash &&
40497      isObjectEqual(a.query, b.query))
40498  } else if (a.name && b.name) {
40499    return (
40500      a.name === b.name &&
40501      (onlyPath || (
40502        a.hash === b.hash &&
40503      isObjectEqual(a.query, b.query) &&
40504      isObjectEqual(a.params, b.params))
40505      )
40506    )
40507  } else {
40508    return false
40509  }
40510}
40511
40512function isObjectEqual (a, b) {
40513  if ( a === void 0 ) a = {};
40514  if ( b === void 0 ) b = {};
40515
40516  // handle null value #1566
40517  if (!a || !b) { return a === b }
40518  var aKeys = Object.keys(a).sort();
40519  var bKeys = Object.keys(b).sort();
40520  if (aKeys.length !== bKeys.length) {
40521    return false
40522  }
40523  return aKeys.every(function (key, i) {
40524    var aVal = a[key];
40525    var bKey = bKeys[i];
40526    if (bKey !== key) { return false }
40527    var bVal = b[key];
40528    // query values can be null and undefined
40529    if (aVal == null || bVal == null) { return aVal === bVal }
40530    // check nested equality
40531    if (typeof aVal === 'object' && typeof bVal === 'object') {
40532      return isObjectEqual(aVal, bVal)
40533    }
40534    return String(aVal) === String(bVal)
40535  })
40536}
40537
40538function isIncludedRoute (current, target) {
40539  return (
40540    current.path.replace(trailingSlashRE, '/').indexOf(
40541      target.path.replace(trailingSlashRE, '/')
40542    ) === 0 &&
40543    (!target.hash || current.hash === target.hash) &&
40544    queryIncludes(current.query, target.query)
40545  )
40546}
40547
40548function queryIncludes (current, target) {
40549  for (var key in target) {
40550    if (!(key in current)) {
40551      return false
40552    }
40553  }
40554  return true
40555}
40556
40557function handleRouteEntered (route) {
40558  for (var i = 0; i < route.matched.length; i++) {
40559    var record = route.matched[i];
40560    for (var name in record.instances) {
40561      var instance = record.instances[name];
40562      var cbs = record.enteredCbs[name];
40563      if (!instance || !cbs) { continue }
40564      delete record.enteredCbs[name];
40565      for (var i$1 = 0; i$1 < cbs.length; i$1++) {
40566        if (!instance._isBeingDestroyed) { cbs[i$1](instance); }
40567      }
40568    }
40569  }
40570}
40571
40572var View = {
40573  name: 'RouterView',
40574  functional: true,
40575  props: {
40576    name: {
40577      type: String,
40578      default: 'default'
40579    }
40580  },
40581  render: function render (_, ref) {
40582    var props = ref.props;
40583    var children = ref.children;
40584    var parent = ref.parent;
40585    var data = ref.data;
40586
40587    // used by devtools to display a router-view badge
40588    data.routerView = true;
40589
40590    // directly use parent context's createElement() function
40591    // so that components rendered by router-view can resolve named slots
40592    var h = parent.$createElement;
40593    var name = props.name;
40594    var route = parent.$route;
40595    var cache = parent._routerViewCache || (parent._routerViewCache = {});
40596
40597    // determine current view depth, also check to see if the tree
40598    // has been toggled inactive but kept-alive.
40599    var depth = 0;
40600    var inactive = false;
40601    while (parent && parent._routerRoot !== parent) {
40602      var vnodeData = parent.$vnode ? parent.$vnode.data : {};
40603      if (vnodeData.routerView) {
40604        depth++;
40605      }
40606      if (vnodeData.keepAlive && parent._directInactive && parent._inactive) {
40607        inactive = true;
40608      }
40609      parent = parent.$parent;
40610    }
40611    data.routerViewDepth = depth;
40612
40613    // render previous view if the tree is inactive and kept-alive
40614    if (inactive) {
40615      var cachedData = cache[name];
40616      var cachedComponent = cachedData && cachedData.component;
40617      if (cachedComponent) {
40618        // #2301
40619        // pass props
40620        if (cachedData.configProps) {
40621          fillPropsinData(cachedComponent, data, cachedData.route, cachedData.configProps);
40622        }
40623        return h(cachedComponent, data, children)
40624      } else {
40625        // render previous empty view
40626        return h()
40627      }
40628    }
40629
40630    var matched = route.matched[depth];
40631    var component = matched && matched.components[name];
40632
40633    // render empty node if no matched route or no config component
40634    if (!matched || !component) {
40635      cache[name] = null;
40636      return h()
40637    }
40638
40639    // cache component
40640    cache[name] = { component: component };
40641
40642    // attach instance registration hook
40643    // this will be called in the instance's injected lifecycle hooks
40644    data.registerRouteInstance = function (vm, val) {
40645      // val could be undefined for unregistration
40646      var current = matched.instances[name];
40647      if (
40648        (val && current !== vm) ||
40649        (!val && current === vm)
40650      ) {
40651        matched.instances[name] = val;
40652      }
40653    }
40654
40655    // also register instance in prepatch hook
40656    // in case the same component instance is reused across different routes
40657    ;(data.hook || (data.hook = {})).prepatch = function (_, vnode) {
40658      matched.instances[name] = vnode.componentInstance;
40659    };
40660
40661    // register instance in init hook
40662    // in case kept-alive component be actived when routes changed
40663    data.hook.init = function (vnode) {
40664      if (vnode.data.keepAlive &&
40665        vnode.componentInstance &&
40666        vnode.componentInstance !== matched.instances[name]
40667      ) {
40668        matched.instances[name] = vnode.componentInstance;
40669      }
40670
40671      // if the route transition has already been confirmed then we weren't
40672      // able to call the cbs during confirmation as the component was not
40673      // registered yet, so we call it here.
40674      handleRouteEntered(route);
40675    };
40676
40677    var configProps = matched.props && matched.props[name];
40678    // save route and configProps in cache
40679    if (configProps) {
40680      extend(cache[name], {
40681        route: route,
40682        configProps: configProps
40683      });
40684      fillPropsinData(component, data, route, configProps);
40685    }
40686
40687    return h(component, data, children)
40688  }
40689};
40690
40691function fillPropsinData (component, data, route, configProps) {
40692  // resolve props
40693  var propsToPass = data.props = resolveProps(route, configProps);
40694  if (propsToPass) {
40695    // clone to prevent mutation
40696    propsToPass = data.props = extend({}, propsToPass);
40697    // pass non-declared props as attrs
40698    var attrs = data.attrs = data.attrs || {};
40699    for (var key in propsToPass) {
40700      if (!component.props || !(key in component.props)) {
40701        attrs[key] = propsToPass[key];
40702        delete propsToPass[key];
40703      }
40704    }
40705  }
40706}
40707
40708function resolveProps (route, config) {
40709  switch (typeof config) {
40710    case 'undefined':
40711      return
40712    case 'object':
40713      return config
40714    case 'function':
40715      return config(route)
40716    case 'boolean':
40717      return config ? route.params : undefined
40718    default:
40719      if (true) {
40720        warn(
40721          false,
40722          "props in \"" + (route.path) + "\" is a " + (typeof config) + ", " +
40723          "expecting an object, function or boolean."
40724        );
40725      }
40726  }
40727}
40728
40729/*  */
40730
40731function resolvePath (
40732  relative,
40733  base,
40734  append
40735) {
40736  var firstChar = relative.charAt(0);
40737  if (firstChar === '/') {
40738    return relative
40739  }
40740
40741  if (firstChar === '?' || firstChar === '#') {
40742    return base + relative
40743  }
40744
40745  var stack = base.split('/');
40746
40747  // remove trailing segment if:
40748  // - not appending
40749  // - appending to trailing slash (last segment is empty)
40750  if (!append || !stack[stack.length - 1]) {
40751    stack.pop();
40752  }
40753
40754  // resolve relative path
40755  var segments = relative.replace(/^\//, '').split('/');
40756  for (var i = 0; i < segments.length; i++) {
40757    var segment = segments[i];
40758    if (segment === '..') {
40759      stack.pop();
40760    } else if (segment !== '.') {
40761      stack.push(segment);
40762    }
40763  }
40764
40765  // ensure leading slash
40766  if (stack[0] !== '') {
40767    stack.unshift('');
40768  }
40769
40770  return stack.join('/')
40771}
40772
40773function parsePath (path) {
40774  var hash = '';
40775  var query = '';
40776
40777  var hashIndex = path.indexOf('#');
40778  if (hashIndex >= 0) {
40779    hash = path.slice(hashIndex);
40780    path = path.slice(0, hashIndex);
40781  }
40782
40783  var queryIndex = path.indexOf('?');
40784  if (queryIndex >= 0) {
40785    query = path.slice(queryIndex + 1);
40786    path = path.slice(0, queryIndex);
40787  }
40788
40789  return {
40790    path: path,
40791    query: query,
40792    hash: hash
40793  }
40794}
40795
40796function cleanPath (path) {
40797  return path.replace(/\/(?:\s*\/)+/g, '/')
40798}
40799
40800var isarray = Array.isArray || function (arr) {
40801  return Object.prototype.toString.call(arr) == '[object Array]';
40802};
40803
40804/**
40805 * Expose `pathToRegexp`.
40806 */
40807var pathToRegexp_1 = pathToRegexp;
40808var parse_1 = parse;
40809var compile_1 = compile;
40810var tokensToFunction_1 = tokensToFunction;
40811var tokensToRegExp_1 = tokensToRegExp;
40812
40813/**
40814 * The main path matching regexp utility.
40815 *
40816 * @type {RegExp}
40817 */
40818var PATH_REGEXP = new RegExp([
40819  // Match escaped characters that would otherwise appear in future matches.
40820  // This allows the user to escape special characters that won't transform.
40821  '(\\\\.)',
40822  // Match Express-style parameters and un-named parameters with a prefix
40823  // and optional suffixes. Matches appear as:
40824  //
40825  // "/:test(\\d+)?" => ["/", "test", "\d+", undefined, "?", undefined]
40826  // "/route(\\d+)"  => [undefined, undefined, undefined, "\d+", undefined, undefined]
40827  // "/*"            => ["/", undefined, undefined, undefined, undefined, "*"]
40828  '([\\/.])?(?:(?:\\:(\\w+)(?:\\(((?:\\\\.|[^\\\\()])+)\\))?|\\(((?:\\\\.|[^\\\\()])+)\\))([+*?])?|(\\*))'
40829].join('|'), 'g');
40830
40831/**
40832 * Parse a string for the raw tokens.
40833 *
40834 * @param  {string}  str
40835 * @param  {Object=} options
40836 * @return {!Array}
40837 */
40838function parse (str, options) {
40839  var tokens = [];
40840  var key = 0;
40841  var index = 0;
40842  var path = '';
40843  var defaultDelimiter = options && options.delimiter || '/';
40844  var res;
40845
40846  while ((res = PATH_REGEXP.exec(str)) != null) {
40847    var m = res[0];
40848    var escaped = res[1];
40849    var offset = res.index;
40850    path += str.slice(index, offset);
40851    index = offset + m.length;
40852
40853    // Ignore already escaped sequences.
40854    if (escaped) {
40855      path += escaped[1];
40856      continue
40857    }
40858
40859    var next = str[index];
40860    var prefix = res[2];
40861    var name = res[3];
40862    var capture = res[4];
40863    var group = res[5];
40864    var modifier = res[6];
40865    var asterisk = res[7];
40866
40867    // Push the current path onto the tokens.
40868    if (path) {
40869      tokens.push(path);
40870      path = '';
40871    }
40872
40873    var partial = prefix != null && next != null && next !== prefix;
40874    var repeat = modifier === '+' || modifier === '*';
40875    var optional = modifier === '?' || modifier === '*';
40876    var delimiter = res[2] || defaultDelimiter;
40877    var pattern = capture || group;
40878
40879    tokens.push({
40880      name: name || key++,
40881      prefix: prefix || '',
40882      delimiter: delimiter,
40883      optional: optional,
40884      repeat: repeat,
40885      partial: partial,
40886      asterisk: !!asterisk,
40887      pattern: pattern ? escapeGroup(pattern) : (asterisk ? '.*' : '[^' + escapeString(delimiter) + ']+?')
40888    });
40889  }
40890
40891  // Match any characters still remaining.
40892  if (index < str.length) {
40893    path += str.substr(index);
40894  }
40895
40896  // If the path exists, push it onto the end.
40897  if (path) {
40898    tokens.push(path);
40899  }
40900
40901  return tokens
40902}
40903
40904/**
40905 * Compile a string to a template function for the path.
40906 *
40907 * @param  {string}             str
40908 * @param  {Object=}            options
40909 * @return {!function(Object=, Object=)}
40910 */
40911function compile (str, options) {
40912  return tokensToFunction(parse(str, options), options)
40913}
40914
40915/**
40916 * Prettier encoding of URI path segments.
40917 *
40918 * @param  {string}
40919 * @return {string}
40920 */
40921function encodeURIComponentPretty (str) {
40922  return encodeURI(str).replace(/[\/?#]/g, function (c) {
40923    return '%' + c.charCodeAt(0).toString(16).toUpperCase()
40924  })
40925}
40926
40927/**
40928 * Encode the asterisk parameter. Similar to `pretty`, but allows slashes.
40929 *
40930 * @param  {string}
40931 * @return {string}
40932 */
40933function encodeAsterisk (str) {
40934  return encodeURI(str).replace(/[?#]/g, function (c) {
40935    return '%' + c.charCodeAt(0).toString(16).toUpperCase()
40936  })
40937}
40938
40939/**
40940 * Expose a method for transforming tokens into the path function.
40941 */
40942function tokensToFunction (tokens, options) {
40943  // Compile all the tokens into regexps.
40944  var matches = new Array(tokens.length);
40945
40946  // Compile all the patterns before compilation.
40947  for (var i = 0; i < tokens.length; i++) {
40948    if (typeof tokens[i] === 'object') {
40949      matches[i] = new RegExp('^(?:' + tokens[i].pattern + ')$', flags(options));
40950    }
40951  }
40952
40953  return function (obj, opts) {
40954    var path = '';
40955    var data = obj || {};
40956    var options = opts || {};
40957    var encode = options.pretty ? encodeURIComponentPretty : encodeURIComponent;
40958
40959    for (var i = 0; i < tokens.length; i++) {
40960      var token = tokens[i];
40961
40962      if (typeof token === 'string') {
40963        path += token;
40964
40965        continue
40966      }
40967
40968      var value = data[token.name];
40969      var segment;
40970
40971      if (value == null) {
40972        if (token.optional) {
40973          // Prepend partial segment prefixes.
40974          if (token.partial) {
40975            path += token.prefix;
40976          }
40977
40978          continue
40979        } else {
40980          throw new TypeError('Expected "' + token.name + '" to be defined')
40981        }
40982      }
40983
40984      if (isarray(value)) {
40985        if (!token.repeat) {
40986          throw new TypeError('Expected "' + token.name + '" to not repeat, but received `' + JSON.stringify(value) + '`')
40987        }
40988
40989        if (value.length === 0) {
40990          if (token.optional) {
40991            continue
40992          } else {
40993            throw new TypeError('Expected "' + token.name + '" to not be empty')
40994          }
40995        }
40996
40997        for (var j = 0; j < value.length; j++) {
40998          segment = encode(value[j]);
40999
41000          if (!matches[i].test(segment)) {
41001            throw new TypeError('Expected all "' + token.name + '" to match "' + token.pattern + '", but received `' + JSON.stringify(segment) + '`')
41002          }
41003
41004          path += (j === 0 ? token.prefix : token.delimiter) + segment;
41005        }
41006
41007        continue
41008      }
41009
41010      segment = token.asterisk ? encodeAsterisk(value) : encode(value);
41011
41012      if (!matches[i].test(segment)) {
41013        throw new TypeError('Expected "' + token.name + '" to match "' + token.pattern + '", but received "' + segment + '"')
41014      }
41015
41016      path += token.prefix + segment;
41017    }
41018
41019    return path
41020  }
41021}
41022
41023/**
41024 * Escape a regular expression string.
41025 *
41026 * @param  {string} str
41027 * @return {string}
41028 */
41029function escapeString (str) {
41030  return str.replace(/([.+*?=^!:${}()[\]|\/\\])/g, '\\$1')
41031}
41032
41033/**
41034 * Escape the capturing group by escaping special characters and meaning.
41035 *
41036 * @param  {string} group
41037 * @return {string}
41038 */
41039function escapeGroup (group) {
41040  return group.replace(/([=!:$\/()])/g, '\\$1')
41041}
41042
41043/**
41044 * Attach the keys as a property of the regexp.
41045 *
41046 * @param  {!RegExp} re
41047 * @param  {Array}   keys
41048 * @return {!RegExp}
41049 */
41050function attachKeys (re, keys) {
41051  re.keys = keys;
41052  return re
41053}
41054
41055/**
41056 * Get the flags for a regexp from the options.
41057 *
41058 * @param  {Object} options
41059 * @return {string}
41060 */
41061function flags (options) {
41062  return options && options.sensitive ? '' : 'i'
41063}
41064
41065/**
41066 * Pull out keys from a regexp.
41067 *
41068 * @param  {!RegExp} path
41069 * @param  {!Array}  keys
41070 * @return {!RegExp}
41071 */
41072function regexpToRegexp (path, keys) {
41073  // Use a negative lookahead to match only capturing groups.
41074  var groups = path.source.match(/\((?!\?)/g);
41075
41076  if (groups) {
41077    for (var i = 0; i < groups.length; i++) {
41078      keys.push({
41079        name: i,
41080        prefix: null,
41081        delimiter: null,
41082        optional: false,
41083        repeat: false,
41084        partial: false,
41085        asterisk: false,
41086        pattern: null
41087      });
41088    }
41089  }
41090
41091  return attachKeys(path, keys)
41092}
41093
41094/**
41095 * Transform an array into a regexp.
41096 *
41097 * @param  {!Array}  path
41098 * @param  {Array}   keys
41099 * @param  {!Object} options
41100 * @return {!RegExp}
41101 */
41102function arrayToRegexp (path, keys, options) {
41103  var parts = [];
41104
41105  for (var i = 0; i < path.length; i++) {
41106    parts.push(pathToRegexp(path[i], keys, options).source);
41107  }
41108
41109  var regexp = new RegExp('(?:' + parts.join('|') + ')', flags(options));
41110
41111  return attachKeys(regexp, keys)
41112}
41113
41114/**
41115 * Create a path regexp from string input.
41116 *
41117 * @param  {string}  path
41118 * @param  {!Array}  keys
41119 * @param  {!Object} options
41120 * @return {!RegExp}
41121 */
41122function stringToRegexp (path, keys, options) {
41123  return tokensToRegExp(parse(path, options), keys, options)
41124}
41125
41126/**
41127 * Expose a function for taking tokens and returning a RegExp.
41128 *
41129 * @param  {!Array}          tokens
41130 * @param  {(Array|Object)=} keys
41131 * @param  {Object=}         options
41132 * @return {!RegExp}
41133 */
41134function tokensToRegExp (tokens, keys, options) {
41135  if (!isarray(keys)) {
41136    options = /** @type {!Object} */ (keys || options);
41137    keys = [];
41138  }
41139
41140  options = options || {};
41141
41142  var strict = options.strict;
41143  var end = options.end !== false;
41144  var route = '';
41145
41146  // Iterate over the tokens and create our regexp string.
41147  for (var i = 0; i < tokens.length; i++) {
41148    var token = tokens[i];
41149
41150    if (typeof token === 'string') {
41151      route += escapeString(token);
41152    } else {
41153      var prefix = escapeString(token.prefix);
41154      var capture = '(?:' + token.pattern + ')';
41155
41156      keys.push(token);
41157
41158      if (token.repeat) {
41159        capture += '(?:' + prefix + capture + ')*';
41160      }
41161
41162      if (token.optional) {
41163        if (!token.partial) {
41164          capture = '(?:' + prefix + '(' + capture + '))?';
41165        } else {
41166          capture = prefix + '(' + capture + ')?';
41167        }
41168      } else {
41169        capture = prefix + '(' + capture + ')';
41170      }
41171
41172      route += capture;
41173    }
41174  }
41175
41176  var delimiter = escapeString(options.delimiter || '/');
41177  var endsWithDelimiter = route.slice(-delimiter.length) === delimiter;
41178
41179  // In non-strict mode we allow a slash at the end of match. If the path to
41180  // match already ends with a slash, we remove it for consistency. The slash
41181  // is valid at the end of a path match, not in the middle. This is important
41182  // in non-ending mode, where "/test/" shouldn't match "/test//route".
41183  if (!strict) {
41184    route = (endsWithDelimiter ? route.slice(0, -delimiter.length) : route) + '(?:' + delimiter + '(?=$))?';
41185  }
41186
41187  if (end) {
41188    route += '$';
41189  } else {
41190    // In non-ending mode, we need the capturing groups to match as much as
41191    // possible by using a positive lookahead to the end or next path segment.
41192    route += strict && endsWithDelimiter ? '' : '(?=' + delimiter + '|$)';
41193  }
41194
41195  return attachKeys(new RegExp('^' + route, flags(options)), keys)
41196}
41197
41198/**
41199 * Normalize the given path string, returning a regular expression.
41200 *
41201 * An empty array can be passed in for the keys, which will hold the
41202 * placeholder key descriptions. For example, using `/user/:id`, `keys` will
41203 * contain `[{ name: 'id', delimiter: '/', optional: false, repeat: false }]`.
41204 *
41205 * @param  {(string|RegExp|Array)} path
41206 * @param  {(Array|Object)=}       keys
41207 * @param  {Object=}               options
41208 * @return {!RegExp}
41209 */
41210function pathToRegexp (path, keys, options) {
41211  if (!isarray(keys)) {
41212    options = /** @type {!Object} */ (keys || options);
41213    keys = [];
41214  }
41215
41216  options = options || {};
41217
41218  if (path instanceof RegExp) {
41219    return regexpToRegexp(path, /** @type {!Array} */ (keys))
41220  }
41221
41222  if (isarray(path)) {
41223    return arrayToRegexp(/** @type {!Array} */ (path), /** @type {!Array} */ (keys), options)
41224  }
41225
41226  return stringToRegexp(/** @type {string} */ (path), /** @type {!Array} */ (keys), options)
41227}
41228pathToRegexp_1.parse = parse_1;
41229pathToRegexp_1.compile = compile_1;
41230pathToRegexp_1.tokensToFunction = tokensToFunction_1;
41231pathToRegexp_1.tokensToRegExp = tokensToRegExp_1;
41232
41233/*  */
41234
41235// $flow-disable-line
41236var regexpCompileCache = Object.create(null);
41237
41238function fillParams (
41239  path,
41240  params,
41241  routeMsg
41242) {
41243  params = params || {};
41244  try {
41245    var filler =
41246      regexpCompileCache[path] ||
41247      (regexpCompileCache[path] = pathToRegexp_1.compile(path));
41248
41249    // Fix #2505 resolving asterisk routes { name: 'not-found', params: { pathMatch: '/not-found' }}
41250    // and fix #3106 so that you can work with location descriptor object having params.pathMatch equal to empty string
41251    if (typeof params.pathMatch === 'string') { params[0] = params.pathMatch; }
41252
41253    return filler(params, { pretty: true })
41254  } catch (e) {
41255    if (true) {
41256      // Fix #3072 no warn if `pathMatch` is string
41257      warn(typeof params.pathMatch === 'string', ("missing param for " + routeMsg + ": " + (e.message)));
41258    }
41259    return ''
41260  } finally {
41261    // delete the 0 if it was added
41262    delete params[0];
41263  }
41264}
41265
41266/*  */
41267
41268function normalizeLocation (
41269  raw,
41270  current,
41271  append,
41272  router
41273) {
41274  var next = typeof raw === 'string' ? { path: raw } : raw;
41275  // named target
41276  if (next._normalized) {
41277    return next
41278  } else if (next.name) {
41279    next = extend({}, raw);
41280    var params = next.params;
41281    if (params && typeof params === 'object') {
41282      next.params = extend({}, params);
41283    }
41284    return next
41285  }
41286
41287  // relative params
41288  if (!next.path && next.params && current) {
41289    next = extend({}, next);
41290    next._normalized = true;
41291    var params$1 = extend(extend({}, current.params), next.params);
41292    if (current.name) {
41293      next.name = current.name;
41294      next.params = params$1;
41295    } else if (current.matched.length) {
41296      var rawPath = current.matched[current.matched.length - 1].path;
41297      next.path = fillParams(rawPath, params$1, ("path " + (current.path)));
41298    } else if (true) {
41299      warn(false, "relative params navigation requires a current route.");
41300    }
41301    return next
41302  }
41303
41304  var parsedPath = parsePath(next.path || '');
41305  var basePath = (current && current.path) || '/';
41306  var path = parsedPath.path
41307    ? resolvePath(parsedPath.path, basePath, append || next.append)
41308    : basePath;
41309
41310  var query = resolveQuery(
41311    parsedPath.query,
41312    next.query,
41313    router && router.options.parseQuery
41314  );
41315
41316  var hash = next.hash || parsedPath.hash;
41317  if (hash && hash.charAt(0) !== '#') {
41318    hash = "#" + hash;
41319  }
41320
41321  return {
41322    _normalized: true,
41323    path: path,
41324    query: query,
41325    hash: hash
41326  }
41327}
41328
41329/*  */
41330
41331// work around weird flow bug
41332var toTypes = [String, Object];
41333var eventTypes = [String, Array];
41334
41335var noop = function () {};
41336
41337var warnedCustomSlot;
41338var warnedTagProp;
41339var warnedEventProp;
41340
41341var Link = {
41342  name: 'RouterLink',
41343  props: {
41344    to: {
41345      type: toTypes,
41346      required: true
41347    },
41348    tag: {
41349      type: String,
41350      default: 'a'
41351    },
41352    custom: Boolean,
41353    exact: Boolean,
41354    exactPath: Boolean,
41355    append: Boolean,
41356    replace: Boolean,
41357    activeClass: String,
41358    exactActiveClass: String,
41359    ariaCurrentValue: {
41360      type: String,
41361      default: 'page'
41362    },
41363    event: {
41364      type: eventTypes,
41365      default: 'click'
41366    }
41367  },
41368  render: function render (h) {
41369    var this$1$1 = this;
41370
41371    var router = this.$router;
41372    var current = this.$route;
41373    var ref = router.resolve(
41374      this.to,
41375      current,
41376      this.append
41377    );
41378    var location = ref.location;
41379    var route = ref.route;
41380    var href = ref.href;
41381
41382    var classes = {};
41383    var globalActiveClass = router.options.linkActiveClass;
41384    var globalExactActiveClass = router.options.linkExactActiveClass;
41385    // Support global empty active class
41386    var activeClassFallback =
41387      globalActiveClass == null ? 'router-link-active' : globalActiveClass;
41388    var exactActiveClassFallback =
41389      globalExactActiveClass == null
41390        ? 'router-link-exact-active'
41391        : globalExactActiveClass;
41392    var activeClass =
41393      this.activeClass == null ? activeClassFallback : this.activeClass;
41394    var exactActiveClass =
41395      this.exactActiveClass == null
41396        ? exactActiveClassFallback
41397        : this.exactActiveClass;
41398
41399    var compareTarget = route.redirectedFrom
41400      ? createRoute(null, normalizeLocation(route.redirectedFrom), null, router)
41401      : route;
41402
41403    classes[exactActiveClass] = isSameRoute(current, compareTarget, this.exactPath);
41404    classes[activeClass] = this.exact || this.exactPath
41405      ? classes[exactActiveClass]
41406      : isIncludedRoute(current, compareTarget);
41407
41408    var ariaCurrentValue = classes[exactActiveClass] ? this.ariaCurrentValue : null;
41409
41410    var handler = function (e) {
41411      if (guardEvent(e)) {
41412        if (this$1$1.replace) {
41413          router.replace(location, noop);
41414        } else {
41415          router.push(location, noop);
41416        }
41417      }
41418    };
41419
41420    var on = { click: guardEvent };
41421    if (Array.isArray(this.event)) {
41422      this.event.forEach(function (e) {
41423        on[e] = handler;
41424      });
41425    } else {
41426      on[this.event] = handler;
41427    }
41428
41429    var data = { class: classes };
41430
41431    var scopedSlot =
41432      !this.$scopedSlots.$hasNormal &&
41433      this.$scopedSlots.default &&
41434      this.$scopedSlots.default({
41435        href: href,
41436        route: route,
41437        navigate: handler,
41438        isActive: classes[activeClass],
41439        isExactActive: classes[exactActiveClass]
41440      });
41441
41442    if (scopedSlot) {
41443      if ( true && !this.custom) {
41444        !warnedCustomSlot && warn(false, 'In Vue Router 4, the v-slot API will by default wrap its content with an <a> element. Use the custom prop to remove this warning:\n<router-link v-slot="{ navigate, href }" custom></router-link>\n');
41445        warnedCustomSlot = true;
41446      }
41447      if (scopedSlot.length === 1) {
41448        return scopedSlot[0]
41449      } else if (scopedSlot.length > 1 || !scopedSlot.length) {
41450        if (true) {
41451          warn(
41452            false,
41453            ("<router-link> with to=\"" + (this.to) + "\" is trying to use a scoped slot but it didn't provide exactly one child. Wrapping the content with a span element.")
41454          );
41455        }
41456        return scopedSlot.length === 0 ? h() : h('span', {}, scopedSlot)
41457      }
41458    }
41459
41460    if (true) {
41461      if ('tag' in this.$options.propsData && !warnedTagProp) {
41462        warn(
41463          false,
41464          "<router-link>'s tag prop is deprecated and has been removed in Vue Router 4. Use the v-slot API to remove this warning: https://next.router.vuejs.org/guide/migration/#removal-of-event-and-tag-props-in-router-link."
41465        );
41466        warnedTagProp = true;
41467      }
41468      if ('event' in this.$options.propsData && !warnedEventProp) {
41469        warn(
41470          false,
41471          "<router-link>'s event prop is deprecated and has been removed in Vue Router 4. Use the v-slot API to remove this warning: https://next.router.vuejs.org/guide/migration/#removal-of-event-and-tag-props-in-router-link."
41472        );
41473        warnedEventProp = true;
41474      }
41475    }
41476
41477    if (this.tag === 'a') {
41478      data.on = on;
41479      data.attrs = { href: href, 'aria-current': ariaCurrentValue };
41480    } else {
41481      // find the first <a> child and apply listener and href
41482      var a = findAnchor(this.$slots.default);
41483      if (a) {
41484        // in case the <a> is a static node
41485        a.isStatic = false;
41486        var aData = (a.data = extend({}, a.data));
41487        aData.on = aData.on || {};
41488        // transform existing events in both objects into arrays so we can push later
41489        for (var event in aData.on) {
41490          var handler$1 = aData.on[event];
41491          if (event in on) {
41492            aData.on[event] = Array.isArray(handler$1) ? handler$1 : [handler$1];
41493          }
41494        }
41495        // append new listeners for router-link
41496        for (var event$1 in on) {
41497          if (event$1 in aData.on) {
41498            // on[event] is always a function
41499            aData.on[event$1].push(on[event$1]);
41500          } else {
41501            aData.on[event$1] = handler;
41502          }
41503        }
41504
41505        var aAttrs = (a.data.attrs = extend({}, a.data.attrs));
41506        aAttrs.href = href;
41507        aAttrs['aria-current'] = ariaCurrentValue;
41508      } else {
41509        // doesn't have <a> child, apply listener to self
41510        data.on = on;
41511      }
41512    }
41513
41514    return h(this.tag, data, this.$slots.default)
41515  }
41516};
41517
41518function guardEvent (e) {
41519  // don't redirect with control keys
41520  if (e.metaKey || e.altKey || e.ctrlKey || e.shiftKey) { return }
41521  // don't redirect when preventDefault called
41522  if (e.defaultPrevented) { return }
41523  // don't redirect on right click
41524  if (e.button !== undefined && e.button !== 0) { return }
41525  // don't redirect if `target="_blank"`
41526  if (e.currentTarget && e.currentTarget.getAttribute) {
41527    var target = e.currentTarget.getAttribute('target');
41528    if (/\b_blank\b/i.test(target)) { return }
41529  }
41530  // this may be a Weex event which doesn't have this method
41531  if (e.preventDefault) {
41532    e.preventDefault();
41533  }
41534  return true
41535}
41536
41537function findAnchor (children) {
41538  if (children) {
41539    var child;
41540    for (var i = 0; i < children.length; i++) {
41541      child = children[i];
41542      if (child.tag === 'a') {
41543        return child
41544      }
41545      if (child.children && (child = findAnchor(child.children))) {
41546        return child
41547      }
41548    }
41549  }
41550}
41551
41552var _Vue;
41553
41554function install (Vue) {
41555  if (install.installed && _Vue === Vue) { return }
41556  install.installed = true;
41557
41558  _Vue = Vue;
41559
41560  var isDef = function (v) { return v !== undefined; };
41561
41562  var registerInstance = function (vm, callVal) {
41563    var i = vm.$options._parentVnode;
41564    if (isDef(i) && isDef(i = i.data) && isDef(i = i.registerRouteInstance)) {
41565      i(vm, callVal);
41566    }
41567  };
41568
41569  Vue.mixin({
41570    beforeCreate: function beforeCreate () {
41571      if (isDef(this.$options.router)) {
41572        this._routerRoot = this;
41573        this._router = this.$options.router;
41574        this._router.init(this);
41575        Vue.util.defineReactive(this, '_route', this._router.history.current);
41576      } else {
41577        this._routerRoot = (this.$parent && this.$parent._routerRoot) || this;
41578      }
41579      registerInstance(this, this);
41580    },
41581    destroyed: function destroyed () {
41582      registerInstance(this);
41583    }
41584  });
41585
41586  Object.defineProperty(Vue.prototype, '$router', {
41587    get: function get () { return this._routerRoot._router }
41588  });
41589
41590  Object.defineProperty(Vue.prototype, '$route', {
41591    get: function get () { return this._routerRoot._route }
41592  });
41593
41594  Vue.component('RouterView', View);
41595  Vue.component('RouterLink', Link);
41596
41597  var strats = Vue.config.optionMergeStrategies;
41598  // use the same hook merging strategy for route hooks
41599  strats.beforeRouteEnter = strats.beforeRouteLeave = strats.beforeRouteUpdate = strats.created;
41600}
41601
41602/*  */
41603
41604var inBrowser = typeof window !== 'undefined';
41605
41606/*  */
41607
41608function createRouteMap (
41609  routes,
41610  oldPathList,
41611  oldPathMap,
41612  oldNameMap,
41613  parentRoute
41614) {
41615  // the path list is used to control path matching priority
41616  var pathList = oldPathList || [];
41617  // $flow-disable-line
41618  var pathMap = oldPathMap || Object.create(null);
41619  // $flow-disable-line
41620  var nameMap = oldNameMap || Object.create(null);
41621
41622  routes.forEach(function (route) {
41623    addRouteRecord(pathList, pathMap, nameMap, route, parentRoute);
41624  });
41625
41626  // ensure wildcard routes are always at the end
41627  for (var i = 0, l = pathList.length; i < l; i++) {
41628    if (pathList[i] === '*') {
41629      pathList.push(pathList.splice(i, 1)[0]);
41630      l--;
41631      i--;
41632    }
41633  }
41634
41635  if (true) {
41636    // warn if routes do not include leading slashes
41637    var found = pathList
41638    // check for missing leading slash
41639      .filter(function (path) { return path && path.charAt(0) !== '*' && path.charAt(0) !== '/'; });
41640
41641    if (found.length > 0) {
41642      var pathNames = found.map(function (path) { return ("- " + path); }).join('\n');
41643      warn(false, ("Non-nested routes must include a leading slash character. Fix the following routes: \n" + pathNames));
41644    }
41645  }
41646
41647  return {
41648    pathList: pathList,
41649    pathMap: pathMap,
41650    nameMap: nameMap
41651  }
41652}
41653
41654function addRouteRecord (
41655  pathList,
41656  pathMap,
41657  nameMap,
41658  route,
41659  parent,
41660  matchAs
41661) {
41662  var path = route.path;
41663  var name = route.name;
41664  if (true) {
41665    assert(path != null, "\"path\" is required in a route configuration.");
41666    assert(
41667      typeof route.component !== 'string',
41668      "route config \"component\" for path: " + (String(
41669        path || name
41670      )) + " cannot be a " + "string id. Use an actual component instead."
41671    );
41672
41673    warn(
41674      // eslint-disable-next-line no-control-regex
41675      !/[^\u0000-\u007F]+/.test(path),
41676      "Route with path \"" + path + "\" contains unencoded characters, make sure " +
41677        "your path is correctly encoded before passing it to the router. Use " +
41678        "encodeURI to encode static segments of your path."
41679    );
41680  }
41681
41682  var pathToRegexpOptions =
41683    route.pathToRegexpOptions || {};
41684  var normalizedPath = normalizePath(path, parent, pathToRegexpOptions.strict);
41685
41686  if (typeof route.caseSensitive === 'boolean') {
41687    pathToRegexpOptions.sensitive = route.caseSensitive;
41688  }
41689
41690  var record = {
41691    path: normalizedPath,
41692    regex: compileRouteRegex(normalizedPath, pathToRegexpOptions),
41693    components: route.components || { default: route.component },
41694    alias: route.alias
41695      ? typeof route.alias === 'string'
41696        ? [route.alias]
41697        : route.alias
41698      : [],
41699    instances: {},
41700    enteredCbs: {},
41701    name: name,
41702    parent: parent,
41703    matchAs: matchAs,
41704    redirect: route.redirect,
41705    beforeEnter: route.beforeEnter,
41706    meta: route.meta || {},
41707    props:
41708      route.props == null
41709        ? {}
41710        : route.components
41711          ? route.props
41712          : { default: route.props }
41713  };
41714
41715  if (route.children) {
41716    // Warn if route is named, does not redirect and has a default child route.
41717    // If users navigate to this route by name, the default child will
41718    // not be rendered (GH Issue #629)
41719    if (true) {
41720      if (
41721        route.name &&
41722        !route.redirect &&
41723        route.children.some(function (child) { return /^\/?$/.test(child.path); })
41724      ) {
41725        warn(
41726          false,
41727          "Named Route '" + (route.name) + "' has a default child route. " +
41728            "When navigating to this named route (:to=\"{name: '" + (route.name) + "'}\"), " +
41729            "the default child route will not be rendered. Remove the name from " +
41730            "this route and use the name of the default child route for named " +
41731            "links instead."
41732        );
41733      }
41734    }
41735    route.children.forEach(function (child) {
41736      var childMatchAs = matchAs
41737        ? cleanPath((matchAs + "/" + (child.path)))
41738        : undefined;
41739      addRouteRecord(pathList, pathMap, nameMap, child, record, childMatchAs);
41740    });
41741  }
41742
41743  if (!pathMap[record.path]) {
41744    pathList.push(record.path);
41745    pathMap[record.path] = record;
41746  }
41747
41748  if (route.alias !== undefined) {
41749    var aliases = Array.isArray(route.alias) ? route.alias : [route.alias];
41750    for (var i = 0; i < aliases.length; ++i) {
41751      var alias = aliases[i];
41752      if ( true && alias === path) {
41753        warn(
41754          false,
41755          ("Found an alias with the same value as the path: \"" + path + "\". You have to remove that alias. It will be ignored in development.")
41756        );
41757        // skip in dev to make it work
41758        continue
41759      }
41760
41761      var aliasRoute = {
41762        path: alias,
41763        children: route.children
41764      };
41765      addRouteRecord(
41766        pathList,
41767        pathMap,
41768        nameMap,
41769        aliasRoute,
41770        parent,
41771        record.path || '/' // matchAs
41772      );
41773    }
41774  }
41775
41776  if (name) {
41777    if (!nameMap[name]) {
41778      nameMap[name] = record;
41779    } else if ( true && !matchAs) {
41780      warn(
41781        false,
41782        "Duplicate named routes definition: " +
41783          "{ name: \"" + name + "\", path: \"" + (record.path) + "\" }"
41784      );
41785    }
41786  }
41787}
41788
41789function compileRouteRegex (
41790  path,
41791  pathToRegexpOptions
41792) {
41793  var regex = pathToRegexp_1(path, [], pathToRegexpOptions);
41794  if (true) {
41795    var keys = Object.create(null);
41796    regex.keys.forEach(function (key) {
41797      warn(
41798        !keys[key.name],
41799        ("Duplicate param keys in route with path: \"" + path + "\"")
41800      );
41801      keys[key.name] = true;
41802    });
41803  }
41804  return regex
41805}
41806
41807function normalizePath (
41808  path,
41809  parent,
41810  strict
41811) {
41812  if (!strict) { path = path.replace(/\/$/, ''); }
41813  if (path[0] === '/') { return path }
41814  if (parent == null) { return path }
41815  return cleanPath(((parent.path) + "/" + path))
41816}
41817
41818/*  */
41819
41820
41821
41822function createMatcher (
41823  routes,
41824  router
41825) {
41826  var ref = createRouteMap(routes);
41827  var pathList = ref.pathList;
41828  var pathMap = ref.pathMap;
41829  var nameMap = ref.nameMap;
41830
41831  function addRoutes (routes) {
41832    createRouteMap(routes, pathList, pathMap, nameMap);
41833  }
41834
41835  function addRoute (parentOrRoute, route) {
41836    var parent = (typeof parentOrRoute !== 'object') ? nameMap[parentOrRoute] : undefined;
41837    // $flow-disable-line
41838    createRouteMap([route || parentOrRoute], pathList, pathMap, nameMap, parent);
41839
41840    // add aliases of parent
41841    if (parent && parent.alias.length) {
41842      createRouteMap(
41843        // $flow-disable-line route is defined if parent is
41844        parent.alias.map(function (alias) { return ({ path: alias, children: [route] }); }),
41845        pathList,
41846        pathMap,
41847        nameMap,
41848        parent
41849      );
41850    }
41851  }
41852
41853  function getRoutes () {
41854    return pathList.map(function (path) { return pathMap[path]; })
41855  }
41856
41857  function match (
41858    raw,
41859    currentRoute,
41860    redirectedFrom
41861  ) {
41862    var location = normalizeLocation(raw, currentRoute, false, router);
41863    var name = location.name;
41864
41865    if (name) {
41866      var record = nameMap[name];
41867      if (true) {
41868        warn(record, ("Route with name '" + name + "' does not exist"));
41869      }
41870      if (!record) { return _createRoute(null, location) }
41871      var paramNames = record.regex.keys
41872        .filter(function (key) { return !key.optional; })
41873        .map(function (key) { return key.name; });
41874
41875      if (typeof location.params !== 'object') {
41876        location.params = {};
41877      }
41878
41879      if (currentRoute && typeof currentRoute.params === 'object') {
41880        for (var key in currentRoute.params) {
41881          if (!(key in location.params) && paramNames.indexOf(key) > -1) {
41882            location.params[key] = currentRoute.params[key];
41883          }
41884        }
41885      }
41886
41887      location.path = fillParams(record.path, location.params, ("named route \"" + name + "\""));
41888      return _createRoute(record, location, redirectedFrom)
41889    } else if (location.path) {
41890      location.params = {};
41891      for (var i = 0; i < pathList.length; i++) {
41892        var path = pathList[i];
41893        var record$1 = pathMap[path];
41894        if (matchRoute(record$1.regex, location.path, location.params)) {
41895          return _createRoute(record$1, location, redirectedFrom)
41896        }
41897      }
41898    }
41899    // no match
41900    return _createRoute(null, location)
41901  }
41902
41903  function redirect (
41904    record,
41905    location
41906  ) {
41907    var originalRedirect = record.redirect;
41908    var redirect = typeof originalRedirect === 'function'
41909      ? originalRedirect(createRoute(record, location, null, router))
41910      : originalRedirect;
41911
41912    if (typeof redirect === 'string') {
41913      redirect = { path: redirect };
41914    }
41915
41916    if (!redirect || typeof redirect !== 'object') {
41917      if (true) {
41918        warn(
41919          false, ("invalid redirect option: " + (JSON.stringify(redirect)))
41920        );
41921      }
41922      return _createRoute(null, location)
41923    }
41924
41925    var re = redirect;
41926    var name = re.name;
41927    var path = re.path;
41928    var query = location.query;
41929    var hash = location.hash;
41930    var params = location.params;
41931    query = re.hasOwnProperty('query') ? re.query : query;
41932    hash = re.hasOwnProperty('hash') ? re.hash : hash;
41933    params = re.hasOwnProperty('params') ? re.params : params;
41934
41935    if (name) {
41936      // resolved named direct
41937      var targetRecord = nameMap[name];
41938      if (true) {
41939        assert(targetRecord, ("redirect failed: named route \"" + name + "\" not found."));
41940      }
41941      return match({
41942        _normalized: true,
41943        name: name,
41944        query: query,
41945        hash: hash,
41946        params: params
41947      }, undefined, location)
41948    } else if (path) {
41949      // 1. resolve relative redirect
41950      var rawPath = resolveRecordPath(path, record);
41951      // 2. resolve params
41952      var resolvedPath = fillParams(rawPath, params, ("redirect route with path \"" + rawPath + "\""));
41953      // 3. rematch with existing query and hash
41954      return match({
41955        _normalized: true,
41956        path: resolvedPath,
41957        query: query,
41958        hash: hash
41959      }, undefined, location)
41960    } else {
41961      if (true) {
41962        warn(false, ("invalid redirect option: " + (JSON.stringify(redirect))));
41963      }
41964      return _createRoute(null, location)
41965    }
41966  }
41967
41968  function alias (
41969    record,
41970    location,
41971    matchAs
41972  ) {
41973    var aliasedPath = fillParams(matchAs, location.params, ("aliased route with path \"" + matchAs + "\""));
41974    var aliasedMatch = match({
41975      _normalized: true,
41976      path: aliasedPath
41977    });
41978    if (aliasedMatch) {
41979      var matched = aliasedMatch.matched;
41980      var aliasedRecord = matched[matched.length - 1];
41981      location.params = aliasedMatch.params;
41982      return _createRoute(aliasedRecord, location)
41983    }
41984    return _createRoute(null, location)
41985  }
41986
41987  function _createRoute (
41988    record,
41989    location,
41990    redirectedFrom
41991  ) {
41992    if (record && record.redirect) {
41993      return redirect(record, redirectedFrom || location)
41994    }
41995    if (record && record.matchAs) {
41996      return alias(record, location, record.matchAs)
41997    }
41998    return createRoute(record, location, redirectedFrom, router)
41999  }
42000
42001  return {
42002    match: match,
42003    addRoute: addRoute,
42004    getRoutes: getRoutes,
42005    addRoutes: addRoutes
42006  }
42007}
42008
42009function matchRoute (
42010  regex,
42011  path,
42012  params
42013) {
42014  var m = path.match(regex);
42015
42016  if (!m) {
42017    return false
42018  } else if (!params) {
42019    return true
42020  }
42021
42022  for (var i = 1, len = m.length; i < len; ++i) {
42023    var key = regex.keys[i - 1];
42024    if (key) {
42025      // Fix #1994: using * with props: true generates a param named 0
42026      params[key.name || 'pathMatch'] = typeof m[i] === 'string' ? decode(m[i]) : m[i];
42027    }
42028  }
42029
42030  return true
42031}
42032
42033function resolveRecordPath (path, record) {
42034  return resolvePath(path, record.parent ? record.parent.path : '/', true)
42035}
42036
42037/*  */
42038
42039// use User Timing api (if present) for more accurate key precision
42040var Time =
42041  inBrowser && window.performance && window.performance.now
42042    ? window.performance
42043    : Date;
42044
42045function genStateKey () {
42046  return Time.now().toFixed(3)
42047}
42048
42049var _key = genStateKey();
42050
42051function getStateKey () {
42052  return _key
42053}
42054
42055function setStateKey (key) {
42056  return (_key = key)
42057}
42058
42059/*  */
42060
42061var positionStore = Object.create(null);
42062
42063function setupScroll () {
42064  // Prevent browser scroll behavior on History popstate
42065  if ('scrollRestoration' in window.history) {
42066    window.history.scrollRestoration = 'manual';
42067  }
42068  // Fix for #1585 for Firefox
42069  // Fix for #2195 Add optional third attribute to workaround a bug in safari https://bugs.webkit.org/show_bug.cgi?id=182678
42070  // Fix for #2774 Support for apps loaded from Windows file shares not mapped to network drives: replaced location.origin with
42071  // window.location.protocol + '//' + window.location.host
42072  // location.host contains the port and location.hostname doesn't
42073  var protocolAndPath = window.location.protocol + '//' + window.location.host;
42074  var absolutePath = window.location.href.replace(protocolAndPath, '');
42075  // preserve existing history state as it could be overriden by the user
42076  var stateCopy = extend({}, window.history.state);
42077  stateCopy.key = getStateKey();
42078  window.history.replaceState(stateCopy, '', absolutePath);
42079  window.addEventListener('popstate', handlePopState);
42080  return function () {
42081    window.removeEventListener('popstate', handlePopState);
42082  }
42083}
42084
42085function handleScroll (
42086  router,
42087  to,
42088  from,
42089  isPop
42090) {
42091  if (!router.app) {
42092    return
42093  }
42094
42095  var behavior = router.options.scrollBehavior;
42096  if (!behavior) {
42097    return
42098  }
42099
42100  if (true) {
42101    assert(typeof behavior === 'function', "scrollBehavior must be a function");
42102  }
42103
42104  // wait until re-render finishes before scrolling
42105  router.app.$nextTick(function () {
42106    var position = getScrollPosition();
42107    var shouldScroll = behavior.call(
42108      router,
42109      to,
42110      from,
42111      isPop ? position : null
42112    );
42113
42114    if (!shouldScroll) {
42115      return
42116    }
42117
42118    if (typeof shouldScroll.then === 'function') {
42119      shouldScroll
42120        .then(function (shouldScroll) {
42121          scrollToPosition((shouldScroll), position);
42122        })
42123        .catch(function (err) {
42124          if (true) {
42125            assert(false, err.toString());
42126          }
42127        });
42128    } else {
42129      scrollToPosition(shouldScroll, position);
42130    }
42131  });
42132}
42133
42134function saveScrollPosition () {
42135  var key = getStateKey();
42136  if (key) {
42137    positionStore[key] = {
42138      x: window.pageXOffset,
42139      y: window.pageYOffset
42140    };
42141  }
42142}
42143
42144function handlePopState (e) {
42145  saveScrollPosition();
42146  if (e.state && e.state.key) {
42147    setStateKey(e.state.key);
42148  }
42149}
42150
42151function getScrollPosition () {
42152  var key = getStateKey();
42153  if (key) {
42154    return positionStore[key]
42155  }
42156}
42157
42158function getElementPosition (el, offset) {
42159  var docEl = document.documentElement;
42160  var docRect = docEl.getBoundingClientRect();
42161  var elRect = el.getBoundingClientRect();
42162  return {
42163    x: elRect.left - docRect.left - offset.x,
42164    y: elRect.top - docRect.top - offset.y
42165  }
42166}
42167
42168function isValidPosition (obj) {
42169  return isNumber(obj.x) || isNumber(obj.y)
42170}
42171
42172function normalizePosition (obj) {
42173  return {
42174    x: isNumber(obj.x) ? obj.x : window.pageXOffset,
42175    y: isNumber(obj.y) ? obj.y : window.pageYOffset
42176  }
42177}
42178
42179function normalizeOffset (obj) {
42180  return {
42181    x: isNumber(obj.x) ? obj.x : 0,
42182    y: isNumber(obj.y) ? obj.y : 0
42183  }
42184}
42185
42186function isNumber (v) {
42187  return typeof v === 'number'
42188}
42189
42190var hashStartsWithNumberRE = /^#\d/;
42191
42192function scrollToPosition (shouldScroll, position) {
42193  var isObject = typeof shouldScroll === 'object';
42194  if (isObject && typeof shouldScroll.selector === 'string') {
42195    // getElementById would still fail if the selector contains a more complicated query like #main[data-attr]
42196    // but at the same time, it doesn't make much sense to select an element with an id and an extra selector
42197    var el = hashStartsWithNumberRE.test(shouldScroll.selector) // $flow-disable-line
42198      ? document.getElementById(shouldScroll.selector.slice(1)) // $flow-disable-line
42199      : document.querySelector(shouldScroll.selector);
42200
42201    if (el) {
42202      var offset =
42203        shouldScroll.offset && typeof shouldScroll.offset === 'object'
42204          ? shouldScroll.offset
42205          : {};
42206      offset = normalizeOffset(offset);
42207      position = getElementPosition(el, offset);
42208    } else if (isValidPosition(shouldScroll)) {
42209      position = normalizePosition(shouldScroll);
42210    }
42211  } else if (isObject && isValidPosition(shouldScroll)) {
42212    position = normalizePosition(shouldScroll);
42213  }
42214
42215  if (position) {
42216    // $flow-disable-line
42217    if ('scrollBehavior' in document.documentElement.style) {
42218      window.scrollTo({
42219        left: position.x,
42220        top: position.y,
42221        // $flow-disable-line
42222        behavior: shouldScroll.behavior
42223      });
42224    } else {
42225      window.scrollTo(position.x, position.y);
42226    }
42227  }
42228}
42229
42230/*  */
42231
42232var supportsPushState =
42233  inBrowser &&
42234  (function () {
42235    var ua = window.navigator.userAgent;
42236
42237    if (
42238      (ua.indexOf('Android 2.') !== -1 || ua.indexOf('Android 4.0') !== -1) &&
42239      ua.indexOf('Mobile Safari') !== -1 &&
42240      ua.indexOf('Chrome') === -1 &&
42241      ua.indexOf('Windows Phone') === -1
42242    ) {
42243      return false
42244    }
42245
42246    return window.history && typeof window.history.pushState === 'function'
42247  })();
42248
42249function pushState (url, replace) {
42250  saveScrollPosition();
42251  // try...catch the pushState call to get around Safari
42252  // DOM Exception 18 where it limits to 100 pushState calls
42253  var history = window.history;
42254  try {
42255    if (replace) {
42256      // preserve existing history state as it could be overriden by the user
42257      var stateCopy = extend({}, history.state);
42258      stateCopy.key = getStateKey();
42259      history.replaceState(stateCopy, '', url);
42260    } else {
42261      history.pushState({ key: setStateKey(genStateKey()) }, '', url);
42262    }
42263  } catch (e) {
42264    window.location[replace ? 'replace' : 'assign'](url);
42265  }
42266}
42267
42268function replaceState (url) {
42269  pushState(url, true);
42270}
42271
42272// When changing thing, also edit router.d.ts
42273var NavigationFailureType = {
42274  redirected: 2,
42275  aborted: 4,
42276  cancelled: 8,
42277  duplicated: 16
42278};
42279
42280function createNavigationRedirectedError (from, to) {
42281  return createRouterError(
42282    from,
42283    to,
42284    NavigationFailureType.redirected,
42285    ("Redirected when going from \"" + (from.fullPath) + "\" to \"" + (stringifyRoute(
42286      to
42287    )) + "\" via a navigation guard.")
42288  )
42289}
42290
42291function createNavigationDuplicatedError (from, to) {
42292  var error = createRouterError(
42293    from,
42294    to,
42295    NavigationFailureType.duplicated,
42296    ("Avoided redundant navigation to current location: \"" + (from.fullPath) + "\".")
42297  );
42298  // backwards compatible with the first introduction of Errors
42299  error.name = 'NavigationDuplicated';
42300  return error
42301}
42302
42303function createNavigationCancelledError (from, to) {
42304  return createRouterError(
42305    from,
42306    to,
42307    NavigationFailureType.cancelled,
42308    ("Navigation cancelled from \"" + (from.fullPath) + "\" to \"" + (to.fullPath) + "\" with a new navigation.")
42309  )
42310}
42311
42312function createNavigationAbortedError (from, to) {
42313  return createRouterError(
42314    from,
42315    to,
42316    NavigationFailureType.aborted,
42317    ("Navigation aborted from \"" + (from.fullPath) + "\" to \"" + (to.fullPath) + "\" via a navigation guard.")
42318  )
42319}
42320
42321function createRouterError (from, to, type, message) {
42322  var error = new Error(message);
42323  error._isRouter = true;
42324  error.from = from;
42325  error.to = to;
42326  error.type = type;
42327
42328  return error
42329}
42330
42331var propertiesToLog = ['params', 'query', 'hash'];
42332
42333function stringifyRoute (to) {
42334  if (typeof to === 'string') { return to }
42335  if ('path' in to) { return to.path }
42336  var location = {};
42337  propertiesToLog.forEach(function (key) {
42338    if (key in to) { location[key] = to[key]; }
42339  });
42340  return JSON.stringify(location, null, 2)
42341}
42342
42343function isError (err) {
42344  return Object.prototype.toString.call(err).indexOf('Error') > -1
42345}
42346
42347function isNavigationFailure (err, errorType) {
42348  return (
42349    isError(err) &&
42350    err._isRouter &&
42351    (errorType == null || err.type === errorType)
42352  )
42353}
42354
42355/*  */
42356
42357function runQueue (queue, fn, cb) {
42358  var step = function (index) {
42359    if (index >= queue.length) {
42360      cb();
42361    } else {
42362      if (queue[index]) {
42363        fn(queue[index], function () {
42364          step(index + 1);
42365        });
42366      } else {
42367        step(index + 1);
42368      }
42369    }
42370  };
42371  step(0);
42372}
42373
42374/*  */
42375
42376function resolveAsyncComponents (matched) {
42377  return function (to, from, next) {
42378    var hasAsync = false;
42379    var pending = 0;
42380    var error = null;
42381
42382    flatMapComponents(matched, function (def, _, match, key) {
42383      // if it's a function and doesn't have cid attached,
42384      // assume it's an async component resolve function.
42385      // we are not using Vue's default async resolving mechanism because
42386      // we want to halt the navigation until the incoming component has been
42387      // resolved.
42388      if (typeof def === 'function' && def.cid === undefined) {
42389        hasAsync = true;
42390        pending++;
42391
42392        var resolve = once(function (resolvedDef) {
42393          if (isESModule(resolvedDef)) {
42394            resolvedDef = resolvedDef.default;
42395          }
42396          // save resolved on async factory in case it's used elsewhere
42397          def.resolved = typeof resolvedDef === 'function'
42398            ? resolvedDef
42399            : _Vue.extend(resolvedDef);
42400          match.components[key] = resolvedDef;
42401          pending--;
42402          if (pending <= 0) {
42403            next();
42404          }
42405        });
42406
42407        var reject = once(function (reason) {
42408          var msg = "Failed to resolve async component " + key + ": " + reason;
42409           true && warn(false, msg);
42410          if (!error) {
42411            error = isError(reason)
42412              ? reason
42413              : new Error(msg);
42414            next(error);
42415          }
42416        });
42417
42418        var res;
42419        try {
42420          res = def(resolve, reject);
42421        } catch (e) {
42422          reject(e);
42423        }
42424        if (res) {
42425          if (typeof res.then === 'function') {
42426            res.then(resolve, reject);
42427          } else {
42428            // new syntax in Vue 2.3
42429            var comp = res.component;
42430            if (comp && typeof comp.then === 'function') {
42431              comp.then(resolve, reject);
42432            }
42433          }
42434        }
42435      }
42436    });
42437
42438    if (!hasAsync) { next(); }
42439  }
42440}
42441
42442function flatMapComponents (
42443  matched,
42444  fn
42445) {
42446  return flatten(matched.map(function (m) {
42447    return Object.keys(m.components).map(function (key) { return fn(
42448      m.components[key],
42449      m.instances[key],
42450      m, key
42451    ); })
42452  }))
42453}
42454
42455function flatten (arr) {
42456  return Array.prototype.concat.apply([], arr)
42457}
42458
42459var hasSymbol =
42460  typeof Symbol === 'function' &&
42461  typeof Symbol.toStringTag === 'symbol';
42462
42463function isESModule (obj) {
42464  return obj.__esModule || (hasSymbol && obj[Symbol.toStringTag] === 'Module')
42465}
42466
42467// in Webpack 2, require.ensure now also returns a Promise
42468// so the resolve/reject functions may get called an extra time
42469// if the user uses an arrow function shorthand that happens to
42470// return that Promise.
42471function once (fn) {
42472  var called = false;
42473  return function () {
42474    var args = [], len = arguments.length;
42475    while ( len-- ) args[ len ] = arguments[ len ];
42476
42477    if (called) { return }
42478    called = true;
42479    return fn.apply(this, args)
42480  }
42481}
42482
42483/*  */
42484
42485var History = function History (router, base) {
42486  this.router = router;
42487  this.base = normalizeBase(base);
42488  // start with a route object that stands for "nowhere"
42489  this.current = START;
42490  this.pending = null;
42491  this.ready = false;
42492  this.readyCbs = [];
42493  this.readyErrorCbs = [];
42494  this.errorCbs = [];
42495  this.listeners = [];
42496};
42497
42498History.prototype.listen = function listen (cb) {
42499  this.cb = cb;
42500};
42501
42502History.prototype.onReady = function onReady (cb, errorCb) {
42503  if (this.ready) {
42504    cb();
42505  } else {
42506    this.readyCbs.push(cb);
42507    if (errorCb) {
42508      this.readyErrorCbs.push(errorCb);
42509    }
42510  }
42511};
42512
42513History.prototype.onError = function onError (errorCb) {
42514  this.errorCbs.push(errorCb);
42515};
42516
42517History.prototype.transitionTo = function transitionTo (
42518  location,
42519  onComplete,
42520  onAbort
42521) {
42522    var this$1$1 = this;
42523
42524  var route;
42525  // catch redirect option https://github.com/vuejs/vue-router/issues/3201
42526  try {
42527    route = this.router.match(location, this.current);
42528  } catch (e) {
42529    this.errorCbs.forEach(function (cb) {
42530      cb(e);
42531    });
42532    // Exception should still be thrown
42533    throw e
42534  }
42535  var prev = this.current;
42536  this.confirmTransition(
42537    route,
42538    function () {
42539      this$1$1.updateRoute(route);
42540      onComplete && onComplete(route);
42541      this$1$1.ensureURL();
42542      this$1$1.router.afterHooks.forEach(function (hook) {
42543        hook && hook(route, prev);
42544      });
42545
42546      // fire ready cbs once
42547      if (!this$1$1.ready) {
42548        this$1$1.ready = true;
42549        this$1$1.readyCbs.forEach(function (cb) {
42550          cb(route);
42551        });
42552      }
42553    },
42554    function (err) {
42555      if (onAbort) {
42556        onAbort(err);
42557      }
42558      if (err && !this$1$1.ready) {
42559        // Initial redirection should not mark the history as ready yet
42560        // because it's triggered by the redirection instead
42561        // https://github.com/vuejs/vue-router/issues/3225
42562        // https://github.com/vuejs/vue-router/issues/3331
42563        if (!isNavigationFailure(err, NavigationFailureType.redirected) || prev !== START) {
42564          this$1$1.ready = true;
42565          this$1$1.readyErrorCbs.forEach(function (cb) {
42566            cb(err);
42567          });
42568        }
42569      }
42570    }
42571  );
42572};
42573
42574History.prototype.confirmTransition = function confirmTransition (route, onComplete, onAbort) {
42575    var this$1$1 = this;
42576
42577  var current = this.current;
42578  this.pending = route;
42579  var abort = function (err) {
42580    // changed after adding errors with
42581    // https://github.com/vuejs/vue-router/pull/3047 before that change,
42582    // redirect and aborted navigation would produce an err == null
42583    if (!isNavigationFailure(err) && isError(err)) {
42584      if (this$1$1.errorCbs.length) {
42585        this$1$1.errorCbs.forEach(function (cb) {
42586          cb(err);
42587        });
42588      } else {
42589        if (true) {
42590          warn(false, 'uncaught error during route navigation:');
42591        }
42592        console.error(err);
42593      }
42594    }
42595    onAbort && onAbort(err);
42596  };
42597  var lastRouteIndex = route.matched.length - 1;
42598  var lastCurrentIndex = current.matched.length - 1;
42599  if (
42600    isSameRoute(route, current) &&
42601    // in the case the route map has been dynamically appended to
42602    lastRouteIndex === lastCurrentIndex &&
42603    route.matched[lastRouteIndex] === current.matched[lastCurrentIndex]
42604  ) {
42605    this.ensureURL();
42606    if (route.hash) {
42607      handleScroll(this.router, current, route, false);
42608    }
42609    return abort(createNavigationDuplicatedError(current, route))
42610  }
42611
42612  var ref = resolveQueue(
42613    this.current.matched,
42614    route.matched
42615  );
42616    var updated = ref.updated;
42617    var deactivated = ref.deactivated;
42618    var activated = ref.activated;
42619
42620  var queue = [].concat(
42621    // in-component leave guards
42622    extractLeaveGuards(deactivated),
42623    // global before hooks
42624    this.router.beforeHooks,
42625    // in-component update hooks
42626    extractUpdateHooks(updated),
42627    // in-config enter guards
42628    activated.map(function (m) { return m.beforeEnter; }),
42629    // async components
42630    resolveAsyncComponents(activated)
42631  );
42632
42633  var iterator = function (hook, next) {
42634    if (this$1$1.pending !== route) {
42635      return abort(createNavigationCancelledError(current, route))
42636    }
42637    try {
42638      hook(route, current, function (to) {
42639        if (to === false) {
42640          // next(false) -> abort navigation, ensure current URL
42641          this$1$1.ensureURL(true);
42642          abort(createNavigationAbortedError(current, route));
42643        } else if (isError(to)) {
42644          this$1$1.ensureURL(true);
42645          abort(to);
42646        } else if (
42647          typeof to === 'string' ||
42648          (typeof to === 'object' &&
42649            (typeof to.path === 'string' || typeof to.name === 'string'))
42650        ) {
42651          // next('/') or next({ path: '/' }) -> redirect
42652          abort(createNavigationRedirectedError(current, route));
42653          if (typeof to === 'object' && to.replace) {
42654            this$1$1.replace(to);
42655          } else {
42656            this$1$1.push(to);
42657          }
42658        } else {
42659          // confirm transition and pass on the value
42660          next(to);
42661        }
42662      });
42663    } catch (e) {
42664      abort(e);
42665    }
42666  };
42667
42668  runQueue(queue, iterator, function () {
42669    // wait until async components are resolved before
42670    // extracting in-component enter guards
42671    var enterGuards = extractEnterGuards(activated);
42672    var queue = enterGuards.concat(this$1$1.router.resolveHooks);
42673    runQueue(queue, iterator, function () {
42674      if (this$1$1.pending !== route) {
42675        return abort(createNavigationCancelledError(current, route))
42676      }
42677      this$1$1.pending = null;
42678      onComplete(route);
42679      if (this$1$1.router.app) {
42680        this$1$1.router.app.$nextTick(function () {
42681          handleRouteEntered(route);
42682        });
42683      }
42684    });
42685  });
42686};
42687
42688History.prototype.updateRoute = function updateRoute (route) {
42689  this.current = route;
42690  this.cb && this.cb(route);
42691};
42692
42693History.prototype.setupListeners = function setupListeners () {
42694  // Default implementation is empty
42695};
42696
42697History.prototype.teardown = function teardown () {
42698  // clean up event listeners
42699  // https://github.com/vuejs/vue-router/issues/2341
42700  this.listeners.forEach(function (cleanupListener) {
42701    cleanupListener();
42702  });
42703  this.listeners = [];
42704
42705  // reset current history route
42706  // https://github.com/vuejs/vue-router/issues/3294
42707  this.current = START;
42708  this.pending = null;
42709};
42710
42711function normalizeBase (base) {
42712  if (!base) {
42713    if (inBrowser) {
42714      // respect <base> tag
42715      var baseEl = document.querySelector('base');
42716      base = (baseEl && baseEl.getAttribute('href')) || '/';
42717      // strip full URL origin
42718      base = base.replace(/^https?:\/\/[^\/]+/, '');
42719    } else {
42720      base = '/';
42721    }
42722  }
42723  // make sure there's the starting slash
42724  if (base.charAt(0) !== '/') {
42725    base = '/' + base;
42726  }
42727  // remove trailing slash
42728  return base.replace(/\/$/, '')
42729}
42730
42731function resolveQueue (
42732  current,
42733  next
42734) {
42735  var i;
42736  var max = Math.max(current.length, next.length);
42737  for (i = 0; i < max; i++) {
42738    if (current[i] !== next[i]) {
42739      break
42740    }
42741  }
42742  return {
42743    updated: next.slice(0, i),
42744    activated: next.slice(i),
42745    deactivated: current.slice(i)
42746  }
42747}
42748
42749function extractGuards (
42750  records,
42751  name,
42752  bind,
42753  reverse
42754) {
42755  var guards = flatMapComponents(records, function (def, instance, match, key) {
42756    var guard = extractGuard(def, name);
42757    if (guard) {
42758      return Array.isArray(guard)
42759        ? guard.map(function (guard) { return bind(guard, instance, match, key); })
42760        : bind(guard, instance, match, key)
42761    }
42762  });
42763  return flatten(reverse ? guards.reverse() : guards)
42764}
42765
42766function extractGuard (
42767  def,
42768  key
42769) {
42770  if (typeof def !== 'function') {
42771    // extend now so that global mixins are applied.
42772    def = _Vue.extend(def);
42773  }
42774  return def.options[key]
42775}
42776
42777function extractLeaveGuards (deactivated) {
42778  return extractGuards(deactivated, 'beforeRouteLeave', bindGuard, true)
42779}
42780
42781function extractUpdateHooks (updated) {
42782  return extractGuards(updated, 'beforeRouteUpdate', bindGuard)
42783}
42784
42785function bindGuard (guard, instance) {
42786  if (instance) {
42787    return function boundRouteGuard () {
42788      return guard.apply(instance, arguments)
42789    }
42790  }
42791}
42792
42793function extractEnterGuards (
42794  activated
42795) {
42796  return extractGuards(
42797    activated,
42798    'beforeRouteEnter',
42799    function (guard, _, match, key) {
42800      return bindEnterGuard(guard, match, key)
42801    }
42802  )
42803}
42804
42805function bindEnterGuard (
42806  guard,
42807  match,
42808  key
42809) {
42810  return function routeEnterGuard (to, from, next) {
42811    return guard(to, from, function (cb) {
42812      if (typeof cb === 'function') {
42813        if (!match.enteredCbs[key]) {
42814          match.enteredCbs[key] = [];
42815        }
42816        match.enteredCbs[key].push(cb);
42817      }
42818      next(cb);
42819    })
42820  }
42821}
42822
42823/*  */
42824
42825var HTML5History = /*@__PURE__*/(function (History) {
42826  function HTML5History (router, base) {
42827    History.call(this, router, base);
42828
42829    this._startLocation = getLocation(this.base);
42830  }
42831
42832  if ( History ) HTML5History.__proto__ = History;
42833  HTML5History.prototype = Object.create( History && History.prototype );
42834  HTML5History.prototype.constructor = HTML5History;
42835
42836  HTML5History.prototype.setupListeners = function setupListeners () {
42837    var this$1$1 = this;
42838
42839    if (this.listeners.length > 0) {
42840      return
42841    }
42842
42843    var router = this.router;
42844    var expectScroll = router.options.scrollBehavior;
42845    var supportsScroll = supportsPushState && expectScroll;
42846
42847    if (supportsScroll) {
42848      this.listeners.push(setupScroll());
42849    }
42850
42851    var handleRoutingEvent = function () {
42852      var current = this$1$1.current;
42853
42854      // Avoiding first `popstate` event dispatched in some browsers but first
42855      // history route not updated since async guard at the same time.
42856      var location = getLocation(this$1$1.base);
42857      if (this$1$1.current === START && location === this$1$1._startLocation) {
42858        return
42859      }
42860
42861      this$1$1.transitionTo(location, function (route) {
42862        if (supportsScroll) {
42863          handleScroll(router, route, current, true);
42864        }
42865      });
42866    };
42867    window.addEventListener('popstate', handleRoutingEvent);
42868    this.listeners.push(function () {
42869      window.removeEventListener('popstate', handleRoutingEvent);
42870    });
42871  };
42872
42873  HTML5History.prototype.go = function go (n) {
42874    window.history.go(n);
42875  };
42876
42877  HTML5History.prototype.push = function push (location, onComplete, onAbort) {
42878    var this$1$1 = this;
42879
42880    var ref = this;
42881    var fromRoute = ref.current;
42882    this.transitionTo(location, function (route) {
42883      pushState(cleanPath(this$1$1.base + route.fullPath));
42884      handleScroll(this$1$1.router, route, fromRoute, false);
42885      onComplete && onComplete(route);
42886    }, onAbort);
42887  };
42888
42889  HTML5History.prototype.replace = function replace (location, onComplete, onAbort) {
42890    var this$1$1 = this;
42891
42892    var ref = this;
42893    var fromRoute = ref.current;
42894    this.transitionTo(location, function (route) {
42895      replaceState(cleanPath(this$1$1.base + route.fullPath));
42896      handleScroll(this$1$1.router, route, fromRoute, false);
42897      onComplete && onComplete(route);
42898    }, onAbort);
42899  };
42900
42901  HTML5History.prototype.ensureURL = function ensureURL (push) {
42902    if (getLocation(this.base) !== this.current.fullPath) {
42903      var current = cleanPath(this.base + this.current.fullPath);
42904      push ? pushState(current) : replaceState(current);
42905    }
42906  };
42907
42908  HTML5History.prototype.getCurrentLocation = function getCurrentLocation () {
42909    return getLocation(this.base)
42910  };
42911
42912  return HTML5History;
42913}(History));
42914
42915function getLocation (base) {
42916  var path = window.location.pathname;
42917  var pathLowerCase = path.toLowerCase();
42918  var baseLowerCase = base.toLowerCase();
42919  // base="/a" shouldn't turn path="/app" into "/a/pp"
42920  // https://github.com/vuejs/vue-router/issues/3555
42921  // so we ensure the trailing slash in the base
42922  if (base && ((pathLowerCase === baseLowerCase) ||
42923    (pathLowerCase.indexOf(cleanPath(baseLowerCase + '/')) === 0))) {
42924    path = path.slice(base.length);
42925  }
42926  return (path || '/') + window.location.search + window.location.hash
42927}
42928
42929/*  */
42930
42931var HashHistory = /*@__PURE__*/(function (History) {
42932  function HashHistory (router, base, fallback) {
42933    History.call(this, router, base);
42934    // check history fallback deeplinking
42935    if (fallback && checkFallback(this.base)) {
42936      return
42937    }
42938    ensureSlash();
42939  }
42940
42941  if ( History ) HashHistory.__proto__ = History;
42942  HashHistory.prototype = Object.create( History && History.prototype );
42943  HashHistory.prototype.constructor = HashHistory;
42944
42945  // this is delayed until the app mounts
42946  // to avoid the hashchange listener being fired too early
42947  HashHistory.prototype.setupListeners = function setupListeners () {
42948    var this$1$1 = this;
42949
42950    if (this.listeners.length > 0) {
42951      return
42952    }
42953
42954    var router = this.router;
42955    var expectScroll = router.options.scrollBehavior;
42956    var supportsScroll = supportsPushState && expectScroll;
42957
42958    if (supportsScroll) {
42959      this.listeners.push(setupScroll());
42960    }
42961
42962    var handleRoutingEvent = function () {
42963      var current = this$1$1.current;
42964      if (!ensureSlash()) {
42965        return
42966      }
42967      this$1$1.transitionTo(getHash(), function (route) {
42968        if (supportsScroll) {
42969          handleScroll(this$1$1.router, route, current, true);
42970        }
42971        if (!supportsPushState) {
42972          replaceHash(route.fullPath);
42973        }
42974      });
42975    };
42976    var eventType = supportsPushState ? 'popstate' : 'hashchange';
42977    window.addEventListener(
42978      eventType,
42979      handleRoutingEvent
42980    );
42981    this.listeners.push(function () {
42982      window.removeEventListener(eventType, handleRoutingEvent);
42983    });
42984  };
42985
42986  HashHistory.prototype.push = function push (location, onComplete, onAbort) {
42987    var this$1$1 = this;
42988
42989    var ref = this;
42990    var fromRoute = ref.current;
42991    this.transitionTo(
42992      location,
42993      function (route) {
42994        pushHash(route.fullPath);
42995        handleScroll(this$1$1.router, route, fromRoute, false);
42996        onComplete && onComplete(route);
42997      },
42998      onAbort
42999    );
43000  };
43001
43002  HashHistory.prototype.replace = function replace (location, onComplete, onAbort) {
43003    var this$1$1 = this;
43004
43005    var ref = this;
43006    var fromRoute = ref.current;
43007    this.transitionTo(
43008      location,
43009      function (route) {
43010        replaceHash(route.fullPath);
43011        handleScroll(this$1$1.router, route, fromRoute, false);
43012        onComplete && onComplete(route);
43013      },
43014      onAbort
43015    );
43016  };
43017
43018  HashHistory.prototype.go = function go (n) {
43019    window.history.go(n);
43020  };
43021
43022  HashHistory.prototype.ensureURL = function ensureURL (push) {
43023    var current = this.current.fullPath;
43024    if (getHash() !== current) {
43025      push ? pushHash(current) : replaceHash(current);
43026    }
43027  };
43028
43029  HashHistory.prototype.getCurrentLocation = function getCurrentLocation () {
43030    return getHash()
43031  };
43032
43033  return HashHistory;
43034}(History));
43035
43036function checkFallback (base) {
43037  var location = getLocation(base);
43038  if (!/^\/#/.test(location)) {
43039    window.location.replace(cleanPath(base + '/#' + location));
43040    return true
43041  }
43042}
43043
43044function ensureSlash () {
43045  var path = getHash();
43046  if (path.charAt(0) === '/') {
43047    return true
43048  }
43049  replaceHash('/' + path);
43050  return false
43051}
43052
43053function getHash () {
43054  // We can't use window.location.hash here because it's not
43055  // consistent across browsers - Firefox will pre-decode it!
43056  var href = window.location.href;
43057  var index = href.indexOf('#');
43058  // empty path
43059  if (index < 0) { return '' }
43060
43061  href = href.slice(index + 1);
43062
43063  return href
43064}
43065
43066function getUrl (path) {
43067  var href = window.location.href;
43068  var i = href.indexOf('#');
43069  var base = i >= 0 ? href.slice(0, i) : href;
43070  return (base + "#" + path)
43071}
43072
43073function pushHash (path) {
43074  if (supportsPushState) {
43075    pushState(getUrl(path));
43076  } else {
43077    window.location.hash = path;
43078  }
43079}
43080
43081function replaceHash (path) {
43082  if (supportsPushState) {
43083    replaceState(getUrl(path));
43084  } else {
43085    window.location.replace(getUrl(path));
43086  }
43087}
43088
43089/*  */
43090
43091var AbstractHistory = /*@__PURE__*/(function (History) {
43092  function AbstractHistory (router, base) {
43093    History.call(this, router, base);
43094    this.stack = [];
43095    this.index = -1;
43096  }
43097
43098  if ( History ) AbstractHistory.__proto__ = History;
43099  AbstractHistory.prototype = Object.create( History && History.prototype );
43100  AbstractHistory.prototype.constructor = AbstractHistory;
43101
43102  AbstractHistory.prototype.push = function push (location, onComplete, onAbort) {
43103    var this$1$1 = this;
43104
43105    this.transitionTo(
43106      location,
43107      function (route) {
43108        this$1$1.stack = this$1$1.stack.slice(0, this$1$1.index + 1).concat(route);
43109        this$1$1.index++;
43110        onComplete && onComplete(route);
43111      },
43112      onAbort
43113    );
43114  };
43115
43116  AbstractHistory.prototype.replace = function replace (location, onComplete, onAbort) {
43117    var this$1$1 = this;
43118
43119    this.transitionTo(
43120      location,
43121      function (route) {
43122        this$1$1.stack = this$1$1.stack.slice(0, this$1$1.index).concat(route);
43123        onComplete && onComplete(route);
43124      },
43125      onAbort
43126    );
43127  };
43128
43129  AbstractHistory.prototype.go = function go (n) {
43130    var this$1$1 = this;
43131
43132    var targetIndex = this.index + n;
43133    if (targetIndex < 0 || targetIndex >= this.stack.length) {
43134      return
43135    }
43136    var route = this.stack[targetIndex];
43137    this.confirmTransition(
43138      route,
43139      function () {
43140        var prev = this$1$1.current;
43141        this$1$1.index = targetIndex;
43142        this$1$1.updateRoute(route);
43143        this$1$1.router.afterHooks.forEach(function (hook) {
43144          hook && hook(route, prev);
43145        });
43146      },
43147      function (err) {
43148        if (isNavigationFailure(err, NavigationFailureType.duplicated)) {
43149          this$1$1.index = targetIndex;
43150        }
43151      }
43152    );
43153  };
43154
43155  AbstractHistory.prototype.getCurrentLocation = function getCurrentLocation () {
43156    var current = this.stack[this.stack.length - 1];
43157    return current ? current.fullPath : '/'
43158  };
43159
43160  AbstractHistory.prototype.ensureURL = function ensureURL () {
43161    // noop
43162  };
43163
43164  return AbstractHistory;
43165}(History));
43166
43167/*  */
43168
43169
43170
43171var VueRouter = function VueRouter (options) {
43172  if ( options === void 0 ) options = {};
43173
43174  if (true) {
43175    warn(this instanceof VueRouter, "Router must be called with the new operator.");
43176  }
43177  this.app = null;
43178  this.apps = [];
43179  this.options = options;
43180  this.beforeHooks = [];
43181  this.resolveHooks = [];
43182  this.afterHooks = [];
43183  this.matcher = createMatcher(options.routes || [], this);
43184
43185  var mode = options.mode || 'hash';
43186  this.fallback =
43187    mode === 'history' && !supportsPushState && options.fallback !== false;
43188  if (this.fallback) {
43189    mode = 'hash';
43190  }
43191  if (!inBrowser) {
43192    mode = 'abstract';
43193  }
43194  this.mode = mode;
43195
43196  switch (mode) {
43197    case 'history':
43198      this.history = new HTML5History(this, options.base);
43199      break
43200    case 'hash':
43201      this.history = new HashHistory(this, options.base, this.fallback);
43202      break
43203    case 'abstract':
43204      this.history = new AbstractHistory(this, options.base);
43205      break
43206    default:
43207      if (true) {
43208        assert(false, ("invalid mode: " + mode));
43209      }
43210  }
43211};
43212
43213var prototypeAccessors = { currentRoute: { configurable: true } };
43214
43215VueRouter.prototype.match = function match (raw, current, redirectedFrom) {
43216  return this.matcher.match(raw, current, redirectedFrom)
43217};
43218
43219prototypeAccessors.currentRoute.get = function () {
43220  return this.history && this.history.current
43221};
43222
43223VueRouter.prototype.init = function init (app /* Vue component instance */) {
43224    var this$1$1 = this;
43225
43226   true &&
43227    assert(
43228      install.installed,
43229      "not installed. Make sure to call `Vue.use(VueRouter)` " +
43230        "before creating root instance."
43231    );
43232
43233  this.apps.push(app);
43234
43235  // set up app destroyed handler
43236  // https://github.com/vuejs/vue-router/issues/2639
43237  app.$once('hook:destroyed', function () {
43238    // clean out app from this.apps array once destroyed
43239    var index = this$1$1.apps.indexOf(app);
43240    if (index > -1) { this$1$1.apps.splice(index, 1); }
43241    // ensure we still have a main app or null if no apps
43242    // we do not release the router so it can be reused
43243    if (this$1$1.app === app) { this$1$1.app = this$1$1.apps[0] || null; }
43244
43245    if (!this$1$1.app) { this$1$1.history.teardown(); }
43246  });
43247
43248  // main app previously initialized
43249  // return as we don't need to set up new history listener
43250  if (this.app) {
43251    return
43252  }
43253
43254  this.app = app;
43255
43256  var history = this.history;
43257
43258  if (history instanceof HTML5History || history instanceof HashHistory) {
43259    var handleInitialScroll = function (routeOrError) {
43260      var from = history.current;
43261      var expectScroll = this$1$1.options.scrollBehavior;
43262      var supportsScroll = supportsPushState && expectScroll;
43263
43264      if (supportsScroll && 'fullPath' in routeOrError) {
43265        handleScroll(this$1$1, routeOrError, from, false);
43266      }
43267    };
43268    var setupListeners = function (routeOrError) {
43269      history.setupListeners();
43270      handleInitialScroll(routeOrError);
43271    };
43272    history.transitionTo(
43273      history.getCurrentLocation(),
43274      setupListeners,
43275      setupListeners
43276    );
43277  }
43278
43279  history.listen(function (route) {
43280    this$1$1.apps.forEach(function (app) {
43281      app._route = route;
43282    });
43283  });
43284};
43285
43286VueRouter.prototype.beforeEach = function beforeEach (fn) {
43287  return registerHook(this.beforeHooks, fn)
43288};
43289
43290VueRouter.prototype.beforeResolve = function beforeResolve (fn) {
43291  return registerHook(this.resolveHooks, fn)
43292};
43293
43294VueRouter.prototype.afterEach = function afterEach (fn) {
43295  return registerHook(this.afterHooks, fn)
43296};
43297
43298VueRouter.prototype.onReady = function onReady (cb, errorCb) {
43299  this.history.onReady(cb, errorCb);
43300};
43301
43302VueRouter.prototype.onError = function onError (errorCb) {
43303  this.history.onError(errorCb);
43304};
43305
43306VueRouter.prototype.push = function push (location, onComplete, onAbort) {
43307    var this$1$1 = this;
43308
43309  // $flow-disable-line
43310  if (!onComplete && !onAbort && typeof Promise !== 'undefined') {
43311    return new Promise(function (resolve, reject) {
43312      this$1$1.history.push(location, resolve, reject);
43313    })
43314  } else {
43315    this.history.push(location, onComplete, onAbort);
43316  }
43317};
43318
43319VueRouter.prototype.replace = function replace (location, onComplete, onAbort) {
43320    var this$1$1 = this;
43321
43322  // $flow-disable-line
43323  if (!onComplete && !onAbort && typeof Promise !== 'undefined') {
43324    return new Promise(function (resolve, reject) {
43325      this$1$1.history.replace(location, resolve, reject);
43326    })
43327  } else {
43328    this.history.replace(location, onComplete, onAbort);
43329  }
43330};
43331
43332VueRouter.prototype.go = function go (n) {
43333  this.history.go(n);
43334};
43335
43336VueRouter.prototype.back = function back () {
43337  this.go(-1);
43338};
43339
43340VueRouter.prototype.forward = function forward () {
43341  this.go(1);
43342};
43343
43344VueRouter.prototype.getMatchedComponents = function getMatchedComponents (to) {
43345  var route = to
43346    ? to.matched
43347      ? to
43348      : this.resolve(to).route
43349    : this.currentRoute;
43350  if (!route) {
43351    return []
43352  }
43353  return [].concat.apply(
43354    [],
43355    route.matched.map(function (m) {
43356      return Object.keys(m.components).map(function (key) {
43357        return m.components[key]
43358      })
43359    })
43360  )
43361};
43362
43363VueRouter.prototype.resolve = function resolve (
43364  to,
43365  current,
43366  append
43367) {
43368  current = current || this.history.current;
43369  var location = normalizeLocation(to, current, append, this);
43370  var route = this.match(location, current);
43371  var fullPath = route.redirectedFrom || route.fullPath;
43372  var base = this.history.base;
43373  var href = createHref(base, fullPath, this.mode);
43374  return {
43375    location: location,
43376    route: route,
43377    href: href,
43378    // for backwards compat
43379    normalizedTo: location,
43380    resolved: route
43381  }
43382};
43383
43384VueRouter.prototype.getRoutes = function getRoutes () {
43385  return this.matcher.getRoutes()
43386};
43387
43388VueRouter.prototype.addRoute = function addRoute (parentOrRoute, route) {
43389  this.matcher.addRoute(parentOrRoute, route);
43390  if (this.history.current !== START) {
43391    this.history.transitionTo(this.history.getCurrentLocation());
43392  }
43393};
43394
43395VueRouter.prototype.addRoutes = function addRoutes (routes) {
43396  if (true) {
43397    warn(false, 'router.addRoutes() is deprecated and has been removed in Vue Router 4. Use router.addRoute() instead.');
43398  }
43399  this.matcher.addRoutes(routes);
43400  if (this.history.current !== START) {
43401    this.history.transitionTo(this.history.getCurrentLocation());
43402  }
43403};
43404
43405Object.defineProperties( VueRouter.prototype, prototypeAccessors );
43406
43407var VueRouter$1 = VueRouter;
43408
43409function registerHook (list, fn) {
43410  list.push(fn);
43411  return function () {
43412    var i = list.indexOf(fn);
43413    if (i > -1) { list.splice(i, 1); }
43414  }
43415}
43416
43417function createHref (base, fullPath, mode) {
43418  var path = mode === 'hash' ? '#' + fullPath : fullPath;
43419  return base ? cleanPath(base + '/' + path) : path
43420}
43421
43422// We cannot remove this as it would be a breaking change
43423VueRouter.install = install;
43424VueRouter.version = '3.6.5';
43425VueRouter.isNavigationFailure = isNavigationFailure;
43426VueRouter.NavigationFailureType = NavigationFailureType;
43427VueRouter.START_LOCATION = START;
43428
43429if (inBrowser && window.Vue) {
43430  window.Vue.use(VueRouter);
43431}
43432
43433var version = '3.6.5';
43434
43435
43436
43437
43438/***/ }),
43439
vendor: 59,201 bytes, lines 43440-44707
43440/***/ "./node_modules/vue-sweetalert2/dist/vue-sweetalert.mjs":
43441/*!**************************************************************!*\
43442  !*** ./node_modules/vue-sweetalert2/dist/vue-sweetalert.mjs ***!
43443  \**************************************************************/
43444/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
43445
43446"use strict";
43447__webpack_require__.r(__webpack_exports__);
43448/* harmony export */ __webpack_require__.d(__webpack_exports__, {
43449/* harmony export */   "default": () => (/* binding */ di)
43450/* harmony export */ });
43451var M = typeof globalThis < "u" ? globalThis : typeof window < "u" ? window : typeof global < "u" ? global : typeof self < "u" ? self : {};
43452function ai(x) {
43453  return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, "default") ? x.default : x;
43454}
43455var yt = { exports: {} };
43456/*!
43457* sweetalert2 v11.4.4
43458* Released under the MIT License.
43459*/
43460(function(x, T) {
43461  (function(K, O) {
43462    x.exports = O();
43463  })(M, function() {
43464    const K = "SweetAlert2:", O = (e) => {
43465      const t = [];
43466      for (let n = 0; n < e.length; n++)
43467        t.indexOf(e[n]) === -1 && t.push(e[n]);
43468      return t;
43469    }, B = (e) => e.charAt(0).toUpperCase() + e.slice(1), g = (e) => Array.prototype.slice.call(e), d = (e) => {
43470      console.warn("".concat(K, " ").concat(typeof e == "object" ? e.join(" ") : e));
43471    }, H = (e) => {
43472      console.error("".concat(K, " ").concat(e));
43473    }, Ie = [], wt = (e) => {
43474      Ie.includes(e) || (Ie.push(e), d(e));
43475    }, Ct = (e, t) => {
43476      wt('"'.concat(e, '" is deprecated and will be removed in the next major release. Please use "').concat(t, '" instead.'));
43477    }, ne = (e) => typeof e == "function" ? e() : e, fe = (e) => e && typeof e.toPromise == "function", _ = (e) => fe(e) ? e.toPromise() : Promise.resolve(e), pe = (e) => e && Promise.resolve(e) === e, q = {
43478      title: "",
43479      titleText: "",
43480      text: "",
43481      html: "",
43482      footer: "",
43483      icon: void 0,
43484      iconColor: void 0,
43485      iconHtml: void 0,
43486      template: void 0,
43487      toast: !1,
43488      showClass: {
43489        popup: "swal2-show",
43490        backdrop: "swal2-backdrop-show",
43491        icon: "swal2-icon-show"
43492      },
43493      hideClass: {
43494        popup: "swal2-hide",
43495        backdrop: "swal2-backdrop-hide",
43496        icon: "swal2-icon-hide"
43497      },
43498      customClass: {},
43499      target: "body",
43500      color: void 0,
43501      backdrop: !0,
43502      heightAuto: !0,
43503      allowOutsideClick: !0,
43504      allowEscapeKey: !0,
43505      allowEnterKey: !0,
43506      stopKeydownPropagation: !0,
43507      keydownListenerCapture: !1,
43508      showConfirmButton: !0,
43509      showDenyButton: !1,
43510      showCancelButton: !1,
43511      preConfirm: void 0,
43512      preDeny: void 0,
43513      confirmButtonText: "OK",
43514      confirmButtonAriaLabel: "",
43515      confirmButtonColor: void 0,
43516      denyButtonText: "No",
43517      denyButtonAriaLabel: "",
43518      denyButtonColor: void 0,
43519      cancelButtonText: "Cancel",
43520      cancelButtonAriaLabel: "",
43521      cancelButtonColor: void 0,
43522      buttonsStyling: !0,
43523      reverseButtons: !1,
43524      focusConfirm: !0,
43525      focusDeny: !1,
43526      focusCancel: !1,
43527      returnFocus: !0,
43528      showCloseButton: !1,
43529      closeButtonHtml: "&times;",
43530      closeButtonAriaLabel: "Close this dialog",
43531      loaderHtml: "",
43532      showLoaderOnConfirm: !1,
43533      showLoaderOnDeny: !1,
43534      imageUrl: void 0,
43535      imageWidth: void 0,
43536      imageHeight: void 0,
43537      imageAlt: "",
43538      timer: void 0,
43539      timerProgressBar: !1,
43540      width: void 0,
43541      padding: void 0,
43542      background: void 0,
43543      input: void 0,
43544      inputPlaceholder: "",
43545      inputLabel: "",
43546      inputValue: "",
43547      inputOptions: {},
43548      inputAutoTrim: !0,
43549      inputAttributes: {},
43550      inputValidator: void 0,
43551      returnInputValueOnDeny: !1,
43552      validationMessage: void 0,
43553      grow: !1,
43554      position: "center",
43555      progressSteps: [],
43556      currentProgressStep: void 0,
43557      progressStepsDistance: void 0,
43558      willOpen: void 0,
43559      didOpen: void 0,
43560      didRender: void 0,
43561      willClose: void 0,
43562      didClose: void 0,
43563      didDestroy: void 0,
43564      scrollbarPadding: !0
43565    }, vt = ["allowEscapeKey", "allowOutsideClick", "background", "buttonsStyling", "cancelButtonAriaLabel", "cancelButtonColor", "cancelButtonText", "closeButtonAriaLabel", "closeButtonHtml", "color", "confirmButtonAriaLabel", "confirmButtonColor", "confirmButtonText", "currentProgressStep", "customClass", "denyButtonAriaLabel", "denyButtonColor", "denyButtonText", "didClose", "didDestroy", "footer", "hideClass", "html", "icon", "iconColor", "iconHtml", "imageAlt", "imageHeight", "imageUrl", "imageWidth", "preConfirm", "preDeny", "progressSteps", "returnFocus", "reverseButtons", "showCancelButton", "showCloseButton", "showConfirmButton", "showDenyButton", "text", "title", "titleText", "willClose"], Pt = {}, At = ["allowOutsideClick", "allowEnterKey", "backdrop", "focusConfirm", "focusDeny", "focusCancel", "returnFocus", "heightAuto", "keydownListenerCapture"], Le = (e) => Object.prototype.hasOwnProperty.call(q, e), Me = (e) => vt.indexOf(e) !== -1, ge = (e) => Pt[e], kt = (e) => {
43566      Le(e) || d('Unknown parameter "'.concat(e, '"'));
43567    }, Bt = (e) => {
43568      At.includes(e) && d('The parameter "'.concat(e, '" is incompatible with toasts'));
43569    }, Et = (e) => {
43570      ge(e) && Ct(e, ge(e));
43571    }, St = (e) => {
43572      !e.backdrop && e.allowOutsideClick && d('"allowOutsideClick" parameter requires `backdrop` parameter to be set to `true`');
43573      for (const t in e)
43574        kt(t), e.toast && Bt(t), Et(t);
43575    }, xt = "swal2-", He = (e) => {
43576      const t = {};
43577      for (const n in e)
43578        t[e[n]] = xt + e[n];
43579      return t;
43580    }, i = He(["container", "shown", "height-auto", "iosfix", "popup", "modal", "no-backdrop", "no-transition", "toast", "toast-shown", "show", "hide", "close", "title", "html-container", "actions", "confirm", "deny", "cancel", "default-outline", "footer", "icon", "icon-content", "image", "input", "file", "range", "select", "radio", "checkbox", "label", "textarea", "inputerror", "input-label", "validation-message", "progress-steps", "active-progress-step", "progress-step", "progress-step-line", "loader", "loading", "styled", "top", "top-start", "top-end", "top-left", "top-right", "center", "center-start", "center-end", "center-left", "center-right", "bottom", "bottom-start", "bottom-end", "bottom-left", "bottom-right", "grow-row", "grow-column", "grow-fullscreen", "rtl", "timer-progress-bar", "timer-progress-bar-container", "scrollbar-measure", "icon-success", "icon-warning", "icon-info", "icon-question", "icon-error"]), Y = He(["success", "warning", "info", "question", "error"]), h = () => document.body.querySelector(".".concat(i.container)), Z = (e) => {
43581      const t = h();
43582      return t ? t.querySelector(e) : null;
43583    }, P = (e) => Z(".".concat(e)), u = () => P(i.popup), $ = () => P(i.icon), je = () => P(i.title), oe = () => P(i["html-container"]), De = () => P(i.image), Ve = () => P(i["progress-steps"]), ie = () => P(i["validation-message"]), k = () => Z(".".concat(i.actions, " .").concat(i.confirm)), I = () => Z(".".concat(i.actions, " .").concat(i.deny)), Tt = () => P(i["input-label"]), F = () => Z(".".concat(i.loader)), j = () => Z(".".concat(i.actions, " .").concat(i.cancel)), J = () => P(i.actions), qe = () => P(i.footer), se = () => P(i["timer-progress-bar"]), he = () => P(i.close), Ot = `
43584  a[href],
43585  area[href],
43586  input:not([disabled]),
43587  select:not([disabled]),
43588  textarea:not([disabled]),
43589  button:not([disabled]),
43590  iframe,
43591  object,
43592  embed,
43593  [tabindex="0"],
43594  [contenteditable],
43595  audio[controls],
43596  video[controls],
43597  summary
43598`, me = () => {
43599      const e = g(u().querySelectorAll('[tabindex]:not([tabindex="-1"]):not([tabindex="0"])')).sort((n, o) => {
43600        const s = parseInt(n.getAttribute("tabindex")), r = parseInt(o.getAttribute("tabindex"));
43601        return s > r ? 1 : s < r ? -1 : 0;
43602      }), t = g(u().querySelectorAll(Ot)).filter((n) => n.getAttribute("tabindex") !== "-1");
43603      return O(e.concat(t)).filter((n) => C(n));
43604    }, be = () => S(document.body, i.shown) && !S(document.body, i["toast-shown"]) && !S(document.body, i["no-backdrop"]), re = () => u() && S(u(), i.toast), It = () => u().hasAttribute("data-loading"), W = {
43605      previousBodyPadding: null
43606    }, m = (e, t) => {
43607      if (e.textContent = "", t) {
43608        const o = new DOMParser().parseFromString(t, "text/html");
43609        g(o.querySelector("head").childNodes).forEach((s) => {
43610          e.appendChild(s);
43611        }), g(o.querySelector("body").childNodes).forEach((s) => {
43612          e.appendChild(s);
43613        });
43614      }
43615    }, S = (e, t) => {
43616      if (!t)
43617        return !1;
43618      const n = t.split(/\s+/);
43619      for (let o = 0; o < n.length; o++)
43620        if (!e.classList.contains(n[o]))
43621          return !1;
43622      return !0;
43623    }, Lt = (e, t) => {
43624      g(e.classList).forEach((n) => {
43625        !Object.values(i).includes(n) && !Object.values(Y).includes(n) && !Object.values(t.showClass).includes(n) && e.classList.remove(n);
43626      });
43627    }, A = (e, t, n) => {
43628      if (Lt(e, t), t.customClass && t.customClass[n]) {
43629        if (typeof t.customClass[n] != "string" && !t.customClass[n].forEach)
43630          return d("Invalid type of customClass.".concat(n, '! Expected string or iterable object, got "').concat(typeof t.customClass[n], '"'));
43631        a(e, t.customClass[n]);
43632      }
43633    }, ye = (e, t) => {
43634      if (!t)
43635        return null;
43636      switch (t) {
43637        case "select":
43638        case "textarea":
43639        case "file":
43640          return e.querySelector(".".concat(i.popup, " > .").concat(i[t]));
43641        case "checkbox":
43642          return e.querySelector(".".concat(i.popup, " > .").concat(i.checkbox, " input"));
43643        case "radio":
43644          return e.querySelector(".".concat(i.popup, " > .").concat(i.radio, " input:checked")) || e.querySelector(".".concat(i.popup, " > .").concat(i.radio, " input:first-child"));
43645        case "range":
43646          return e.querySelector(".".concat(i.popup, " > .").concat(i.range, " input"));
43647        default:
43648          return e.querySelector(".".concat(i.popup, " > .").concat(i.input));
43649      }
43650    }, Fe = (e) => {
43651      if (e.focus(), e.type !== "file") {
43652        const t = e.value;
43653        e.value = "", e.value = t;
43654      }
43655    }, We = (e, t, n) => {
43656      !e || !t || (typeof t == "string" && (t = t.split(/\s+/).filter(Boolean)), t.forEach((o) => {
43657        Array.isArray(e) ? e.forEach((s) => {
43658          n ? s.classList.add(o) : s.classList.remove(o);
43659        }) : n ? e.classList.add(o) : e.classList.remove(o);
43660      }));
43661    }, a = (e, t) => {
43662      We(e, t, !0);
43663    }, E = (e, t) => {
43664      We(e, t, !1);
43665    }, L = (e, t) => {
43666      const n = g(e.childNodes);
43667      for (let o = 0; o < n.length; o++)
43668        if (S(n[o], t))
43669          return n[o];
43670    }, G = (e, t, n) => {
43671      n === "".concat(parseInt(n)) && (n = parseInt(n)), n || parseInt(n) === 0 ? e.style[t] = typeof n == "number" ? "".concat(n, "px") : n : e.style.removeProperty(t);
43672    }, p = function(e) {
43673      let t = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : "flex";
43674      e.style.display = t;
43675    }, b = (e) => {
43676      e.style.display = "none";
43677    }, Re = (e, t, n, o) => {
43678      const s = e.querySelector(t);
43679      s && (s.style[n] = o);
43680    }, ce = (e, t, n) => {
43681      t ? p(e, n) : b(e);
43682    }, C = (e) => !!(e && (e.offsetWidth || e.offsetHeight || e.getClientRects().length)), Mt = () => !C(k()) && !C(I()) && !C(j()), Ue = (e) => e.scrollHeight > e.clientHeight, Ne = (e) => {
43683      const t = window.getComputedStyle(e), n = parseFloat(t.getPropertyValue("animation-duration") || "0"), o = parseFloat(t.getPropertyValue("transition-duration") || "0");
43684      return n > 0 || o > 0;
43685    }, we = function(e) {
43686      let t = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : !1;
43687      const n = se();
43688      C(n) && (t && (n.style.transition = "none", n.style.width = "100%"), setTimeout(() => {
43689        n.style.transition = "width ".concat(e / 1e3, "s linear"), n.style.width = "0%";
43690      }, 10));
43691    }, Ht = () => {
43692      const e = se(), t = parseInt(window.getComputedStyle(e).width);
43693      e.style.removeProperty("transition"), e.style.width = "100%";
43694      const n = parseInt(window.getComputedStyle(e).width), o = t / n * 100;
43695      e.style.removeProperty("transition"), e.style.width = "".concat(o, "%");
43696    }, ze = () => typeof window > "u" || typeof document > "u", jt = 100, c = {}, Dt = () => {
43697      c.previousActiveElement && c.previousActiveElement.focus ? (c.previousActiveElement.focus(), c.previousActiveElement = null) : document.body && document.body.focus();
43698    }, Vt = (e) => new Promise((t) => {
43699      if (!e)
43700        return t();
43701      const n = window.scrollX, o = window.scrollY;
43702      c.restoreFocusTimeout = setTimeout(() => {
43703        Dt(), t();
43704      }, jt), window.scrollTo(n, o);
43705    }), qt = `
43706 <div aria-labelledby="`.concat(i.title, '" aria-describedby="').concat(i["html-container"], '" class="').concat(i.popup, `" tabindex="-1">
43707   <button type="button" class="`).concat(i.close, `"></button>
43708   <ul class="`).concat(i["progress-steps"], `"></ul>
43709   <div class="`).concat(i.icon, `"></div>
43710   <img class="`).concat(i.image, `" />
43711   <h2 class="`).concat(i.title, '" id="').concat(i.title, `"></h2>
43712   <div class="`).concat(i["html-container"], '" id="').concat(i["html-container"], `"></div>
43713   <input class="`).concat(i.input, `" />
43714   <input type="file" class="`).concat(i.file, `" />
43715   <div class="`).concat(i.range, `">
43716     <input type="range" />
43717     <output></output>
43718   </div>
43719   <select class="`).concat(i.select, `"></select>
43720   <div class="`).concat(i.radio, `"></div>
43721   <label for="`).concat(i.checkbox, '" class="').concat(i.checkbox, `">
43722     <input type="checkbox" />
43723     <span class="`).concat(i.label, `"></span>
43724   </label>
43725   <textarea class="`).concat(i.textarea, `"></textarea>
43726   <div class="`).concat(i["validation-message"], '" id="').concat(i["validation-message"], `"></div>
43727   <div class="`).concat(i.actions, `">
43728     <div class="`).concat(i.loader, `"></div>
43729     <button type="button" class="`).concat(i.confirm, `"></button>
43730     <button type="button" class="`).concat(i.deny, `"></button>
43731     <button type="button" class="`).concat(i.cancel, `"></button>
43732   </div>
43733   <div class="`).concat(i.footer, `"></div>
43734   <div class="`).concat(i["timer-progress-bar-container"], `">
43735     <div class="`).concat(i["timer-progress-bar"], `"></div>
43736   </div>
43737 </div>
43738`).replace(/(^|\n)\s*/g, ""), Ft = () => {
43739      const e = h();
43740      return e ? (e.remove(), E([document.documentElement, document.body], [i["no-backdrop"], i["toast-shown"], i["has-column"]]), !0) : !1;
43741    }, D = () => {
43742      c.currentInstance.resetValidationMessage();
43743    }, Wt = () => {
43744      const e = u(), t = L(e, i.input), n = L(e, i.file), o = e.querySelector(".".concat(i.range, " input")), s = e.querySelector(".".concat(i.range, " output")), r = L(e, i.select), f = e.querySelector(".".concat(i.checkbox, " input")), v = L(e, i.textarea);
43745      t.oninput = D, n.onchange = D, r.onchange = D, f.onchange = D, v.oninput = D, o.oninput = () => {
43746        D(), s.value = o.value;
43747      }, o.onchange = () => {
43748        D(), o.nextSibling.value = o.value;
43749      };
43750    }, Rt = (e) => typeof e == "string" ? document.querySelector(e) : e, Ut = (e) => {
43751      const t = u();
43752      t.setAttribute("role", e.toast ? "alert" : "dialog"), t.setAttribute("aria-live", e.toast ? "polite" : "assertive"), e.toast || t.setAttribute("aria-modal", "true");
43753    }, Nt = (e) => {
43754      window.getComputedStyle(e).direction === "rtl" && a(h(), i.rtl);
43755    }, zt = (e) => {
43756      const t = Ft();
43757      if (ze()) {
43758        H("SweetAlert2 requires document to initialize");
43759        return;
43760      }
43761      const n = document.createElement("div");
43762      n.className = i.container, t && a(n, i["no-transition"]), m(n, qt);
43763      const o = Rt(e.target);
43764      o.appendChild(n), Ut(e), Nt(o), Wt();
43765    }, Ce = (e, t) => {
43766      e instanceof HTMLElement ? t.appendChild(e) : typeof e == "object" ? Kt(e, t) : e && m(t, e);
43767    }, Kt = (e, t) => {
43768      e.jquery ? _t(t, e) : m(t, e.toString());
43769    }, _t = (e, t) => {
43770      if (e.textContent = "", 0 in t)
43771        for (let n = 0; n in t; n++)
43772          e.appendChild(t[n].cloneNode(!0));
43773      else
43774        e.appendChild(t.cloneNode(!0));
43775    }, X = (() => {
43776      if (ze())
43777        return !1;
43778      const e = document.createElement("div"), t = {
43779        WebkitAnimation: "webkitAnimationEnd",
43780        // Chrome, Safari and Opera
43781        animation: "animationend"
43782        // Standard syntax
43783      };
43784      for (const n in t)
43785        if (Object.prototype.hasOwnProperty.call(t, n) && typeof e.style[n] < "u")
43786          return t[n];
43787      return !1;
43788    })(), Yt = () => {
43789      const e = document.createElement("div");
43790      e.className = i["scrollbar-measure"], document.body.appendChild(e);
43791      const t = e.getBoundingClientRect().width - e.clientWidth;
43792      return document.body.removeChild(e), t;
43793    }, Zt = (e, t) => {
43794      const n = J(), o = F();
43795      !t.showConfirmButton && !t.showDenyButton && !t.showCancelButton ? b(n) : p(n), A(n, t, "actions"), $t(n, o, t), m(o, t.loaderHtml), A(o, t, "loader");
43796    };
43797    function $t(e, t, n) {
43798      const o = k(), s = I(), r = j();
43799      ve(o, "confirm", n), ve(s, "deny", n), ve(r, "cancel", n), Jt(o, s, r, n), n.reverseButtons && (n.toast ? (e.insertBefore(r, o), e.insertBefore(s, o)) : (e.insertBefore(r, t), e.insertBefore(s, t), e.insertBefore(o, t)));
43800    }
43801    function Jt(e, t, n, o) {
43802      if (!o.buttonsStyling)
43803        return E([e, t, n], i.styled);
43804      a([e, t, n], i.styled), o.confirmButtonColor && (e.style.backgroundColor = o.confirmButtonColor, a(e, i["default-outline"])), o.denyButtonColor && (t.style.backgroundColor = o.denyButtonColor, a(t, i["default-outline"])), o.cancelButtonColor && (n.style.backgroundColor = o.cancelButtonColor, a(n, i["default-outline"]));
43805    }
43806    function ve(e, t, n) {
43807      ce(e, n["show".concat(B(t), "Button")], "inline-block"), m(e, n["".concat(t, "ButtonText")]), e.setAttribute("aria-label", n["".concat(t, "ButtonAriaLabel")]), e.className = i[t], A(e, n, "".concat(t, "Button")), a(e, n["".concat(t, "ButtonClass")]);
43808    }
43809    function Gt(e, t) {
43810      typeof t == "string" ? e.style.background = t : t || a([document.documentElement, document.body], i["no-backdrop"]);
43811    }
43812    function Xt(e, t) {
43813      t in i ? a(e, i[t]) : (d('The "position" parameter is not valid, defaulting to "center"'), a(e, i.center));
43814    }
43815    function Qt(e, t) {
43816      if (t && typeof t == "string") {
43817        const n = "grow-".concat(t);
43818        n in i && a(e, i[n]);
43819      }
43820    }
43821    const en = (e, t) => {
43822      const n = h();
43823      n && (Gt(n, t.backdrop), Xt(n, t.position), Qt(n, t.grow), A(n, t, "container"));
43824    };
43825    var l = {
43826      awaitingPromise: /* @__PURE__ */ new WeakMap(),
43827      promise: /* @__PURE__ */ new WeakMap(),
43828      innerParams: /* @__PURE__ */ new WeakMap(),
43829      domCache: /* @__PURE__ */ new WeakMap()
43830    };
43831    const tn = ["input", "file", "range", "select", "radio", "checkbox", "textarea"], nn = (e, t) => {
43832      const n = u(), o = l.innerParams.get(e), s = !o || t.input !== o.input;
43833      tn.forEach((r) => {
43834        const f = i[r], v = L(n, f);
43835        rn(r, t.inputAttributes), v.className = f, s && b(v);
43836      }), t.input && (s && on(t), cn(t));
43837    }, on = (e) => {
43838      if (!w[e.input])
43839        return H('Unexpected type of input! Expected "text", "email", "password", "number", "tel", "select", "radio", "checkbox", "textarea", "file" or "url", got "'.concat(e.input, '"'));
43840      const t = Ke(e.input), n = w[e.input](t, e);
43841      p(n), setTimeout(() => {
43842        Fe(n);
43843      });
43844    }, sn = (e) => {
43845      for (let t = 0; t < e.attributes.length; t++) {
43846        const n = e.attributes[t].name;
43847        ["type", "value", "style"].includes(n) || e.removeAttribute(n);
43848      }
43849    }, rn = (e, t) => {
43850      const n = ye(u(), e);
43851      if (n) {
43852        sn(n);
43853        for (const o in t)
43854          n.setAttribute(o, t[o]);
43855      }
43856    }, cn = (e) => {
43857      const t = Ke(e.input);
43858      e.customClass && a(t, e.customClass.input);
43859    }, Pe = (e, t) => {
43860      (!e.placeholder || t.inputPlaceholder) && (e.placeholder = t.inputPlaceholder);
43861    }, Q = (e, t, n) => {
43862      if (n.inputLabel) {
43863        e.id = i.input;
43864        const o = document.createElement("label"), s = i["input-label"];
43865        o.setAttribute("for", e.id), o.className = s, a(o, n.customClass.inputLabel), o.innerText = n.inputLabel, t.insertAdjacentElement("beforebegin", o);
43866      }
43867    }, Ke = (e) => {
43868      const t = i[e] ? i[e] : i.input;
43869      return L(u(), t);
43870    }, w = {};
43871    w.text = w.email = w.password = w.number = w.tel = w.url = (e, t) => (typeof t.inputValue == "string" || typeof t.inputValue == "number" ? e.value = t.inputValue : pe(t.inputValue) || d('Unexpected type of inputValue! Expected "string", "number" or "Promise", got "'.concat(typeof t.inputValue, '"')), Q(e, e, t), Pe(e, t), e.type = t.input, e), w.file = (e, t) => (Q(e, e, t), Pe(e, t), e), w.range = (e, t) => {
43872      const n = e.querySelector("input"), o = e.querySelector("output");
43873      return n.value = t.inputValue, n.type = t.input, o.value = t.inputValue, Q(n, e, t), e;
43874    }, w.select = (e, t) => {
43875      if (e.textContent = "", t.inputPlaceholder) {
43876        const n = document.createElement("option");
43877        m(n, t.inputPlaceholder), n.value = "", n.disabled = !0, n.selected = !0, e.appendChild(n);
43878      }
43879      return Q(e, e, t), e;
43880    }, w.radio = (e) => (e.textContent = "", e), w.checkbox = (e, t) => {
43881      const n = ye(u(), "checkbox");
43882      n.value = "1", n.id = i.checkbox, n.checked = !!t.inputValue;
43883      const o = e.querySelector("span");
43884      return m(o, t.inputPlaceholder), e;
43885    }, w.textarea = (e, t) => {
43886      e.value = t.inputValue, Pe(e, t), Q(e, e, t);
43887      const n = (o) => parseInt(window.getComputedStyle(o).marginLeft) + parseInt(window.getComputedStyle(o).marginRight);
43888      return setTimeout(() => {
43889        if ("MutationObserver" in window) {
43890          const o = parseInt(window.getComputedStyle(u()).width), s = () => {
43891            const r = e.offsetWidth + n(e);
43892            r > o ? u().style.width = "".concat(r, "px") : u().style.width = null;
43893          };
43894          new MutationObserver(s).observe(e, {
43895            attributes: !0,
43896            attributeFilter: ["style"]
43897          });
43898        }
43899      }), e;
43900    };
43901    const ln = (e, t) => {
43902      const n = oe();
43903      A(n, t, "htmlContainer"), t.html ? (Ce(t.html, n), p(n, "block")) : t.text ? (n.textContent = t.text, p(n, "block")) : b(n), nn(e, t);
43904    }, an = (e, t) => {
43905      const n = qe();
43906      ce(n, t.footer), t.footer && Ce(t.footer, n), A(n, t, "footer");
43907    }, un = (e, t) => {
43908      const n = he();
43909      m(n, t.closeButtonHtml), A(n, t, "closeButton"), ce(n, t.showCloseButton), n.setAttribute("aria-label", t.closeButtonAriaLabel);
43910    }, dn = (e, t) => {
43911      const n = l.innerParams.get(e), o = $();
43912      if (n && t.icon === n.icon) {
43913        Ye(o, t), _e(o, t);
43914        return;
43915      }
43916      if (!t.icon && !t.iconHtml)
43917        return b(o);
43918      if (t.icon && Object.keys(Y).indexOf(t.icon) === -1)
43919        return H('Unknown icon! Expected "success", "error", "warning", "info" or "question", got "'.concat(t.icon, '"')), b(o);
43920      p(o), Ye(o, t), _e(o, t), a(o, t.showClass.icon);
43921    }, _e = (e, t) => {
43922      for (const n in Y)
43923        t.icon !== n && E(e, Y[n]);
43924      a(e, Y[t.icon]), hn(e, t), fn(), A(e, t, "icon");
43925    }, fn = () => {
43926      const e = u(), t = window.getComputedStyle(e).getPropertyValue("background-color"), n = e.querySelectorAll("[class^=swal2-success-circular-line], .swal2-success-fix");
43927      for (let o = 0; o < n.length; o++)
43928        n[o].style.backgroundColor = t;
43929    }, pn = `
43930  <div class="swal2-success-circular-line-left"></div>
43931  <span class="swal2-success-line-tip"></span> <span class="swal2-success-line-long"></span>
43932  <div class="swal2-success-ring"></div> <div class="swal2-success-fix"></div>
43933  <div class="swal2-success-circular-line-right"></div>
43934`, gn = `
43935  <span class="swal2-x-mark">
43936    <span class="swal2-x-mark-line-left"></span>
43937    <span class="swal2-x-mark-line-right"></span>
43938  </span>
43939`, Ye = (e, t) => {
43940      e.textContent = "", t.iconHtml ? m(e, Ze(t.iconHtml)) : t.icon === "success" ? m(e, pn) : t.icon === "error" ? m(e, gn) : m(e, Ze({
43941        question: "?",
43942        warning: "!",
43943        info: "i"
43944      }[t.icon]));
43945    }, hn = (e, t) => {
43946      if (t.iconColor) {
43947        e.style.color = t.iconColor, e.style.borderColor = t.iconColor;
43948        for (const n of [".swal2-success-line-tip", ".swal2-success-line-long", ".swal2-x-mark-line-left", ".swal2-x-mark-line-right"])
43949          Re(e, n, "backgroundColor", t.iconColor);
43950        Re(e, ".swal2-success-ring", "borderColor", t.iconColor);
43951      }
43952    }, Ze = (e) => '<div class="'.concat(i["icon-content"], '">').concat(e, "</div>"), mn = (e, t) => {
43953      const n = De();
43954      if (!t.imageUrl)
43955        return b(n);
43956      p(n, ""), n.setAttribute("src", t.imageUrl), n.setAttribute("alt", t.imageAlt), G(n, "width", t.imageWidth), G(n, "height", t.imageHeight), n.className = i.image, A(n, t, "image");
43957    }, bn = (e) => {
43958      const t = document.createElement("li");
43959      return a(t, i["progress-step"]), m(t, e), t;
43960    }, yn = (e) => {
43961      const t = document.createElement("li");
43962      return a(t, i["progress-step-line"]), e.progressStepsDistance && (t.style.width = e.progressStepsDistance), t;
43963    }, wn = (e, t) => {
43964      const n = Ve();
43965      if (!t.progressSteps || t.progressSteps.length === 0)
43966        return b(n);
43967      p(n), n.textContent = "", t.currentProgressStep >= t.progressSteps.length && d("Invalid currentProgressStep parameter, it should be less than progressSteps.length (currentProgressStep like JS arrays starts from 0)"), t.progressSteps.forEach((o, s) => {
43968        const r = bn(o);
43969        if (n.appendChild(r), s === t.currentProgressStep && a(r, i["active-progress-step"]), s !== t.progressSteps.length - 1) {
43970          const f = yn(t);
43971          n.appendChild(f);
43972        }
43973      });
43974    }, Cn = (e, t) => {
43975      const n = je();
43976      ce(n, t.title || t.titleText, "block"), t.title && Ce(t.title, n), t.titleText && (n.innerText = t.titleText), A(n, t, "title");
43977    }, vn = (e, t) => {
43978      const n = h(), o = u();
43979      t.toast ? (G(n, "width", t.width), o.style.width = "100%", o.insertBefore(F(), $())) : G(o, "width", t.width), G(o, "padding", t.padding), t.color && (o.style.color = t.color), t.background && (o.style.background = t.background), b(ie()), Pn(o, t);
43980    }, Pn = (e, t) => {
43981      e.className = "".concat(i.popup, " ").concat(C(e) ? t.showClass.popup : ""), t.toast ? (a([document.documentElement, document.body], i["toast-shown"]), a(e, i.toast)) : a(e, i.modal), A(e, t, "popup"), typeof t.customClass == "string" && a(e, t.customClass), t.icon && a(e, i["icon-".concat(t.icon)]);
43982    }, $e = (e, t) => {
43983      vn(e, t), en(e, t), wn(e, t), dn(e, t), mn(e, t), Cn(e, t), un(e, t), ln(e, t), Zt(e, t), an(e, t), typeof t.didRender == "function" && t.didRender(u());
43984    }, R = Object.freeze({
43985      cancel: "cancel",
43986      backdrop: "backdrop",
43987      close: "close",
43988      esc: "esc",
43989      timer: "timer"
43990    }), An = () => {
43991      g(document.body.children).forEach((t) => {
43992        t === h() || t.contains(h()) || (t.hasAttribute("aria-hidden") && t.setAttribute("data-previous-aria-hidden", t.getAttribute("aria-hidden")), t.setAttribute("aria-hidden", "true"));
43993      });
43994    }, Je = () => {
43995      g(document.body.children).forEach((t) => {
43996        t.hasAttribute("data-previous-aria-hidden") ? (t.setAttribute("aria-hidden", t.getAttribute("data-previous-aria-hidden")), t.removeAttribute("data-previous-aria-hidden")) : t.removeAttribute("aria-hidden");
43997      });
43998    }, Ge = ["swal-title", "swal-html", "swal-footer"], kn = (e) => {
43999      const t = typeof e.template == "string" ? document.querySelector(e.template) : e.template;
44000      if (!t)
44001        return {};
44002      const n = t.content;
44003      return In(n), Object.assign(Bn(n), En(n), Sn(n), xn(n), Tn(n), On(n, Ge));
44004    }, Bn = (e) => {
44005      const t = {};
44006      return g(e.querySelectorAll("swal-param")).forEach((n) => {
44007        V(n, ["name", "value"]);
44008        const o = n.getAttribute("name"), s = n.getAttribute("value");
44009        typeof q[o] == "boolean" && s === "false" && (t[o] = !1), typeof q[o] == "object" && (t[o] = JSON.parse(s));
44010      }), t;
44011    }, En = (e) => {
44012      const t = {};
44013      return g(e.querySelectorAll("swal-button")).forEach((n) => {
44014        V(n, ["type", "color", "aria-label"]);
44015        const o = n.getAttribute("type");
44016        t["".concat(o, "ButtonText")] = n.innerHTML, t["show".concat(B(o), "Button")] = !0, n.hasAttribute("color") && (t["".concat(o, "ButtonColor")] = n.getAttribute("color")), n.hasAttribute("aria-label") && (t["".concat(o, "ButtonAriaLabel")] = n.getAttribute("aria-label"));
44017      }), t;
44018    }, Sn = (e) => {
44019      const t = {}, n = e.querySelector("swal-image");
44020      return n && (V(n, ["src", "width", "height", "alt"]), n.hasAttribute("src") && (t.imageUrl = n.getAttribute("src")), n.hasAttribute("width") && (t.imageWidth = n.getAttribute("width")), n.hasAttribute("height") && (t.imageHeight = n.getAttribute("height")), n.hasAttribute("alt") && (t.imageAlt = n.getAttribute("alt"))), t;
44021    }, xn = (e) => {
44022      const t = {}, n = e.querySelector("swal-icon");
44023      return n && (V(n, ["type", "color"]), n.hasAttribute("type") && (t.icon = n.getAttribute("type")), n.hasAttribute("color") && (t.iconColor = n.getAttribute("color")), t.iconHtml = n.innerHTML), t;
44024    }, Tn = (e) => {
44025      const t = {}, n = e.querySelector("swal-input");
44026      n && (V(n, ["type", "label", "placeholder", "value"]), t.input = n.getAttribute("type") || "text", n.hasAttribute("label") && (t.inputLabel = n.getAttribute("label")), n.hasAttribute("placeholder") && (t.inputPlaceholder = n.getAttribute("placeholder")), n.hasAttribute("value") && (t.inputValue = n.getAttribute("value")));
44027      const o = e.querySelectorAll("swal-input-option");
44028      return o.length && (t.inputOptions = {}, g(o).forEach((s) => {
44029        V(s, ["value"]);
44030        const r = s.getAttribute("value"), f = s.innerHTML;
44031        t.inputOptions[r] = f;
44032      })), t;
44033    }, On = (e, t) => {
44034      const n = {};
44035      for (const o in t) {
44036        const s = t[o], r = e.querySelector(s);
44037        r && (V(r, []), n[s.replace(/^swal-/, "")] = r.innerHTML.trim());
44038      }
44039      return n;
44040    }, In = (e) => {
44041      const t = Ge.concat(["swal-param", "swal-button", "swal-image", "swal-icon", "swal-input", "swal-input-option"]);
44042      g(e.children).forEach((n) => {
44043        const o = n.tagName.toLowerCase();
44044        t.indexOf(o) === -1 && d("Unrecognized element <".concat(o, ">"));
44045      });
44046    }, V = (e, t) => {
44047      g(e.attributes).forEach((n) => {
44048        t.indexOf(n.name) === -1 && d(['Unrecognized attribute "'.concat(n.name, '" on <').concat(e.tagName.toLowerCase(), ">."), "".concat(t.length ? "Allowed attributes are: ".concat(t.join(", ")) : "To set the value, use HTML within the element.")]);
44049      });
44050    };
44051    var Xe = {
44052      email: (e, t) => /^[a-zA-Z0-9.+_-]+@[a-zA-Z0-9.-]+\.[a-zA-Z0-9-]{2,24}$/.test(e) ? Promise.resolve() : Promise.resolve(t || "Invalid email address"),
44053      url: (e, t) => /^https?:\/\/(www\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}\.[a-z]{2,63}\b([-a-zA-Z0-9@:%_+.~#?&/=]*)$/.test(e) ? Promise.resolve() : Promise.resolve(t || "Invalid URL")
44054    };
44055    function Ln(e) {
44056      e.inputValidator || Object.keys(Xe).forEach((t) => {
44057        e.input === t && (e.inputValidator = Xe[t]);
44058      });
44059    }
44060    function Mn(e) {
44061      (!e.target || typeof e.target == "string" && !document.querySelector(e.target) || typeof e.target != "string" && !e.target.appendChild) && (d('Target parameter is not valid, defaulting to "body"'), e.target = "body");
44062    }
44063    function Hn(e) {
44064      Ln(e), e.showLoaderOnConfirm && !e.preConfirm && d(`showLoaderOnConfirm is set to true, but preConfirm is not defined.
44065showLoaderOnConfirm should be used together with preConfirm, see usage example:
44066https://sweetalert2.github.io/#ajax-request`), Mn(e), typeof e.title == "string" && (e.title = e.title.split(`
44067`).join("<br />")), zt(e);
44068    }
44069    class jn {
44070      constructor(t, n) {
44071        this.callback = t, this.remaining = n, this.running = !1, this.start();
44072      }
44073      start() {
44074        return this.running || (this.running = !0, this.started = /* @__PURE__ */ new Date(), this.id = setTimeout(this.callback, this.remaining)), this.remaining;
44075      }
44076      stop() {
44077        return this.running && (this.running = !1, clearTimeout(this.id), this.remaining -= (/* @__PURE__ */ new Date()).getTime() - this.started.getTime()), this.remaining;
44078      }
44079      increase(t) {
44080        const n = this.running;
44081        return n && this.stop(), this.remaining += t, n && this.start(), this.remaining;
44082      }
44083      getTimerLeft() {
44084        return this.running && (this.stop(), this.start()), this.remaining;
44085      }
44086      isRunning() {
44087        return this.running;
44088      }
44089    }
44090    const Dn = () => {
44091      W.previousBodyPadding === null && document.body.scrollHeight > window.innerHeight && (W.previousBodyPadding = parseInt(window.getComputedStyle(document.body).getPropertyValue("padding-right")), document.body.style.paddingRight = "".concat(W.previousBodyPadding + Yt(), "px"));
44092    }, Vn = () => {
44093      W.previousBodyPadding !== null && (document.body.style.paddingRight = "".concat(W.previousBodyPadding, "px"), W.previousBodyPadding = null);
44094    }, qn = () => {
44095      if (// @ts-ignore
44096      (/iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream || navigator.platform === "MacIntel" && navigator.maxTouchPoints > 1) && !S(document.body, i.iosfix)) {
44097        const t = document.body.scrollTop;
44098        document.body.style.top = "".concat(t * -1, "px"), a(document.body, i.iosfix), Wn(), Fn();
44099      }
44100    }, Fn = () => {
44101      const e = navigator.userAgent, t = !!e.match(/iPad/i) || !!e.match(/iPhone/i), n = !!e.match(/WebKit/i);
44102      t && n && !e.match(/CriOS/i) && u().scrollHeight > window.innerHeight - 44 && (h().style.paddingBottom = "".concat(44, "px"));
44103    }, Wn = () => {
44104      const e = h();
44105      let t;
44106      e.ontouchstart = (n) => {
44107        t = Rn(n);
44108      }, e.ontouchmove = (n) => {
44109        t && (n.preventDefault(), n.stopPropagation());
44110      };
44111    }, Rn = (e) => {
44112      const t = e.target, n = h();
44113      return Un(e) || Nn(e) ? !1 : t === n || !Ue(n) && t.tagName !== "INPUT" && // #1603
44114      t.tagName !== "TEXTAREA" && // #2266
44115      !(Ue(oe()) && // #1944
44116      oe().contains(t));
44117    }, Un = (e) => e.touches && e.touches.length && e.touches[0].touchType === "stylus", Nn = (e) => e.touches && e.touches.length > 1, zn = () => {
44118      if (S(document.body, i.iosfix)) {
44119        const e = parseInt(document.body.style.top, 10);
44120        E(document.body, i.iosfix), document.body.style.top = "", document.body.scrollTop = e * -1;
44121      }
44122    }, Qe = 10, Kn = (e) => {
44123      const t = h(), n = u();
44124      typeof e.willOpen == "function" && e.willOpen(n);
44125      const s = window.getComputedStyle(document.body).overflowY;
44126      Zn(t, n, e), setTimeout(() => {
44127        _n(t, n);
44128      }, Qe), be() && (Yn(t, e.scrollbarPadding, s), An()), !re() && !c.previousActiveElement && (c.previousActiveElement = document.activeElement), typeof e.didOpen == "function" && setTimeout(() => e.didOpen(n)), E(t, i["no-transition"]);
44129    }, et = (e) => {
44130      const t = u();
44131      if (e.target !== t)
44132        return;
44133      const n = h();
44134      t.removeEventListener(X, et), n.style.overflowY = "auto";
44135    }, _n = (e, t) => {
44136      X && Ne(t) ? (e.style.overflowY = "hidden", t.addEventListener(X, et)) : e.style.overflowY = "auto";
44137    }, Yn = (e, t, n) => {
44138      qn(), t && n !== "hidden" && Dn(), setTimeout(() => {
44139        e.scrollTop = 0;
44140      });
44141    }, Zn = (e, t, n) => {
44142      a(e, n.showClass.backdrop), t.style.setProperty("opacity", "0", "important"), p(t, "grid"), setTimeout(() => {
44143        a(t, n.showClass.popup), t.style.removeProperty("opacity");
44144      }, Qe), a([document.documentElement, document.body], i.shown), n.heightAuto && n.backdrop && !n.toast && a([document.documentElement, document.body], i["height-auto"]);
44145    }, U = (e) => {
44146      let t = u();
44147      t || new ue(), t = u();
44148      const n = F();
44149      re() ? b($()) : $n(t, e), p(n), t.setAttribute("data-loading", !0), t.setAttribute("aria-busy", !0), t.focus();
44150    }, $n = (e, t) => {
44151      const n = J(), o = F();
44152      !t && C(k()) && (t = k()), p(n), t && (b(t), o.setAttribute("data-button-to-replace", t.className)), o.parentNode.insertBefore(o, t), a([e, n], i.loading);
44153    }, Jn = (e, t) => {
44154      t.input === "select" || t.input === "radio" ? to(e, t) : ["text", "email", "number", "tel", "textarea"].includes(t.input) && (fe(t.inputValue) || pe(t.inputValue)) && (U(k()), no(e, t));
44155    }, Gn = (e, t) => {
44156      const n = e.getInput();
44157      if (!n)
44158        return null;
44159      switch (t.input) {
44160        case "checkbox":
44161          return Xn(n);
44162        case "radio":
44163          return Qn(n);
44164        case "file":
44165          return eo(n);
44166        default:
44167          return t.inputAutoTrim ? n.value.trim() : n.value;
44168      }
44169    }, Xn = (e) => e.checked ? 1 : 0, Qn = (e) => e.checked ? e.value : null, eo = (e) => e.files.length ? e.getAttribute("multiple") !== null ? e.files : e.files[0] : null, to = (e, t) => {
44170      const n = u(), o = (s) => oo[t.input](n, Ae(s), t);
44171      fe(t.inputOptions) || pe(t.inputOptions) ? (U(k()), _(t.inputOptions).then((s) => {
44172        e.hideLoading(), o(s);
44173      })) : typeof t.inputOptions == "object" ? o(t.inputOptions) : H("Unexpected type of inputOptions! Expected object, Map or Promise, got ".concat(typeof t.inputOptions));
44174    }, no = (e, t) => {
44175      const n = e.getInput();
44176      b(n), _(t.inputValue).then((o) => {
44177        n.value = t.input === "number" ? parseFloat(o) || 0 : "".concat(o), p(n), n.focus(), e.hideLoading();
44178      }).catch((o) => {
44179        H("Error in inputValue promise: ".concat(o)), n.value = "", p(n), n.focus(), e.hideLoading();
44180      });
44181    }, oo = {
44182      select: (e, t, n) => {
44183        const o = L(e, i.select), s = (r, f, v) => {
44184          const y = document.createElement("option");
44185          y.value = v, m(y, f), y.selected = tt(v, n.inputValue), r.appendChild(y);
44186        };
44187        t.forEach((r) => {
44188          const f = r[0], v = r[1];
44189          if (Array.isArray(v)) {
44190            const y = document.createElement("optgroup");
44191            y.label = f, y.disabled = !1, o.appendChild(y), v.forEach((z) => s(y, z[1], z[0]));
44192          } else
44193            s(o, v, f);
44194        }), o.focus();
44195      },
44196      radio: (e, t, n) => {
44197        const o = L(e, i.radio);
44198        t.forEach((r) => {
44199          const f = r[0], v = r[1], y = document.createElement("input"), z = document.createElement("label");
44200          y.type = "radio", y.name = i.radio, y.value = f, tt(f, n.inputValue) && (y.checked = !0);
44201          const Oe = document.createElement("span");
44202          m(Oe, v), Oe.className = i.label, z.appendChild(y), z.appendChild(Oe), o.appendChild(z);
44203        });
44204        const s = o.querySelectorAll("input");
44205        s.length && s[0].focus();
44206      }
44207    }, Ae = (e) => {
44208      const t = [];
44209      return typeof Map < "u" && e instanceof Map ? e.forEach((n, o) => {
44210        let s = n;
44211        typeof s == "object" && (s = Ae(s)), t.push([o, s]);
44212      }) : Object.keys(e).forEach((n) => {
44213        let o = e[n];
44214        typeof o == "object" && (o = Ae(o)), t.push([n, o]);
44215      }), t;
44216    }, tt = (e, t) => t && t.toString() === e.toString();
44217    function nt() {
44218      const e = l.innerParams.get(this);
44219      if (!e)
44220        return;
44221      const t = l.domCache.get(this);
44222      b(t.loader), re() ? e.icon && p($()) : io(t), E([t.popup, t.actions], i.loading), t.popup.removeAttribute("aria-busy"), t.popup.removeAttribute("data-loading"), t.confirmButton.disabled = !1, t.denyButton.disabled = !1, t.cancelButton.disabled = !1;
44223    }
44224    const io = (e) => {
44225      const t = e.popup.getElementsByClassName(e.loader.getAttribute("data-button-to-replace"));
44226      t.length ? p(t[0], "inline-block") : Mt() && b(e.actions);
44227    };
44228    function so(e) {
44229      const t = l.innerParams.get(e || this), n = l.domCache.get(e || this);
44230      return n ? ye(n.popup, t.input) : null;
44231    }
44232    var ee = {
44233      swalPromiseResolve: /* @__PURE__ */ new WeakMap(),
44234      swalPromiseReject: /* @__PURE__ */ new WeakMap()
44235    };
44236    function ot(e, t, n, o) {
44237      re() ? it(e, o) : (Vt(n).then(() => it(e, o)), c.keydownTarget.removeEventListener("keydown", c.keydownHandler, {
44238        capture: c.keydownListenerCapture
44239      }), c.keydownHandlerAdded = !1), /^((?!chrome|android).)*safari/i.test(navigator.userAgent) ? (t.setAttribute("style", "display:none !important"), t.removeAttribute("class"), t.innerHTML = "") : t.remove(), be() && (Vn(), zn(), Je()), ro();
44240    }
44241    function ro() {
44242      E([document.documentElement, document.body], [i.shown, i["height-auto"], i["no-backdrop"], i["toast-shown"]]);
44243    }
44244    function le(e) {
44245      e = uo(e);
44246      const t = ee.swalPromiseResolve.get(this), n = lo(this);
44247      this.isAwaitingPromise() ? e.isDismissed || (te(this), t(e)) : n && t(e);
44248    }
44249    function co() {
44250      return !!l.awaitingPromise.get(this);
44251    }
44252    const lo = (e) => {
44253      const t = u();
44254      if (!t)
44255        return !1;
44256      const n = l.innerParams.get(e);
44257      if (!n || S(t, n.hideClass.popup))
44258        return !1;
44259      E(t, n.showClass.popup), a(t, n.hideClass.popup);
44260      const o = h();
44261      return E(o, n.showClass.backdrop), a(o, n.hideClass.backdrop), fo(e, t, n), !0;
44262    };
44263    function ao(e) {
44264      const t = ee.swalPromiseReject.get(this);
44265      te(this), t && t(e);
44266    }
44267    const te = (e) => {
44268      e.isAwaitingPromise() && (l.awaitingPromise.delete(e), l.innerParams.get(e) || e._destroy());
44269    }, uo = (e) => typeof e > "u" ? {
44270      isConfirmed: !1,
44271      isDenied: !1,
44272      isDismissed: !0
44273    } : Object.assign({
44274      isConfirmed: !1,
44275      isDenied: !1,
44276      isDismissed: !1
44277    }, e), fo = (e, t, n) => {
44278      const o = h(), s = X && Ne(t);
44279      typeof n.willClose == "function" && n.willClose(t), s ? po(e, t, o, n.returnFocus, n.didClose) : ot(e, o, n.returnFocus, n.didClose);
44280    }, po = (e, t, n, o, s) => {
44281      c.swalCloseEventFinishedCallback = ot.bind(null, e, n, o, s), t.addEventListener(X, function(r) {
44282        r.target === t && (c.swalCloseEventFinishedCallback(), delete c.swalCloseEventFinishedCallback);
44283      });
44284    }, it = (e, t) => {
44285      setTimeout(() => {
44286        typeof t == "function" && t.bind(e.params)(), e._destroy();
44287      });
44288    };
44289    function st(e, t, n) {
44290      const o = l.domCache.get(e);
44291      t.forEach((s) => {
44292        o[s].disabled = n;
44293      });
44294    }
44295    function rt(e, t) {
44296      if (!e)
44297        return !1;
44298      if (e.type === "radio") {
44299        const o = e.parentNode.parentNode.querySelectorAll("input");
44300        for (let s = 0; s < o.length; s++)
44301          o[s].disabled = t;
44302      } else
44303        e.disabled = t;
44304    }
44305    function go() {
44306      st(this, ["confirmButton", "denyButton", "cancelButton"], !1);
44307    }
44308    function ho() {
44309      st(this, ["confirmButton", "denyButton", "cancelButton"], !0);
44310    }
44311    function mo() {
44312      return rt(this.getInput(), !1);
44313    }
44314    function bo() {
44315      return rt(this.getInput(), !0);
44316    }
44317    function yo(e) {
44318      const t = l.domCache.get(this), n = l.innerParams.get(this);
44319      m(t.validationMessage, e), t.validationMessage.className = i["validation-message"], n.customClass && n.customClass.validationMessage && a(t.validationMessage, n.customClass.validationMessage), p(t.validationMessage);
44320      const o = this.getInput();
44321      o && (o.setAttribute("aria-invalid", !0), o.setAttribute("aria-describedby", i["validation-message"]), Fe(o), a(o, i.inputerror));
44322    }
44323    function wo() {
44324      const e = l.domCache.get(this);
44325      e.validationMessage && b(e.validationMessage);
44326      const t = this.getInput();
44327      t && (t.removeAttribute("aria-invalid"), t.removeAttribute("aria-describedby"), E(t, i.inputerror));
44328    }
44329    function Co() {
44330      return l.domCache.get(this).progressSteps;
44331    }
44332    function vo(e) {
44333      const t = u(), n = l.innerParams.get(this);
44334      if (!t || S(t, n.hideClass.popup))
44335        return d("You're trying to update the closed or closing popup, that won't work. Use the update() method in preConfirm parameter or show a new popup.");
44336      const o = Po(e), s = Object.assign({}, n, o);
44337      $e(this, s), l.innerParams.set(this, s), Object.defineProperties(this, {
44338        params: {
44339          value: Object.assign({}, this.params, e),
44340          writable: !1,
44341          enumerable: !0
44342        }
44343      });
44344    }
44345    const Po = (e) => {
44346      const t = {};
44347      return Object.keys(e).forEach((n) => {
44348        Me(n) ? t[n] = e[n] : d('Invalid parameter to update: "'.concat(n, `". Updatable params are listed here: https://github.com/sweetalert2/sweetalert2/blob/master/src/utils/params.js
44349
44350If you think this parameter should be updatable, request it here: https://github.com/sweetalert2/sweetalert2/issues/new?template=02_feature_request.md`));
44351      }), t;
44352    };
44353    function Ao() {
44354      const e = l.domCache.get(this), t = l.innerParams.get(this);
44355      if (!t) {
44356        ct(this);
44357        return;
44358      }
44359      e.popup && c.swalCloseEventFinishedCallback && (c.swalCloseEventFinishedCallback(), delete c.swalCloseEventFinishedCallback), c.deferDisposalTimer && (clearTimeout(c.deferDisposalTimer), delete c.deferDisposalTimer), typeof t.didDestroy == "function" && t.didDestroy(), ko(this);
44360    }
44361    const ko = (e) => {
44362      ct(e), delete e.params, delete c.keydownHandler, delete c.keydownTarget, delete c.currentInstance;
44363    }, ct = (e) => {
44364      e.isAwaitingPromise() ? (ke(l, e), l.awaitingPromise.set(e, !0)) : (ke(ee, e), ke(l, e));
44365    }, ke = (e, t) => {
44366      for (const n in e)
44367        e[n].delete(t);
44368    };
44369    var lt = /* @__PURE__ */ Object.freeze({
44370      hideLoading: nt,
44371      disableLoading: nt,
44372      getInput: so,
44373      close: le,
44374      isAwaitingPromise: co,
44375      rejectPromise: ao,
44376      handleAwaitingPromise: te,
44377      closePopup: le,
44378      closeModal: le,
44379      closeToast: le,
44380      enableButtons: go,
44381      disableButtons: ho,
44382      enableInput: mo,
44383      disableInput: bo,
44384      showValidationMessage: yo,
44385      resetValidationMessage: wo,
44386      getProgressSteps: Co,
44387      update: vo,
44388      _destroy: Ao
44389    });
44390    const Bo = (e) => {
44391      const t = l.innerParams.get(e);
44392      e.disableButtons(), t.input ? at(e, "confirm") : Ee(e, !0);
44393    }, Eo = (e) => {
44394      const t = l.innerParams.get(e);
44395      e.disableButtons(), t.returnInputValueOnDeny ? at(e, "deny") : Be(e, !1);
44396    }, So = (e, t) => {
44397      e.disableButtons(), t(R.cancel);
44398    }, at = (e, t) => {
44399      const n = l.innerParams.get(e);
44400      if (!n.input)
44401        return H('The "input" parameter is needed to be set when using returnInputValueOn'.concat(B(t)));
44402      const o = Gn(e, n);
44403      n.inputValidator ? xo(e, o, t) : e.getInput().checkValidity() ? t === "deny" ? Be(e, o) : Ee(e, o) : (e.enableButtons(), e.showValidationMessage(n.validationMessage));
44404    }, xo = (e, t, n) => {
44405      const o = l.innerParams.get(e);
44406      e.disableInput(), Promise.resolve().then(() => _(o.inputValidator(t, o.validationMessage))).then((r) => {
44407        e.enableButtons(), e.enableInput(), r ? e.showValidationMessage(r) : n === "deny" ? Be(e, t) : Ee(e, t);
44408      });
44409    }, Be = (e, t) => {
44410      const n = l.innerParams.get(e || void 0);
44411      n.showLoaderOnDeny && U(I()), n.preDeny ? (l.awaitingPromise.set(e || void 0, !0), Promise.resolve().then(() => _(n.preDeny(t, n.validationMessage))).then((s) => {
44412        s === !1 ? (e.hideLoading(), te(e)) : e.closePopup({
44413          isDenied: !0,
44414          value: typeof s > "u" ? t : s
44415        });
44416      }).catch((s) => dt(e || void 0, s))) : e.closePopup({
44417        isDenied: !0,
44418        value: t
44419      });
44420    }, ut = (e, t) => {
44421      e.closePopup({
44422        isConfirmed: !0,
44423        value: t
44424      });
44425    }, dt = (e, t) => {
44426      e.rejectPromise(t);
44427    }, Ee = (e, t) => {
44428      const n = l.innerParams.get(e || void 0);
44429      n.showLoaderOnConfirm && U(), n.preConfirm ? (e.resetValidationMessage(), l.awaitingPromise.set(e || void 0, !0), Promise.resolve().then(() => _(n.preConfirm(t, n.validationMessage))).then((s) => {
44430        C(ie()) || s === !1 ? (e.hideLoading(), te(e)) : ut(e, typeof s > "u" ? t : s);
44431      }).catch((s) => dt(e || void 0, s))) : ut(e, t);
44432    }, To = (e, t, n) => {
44433      l.innerParams.get(e).toast ? Oo(e, t, n) : (Lo(t), Mo(t), Ho(e, t, n));
44434    }, Oo = (e, t, n) => {
44435      t.popup.onclick = () => {
44436        const o = l.innerParams.get(e);
44437        o && (Io(o) || o.timer || o.input) || n(R.close);
44438      };
44439    }, Io = (e) => e.showConfirmButton || e.showDenyButton || e.showCancelButton || e.showCloseButton;
44440    let ae = !1;
44441    const Lo = (e) => {
44442      e.popup.onmousedown = () => {
44443        e.container.onmouseup = function(t) {
44444          e.container.onmouseup = void 0, t.target === e.container && (ae = !0);
44445        };
44446      };
44447    }, Mo = (e) => {
44448      e.container.onmousedown = () => {
44449        e.popup.onmouseup = function(t) {
44450          e.popup.onmouseup = void 0, (t.target === e.popup || e.popup.contains(t.target)) && (ae = !0);
44451        };
44452      };
44453    }, Ho = (e, t, n) => {
44454      t.container.onclick = (o) => {
44455        const s = l.innerParams.get(e);
44456        if (ae) {
44457          ae = !1;
44458          return;
44459        }
44460        o.target === t.container && ne(s.allowOutsideClick) && n(R.backdrop);
44461      };
44462    }, jo = () => C(u()), ft = () => k() && k().click(), Do = () => I() && I().click(), Vo = () => j() && j().click(), qo = (e, t, n, o) => {
44463      t.keydownTarget && t.keydownHandlerAdded && (t.keydownTarget.removeEventListener("keydown", t.keydownHandler, {
44464        capture: t.keydownListenerCapture
44465      }), t.keydownHandlerAdded = !1), n.toast || (t.keydownHandler = (s) => Wo(e, s, o), t.keydownTarget = n.keydownListenerCapture ? window : u(), t.keydownListenerCapture = n.keydownListenerCapture, t.keydownTarget.addEventListener("keydown", t.keydownHandler, {
44466        capture: t.keydownListenerCapture
44467      }), t.keydownHandlerAdded = !0);
44468    }, Se = (e, t, n) => {
44469      const o = me();
44470      if (o.length)
44471        return t = t + n, t === o.length ? t = 0 : t === -1 && (t = o.length - 1), o[t].focus();
44472      u().focus();
44473    }, pt = ["ArrowRight", "ArrowDown"], Fo = ["ArrowLeft", "ArrowUp"], Wo = (e, t, n) => {
44474      const o = l.innerParams.get(e);
44475      o && (t.isComposing || t.keyCode === 229 || (o.stopKeydownPropagation && t.stopPropagation(), t.key === "Enter" ? Ro(e, t, o) : t.key === "Tab" ? Uo(t, o) : [...pt, ...Fo].includes(t.key) ? No(t.key) : t.key === "Escape" && zo(t, o, n)));
44476    }, Ro = (e, t, n) => {
44477      if (ne(n.allowEnterKey) && t.target && e.getInput() && t.target.outerHTML === e.getInput().outerHTML) {
44478        if (["textarea", "file"].includes(n.input))
44479          return;
44480        ft(), t.preventDefault();
44481      }
44482    }, Uo = (e, t) => {
44483      const n = e.target, o = me();
44484      let s = -1;
44485      for (let r = 0; r < o.length; r++)
44486        if (n === o[r]) {
44487          s = r;
44488          break;
44489        }
44490      e.shiftKey ? Se(t, s, -1) : Se(t, s, 1), e.stopPropagation(), e.preventDefault();
44491    }, No = (e) => {
44492      const t = k(), n = I(), o = j();
44493      if (![t, n, o].includes(document.activeElement))
44494        return;
44495      const s = pt.includes(e) ? "nextElementSibling" : "previousElementSibling";
44496      let r = document.activeElement;
44497      for (let f = 0; f < J().children.length; f++) {
44498        if (r = r[s], !r)
44499          return;
44500        if (C(r) && r instanceof HTMLButtonElement)
44501          break;
44502      }
44503      r instanceof HTMLButtonElement && r.focus();
44504    }, zo = (e, t, n) => {
44505      ne(t.allowEscapeKey) && (e.preventDefault(), n(R.esc));
44506    }, Ko = (e) => typeof e == "object" && e.jquery, gt = (e) => e instanceof Element || Ko(e), _o = (e) => {
44507      const t = {};
44508      return typeof e[0] == "object" && !gt(e[0]) ? Object.assign(t, e[0]) : ["title", "html", "icon"].forEach((n, o) => {
44509        const s = e[o];
44510        typeof s == "string" || gt(s) ? t[n] = s : s !== void 0 && H("Unexpected type of ".concat(n, '! Expected "string" or "Element", got ').concat(typeof s));
44511      }), t;
44512    };
44513    function Yo() {
44514      const e = this;
44515      for (var t = arguments.length, n = new Array(t), o = 0; o < t; o++)
44516        n[o] = arguments[o];
44517      return new e(...n);
44518    }
44519    function Zo(e) {
44520      class t extends this {
44521        _main(o, s) {
44522          return super._main(o, Object.assign({}, e, s));
44523        }
44524      }
44525      return t;
44526    }
44527    const $o = () => c.timeout && c.timeout.getTimerLeft(), ht = () => {
44528      if (c.timeout)
44529        return Ht(), c.timeout.stop();
44530    }, mt = () => {
44531      if (c.timeout) {
44532        const e = c.timeout.start();
44533        return we(e), e;
44534      }
44535    }, Jo = () => {
44536      const e = c.timeout;
44537      return e && (e.running ? ht() : mt());
44538    }, Go = (e) => {
44539      if (c.timeout) {
44540        const t = c.timeout.increase(e);
44541        return we(t, !0), t;
44542      }
44543    }, Xo = () => c.timeout && c.timeout.isRunning();
44544    let bt = !1;
44545    const xe = {};
44546    function Qo() {
44547      let e = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : "data-swal-template";
44548      xe[e] = this, bt || (document.body.addEventListener("click", ei), bt = !0);
44549    }
44550    const ei = (e) => {
44551      for (let t = e.target; t && t !== document; t = t.parentNode)
44552        for (const n in xe) {
44553          const o = t.getAttribute(n);
44554          if (o) {
44555            xe[n].fire({
44556              template: o
44557            });
44558            return;
44559          }
44560        }
44561    };
44562    var ti = /* @__PURE__ */ Object.freeze({
44563      isValidParameter: Le,
44564      isUpdatableParameter: Me,
44565      isDeprecatedParameter: ge,
44566      argsToParams: _o,
44567      isVisible: jo,
44568      clickConfirm: ft,
44569      clickDeny: Do,
44570      clickCancel: Vo,
44571      getContainer: h,
44572      getPopup: u,
44573      getTitle: je,
44574      getHtmlContainer: oe,
44575      getImage: De,
44576      getIcon: $,
44577      getInputLabel: Tt,
44578      getCloseButton: he,
44579      getActions: J,
44580      getConfirmButton: k,
44581      getDenyButton: I,
44582      getCancelButton: j,
44583      getLoader: F,
44584      getFooter: qe,
44585      getTimerProgressBar: se,
44586      getFocusableElements: me,
44587      getValidationMessage: ie,
44588      isLoading: It,
44589      fire: Yo,
44590      mixin: Zo,
44591      showLoading: U,
44592      enableLoading: U,
44593      getTimerLeft: $o,
44594      stopTimer: ht,
44595      resumeTimer: mt,
44596      toggleTimer: Jo,
44597      increaseTimer: Go,
44598      isTimerRunning: Xo,
44599      bindClickHandler: Qo
44600    });
44601    let Te;
44602    class N {
44603      constructor() {
44604        if (typeof window > "u")
44605          return;
44606        Te = this;
44607        for (var t = arguments.length, n = new Array(t), o = 0; o < t; o++)
44608          n[o] = arguments[o];
44609        const s = Object.freeze(this.constructor.argsToParams(n));
44610        Object.defineProperties(this, {
44611          params: {
44612            value: s,
44613            writable: !1,
44614            enumerable: !0,
44615            configurable: !0
44616          }
44617        });
44618        const r = this._main(this.params);
44619        l.promise.set(this, r);
44620      }
44621      _main(t) {
44622        let n = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {};
44623        St(Object.assign({}, n, t)), c.currentInstance && (c.currentInstance._destroy(), be() && Je()), c.currentInstance = this;
44624        const o = oi(t, n);
44625        Hn(o), Object.freeze(o), c.timeout && (c.timeout.stop(), delete c.timeout), clearTimeout(c.restoreFocusTimeout);
44626        const s = ii(this);
44627        return $e(this, o), l.innerParams.set(this, o), ni(this, s, o);
44628      }
44629      // `catch` cannot be the name of a module export, so we define our thenable methods here instead
44630      then(t) {
44631        return l.promise.get(this).then(t);
44632      }
44633      finally(t) {
44634        return l.promise.get(this).finally(t);
44635      }
44636    }
44637    const ni = (e, t, n) => new Promise((o, s) => {
44638      const r = (f) => {
44639        e.closePopup({
44640          isDismissed: !0,
44641          dismiss: f
44642        });
44643      };
44644      ee.swalPromiseResolve.set(e, o), ee.swalPromiseReject.set(e, s), t.confirmButton.onclick = () => Bo(e), t.denyButton.onclick = () => Eo(e), t.cancelButton.onclick = () => So(e, r), t.closeButton.onclick = () => r(R.close), To(e, t, r), qo(e, c, n, r), Jn(e, n), Kn(n), si(c, n, r), ri(t, n), setTimeout(() => {
44645        t.container.scrollTop = 0;
44646      });
44647    }), oi = (e, t) => {
44648      const n = kn(e), o = Object.assign({}, q, t, n, e);
44649      return o.showClass = Object.assign({}, q.showClass, o.showClass), o.hideClass = Object.assign({}, q.hideClass, o.hideClass), o;
44650    }, ii = (e) => {
44651      const t = {
44652        popup: u(),
44653        container: h(),
44654        actions: J(),
44655        confirmButton: k(),
44656        denyButton: I(),
44657        cancelButton: j(),
44658        loader: F(),
44659        closeButton: he(),
44660        validationMessage: ie(),
44661        progressSteps: Ve()
44662      };
44663      return l.domCache.set(e, t), t;
44664    }, si = (e, t, n) => {
44665      const o = se();
44666      b(o), t.timer && (e.timeout = new jn(() => {
44667        n("timer"), delete e.timeout;
44668      }, t.timer), t.timerProgressBar && (p(o), A(o, t, "timerProgressBar"), setTimeout(() => {
44669        e.timeout && e.timeout.running && we(t.timer);
44670      })));
44671    }, ri = (e, t) => {
44672      if (!t.toast) {
44673        if (!ne(t.allowEnterKey))
44674          return li();
44675        ci(e, t) || Se(t, -1, 1);
44676      }
44677    }, ci = (e, t) => t.focusDeny && C(e.denyButton) ? (e.denyButton.focus(), !0) : t.focusCancel && C(e.cancelButton) ? (e.cancelButton.focus(), !0) : t.focusConfirm && C(e.confirmButton) ? (e.confirmButton.focus(), !0) : !1, li = () => {
44678      document.activeElement instanceof HTMLElement && typeof document.activeElement.blur == "function" && document.activeElement.blur();
44679    };
44680    Object.assign(N.prototype, lt), Object.assign(N, ti), Object.keys(lt).forEach((e) => {
44681      N[e] = function() {
44682        if (Te)
44683          return Te[e](...arguments);
44684      };
44685    }), N.DismissReason = R, N.version = "11.4.4";
44686    const ue = N;
44687    return ue.default = ue, ue;
44688  }), typeof M < "u" && M.Sweetalert2 && (M.swal = M.sweetAlert = M.Swal = M.SweetAlert = M.Sweetalert2);
44689})(yt);
44690var ui = yt.exports;
44691const de = /* @__PURE__ */ ai(ui);
44692class di {
44693  static install(T, K = {}) {
44694    var g;
44695    const O = de.mixin(K), B = function(...d) {
44696      return O.fire.call(O, ...d);
44697    };
44698    Object.assign(B, de), Object.keys(de).filter((d) => typeof de[d] == "function").forEach((d) => {
44699      B[d] = O[d].bind(O);
44700    }), (g = T.config) != null && g.globalProperties && !T.config.globalProperties.$swal ? (T.config.globalProperties.$swal = B, T.provide("$swal", B)) : Object.prototype.hasOwnProperty.call(T, "$swal") || (T.prototype.$swal = B, T.swal = B);
44701  }
44702}
44703
44704
44705
44706/***/ }),
44707
vendor: 6,404 bytes, lines 44708-44968
44708/***/ "./node_modules/vue-youtube/dist/vue-youtube.js":
44709/*!******************************************************!*\
44710  !*** ./node_modules/vue-youtube/dist/vue-youtube.js ***!
44711  \******************************************************/
44712/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
44713
44714/*!
44715 * vue-youtube v1.4.0
44716 * (c) 2019 Antério Vieira
44717 * Released under the MIT License.
44718 */
44719
44720(function (global, factory) {
44721	 true ? factory(exports) :
44722	0;
44723}(this, (function (exports) { 'use strict';
44724
44725var commonjsGlobal = typeof window !== 'undefined' ? window : typeof __webpack_require__.g !== 'undefined' ? __webpack_require__.g : typeof self !== 'undefined' ? self : {};
44726
44727
44728
44729
44730
44731function createCommonjsModule(fn, module) {
44732	return module = { exports: {} }, fn(module, module.exports), module.exports;
44733}
44734
44735var getYoutubeId = createCommonjsModule(function (module, exports) {
44736(function (root, factory) {
44737  {
44738    module.exports = factory();
44739  }
44740}(commonjsGlobal, function (exports) {
44741
44742  return function (url, opts) {
44743    if (opts == undefined) {
44744      opts = {fuzzy: true};
44745    }
44746
44747    if (/youtu\.?be/.test(url)) {
44748
44749      // Look first for known patterns
44750      var i;
44751      var patterns = [
44752        /youtu\.be\/([^#\&\?]{11})/,  // youtu.be/<id>
44753        /\?v=([^#\&\?]{11})/,         // ?v=<id>
44754        /\&v=([^#\&\?]{11})/,         // &v=<id>
44755        /embed\/([^#\&\?]{11})/,      // embed/<id>
44756        /\/v\/([^#\&\?]{11})/         // /v/<id>
44757      ];
44758
44759      // If any pattern matches, return the ID
44760      for (i = 0; i < patterns.length; ++i) {
44761        if (patterns[i].test(url)) {
44762          return patterns[i].exec(url)[1];
44763        }
44764      }
44765
44766      if (opts.fuzzy) {
44767        // If that fails, break it apart by certain characters and look
44768        // for the 11 character key
44769        var tokens = url.split(/[\/\&\?=#\.\s]/g);
44770        for (i = 0; i < tokens.length; ++i) {
44771          if (/^[^#\&\?]{11}$/.test(tokens[i])) {
44772            return tokens[i];
44773          }
44774        }
44775      }
44776    }
44777
44778    return null;
44779  };
44780
44781}));
44782});
44783
44784var player = __webpack_require__(/*! youtube-player */ "./node_modules/youtube-player/dist/index.js");
44785
44786var UNSTARTED = -1;
44787var ENDED = 0;
44788var PLAYING = 1;
44789var PAUSED = 2;
44790var BUFFERING = 3;
44791var CUED = 5;
44792
44793var Youtube = {
44794  name: 'Youtube',
44795  props: {
44796    videoId: String,
44797    playerVars: {
44798      type: Object,
44799      default: function () { return ({}); }
44800    },
44801    height: {
44802      type: [Number, String],
44803      default: 360
44804    },
44805    width: {
44806      type: [Number, String],
44807      default: 640
44808    },
44809    resize: {
44810      type: Boolean,
44811      default: false
44812    },
44813    resizeDelay: {
44814      type: Number,
44815      default: 100
44816    },
44817    nocookie: {
44818      type: Boolean,
44819      default: false
44820    },
44821    fitParent: {
44822      type: Boolean,
44823      default: false
44824    }
44825  },
44826  data: function data () {
44827    return {
44828      player: {},
44829      events: ( obj = {}, obj[UNSTARTED] = 'unstarted', obj[PLAYING] = 'playing', obj[PAUSED] = 'paused', obj[ENDED] = 'ended', obj[BUFFERING] = 'buffering', obj[CUED] = 'cued', obj ),
44830      resizeTimeout: null
44831    }
44832    var obj;
44833  },
44834  computed: {
44835    aspectRatio: function aspectRatio () {
44836      return this.width / this.height
44837    }
44838  },
44839  methods: {
44840    playerReady: function playerReady (e) {
44841      this.$emit('ready', e.target);
44842    },
44843    playerStateChange: function playerStateChange (e) {
44844      if (e.data !== null && e.data !== UNSTARTED) {
44845        this.$emit(this.events[e.data], e.target);
44846      }
44847    },
44848    playerError: function playerError (e) {
44849      this.$emit('error', e.target);
44850    },
44851    updatePlayer: function updatePlayer (videoId) {
44852      if (!videoId) {
44853        this.player.stopVideo();
44854        return
44855      }
44856
44857      if (this.playerVars.autoplay === 1) {
44858        this.player.loadVideoById({ videoId: videoId });
44859        return
44860      }
44861
44862      this.player.cueVideoById({ videoId: videoId });
44863    },
44864    resizeProportionally: function resizeProportionally () {
44865      var this$1 = this;
44866
44867      this.player.getIframe().then(function (iframe) {
44868        var width = this$1.fitParent
44869          ? iframe.parentElement.offsetWidth
44870          : iframe.offsetWidth;
44871        var height = width / this$1.aspectRatio;
44872        this$1.player.setSize(width, height);
44873      });
44874    },
44875    onResize: function onResize () {
44876      clearTimeout(this.resizeTimeout);
44877      this.resizeTimeout = setTimeout(
44878        this.resizeProportionally,
44879        this.resizeDelay
44880      );
44881    }
44882  },
44883  watch: {
44884    videoId: 'updatePlayer',
44885    resize: function resize (val) {
44886      if (val) {
44887        window.addEventListener('resize', this.onResize);
44888        this.resizeProportionally();
44889      } else {
44890        window.removeEventListener('resize', this.onResize);
44891        this.player.setSize(this.width, this.height);
44892      }
44893    },
44894    width: function width (val) {
44895      this.player.setSize(val, this.height);
44896    },
44897    height: function height (val) {
44898      this.player.setSize(this.width, val);
44899    }
44900  },
44901  beforeDestroy: function beforeDestroy () {
44902    if (this.player !== null && this.player.destroy) {
44903      this.player.destroy();
44904      delete this.player;
44905    }
44906
44907    if (this.resize) {
44908      window.removeEventListener('resize', this.onResize);
44909    }
44910  },
44911  mounted: function mounted () {
44912    window.YTConfig = {
44913      host: 'https://www.youtube.com/iframe_api'
44914    };
44915
44916    var host = this.nocookie ? 'https://www.youtube-nocookie.com' : 'https://www.youtube.com';
44917
44918    this.player = player(this.$el, {
44919      host: host,
44920      width: this.width,
44921      height: this.height,
44922      videoId: this.videoId,
44923      playerVars: this.playerVars
44924    });
44925
44926    this.player.on('ready', this.playerReady);
44927    this.player.on('stateChange', this.playerStateChange);
44928    this.player.on('error', this.playerError);
44929
44930    if (this.resize) {
44931      window.addEventListener('resize', this.onResize);
44932    }
44933
44934    if (this.fitParent) {
44935      this.resizeProportionally();
44936    }
44937  },
44938  render: function render (h) {
44939    return h('div')
44940  }
44941};
44942
44943function plugin (Vue) {
44944  Vue.prototype.$youtube = {
44945    getIdFromUrl: getYoutubeId
44946  };
44947
44948  Vue.component('youtube', Youtube);
44949}
44950
44951if (typeof window !== 'undefined' && window.Vue) {
44952  window.Vue.use(plugin);
44953}
44954
44955var version = '1.4.0';
44956
44957exports['default'] = plugin;
44958exports.Youtube = Youtube;
44959exports.getIdFromUrl = getYoutubeId;
44960exports.version = version;
44961
44962Object.defineProperty(exports, '__esModule', { value: true });
44963
44964})));
44965
44966
44967/***/ }),
44968
vendor: 416,068 bytes, lines 44969-56931
44969/***/ "./node_modules/vue/dist/vue.esm.js":
44970/*!******************************************!*\
44971  !*** ./node_modules/vue/dist/vue.esm.js ***!
44972  \******************************************/
44973/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
44974
44975"use strict";
44976__webpack_require__.r(__webpack_exports__);
44977/* harmony export */ __webpack_require__.d(__webpack_exports__, {
44978/* harmony export */   EffectScope: () => (/* binding */ EffectScope),
44979/* harmony export */   computed: () => (/* binding */ computed),
44980/* harmony export */   customRef: () => (/* binding */ customRef),
44981/* harmony export */   "default": () => (/* binding */ Vue),
44982/* harmony export */   defineAsyncComponent: () => (/* binding */ defineAsyncComponent),
44983/* harmony export */   defineComponent: () => (/* binding */ defineComponent),
44984/* harmony export */   del: () => (/* binding */ del),
44985/* harmony export */   effectScope: () => (/* binding */ effectScope),
44986/* harmony export */   getCurrentInstance: () => (/* binding */ getCurrentInstance),
44987/* harmony export */   getCurrentScope: () => (/* binding */ getCurrentScope),
44988/* harmony export */   h: () => (/* binding */ h),
44989/* harmony export */   inject: () => (/* binding */ inject),
44990/* harmony export */   isProxy: () => (/* binding */ isProxy),
44991/* harmony export */   isReactive: () => (/* binding */ isReactive),
44992/* harmony export */   isReadonly: () => (/* binding */ isReadonly),
44993/* harmony export */   isRef: () => (/* binding */ isRef),
44994/* harmony export */   isShallow: () => (/* binding */ isShallow),
44995/* harmony export */   markRaw: () => (/* binding */ markRaw),
44996/* harmony export */   mergeDefaults: () => (/* binding */ mergeDefaults),
44997/* harmony export */   nextTick: () => (/* binding */ nextTick),
44998/* harmony export */   onActivated: () => (/* binding */ onActivated),
44999/* harmony export */   onBeforeMount: () => (/* binding */ onBeforeMount),
45000/* harmony export */   onBeforeUnmount: () => (/* binding */ onBeforeUnmount),
45001/* harmony export */   onBeforeUpdate: () => (/* binding */ onBeforeUpdate),
45002/* harmony export */   onDeactivated: () => (/* binding */ onDeactivated),
45003/* harmony export */   onErrorCaptured: () => (/* binding */ onErrorCaptured),
45004/* harmony export */   onMounted: () => (/* binding */ onMounted),
45005/* harmony export */   onRenderTracked: () => (/* binding */ onRenderTracked),
45006/* harmony export */   onRenderTriggered: () => (/* binding */ onRenderTriggered),
45007/* harmony export */   onScopeDispose: () => (/* binding */ onScopeDispose),
45008/* harmony export */   onServerPrefetch: () => (/* binding */ onServerPrefetch),
45009/* harmony export */   onUnmounted: () => (/* binding */ onUnmounted),
45010/* harmony export */   onUpdated: () => (/* binding */ onUpdated),
45011/* harmony export */   provide: () => (/* binding */ provide),
45012/* harmony export */   proxyRefs: () => (/* binding */ proxyRefs),
45013/* harmony export */   reactive: () => (/* binding */ reactive),
45014/* harmony export */   readonly: () => (/* binding */ readonly),
45015/* harmony export */   ref: () => (/* binding */ ref$1),
45016/* harmony export */   set: () => (/* binding */ set),
45017/* harmony export */   shallowReactive: () => (/* binding */ shallowReactive),
45018/* harmony export */   shallowReadonly: () => (/* binding */ shallowReadonly),
45019/* harmony export */   shallowRef: () => (/* binding */ shallowRef),
45020/* harmony export */   toRaw: () => (/* binding */ toRaw),
45021/* harmony export */   toRef: () => (/* binding */ toRef),
45022/* harmony export */   toRefs: () => (/* binding */ toRefs),
45023/* harmony export */   triggerRef: () => (/* binding */ triggerRef),
45024/* harmony export */   unref: () => (/* binding */ unref),
45025/* harmony export */   useAttrs: () => (/* binding */ useAttrs),
45026/* harmony export */   useCssModule: () => (/* binding */ useCssModule),
45027/* harmony export */   useCssVars: () => (/* binding */ useCssVars),
45028/* harmony export */   useListeners: () => (/* binding */ useListeners),
45029/* harmony export */   useSlots: () => (/* binding */ useSlots),
45030/* harmony export */   version: () => (/* binding */ version),
45031/* harmony export */   watch: () => (/* binding */ watch),
45032/* harmony export */   watchEffect: () => (/* binding */ watchEffect),
45033/* harmony export */   watchPostEffect: () => (/* binding */ watchPostEffect),
45034/* harmony export */   watchSyncEffect: () => (/* binding */ watchSyncEffect)
45035/* harmony export */ });
45036/*!
45037 * Vue.js v2.7.16
45038 * (c) 2014-2023 Evan You
45039 * Released under the MIT License.
45040 */
45041var emptyObject = Object.freeze({});
45042var isArray = Array.isArray;
45043// These helpers produce better VM code in JS engines due to their
45044// explicitness and function inlining.
45045function isUndef(v) {
45046    return v === undefined || v === null;
45047}
45048function isDef(v) {
45049    return v !== undefined && v !== null;
45050}
45051function isTrue(v) {
45052    return v === true;
45053}
45054function isFalse(v) {
45055    return v === false;
45056}
45057/**
45058 * Check if value is primitive.
45059 */
45060function isPrimitive(value) {
45061    return (typeof value === 'string' ||
45062        typeof value === 'number' ||
45063        // $flow-disable-line
45064        typeof value === 'symbol' ||
45065        typeof value === 'boolean');
45066}
45067function isFunction(value) {
45068    return typeof value === 'function';
45069}
45070/**
45071 * Quick object check - this is primarily used to tell
45072 * objects from primitive values when we know the value
45073 * is a JSON-compliant type.
45074 */
45075function isObject(obj) {
45076    return obj !== null && typeof obj === 'object';
45077}
45078/**
45079 * Get the raw type string of a value, e.g., [object Object].
45080 */
45081var _toString = Object.prototype.toString;
45082function toRawType(value) {
45083    return _toString.call(value).slice(8, -1);
45084}
45085/**
45086 * Strict object type check. Only returns true
45087 * for plain JavaScript objects.
45088 */
45089function isPlainObject(obj) {
45090    return _toString.call(obj) === '[object Object]';
45091}
45092function isRegExp(v) {
45093    return _toString.call(v) === '[object RegExp]';
45094}
45095/**
45096 * Check if val is a valid array index.
45097 */
45098function isValidArrayIndex(val) {
45099    var n = parseFloat(String(val));
45100    return n >= 0 && Math.floor(n) === n && isFinite(val);
45101}
45102function isPromise(val) {
45103    return (isDef(val) &&
45104        typeof val.then === 'function' &&
45105        typeof val.catch === 'function');
45106}
45107/**
45108 * Convert a value to a string that is actually rendered.
45109 */
45110function toString(val) {
45111    return val == null
45112        ? ''
45113        : Array.isArray(val) || (isPlainObject(val) && val.toString === _toString)
45114            ? JSON.stringify(val, replacer, 2)
45115            : String(val);
45116}
45117function replacer(_key, val) {
45118    // avoid circular deps from v3
45119    if (val && val.__v_isRef) {
45120        return val.value;
45121    }
45122    return val;
45123}
45124/**
45125 * Convert an input value to a number for persistence.
45126 * If the conversion fails, return original string.
45127 */
45128function toNumber(val) {
45129    var n = parseFloat(val);
45130    return isNaN(n) ? val : n;
45131}
45132/**
45133 * Make a map and return a function for checking if a key
45134 * is in that map.
45135 */
45136function makeMap(str, expectsLowerCase) {
45137    var map = Object.create(null);
45138    var list = str.split(',');
45139    for (var i = 0; i < list.length; i++) {
45140        map[list[i]] = true;
45141    }
45142    return expectsLowerCase ? function (val) { return map[val.toLowerCase()]; } : function (val) { return map[val]; };
45143}
45144/**
45145 * Check if a tag is a built-in tag.
45146 */
45147var isBuiltInTag = makeMap('slot,component', true);
45148/**
45149 * Check if an attribute is a reserved attribute.
45150 */
45151var isReservedAttribute = makeMap('key,ref,slot,slot-scope,is');
45152/**
45153 * Remove an item from an array.
45154 */
45155function remove$2(arr, item) {
45156    var len = arr.length;
45157    if (len) {
45158        // fast path for the only / last item
45159        if (item === arr[len - 1]) {
45160            arr.length = len - 1;
45161            return;
45162        }
45163        var index = arr.indexOf(item);
45164        if (index > -1) {
45165            return arr.splice(index, 1);
45166        }
45167    }
45168}
45169/**
45170 * Check whether an object has the property.
45171 */
45172var hasOwnProperty = Object.prototype.hasOwnProperty;
45173function hasOwn(obj, key) {
45174    return hasOwnProperty.call(obj, key);
45175}
45176/**
45177 * Create a cached version of a pure function.
45178 */
45179function cached(fn) {
45180    var cache = Object.create(null);
45181    return function cachedFn(str) {
45182        var hit = cache[str];
45183        return hit || (cache[str] = fn(str));
45184    };
45185}
45186/**
45187 * Camelize a hyphen-delimited string.
45188 */
45189var camelizeRE = /-(\w)/g;
45190var camelize = cached(function (str) {
45191    return str.replace(camelizeRE, function (_, c) { return (c ? c.toUpperCase() : ''); });
45192});
45193/**
45194 * Capitalize a string.
45195 */
45196var capitalize = cached(function (str) {
45197    return str.charAt(0).toUpperCase() + str.slice(1);
45198});
45199/**
45200 * Hyphenate a camelCase string.
45201 */
45202var hyphenateRE = /\B([A-Z])/g;
45203var hyphenate = cached(function (str) {
45204    return str.replace(hyphenateRE, '-$1').toLowerCase();
45205});
45206/**
45207 * Simple bind polyfill for environments that do not support it,
45208 * e.g., PhantomJS 1.x. Technically, we don't need this anymore
45209 * since native bind is now performant enough in most browsers.
45210 * But removing it would mean breaking code that was able to run in
45211 * PhantomJS 1.x, so this must be kept for backward compatibility.
45212 */
45213/* istanbul ignore next */
45214function polyfillBind(fn, ctx) {
45215    function boundFn(a) {
45216        var l = arguments.length;
45217        return l
45218            ? l > 1
45219                ? fn.apply(ctx, arguments)
45220                : fn.call(ctx, a)
45221            : fn.call(ctx);
45222    }
45223    boundFn._length = fn.length;
45224    return boundFn;
45225}
45226function nativeBind(fn, ctx) {
45227    return fn.bind(ctx);
45228}
45229// @ts-expect-error bind cannot be `undefined`
45230var bind$1 = Function.prototype.bind ? nativeBind : polyfillBind;
45231/**
45232 * Convert an Array-like object to a real Array.
45233 */
45234function toArray(list, start) {
45235    start = start || 0;
45236    var i = list.length - start;
45237    var ret = new Array(i);
45238    while (i--) {
45239        ret[i] = list[i + start];
45240    }
45241    return ret;
45242}
45243/**
45244 * Mix properties into target object.
45245 */
45246function extend(to, _from) {
45247    for (var key in _from) {
45248        to[key] = _from[key];
45249    }
45250    return to;
45251}
45252/**
45253 * Merge an Array of Objects into a single Object.
45254 */
45255function toObject(arr) {
45256    var res = {};
45257    for (var i = 0; i < arr.length; i++) {
45258        if (arr[i]) {
45259            extend(res, arr[i]);
45260        }
45261    }
45262    return res;
45263}
45264/* eslint-disable no-unused-vars */
45265/**
45266 * Perform no operation.
45267 * Stubbing args to make Flow happy without leaving useless transpiled code
45268 * with ...rest (https://flow.org/blog/2017/05/07/Strict-Function-Call-Arity/).
45269 */
45270function noop(a, b, c) { }
45271/**
45272 * Always return false.
45273 */
45274var no = function (a, b, c) { return false; };
45275/* eslint-enable no-unused-vars */
45276/**
45277 * Return the same value.
45278 */
45279var identity = function (_) { return _; };
45280/**
45281 * Generate a string containing static keys from compiler modules.
45282 */
45283function genStaticKeys$1(modules) {
45284    return modules
45285        .reduce(function (keys, m) { return keys.concat(m.staticKeys || []); }, [])
45286        .join(',');
45287}
45288/**
45289 * Check if two values are loosely equal - that is,
45290 * if they are plain objects, do they have the same shape?
45291 */
45292function looseEqual(a, b) {
45293    if (a === b)
45294        return true;
45295    var isObjectA = isObject(a);
45296    var isObjectB = isObject(b);
45297    if (isObjectA && isObjectB) {
45298        try {
45299            var isArrayA = Array.isArray(a);
45300            var isArrayB = Array.isArray(b);
45301            if (isArrayA && isArrayB) {
45302                return (a.length === b.length &&
45303                    a.every(function (e, i) {
45304                        return looseEqual(e, b[i]);
45305                    }));
45306            }
45307            else if (a instanceof Date && b instanceof Date) {
45308                return a.getTime() === b.getTime();
45309            }
45310            else if (!isArrayA && !isArrayB) {
45311                var keysA = Object.keys(a);
45312                var keysB = Object.keys(b);
45313                return (keysA.length === keysB.length &&
45314                    keysA.every(function (key) {
45315                        return looseEqual(a[key], b[key]);
45316                    }));
45317            }
45318            else {
45319                /* istanbul ignore next */
45320                return false;
45321            }
45322        }
45323        catch (e) {
45324            /* istanbul ignore next */
45325            return false;
45326        }
45327    }
45328    else if (!isObjectA && !isObjectB) {
45329        return String(a) === String(b);
45330    }
45331    else {
45332        return false;
45333    }
45334}
45335/**
45336 * Return the first index at which a loosely equal value can be
45337 * found in the array (if value is a plain object, the array must
45338 * contain an object of the same shape), or -1 if it is not present.
45339 */
45340function looseIndexOf(arr, val) {
45341    for (var i = 0; i < arr.length; i++) {
45342        if (looseEqual(arr[i], val))
45343            return i;
45344    }
45345    return -1;
45346}
45347/**
45348 * Ensure a function is called only once.
45349 */
45350function once(fn) {
45351    var called = false;
45352    return function () {
45353        if (!called) {
45354            called = true;
45355            fn.apply(this, arguments);
45356        }
45357    };
45358}
45359// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is#polyfill
45360function hasChanged(x, y) {
45361    if (x === y) {
45362        return x === 0 && 1 / x !== 1 / y;
45363    }
45364    else {
45365        return x === x || y === y;
45366    }
45367}
45368
45369var SSR_ATTR = 'data-server-rendered';
45370var ASSET_TYPES = ['component', 'directive', 'filter'];
45371var LIFECYCLE_HOOKS = [
45372    'beforeCreate',
45373    'created',
45374    'beforeMount',
45375    'mounted',
45376    'beforeUpdate',
45377    'updated',
45378    'beforeDestroy',
45379    'destroyed',
45380    'activated',
45381    'deactivated',
45382    'errorCaptured',
45383    'serverPrefetch',
45384    'renderTracked',
45385    'renderTriggered'
45386];
45387
45388var config = {
45389    /**
45390     * Option merge strategies (used in core/util/options)
45391     */
45392    // $flow-disable-line
45393    optionMergeStrategies: Object.create(null),
45394    /**
45395     * Whether to suppress warnings.
45396     */
45397    silent: false,
45398    /**
45399     * Show production mode tip message on boot?
45400     */
45401    productionTip: "development" !== 'production',
45402    /**
45403     * Whether to enable devtools
45404     */
45405    devtools: "development" !== 'production',
45406    /**
45407     * Whether to record perf
45408     */
45409    performance: false,
45410    /**
45411     * Error handler for watcher errors
45412     */
45413    errorHandler: null,
45414    /**
45415     * Warn handler for watcher warns
45416     */
45417    warnHandler: null,
45418    /**
45419     * Ignore certain custom elements
45420     */
45421    ignoredElements: [],
45422    /**
45423     * Custom user key aliases for v-on
45424     */
45425    // $flow-disable-line
45426    keyCodes: Object.create(null),
45427    /**
45428     * Check if a tag is reserved so that it cannot be registered as a
45429     * component. This is platform-dependent and may be overwritten.
45430     */
45431    isReservedTag: no,
45432    /**
45433     * Check if an attribute is reserved so that it cannot be used as a component
45434     * prop. This is platform-dependent and may be overwritten.
45435     */
45436    isReservedAttr: no,
45437    /**
45438     * Check if a tag is an unknown element.
45439     * Platform-dependent.
45440     */
45441    isUnknownElement: no,
45442    /**
45443     * Get the namespace of an element
45444     */
45445    getTagNamespace: noop,
45446    /**
45447     * Parse the real tag name for the specific platform.
45448     */
45449    parsePlatformTagName: identity,
45450    /**
45451     * Check if an attribute must be bound using property, e.g. value
45452     * Platform-dependent.
45453     */
45454    mustUseProp: no,
45455    /**
45456     * Perform updates asynchronously. Intended to be used by Vue Test Utils
45457     * This will significantly reduce performance if set to false.
45458     */
45459    async: true,
45460    /**
45461     * Exposed for legacy reasons
45462     */
45463    _lifecycleHooks: LIFECYCLE_HOOKS
45464};
45465
45466/**
45467 * unicode letters used for parsing html tags, component names and property paths.
45468 * using https://www.w3.org/TR/html53/semantics-scripting.html#potentialcustomelementname
45469 * skipping \u10000-\uEFFFF due to it freezing up PhantomJS
45470 */
45471var unicodeRegExp = /a-zA-Z\u00B7\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u037D\u037F-\u1FFF\u200C-\u200D\u203F-\u2040\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD/;
45472/**
45473 * Check if a string starts with $ or _
45474 */
45475function isReserved(str) {
45476    var c = (str + '').charCodeAt(0);
45477    return c === 0x24 || c === 0x5f;
45478}
45479/**
45480 * Define a property.
45481 */
45482function def(obj, key, val, enumerable) {
45483    Object.defineProperty(obj, key, {
45484        value: val,
45485        enumerable: !!enumerable,
45486        writable: true,
45487        configurable: true
45488    });
45489}
45490/**
45491 * Parse simple path.
45492 */
45493var bailRE = new RegExp("[^".concat(unicodeRegExp.source, ".$_\\d]"));
45494function parsePath(path) {
45495    if (bailRE.test(path)) {
45496        return;
45497    }
45498    var segments = path.split('.');
45499    return function (obj) {
45500        for (var i = 0; i < segments.length; i++) {
45501            if (!obj)
45502                return;
45503            obj = obj[segments[i]];
45504        }
45505        return obj;
45506    };
45507}
45508
45509// can we use __proto__?
45510var hasProto = '__proto__' in {};
45511// Browser environment sniffing
45512var inBrowser = typeof window !== 'undefined';
45513var UA = inBrowser && window.navigator.userAgent.toLowerCase();
45514var isIE = UA && /msie|trident/.test(UA);
45515var isIE9 = UA && UA.indexOf('msie 9.0') > 0;
45516var isEdge = UA && UA.indexOf('edge/') > 0;
45517UA && UA.indexOf('android') > 0;
45518var isIOS = UA && /iphone|ipad|ipod|ios/.test(UA);
45519UA && /chrome\/\d+/.test(UA) && !isEdge;
45520UA && /phantomjs/.test(UA);
45521var isFF = UA && UA.match(/firefox\/(\d+)/);
45522// Firefox has a "watch" function on Object.prototype...
45523// @ts-expect-error firebox support
45524var nativeWatch = {}.watch;
45525var supportsPassive = false;
45526if (inBrowser) {
45527    try {
45528        var opts = {};
45529        Object.defineProperty(opts, 'passive', {
45530            get: function () {
45531                /* istanbul ignore next */
45532                supportsPassive = true;
45533            }
45534        }); // https://github.com/facebook/flow/issues/285
45535        window.addEventListener('test-passive', null, opts);
45536    }
45537    catch (e) { }
45538}
45539// this needs to be lazy-evaled because vue may be required before
45540// vue-server-renderer can set VUE_ENV
45541var _isServer;
45542var isServerRendering = function () {
45543    if (_isServer === undefined) {
45544        /* istanbul ignore if */
45545        if (!inBrowser && typeof __webpack_require__.g !== 'undefined') {
45546            // detect presence of vue-server-renderer and avoid
45547            // Webpack shimming the process
45548            _isServer =
45549                __webpack_require__.g['process'] && __webpack_require__.g['process'].env.VUE_ENV === 'server';
45550        }
45551        else {
45552            _isServer = false;
45553        }
45554    }
45555    return _isServer;
45556};
45557// detect devtools
45558var devtools = inBrowser && window.__VUE_DEVTOOLS_GLOBAL_HOOK__;
45559/* istanbul ignore next */
45560function isNative(Ctor) {
45561    return typeof Ctor === 'function' && /native code/.test(Ctor.toString());
45562}
45563var hasSymbol = typeof Symbol !== 'undefined' &&
45564    isNative(Symbol) &&
45565    typeof Reflect !== 'undefined' &&
45566    isNative(Reflect.ownKeys);
45567var _Set; // $flow-disable-line
45568/* istanbul ignore if */ if (typeof Set !== 'undefined' && isNative(Set)) {
45569    // use native Set when available.
45570    _Set = Set;
45571}
45572else {
45573    // a non-standard Set polyfill that only works with primitive keys.
45574    _Set = /** @class */ (function () {
45575        function Set() {
45576            this.set = Object.create(null);
45577        }
45578        Set.prototype.has = function (key) {
45579            return this.set[key] === true;
45580        };
45581        Set.prototype.add = function (key) {
45582            this.set[key] = true;
45583        };
45584        Set.prototype.clear = function () {
45585            this.set = Object.create(null);
45586        };
45587        return Set;
45588    }());
45589}
45590
45591var currentInstance = null;
45592/**
45593 * This is exposed for compatibility with v3 (e.g. some functions in VueUse
45594 * relies on it). Do not use this internally, just use `currentInstance`.
45595 *
45596 * @internal this function needs manual type declaration because it relies
45597 * on previously manually authored types from Vue 2
45598 */
45599function getCurrentInstance() {
45600    return currentInstance && { proxy: currentInstance };
45601}
45602/**
45603 * @internal
45604 */
45605function setCurrentInstance(vm) {
45606    if (vm === void 0) { vm = null; }
45607    if (!vm)
45608        currentInstance && currentInstance._scope.off();
45609    currentInstance = vm;
45610    vm && vm._scope.on();
45611}
45612
45613/**
45614 * @internal
45615 */
45616var VNode = /** @class */ (function () {
45617    function VNode(tag, data, children, text, elm, context, componentOptions, asyncFactory) {
45618        this.tag = tag;
45619        this.data = data;
45620        this.children = children;
45621        this.text = text;
45622        this.elm = elm;
45623        this.ns = undefined;
45624        this.context = context;
45625        this.fnContext = undefined;
45626        this.fnOptions = undefined;
45627        this.fnScopeId = undefined;
45628        this.key = data && data.key;
45629        this.componentOptions = componentOptions;
45630        this.componentInstance = undefined;
45631        this.parent = undefined;
45632        this.raw = false;
45633        this.isStatic = false;
45634        this.isRootInsert = true;
45635        this.isComment = false;
45636        this.isCloned = false;
45637        this.isOnce = false;
45638        this.asyncFactory = asyncFactory;
45639        this.asyncMeta = undefined;
45640        this.isAsyncPlaceholder = false;
45641    }
45642    Object.defineProperty(VNode.prototype, "child", {
45643        // DEPRECATED: alias for componentInstance for backwards compat.
45644        /* istanbul ignore next */
45645        get: function () {
45646            return this.componentInstance;
45647        },
45648        enumerable: false,
45649        configurable: true
45650    });
45651    return VNode;
45652}());
45653var createEmptyVNode = function (text) {
45654    if (text === void 0) { text = ''; }
45655    var node = new VNode();
45656    node.text = text;
45657    node.isComment = true;
45658    return node;
45659};
45660function createTextVNode(val) {
45661    return new VNode(undefined, undefined, undefined, String(val));
45662}
45663// optimized shallow clone
45664// used for static nodes and slot nodes because they may be reused across
45665// multiple renders, cloning them avoids errors when DOM manipulations rely
45666// on their elm reference.
45667function cloneVNode(vnode) {
45668    var cloned = new VNode(vnode.tag, vnode.data, 
45669    // #7975
45670    // clone children array to avoid mutating original in case of cloning
45671    // a child.
45672    vnode.children && vnode.children.slice(), vnode.text, vnode.elm, vnode.context, vnode.componentOptions, vnode.asyncFactory);
45673    cloned.ns = vnode.ns;
45674    cloned.isStatic = vnode.isStatic;
45675    cloned.key = vnode.key;
45676    cloned.isComment = vnode.isComment;
45677    cloned.fnContext = vnode.fnContext;
45678    cloned.fnOptions = vnode.fnOptions;
45679    cloned.fnScopeId = vnode.fnScopeId;
45680    cloned.asyncMeta = vnode.asyncMeta;
45681    cloned.isCloned = true;
45682    return cloned;
45683}
45684
45685/* not type checking this file because flow doesn't play well with Proxy */
45686var initProxy;
45687if (true) {
45688    var allowedGlobals_1 = makeMap('Infinity,undefined,NaN,isFinite,isNaN,' +
45689        'parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,' +
45690        'Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,BigInt,' +
45691        'require' // for Webpack/Browserify
45692    );
45693    var warnNonPresent_1 = function (target, key) {
45694        warn$2("Property or method \"".concat(key, "\" is not defined on the instance but ") +
45695            'referenced during render. Make sure that this property is reactive, ' +
45696            'either in the data option, or for class-based components, by ' +
45697            'initializing the property. ' +
45698            'See: https://v2.vuejs.org/v2/guide/reactivity.html#Declaring-Reactive-Properties.', target);
45699    };
45700    var warnReservedPrefix_1 = function (target, key) {
45701        warn$2("Property \"".concat(key, "\" must be accessed with \"$data.").concat(key, "\" because ") +
45702            'properties starting with "$" or "_" are not proxied in the Vue instance to ' +
45703            'prevent conflicts with Vue internals. ' +
45704            'See: https://v2.vuejs.org/v2/api/#data', target);
45705    };
45706    var hasProxy_1 = typeof Proxy !== 'undefined' && isNative(Proxy);
45707    if (hasProxy_1) {
45708        var isBuiltInModifier_1 = makeMap('stop,prevent,self,ctrl,shift,alt,meta,exact');
45709        config.keyCodes = new Proxy(config.keyCodes, {
45710            set: function (target, key, value) {
45711                if (isBuiltInModifier_1(key)) {
45712                    warn$2("Avoid overwriting built-in modifier in config.keyCodes: .".concat(key));
45713                    return false;
45714                }
45715                else {
45716                    target[key] = value;
45717                    return true;
45718                }
45719            }
45720        });
45721    }
45722    var hasHandler_1 = {
45723        has: function (target, key) {
45724            var has = key in target;
45725            var isAllowed = allowedGlobals_1(key) ||
45726                (typeof key === 'string' &&
45727                    key.charAt(0) === '_' &&
45728                    !(key in target.$data));
45729            if (!has && !isAllowed) {
45730                if (key in target.$data)
45731                    warnReservedPrefix_1(target, key);
45732                else
45733                    warnNonPresent_1(target, key);
45734            }
45735            return has || !isAllowed;
45736        }
45737    };
45738    var getHandler_1 = {
45739        get: function (target, key) {
45740            if (typeof key === 'string' && !(key in target)) {
45741                if (key in target.$data)
45742                    warnReservedPrefix_1(target, key);
45743                else
45744                    warnNonPresent_1(target, key);
45745            }
45746            return target[key];
45747        }
45748    };
45749    initProxy = function initProxy(vm) {
45750        if (hasProxy_1) {
45751            // determine which proxy handler to use
45752            var options = vm.$options;
45753            var handlers = options.render && options.render._withStripped ? getHandler_1 : hasHandler_1;
45754            vm._renderProxy = new Proxy(vm, handlers);
45755        }
45756        else {
45757            vm._renderProxy = vm;
45758        }
45759    };
45760}
45761
45762/******************************************************************************
45763Copyright (c) Microsoft Corporation.
45764
45765Permission to use, copy, modify, and/or distribute this software for any
45766purpose with or without fee is hereby granted.
45767
45768THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
45769REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
45770AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
45771INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
45772LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
45773OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
45774PERFORMANCE OF THIS SOFTWARE.
45775***************************************************************************** */
45776
45777var __assign = function() {
45778    __assign = Object.assign || function __assign(t) {
45779        for (var s, i = 1, n = arguments.length; i < n; i++) {
45780            s = arguments[i];
45781            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
45782        }
45783        return t;
45784    };
45785    return __assign.apply(this, arguments);
45786};
45787
45788typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) {
45789    var e = new Error(message);
45790    return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
45791};
45792
45793var uid$2 = 0;
45794var pendingCleanupDeps = [];
45795var cleanupDeps = function () {
45796    for (var i = 0; i < pendingCleanupDeps.length; i++) {
45797        var dep = pendingCleanupDeps[i];
45798        dep.subs = dep.subs.filter(function (s) { return s; });
45799        dep._pending = false;
45800    }
45801    pendingCleanupDeps.length = 0;
45802};
45803/**
45804 * A dep is an observable that can have multiple
45805 * directives subscribing to it.
45806 * @internal
45807 */
45808var Dep = /** @class */ (function () {
45809    function Dep() {
45810        // pending subs cleanup
45811        this._pending = false;
45812        this.id = uid$2++;
45813        this.subs = [];
45814    }
45815    Dep.prototype.addSub = function (sub) {
45816        this.subs.push(sub);
45817    };
45818    Dep.prototype.removeSub = function (sub) {
45819        // #12696 deps with massive amount of subscribers are extremely slow to
45820        // clean up in Chromium
45821        // to workaround this, we unset the sub for now, and clear them on
45822        // next scheduler flush.
45823        this.subs[this.subs.indexOf(sub)] = null;
45824        if (!this._pending) {
45825            this._pending = true;
45826            pendingCleanupDeps.push(this);
45827        }
45828    };
45829    Dep.prototype.depend = function (info) {
45830        if (Dep.target) {
45831            Dep.target.addDep(this);
45832            if ( true && info && Dep.target.onTrack) {
45833                Dep.target.onTrack(__assign({ effect: Dep.target }, info));
45834            }
45835        }
45836    };
45837    Dep.prototype.notify = function (info) {
45838        // stabilize the subscriber list first
45839        var subs = this.subs.filter(function (s) { return s; });
45840        if ( true && !config.async) {
45841            // subs aren't sorted in scheduler if not running async
45842            // we need to sort them now to make sure they fire in correct
45843            // order
45844            subs.sort(function (a, b) { return a.id - b.id; });
45845        }
45846        for (var i = 0, l = subs.length; i < l; i++) {
45847            var sub = subs[i];
45848            if ( true && info) {
45849                sub.onTrigger &&
45850                    sub.onTrigger(__assign({ effect: subs[i] }, info));
45851            }
45852            sub.update();
45853        }
45854    };
45855    return Dep;
45856}());
45857// The current target watcher being evaluated.
45858// This is globally unique because only one watcher
45859// can be evaluated at a time.
45860Dep.target = null;
45861var targetStack = [];
45862function pushTarget(target) {
45863    targetStack.push(target);
45864    Dep.target = target;
45865}
45866function popTarget() {
45867    targetStack.pop();
45868    Dep.target = targetStack[targetStack.length - 1];
45869}
45870
45871/*
45872 * not type checking this file because flow doesn't play well with
45873 * dynamically accessing methods on Array prototype
45874 */
45875var arrayProto = Array.prototype;
45876var arrayMethods = Object.create(arrayProto);
45877var methodsToPatch = [
45878    'push',
45879    'pop',
45880    'shift',
45881    'unshift',
45882    'splice',
45883    'sort',
45884    'reverse'
45885];
45886/**
45887 * Intercept mutating methods and emit events
45888 */
45889methodsToPatch.forEach(function (method) {
45890    // cache original method
45891    var original = arrayProto[method];
45892    def(arrayMethods, method, function mutator() {
45893        var args = [];
45894        for (var _i = 0; _i < arguments.length; _i++) {
45895            args[_i] = arguments[_i];
45896        }
45897        var result = original.apply(this, args);
45898        var ob = this.__ob__;
45899        var inserted;
45900        switch (method) {
45901            case 'push':
45902            case 'unshift':
45903                inserted = args;
45904                break;
45905            case 'splice':
45906                inserted = args.slice(2);
45907                break;
45908        }
45909        if (inserted)
45910            ob.observeArray(inserted);
45911        // notify change
45912        if (true) {
45913            ob.dep.notify({
45914                type: "array mutation" /* TriggerOpTypes.ARRAY_MUTATION */,
45915                target: this,
45916                key: method
45917            });
45918        }
45919        else {}
45920        return result;
45921    });
45922});
45923
45924var arrayKeys = Object.getOwnPropertyNames(arrayMethods);
45925var NO_INITIAL_VALUE = {};
45926/**
45927 * In some cases we may want to disable observation inside a component's
45928 * update computation.
45929 */
45930var shouldObserve = true;
45931function toggleObserving(value) {
45932    shouldObserve = value;
45933}
45934// ssr mock dep
45935var mockDep = {
45936    notify: noop,
45937    depend: noop,
45938    addSub: noop,
45939    removeSub: noop
45940};
45941/**
45942 * Observer class that is attached to each observed
45943 * object. Once attached, the observer converts the target
45944 * object's property keys into getter/setters that
45945 * collect dependencies and dispatch updates.
45946 */
45947var Observer = /** @class */ (function () {
45948    function Observer(value, shallow, mock) {
45949        if (shallow === void 0) { shallow = false; }
45950        if (mock === void 0) { mock = false; }
45951        this.value = value;
45952        this.shallow = shallow;
45953        this.mock = mock;
45954        // this.value = value
45955        this.dep = mock ? mockDep : new Dep();
45956        this.vmCount = 0;
45957        def(value, '__ob__', this);
45958        if (isArray(value)) {
45959            if (!mock) {
45960                if (hasProto) {
45961                    value.__proto__ = arrayMethods;
45962                    /* eslint-enable no-proto */
45963                }
45964                else {
45965                    for (var i = 0, l = arrayKeys.length; i < l; i++) {
45966                        var key = arrayKeys[i];
45967                        def(value, key, arrayMethods[key]);
45968                    }
45969                }
45970            }
45971            if (!shallow) {
45972                this.observeArray(value);
45973            }
45974        }
45975        else {
45976            /**
45977             * Walk through all properties and convert them into
45978             * getter/setters. This method should only be called when
45979             * value type is Object.
45980             */
45981            var keys = Object.keys(value);
45982            for (var i = 0; i < keys.length; i++) {
45983                var key = keys[i];
45984                defineReactive(value, key, NO_INITIAL_VALUE, undefined, shallow, mock);
45985            }
45986        }
45987    }
45988    /**
45989     * Observe a list of Array items.
45990     */
45991    Observer.prototype.observeArray = function (value) {
45992        for (var i = 0, l = value.length; i < l; i++) {
45993            observe(value[i], false, this.mock);
45994        }
45995    };
45996    return Observer;
45997}());
45998// helpers
45999/**
46000 * Attempt to create an observer instance for a value,
46001 * returns the new observer if successfully observed,
46002 * or the existing observer if the value already has one.
46003 */
46004function observe(value, shallow, ssrMockReactivity) {
46005    if (value && hasOwn(value, '__ob__') && value.__ob__ instanceof Observer) {
46006        return value.__ob__;
46007    }
46008    if (shouldObserve &&
46009        (ssrMockReactivity || !isServerRendering()) &&
46010        (isArray(value) || isPlainObject(value)) &&
46011        Object.isExtensible(value) &&
46012        !value.__v_skip /* ReactiveFlags.SKIP */ &&
46013        !isRef(value) &&
46014        !(value instanceof VNode)) {
46015        return new Observer(value, shallow, ssrMockReactivity);
46016    }
46017}
46018/**
46019 * Define a reactive property on an Object.
46020 */
46021function defineReactive(obj, key, val, customSetter, shallow, mock, observeEvenIfShallow) {
46022    if (observeEvenIfShallow === void 0) { observeEvenIfShallow = false; }
46023    var dep = new Dep();
46024    var property = Object.getOwnPropertyDescriptor(obj, key);
46025    if (property && property.configurable === false) {
46026        return;
46027    }
46028    // cater for pre-defined getter/setters
46029    var getter = property && property.get;
46030    var setter = property && property.set;
46031    if ((!getter || setter) &&
46032        (val === NO_INITIAL_VALUE || arguments.length === 2)) {
46033        val = obj[key];
46034    }
46035    var childOb = shallow ? val && val.__ob__ : observe(val, false, mock);
46036    Object.defineProperty(obj, key, {
46037        enumerable: true,
46038        configurable: true,
46039        get: function reactiveGetter() {
46040            var value = getter ? getter.call(obj) : val;
46041            if (Dep.target) {
46042                if (true) {
46043                    dep.depend({
46044                        target: obj,
46045                        type: "get" /* TrackOpTypes.GET */,
46046                        key: key
46047                    });
46048                }
46049                else {}
46050                if (childOb) {
46051                    childOb.dep.depend();
46052                    if (isArray(value)) {
46053                        dependArray(value);
46054                    }
46055                }
46056            }
46057            return isRef(value) && !shallow ? value.value : value;
46058        },
46059        set: function reactiveSetter(newVal) {
46060            var value = getter ? getter.call(obj) : val;
46061            if (!hasChanged(value, newVal)) {
46062                return;
46063            }
46064            if ( true && customSetter) {
46065                customSetter();
46066            }
46067            if (setter) {
46068                setter.call(obj, newVal);
46069            }
46070            else if (getter) {
46071                // #7981: for accessor properties without setter
46072                return;
46073            }
46074            else if (!shallow && isRef(value) && !isRef(newVal)) {
46075                value.value = newVal;
46076                return;
46077            }
46078            else {
46079                val = newVal;
46080            }
46081            childOb = shallow ? newVal && newVal.__ob__ : observe(newVal, false, mock);
46082            if (true) {
46083                dep.notify({
46084                    type: "set" /* TriggerOpTypes.SET */,
46085                    target: obj,
46086                    key: key,
46087                    newValue: newVal,
46088                    oldValue: value
46089                });
46090            }
46091            else {}
46092        }
46093    });
46094    return dep;
46095}
46096function set(target, key, val) {
46097    if ( true && (isUndef(target) || isPrimitive(target))) {
46098        warn$2("Cannot set reactive property on undefined, null, or primitive value: ".concat(target));
46099    }
46100    if (isReadonly(target)) {
46101         true && warn$2("Set operation on key \"".concat(key, "\" failed: target is readonly."));
46102        return;
46103    }
46104    var ob = target.__ob__;
46105    if (isArray(target) && isValidArrayIndex(key)) {
46106        target.length = Math.max(target.length, key);
46107        target.splice(key, 1, val);
46108        // when mocking for SSR, array methods are not hijacked
46109        if (ob && !ob.shallow && ob.mock) {
46110            observe(val, false, true);
46111        }
46112        return val;
46113    }
46114    if (key in target && !(key in Object.prototype)) {
46115        target[key] = val;
46116        return val;
46117    }
46118    if (target._isVue || (ob && ob.vmCount)) {
46119         true &&
46120            warn$2('Avoid adding reactive properties to a Vue instance or its root $data ' +
46121                'at runtime - declare it upfront in the data option.');
46122        return val;
46123    }
46124    if (!ob) {
46125        target[key] = val;
46126        return val;
46127    }
46128    defineReactive(ob.value, key, val, undefined, ob.shallow, ob.mock);
46129    if (true) {
46130        ob.dep.notify({
46131            type: "add" /* TriggerOpTypes.ADD */,
46132            target: target,
46133            key: key,
46134            newValue: val,
46135            oldValue: undefined
46136        });
46137    }
46138    else {}
46139    return val;
46140}
46141function del(target, key) {
46142    if ( true && (isUndef(target) || isPrimitive(target))) {
46143        warn$2("Cannot delete reactive property on undefined, null, or primitive value: ".concat(target));
46144    }
46145    if (isArray(target) && isValidArrayIndex(key)) {
46146        target.splice(key, 1);
46147        return;
46148    }
46149    var ob = target.__ob__;
46150    if (target._isVue || (ob && ob.vmCount)) {
46151         true &&
46152            warn$2('Avoid deleting properties on a Vue instance or its root $data ' +
46153                '- just set it to null.');
46154        return;
46155    }
46156    if (isReadonly(target)) {
46157         true &&
46158            warn$2("Delete operation on key \"".concat(key, "\" failed: target is readonly."));
46159        return;
46160    }
46161    if (!hasOwn(target, key)) {
46162        return;
46163    }
46164    delete target[key];
46165    if (!ob) {
46166        return;
46167    }
46168    if (true) {
46169        ob.dep.notify({
46170            type: "delete" /* TriggerOpTypes.DELETE */,
46171            target: target,
46172            key: key
46173        });
46174    }
46175    else {}
46176}
46177/**
46178 * Collect dependencies on array elements when the array is touched, since
46179 * we cannot intercept array element access like property getters.
46180 */
46181function dependArray(value) {
46182    for (var e = void 0, i = 0, l = value.length; i < l; i++) {
46183        e = value[i];
46184        if (e && e.__ob__) {
46185            e.__ob__.dep.depend();
46186        }
46187        if (isArray(e)) {
46188            dependArray(e);
46189        }
46190    }
46191}
46192
46193function reactive(target) {
46194    makeReactive(target, false);
46195    return target;
46196}
46197/**
46198 * Return a shallowly-reactive copy of the original object, where only the root
46199 * level properties are reactive. It also does not auto-unwrap refs (even at the
46200 * root level).
46201 */
46202function shallowReactive(target) {
46203    makeReactive(target, true);
46204    def(target, "__v_isShallow" /* ReactiveFlags.IS_SHALLOW */, true);
46205    return target;
46206}
46207function makeReactive(target, shallow) {
46208    // if trying to observe a readonly proxy, return the readonly version.
46209    if (!isReadonly(target)) {
46210        if (true) {
46211            if (isArray(target)) {
46212                warn$2("Avoid using Array as root value for ".concat(shallow ? "shallowReactive()" : "reactive()", " as it cannot be tracked in watch() or watchEffect(). Use ").concat(shallow ? "shallowRef()" : "ref()", " instead. This is a Vue-2-only limitation."));
46213            }
46214            var existingOb = target && target.__ob__;
46215            if (existingOb && existingOb.shallow !== shallow) {
46216                warn$2("Target is already a ".concat(existingOb.shallow ? "" : "non-", "shallow reactive object, and cannot be converted to ").concat(shallow ? "" : "non-", "shallow."));
46217            }
46218        }
46219        var ob = observe(target, shallow, isServerRendering() /* ssr mock reactivity */);
46220        if ( true && !ob) {
46221            if (target == null || isPrimitive(target)) {
46222                warn$2("value cannot be made reactive: ".concat(String(target)));
46223            }
46224            if (isCollectionType(target)) {
46225                warn$2("Vue 2 does not support reactive collection types such as Map or Set.");
46226            }
46227        }
46228    }
46229}
46230function isReactive(value) {
46231    if (isReadonly(value)) {
46232        return isReactive(value["__v_raw" /* ReactiveFlags.RAW */]);
46233    }
46234    return !!(value && value.__ob__);
46235}
46236function isShallow(value) {
46237    return !!(value && value.__v_isShallow);
46238}
46239function isReadonly(value) {
46240    return !!(value && value.__v_isReadonly);
46241}
46242function isProxy(value) {
46243    return isReactive(value) || isReadonly(value);
46244}
46245function toRaw(observed) {
46246    var raw = observed && observed["__v_raw" /* ReactiveFlags.RAW */];
46247    return raw ? toRaw(raw) : observed;
46248}
46249function markRaw(value) {
46250    // non-extensible objects won't be observed anyway
46251    if (Object.isExtensible(value)) {
46252        def(value, "__v_skip" /* ReactiveFlags.SKIP */, true);
46253    }
46254    return value;
46255}
46256/**
46257 * @internal
46258 */
46259function isCollectionType(value) {
46260    var type = toRawType(value);
46261    return (type === 'Map' || type === 'WeakMap' || type === 'Set' || type === 'WeakSet');
46262}
46263
46264/**
46265 * @internal
46266 */
46267var RefFlag = "__v_isRef";
46268function isRef(r) {
46269    return !!(r && r.__v_isRef === true);
46270}
46271function ref$1(value) {
46272    return createRef(value, false);
46273}
46274function shallowRef(value) {
46275    return createRef(value, true);
46276}
46277function createRef(rawValue, shallow) {
46278    if (isRef(rawValue)) {
46279        return rawValue;
46280    }
46281    var ref = {};
46282    def(ref, RefFlag, true);
46283    def(ref, "__v_isShallow" /* ReactiveFlags.IS_SHALLOW */, shallow);
46284    def(ref, 'dep', defineReactive(ref, 'value', rawValue, null, shallow, isServerRendering()));
46285    return ref;
46286}
46287function triggerRef(ref) {
46288    if ( true && !ref.dep) {
46289        warn$2("received object is not a triggerable ref.");
46290    }
46291    if (true) {
46292        ref.dep &&
46293            ref.dep.notify({
46294                type: "set" /* TriggerOpTypes.SET */,
46295                target: ref,
46296                key: 'value'
46297            });
46298    }
46299    else {}
46300}
46301function unref(ref) {
46302    return isRef(ref) ? ref.value : ref;
46303}
46304function proxyRefs(objectWithRefs) {
46305    if (isReactive(objectWithRefs)) {
46306        return objectWithRefs;
46307    }
46308    var proxy = {};
46309    var keys = Object.keys(objectWithRefs);
46310    for (var i = 0; i < keys.length; i++) {
46311        proxyWithRefUnwrap(proxy, objectWithRefs, keys[i]);
46312    }
46313    return proxy;
46314}
46315function proxyWithRefUnwrap(target, source, key) {
46316    Object.defineProperty(target, key, {
46317        enumerable: true,
46318        configurable: true,
46319        get: function () {
46320            var val = source[key];
46321            if (isRef(val)) {
46322                return val.value;
46323            }
46324            else {
46325                var ob = val && val.__ob__;
46326                if (ob)
46327                    ob.dep.depend();
46328                return val;
46329            }
46330        },
46331        set: function (value) {
46332            var oldValue = source[key];
46333            if (isRef(oldValue) && !isRef(value)) {
46334                oldValue.value = value;
46335            }
46336            else {
46337                source[key] = value;
46338            }
46339        }
46340    });
46341}
46342function customRef(factory) {
46343    var dep = new Dep();
46344    var _a = factory(function () {
46345        if (true) {
46346            dep.depend({
46347                target: ref,
46348                type: "get" /* TrackOpTypes.GET */,
46349                key: 'value'
46350            });
46351        }
46352        else {}
46353    }, function () {
46354        if (true) {
46355            dep.notify({
46356                target: ref,
46357                type: "set" /* TriggerOpTypes.SET */,
46358                key: 'value'
46359            });
46360        }
46361        else {}
46362    }), get = _a.get, set = _a.set;
46363    var ref = {
46364        get value() {
46365            return get();
46366        },
46367        set value(newVal) {
46368            set(newVal);
46369        }
46370    };
46371    def(ref, RefFlag, true);
46372    return ref;
46373}
46374function toRefs(object) {
46375    if ( true && !isReactive(object)) {
46376        warn$2("toRefs() expects a reactive object but received a plain one.");
46377    }
46378    var ret = isArray(object) ? new Array(object.length) : {};
46379    for (var key in object) {
46380        ret[key] = toRef(object, key);
46381    }
46382    return ret;
46383}
46384function toRef(object, key, defaultValue) {
46385    var val = object[key];
46386    if (isRef(val)) {
46387        return val;
46388    }
46389    var ref = {
46390        get value() {
46391            var val = object[key];
46392            return val === undefined ? defaultValue : val;
46393        },
46394        set value(newVal) {
46395            object[key] = newVal;
46396        }
46397    };
46398    def(ref, RefFlag, true);
46399    return ref;
46400}
46401
46402var rawToReadonlyFlag = "__v_rawToReadonly";
46403var rawToShallowReadonlyFlag = "__v_rawToShallowReadonly";
46404function readonly(target) {
46405    return createReadonly(target, false);
46406}
46407function createReadonly(target, shallow) {
46408    if (!isPlainObject(target)) {
46409        if (true) {
46410            if (isArray(target)) {
46411                warn$2("Vue 2 does not support readonly arrays.");
46412            }
46413            else if (isCollectionType(target)) {
46414                warn$2("Vue 2 does not support readonly collection types such as Map or Set.");
46415            }
46416            else {
46417                warn$2("value cannot be made readonly: ".concat(typeof target));
46418            }
46419        }
46420        return target;
46421    }
46422    if ( true && !Object.isExtensible(target)) {
46423        warn$2("Vue 2 does not support creating readonly proxy for non-extensible object.");
46424    }
46425    // already a readonly object
46426    if (isReadonly(target)) {
46427        return target;
46428    }
46429    // already has a readonly proxy
46430    var existingFlag = shallow ? rawToShallowReadonlyFlag : rawToReadonlyFlag;
46431    var existingProxy = target[existingFlag];
46432    if (existingProxy) {
46433        return existingProxy;
46434    }
46435    var proxy = Object.create(Object.getPrototypeOf(target));
46436    def(target, existingFlag, proxy);
46437    def(proxy, "__v_isReadonly" /* ReactiveFlags.IS_READONLY */, true);
46438    def(proxy, "__v_raw" /* ReactiveFlags.RAW */, target);
46439    if (isRef(target)) {
46440        def(proxy, RefFlag, true);
46441    }
46442    if (shallow || isShallow(target)) {
46443        def(proxy, "__v_isShallow" /* ReactiveFlags.IS_SHALLOW */, true);
46444    }
46445    var keys = Object.keys(target);
46446    for (var i = 0; i < keys.length; i++) {
46447        defineReadonlyProperty(proxy, target, keys[i], shallow);
46448    }
46449    return proxy;
46450}
46451function defineReadonlyProperty(proxy, target, key, shallow) {
46452    Object.defineProperty(proxy, key, {
46453        enumerable: true,
46454        configurable: true,
46455        get: function () {
46456            var val = target[key];
46457            return shallow || !isPlainObject(val) ? val : readonly(val);
46458        },
46459        set: function () {
46460             true &&
46461                warn$2("Set operation on key \"".concat(key, "\" failed: target is readonly."));
46462        }
46463    });
46464}
46465/**
46466 * Returns a reactive-copy of the original object, where only the root level
46467 * properties are readonly, and does NOT unwrap refs nor recursively convert
46468 * returned properties.
46469 * This is used for creating the props proxy object for stateful components.
46470 */
46471function shallowReadonly(target) {
46472    return createReadonly(target, true);
46473}
46474
46475function computed(getterOrOptions, debugOptions) {
46476    var getter;
46477    var setter;
46478    var onlyGetter = isFunction(getterOrOptions);
46479    if (onlyGetter) {
46480        getter = getterOrOptions;
46481        setter =  true
46482            ? function () {
46483                warn$2('Write operation failed: computed value is readonly');
46484            }
46485            : 0;
46486    }
46487    else {
46488        getter = getterOrOptions.get;
46489        setter = getterOrOptions.set;
46490    }
46491    var watcher = isServerRendering()
46492        ? null
46493        : new Watcher(currentInstance, getter, noop, { lazy: true });
46494    if ( true && watcher && debugOptions) {
46495        watcher.onTrack = debugOptions.onTrack;
46496        watcher.onTrigger = debugOptions.onTrigger;
46497    }
46498    var ref = {
46499        // some libs rely on the presence effect for checking computed refs
46500        // from normal refs, but the implementation doesn't matter
46501        effect: watcher,
46502        get value() {
46503            if (watcher) {
46504                if (watcher.dirty) {
46505                    watcher.evaluate();
46506                }
46507                if (Dep.target) {
46508                    if ( true && Dep.target.onTrack) {
46509                        Dep.target.onTrack({
46510                            effect: Dep.target,
46511                            target: ref,
46512                            type: "get" /* TrackOpTypes.GET */,
46513                            key: 'value'
46514                        });
46515                    }
46516                    watcher.depend();
46517                }
46518                return watcher.value;
46519            }
46520            else {
46521                return getter();
46522            }
46523        },
46524        set value(newVal) {
46525            setter(newVal);
46526        }
46527    };
46528    def(ref, RefFlag, true);
46529    def(ref, "__v_isReadonly" /* ReactiveFlags.IS_READONLY */, onlyGetter);
46530    return ref;
46531}
46532
46533var mark;
46534var measure;
46535if (true) {
46536    var perf_1 = inBrowser && window.performance;
46537    /* istanbul ignore if */
46538    if (perf_1 &&
46539        // @ts-ignore
46540        perf_1.mark &&
46541        // @ts-ignore
46542        perf_1.measure &&
46543        // @ts-ignore
46544        perf_1.clearMarks &&
46545        // @ts-ignore
46546        perf_1.clearMeasures) {
46547        mark = function (tag) { return perf_1.mark(tag); };
46548        measure = function (name, startTag, endTag) {
46549            perf_1.measure(name, startTag, endTag);
46550            perf_1.clearMarks(startTag);
46551            perf_1.clearMarks(endTag);
46552            // perf.clearMeasures(name)
46553        };
46554    }
46555}
46556
46557var normalizeEvent = cached(function (name) {
46558    var passive = name.charAt(0) === '&';
46559    name = passive ? name.slice(1) : name;
46560    var once = name.charAt(0) === '~'; // Prefixed last, checked first
46561    name = once ? name.slice(1) : name;
46562    var capture = name.charAt(0) === '!';
46563    name = capture ? name.slice(1) : name;
46564    return {
46565        name: name,
46566        once: once,
46567        capture: capture,
46568        passive: passive
46569    };
46570});
46571function createFnInvoker(fns, vm) {
46572    function invoker() {
46573        var fns = invoker.fns;
46574        if (isArray(fns)) {
46575            var cloned = fns.slice();
46576            for (var i = 0; i < cloned.length; i++) {
46577                invokeWithErrorHandling(cloned[i], null, arguments, vm, "v-on handler");
46578            }
46579        }
46580        else {
46581            // return handler return value for single handlers
46582            return invokeWithErrorHandling(fns, null, arguments, vm, "v-on handler");
46583        }
46584    }
46585    invoker.fns = fns;
46586    return invoker;
46587}
46588function updateListeners(on, oldOn, add, remove, createOnceHandler, vm) {
46589    var name, cur, old, event;
46590    for (name in on) {
46591        cur = on[name];
46592        old = oldOn[name];
46593        event = normalizeEvent(name);
46594        if (isUndef(cur)) {
46595             true &&
46596                warn$2("Invalid handler for event \"".concat(event.name, "\": got ") + String(cur), vm);
46597        }
46598        else if (isUndef(old)) {
46599            if (isUndef(cur.fns)) {
46600                cur = on[name] = createFnInvoker(cur, vm);
46601            }
46602            if (isTrue(event.once)) {
46603                cur = on[name] = createOnceHandler(event.name, cur, event.capture);
46604            }
46605            add(event.name, cur, event.capture, event.passive, event.params);
46606        }
46607        else if (cur !== old) {
46608            old.fns = cur;
46609            on[name] = old;
46610        }
46611    }
46612    for (name in oldOn) {
46613        if (isUndef(on[name])) {
46614            event = normalizeEvent(name);
46615            remove(event.name, oldOn[name], event.capture);
46616        }
46617    }
46618}
46619
46620function mergeVNodeHook(def, hookKey, hook) {
46621    if (def instanceof VNode) {
46622        def = def.data.hook || (def.data.hook = {});
46623    }
46624    var invoker;
46625    var oldHook = def[hookKey];
46626    function wrappedHook() {
46627        hook.apply(this, arguments);
46628        // important: remove merged hook to ensure it's called only once
46629        // and prevent memory leak
46630        remove$2(invoker.fns, wrappedHook);
46631    }
46632    if (isUndef(oldHook)) {
46633        // no existing hook
46634        invoker = createFnInvoker([wrappedHook]);
46635    }
46636    else {
46637        /* istanbul ignore if */
46638        if (isDef(oldHook.fns) && isTrue(oldHook.merged)) {
46639            // already a merged invoker
46640            invoker = oldHook;
46641            invoker.fns.push(wrappedHook);
46642        }
46643        else {
46644            // existing plain hook
46645            invoker = createFnInvoker([oldHook, wrappedHook]);
46646        }
46647    }
46648    invoker.merged = true;
46649    def[hookKey] = invoker;
46650}
46651
46652function extractPropsFromVNodeData(data, Ctor, tag) {
46653    // we are only extracting raw values here.
46654    // validation and default values are handled in the child
46655    // component itself.
46656    var propOptions = Ctor.options.props;
46657    if (isUndef(propOptions)) {
46658        return;
46659    }
46660    var res = {};
46661    var attrs = data.attrs, props = data.props;
46662    if (isDef(attrs) || isDef(props)) {
46663        for (var key in propOptions) {
46664            var altKey = hyphenate(key);
46665            if (true) {
46666                var keyInLowerCase = key.toLowerCase();
46667                if (key !== keyInLowerCase && attrs && hasOwn(attrs, keyInLowerCase)) {
46668                    tip("Prop \"".concat(keyInLowerCase, "\" is passed to component ") +
46669                        "".concat(formatComponentName(
46670                        // @ts-expect-error tag is string
46671                        tag || Ctor), ", but the declared prop name is") +
46672                        " \"".concat(key, "\". ") +
46673                        "Note that HTML attributes are case-insensitive and camelCased " +
46674                        "props need to use their kebab-case equivalents when using in-DOM " +
46675                        "templates. You should probably use \"".concat(altKey, "\" instead of \"").concat(key, "\"."));
46676                }
46677            }
46678            checkProp(res, props, key, altKey, true) ||
46679                checkProp(res, attrs, key, altKey, false);
46680        }
46681    }
46682    return res;
46683}
46684function checkProp(res, hash, key, altKey, preserve) {
46685    if (isDef(hash)) {
46686        if (hasOwn(hash, key)) {
46687            res[key] = hash[key];
46688            if (!preserve) {
46689                delete hash[key];
46690            }
46691            return true;
46692        }
46693        else if (hasOwn(hash, altKey)) {
46694            res[key] = hash[altKey];
46695            if (!preserve) {
46696                delete hash[altKey];
46697            }
46698            return true;
46699        }
46700    }
46701    return false;
46702}
46703
46704// The template compiler attempts to minimize the need for normalization by
46705// statically analyzing the template at compile time.
46706//
46707// For plain HTML markup, normalization can be completely skipped because the
46708// generated render function is guaranteed to return Array<VNode>. There are
46709// two cases where extra normalization is needed:
46710// 1. When the children contains components - because a functional component
46711// may return an Array instead of a single root. In this case, just a simple
46712// normalization is needed - if any child is an Array, we flatten the whole
46713// thing with Array.prototype.concat. It is guaranteed to be only 1-level deep
46714// because functional components already normalize their own children.
46715function simpleNormalizeChildren(children) {
46716    for (var i = 0; i < children.length; i++) {
46717        if (isArray(children[i])) {
46718            return Array.prototype.concat.apply([], children);
46719        }
46720    }
46721    return children;
46722}
46723// 2. When the children contains constructs that always generated nested Arrays,
46724// e.g. <template>, <slot>, v-for, or when the children is provided by user
46725// with hand-written render functions / JSX. In such cases a full normalization
46726// is needed to cater to all possible types of children values.
46727function normalizeChildren(children) {
46728    return isPrimitive(children)
46729        ? [createTextVNode(children)]
46730        : isArray(children)
46731            ? normalizeArrayChildren(children)
46732            : undefined;
46733}
46734function isTextNode(node) {
46735    return isDef(node) && isDef(node.text) && isFalse(node.isComment);
46736}
46737function normalizeArrayChildren(children, nestedIndex) {
46738    var res = [];
46739    var i, c, lastIndex, last;
46740    for (i = 0; i < children.length; i++) {
46741        c = children[i];
46742        if (isUndef(c) || typeof c === 'boolean')
46743            continue;
46744        lastIndex = res.length - 1;
46745        last = res[lastIndex];
46746        //  nested
46747        if (isArray(c)) {
46748            if (c.length > 0) {
46749                c = normalizeArrayChildren(c, "".concat(nestedIndex || '', "_").concat(i));
46750                // merge adjacent text nodes
46751                if (isTextNode(c[0]) && isTextNode(last)) {
46752                    res[lastIndex] = createTextVNode(last.text + c[0].text);
46753                    c.shift();
46754                }
46755                res.push.apply(res, c);
46756            }
46757        }
46758        else if (isPrimitive(c)) {
46759            if (isTextNode(last)) {
46760                // merge adjacent text nodes
46761                // this is necessary for SSR hydration because text nodes are
46762                // essentially merged when rendered to HTML strings
46763                res[lastIndex] = createTextVNode(last.text + c);
46764            }
46765            else if (c !== '') {
46766                // convert primitive to vnode
46767                res.push(createTextVNode(c));
46768            }
46769        }
46770        else {
46771            if (isTextNode(c) && isTextNode(last)) {
46772                // merge adjacent text nodes
46773                res[lastIndex] = createTextVNode(last.text + c.text);
46774            }
46775            else {
46776                // default key for nested array children (likely generated by v-for)
46777                if (isTrue(children._isVList) &&
46778                    isDef(c.tag) &&
46779                    isUndef(c.key) &&
46780                    isDef(nestedIndex)) {
46781                    c.key = "__vlist".concat(nestedIndex, "_").concat(i, "__");
46782                }
46783                res.push(c);
46784            }
46785        }
46786    }
46787    return res;
46788}
46789
46790var SIMPLE_NORMALIZE = 1;
46791var ALWAYS_NORMALIZE = 2;
46792// wrapper function for providing a more flexible interface
46793// without getting yelled at by flow
46794function createElement$1(context, tag, data, children, normalizationType, alwaysNormalize) {
46795    if (isArray(data) || isPrimitive(data)) {
46796        normalizationType = children;
46797        children = data;
46798        data = undefined;
46799    }
46800    if (isTrue(alwaysNormalize)) {
46801        normalizationType = ALWAYS_NORMALIZE;
46802    }
46803    return _createElement(context, tag, data, children, normalizationType);
46804}
46805function _createElement(context, tag, data, children, normalizationType) {
46806    if (isDef(data) && isDef(data.__ob__)) {
46807         true &&
46808            warn$2("Avoid using observed data object as vnode data: ".concat(JSON.stringify(data), "\n") + 'Always create fresh vnode data objects in each render!', context);
46809        return createEmptyVNode();
46810    }
46811    // object syntax in v-bind
46812    if (isDef(data) && isDef(data.is)) {
46813        tag = data.is;
46814    }
46815    if (!tag) {
46816        // in case of component :is set to falsy value
46817        return createEmptyVNode();
46818    }
46819    // warn against non-primitive key
46820    if ( true && isDef(data) && isDef(data.key) && !isPrimitive(data.key)) {
46821        warn$2('Avoid using non-primitive value as key, ' +
46822            'use string/number value instead.', context);
46823    }
46824    // support single function children as default scoped slot
46825    if (isArray(children) && isFunction(children[0])) {
46826        data = data || {};
46827        data.scopedSlots = { default: children[0] };
46828        children.length = 0;
46829    }
46830    if (normalizationType === ALWAYS_NORMALIZE) {
46831        children = normalizeChildren(children);
46832    }
46833    else if (normalizationType === SIMPLE_NORMALIZE) {
46834        children = simpleNormalizeChildren(children);
46835    }
46836    var vnode, ns;
46837    if (typeof tag === 'string') {
46838        var Ctor = void 0;
46839        ns = (context.$vnode && context.$vnode.ns) || config.getTagNamespace(tag);
46840        if (config.isReservedTag(tag)) {
46841            // platform built-in elements
46842            if ( true &&
46843                isDef(data) &&
46844                isDef(data.nativeOn) &&
46845                data.tag !== 'component') {
46846                warn$2("The .native modifier for v-on is only valid on components but it was used on <".concat(tag, ">."), context);
46847            }
46848            vnode = new VNode(config.parsePlatformTagName(tag), data, children, undefined, undefined, context);
46849        }
46850        else if ((!data || !data.pre) &&
46851            isDef((Ctor = resolveAsset(context.$options, 'components', tag)))) {
46852            // component
46853            vnode = createComponent(Ctor, data, context, children, tag);
46854        }
46855        else {
46856            // unknown or unlisted namespaced elements
46857            // check at runtime because it may get assigned a namespace when its
46858            // parent normalizes children
46859            vnode = new VNode(tag, data, children, undefined, undefined, context);
46860        }
46861    }
46862    else {
46863        // direct component options / constructor
46864        vnode = createComponent(tag, data, context, children);
46865    }
46866    if (isArray(vnode)) {
46867        return vnode;
46868    }
46869    else if (isDef(vnode)) {
46870        if (isDef(ns))
46871            applyNS(vnode, ns);
46872        if (isDef(data))
46873            registerDeepBindings(data);
46874        return vnode;
46875    }
46876    else {
46877        return createEmptyVNode();
46878    }
46879}
46880function applyNS(vnode, ns, force) {
46881    vnode.ns = ns;
46882    if (vnode.tag === 'foreignObject') {
46883        // use default namespace inside foreignObject
46884        ns = undefined;
46885        force = true;
46886    }
46887    if (isDef(vnode.children)) {
46888        for (var i = 0, l = vnode.children.length; i < l; i++) {
46889            var child = vnode.children[i];
46890            if (isDef(child.tag) &&
46891                (isUndef(child.ns) || (isTrue(force) && child.tag !== 'svg'))) {
46892                applyNS(child, ns, force);
46893            }
46894        }
46895    }
46896}
46897// ref #5318
46898// necessary to ensure parent re-render when deep bindings like :style and
46899// :class are used on slot nodes
46900function registerDeepBindings(data) {
46901    if (isObject(data.style)) {
46902        traverse(data.style);
46903    }
46904    if (isObject(data.class)) {
46905        traverse(data.class);
46906    }
46907}
46908
46909/**
46910 * Runtime helper for rendering v-for lists.
46911 */
46912function renderList(val, render) {
46913    var ret = null, i, l, keys, key;
46914    if (isArray(val) || typeof val === 'string') {
46915        ret = new Array(val.length);
46916        for (i = 0, l = val.length; i < l; i++) {
46917            ret[i] = render(val[i], i);
46918        }
46919    }
46920    else if (typeof val === 'number') {
46921        ret = new Array(val);
46922        for (i = 0; i < val; i++) {
46923            ret[i] = render(i + 1, i);
46924        }
46925    }
46926    else if (isObject(val)) {
46927        if (hasSymbol && val[Symbol.iterator]) {
46928            ret = [];
46929            var iterator = val[Symbol.iterator]();
46930            var result = iterator.next();
46931            while (!result.done) {
46932                ret.push(render(result.value, ret.length));
46933                result = iterator.next();
46934            }
46935        }
46936        else {
46937            keys = Object.keys(val);
46938            ret = new Array(keys.length);
46939            for (i = 0, l = keys.length; i < l; i++) {
46940                key = keys[i];
46941                ret[i] = render(val[key], key, i);
46942            }
46943        }
46944    }
46945    if (!isDef(ret)) {
46946        ret = [];
46947    }
46948    ret._isVList = true;
46949    return ret;
46950}
46951
46952/**
46953 * Runtime helper for rendering <slot>
46954 */
46955function renderSlot(name, fallbackRender, props, bindObject) {
46956    var scopedSlotFn = this.$scopedSlots[name];
46957    var nodes;
46958    if (scopedSlotFn) {
46959        // scoped slot
46960        props = props || {};
46961        if (bindObject) {
46962            if ( true && !isObject(bindObject)) {
46963                warn$2('slot v-bind without argument expects an Object', this);
46964            }
46965            props = extend(extend({}, bindObject), props);
46966        }
46967        nodes =
46968            scopedSlotFn(props) ||
46969                (isFunction(fallbackRender) ? fallbackRender() : fallbackRender);
46970    }
46971    else {
46972        nodes =
46973            this.$slots[name] ||
46974                (isFunction(fallbackRender) ? fallbackRender() : fallbackRender);
46975    }
46976    var target = props && props.slot;
46977    if (target) {
46978        return this.$createElement('template', { slot: target }, nodes);
46979    }
46980    else {
46981        return nodes;
46982    }
46983}
46984
46985/**
46986 * Runtime helper for resolving filters
46987 */
46988function resolveFilter(id) {
46989    return resolveAsset(this.$options, 'filters', id, true) || identity;
46990}
46991
46992function isKeyNotMatch(expect, actual) {
46993    if (isArray(expect)) {
46994        return expect.indexOf(actual) === -1;
46995    }
46996    else {
46997        return expect !== actual;
46998    }
46999}
47000/**
47001 * Runtime helper for checking keyCodes from config.
47002 * exposed as Vue.prototype._k
47003 * passing in eventKeyName as last argument separately for backwards compat
47004 */
47005function checkKeyCodes(eventKeyCode, key, builtInKeyCode, eventKeyName, builtInKeyName) {
47006    var mappedKeyCode = config.keyCodes[key] || builtInKeyCode;
47007    if (builtInKeyName && eventKeyName && !config.keyCodes[key]) {
47008        return isKeyNotMatch(builtInKeyName, eventKeyName);
47009    }
47010    else if (mappedKeyCode) {
47011        return isKeyNotMatch(mappedKeyCode, eventKeyCode);
47012    }
47013    else if (eventKeyName) {
47014        return hyphenate(eventKeyName) !== key;
47015    }
47016    return eventKeyCode === undefined;
47017}
47018
47019/**
47020 * Runtime helper for merging v-bind="object" into a VNode's data.
47021 */
47022function bindObjectProps(data, tag, value, asProp, isSync) {
47023    if (value) {
47024        if (!isObject(value)) {
47025             true &&
47026                warn$2('v-bind without argument expects an Object or Array value', this);
47027        }
47028        else {
47029            if (isArray(value)) {
47030                value = toObject(value);
47031            }
47032            var hash = void 0;
47033            var _loop_1 = function (key) {
47034                if (key === 'class' || key === 'style' || isReservedAttribute(key)) {
47035                    hash = data;
47036                }
47037                else {
47038                    var type = data.attrs && data.attrs.type;
47039                    hash =
47040                        asProp || config.mustUseProp(tag, type, key)
47041                            ? data.domProps || (data.domProps = {})
47042                            : data.attrs || (data.attrs = {});
47043                }
47044                var camelizedKey = camelize(key);
47045                var hyphenatedKey = hyphenate(key);
47046                if (!(camelizedKey in hash) && !(hyphenatedKey in hash)) {
47047                    hash[key] = value[key];
47048                    if (isSync) {
47049                        var on = data.on || (data.on = {});
47050                        on["update:".concat(key)] = function ($event) {
47051                            value[key] = $event;
47052                        };
47053                    }
47054                }
47055            };
47056            for (var key in value) {
47057                _loop_1(key);
47058            }
47059        }
47060    }
47061    return data;
47062}
47063
47064/**
47065 * Runtime helper for rendering static trees.
47066 */
47067function renderStatic(index, isInFor) {
47068    var cached = this._staticTrees || (this._staticTrees = []);
47069    var tree = cached[index];
47070    // if has already-rendered static tree and not inside v-for,
47071    // we can reuse the same tree.
47072    if (tree && !isInFor) {
47073        return tree;
47074    }
47075    // otherwise, render a fresh tree.
47076    tree = cached[index] = this.$options.staticRenderFns[index].call(this._renderProxy, this._c, this // for render fns generated for functional component templates
47077    );
47078    markStatic$1(tree, "__static__".concat(index), false);
47079    return tree;
47080}
47081/**
47082 * Runtime helper for v-once.
47083 * Effectively it means marking the node as static with a unique key.
47084 */
47085function markOnce(tree, index, key) {
47086    markStatic$1(tree, "__once__".concat(index).concat(key ? "_".concat(key) : ""), true);
47087    return tree;
47088}
47089function markStatic$1(tree, key, isOnce) {
47090    if (isArray(tree)) {
47091        for (var i = 0; i < tree.length; i++) {
47092            if (tree[i] && typeof tree[i] !== 'string') {
47093                markStaticNode(tree[i], "".concat(key, "_").concat(i), isOnce);
47094            }
47095        }
47096    }
47097    else {
47098        markStaticNode(tree, key, isOnce);
47099    }
47100}
47101function markStaticNode(node, key, isOnce) {
47102    node.isStatic = true;
47103    node.key = key;
47104    node.isOnce = isOnce;
47105}
47106
47107function bindObjectListeners(data, value) {
47108    if (value) {
47109        if (!isPlainObject(value)) {
47110             true && warn$2('v-on without argument expects an Object value', this);
47111        }
47112        else {
47113            var on = (data.on = data.on ? extend({}, data.on) : {});
47114            for (var key in value) {
47115                var existing = on[key];
47116                var ours = value[key];
47117                on[key] = existing ? [].concat(existing, ours) : ours;
47118            }
47119        }
47120    }
47121    return data;
47122}
47123
47124function resolveScopedSlots(fns, res, 
47125// the following are added in 2.6
47126hasDynamicKeys, contentHashKey) {
47127    res = res || { $stable: !hasDynamicKeys };
47128    for (var i = 0; i < fns.length; i++) {
47129        var slot = fns[i];
47130        if (isArray(slot)) {
47131            resolveScopedSlots(slot, res, hasDynamicKeys);
47132        }
47133        else if (slot) {
47134            // marker for reverse proxying v-slot without scope on this.$slots
47135            // @ts-expect-error
47136            if (slot.proxy) {
47137                // @ts-expect-error
47138                slot.fn.proxy = true;
47139            }
47140            res[slot.key] = slot.fn;
47141        }
47142    }
47143    if (contentHashKey) {
47144        res.$key = contentHashKey;
47145    }
47146    return res;
47147}
47148
47149// helper to process dynamic keys for dynamic arguments in v-bind and v-on.
47150function bindDynamicKeys(baseObj, values) {
47151    for (var i = 0; i < values.length; i += 2) {
47152        var key = values[i];
47153        if (typeof key === 'string' && key) {
47154            baseObj[values[i]] = values[i + 1];
47155        }
47156        else if ( true && key !== '' && key !== null) {
47157            // null is a special value for explicitly removing a binding
47158            warn$2("Invalid value for dynamic directive argument (expected string or null): ".concat(key), this);
47159        }
47160    }
47161    return baseObj;
47162}
47163// helper to dynamically append modifier runtime markers to event names.
47164// ensure only append when value is already string, otherwise it will be cast
47165// to string and cause the type check to miss.
47166function prependModifier(value, symbol) {
47167    return typeof value === 'string' ? symbol + value : value;
47168}
47169
47170function installRenderHelpers(target) {
47171    target._o = markOnce;
47172    target._n = toNumber;
47173    target._s = toString;
47174    target._l = renderList;
47175    target._t = renderSlot;
47176    target._q = looseEqual;
47177    target._i = looseIndexOf;
47178    target._m = renderStatic;
47179    target._f = resolveFilter;
47180    target._k = checkKeyCodes;
47181    target._b = bindObjectProps;
47182    target._v = createTextVNode;
47183    target._e = createEmptyVNode;
47184    target._u = resolveScopedSlots;
47185    target._g = bindObjectListeners;
47186    target._d = bindDynamicKeys;
47187    target._p = prependModifier;
47188}
47189
47190/**
47191 * Runtime helper for resolving raw children VNodes into a slot object.
47192 */
47193function resolveSlots(children, context) {
47194    if (!children || !children.length) {
47195        return {};
47196    }
47197    var slots = {};
47198    for (var i = 0, l = children.length; i < l; i++) {
47199        var child = children[i];
47200        var data = child.data;
47201        // remove slot attribute if the node is resolved as a Vue slot node
47202        if (data && data.attrs && data.attrs.slot) {
47203            delete data.attrs.slot;
47204        }
47205        // named slots should only be respected if the vnode was rendered in the
47206        // same context.
47207        if ((child.context === context || child.fnContext === context) &&
47208            data &&
47209            data.slot != null) {
47210            var name_1 = data.slot;
47211            var slot = slots[name_1] || (slots[name_1] = []);
47212            if (child.tag === 'template') {
47213                slot.push.apply(slot, child.children || []);
47214            }
47215            else {
47216                slot.push(child);
47217            }
47218        }
47219        else {
47220            (slots.default || (slots.default = [])).push(child);
47221        }
47222    }
47223    // ignore slots that contains only whitespace
47224    for (var name_2 in slots) {
47225        if (slots[name_2].every(isWhitespace)) {
47226            delete slots[name_2];
47227        }
47228    }
47229    return slots;
47230}
47231function isWhitespace(node) {
47232    return (node.isComment && !node.asyncFactory) || node.text === ' ';
47233}
47234
47235function isAsyncPlaceholder(node) {
47236    // @ts-expect-error not really boolean type
47237    return node.isComment && node.asyncFactory;
47238}
47239
47240function normalizeScopedSlots(ownerVm, scopedSlots, normalSlots, prevScopedSlots) {
47241    var res;
47242    var hasNormalSlots = Object.keys(normalSlots).length > 0;
47243    var isStable = scopedSlots ? !!scopedSlots.$stable : !hasNormalSlots;
47244    var key = scopedSlots && scopedSlots.$key;
47245    if (!scopedSlots) {
47246        res = {};
47247    }
47248    else if (scopedSlots._normalized) {
47249        // fast path 1: child component re-render only, parent did not change
47250        return scopedSlots._normalized;
47251    }
47252    else if (isStable &&
47253        prevScopedSlots &&
47254        prevScopedSlots !== emptyObject &&
47255        key === prevScopedSlots.$key &&
47256        !hasNormalSlots &&
47257        !prevScopedSlots.$hasNormal) {
47258        // fast path 2: stable scoped slots w/ no normal slots to proxy,
47259        // only need to normalize once
47260        return prevScopedSlots;
47261    }
47262    else {
47263        res = {};
47264        for (var key_1 in scopedSlots) {
47265            if (scopedSlots[key_1] && key_1[0] !== '$') {
47266                res[key_1] = normalizeScopedSlot(ownerVm, normalSlots, key_1, scopedSlots[key_1]);
47267            }
47268        }
47269    }
47270    // expose normal slots on scopedSlots
47271    for (var key_2 in normalSlots) {
47272        if (!(key_2 in res)) {
47273            res[key_2] = proxyNormalSlot(normalSlots, key_2);
47274        }
47275    }
47276    // avoriaz seems to mock a non-extensible $scopedSlots object
47277    // and when that is passed down this would cause an error
47278    if (scopedSlots && Object.isExtensible(scopedSlots)) {
47279        scopedSlots._normalized = res;
47280    }
47281    def(res, '$stable', isStable);
47282    def(res, '$key', key);
47283    def(res, '$hasNormal', hasNormalSlots);
47284    return res;
47285}
47286function normalizeScopedSlot(vm, normalSlots, key, fn) {
47287    var normalized = function () {
47288        var cur = currentInstance;
47289        setCurrentInstance(vm);
47290        var res = arguments.length ? fn.apply(null, arguments) : fn({});
47291        res =
47292            res && typeof res === 'object' && !isArray(res)
47293                ? [res] // single vnode
47294                : normalizeChildren(res);
47295        var vnode = res && res[0];
47296        setCurrentInstance(cur);
47297        return res &&
47298            (!vnode ||
47299                (res.length === 1 && vnode.isComment && !isAsyncPlaceholder(vnode))) // #9658, #10391
47300            ? undefined
47301            : res;
47302    };
47303    // this is a slot using the new v-slot syntax without scope. although it is
47304    // compiled as a scoped slot, render fn users would expect it to be present
47305    // on this.$slots because the usage is semantically a normal slot.
47306    if (fn.proxy) {
47307        Object.defineProperty(normalSlots, key, {
47308            get: normalized,
47309            enumerable: true,
47310            configurable: true
47311        });
47312    }
47313    return normalized;
47314}
47315function proxyNormalSlot(slots, key) {
47316    return function () { return slots[key]; };
47317}
47318
47319function initSetup(vm) {
47320    var options = vm.$options;
47321    var setup = options.setup;
47322    if (setup) {
47323        var ctx = (vm._setupContext = createSetupContext(vm));
47324        setCurrentInstance(vm);
47325        pushTarget();
47326        var setupResult = invokeWithErrorHandling(setup, null, [vm._props || shallowReactive({}), ctx], vm, "setup");
47327        popTarget();
47328        setCurrentInstance();
47329        if (isFunction(setupResult)) {
47330            // render function
47331            // @ts-ignore
47332            options.render = setupResult;
47333        }
47334        else if (isObject(setupResult)) {
47335            // bindings
47336            if ( true && setupResult instanceof VNode) {
47337                warn$2("setup() should not return VNodes directly - " +
47338                    "return a render function instead.");
47339            }
47340            vm._setupState = setupResult;
47341            // __sfc indicates compiled bindings from <script setup>
47342            if (!setupResult.__sfc) {
47343                for (var key in setupResult) {
47344                    if (!isReserved(key)) {
47345                        proxyWithRefUnwrap(vm, setupResult, key);
47346                    }
47347                    else if (true) {
47348                        warn$2("Avoid using variables that start with _ or $ in setup().");
47349                    }
47350                }
47351            }
47352            else {
47353                // exposed for compiled render fn
47354                var proxy = (vm._setupProxy = {});
47355                for (var key in setupResult) {
47356                    if (key !== '__sfc') {
47357                        proxyWithRefUnwrap(proxy, setupResult, key);
47358                    }
47359                }
47360            }
47361        }
47362        else if ( true && setupResult !== undefined) {
47363            warn$2("setup() should return an object. Received: ".concat(setupResult === null ? 'null' : typeof setupResult));
47364        }
47365    }
47366}
47367function createSetupContext(vm) {
47368    var exposeCalled = false;
47369    return {
47370        get attrs() {
47371            if (!vm._attrsProxy) {
47372                var proxy = (vm._attrsProxy = {});
47373                def(proxy, '_v_attr_proxy', true);
47374                syncSetupProxy(proxy, vm.$attrs, emptyObject, vm, '$attrs');
47375            }
47376            return vm._attrsProxy;
47377        },
47378        get listeners() {
47379            if (!vm._listenersProxy) {
47380                var proxy = (vm._listenersProxy = {});
47381                syncSetupProxy(proxy, vm.$listeners, emptyObject, vm, '$listeners');
47382            }
47383            return vm._listenersProxy;
47384        },
47385        get slots() {
47386            return initSlotsProxy(vm);
47387        },
47388        emit: bind$1(vm.$emit, vm),
47389        expose: function (exposed) {
47390            if (true) {
47391                if (exposeCalled) {
47392                    warn$2("expose() should be called only once per setup().", vm);
47393                }
47394                exposeCalled = true;
47395            }
47396            if (exposed) {
47397                Object.keys(exposed).forEach(function (key) {
47398                    return proxyWithRefUnwrap(vm, exposed, key);
47399                });
47400            }
47401        }
47402    };
47403}
47404function syncSetupProxy(to, from, prev, instance, type) {
47405    var changed = false;
47406    for (var key in from) {
47407        if (!(key in to)) {
47408            changed = true;
47409            defineProxyAttr(to, key, instance, type);
47410        }
47411        else if (from[key] !== prev[key]) {
47412            changed = true;
47413        }
47414    }
47415    for (var key in to) {
47416        if (!(key in from)) {
47417            changed = true;
47418            delete to[key];
47419        }
47420    }
47421    return changed;
47422}
47423function defineProxyAttr(proxy, key, instance, type) {
47424    Object.defineProperty(proxy, key, {
47425        enumerable: true,
47426        configurable: true,
47427        get: function () {
47428            return instance[type][key];
47429        }
47430    });
47431}
47432function initSlotsProxy(vm) {
47433    if (!vm._slotsProxy) {
47434        syncSetupSlots((vm._slotsProxy = {}), vm.$scopedSlots);
47435    }
47436    return vm._slotsProxy;
47437}
47438function syncSetupSlots(to, from) {
47439    for (var key in from) {
47440        to[key] = from[key];
47441    }
47442    for (var key in to) {
47443        if (!(key in from)) {
47444            delete to[key];
47445        }
47446    }
47447}
47448/**
47449 * @internal use manual type def because public setup context type relies on
47450 * legacy VNode types
47451 */
47452function useSlots() {
47453    return getContext().slots;
47454}
47455/**
47456 * @internal use manual type def because public setup context type relies on
47457 * legacy VNode types
47458 */
47459function useAttrs() {
47460    return getContext().attrs;
47461}
47462/**
47463 * Vue 2 only
47464 * @internal use manual type def because public setup context type relies on
47465 * legacy VNode types
47466 */
47467function useListeners() {
47468    return getContext().listeners;
47469}
47470function getContext() {
47471    if ( true && !currentInstance) {
47472        warn$2("useContext() called without active instance.");
47473    }
47474    var vm = currentInstance;
47475    return vm._setupContext || (vm._setupContext = createSetupContext(vm));
47476}
47477/**
47478 * Runtime helper for merging default declarations. Imported by compiled code
47479 * only.
47480 * @internal
47481 */
47482function mergeDefaults(raw, defaults) {
47483    var props = isArray(raw)
47484        ? raw.reduce(function (normalized, p) { return ((normalized[p] = {}), normalized); }, {})
47485        : raw;
47486    for (var key in defaults) {
47487        var opt = props[key];
47488        if (opt) {
47489            if (isArray(opt) || isFunction(opt)) {
47490                props[key] = { type: opt, default: defaults[key] };
47491            }
47492            else {
47493                opt.default = defaults[key];
47494            }
47495        }
47496        else if (opt === null) {
47497            props[key] = { default: defaults[key] };
47498        }
47499        else if (true) {
47500            warn$2("props default key \"".concat(key, "\" has no corresponding declaration."));
47501        }
47502    }
47503    return props;
47504}
47505
47506function initRender(vm) {
47507    vm._vnode = null; // the root of the child tree
47508    vm._staticTrees = null; // v-once cached trees
47509    var options = vm.$options;
47510    var parentVnode = (vm.$vnode = options._parentVnode); // the placeholder node in parent tree
47511    var renderContext = parentVnode && parentVnode.context;
47512    vm.$slots = resolveSlots(options._renderChildren, renderContext);
47513    vm.$scopedSlots = parentVnode
47514        ? normalizeScopedSlots(vm.$parent, parentVnode.data.scopedSlots, vm.$slots)
47515        : emptyObject;
47516    // bind the createElement fn to this instance
47517    // so that we get proper render context inside it.
47518    // args order: tag, data, children, normalizationType, alwaysNormalize
47519    // internal version is used by render functions compiled from templates
47520    // @ts-expect-error
47521    vm._c = function (a, b, c, d) { return createElement$1(vm, a, b, c, d, false); };
47522    // normalization is always applied for the public version, used in
47523    // user-written render functions.
47524    // @ts-expect-error
47525    vm.$createElement = function (a, b, c, d) { return createElement$1(vm, a, b, c, d, true); };
47526    // $attrs & $listeners are exposed for easier HOC creation.
47527    // they need to be reactive so that HOCs using them are always updated
47528    var parentData = parentVnode && parentVnode.data;
47529    /* istanbul ignore else */
47530    if (true) {
47531        defineReactive(vm, '$attrs', (parentData && parentData.attrs) || emptyObject, function () {
47532            !isUpdatingChildComponent && warn$2("$attrs is readonly.", vm);
47533        }, true);
47534        defineReactive(vm, '$listeners', options._parentListeners || emptyObject, function () {
47535            !isUpdatingChildComponent && warn$2("$listeners is readonly.", vm);
47536        }, true);
47537    }
47538    else {}
47539}
47540var currentRenderingInstance = null;
47541function renderMixin(Vue) {
47542    // install runtime convenience helpers
47543    installRenderHelpers(Vue.prototype);
47544    Vue.prototype.$nextTick = function (fn) {
47545        return nextTick(fn, this);
47546    };
47547    Vue.prototype._render = function () {
47548        var vm = this;
47549        var _a = vm.$options, render = _a.render, _parentVnode = _a._parentVnode;
47550        if (_parentVnode && vm._isMounted) {
47551            vm.$scopedSlots = normalizeScopedSlots(vm.$parent, _parentVnode.data.scopedSlots, vm.$slots, vm.$scopedSlots);
47552            if (vm._slotsProxy) {
47553                syncSetupSlots(vm._slotsProxy, vm.$scopedSlots);
47554            }
47555        }
47556        // set parent vnode. this allows render functions to have access
47557        // to the data on the placeholder node.
47558        vm.$vnode = _parentVnode;
47559        // render self
47560        var prevInst = currentInstance;
47561        var prevRenderInst = currentRenderingInstance;
47562        var vnode;
47563        try {
47564            setCurrentInstance(vm);
47565            currentRenderingInstance = vm;
47566            vnode = render.call(vm._renderProxy, vm.$createElement);
47567        }
47568        catch (e) {
47569            handleError(e, vm, "render");
47570            // return error render result,
47571            // or previous vnode to prevent render error causing blank component
47572            /* istanbul ignore else */
47573            if ( true && vm.$options.renderError) {
47574                try {
47575                    vnode = vm.$options.renderError.call(vm._renderProxy, vm.$createElement, e);
47576                }
47577                catch (e) {
47578                    handleError(e, vm, "renderError");
47579                    vnode = vm._vnode;
47580                }
47581            }
47582            else {
47583                vnode = vm._vnode;
47584            }
47585        }
47586        finally {
47587            currentRenderingInstance = prevRenderInst;
47588            setCurrentInstance(prevInst);
47589        }
47590        // if the returned array contains only a single node, allow it
47591        if (isArray(vnode) && vnode.length === 1) {
47592            vnode = vnode[0];
47593        }
47594        // return empty vnode in case the render function errored out
47595        if (!(vnode instanceof VNode)) {
47596            if ( true && isArray(vnode)) {
47597                warn$2('Multiple root nodes returned from render function. Render function ' +
47598                    'should return a single root node.', vm);
47599            }
47600            vnode = createEmptyVNode();
47601        }
47602        // set parent
47603        vnode.parent = _parentVnode;
47604        return vnode;
47605    };
47606}
47607
47608function ensureCtor(comp, base) {
47609    if (comp.__esModule || (hasSymbol && comp[Symbol.toStringTag] === 'Module')) {
47610        comp = comp.default;
47611    }
47612    return isObject(comp) ? base.extend(comp) : comp;
47613}
47614function createAsyncPlaceholder(factory, data, context, children, tag) {
47615    var node = createEmptyVNode();
47616    node.asyncFactory = factory;
47617    node.asyncMeta = { data: data, context: context, children: children, tag: tag };
47618    return node;
47619}
47620function resolveAsyncComponent(factory, baseCtor) {
47621    if (isTrue(factory.error) && isDef(factory.errorComp)) {
47622        return factory.errorComp;
47623    }
47624    if (isDef(factory.resolved)) {
47625        return factory.resolved;
47626    }
47627    var owner = currentRenderingInstance;
47628    if (owner && isDef(factory.owners) && factory.owners.indexOf(owner) === -1) {
47629        // already pending
47630        factory.owners.push(owner);
47631    }
47632    if (isTrue(factory.loading) && isDef(factory.loadingComp)) {
47633        return factory.loadingComp;
47634    }
47635    if (owner && !isDef(factory.owners)) {
47636        var owners_1 = (factory.owners = [owner]);
47637        var sync_1 = true;
47638        var timerLoading_1 = null;
47639        var timerTimeout_1 = null;
47640        owner.$on('hook:destroyed', function () { return remove$2(owners_1, owner); });
47641        var forceRender_1 = function (renderCompleted) {
47642            for (var i = 0, l = owners_1.length; i < l; i++) {
47643                owners_1[i].$forceUpdate();
47644            }
47645            if (renderCompleted) {
47646                owners_1.length = 0;
47647                if (timerLoading_1 !== null) {
47648                    clearTimeout(timerLoading_1);
47649                    timerLoading_1 = null;
47650                }
47651                if (timerTimeout_1 !== null) {
47652                    clearTimeout(timerTimeout_1);
47653                    timerTimeout_1 = null;
47654                }
47655            }
47656        };
47657        var resolve = once(function (res) {
47658            // cache resolved
47659            factory.resolved = ensureCtor(res, baseCtor);
47660            // invoke callbacks only if this is not a synchronous resolve
47661            // (async resolves are shimmed as synchronous during SSR)
47662            if (!sync_1) {
47663                forceRender_1(true);
47664            }
47665            else {
47666                owners_1.length = 0;
47667            }
47668        });
47669        var reject_1 = once(function (reason) {
47670             true &&
47671                warn$2("Failed to resolve async component: ".concat(String(factory)) +
47672                    (reason ? "\nReason: ".concat(reason) : ''));
47673            if (isDef(factory.errorComp)) {
47674                factory.error = true;
47675                forceRender_1(true);
47676            }
47677        });
47678        var res_1 = factory(resolve, reject_1);
47679        if (isObject(res_1)) {
47680            if (isPromise(res_1)) {
47681                // () => Promise
47682                if (isUndef(factory.resolved)) {
47683                    res_1.then(resolve, reject_1);
47684                }
47685            }
47686            else if (isPromise(res_1.component)) {
47687                res_1.component.then(resolve, reject_1);
47688                if (isDef(res_1.error)) {
47689                    factory.errorComp = ensureCtor(res_1.error, baseCtor);
47690                }
47691                if (isDef(res_1.loading)) {
47692                    factory.loadingComp = ensureCtor(res_1.loading, baseCtor);
47693                    if (res_1.delay === 0) {
47694                        factory.loading = true;
47695                    }
47696                    else {
47697                        // @ts-expect-error NodeJS timeout type
47698                        timerLoading_1 = setTimeout(function () {
47699                            timerLoading_1 = null;
47700                            if (isUndef(factory.resolved) && isUndef(factory.error)) {
47701                                factory.loading = true;
47702                                forceRender_1(false);
47703                            }
47704                        }, res_1.delay || 200);
47705                    }
47706                }
47707                if (isDef(res_1.timeout)) {
47708                    // @ts-expect-error NodeJS timeout type
47709                    timerTimeout_1 = setTimeout(function () {
47710                        timerTimeout_1 = null;
47711                        if (isUndef(factory.resolved)) {
47712                            reject_1( true ? "timeout (".concat(res_1.timeout, "ms)") : 0);
47713                        }
47714                    }, res_1.timeout);
47715                }
47716            }
47717        }
47718        sync_1 = false;
47719        // return in case resolved synchronously
47720        return factory.loading ? factory.loadingComp : factory.resolved;
47721    }
47722}
47723
47724function getFirstComponentChild(children) {
47725    if (isArray(children)) {
47726        for (var i = 0; i < children.length; i++) {
47727            var c = children[i];
47728            if (isDef(c) && (isDef(c.componentOptions) || isAsyncPlaceholder(c))) {
47729                return c;
47730            }
47731        }
47732    }
47733}
47734
47735function initEvents(vm) {
47736    vm._events = Object.create(null);
47737    vm._hasHookEvent = false;
47738    // init parent attached events
47739    var listeners = vm.$options._parentListeners;
47740    if (listeners) {
47741        updateComponentListeners(vm, listeners);
47742    }
47743}
47744var target$1;
47745function add$1(event, fn) {
47746    target$1.$on(event, fn);
47747}
47748function remove$1(event, fn) {
47749    target$1.$off(event, fn);
47750}
47751function createOnceHandler$1(event, fn) {
47752    var _target = target$1;
47753    return function onceHandler() {
47754        var res = fn.apply(null, arguments);
47755        if (res !== null) {
47756            _target.$off(event, onceHandler);
47757        }
47758    };
47759}
47760function updateComponentListeners(vm, listeners, oldListeners) {
47761    target$1 = vm;
47762    updateListeners(listeners, oldListeners || {}, add$1, remove$1, createOnceHandler$1, vm);
47763    target$1 = undefined;
47764}
47765function eventsMixin(Vue) {
47766    var hookRE = /^hook:/;
47767    Vue.prototype.$on = function (event, fn) {
47768        var vm = this;
47769        if (isArray(event)) {
47770            for (var i = 0, l = event.length; i < l; i++) {
47771                vm.$on(event[i], fn);
47772            }
47773        }
47774        else {
47775            (vm._events[event] || (vm._events[event] = [])).push(fn);
47776            // optimize hook:event cost by using a boolean flag marked at registration
47777            // instead of a hash lookup
47778            if (hookRE.test(event)) {
47779                vm._hasHookEvent = true;
47780            }
47781        }
47782        return vm;
47783    };
47784    Vue.prototype.$once = function (event, fn) {
47785        var vm = this;
47786        function on() {
47787            vm.$off(event, on);
47788            fn.apply(vm, arguments);
47789        }
47790        on.fn = fn;
47791        vm.$on(event, on);
47792        return vm;
47793    };
47794    Vue.prototype.$off = function (event, fn) {
47795        var vm = this;
47796        // all
47797        if (!arguments.length) {
47798            vm._events = Object.create(null);
47799            return vm;
47800        }
47801        // array of events
47802        if (isArray(event)) {
47803            for (var i_1 = 0, l = event.length; i_1 < l; i_1++) {
47804                vm.$off(event[i_1], fn);
47805            }
47806            return vm;
47807        }
47808        // specific event
47809        var cbs = vm._events[event];
47810        if (!cbs) {
47811            return vm;
47812        }
47813        if (!fn) {
47814            vm._events[event] = null;
47815            return vm;
47816        }
47817        // specific handler
47818        var cb;
47819        var i = cbs.length;
47820        while (i--) {
47821            cb = cbs[i];
47822            if (cb === fn || cb.fn === fn) {
47823                cbs.splice(i, 1);
47824                break;
47825            }
47826        }
47827        return vm;
47828    };
47829    Vue.prototype.$emit = function (event) {
47830        var vm = this;
47831        if (true) {
47832            var lowerCaseEvent = event.toLowerCase();
47833            if (lowerCaseEvent !== event && vm._events[lowerCaseEvent]) {
47834                tip("Event \"".concat(lowerCaseEvent, "\" is emitted in component ") +
47835                    "".concat(formatComponentName(vm), " but the handler is registered for \"").concat(event, "\". ") +
47836                    "Note that HTML attributes are case-insensitive and you cannot use " +
47837                    "v-on to listen to camelCase events when using in-DOM templates. " +
47838                    "You should probably use \"".concat(hyphenate(event), "\" instead of \"").concat(event, "\"."));
47839            }
47840        }
47841        var cbs = vm._events[event];
47842        if (cbs) {
47843            cbs = cbs.length > 1 ? toArray(cbs) : cbs;
47844            var args = toArray(arguments, 1);
47845            var info = "event handler for \"".concat(event, "\"");
47846            for (var i = 0, l = cbs.length; i < l; i++) {
47847                invokeWithErrorHandling(cbs[i], vm, args, vm, info);
47848            }
47849        }
47850        return vm;
47851    };
47852}
47853
47854var activeEffectScope;
47855var EffectScope = /** @class */ (function () {
47856    function EffectScope(detached) {
47857        if (detached === void 0) { detached = false; }
47858        this.detached = detached;
47859        /**
47860         * @internal
47861         */
47862        this.active = true;
47863        /**
47864         * @internal
47865         */
47866        this.effects = [];
47867        /**
47868         * @internal
47869         */
47870        this.cleanups = [];
47871        this.parent = activeEffectScope;
47872        if (!detached && activeEffectScope) {
47873            this.index =
47874                (activeEffectScope.scopes || (activeEffectScope.scopes = [])).push(this) - 1;
47875        }
47876    }
47877    EffectScope.prototype.run = function (fn) {
47878        if (this.active) {
47879            var currentEffectScope = activeEffectScope;
47880            try {
47881                activeEffectScope = this;
47882                return fn();
47883            }
47884            finally {
47885                activeEffectScope = currentEffectScope;
47886            }
47887        }
47888        else if (true) {
47889            warn$2("cannot run an inactive effect scope.");
47890        }
47891    };
47892    /**
47893     * This should only be called on non-detached scopes
47894     * @internal
47895     */
47896    EffectScope.prototype.on = function () {
47897        activeEffectScope = this;
47898    };
47899    /**
47900     * This should only be called on non-detached scopes
47901     * @internal
47902     */
47903    EffectScope.prototype.off = function () {
47904        activeEffectScope = this.parent;
47905    };
47906    EffectScope.prototype.stop = function (fromParent) {
47907        if (this.active) {
47908            var i = void 0, l = void 0;
47909            for (i = 0, l = this.effects.length; i < l; i++) {
47910                this.effects[i].teardown();
47911            }
47912            for (i = 0, l = this.cleanups.length; i < l; i++) {
47913                this.cleanups[i]();
47914            }
47915            if (this.scopes) {
47916                for (i = 0, l = this.scopes.length; i < l; i++) {
47917                    this.scopes[i].stop(true);
47918                }
47919            }
47920            // nested scope, dereference from parent to avoid memory leaks
47921            if (!this.detached && this.parent && !fromParent) {
47922                // optimized O(1) removal
47923                var last = this.parent.scopes.pop();
47924                if (last && last !== this) {
47925                    this.parent.scopes[this.index] = last;
47926                    last.index = this.index;
47927                }
47928            }
47929            this.parent = undefined;
47930            this.active = false;
47931        }
47932    };
47933    return EffectScope;
47934}());
47935function effectScope(detached) {
47936    return new EffectScope(detached);
47937}
47938/**
47939 * @internal
47940 */
47941function recordEffectScope(effect, scope) {
47942    if (scope === void 0) { scope = activeEffectScope; }
47943    if (scope && scope.active) {
47944        scope.effects.push(effect);
47945    }
47946}
47947function getCurrentScope() {
47948    return activeEffectScope;
47949}
47950function onScopeDispose(fn) {
47951    if (activeEffectScope) {
47952        activeEffectScope.cleanups.push(fn);
47953    }
47954    else if (true) {
47955        warn$2("onScopeDispose() is called when there is no active effect scope" +
47956            " to be associated with.");
47957    }
47958}
47959
47960var activeInstance = null;
47961var isUpdatingChildComponent = false;
47962function setActiveInstance(vm) {
47963    var prevActiveInstance = activeInstance;
47964    activeInstance = vm;
47965    return function () {
47966        activeInstance = prevActiveInstance;
47967    };
47968}
47969function initLifecycle(vm) {
47970    var options = vm.$options;
47971    // locate first non-abstract parent
47972    var parent = options.parent;
47973    if (parent && !options.abstract) {
47974        while (parent.$options.abstract && parent.$parent) {
47975            parent = parent.$parent;
47976        }
47977        parent.$children.push(vm);
47978    }
47979    vm.$parent = parent;
47980    vm.$root = parent ? parent.$root : vm;
47981    vm.$children = [];
47982    vm.$refs = {};
47983    vm._provided = parent ? parent._provided : Object.create(null);
47984    vm._watcher = null;
47985    vm._inactive = null;
47986    vm._directInactive = false;
47987    vm._isMounted = false;
47988    vm._isDestroyed = false;
47989    vm._isBeingDestroyed = false;
47990}
47991function lifecycleMixin(Vue) {
47992    Vue.prototype._update = function (vnode, hydrating) {
47993        var vm = this;
47994        var prevEl = vm.$el;
47995        var prevVnode = vm._vnode;
47996        var restoreActiveInstance = setActiveInstance(vm);
47997        vm._vnode = vnode;
47998        // Vue.prototype.__patch__ is injected in entry points
47999        // based on the rendering backend used.
48000        if (!prevVnode) {
48001            // initial render
48002            vm.$el = vm.__patch__(vm.$el, vnode, hydrating, false /* removeOnly */);
48003        }
48004        else {
48005            // updates
48006            vm.$el = vm.__patch__(prevVnode, vnode);
48007        }
48008        restoreActiveInstance();
48009        // update __vue__ reference
48010        if (prevEl) {
48011            prevEl.__vue__ = null;
48012        }
48013        if (vm.$el) {
48014            vm.$el.__vue__ = vm;
48015        }
48016        // if parent is an HOC, update its $el as well
48017        var wrapper = vm;
48018        while (wrapper &&
48019            wrapper.$vnode &&
48020            wrapper.$parent &&
48021            wrapper.$vnode === wrapper.$parent._vnode) {
48022            wrapper.$parent.$el = wrapper.$el;
48023            wrapper = wrapper.$parent;
48024        }
48025        // updated hook is called by the scheduler to ensure that children are
48026        // updated in a parent's updated hook.
48027    };
48028    Vue.prototype.$forceUpdate = function () {
48029        var vm = this;
48030        if (vm._watcher) {
48031            vm._watcher.update();
48032        }
48033    };
48034    Vue.prototype.$destroy = function () {
48035        var vm = this;
48036        if (vm._isBeingDestroyed) {
48037            return;
48038        }
48039        callHook$1(vm, 'beforeDestroy');
48040        vm._isBeingDestroyed = true;
48041        // remove self from parent
48042        var parent = vm.$parent;
48043        if (parent && !parent._isBeingDestroyed && !vm.$options.abstract) {
48044            remove$2(parent.$children, vm);
48045        }
48046        // teardown scope. this includes both the render watcher and other
48047        // watchers created
48048        vm._scope.stop();
48049        // remove reference from data ob
48050        // frozen object may not have observer.
48051        if (vm._data.__ob__) {
48052            vm._data.__ob__.vmCount--;
48053        }
48054        // call the last hook...
48055        vm._isDestroyed = true;
48056        // invoke destroy hooks on current rendered tree
48057        vm.__patch__(vm._vnode, null);
48058        // fire destroyed hook
48059        callHook$1(vm, 'destroyed');
48060        // turn off all instance listeners.
48061        vm.$off();
48062        // remove __vue__ reference
48063        if (vm.$el) {
48064            vm.$el.__vue__ = null;
48065        }
48066        // release circular reference (#6759)
48067        if (vm.$vnode) {
48068            vm.$vnode.parent = null;
48069        }
48070    };
48071}
48072function mountComponent(vm, el, hydrating) {
48073    vm.$el = el;
48074    if (!vm.$options.render) {
48075        // @ts-expect-error invalid type
48076        vm.$options.render = createEmptyVNode;
48077        if (true) {
48078            /* istanbul ignore if */
48079            if ((vm.$options.template && vm.$options.template.charAt(0) !== '#') ||
48080                vm.$options.el ||
48081                el) {
48082                warn$2('You are using the runtime-only build of Vue where the template ' +
48083                    'compiler is not available. Either pre-compile the templates into ' +
48084                    'render functions, or use the compiler-included build.', vm);
48085            }
48086            else {
48087                warn$2('Failed to mount component: template or render function not defined.', vm);
48088            }
48089        }
48090    }
48091    callHook$1(vm, 'beforeMount');
48092    var updateComponent;
48093    /* istanbul ignore if */
48094    if ( true && config.performance && mark) {
48095        updateComponent = function () {
48096            var name = vm._name;
48097            var id = vm._uid;
48098            var startTag = "vue-perf-start:".concat(id);
48099            var endTag = "vue-perf-end:".concat(id);
48100            mark(startTag);
48101            var vnode = vm._render();
48102            mark(endTag);
48103            measure("vue ".concat(name, " render"), startTag, endTag);
48104            mark(startTag);
48105            vm._update(vnode, hydrating);
48106            mark(endTag);
48107            measure("vue ".concat(name, " patch"), startTag, endTag);
48108        };
48109    }
48110    else {
48111        updateComponent = function () {
48112            vm._update(vm._render(), hydrating);
48113        };
48114    }
48115    var watcherOptions = {
48116        before: function () {
48117            if (vm._isMounted && !vm._isDestroyed) {
48118                callHook$1(vm, 'beforeUpdate');
48119            }
48120        }
48121    };
48122    if (true) {
48123        watcherOptions.onTrack = function (e) { return callHook$1(vm, 'renderTracked', [e]); };
48124        watcherOptions.onTrigger = function (e) { return callHook$1(vm, 'renderTriggered', [e]); };
48125    }
48126    // we set this to vm._watcher inside the watcher's constructor
48127    // since the watcher's initial patch may call $forceUpdate (e.g. inside child
48128    // component's mounted hook), which relies on vm._watcher being already defined
48129    new Watcher(vm, updateComponent, noop, watcherOptions, true /* isRenderWatcher */);
48130    hydrating = false;
48131    // flush buffer for flush: "pre" watchers queued in setup()
48132    var preWatchers = vm._preWatchers;
48133    if (preWatchers) {
48134        for (var i = 0; i < preWatchers.length; i++) {
48135            preWatchers[i].run();
48136        }
48137    }
48138    // manually mounted instance, call mounted on self
48139    // mounted is called for render-created child components in its inserted hook
48140    if (vm.$vnode == null) {
48141        vm._isMounted = true;
48142        callHook$1(vm, 'mounted');
48143    }
48144    return vm;
48145}
48146function updateChildComponent(vm, propsData, listeners, parentVnode, renderChildren) {
48147    if (true) {
48148        isUpdatingChildComponent = true;
48149    }
48150    // determine whether component has slot children
48151    // we need to do this before overwriting $options._renderChildren.
48152    // check if there are dynamic scopedSlots (hand-written or compiled but with
48153    // dynamic slot names). Static scoped slots compiled from template has the
48154    // "$stable" marker.
48155    var newScopedSlots = parentVnode.data.scopedSlots;
48156    var oldScopedSlots = vm.$scopedSlots;
48157    var hasDynamicScopedSlot = !!((newScopedSlots && !newScopedSlots.$stable) ||
48158        (oldScopedSlots !== emptyObject && !oldScopedSlots.$stable) ||
48159        (newScopedSlots && vm.$scopedSlots.$key !== newScopedSlots.$key) ||
48160        (!newScopedSlots && vm.$scopedSlots.$key));
48161    // Any static slot children from the parent may have changed during parent's
48162    // update. Dynamic scoped slots may also have changed. In such cases, a forced
48163    // update is necessary to ensure correctness.
48164    var needsForceUpdate = !!(renderChildren || // has new static slots
48165        vm.$options._renderChildren || // has old static slots
48166        hasDynamicScopedSlot);
48167    var prevVNode = vm.$vnode;
48168    vm.$options._parentVnode = parentVnode;
48169    vm.$vnode = parentVnode; // update vm's placeholder node without re-render
48170    if (vm._vnode) {
48171        // update child tree's parent
48172        vm._vnode.parent = parentVnode;
48173    }
48174    vm.$options._renderChildren = renderChildren;
48175    // update $attrs and $listeners hash
48176    // these are also reactive so they may trigger child update if the child
48177    // used them during render
48178    var attrs = parentVnode.data.attrs || emptyObject;
48179    if (vm._attrsProxy) {
48180        // force update if attrs are accessed and has changed since it may be
48181        // passed to a child component.
48182        if (syncSetupProxy(vm._attrsProxy, attrs, (prevVNode.data && prevVNode.data.attrs) || emptyObject, vm, '$attrs')) {
48183            needsForceUpdate = true;
48184        }
48185    }
48186    vm.$attrs = attrs;
48187    // update listeners
48188    listeners = listeners || emptyObject;
48189    var prevListeners = vm.$options._parentListeners;
48190    if (vm._listenersProxy) {
48191        syncSetupProxy(vm._listenersProxy, listeners, prevListeners || emptyObject, vm, '$listeners');
48192    }
48193    vm.$listeners = vm.$options._parentListeners = listeners;
48194    updateComponentListeners(vm, listeners, prevListeners);
48195    // update props
48196    if (propsData && vm.$options.props) {
48197        toggleObserving(false);
48198        var props = vm._props;
48199        var propKeys = vm.$options._propKeys || [];
48200        for (var i = 0; i < propKeys.length; i++) {
48201            var key = propKeys[i];
48202            var propOptions = vm.$options.props; // wtf flow?
48203            props[key] = validateProp(key, propOptions, propsData, vm);
48204        }
48205        toggleObserving(true);
48206        // keep a copy of raw propsData
48207        vm.$options.propsData = propsData;
48208    }
48209    // resolve slots + force update if has children
48210    if (needsForceUpdate) {
48211        vm.$slots = resolveSlots(renderChildren, parentVnode.context);
48212        vm.$forceUpdate();
48213    }
48214    if (true) {
48215        isUpdatingChildComponent = false;
48216    }
48217}
48218function isInInactiveTree(vm) {
48219    while (vm && (vm = vm.$parent)) {
48220        if (vm._inactive)
48221            return true;
48222    }
48223    return false;
48224}
48225function activateChildComponent(vm, direct) {
48226    if (direct) {
48227        vm._directInactive = false;
48228        if (isInInactiveTree(vm)) {
48229            return;
48230        }
48231    }
48232    else if (vm._directInactive) {
48233        return;
48234    }
48235    if (vm._inactive || vm._inactive === null) {
48236        vm._inactive = false;
48237        for (var i = 0; i < vm.$children.length; i++) {
48238            activateChildComponent(vm.$children[i]);
48239        }
48240        callHook$1(vm, 'activated');
48241    }
48242}
48243function deactivateChildComponent(vm, direct) {
48244    if (direct) {
48245        vm._directInactive = true;
48246        if (isInInactiveTree(vm)) {
48247            return;
48248        }
48249    }
48250    if (!vm._inactive) {
48251        vm._inactive = true;
48252        for (var i = 0; i < vm.$children.length; i++) {
48253            deactivateChildComponent(vm.$children[i]);
48254        }
48255        callHook$1(vm, 'deactivated');
48256    }
48257}
48258function callHook$1(vm, hook, args, setContext) {
48259    if (setContext === void 0) { setContext = true; }
48260    // #7573 disable dep collection when invoking lifecycle hooks
48261    pushTarget();
48262    var prevInst = currentInstance;
48263    var prevScope = getCurrentScope();
48264    setContext && setCurrentInstance(vm);
48265    var handlers = vm.$options[hook];
48266    var info = "".concat(hook, " hook");
48267    if (handlers) {
48268        for (var i = 0, j = handlers.length; i < j; i++) {
48269            invokeWithErrorHandling(handlers[i], vm, args || null, vm, info);
48270        }
48271    }
48272    if (vm._hasHookEvent) {
48273        vm.$emit('hook:' + hook);
48274    }
48275    if (setContext) {
48276        setCurrentInstance(prevInst);
48277        prevScope && prevScope.on();
48278    }
48279    popTarget();
48280}
48281
48282var MAX_UPDATE_COUNT = 100;
48283var queue = [];
48284var activatedChildren = [];
48285var has = {};
48286var circular = {};
48287var waiting = false;
48288var flushing = false;
48289var index$1 = 0;
48290/**
48291 * Reset the scheduler's state.
48292 */
48293function resetSchedulerState() {
48294    index$1 = queue.length = activatedChildren.length = 0;
48295    has = {};
48296    if (true) {
48297        circular = {};
48298    }
48299    waiting = flushing = false;
48300}
48301// Async edge case #6566 requires saving the timestamp when event listeners are
48302// attached. However, calling performance.now() has a perf overhead especially
48303// if the page has thousands of event listeners. Instead, we take a timestamp
48304// every time the scheduler flushes and use that for all event listeners
48305// attached during that flush.
48306var currentFlushTimestamp = 0;
48307// Async edge case fix requires storing an event listener's attach timestamp.
48308var getNow = Date.now;
48309// Determine what event timestamp the browser is using. Annoyingly, the
48310// timestamp can either be hi-res (relative to page load) or low-res
48311// (relative to UNIX epoch), so in order to compare time we have to use the
48312// same timestamp type when saving the flush timestamp.
48313// All IE versions use low-res event timestamps, and have problematic clock
48314// implementations (#9632)
48315if (inBrowser && !isIE) {
48316    var performance_1 = window.performance;
48317    if (performance_1 &&
48318        typeof performance_1.now === 'function' &&
48319        getNow() > document.createEvent('Event').timeStamp) {
48320        // if the event timestamp, although evaluated AFTER the Date.now(), is
48321        // smaller than it, it means the event is using a hi-res timestamp,
48322        // and we need to use the hi-res version for event listener timestamps as
48323        // well.
48324        getNow = function () { return performance_1.now(); };
48325    }
48326}
48327var sortCompareFn = function (a, b) {
48328    if (a.post) {
48329        if (!b.post)
48330            return 1;
48331    }
48332    else if (b.post) {
48333        return -1;
48334    }
48335    return a.id - b.id;
48336};
48337/**
48338 * Flush both queues and run the watchers.
48339 */
48340function flushSchedulerQueue() {
48341    currentFlushTimestamp = getNow();
48342    flushing = true;
48343    var watcher, id;
48344    // Sort queue before flush.
48345    // This ensures that:
48346    // 1. Components are updated from parent to child. (because parent is always
48347    //    created before the child)
48348    // 2. A component's user watchers are run before its render watcher (because
48349    //    user watchers are created before the render watcher)
48350    // 3. If a component is destroyed during a parent component's watcher run,
48351    //    its watchers can be skipped.
48352    queue.sort(sortCompareFn);
48353    // do not cache length because more watchers might be pushed
48354    // as we run existing watchers
48355    for (index$1 = 0; index$1 < queue.length; index$1++) {
48356        watcher = queue[index$1];
48357        if (watcher.before) {
48358            watcher.before();
48359        }
48360        id = watcher.id;
48361        has[id] = null;
48362        watcher.run();
48363        // in dev build, check and stop circular updates.
48364        if ( true && has[id] != null) {
48365            circular[id] = (circular[id] || 0) + 1;
48366            if (circular[id] > MAX_UPDATE_COUNT) {
48367                warn$2('You may have an infinite update loop ' +
48368                    (watcher.user
48369                        ? "in watcher with expression \"".concat(watcher.expression, "\"")
48370                        : "in a component render function."), watcher.vm);
48371                break;
48372            }
48373        }
48374    }
48375    // keep copies of post queues before resetting state
48376    var activatedQueue = activatedChildren.slice();
48377    var updatedQueue = queue.slice();
48378    resetSchedulerState();
48379    // call component updated and activated hooks
48380    callActivatedHooks(activatedQueue);
48381    callUpdatedHooks(updatedQueue);
48382    cleanupDeps();
48383    // devtool hook
48384    /* istanbul ignore if */
48385    if (devtools && config.devtools) {
48386        devtools.emit('flush');
48387    }
48388}
48389function callUpdatedHooks(queue) {
48390    var i = queue.length;
48391    while (i--) {
48392        var watcher = queue[i];
48393        var vm = watcher.vm;
48394        if (vm && vm._watcher === watcher && vm._isMounted && !vm._isDestroyed) {
48395            callHook$1(vm, 'updated');
48396        }
48397    }
48398}
48399/**
48400 * Queue a kept-alive component that was activated during patch.
48401 * The queue will be processed after the entire tree has been patched.
48402 */
48403function queueActivatedComponent(vm) {
48404    // setting _inactive to false here so that a render function can
48405    // rely on checking whether it's in an inactive tree (e.g. router-view)
48406    vm._inactive = false;
48407    activatedChildren.push(vm);
48408}
48409function callActivatedHooks(queue) {
48410    for (var i = 0; i < queue.length; i++) {
48411        queue[i]._inactive = true;
48412        activateChildComponent(queue[i], true /* true */);
48413    }
48414}
48415/**
48416 * Push a watcher into the watcher queue.
48417 * Jobs with duplicate IDs will be skipped unless it's
48418 * pushed when the queue is being flushed.
48419 */
48420function queueWatcher(watcher) {
48421    var id = watcher.id;
48422    if (has[id] != null) {
48423        return;
48424    }
48425    if (watcher === Dep.target && watcher.noRecurse) {
48426        return;
48427    }
48428    has[id] = true;
48429    if (!flushing) {
48430        queue.push(watcher);
48431    }
48432    else {
48433        // if already flushing, splice the watcher based on its id
48434        // if already past its id, it will be run next immediately.
48435        var i = queue.length - 1;
48436        while (i > index$1 && queue[i].id > watcher.id) {
48437            i--;
48438        }
48439        queue.splice(i + 1, 0, watcher);
48440    }
48441    // queue the flush
48442    if (!waiting) {
48443        waiting = true;
48444        if ( true && !config.async) {
48445            flushSchedulerQueue();
48446            return;
48447        }
48448        nextTick(flushSchedulerQueue);
48449    }
48450}
48451
48452var WATCHER = "watcher";
48453var WATCHER_CB = "".concat(WATCHER, " callback");
48454var WATCHER_GETTER = "".concat(WATCHER, " getter");
48455var WATCHER_CLEANUP = "".concat(WATCHER, " cleanup");
48456// Simple effect.
48457function watchEffect(effect, options) {
48458    return doWatch(effect, null, options);
48459}
48460function watchPostEffect(effect, options) {
48461    return doWatch(effect, null, ( true
48462        ? __assign(__assign({}, options), { flush: 'post' }) : 0));
48463}
48464function watchSyncEffect(effect, options) {
48465    return doWatch(effect, null, ( true
48466        ? __assign(__assign({}, options), { flush: 'sync' }) : 0));
48467}
48468// initial value for watchers to trigger on undefined initial values
48469var INITIAL_WATCHER_VALUE = {};
48470// implementation
48471function watch(source, cb, options) {
48472    if ( true && typeof cb !== 'function') {
48473        warn$2("`watch(fn, options?)` signature has been moved to a separate API. " +
48474            "Use `watchEffect(fn, options?)` instead. `watch` now only " +
48475            "supports `watch(source, cb, options?) signature.");
48476    }
48477    return doWatch(source, cb, options);
48478}
48479function doWatch(source, cb, _a) {
48480    var _b = _a === void 0 ? emptyObject : _a, immediate = _b.immediate, deep = _b.deep, _c = _b.flush, flush = _c === void 0 ? 'pre' : _c, onTrack = _b.onTrack, onTrigger = _b.onTrigger;
48481    if ( true && !cb) {
48482        if (immediate !== undefined) {
48483            warn$2("watch() \"immediate\" option is only respected when using the " +
48484                "watch(source, callback, options?) signature.");
48485        }
48486        if (deep !== undefined) {
48487            warn$2("watch() \"deep\" option is only respected when using the " +
48488                "watch(source, callback, options?) signature.");
48489        }
48490    }
48491    var warnInvalidSource = function (s) {
48492        warn$2("Invalid watch source: ".concat(s, ". A watch source can only be a getter/effect ") +
48493            "function, a ref, a reactive object, or an array of these types.");
48494    };
48495    var instance = currentInstance;
48496    var call = function (fn, type, args) {
48497        if (args === void 0) { args = null; }
48498        var res = invokeWithErrorHandling(fn, null, args, instance, type);
48499        if (deep && res && res.__ob__)
48500            res.__ob__.dep.depend();
48501        return res;
48502    };
48503    var getter;
48504    var forceTrigger = false;
48505    var isMultiSource = false;
48506    if (isRef(source)) {
48507        getter = function () { return source.value; };
48508        forceTrigger = isShallow(source);
48509    }
48510    else if (isReactive(source)) {
48511        getter = function () {
48512            source.__ob__.dep.depend();
48513            return source;
48514        };
48515        deep = true;
48516    }
48517    else if (isArray(source)) {
48518        isMultiSource = true;
48519        forceTrigger = source.some(function (s) { return isReactive(s) || isShallow(s); });
48520        getter = function () {
48521            return source.map(function (s) {
48522                if (isRef(s)) {
48523                    return s.value;
48524                }
48525                else if (isReactive(s)) {
48526                    s.__ob__.dep.depend();
48527                    return traverse(s);
48528                }
48529                else if (isFunction(s)) {
48530                    return call(s, WATCHER_GETTER);
48531                }
48532                else {
48533                     true && warnInvalidSource(s);
48534                }
48535            });
48536        };
48537    }
48538    else if (isFunction(source)) {
48539        if (cb) {
48540            // getter with cb
48541            getter = function () { return call(source, WATCHER_GETTER); };
48542        }
48543        else {
48544            // no cb -> simple effect
48545            getter = function () {
48546                if (instance && instance._isDestroyed) {
48547                    return;
48548                }
48549                if (cleanup) {
48550                    cleanup();
48551                }
48552                return call(source, WATCHER, [onCleanup]);
48553            };
48554        }
48555    }
48556    else {
48557        getter = noop;
48558         true && warnInvalidSource(source);
48559    }
48560    if (cb && deep) {
48561        var baseGetter_1 = getter;
48562        getter = function () { return traverse(baseGetter_1()); };
48563    }
48564    var cleanup;
48565    var onCleanup = function (fn) {
48566        cleanup = watcher.onStop = function () {
48567            call(fn, WATCHER_CLEANUP);
48568        };
48569    };
48570    // in SSR there is no need to setup an actual effect, and it should be noop
48571    // unless it's eager
48572    if (isServerRendering()) {
48573        // we will also not call the invalidate callback (+ runner is not set up)
48574        onCleanup = noop;
48575        if (!cb) {
48576            getter();
48577        }
48578        else if (immediate) {
48579            call(cb, WATCHER_CB, [
48580                getter(),
48581                isMultiSource ? [] : undefined,
48582                onCleanup
48583            ]);
48584        }
48585        return noop;
48586    }
48587    var watcher = new Watcher(currentInstance, getter, noop, {
48588        lazy: true
48589    });
48590    watcher.noRecurse = !cb;
48591    var oldValue = isMultiSource ? [] : INITIAL_WATCHER_VALUE;
48592    // overwrite default run
48593    watcher.run = function () {
48594        if (!watcher.active) {
48595            return;
48596        }
48597        if (cb) {
48598            // watch(source, cb)
48599            var newValue = watcher.get();
48600            if (deep ||
48601                forceTrigger ||
48602                (isMultiSource
48603                    ? newValue.some(function (v, i) {
48604                        return hasChanged(v, oldValue[i]);
48605                    })
48606                    : hasChanged(newValue, oldValue))) {
48607                // cleanup before running cb again
48608                if (cleanup) {
48609                    cleanup();
48610                }
48611                call(cb, WATCHER_CB, [
48612                    newValue,
48613                    // pass undefined as the old value when it's changed for the first time
48614                    oldValue === INITIAL_WATCHER_VALUE ? undefined : oldValue,
48615                    onCleanup
48616                ]);
48617                oldValue = newValue;
48618            }
48619        }
48620        else {
48621            // watchEffect
48622            watcher.get();
48623        }
48624    };
48625    if (flush === 'sync') {
48626        watcher.update = watcher.run;
48627    }
48628    else if (flush === 'post') {
48629        watcher.post = true;
48630        watcher.update = function () { return queueWatcher(watcher); };
48631    }
48632    else {
48633        // pre
48634        watcher.update = function () {
48635            if (instance && instance === currentInstance && !instance._isMounted) {
48636                // pre-watcher triggered before
48637                var buffer = instance._preWatchers || (instance._preWatchers = []);
48638                if (buffer.indexOf(watcher) < 0)
48639                    buffer.push(watcher);
48640            }
48641            else {
48642                queueWatcher(watcher);
48643            }
48644        };
48645    }
48646    if (true) {
48647        watcher.onTrack = onTrack;
48648        watcher.onTrigger = onTrigger;
48649    }
48650    // initial run
48651    if (cb) {
48652        if (immediate) {
48653            watcher.run();
48654        }
48655        else {
48656            oldValue = watcher.get();
48657        }
48658    }
48659    else if (flush === 'post' && instance) {
48660        instance.$once('hook:mounted', function () { return watcher.get(); });
48661    }
48662    else {
48663        watcher.get();
48664    }
48665    return function () {
48666        watcher.teardown();
48667    };
48668}
48669
48670function provide(key, value) {
48671    if (!currentInstance) {
48672        if (true) {
48673            warn$2("provide() can only be used inside setup().");
48674        }
48675    }
48676    else {
48677        // TS doesn't allow symbol as index type
48678        resolveProvided(currentInstance)[key] = value;
48679    }
48680}
48681function resolveProvided(vm) {
48682    // by default an instance inherits its parent's provides object
48683    // but when it needs to provide values of its own, it creates its
48684    // own provides object using parent provides object as prototype.
48685    // this way in `inject` we can simply look up injections from direct
48686    // parent and let the prototype chain do the work.
48687    var existing = vm._provided;
48688    var parentProvides = vm.$parent && vm.$parent._provided;
48689    if (parentProvides === existing) {
48690        return (vm._provided = Object.create(parentProvides));
48691    }
48692    else {
48693        return existing;
48694    }
48695}
48696function inject(key, defaultValue, treatDefaultAsFactory) {
48697    if (treatDefaultAsFactory === void 0) { treatDefaultAsFactory = false; }
48698    // fallback to `currentRenderingInstance` so that this can be called in
48699    // a functional component
48700    var instance = currentInstance;
48701    if (instance) {
48702        // #2400
48703        // to support `app.use` plugins,
48704        // fallback to appContext's `provides` if the instance is at root
48705        var provides = instance.$parent && instance.$parent._provided;
48706        if (provides && key in provides) {
48707            // TS doesn't allow symbol as index type
48708            return provides[key];
48709        }
48710        else if (arguments.length > 1) {
48711            return treatDefaultAsFactory && isFunction(defaultValue)
48712                ? defaultValue.call(instance)
48713                : defaultValue;
48714        }
48715        else if (true) {
48716            warn$2("injection \"".concat(String(key), "\" not found."));
48717        }
48718    }
48719    else if (true) {
48720        warn$2("inject() can only be used inside setup() or functional components.");
48721    }
48722}
48723
48724/**
48725 * @internal this function needs manual public type declaration because it relies
48726 * on previously manually authored types from Vue 2
48727 */
48728function h(type, props, children) {
48729    if (!currentInstance) {
48730         true &&
48731            warn$2("globally imported h() can only be invoked when there is an active " +
48732                "component instance, e.g. synchronously in a component's render or setup function.");
48733    }
48734    return createElement$1(currentInstance, type, props, children, 2, true);
48735}
48736
48737function handleError(err, vm, info) {
48738    // Deactivate deps tracking while processing error handler to avoid possible infinite rendering.
48739    // See: https://github.com/vuejs/vuex/issues/1505
48740    pushTarget();
48741    try {
48742        if (vm) {
48743            var cur = vm;
48744            while ((cur = cur.$parent)) {
48745                var hooks = cur.$options.errorCaptured;
48746                if (hooks) {
48747                    for (var i = 0; i < hooks.length; i++) {
48748                        try {
48749                            var capture = hooks[i].call(cur, err, vm, info) === false;
48750                            if (capture)
48751                                return;
48752                        }
48753                        catch (e) {
48754                            globalHandleError(e, cur, 'errorCaptured hook');
48755                        }
48756                    }
48757                }
48758            }
48759        }
48760        globalHandleError(err, vm, info);
48761    }
48762    finally {
48763        popTarget();
48764    }
48765}
48766function invokeWithErrorHandling(handler, context, args, vm, info) {
48767    var res;
48768    try {
48769        res = args ? handler.apply(context, args) : handler.call(context);
48770        if (res && !res._isVue && isPromise(res) && !res._handled) {
48771            res.catch(function (e) { return handleError(e, vm, info + " (Promise/async)"); });
48772            res._handled = true;
48773        }
48774    }
48775    catch (e) {
48776        handleError(e, vm, info);
48777    }
48778    return res;
48779}
48780function globalHandleError(err, vm, info) {
48781    if (config.errorHandler) {
48782        try {
48783            return config.errorHandler.call(null, err, vm, info);
48784        }
48785        catch (e) {
48786            // if the user intentionally throws the original error in the handler,
48787            // do not log it twice
48788            if (e !== err) {
48789                logError(e, null, 'config.errorHandler');
48790            }
48791        }
48792    }
48793    logError(err, vm, info);
48794}
48795function logError(err, vm, info) {
48796    if (true) {
48797        warn$2("Error in ".concat(info, ": \"").concat(err.toString(), "\""), vm);
48798    }
48799    /* istanbul ignore else */
48800    if (inBrowser && typeof console !== 'undefined') {
48801        console.error(err);
48802    }
48803    else {
48804        throw err;
48805    }
48806}
48807
48808/* globals MutationObserver */
48809var isUsingMicroTask = false;
48810var callbacks = [];
48811var pending = false;
48812function flushCallbacks() {
48813    pending = false;
48814    var copies = callbacks.slice(0);
48815    callbacks.length = 0;
48816    for (var i = 0; i < copies.length; i++) {
48817        copies[i]();
48818    }
48819}
48820// Here we have async deferring wrappers using microtasks.
48821// In 2.5 we used (macro) tasks (in combination with microtasks).
48822// However, it has subtle problems when state is changed right before repaint
48823// (e.g. #6813, out-in transitions).
48824// Also, using (macro) tasks in event handler would cause some weird behaviors
48825// that cannot be circumvented (e.g. #7109, #7153, #7546, #7834, #8109).
48826// So we now use microtasks everywhere, again.
48827// A major drawback of this tradeoff is that there are some scenarios
48828// where microtasks have too high a priority and fire in between supposedly
48829// sequential events (e.g. #4521, #6690, which have workarounds)
48830// or even between bubbling of the same event (#6566).
48831var timerFunc;
48832// The nextTick behavior leverages the microtask queue, which can be accessed
48833// via either native Promise.then or MutationObserver.
48834// MutationObserver has wider support, however it is seriously bugged in
48835// UIWebView in iOS >= 9.3.3 when triggered in touch event handlers. It
48836// completely stops working after triggering a few times... so, if native
48837// Promise is available, we will use it:
48838/* istanbul ignore next, $flow-disable-line */
48839if (typeof Promise !== 'undefined' && isNative(Promise)) {
48840    var p_1 = Promise.resolve();
48841    timerFunc = function () {
48842        p_1.then(flushCallbacks);
48843        // In problematic UIWebViews, Promise.then doesn't completely break, but
48844        // it can get stuck in a weird state where callbacks are pushed into the
48845        // microtask queue but the queue isn't being flushed, until the browser
48846        // needs to do some other work, e.g. handle a timer. Therefore we can
48847        // "force" the microtask queue to be flushed by adding an empty timer.
48848        if (isIOS)
48849            setTimeout(noop);
48850    };
48851    isUsingMicroTask = true;
48852}
48853else if (!isIE &&
48854    typeof MutationObserver !== 'undefined' &&
48855    (isNative(MutationObserver) ||
48856        // PhantomJS and iOS 7.x
48857        MutationObserver.toString() === '[object MutationObserverConstructor]')) {
48858    // Use MutationObserver where native Promise is not available,
48859    // e.g. PhantomJS, iOS7, Android 4.4
48860    // (#6466 MutationObserver is unreliable in IE11)
48861    var counter_1 = 1;
48862    var observer = new MutationObserver(flushCallbacks);
48863    var textNode_1 = document.createTextNode(String(counter_1));
48864    observer.observe(textNode_1, {
48865        characterData: true
48866    });
48867    timerFunc = function () {
48868        counter_1 = (counter_1 + 1) % 2;
48869        textNode_1.data = String(counter_1);
48870    };
48871    isUsingMicroTask = true;
48872}
48873else if (typeof setImmediate !== 'undefined' && isNative(setImmediate)) {
48874    // Fallback to setImmediate.
48875    // Technically it leverages the (macro) task queue,
48876    // but it is still a better choice than setTimeout.
48877    timerFunc = function () {
48878        setImmediate(flushCallbacks);
48879    };
48880}
48881else {
48882    // Fallback to setTimeout.
48883    timerFunc = function () {
48884        setTimeout(flushCallbacks, 0);
48885    };
48886}
48887/**
48888 * @internal
48889 */
48890function nextTick(cb, ctx) {
48891    var _resolve;
48892    callbacks.push(function () {
48893        if (cb) {
48894            try {
48895                cb.call(ctx);
48896            }
48897            catch (e) {
48898                handleError(e, ctx, 'nextTick');
48899            }
48900        }
48901        else if (_resolve) {
48902            _resolve(ctx);
48903        }
48904    });
48905    if (!pending) {
48906        pending = true;
48907        timerFunc();
48908    }
48909    // $flow-disable-line
48910    if (!cb && typeof Promise !== 'undefined') {
48911        return new Promise(function (resolve) {
48912            _resolve = resolve;
48913        });
48914    }
48915}
48916
48917function useCssModule(name) {
48918    if (name === void 0) { name = '$style'; }
48919    /* istanbul ignore else */
48920    {
48921        if (!currentInstance) {
48922             true && warn$2("useCssModule must be called inside setup()");
48923            return emptyObject;
48924        }
48925        var mod = currentInstance[name];
48926        if (!mod) {
48927             true &&
48928                warn$2("Current instance does not have CSS module named \"".concat(name, "\"."));
48929            return emptyObject;
48930        }
48931        return mod;
48932    }
48933}
48934
48935/**
48936 * Runtime helper for SFC's CSS variable injection feature.
48937 * @private
48938 */
48939function useCssVars(getter) {
48940    if (!inBrowser && !false)
48941        return;
48942    var instance = currentInstance;
48943    if (!instance) {
48944         true &&
48945            warn$2("useCssVars is called without current active component instance.");
48946        return;
48947    }
48948    watchPostEffect(function () {
48949        var el = instance.$el;
48950        var vars = getter(instance, instance._setupProxy);
48951        if (el && el.nodeType === 1) {
48952            var style = el.style;
48953            for (var key in vars) {
48954                style.setProperty("--".concat(key), vars[key]);
48955            }
48956        }
48957    });
48958}
48959
48960/**
48961 * v3-compatible async component API.
48962 * @internal the type is manually declared in <root>/types/v3-define-async-component.d.ts
48963 * because it relies on existing manual types
48964 */
48965function defineAsyncComponent(source) {
48966    if (isFunction(source)) {
48967        source = { loader: source };
48968    }
48969    var loader = source.loader, loadingComponent = source.loadingComponent, errorComponent = source.errorComponent, _a = source.delay, delay = _a === void 0 ? 200 : _a, timeout = source.timeout, // undefined = never times out
48970    _b = source.suspensible, // undefined = never times out
48971    suspensible = _b === void 0 ? false : _b, // in Vue 3 default is true
48972    userOnError = source.onError;
48973    if ( true && suspensible) {
48974        warn$2("The suspensible option for async components is not supported in Vue2. It is ignored.");
48975    }
48976    var pendingRequest = null;
48977    var retries = 0;
48978    var retry = function () {
48979        retries++;
48980        pendingRequest = null;
48981        return load();
48982    };
48983    var load = function () {
48984        var thisRequest;
48985        return (pendingRequest ||
48986            (thisRequest = pendingRequest =
48987                loader()
48988                    .catch(function (err) {
48989                    err = err instanceof Error ? err : new Error(String(err));
48990                    if (userOnError) {
48991                        return new Promise(function (resolve, reject) {
48992                            var userRetry = function () { return resolve(retry()); };
48993                            var userFail = function () { return reject(err); };
48994                            userOnError(err, userRetry, userFail, retries + 1);
48995                        });
48996                    }
48997                    else {
48998                        throw err;
48999                    }
49000                })
49001                    .then(function (comp) {
49002                    if (thisRequest !== pendingRequest && pendingRequest) {
49003                        return pendingRequest;
49004                    }
49005                    if ( true && !comp) {
49006                        warn$2("Async component loader resolved to undefined. " +
49007                            "If you are using retry(), make sure to return its return value.");
49008                    }
49009                    // interop module default
49010                    if (comp &&
49011                        (comp.__esModule || comp[Symbol.toStringTag] === 'Module')) {
49012                        comp = comp.default;
49013                    }
49014                    if ( true && comp && !isObject(comp) && !isFunction(comp)) {
49015                        throw new Error("Invalid async component load result: ".concat(comp));
49016                    }
49017                    return comp;
49018                })));
49019    };
49020    return function () {
49021        var component = load();
49022        return {
49023            component: component,
49024            delay: delay,
49025            timeout: timeout,
49026            error: errorComponent,
49027            loading: loadingComponent
49028        };
49029    };
49030}
49031
49032function createLifeCycle(hookName) {
49033    return function (fn, target) {
49034        if (target === void 0) { target = currentInstance; }
49035        if (!target) {
49036             true &&
49037                warn$2("".concat(formatName(hookName), " is called when there is no active component instance to be ") +
49038                    "associated with. " +
49039                    "Lifecycle injection APIs can only be used during execution of setup().");
49040            return;
49041        }
49042        return injectHook(target, hookName, fn);
49043    };
49044}
49045function formatName(name) {
49046    if (name === 'beforeDestroy') {
49047        name = 'beforeUnmount';
49048    }
49049    else if (name === 'destroyed') {
49050        name = 'unmounted';
49051    }
49052    return "on".concat(name[0].toUpperCase() + name.slice(1));
49053}
49054function injectHook(instance, hookName, fn) {
49055    var options = instance.$options;
49056    options[hookName] = mergeLifecycleHook(options[hookName], fn);
49057}
49058var onBeforeMount = createLifeCycle('beforeMount');
49059var onMounted = createLifeCycle('mounted');
49060var onBeforeUpdate = createLifeCycle('beforeUpdate');
49061var onUpdated = createLifeCycle('updated');
49062var onBeforeUnmount = createLifeCycle('beforeDestroy');
49063var onUnmounted = createLifeCycle('destroyed');
49064var onActivated = createLifeCycle('activated');
49065var onDeactivated = createLifeCycle('deactivated');
49066var onServerPrefetch = createLifeCycle('serverPrefetch');
49067var onRenderTracked = createLifeCycle('renderTracked');
49068var onRenderTriggered = createLifeCycle('renderTriggered');
49069var injectErrorCapturedHook = createLifeCycle('errorCaptured');
49070function onErrorCaptured(hook, target) {
49071    if (target === void 0) { target = currentInstance; }
49072    injectErrorCapturedHook(hook, target);
49073}
49074
49075/**
49076 * Note: also update dist/vue.runtime.mjs when adding new exports to this file.
49077 */
49078var version = '2.7.16';
49079/**
49080 * @internal type is manually declared in <root>/types/v3-define-component.d.ts
49081 */
49082function defineComponent(options) {
49083    return options;
49084}
49085
49086var seenObjects = new _Set();
49087/**
49088 * Recursively traverse an object to evoke all converted
49089 * getters, so that every nested property inside the object
49090 * is collected as a "deep" dependency.
49091 */
49092function traverse(val) {
49093    _traverse(val, seenObjects);
49094    seenObjects.clear();
49095    return val;
49096}
49097function _traverse(val, seen) {
49098    var i, keys;
49099    var isA = isArray(val);
49100    if ((!isA && !isObject(val)) ||
49101        val.__v_skip /* ReactiveFlags.SKIP */ ||
49102        Object.isFrozen(val) ||
49103        val instanceof VNode) {
49104        return;
49105    }
49106    if (val.__ob__) {
49107        var depId = val.__ob__.dep.id;
49108        if (seen.has(depId)) {
49109            return;
49110        }
49111        seen.add(depId);
49112    }
49113    if (isA) {
49114        i = val.length;
49115        while (i--)
49116            _traverse(val[i], seen);
49117    }
49118    else if (isRef(val)) {
49119        _traverse(val.value, seen);
49120    }
49121    else {
49122        keys = Object.keys(val);
49123        i = keys.length;
49124        while (i--)
49125            _traverse(val[keys[i]], seen);
49126    }
49127}
49128
49129var uid$1 = 0;
49130/**
49131 * A watcher parses an expression, collects dependencies,
49132 * and fires callback when the expression value changes.
49133 * This is used for both the $watch() api and directives.
49134 * @internal
49135 */
49136var Watcher = /** @class */ (function () {
49137    function Watcher(vm, expOrFn, cb, options, isRenderWatcher) {
49138        recordEffectScope(this, 
49139        // if the active effect scope is manually created (not a component scope),
49140        // prioritize it
49141        activeEffectScope && !activeEffectScope._vm
49142            ? activeEffectScope
49143            : vm
49144                ? vm._scope
49145                : undefined);
49146        if ((this.vm = vm) && isRenderWatcher) {
49147            vm._watcher = this;
49148        }
49149        // options
49150        if (options) {
49151            this.deep = !!options.deep;
49152            this.user = !!options.user;
49153            this.lazy = !!options.lazy;
49154            this.sync = !!options.sync;
49155            this.before = options.before;
49156            if (true) {
49157                this.onTrack = options.onTrack;
49158                this.onTrigger = options.onTrigger;
49159            }
49160        }
49161        else {
49162            this.deep = this.user = this.lazy = this.sync = false;
49163        }
49164        this.cb = cb;
49165        this.id = ++uid$1; // uid for batching
49166        this.active = true;
49167        this.post = false;
49168        this.dirty = this.lazy; // for lazy watchers
49169        this.deps = [];
49170        this.newDeps = [];
49171        this.depIds = new _Set();
49172        this.newDepIds = new _Set();
49173        this.expression =  true ? expOrFn.toString() : 0;
49174        // parse expression for getter
49175        if (isFunction(expOrFn)) {
49176            this.getter = expOrFn;
49177        }
49178        else {
49179            this.getter = parsePath(expOrFn);
49180            if (!this.getter) {
49181                this.getter = noop;
49182                 true &&
49183                    warn$2("Failed watching path: \"".concat(expOrFn, "\" ") +
49184                        'Watcher only accepts simple dot-delimited paths. ' +
49185                        'For full control, use a function instead.', vm);
49186            }
49187        }
49188        this.value = this.lazy ? undefined : this.get();
49189    }
49190    /**
49191     * Evaluate the getter, and re-collect dependencies.
49192     */
49193    Watcher.prototype.get = function () {
49194        pushTarget(this);
49195        var value;
49196        var vm = this.vm;
49197        try {
49198            value = this.getter.call(vm, vm);
49199        }
49200        catch (e) {
49201            if (this.user) {
49202                handleError(e, vm, "getter for watcher \"".concat(this.expression, "\""));
49203            }
49204            else {
49205                throw e;
49206            }
49207        }
49208        finally {
49209            // "touch" every property so they are all tracked as
49210            // dependencies for deep watching
49211            if (this.deep) {
49212                traverse(value);
49213            }
49214            popTarget();
49215            this.cleanupDeps();
49216        }
49217        return value;
49218    };
49219    /**
49220     * Add a dependency to this directive.
49221     */
49222    Watcher.prototype.addDep = function (dep) {
49223        var id = dep.id;
49224        if (!this.newDepIds.has(id)) {
49225            this.newDepIds.add(id);
49226            this.newDeps.push(dep);
49227            if (!this.depIds.has(id)) {
49228                dep.addSub(this);
49229            }
49230        }
49231    };
49232    /**
49233     * Clean up for dependency collection.
49234     */
49235    Watcher.prototype.cleanupDeps = function () {
49236        var i = this.deps.length;
49237        while (i--) {
49238            var dep = this.deps[i];
49239            if (!this.newDepIds.has(dep.id)) {
49240                dep.removeSub(this);
49241            }
49242        }
49243        var tmp = this.depIds;
49244        this.depIds = this.newDepIds;
49245        this.newDepIds = tmp;
49246        this.newDepIds.clear();
49247        tmp = this.deps;
49248        this.deps = this.newDeps;
49249        this.newDeps = tmp;
49250        this.newDeps.length = 0;
49251    };
49252    /**
49253     * Subscriber interface.
49254     * Will be called when a dependency changes.
49255     */
49256    Watcher.prototype.update = function () {
49257        /* istanbul ignore else */
49258        if (this.lazy) {
49259            this.dirty = true;
49260        }
49261        else if (this.sync) {
49262            this.run();
49263        }
49264        else {
49265            queueWatcher(this);
49266        }
49267    };
49268    /**
49269     * Scheduler job interface.
49270     * Will be called by the scheduler.
49271     */
49272    Watcher.prototype.run = function () {
49273        if (this.active) {
49274            var value = this.get();
49275            if (value !== this.value ||
49276                // Deep watchers and watchers on Object/Arrays should fire even
49277                // when the value is the same, because the value may
49278                // have mutated.
49279                isObject(value) ||
49280                this.deep) {
49281                // set new value
49282                var oldValue = this.value;
49283                this.value = value;
49284                if (this.user) {
49285                    var info = "callback for watcher \"".concat(this.expression, "\"");
49286                    invokeWithErrorHandling(this.cb, this.vm, [value, oldValue], this.vm, info);
49287                }
49288                else {
49289                    this.cb.call(this.vm, value, oldValue);
49290                }
49291            }
49292        }
49293    };
49294    /**
49295     * Evaluate the value of the watcher.
49296     * This only gets called for lazy watchers.
49297     */
49298    Watcher.prototype.evaluate = function () {
49299        this.value = this.get();
49300        this.dirty = false;
49301    };
49302    /**
49303     * Depend on all deps collected by this watcher.
49304     */
49305    Watcher.prototype.depend = function () {
49306        var i = this.deps.length;
49307        while (i--) {
49308            this.deps[i].depend();
49309        }
49310    };
49311    /**
49312     * Remove self from all dependencies' subscriber list.
49313     */
49314    Watcher.prototype.teardown = function () {
49315        if (this.vm && !this.vm._isBeingDestroyed) {
49316            remove$2(this.vm._scope.effects, this);
49317        }
49318        if (this.active) {
49319            var i = this.deps.length;
49320            while (i--) {
49321                this.deps[i].removeSub(this);
49322            }
49323            this.active = false;
49324            if (this.onStop) {
49325                this.onStop();
49326            }
49327        }
49328    };
49329    return Watcher;
49330}());
49331
49332var sharedPropertyDefinition = {
49333    enumerable: true,
49334    configurable: true,
49335    get: noop,
49336    set: noop
49337};
49338function proxy(target, sourceKey, key) {
49339    sharedPropertyDefinition.get = function proxyGetter() {
49340        return this[sourceKey][key];
49341    };
49342    sharedPropertyDefinition.set = function proxySetter(val) {
49343        this[sourceKey][key] = val;
49344    };
49345    Object.defineProperty(target, key, sharedPropertyDefinition);
49346}
49347function initState(vm) {
49348    var opts = vm.$options;
49349    if (opts.props)
49350        initProps$1(vm, opts.props);
49351    // Composition API
49352    initSetup(vm);
49353    if (opts.methods)
49354        initMethods(vm, opts.methods);
49355    if (opts.data) {
49356        initData(vm);
49357    }
49358    else {
49359        var ob = observe((vm._data = {}));
49360        ob && ob.vmCount++;
49361    }
49362    if (opts.computed)
49363        initComputed$1(vm, opts.computed);
49364    if (opts.watch && opts.watch !== nativeWatch) {
49365        initWatch(vm, opts.watch);
49366    }
49367}
49368function initProps$1(vm, propsOptions) {
49369    var propsData = vm.$options.propsData || {};
49370    var props = (vm._props = shallowReactive({}));
49371    // cache prop keys so that future props updates can iterate using Array
49372    // instead of dynamic object key enumeration.
49373    var keys = (vm.$options._propKeys = []);
49374    var isRoot = !vm.$parent;
49375    // root instance props should be converted
49376    if (!isRoot) {
49377        toggleObserving(false);
49378    }
49379    var _loop_1 = function (key) {
49380        keys.push(key);
49381        var value = validateProp(key, propsOptions, propsData, vm);
49382        /* istanbul ignore else */
49383        if (true) {
49384            var hyphenatedKey = hyphenate(key);
49385            if (isReservedAttribute(hyphenatedKey) ||
49386                config.isReservedAttr(hyphenatedKey)) {
49387                warn$2("\"".concat(hyphenatedKey, "\" is a reserved attribute and cannot be used as component prop."), vm);
49388            }
49389            defineReactive(props, key, value, function () {
49390                if (!isRoot && !isUpdatingChildComponent) {
49391                    warn$2("Avoid mutating a prop directly since the value will be " +
49392                        "overwritten whenever the parent component re-renders. " +
49393                        "Instead, use a data or computed property based on the prop's " +
49394                        "value. Prop being mutated: \"".concat(key, "\""), vm);
49395                }
49396            }, true /* shallow */);
49397        }
49398        else {}
49399        // static props are already proxied on the component's prototype
49400        // during Vue.extend(). We only need to proxy props defined at
49401        // instantiation here.
49402        if (!(key in vm)) {
49403            proxy(vm, "_props", key);
49404        }
49405    };
49406    for (var key in propsOptions) {
49407        _loop_1(key);
49408    }
49409    toggleObserving(true);
49410}
49411function initData(vm) {
49412    var data = vm.$options.data;
49413    data = vm._data = isFunction(data) ? getData(data, vm) : data || {};
49414    if (!isPlainObject(data)) {
49415        data = {};
49416         true &&
49417            warn$2('data functions should return an object:\n' +
49418                'https://v2.vuejs.org/v2/guide/components.html#data-Must-Be-a-Function', vm);
49419    }
49420    // proxy data on instance
49421    var keys = Object.keys(data);
49422    var props = vm.$options.props;
49423    var methods = vm.$options.methods;
49424    var i = keys.length;
49425    while (i--) {
49426        var key = keys[i];
49427        if (true) {
49428            if (methods && hasOwn(methods, key)) {
49429                warn$2("Method \"".concat(key, "\" has already been defined as a data property."), vm);
49430            }
49431        }
49432        if (props && hasOwn(props, key)) {
49433             true &&
49434                warn$2("The data property \"".concat(key, "\" is already declared as a prop. ") +
49435                    "Use prop default value instead.", vm);
49436        }
49437        else if (!isReserved(key)) {
49438            proxy(vm, "_data", key);
49439        }
49440    }
49441    // observe data
49442    var ob = observe(data);
49443    ob && ob.vmCount++;
49444}
49445function getData(data, vm) {
49446    // #7573 disable dep collection when invoking data getters
49447    pushTarget();
49448    try {
49449        return data.call(vm, vm);
49450    }
49451    catch (e) {
49452        handleError(e, vm, "data()");
49453        return {};
49454    }
49455    finally {
49456        popTarget();
49457    }
49458}
49459var computedWatcherOptions = { lazy: true };
49460function initComputed$1(vm, computed) {
49461    // $flow-disable-line
49462    var watchers = (vm._computedWatchers = Object.create(null));
49463    // computed properties are just getters during SSR
49464    var isSSR = isServerRendering();
49465    for (var key in computed) {
49466        var userDef = computed[key];
49467        var getter = isFunction(userDef) ? userDef : userDef.get;
49468        if ( true && getter == null) {
49469            warn$2("Getter is missing for computed property \"".concat(key, "\"."), vm);
49470        }
49471        if (!isSSR) {
49472            // create internal watcher for the computed property.
49473            watchers[key] = new Watcher(vm, getter || noop, noop, computedWatcherOptions);
49474        }
49475        // component-defined computed properties are already defined on the
49476        // component prototype. We only need to define computed properties defined
49477        // at instantiation here.
49478        if (!(key in vm)) {
49479            defineComputed(vm, key, userDef);
49480        }
49481        else if (true) {
49482            if (key in vm.$data) {
49483                warn$2("The computed property \"".concat(key, "\" is already defined in data."), vm);
49484            }
49485            else if (vm.$options.props && key in vm.$options.props) {
49486                warn$2("The computed property \"".concat(key, "\" is already defined as a prop."), vm);
49487            }
49488            else if (vm.$options.methods && key in vm.$options.methods) {
49489                warn$2("The computed property \"".concat(key, "\" is already defined as a method."), vm);
49490            }
49491        }
49492    }
49493}
49494function defineComputed(target, key, userDef) {
49495    var shouldCache = !isServerRendering();
49496    if (isFunction(userDef)) {
49497        sharedPropertyDefinition.get = shouldCache
49498            ? createComputedGetter(key)
49499            : createGetterInvoker(userDef);
49500        sharedPropertyDefinition.set = noop;
49501    }
49502    else {
49503        sharedPropertyDefinition.get = userDef.get
49504            ? shouldCache && userDef.cache !== false
49505                ? createComputedGetter(key)
49506                : createGetterInvoker(userDef.get)
49507            : noop;
49508        sharedPropertyDefinition.set = userDef.set || noop;
49509    }
49510    if ( true && sharedPropertyDefinition.set === noop) {
49511        sharedPropertyDefinition.set = function () {
49512            warn$2("Computed property \"".concat(key, "\" was assigned to but it has no setter."), this);
49513        };
49514    }
49515    Object.defineProperty(target, key, sharedPropertyDefinition);
49516}
49517function createComputedGetter(key) {
49518    return function computedGetter() {
49519        var watcher = this._computedWatchers && this._computedWatchers[key];
49520        if (watcher) {
49521            if (watcher.dirty) {
49522                watcher.evaluate();
49523            }
49524            if (Dep.target) {
49525                if ( true && Dep.target.onTrack) {
49526                    Dep.target.onTrack({
49527                        effect: Dep.target,
49528                        target: this,
49529                        type: "get" /* TrackOpTypes.GET */,
49530                        key: key
49531                    });
49532                }
49533                watcher.depend();
49534            }
49535            return watcher.value;
49536        }
49537    };
49538}
49539function createGetterInvoker(fn) {
49540    return function computedGetter() {
49541        return fn.call(this, this);
49542    };
49543}
49544function initMethods(vm, methods) {
49545    var props = vm.$options.props;
49546    for (var key in methods) {
49547        if (true) {
49548            if (typeof methods[key] !== 'function') {
49549                warn$2("Method \"".concat(key, "\" has type \"").concat(typeof methods[key], "\" in the component definition. ") +
49550                    "Did you reference the function correctly?", vm);
49551            }
49552            if (props && hasOwn(props, key)) {
49553                warn$2("Method \"".concat(key, "\" has already been defined as a prop."), vm);
49554            }
49555            if (key in vm && isReserved(key)) {
49556                warn$2("Method \"".concat(key, "\" conflicts with an existing Vue instance method. ") +
49557                    "Avoid defining component methods that start with _ or $.");
49558            }
49559        }
49560        vm[key] = typeof methods[key] !== 'function' ? noop : bind$1(methods[key], vm);
49561    }
49562}
49563function initWatch(vm, watch) {
49564    for (var key in watch) {
49565        var handler = watch[key];
49566        if (isArray(handler)) {
49567            for (var i = 0; i < handler.length; i++) {
49568                createWatcher(vm, key, handler[i]);
49569            }
49570        }
49571        else {
49572            createWatcher(vm, key, handler);
49573        }
49574    }
49575}
49576function createWatcher(vm, expOrFn, handler, options) {
49577    if (isPlainObject(handler)) {
49578        options = handler;
49579        handler = handler.handler;
49580    }
49581    if (typeof handler === 'string') {
49582        handler = vm[handler];
49583    }
49584    return vm.$watch(expOrFn, handler, options);
49585}
49586function stateMixin(Vue) {
49587    // flow somehow has problems with directly declared definition object
49588    // when using Object.defineProperty, so we have to procedurally build up
49589    // the object here.
49590    var dataDef = {};
49591    dataDef.get = function () {
49592        return this._data;
49593    };
49594    var propsDef = {};
49595    propsDef.get = function () {
49596        return this._props;
49597    };
49598    if (true) {
49599        dataDef.set = function () {
49600            warn$2('Avoid replacing instance root $data. ' +
49601                'Use nested data properties instead.', this);
49602        };
49603        propsDef.set = function () {
49604            warn$2("$props is readonly.", this);
49605        };
49606    }
49607    Object.defineProperty(Vue.prototype, '$data', dataDef);
49608    Object.defineProperty(Vue.prototype, '$props', propsDef);
49609    Vue.prototype.$set = set;
49610    Vue.prototype.$delete = del;
49611    Vue.prototype.$watch = function (expOrFn, cb, options) {
49612        var vm = this;
49613        if (isPlainObject(cb)) {
49614            return createWatcher(vm, expOrFn, cb, options);
49615        }
49616        options = options || {};
49617        options.user = true;
49618        var watcher = new Watcher(vm, expOrFn, cb, options);
49619        if (options.immediate) {
49620            var info = "callback for immediate watcher \"".concat(watcher.expression, "\"");
49621            pushTarget();
49622            invokeWithErrorHandling(cb, vm, [watcher.value], vm, info);
49623            popTarget();
49624        }
49625        return function unwatchFn() {
49626            watcher.teardown();
49627        };
49628    };
49629}
49630
49631function initProvide(vm) {
49632    var provideOption = vm.$options.provide;
49633    if (provideOption) {
49634        var provided = isFunction(provideOption)
49635            ? provideOption.call(vm)
49636            : provideOption;
49637        if (!isObject(provided)) {
49638            return;
49639        }
49640        var source = resolveProvided(vm);
49641        // IE9 doesn't support Object.getOwnPropertyDescriptors so we have to
49642        // iterate the keys ourselves.
49643        var keys = hasSymbol ? Reflect.ownKeys(provided) : Object.keys(provided);
49644        for (var i = 0; i < keys.length; i++) {
49645            var key = keys[i];
49646            Object.defineProperty(source, key, Object.getOwnPropertyDescriptor(provided, key));
49647        }
49648    }
49649}
49650function initInjections(vm) {
49651    var result = resolveInject(vm.$options.inject, vm);
49652    if (result) {
49653        toggleObserving(false);
49654        Object.keys(result).forEach(function (key) {
49655            /* istanbul ignore else */
49656            if (true) {
49657                defineReactive(vm, key, result[key], function () {
49658                    warn$2("Avoid mutating an injected value directly since the changes will be " +
49659                        "overwritten whenever the provided component re-renders. " +
49660                        "injection being mutated: \"".concat(key, "\""), vm);
49661                });
49662            }
49663            else {}
49664        });
49665        toggleObserving(true);
49666    }
49667}
49668function resolveInject(inject, vm) {
49669    if (inject) {
49670        // inject is :any because flow is not smart enough to figure out cached
49671        var result = Object.create(null);
49672        var keys = hasSymbol ? Reflect.ownKeys(inject) : Object.keys(inject);
49673        for (var i = 0; i < keys.length; i++) {
49674            var key = keys[i];
49675            // #6574 in case the inject object is observed...
49676            if (key === '__ob__')
49677                continue;
49678            var provideKey = inject[key].from;
49679            if (provideKey in vm._provided) {
49680                result[key] = vm._provided[provideKey];
49681            }
49682            else if ('default' in inject[key]) {
49683                var provideDefault = inject[key].default;
49684                result[key] = isFunction(provideDefault)
49685                    ? provideDefault.call(vm)
49686                    : provideDefault;
49687            }
49688            else if (true) {
49689                warn$2("Injection \"".concat(key, "\" not found"), vm);
49690            }
49691        }
49692        return result;
49693    }
49694}
49695
49696var uid = 0;
49697function initMixin$1(Vue) {
49698    Vue.prototype._init = function (options) {
49699        var vm = this;
49700        // a uid
49701        vm._uid = uid++;
49702        var startTag, endTag;
49703        /* istanbul ignore if */
49704        if ( true && config.performance && mark) {
49705            startTag = "vue-perf-start:".concat(vm._uid);
49706            endTag = "vue-perf-end:".concat(vm._uid);
49707            mark(startTag);
49708        }
49709        // a flag to mark this as a Vue instance without having to do instanceof
49710        // check
49711        vm._isVue = true;
49712        // avoid instances from being observed
49713        vm.__v_skip = true;
49714        // effect scope
49715        vm._scope = new EffectScope(true /* detached */);
49716        // #13134 edge case where a child component is manually created during the
49717        // render of a parent component
49718        vm._scope.parent = undefined;
49719        vm._scope._vm = true;
49720        // merge options
49721        if (options && options._isComponent) {
49722            // optimize internal component instantiation
49723            // since dynamic options merging is pretty slow, and none of the
49724            // internal component options needs special treatment.
49725            initInternalComponent(vm, options);
49726        }
49727        else {
49728            vm.$options = mergeOptions(resolveConstructorOptions(vm.constructor), options || {}, vm);
49729        }
49730        /* istanbul ignore else */
49731        if (true) {
49732            initProxy(vm);
49733        }
49734        else {}
49735        // expose real self
49736        vm._self = vm;
49737        initLifecycle(vm);
49738        initEvents(vm);
49739        initRender(vm);
49740        callHook$1(vm, 'beforeCreate', undefined, false /* setContext */);
49741        initInjections(vm); // resolve injections before data/props
49742        initState(vm);
49743        initProvide(vm); // resolve provide after data/props
49744        callHook$1(vm, 'created');
49745        /* istanbul ignore if */
49746        if ( true && config.performance && mark) {
49747            vm._name = formatComponentName(vm, false);
49748            mark(endTag);
49749            measure("vue ".concat(vm._name, " init"), startTag, endTag);
49750        }
49751        if (vm.$options.el) {
49752            vm.$mount(vm.$options.el);
49753        }
49754    };
49755}
49756function initInternalComponent(vm, options) {
49757    var opts = (vm.$options = Object.create(vm.constructor.options));
49758    // doing this because it's faster than dynamic enumeration.
49759    var parentVnode = options._parentVnode;
49760    opts.parent = options.parent;
49761    opts._parentVnode = parentVnode;
49762    var vnodeComponentOptions = parentVnode.componentOptions;
49763    opts.propsData = vnodeComponentOptions.propsData;
49764    opts._parentListeners = vnodeComponentOptions.listeners;
49765    opts._renderChildren = vnodeComponentOptions.children;
49766    opts._componentTag = vnodeComponentOptions.tag;
49767    if (options.render) {
49768        opts.render = options.render;
49769        opts.staticRenderFns = options.staticRenderFns;
49770    }
49771}
49772function resolveConstructorOptions(Ctor) {
49773    var options = Ctor.options;
49774    if (Ctor.super) {
49775        var superOptions = resolveConstructorOptions(Ctor.super);
49776        var cachedSuperOptions = Ctor.superOptions;
49777        if (superOptions !== cachedSuperOptions) {
49778            // super option changed,
49779            // need to resolve new options.
49780            Ctor.superOptions = superOptions;
49781            // check if there are any late-modified/attached options (#4976)
49782            var modifiedOptions = resolveModifiedOptions(Ctor);
49783            // update base extend options
49784            if (modifiedOptions) {
49785                extend(Ctor.extendOptions, modifiedOptions);
49786            }
49787            options = Ctor.options = mergeOptions(superOptions, Ctor.extendOptions);
49788            if (options.name) {
49789                options.components[options.name] = Ctor;
49790            }
49791        }
49792    }
49793    return options;
49794}
49795function resolveModifiedOptions(Ctor) {
49796    var modified;
49797    var latest = Ctor.options;
49798    var sealed = Ctor.sealedOptions;
49799    for (var key in latest) {
49800        if (latest[key] !== sealed[key]) {
49801            if (!modified)
49802                modified = {};
49803            modified[key] = latest[key];
49804        }
49805    }
49806    return modified;
49807}
49808
49809function FunctionalRenderContext(data, props, children, parent, Ctor) {
49810    var _this = this;
49811    var options = Ctor.options;
49812    // ensure the createElement function in functional components
49813    // gets a unique context - this is necessary for correct named slot check
49814    var contextVm;
49815    if (hasOwn(parent, '_uid')) {
49816        contextVm = Object.create(parent);
49817        contextVm._original = parent;
49818    }
49819    else {
49820        // the context vm passed in is a functional context as well.
49821        // in this case we want to make sure we are able to get a hold to the
49822        // real context instance.
49823        contextVm = parent;
49824        // @ts-ignore
49825        parent = parent._original;
49826    }
49827    var isCompiled = isTrue(options._compiled);
49828    var needNormalization = !isCompiled;
49829    this.data = data;
49830    this.props = props;
49831    this.children = children;
49832    this.parent = parent;
49833    this.listeners = data.on || emptyObject;
49834    this.injections = resolveInject(options.inject, parent);
49835    this.slots = function () {
49836        if (!_this.$slots) {
49837            normalizeScopedSlots(parent, data.scopedSlots, (_this.$slots = resolveSlots(children, parent)));
49838        }
49839        return _this.$slots;
49840    };
49841    Object.defineProperty(this, 'scopedSlots', {
49842        enumerable: true,
49843        get: function () {
49844            return normalizeScopedSlots(parent, data.scopedSlots, this.slots());
49845        }
49846    });
49847    // support for compiled functional template
49848    if (isCompiled) {
49849        // exposing $options for renderStatic()
49850        this.$options = options;
49851        // pre-resolve slots for renderSlot()
49852        this.$slots = this.slots();
49853        this.$scopedSlots = normalizeScopedSlots(parent, data.scopedSlots, this.$slots);
49854    }
49855    if (options._scopeId) {
49856        this._c = function (a, b, c, d) {
49857            var vnode = createElement$1(contextVm, a, b, c, d, needNormalization);
49858            if (vnode && !isArray(vnode)) {
49859                vnode.fnScopeId = options._scopeId;
49860                vnode.fnContext = parent;
49861            }
49862            return vnode;
49863        };
49864    }
49865    else {
49866        this._c = function (a, b, c, d) {
49867            return createElement$1(contextVm, a, b, c, d, needNormalization);
49868        };
49869    }
49870}
49871installRenderHelpers(FunctionalRenderContext.prototype);
49872function createFunctionalComponent(Ctor, propsData, data, contextVm, children) {
49873    var options = Ctor.options;
49874    var props = {};
49875    var propOptions = options.props;
49876    if (isDef(propOptions)) {
49877        for (var key in propOptions) {
49878            props[key] = validateProp(key, propOptions, propsData || emptyObject);
49879        }
49880    }
49881    else {
49882        if (isDef(data.attrs))
49883            mergeProps(props, data.attrs);
49884        if (isDef(data.props))
49885            mergeProps(props, data.props);
49886    }
49887    var renderContext = new FunctionalRenderContext(data, props, children, contextVm, Ctor);
49888    var vnode = options.render.call(null, renderContext._c, renderContext);
49889    if (vnode instanceof VNode) {
49890        return cloneAndMarkFunctionalResult(vnode, data, renderContext.parent, options, renderContext);
49891    }
49892    else if (isArray(vnode)) {
49893        var vnodes = normalizeChildren(vnode) || [];
49894        var res = new Array(vnodes.length);
49895        for (var i = 0; i < vnodes.length; i++) {
49896            res[i] = cloneAndMarkFunctionalResult(vnodes[i], data, renderContext.parent, options, renderContext);
49897        }
49898        return res;
49899    }
49900}
49901function cloneAndMarkFunctionalResult(vnode, data, contextVm, options, renderContext) {
49902    // #7817 clone node before setting fnContext, otherwise if the node is reused
49903    // (e.g. it was from a cached normal slot) the fnContext causes named slots
49904    // that should not be matched to match.
49905    var clone = cloneVNode(vnode);
49906    clone.fnContext = contextVm;
49907    clone.fnOptions = options;
49908    if (true) {
49909        (clone.devtoolsMeta = clone.devtoolsMeta || {}).renderContext =
49910            renderContext;
49911    }
49912    if (data.slot) {
49913        (clone.data || (clone.data = {})).slot = data.slot;
49914    }
49915    return clone;
49916}
49917function mergeProps(to, from) {
49918    for (var key in from) {
49919        to[camelize(key)] = from[key];
49920    }
49921}
49922
49923function getComponentName(options) {
49924    return options.name || options.__name || options._componentTag;
49925}
49926// inline hooks to be invoked on component VNodes during patch
49927var componentVNodeHooks = {
49928    init: function (vnode, hydrating) {
49929        if (vnode.componentInstance &&
49930            !vnode.componentInstance._isDestroyed &&
49931            vnode.data.keepAlive) {
49932            // kept-alive components, treat as a patch
49933            var mountedNode = vnode; // work around flow
49934            componentVNodeHooks.prepatch(mountedNode, mountedNode);
49935        }
49936        else {
49937            var child = (vnode.componentInstance = createComponentInstanceForVnode(vnode, activeInstance));
49938            child.$mount(hydrating ? vnode.elm : undefined, hydrating);
49939        }
49940    },
49941    prepatch: function (oldVnode, vnode) {
49942        var options = vnode.componentOptions;
49943        var child = (vnode.componentInstance = oldVnode.componentInstance);
49944        updateChildComponent(child, options.propsData, // updated props
49945        options.listeners, // updated listeners
49946        vnode, // new parent vnode
49947        options.children // new children
49948        );
49949    },
49950    insert: function (vnode) {
49951        var context = vnode.context, componentInstance = vnode.componentInstance;
49952        if (!componentInstance._isMounted) {
49953            componentInstance._isMounted = true;
49954            callHook$1(componentInstance, 'mounted');
49955        }
49956        if (vnode.data.keepAlive) {
49957            if (context._isMounted) {
49958                // vue-router#1212
49959                // During updates, a kept-alive component's child components may
49960                // change, so directly walking the tree here may call activated hooks
49961                // on incorrect children. Instead we push them into a queue which will
49962                // be processed after the whole patch process ended.
49963                queueActivatedComponent(componentInstance);
49964            }
49965            else {
49966                activateChildComponent(componentInstance, true /* direct */);
49967            }
49968        }
49969    },
49970    destroy: function (vnode) {
49971        var componentInstance = vnode.componentInstance;
49972        if (!componentInstance._isDestroyed) {
49973            if (!vnode.data.keepAlive) {
49974                componentInstance.$destroy();
49975            }
49976            else {
49977                deactivateChildComponent(componentInstance, true /* direct */);
49978            }
49979        }
49980    }
49981};
49982var hooksToMerge = Object.keys(componentVNodeHooks);
49983function createComponent(Ctor, data, context, children, tag) {
49984    if (isUndef(Ctor)) {
49985        return;
49986    }
49987    var baseCtor = context.$options._base;
49988    // plain options object: turn it into a constructor
49989    if (isObject(Ctor)) {
49990        Ctor = baseCtor.extend(Ctor);
49991    }
49992    // if at this stage it's not a constructor or an async component factory,
49993    // reject.
49994    if (typeof Ctor !== 'function') {
49995        if (true) {
49996            warn$2("Invalid Component definition: ".concat(String(Ctor)), context);
49997        }
49998        return;
49999    }
50000    // async component
50001    var asyncFactory;
50002    // @ts-expect-error
50003    if (isUndef(Ctor.cid)) {
50004        asyncFactory = Ctor;
50005        Ctor = resolveAsyncComponent(asyncFactory, baseCtor);
50006        if (Ctor === undefined) {
50007            // return a placeholder node for async component, which is rendered
50008            // as a comment node but preserves all the raw information for the node.
50009            // the information will be used for async server-rendering and hydration.
50010            return createAsyncPlaceholder(asyncFactory, data, context, children, tag);
50011        }
50012    }
50013    data = data || {};
50014    // resolve constructor options in case global mixins are applied after
50015    // component constructor creation
50016    resolveConstructorOptions(Ctor);
50017    // transform component v-model data into props & events
50018    if (isDef(data.model)) {
50019        // @ts-expect-error
50020        transformModel(Ctor.options, data);
50021    }
50022    // extract props
50023    // @ts-expect-error
50024    var propsData = extractPropsFromVNodeData(data, Ctor, tag);
50025    // functional component
50026    // @ts-expect-error
50027    if (isTrue(Ctor.options.functional)) {
50028        return createFunctionalComponent(Ctor, propsData, data, context, children);
50029    }
50030    // extract listeners, since these needs to be treated as
50031    // child component listeners instead of DOM listeners
50032    var listeners = data.on;
50033    // replace with listeners with .native modifier
50034    // so it gets processed during parent component patch.
50035    data.on = data.nativeOn;
50036    // @ts-expect-error
50037    if (isTrue(Ctor.options.abstract)) {
50038        // abstract components do not keep anything
50039        // other than props & listeners & slot
50040        // work around flow
50041        var slot = data.slot;
50042        data = {};
50043        if (slot) {
50044            data.slot = slot;
50045        }
50046    }
50047    // install component management hooks onto the placeholder node
50048    installComponentHooks(data);
50049    // return a placeholder vnode
50050    // @ts-expect-error
50051    var name = getComponentName(Ctor.options) || tag;
50052    var vnode = new VNode(
50053    // @ts-expect-error
50054    "vue-component-".concat(Ctor.cid).concat(name ? "-".concat(name) : ''), data, undefined, undefined, undefined, context, 
50055    // @ts-expect-error
50056    { Ctor: Ctor, propsData: propsData, listeners: listeners, tag: tag, children: children }, asyncFactory);
50057    return vnode;
50058}
50059function createComponentInstanceForVnode(
50060// we know it's MountedComponentVNode but flow doesn't
50061vnode, 
50062// activeInstance in lifecycle state
50063parent) {
50064    var options = {
50065        _isComponent: true,
50066        _parentVnode: vnode,
50067        parent: parent
50068    };
50069    // check inline-template render functions
50070    var inlineTemplate = vnode.data.inlineTemplate;
50071    if (isDef(inlineTemplate)) {
50072        options.render = inlineTemplate.render;
50073        options.staticRenderFns = inlineTemplate.staticRenderFns;
50074    }
50075    return new vnode.componentOptions.Ctor(options);
50076}
50077function installComponentHooks(data) {
50078    var hooks = data.hook || (data.hook = {});
50079    for (var i = 0; i < hooksToMerge.length; i++) {
50080        var key = hooksToMerge[i];
50081        var existing = hooks[key];
50082        var toMerge = componentVNodeHooks[key];
50083        // @ts-expect-error
50084        if (existing !== toMerge && !(existing && existing._merged)) {
50085            hooks[key] = existing ? mergeHook(toMerge, existing) : toMerge;
50086        }
50087    }
50088}
50089function mergeHook(f1, f2) {
50090    var merged = function (a, b) {
50091        // flow complains about extra args which is why we use any
50092        f1(a, b);
50093        f2(a, b);
50094    };
50095    merged._merged = true;
50096    return merged;
50097}
50098// transform component v-model info (value and callback) into
50099// prop and event handler respectively.
50100function transformModel(options, data) {
50101    var prop = (options.model && options.model.prop) || 'value';
50102    var event = (options.model && options.model.event) || 'input';
50103    (data.attrs || (data.attrs = {}))[prop] = data.model.value;
50104    var on = data.on || (data.on = {});
50105    var existing = on[event];
50106    var callback = data.model.callback;
50107    if (isDef(existing)) {
50108        if (isArray(existing)
50109            ? existing.indexOf(callback) === -1
50110            : existing !== callback) {
50111            on[event] = [callback].concat(existing);
50112        }
50113    }
50114    else {
50115        on[event] = callback;
50116    }
50117}
50118
50119var warn$2 = noop;
50120var tip = noop;
50121var generateComponentTrace; // work around flow check
50122var formatComponentName;
50123if (true) {
50124    var hasConsole_1 = typeof console !== 'undefined';
50125    var classifyRE_1 = /(?:^|[-_])(\w)/g;
50126    var classify_1 = function (str) {
50127        return str.replace(classifyRE_1, function (c) { return c.toUpperCase(); }).replace(/[-_]/g, '');
50128    };
50129    warn$2 = function (msg, vm) {
50130        if (vm === void 0) { vm = currentInstance; }
50131        var trace = vm ? generateComponentTrace(vm) : '';
50132        if (config.warnHandler) {
50133            config.warnHandler.call(null, msg, vm, trace);
50134        }
50135        else if (hasConsole_1 && !config.silent) {
50136            console.error("[Vue warn]: ".concat(msg).concat(trace));
50137        }
50138    };
50139    tip = function (msg, vm) {
50140        if (hasConsole_1 && !config.silent) {
50141            console.warn("[Vue tip]: ".concat(msg) + (vm ? generateComponentTrace(vm) : ''));
50142        }
50143    };
50144    formatComponentName = function (vm, includeFile) {
50145        if (vm.$root === vm) {
50146            return '<Root>';
50147        }
50148        var options = isFunction(vm) && vm.cid != null
50149            ? vm.options
50150            : vm._isVue
50151                ? vm.$options || vm.constructor.options
50152                : vm;
50153        var name = getComponentName(options);
50154        var file = options.__file;
50155        if (!name && file) {
50156            var match = file.match(/([^/\\]+)\.vue$/);
50157            name = match && match[1];
50158        }
50159        return ((name ? "<".concat(classify_1(name), ">") : "<Anonymous>") +
50160            (file && includeFile !== false ? " at ".concat(file) : ''));
50161    };
50162    var repeat_1 = function (str, n) {
50163        var res = '';
50164        while (n) {
50165            if (n % 2 === 1)
50166                res += str;
50167            if (n > 1)
50168                str += str;
50169            n >>= 1;
50170        }
50171        return res;
50172    };
50173    generateComponentTrace = function (vm) {
50174        if (vm._isVue && vm.$parent) {
50175            var tree = [];
50176            var currentRecursiveSequence = 0;
50177            while (vm) {
50178                if (tree.length > 0) {
50179                    var last = tree[tree.length - 1];
50180                    if (last.constructor === vm.constructor) {
50181                        currentRecursiveSequence++;
50182                        vm = vm.$parent;
50183                        continue;
50184                    }
50185                    else if (currentRecursiveSequence > 0) {
50186                        tree[tree.length - 1] = [last, currentRecursiveSequence];
50187                        currentRecursiveSequence = 0;
50188                    }
50189                }
50190                tree.push(vm);
50191                vm = vm.$parent;
50192            }
50193            return ('\n\nfound in\n\n' +
50194                tree
50195                    .map(function (vm, i) {
50196                    return "".concat(i === 0 ? '---> ' : repeat_1(' ', 5 + i * 2)).concat(isArray(vm)
50197                        ? "".concat(formatComponentName(vm[0]), "... (").concat(vm[1], " recursive calls)")
50198                        : formatComponentName(vm));
50199                })
50200                    .join('\n'));
50201        }
50202        else {
50203            return "\n\n(found in ".concat(formatComponentName(vm), ")");
50204        }
50205    };
50206}
50207
50208/**
50209 * Option overwriting strategies are functions that handle
50210 * how to merge a parent option value and a child option
50211 * value into the final value.
50212 */
50213var strats = config.optionMergeStrategies;
50214/**
50215 * Options with restrictions
50216 */
50217if (true) {
50218    strats.el = strats.propsData = function (parent, child, vm, key) {
50219        if (!vm) {
50220            warn$2("option \"".concat(key, "\" can only be used during instance ") +
50221                'creation with the `new` keyword.');
50222        }
50223        return defaultStrat(parent, child);
50224    };
50225}
50226/**
50227 * Helper that recursively merges two data objects together.
50228 */
50229function mergeData(to, from, recursive) {
50230    if (recursive === void 0) { recursive = true; }
50231    if (!from)
50232        return to;
50233    var key, toVal, fromVal;
50234    var keys = hasSymbol
50235        ? Reflect.ownKeys(from)
50236        : Object.keys(from);
50237    for (var i = 0; i < keys.length; i++) {
50238        key = keys[i];
50239        // in case the object is already observed...
50240        if (key === '__ob__')
50241            continue;
50242        toVal = to[key];
50243        fromVal = from[key];
50244        if (!recursive || !hasOwn(to, key)) {
50245            set(to, key, fromVal);
50246        }
50247        else if (toVal !== fromVal &&
50248            isPlainObject(toVal) &&
50249            isPlainObject(fromVal)) {
50250            mergeData(toVal, fromVal);
50251        }
50252    }
50253    return to;
50254}
50255/**
50256 * Data
50257 */
50258function mergeDataOrFn(parentVal, childVal, vm) {
50259    if (!vm) {
50260        // in a Vue.extend merge, both should be functions
50261        if (!childVal) {
50262            return parentVal;
50263        }
50264        if (!parentVal) {
50265            return childVal;
50266        }
50267        // when parentVal & childVal are both present,
50268        // we need to return a function that returns the
50269        // merged result of both functions... no need to
50270        // check if parentVal is a function here because
50271        // it has to be a function to pass previous merges.
50272        return function mergedDataFn() {
50273            return mergeData(isFunction(childVal) ? childVal.call(this, this) : childVal, isFunction(parentVal) ? parentVal.call(this, this) : parentVal);
50274        };
50275    }
50276    else {
50277        return function mergedInstanceDataFn() {
50278            // instance merge
50279            var instanceData = isFunction(childVal)
50280                ? childVal.call(vm, vm)
50281                : childVal;
50282            var defaultData = isFunction(parentVal)
50283                ? parentVal.call(vm, vm)
50284                : parentVal;
50285            if (instanceData) {
50286                return mergeData(instanceData, defaultData);
50287            }
50288            else {
50289                return defaultData;
50290            }
50291        };
50292    }
50293}
50294strats.data = function (parentVal, childVal, vm) {
50295    if (!vm) {
50296        if (childVal && typeof childVal !== 'function') {
50297             true &&
50298                warn$2('The "data" option should be a function ' +
50299                    'that returns a per-instance value in component ' +
50300                    'definitions.', vm);
50301            return parentVal;
50302        }
50303        return mergeDataOrFn(parentVal, childVal);
50304    }
50305    return mergeDataOrFn(parentVal, childVal, vm);
50306};
50307/**
50308 * Hooks and props are merged as arrays.
50309 */
50310function mergeLifecycleHook(parentVal, childVal) {
50311    var res = childVal
50312        ? parentVal
50313            ? parentVal.concat(childVal)
50314            : isArray(childVal)
50315                ? childVal
50316                : [childVal]
50317        : parentVal;
50318    return res ? dedupeHooks(res) : res;
50319}
50320function dedupeHooks(hooks) {
50321    var res = [];
50322    for (var i = 0; i < hooks.length; i++) {
50323        if (res.indexOf(hooks[i]) === -1) {
50324            res.push(hooks[i]);
50325        }
50326    }
50327    return res;
50328}
50329LIFECYCLE_HOOKS.forEach(function (hook) {
50330    strats[hook] = mergeLifecycleHook;
50331});
50332/**
50333 * Assets
50334 *
50335 * When a vm is present (instance creation), we need to do
50336 * a three-way merge between constructor options, instance
50337 * options and parent options.
50338 */
50339function mergeAssets(parentVal, childVal, vm, key) {
50340    var res = Object.create(parentVal || null);
50341    if (childVal) {
50342         true && assertObjectType(key, childVal, vm);
50343        return extend(res, childVal);
50344    }
50345    else {
50346        return res;
50347    }
50348}
50349ASSET_TYPES.forEach(function (type) {
50350    strats[type + 's'] = mergeAssets;
50351});
50352/**
50353 * Watchers.
50354 *
50355 * Watchers hashes should not overwrite one
50356 * another, so we merge them as arrays.
50357 */
50358strats.watch = function (parentVal, childVal, vm, key) {
50359    // work around Firefox's Object.prototype.watch...
50360    //@ts-expect-error work around
50361    if (parentVal === nativeWatch)
50362        parentVal = undefined;
50363    //@ts-expect-error work around
50364    if (childVal === nativeWatch)
50365        childVal = undefined;
50366    /* istanbul ignore if */
50367    if (!childVal)
50368        return Object.create(parentVal || null);
50369    if (true) {
50370        assertObjectType(key, childVal, vm);
50371    }
50372    if (!parentVal)
50373        return childVal;
50374    var ret = {};
50375    extend(ret, parentVal);
50376    for (var key_1 in childVal) {
50377        var parent_1 = ret[key_1];
50378        var child = childVal[key_1];
50379        if (parent_1 && !isArray(parent_1)) {
50380            parent_1 = [parent_1];
50381        }
50382        ret[key_1] = parent_1 ? parent_1.concat(child) : isArray(child) ? child : [child];
50383    }
50384    return ret;
50385};
50386/**
50387 * Other object hashes.
50388 */
50389strats.props =
50390    strats.methods =
50391        strats.inject =
50392            strats.computed =
50393                function (parentVal, childVal, vm, key) {
50394                    if (childVal && "development" !== 'production') {
50395                        assertObjectType(key, childVal, vm);
50396                    }
50397                    if (!parentVal)
50398                        return childVal;
50399                    var ret = Object.create(null);
50400                    extend(ret, parentVal);
50401                    if (childVal)
50402                        extend(ret, childVal);
50403                    return ret;
50404                };
50405strats.provide = function (parentVal, childVal) {
50406    if (!parentVal)
50407        return childVal;
50408    return function () {
50409        var ret = Object.create(null);
50410        mergeData(ret, isFunction(parentVal) ? parentVal.call(this) : parentVal);
50411        if (childVal) {
50412            mergeData(ret, isFunction(childVal) ? childVal.call(this) : childVal, false // non-recursive
50413            );
50414        }
50415        return ret;
50416    };
50417};
50418/**
50419 * Default strategy.
50420 */
50421var defaultStrat = function (parentVal, childVal) {
50422    return childVal === undefined ? parentVal : childVal;
50423};
50424/**
50425 * Validate component names
50426 */
50427function checkComponents(options) {
50428    for (var key in options.components) {
50429        validateComponentName(key);
50430    }
50431}
50432function validateComponentName(name) {
50433    if (!new RegExp("^[a-zA-Z][\\-\\.0-9_".concat(unicodeRegExp.source, "]*$")).test(name)) {
50434        warn$2('Invalid component name: "' +
50435            name +
50436            '". Component names ' +
50437            'should conform to valid custom element name in html5 specification.');
50438    }
50439    if (isBuiltInTag(name) || config.isReservedTag(name)) {
50440        warn$2('Do not use built-in or reserved HTML elements as component ' +
50441            'id: ' +
50442            name);
50443    }
50444}
50445/**
50446 * Ensure all props option syntax are normalized into the
50447 * Object-based format.
50448 */
50449function normalizeProps(options, vm) {
50450    var props = options.props;
50451    if (!props)
50452        return;
50453    var res = {};
50454    var i, val, name;
50455    if (isArray(props)) {
50456        i = props.length;
50457        while (i--) {
50458            val = props[i];
50459            if (typeof val === 'string') {
50460                name = camelize(val);
50461                res[name] = { type: null };
50462            }
50463            else if (true) {
50464                warn$2('props must be strings when using array syntax.');
50465            }
50466        }
50467    }
50468    else if (isPlainObject(props)) {
50469        for (var key in props) {
50470            val = props[key];
50471            name = camelize(key);
50472            res[name] = isPlainObject(val) ? val : { type: val };
50473        }
50474    }
50475    else if (true) {
50476        warn$2("Invalid value for option \"props\": expected an Array or an Object, " +
50477            "but got ".concat(toRawType(props), "."), vm);
50478    }
50479    options.props = res;
50480}
50481/**
50482 * Normalize all injections into Object-based format
50483 */
50484function normalizeInject(options, vm) {
50485    var inject = options.inject;
50486    if (!inject)
50487        return;
50488    var normalized = (options.inject = {});
50489    if (isArray(inject)) {
50490        for (var i = 0; i < inject.length; i++) {
50491            normalized[inject[i]] = { from: inject[i] };
50492        }
50493    }
50494    else if (isPlainObject(inject)) {
50495        for (var key in inject) {
50496            var val = inject[key];
50497            normalized[key] = isPlainObject(val)
50498                ? extend({ from: key }, val)
50499                : { from: val };
50500        }
50501    }
50502    else if (true) {
50503        warn$2("Invalid value for option \"inject\": expected an Array or an Object, " +
50504            "but got ".concat(toRawType(inject), "."), vm);
50505    }
50506}
50507/**
50508 * Normalize raw function directives into object format.
50509 */
50510function normalizeDirectives$1(options) {
50511    var dirs = options.directives;
50512    if (dirs) {
50513        for (var key in dirs) {
50514            var def = dirs[key];
50515            if (isFunction(def)) {
50516                dirs[key] = { bind: def, update: def };
50517            }
50518        }
50519    }
50520}
50521function assertObjectType(name, value, vm) {
50522    if (!isPlainObject(value)) {
50523        warn$2("Invalid value for option \"".concat(name, "\": expected an Object, ") +
50524            "but got ".concat(toRawType(value), "."), vm);
50525    }
50526}
50527/**
50528 * Merge two option objects into a new one.
50529 * Core utility used in both instantiation and inheritance.
50530 */
50531function mergeOptions(parent, child, vm) {
50532    if (true) {
50533        checkComponents(child);
50534    }
50535    if (isFunction(child)) {
50536        // @ts-expect-error
50537        child = child.options;
50538    }
50539    normalizeProps(child, vm);
50540    normalizeInject(child, vm);
50541    normalizeDirectives$1(child);
50542    // Apply extends and mixins on the child options,
50543    // but only if it is a raw options object that isn't
50544    // the result of another mergeOptions call.
50545    // Only merged options has the _base property.
50546    if (!child._base) {
50547        if (child.extends) {
50548            parent = mergeOptions(parent, child.extends, vm);
50549        }
50550        if (child.mixins) {
50551            for (var i = 0, l = child.mixins.length; i < l; i++) {
50552                parent = mergeOptions(parent, child.mixins[i], vm);
50553            }
50554        }
50555    }
50556    var options = {};
50557    var key;
50558    for (key in parent) {
50559        mergeField(key);
50560    }
50561    for (key in child) {
50562        if (!hasOwn(parent, key)) {
50563            mergeField(key);
50564        }
50565    }
50566    function mergeField(key) {
50567        var strat = strats[key] || defaultStrat;
50568        options[key] = strat(parent[key], child[key], vm, key);
50569    }
50570    return options;
50571}
50572/**
50573 * Resolve an asset.
50574 * This function is used because child instances need access
50575 * to assets defined in its ancestor chain.
50576 */
50577function resolveAsset(options, type, id, warnMissing) {
50578    /* istanbul ignore if */
50579    if (typeof id !== 'string') {
50580        return;
50581    }
50582    var assets = options[type];
50583    // check local registration variations first
50584    if (hasOwn(assets, id))
50585        return assets[id];
50586    var camelizedId = camelize(id);
50587    if (hasOwn(assets, camelizedId))
50588        return assets[camelizedId];
50589    var PascalCaseId = capitalize(camelizedId);
50590    if (hasOwn(assets, PascalCaseId))
50591        return assets[PascalCaseId];
50592    // fallback to prototype chain
50593    var res = assets[id] || assets[camelizedId] || assets[PascalCaseId];
50594    if ( true && warnMissing && !res) {
50595        warn$2('Failed to resolve ' + type.slice(0, -1) + ': ' + id);
50596    }
50597    return res;
50598}
50599
50600function validateProp(key, propOptions, propsData, vm) {
50601    var prop = propOptions[key];
50602    var absent = !hasOwn(propsData, key);
50603    var value = propsData[key];
50604    // boolean casting
50605    var booleanIndex = getTypeIndex(Boolean, prop.type);
50606    if (booleanIndex > -1) {
50607        if (absent && !hasOwn(prop, 'default')) {
50608            value = false;
50609        }
50610        else if (value === '' || value === hyphenate(key)) {
50611            // only cast empty string / same name to boolean if
50612            // boolean has higher priority
50613            var stringIndex = getTypeIndex(String, prop.type);
50614            if (stringIndex < 0 || booleanIndex < stringIndex) {
50615                value = true;
50616            }
50617        }
50618    }
50619    // check default value
50620    if (value === undefined) {
50621        value = getPropDefaultValue(vm, prop, key);
50622        // since the default value is a fresh copy,
50623        // make sure to observe it.
50624        var prevShouldObserve = shouldObserve;
50625        toggleObserving(true);
50626        observe(value);
50627        toggleObserving(prevShouldObserve);
50628    }
50629    if (true) {
50630        assertProp(prop, key, value, vm, absent);
50631    }
50632    return value;
50633}
50634/**
50635 * Get the default value of a prop.
50636 */
50637function getPropDefaultValue(vm, prop, key) {
50638    // no default, return undefined
50639    if (!hasOwn(prop, 'default')) {
50640        return undefined;
50641    }
50642    var def = prop.default;
50643    // warn against non-factory defaults for Object & Array
50644    if ( true && isObject(def)) {
50645        warn$2('Invalid default value for prop "' +
50646            key +
50647            '": ' +
50648            'Props with type Object/Array must use a factory function ' +
50649            'to return the default value.', vm);
50650    }
50651    // the raw prop value was also undefined from previous render,
50652    // return previous default value to avoid unnecessary watcher trigger
50653    if (vm &&
50654        vm.$options.propsData &&
50655        vm.$options.propsData[key] === undefined &&
50656        vm._props[key] !== undefined) {
50657        return vm._props[key];
50658    }
50659    // call factory function for non-Function types
50660    // a value is Function if its prototype is function even across different execution context
50661    return isFunction(def) && getType(prop.type) !== 'Function'
50662        ? def.call(vm)
50663        : def;
50664}
50665/**
50666 * Assert whether a prop is valid.
50667 */
50668function assertProp(prop, name, value, vm, absent) {
50669    if (prop.required && absent) {
50670        warn$2('Missing required prop: "' + name + '"', vm);
50671        return;
50672    }
50673    if (value == null && !prop.required) {
50674        return;
50675    }
50676    var type = prop.type;
50677    var valid = !type || type === true;
50678    var expectedTypes = [];
50679    if (type) {
50680        if (!isArray(type)) {
50681            type = [type];
50682        }
50683        for (var i = 0; i < type.length && !valid; i++) {
50684            var assertedType = assertType(value, type[i], vm);
50685            expectedTypes.push(assertedType.expectedType || '');
50686            valid = assertedType.valid;
50687        }
50688    }
50689    var haveExpectedTypes = expectedTypes.some(function (t) { return t; });
50690    if (!valid && haveExpectedTypes) {
50691        warn$2(getInvalidTypeMessage(name, value, expectedTypes), vm);
50692        return;
50693    }
50694    var validator = prop.validator;
50695    if (validator) {
50696        if (!validator(value)) {
50697            warn$2('Invalid prop: custom validator check failed for prop "' + name + '".', vm);
50698        }
50699    }
50700}
50701var simpleCheckRE = /^(String|Number|Boolean|Function|Symbol|BigInt)$/;
50702function assertType(value, type, vm) {
50703    var valid;
50704    var expectedType = getType(type);
50705    if (simpleCheckRE.test(expectedType)) {
50706        var t = typeof value;
50707        valid = t === expectedType.toLowerCase();
50708        // for primitive wrapper objects
50709        if (!valid && t === 'object') {
50710            valid = value instanceof type;
50711        }
50712    }
50713    else if (expectedType === 'Object') {
50714        valid = isPlainObject(value);
50715    }
50716    else if (expectedType === 'Array') {
50717        valid = isArray(value);
50718    }
50719    else {
50720        try {
50721            valid = value instanceof type;
50722        }
50723        catch (e) {
50724            warn$2('Invalid prop type: "' + String(type) + '" is not a constructor', vm);
50725            valid = false;
50726        }
50727    }
50728    return {
50729        valid: valid,
50730        expectedType: expectedType
50731    };
50732}
50733var functionTypeCheckRE = /^\s*function (\w+)/;
50734/**
50735 * Use function string name to check built-in types,
50736 * because a simple equality check will fail when running
50737 * across different vms / iframes.
50738 */
50739function getType(fn) {
50740    var match = fn && fn.toString().match(functionTypeCheckRE);
50741    return match ? match[1] : '';
50742}
50743function isSameType(a, b) {
50744    return getType(a) === getType(b);
50745}
50746function getTypeIndex(type, expectedTypes) {
50747    if (!isArray(expectedTypes)) {
50748        return isSameType(expectedTypes, type) ? 0 : -1;
50749    }
50750    for (var i = 0, len = expectedTypes.length; i < len; i++) {
50751        if (isSameType(expectedTypes[i], type)) {
50752            return i;
50753        }
50754    }
50755    return -1;
50756}
50757function getInvalidTypeMessage(name, value, expectedTypes) {
50758    var message = "Invalid prop: type check failed for prop \"".concat(name, "\".") +
50759        " Expected ".concat(expectedTypes.map(capitalize).join(', '));
50760    var expectedType = expectedTypes[0];
50761    var receivedType = toRawType(value);
50762    // check if we need to specify expected value
50763    if (expectedTypes.length === 1 &&
50764        isExplicable(expectedType) &&
50765        isExplicable(typeof value) &&
50766        !isBoolean(expectedType, receivedType)) {
50767        message += " with value ".concat(styleValue(value, expectedType));
50768    }
50769    message += ", got ".concat(receivedType, " ");
50770    // check if we need to specify received value
50771    if (isExplicable(receivedType)) {
50772        message += "with value ".concat(styleValue(value, receivedType), ".");
50773    }
50774    return message;
50775}
50776function styleValue(value, type) {
50777    if (type === 'String') {
50778        return "\"".concat(value, "\"");
50779    }
50780    else if (type === 'Number') {
50781        return "".concat(Number(value));
50782    }
50783    else {
50784        return "".concat(value);
50785    }
50786}
50787var EXPLICABLE_TYPES = ['string', 'number', 'boolean'];
50788function isExplicable(value) {
50789    return EXPLICABLE_TYPES.some(function (elem) { return value.toLowerCase() === elem; });
50790}
50791function isBoolean() {
50792    var args = [];
50793    for (var _i = 0; _i < arguments.length; _i++) {
50794        args[_i] = arguments[_i];
50795    }
50796    return args.some(function (elem) { return elem.toLowerCase() === 'boolean'; });
50797}
50798
50799function Vue(options) {
50800    if ( true && !(this instanceof Vue)) {
50801        warn$2('Vue is a constructor and should be called with the `new` keyword');
50802    }
50803    this._init(options);
50804}
50805//@ts-expect-error Vue has function type
50806initMixin$1(Vue);
50807//@ts-expect-error Vue has function type
50808stateMixin(Vue);
50809//@ts-expect-error Vue has function type
50810eventsMixin(Vue);
50811//@ts-expect-error Vue has function type
50812lifecycleMixin(Vue);
50813//@ts-expect-error Vue has function type
50814renderMixin(Vue);
50815
50816function initUse(Vue) {
50817    Vue.use = function (plugin) {
50818        var installedPlugins = this._installedPlugins || (this._installedPlugins = []);
50819        if (installedPlugins.indexOf(plugin) > -1) {
50820            return this;
50821        }
50822        // additional parameters
50823        var args = toArray(arguments, 1);
50824        args.unshift(this);
50825        if (isFunction(plugin.install)) {
50826            plugin.install.apply(plugin, args);
50827        }
50828        else if (isFunction(plugin)) {
50829            plugin.apply(null, args);
50830        }
50831        installedPlugins.push(plugin);
50832        return this;
50833    };
50834}
50835
50836function initMixin(Vue) {
50837    Vue.mixin = function (mixin) {
50838        this.options = mergeOptions(this.options, mixin);
50839        return this;
50840    };
50841}
50842
50843function initExtend(Vue) {
50844    /**
50845     * Each instance constructor, including Vue, has a unique
50846     * cid. This enables us to create wrapped "child
50847     * constructors" for prototypal inheritance and cache them.
50848     */
50849    Vue.cid = 0;
50850    var cid = 1;
50851    /**
50852     * Class inheritance
50853     */
50854    Vue.extend = function (extendOptions) {
50855        extendOptions = extendOptions || {};
50856        var Super = this;
50857        var SuperId = Super.cid;
50858        var cachedCtors = extendOptions._Ctor || (extendOptions._Ctor = {});
50859        if (cachedCtors[SuperId]) {
50860            return cachedCtors[SuperId];
50861        }
50862        var name = getComponentName(extendOptions) || getComponentName(Super.options);
50863        if ( true && name) {
50864            validateComponentName(name);
50865        }
50866        var Sub = function VueComponent(options) {
50867            this._init(options);
50868        };
50869        Sub.prototype = Object.create(Super.prototype);
50870        Sub.prototype.constructor = Sub;
50871        Sub.cid = cid++;
50872        Sub.options = mergeOptions(Super.options, extendOptions);
50873        Sub['super'] = Super;
50874        // For props and computed properties, we define the proxy getters on
50875        // the Vue instances at extension time, on the extended prototype. This
50876        // avoids Object.defineProperty calls for each instance created.
50877        if (Sub.options.props) {
50878            initProps(Sub);
50879        }
50880        if (Sub.options.computed) {
50881            initComputed(Sub);
50882        }
50883        // allow further extension/mixin/plugin usage
50884        Sub.extend = Super.extend;
50885        Sub.mixin = Super.mixin;
50886        Sub.use = Super.use;
50887        // create asset registers, so extended classes
50888        // can have their private assets too.
50889        ASSET_TYPES.forEach(function (type) {
50890            Sub[type] = Super[type];
50891        });
50892        // enable recursive self-lookup
50893        if (name) {
50894            Sub.options.components[name] = Sub;
50895        }
50896        // keep a reference to the super options at extension time.
50897        // later at instantiation we can check if Super's options have
50898        // been updated.
50899        Sub.superOptions = Super.options;
50900        Sub.extendOptions = extendOptions;
50901        Sub.sealedOptions = extend({}, Sub.options);
50902        // cache constructor
50903        cachedCtors[SuperId] = Sub;
50904        return Sub;
50905    };
50906}
50907function initProps(Comp) {
50908    var props = Comp.options.props;
50909    for (var key in props) {
50910        proxy(Comp.prototype, "_props", key);
50911    }
50912}
50913function initComputed(Comp) {
50914    var computed = Comp.options.computed;
50915    for (var key in computed) {
50916        defineComputed(Comp.prototype, key, computed[key]);
50917    }
50918}
50919
50920function initAssetRegisters(Vue) {
50921    /**
50922     * Create asset registration methods.
50923     */
50924    ASSET_TYPES.forEach(function (type) {
50925        // @ts-expect-error function is not exact same type
50926        Vue[type] = function (id, definition) {
50927            if (!definition) {
50928                return this.options[type + 's'][id];
50929            }
50930            else {
50931                /* istanbul ignore if */
50932                if ( true && type === 'component') {
50933                    validateComponentName(id);
50934                }
50935                if (type === 'component' && isPlainObject(definition)) {
50936                    // @ts-expect-error
50937                    definition.name = definition.name || id;
50938                    definition = this.options._base.extend(definition);
50939                }
50940                if (type === 'directive' && isFunction(definition)) {
50941                    definition = { bind: definition, update: definition };
50942                }
50943                this.options[type + 's'][id] = definition;
50944                return definition;
50945            }
50946        };
50947    });
50948}
50949
50950function _getComponentName(opts) {
50951    return opts && (getComponentName(opts.Ctor.options) || opts.tag);
50952}
50953function matches(pattern, name) {
50954    if (isArray(pattern)) {
50955        return pattern.indexOf(name) > -1;
50956    }
50957    else if (typeof pattern === 'string') {
50958        return pattern.split(',').indexOf(name) > -1;
50959    }
50960    else if (isRegExp(pattern)) {
50961        return pattern.test(name);
50962    }
50963    /* istanbul ignore next */
50964    return false;
50965}
50966function pruneCache(keepAliveInstance, filter) {
50967    var cache = keepAliveInstance.cache, keys = keepAliveInstance.keys, _vnode = keepAliveInstance._vnode, $vnode = keepAliveInstance.$vnode;
50968    for (var key in cache) {
50969        var entry = cache[key];
50970        if (entry) {
50971            var name_1 = entry.name;
50972            if (name_1 && !filter(name_1)) {
50973                pruneCacheEntry(cache, key, keys, _vnode);
50974            }
50975        }
50976    }
50977    $vnode.componentOptions.children = undefined;
50978}
50979function pruneCacheEntry(cache, key, keys, current) {
50980    var entry = cache[key];
50981    if (entry && (!current || entry.tag !== current.tag)) {
50982        // @ts-expect-error can be undefined
50983        entry.componentInstance.$destroy();
50984    }
50985    cache[key] = null;
50986    remove$2(keys, key);
50987}
50988var patternTypes = [String, RegExp, Array];
50989// TODO defineComponent
50990var KeepAlive = {
50991    name: 'keep-alive',
50992    abstract: true,
50993    props: {
50994        include: patternTypes,
50995        exclude: patternTypes,
50996        max: [String, Number]
50997    },
50998    methods: {
50999        cacheVNode: function () {
51000            var _a = this, cache = _a.cache, keys = _a.keys, vnodeToCache = _a.vnodeToCache, keyToCache = _a.keyToCache;
51001            if (vnodeToCache) {
51002                var tag = vnodeToCache.tag, componentInstance = vnodeToCache.componentInstance, componentOptions = vnodeToCache.componentOptions;
51003                cache[keyToCache] = {
51004                    name: _getComponentName(componentOptions),
51005                    tag: tag,
51006                    componentInstance: componentInstance
51007                };
51008                keys.push(keyToCache);
51009                // prune oldest entry
51010                if (this.max && keys.length > parseInt(this.max)) {
51011                    pruneCacheEntry(cache, keys[0], keys, this._vnode);
51012                }
51013                this.vnodeToCache = null;
51014            }
51015        }
51016    },
51017    created: function () {
51018        this.cache = Object.create(null);
51019        this.keys = [];
51020    },
51021    destroyed: function () {
51022        for (var key in this.cache) {
51023            pruneCacheEntry(this.cache, key, this.keys);
51024        }
51025    },
51026    mounted: function () {
51027        var _this = this;
51028        this.cacheVNode();
51029        this.$watch('include', function (val) {
51030            pruneCache(_this, function (name) { return matches(val, name); });
51031        });
51032        this.$watch('exclude', function (val) {
51033            pruneCache(_this, function (name) { return !matches(val, name); });
51034        });
51035    },
51036    updated: function () {
51037        this.cacheVNode();
51038    },
51039    render: function () {
51040        var slot = this.$slots.default;
51041        var vnode = getFirstComponentChild(slot);
51042        var componentOptions = vnode && vnode.componentOptions;
51043        if (componentOptions) {
51044            // check pattern
51045            var name_2 = _getComponentName(componentOptions);
51046            var _a = this, include = _a.include, exclude = _a.exclude;
51047            if (
51048            // not included
51049            (include && (!name_2 || !matches(include, name_2))) ||
51050                // excluded
51051                (exclude && name_2 && matches(exclude, name_2))) {
51052                return vnode;
51053            }
51054            var _b = this, cache = _b.cache, keys = _b.keys;
51055            var key = vnode.key == null
51056                ? // same constructor may get registered as different local components
51057                    // so cid alone is not enough (#3269)
51058                    componentOptions.Ctor.cid +
51059                        (componentOptions.tag ? "::".concat(componentOptions.tag) : '')
51060                : vnode.key;
51061            if (cache[key]) {
51062                vnode.componentInstance = cache[key].componentInstance;
51063                // make current key freshest
51064                remove$2(keys, key);
51065                keys.push(key);
51066            }
51067            else {
51068                // delay setting the cache until update
51069                this.vnodeToCache = vnode;
51070                this.keyToCache = key;
51071            }
51072            // @ts-expect-error can vnode.data can be undefined
51073            vnode.data.keepAlive = true;
51074        }
51075        return vnode || (slot && slot[0]);
51076    }
51077};
51078
51079var builtInComponents = {
51080    KeepAlive: KeepAlive
51081};
51082
51083function initGlobalAPI(Vue) {
51084    // config
51085    var configDef = {};
51086    configDef.get = function () { return config; };
51087    if (true) {
51088        configDef.set = function () {
51089            warn$2('Do not replace the Vue.config object, set individual fields instead.');
51090        };
51091    }
51092    Object.defineProperty(Vue, 'config', configDef);
51093    // exposed util methods.
51094    // NOTE: these are not considered part of the public API - avoid relying on
51095    // them unless you are aware of the risk.
51096    Vue.util = {
51097        warn: warn$2,
51098        extend: extend,
51099        mergeOptions: mergeOptions,
51100        defineReactive: defineReactive
51101    };
51102    Vue.set = set;
51103    Vue.delete = del;
51104    Vue.nextTick = nextTick;
51105    // 2.6 explicit observable API
51106    Vue.observable = function (obj) {
51107        observe(obj);
51108        return obj;
51109    };
51110    Vue.options = Object.create(null);
51111    ASSET_TYPES.forEach(function (type) {
51112        Vue.options[type + 's'] = Object.create(null);
51113    });
51114    // this is used to identify the "base" constructor to extend all plain-object
51115    // components with in Weex's multi-instance scenarios.
51116    Vue.options._base = Vue;
51117    extend(Vue.options.components, builtInComponents);
51118    initUse(Vue);
51119    initMixin(Vue);
51120    initExtend(Vue);
51121    initAssetRegisters(Vue);
51122}
51123
51124initGlobalAPI(Vue);
51125Object.defineProperty(Vue.prototype, '$isServer', {
51126    get: isServerRendering
51127});
51128Object.defineProperty(Vue.prototype, '$ssrContext', {
51129    get: function () {
51130        /* istanbul ignore next */
51131        return this.$vnode && this.$vnode.ssrContext;
51132    }
51133});
51134// expose FunctionalRenderContext for ssr runtime helper installation
51135Object.defineProperty(Vue, 'FunctionalRenderContext', {
51136    value: FunctionalRenderContext
51137});
51138Vue.version = version;
51139
51140// these are reserved for web because they are directly compiled away
51141// during template compilation
51142var isReservedAttr = makeMap('style,class');
51143// attributes that should be using props for binding
51144var acceptValue = makeMap('input,textarea,option,select,progress');
51145var mustUseProp = function (tag, type, attr) {
51146    return ((attr === 'value' && acceptValue(tag) && type !== 'button') ||
51147        (attr === 'selected' && tag === 'option') ||
51148        (attr === 'checked' && tag === 'input') ||
51149        (attr === 'muted' && tag === 'video'));
51150};
51151var isEnumeratedAttr = makeMap('contenteditable,draggable,spellcheck');
51152var isValidContentEditableValue = makeMap('events,caret,typing,plaintext-only');
51153var convertEnumeratedValue = function (key, value) {
51154    return isFalsyAttrValue(value) || value === 'false'
51155        ? 'false'
51156        : // allow arbitrary string value for contenteditable
51157            key === 'contenteditable' && isValidContentEditableValue(value)
51158                ? value
51159                : 'true';
51160};
51161var isBooleanAttr = makeMap('allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,' +
51162    'default,defaultchecked,defaultmuted,defaultselected,defer,disabled,' +
51163    'enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,' +
51164    'muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,' +
51165    'required,reversed,scoped,seamless,selected,sortable,' +
51166    'truespeed,typemustmatch,visible');
51167var xlinkNS = 'http://www.w3.org/1999/xlink';
51168var isXlink = function (name) {
51169    return name.charAt(5) === ':' && name.slice(0, 5) === 'xlink';
51170};
51171var getXlinkProp = function (name) {
51172    return isXlink(name) ? name.slice(6, name.length) : '';
51173};
51174var isFalsyAttrValue = function (val) {
51175    return val == null || val === false;
51176};
51177
51178function genClassForVnode(vnode) {
51179    var data = vnode.data;
51180    var parentNode = vnode;
51181    var childNode = vnode;
51182    while (isDef(childNode.componentInstance)) {
51183        childNode = childNode.componentInstance._vnode;
51184        if (childNode && childNode.data) {
51185            data = mergeClassData(childNode.data, data);
51186        }
51187    }
51188    // @ts-expect-error parentNode.parent not VNodeWithData
51189    while (isDef((parentNode = parentNode.parent))) {
51190        if (parentNode && parentNode.data) {
51191            data = mergeClassData(data, parentNode.data);
51192        }
51193    }
51194    return renderClass(data.staticClass, data.class);
51195}
51196function mergeClassData(child, parent) {
51197    return {
51198        staticClass: concat(child.staticClass, parent.staticClass),
51199        class: isDef(child.class) ? [child.class, parent.class] : parent.class
51200    };
51201}
51202function renderClass(staticClass, dynamicClass) {
51203    if (isDef(staticClass) || isDef(dynamicClass)) {
51204        return concat(staticClass, stringifyClass(dynamicClass));
51205    }
51206    /* istanbul ignore next */
51207    return '';
51208}
51209function concat(a, b) {
51210    return a ? (b ? a + ' ' + b : a) : b || '';
51211}
51212function stringifyClass(value) {
51213    if (Array.isArray(value)) {
51214        return stringifyArray(value);
51215    }
51216    if (isObject(value)) {
51217        return stringifyObject(value);
51218    }
51219    if (typeof value === 'string') {
51220        return value;
51221    }
51222    /* istanbul ignore next */
51223    return '';
51224}
51225function stringifyArray(value) {
51226    var res = '';
51227    var stringified;
51228    for (var i = 0, l = value.length; i < l; i++) {
51229        if (isDef((stringified = stringifyClass(value[i]))) && stringified !== '') {
51230            if (res)
51231                res += ' ';
51232            res += stringified;
51233        }
51234    }
51235    return res;
51236}
51237function stringifyObject(value) {
51238    var res = '';
51239    for (var key in value) {
51240        if (value[key]) {
51241            if (res)
51242                res += ' ';
51243            res += key;
51244        }
51245    }
51246    return res;
51247}
51248
51249var namespaceMap = {
51250    svg: 'http://www.w3.org/2000/svg',
51251    math: 'http://www.w3.org/1998/Math/MathML'
51252};
51253var isHTMLTag = makeMap('html,body,base,head,link,meta,style,title,' +
51254    'address,article,aside,footer,header,h1,h2,h3,h4,h5,h6,hgroup,nav,section,' +
51255    'div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,' +
51256    'a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,rtc,ruby,' +
51257    's,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,' +
51258    'embed,object,param,source,canvas,script,noscript,del,ins,' +
51259    'caption,col,colgroup,table,thead,tbody,td,th,tr,' +
51260    'button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,' +
51261    'output,progress,select,textarea,' +
51262    'details,dialog,menu,menuitem,summary,' +
51263    'content,element,shadow,template,blockquote,iframe,tfoot');
51264// this map is intentionally selective, only covering SVG elements that may
51265// contain child elements.
51266var isSVG = makeMap('svg,animate,circle,clippath,cursor,defs,desc,ellipse,filter,font-face,' +
51267    'foreignobject,g,glyph,image,line,marker,mask,missing-glyph,path,pattern,' +
51268    'polygon,polyline,rect,switch,symbol,text,textpath,tspan,use,view', true);
51269var isPreTag = function (tag) { return tag === 'pre'; };
51270var isReservedTag = function (tag) {
51271    return isHTMLTag(tag) || isSVG(tag);
51272};
51273function getTagNamespace(tag) {
51274    if (isSVG(tag)) {
51275        return 'svg';
51276    }
51277    // basic support for MathML
51278    // note it doesn't support other MathML elements being component roots
51279    if (tag === 'math') {
51280        return 'math';
51281    }
51282}
51283var unknownElementCache = Object.create(null);
51284function isUnknownElement(tag) {
51285    /* istanbul ignore if */
51286    if (!inBrowser) {
51287        return true;
51288    }
51289    if (isReservedTag(tag)) {
51290        return false;
51291    }
51292    tag = tag.toLowerCase();
51293    /* istanbul ignore if */
51294    if (unknownElementCache[tag] != null) {
51295        return unknownElementCache[tag];
51296    }
51297    var el = document.createElement(tag);
51298    if (tag.indexOf('-') > -1) {
51299        // https://stackoverflow.com/a/28210364/1070244
51300        return (unknownElementCache[tag] =
51301            el.constructor === window.HTMLUnknownElement ||
51302                el.constructor === window.HTMLElement);
51303    }
51304    else {
51305        return (unknownElementCache[tag] = /HTMLUnknownElement/.test(el.toString()));
51306    }
51307}
51308var isTextInputType = makeMap('text,number,password,search,email,tel,url');
51309
51310/**
51311 * Query an element selector if it's not an element already.
51312 */
51313function query(el) {
51314    if (typeof el === 'string') {
51315        var selected = document.querySelector(el);
51316        if (!selected) {
51317             true && warn$2('Cannot find element: ' + el);
51318            return document.createElement('div');
51319        }
51320        return selected;
51321    }
51322    else {
51323        return el;
51324    }
51325}
51326
51327function createElement(tagName, vnode) {
51328    var elm = document.createElement(tagName);
51329    if (tagName !== 'select') {
51330        return elm;
51331    }
51332    // false or null will remove the attribute but undefined will not
51333    if (vnode.data &&
51334        vnode.data.attrs &&
51335        vnode.data.attrs.multiple !== undefined) {
51336        elm.setAttribute('multiple', 'multiple');
51337    }
51338    return elm;
51339}
51340function createElementNS(namespace, tagName) {
51341    return document.createElementNS(namespaceMap[namespace], tagName);
51342}
51343function createTextNode(text) {
51344    return document.createTextNode(text);
51345}
51346function createComment(text) {
51347    return document.createComment(text);
51348}
51349function insertBefore(parentNode, newNode, referenceNode) {
51350    parentNode.insertBefore(newNode, referenceNode);
51351}
51352function removeChild(node, child) {
51353    node.removeChild(child);
51354}
51355function appendChild(node, child) {
51356    node.appendChild(child);
51357}
51358function parentNode(node) {
51359    return node.parentNode;
51360}
51361function nextSibling(node) {
51362    return node.nextSibling;
51363}
51364function tagName(node) {
51365    return node.tagName;
51366}
51367function setTextContent(node, text) {
51368    node.textContent = text;
51369}
51370function setStyleScope(node, scopeId) {
51371    node.setAttribute(scopeId, '');
51372}
51373
51374var nodeOps = /*#__PURE__*/Object.freeze({
51375  __proto__: null,
51376  createElement: createElement,
51377  createElementNS: createElementNS,
51378  createTextNode: createTextNode,
51379  createComment: createComment,
51380  insertBefore: insertBefore,
51381  removeChild: removeChild,
51382  appendChild: appendChild,
51383  parentNode: parentNode,
51384  nextSibling: nextSibling,
51385  tagName: tagName,
51386  setTextContent: setTextContent,
51387  setStyleScope: setStyleScope
51388});
51389
51390var ref = {
51391    create: function (_, vnode) {
51392        registerRef(vnode);
51393    },
51394    update: function (oldVnode, vnode) {
51395        if (oldVnode.data.ref !== vnode.data.ref) {
51396            registerRef(oldVnode, true);
51397            registerRef(vnode);
51398        }
51399    },
51400    destroy: function (vnode) {
51401        registerRef(vnode, true);
51402    }
51403};
51404function registerRef(vnode, isRemoval) {
51405    var ref = vnode.data.ref;
51406    if (!isDef(ref))
51407        return;
51408    var vm = vnode.context;
51409    var refValue = vnode.componentInstance || vnode.elm;
51410    var value = isRemoval ? null : refValue;
51411    var $refsValue = isRemoval ? undefined : refValue;
51412    if (isFunction(ref)) {
51413        invokeWithErrorHandling(ref, vm, [value], vm, "template ref function");
51414        return;
51415    }
51416    var isFor = vnode.data.refInFor;
51417    var _isString = typeof ref === 'string' || typeof ref === 'number';
51418    var _isRef = isRef(ref);
51419    var refs = vm.$refs;
51420    if (_isString || _isRef) {
51421        if (isFor) {
51422            var existing = _isString ? refs[ref] : ref.value;
51423            if (isRemoval) {
51424                isArray(existing) && remove$2(existing, refValue);
51425            }
51426            else {
51427                if (!isArray(existing)) {
51428                    if (_isString) {
51429                        refs[ref] = [refValue];
51430                        setSetupRef(vm, ref, refs[ref]);
51431                    }
51432                    else {
51433                        ref.value = [refValue];
51434                    }
51435                }
51436                else if (!existing.includes(refValue)) {
51437                    existing.push(refValue);
51438                }
51439            }
51440        }
51441        else if (_isString) {
51442            if (isRemoval && refs[ref] !== refValue) {
51443                return;
51444            }
51445            refs[ref] = $refsValue;
51446            setSetupRef(vm, ref, value);
51447        }
51448        else if (_isRef) {
51449            if (isRemoval && ref.value !== refValue) {
51450                return;
51451            }
51452            ref.value = value;
51453        }
51454        else if (true) {
51455            warn$2("Invalid template ref type: ".concat(typeof ref));
51456        }
51457    }
51458}
51459function setSetupRef(_a, key, val) {
51460    var _setupState = _a._setupState;
51461    if (_setupState && hasOwn(_setupState, key)) {
51462        if (isRef(_setupState[key])) {
51463            _setupState[key].value = val;
51464        }
51465        else {
51466            _setupState[key] = val;
51467        }
51468    }
51469}
51470
51471/**
51472 * Virtual DOM patching algorithm based on Snabbdom by
51473 * Simon Friis Vindum (@paldepind)
51474 * Licensed under the MIT License
51475 * https://github.com/paldepind/snabbdom/blob/master/LICENSE
51476 *
51477 * modified by Evan You (@yyx990803)
51478 *
51479 * Not type-checking this because this file is perf-critical and the cost
51480 * of making flow understand it is not worth it.
51481 */
51482var emptyNode = new VNode('', {}, []);
51483var hooks = ['create', 'activate', 'update', 'remove', 'destroy'];
51484function sameVnode(a, b) {
51485    return (a.key === b.key &&
51486        a.asyncFactory === b.asyncFactory &&
51487        ((a.tag === b.tag &&
51488            a.isComment === b.isComment &&
51489            isDef(a.data) === isDef(b.data) &&
51490            sameInputType(a, b)) ||
51491            (isTrue(a.isAsyncPlaceholder) && isUndef(b.asyncFactory.error))));
51492}
51493function sameInputType(a, b) {
51494    if (a.tag !== 'input')
51495        return true;
51496    var i;
51497    var typeA = isDef((i = a.data)) && isDef((i = i.attrs)) && i.type;
51498    var typeB = isDef((i = b.data)) && isDef((i = i.attrs)) && i.type;
51499    return typeA === typeB || (isTextInputType(typeA) && isTextInputType(typeB));
51500}
51501function createKeyToOldIdx(children, beginIdx, endIdx) {
51502    var i, key;
51503    var map = {};
51504    for (i = beginIdx; i <= endIdx; ++i) {
51505        key = children[i].key;
51506        if (isDef(key))
51507            map[key] = i;
51508    }
51509    return map;
51510}
51511function createPatchFunction(backend) {
51512    var i, j;
51513    var cbs = {};
51514    var modules = backend.modules, nodeOps = backend.nodeOps;
51515    for (i = 0; i < hooks.length; ++i) {
51516        cbs[hooks[i]] = [];
51517        for (j = 0; j < modules.length; ++j) {
51518            if (isDef(modules[j][hooks[i]])) {
51519                cbs[hooks[i]].push(modules[j][hooks[i]]);
51520            }
51521        }
51522    }
51523    function emptyNodeAt(elm) {
51524        return new VNode(nodeOps.tagName(elm).toLowerCase(), {}, [], undefined, elm);
51525    }
51526    function createRmCb(childElm, listeners) {
51527        function remove() {
51528            if (--remove.listeners === 0) {
51529                removeNode(childElm);
51530            }
51531        }
51532        remove.listeners = listeners;
51533        return remove;
51534    }
51535    function removeNode(el) {
51536        var parent = nodeOps.parentNode(el);
51537        // element may have already been removed due to v-html / v-text
51538        if (isDef(parent)) {
51539            nodeOps.removeChild(parent, el);
51540        }
51541    }
51542    function isUnknownElement(vnode, inVPre) {
51543        return (!inVPre &&
51544            !vnode.ns &&
51545            !(config.ignoredElements.length &&
51546                config.ignoredElements.some(function (ignore) {
51547                    return isRegExp(ignore)
51548                        ? ignore.test(vnode.tag)
51549                        : ignore === vnode.tag;
51550                })) &&
51551            config.isUnknownElement(vnode.tag));
51552    }
51553    var creatingElmInVPre = 0;
51554    function createElm(vnode, insertedVnodeQueue, parentElm, refElm, nested, ownerArray, index) {
51555        if (isDef(vnode.elm) && isDef(ownerArray)) {
51556            // This vnode was used in a previous render!
51557            // now it's used as a new node, overwriting its elm would cause
51558            // potential patch errors down the road when it's used as an insertion
51559            // reference node. Instead, we clone the node on-demand before creating
51560            // associated DOM element for it.
51561            vnode = ownerArray[index] = cloneVNode(vnode);
51562        }
51563        vnode.isRootInsert = !nested; // for transition enter check
51564        if (createComponent(vnode, insertedVnodeQueue, parentElm, refElm)) {
51565            return;
51566        }
51567        var data = vnode.data;
51568        var children = vnode.children;
51569        var tag = vnode.tag;
51570        if (isDef(tag)) {
51571            if (true) {
51572                if (data && data.pre) {
51573                    creatingElmInVPre++;
51574                }
51575                if (isUnknownElement(vnode, creatingElmInVPre)) {
51576                    warn$2('Unknown custom element: <' +
51577                        tag +
51578                        '> - did you ' +
51579                        'register the component correctly? For recursive components, ' +
51580                        'make sure to provide the "name" option.', vnode.context);
51581                }
51582            }
51583            vnode.elm = vnode.ns
51584                ? nodeOps.createElementNS(vnode.ns, tag)
51585                : nodeOps.createElement(tag, vnode);
51586            setScope(vnode);
51587            createChildren(vnode, children, insertedVnodeQueue);
51588            if (isDef(data)) {
51589                invokeCreateHooks(vnode, insertedVnodeQueue);
51590            }
51591            insert(parentElm, vnode.elm, refElm);
51592            if ( true && data && data.pre) {
51593                creatingElmInVPre--;
51594            }
51595        }
51596        else if (isTrue(vnode.isComment)) {
51597            vnode.elm = nodeOps.createComment(vnode.text);
51598            insert(parentElm, vnode.elm, refElm);
51599        }
51600        else {
51601            vnode.elm = nodeOps.createTextNode(vnode.text);
51602            insert(parentElm, vnode.elm, refElm);
51603        }
51604    }
51605    function createComponent(vnode, insertedVnodeQueue, parentElm, refElm) {
51606        var i = vnode.data;
51607        if (isDef(i)) {
51608            var isReactivated = isDef(vnode.componentInstance) && i.keepAlive;
51609            if (isDef((i = i.hook)) && isDef((i = i.init))) {
51610                i(vnode, false /* hydrating */);
51611            }
51612            // after calling the init hook, if the vnode is a child component
51613            // it should've created a child instance and mounted it. the child
51614            // component also has set the placeholder vnode's elm.
51615            // in that case we can just return the element and be done.
51616            if (isDef(vnode.componentInstance)) {
51617                initComponent(vnode, insertedVnodeQueue);
51618                insert(parentElm, vnode.elm, refElm);
51619                if (isTrue(isReactivated)) {
51620                    reactivateComponent(vnode, insertedVnodeQueue, parentElm, refElm);
51621                }
51622                return true;
51623            }
51624        }
51625    }
51626    function initComponent(vnode, insertedVnodeQueue) {
51627        if (isDef(vnode.data.pendingInsert)) {
51628            insertedVnodeQueue.push.apply(insertedVnodeQueue, vnode.data.pendingInsert);
51629            vnode.data.pendingInsert = null;
51630        }
51631        vnode.elm = vnode.componentInstance.$el;
51632        if (isPatchable(vnode)) {
51633            invokeCreateHooks(vnode, insertedVnodeQueue);
51634            setScope(vnode);
51635        }
51636        else {
51637            // empty component root.
51638            // skip all element-related modules except for ref (#3455)
51639            registerRef(vnode);
51640            // make sure to invoke the insert hook
51641            insertedVnodeQueue.push(vnode);
51642        }
51643    }
51644    function reactivateComponent(vnode, insertedVnodeQueue, parentElm, refElm) {
51645        var i;
51646        // hack for #4339: a reactivated component with inner transition
51647        // does not trigger because the inner node's created hooks are not called
51648        // again. It's not ideal to involve module-specific logic in here but
51649        // there doesn't seem to be a better way to do it.
51650        var innerNode = vnode;
51651        while (innerNode.componentInstance) {
51652            innerNode = innerNode.componentInstance._vnode;
51653            if (isDef((i = innerNode.data)) && isDef((i = i.transition))) {
51654                for (i = 0; i < cbs.activate.length; ++i) {
51655                    cbs.activate[i](emptyNode, innerNode);
51656                }
51657                insertedVnodeQueue.push(innerNode);
51658                break;
51659            }
51660        }
51661        // unlike a newly created component,
51662        // a reactivated keep-alive component doesn't insert itself
51663        insert(parentElm, vnode.elm, refElm);
51664    }
51665    function insert(parent, elm, ref) {
51666        if (isDef(parent)) {
51667            if (isDef(ref)) {
51668                if (nodeOps.parentNode(ref) === parent) {
51669                    nodeOps.insertBefore(parent, elm, ref);
51670                }
51671            }
51672            else {
51673                nodeOps.appendChild(parent, elm);
51674            }
51675        }
51676    }
51677    function createChildren(vnode, children, insertedVnodeQueue) {
51678        if (isArray(children)) {
51679            if (true) {
51680                checkDuplicateKeys(children);
51681            }
51682            for (var i_1 = 0; i_1 < children.length; ++i_1) {
51683                createElm(children[i_1], insertedVnodeQueue, vnode.elm, null, true, children, i_1);
51684            }
51685        }
51686        else if (isPrimitive(vnode.text)) {
51687            nodeOps.appendChild(vnode.elm, nodeOps.createTextNode(String(vnode.text)));
51688        }
51689    }
51690    function isPatchable(vnode) {
51691        while (vnode.componentInstance) {
51692            vnode = vnode.componentInstance._vnode;
51693        }
51694        return isDef(vnode.tag);
51695    }
51696    function invokeCreateHooks(vnode, insertedVnodeQueue) {
51697        for (var i_2 = 0; i_2 < cbs.create.length; ++i_2) {
51698            cbs.create[i_2](emptyNode, vnode);
51699        }
51700        i = vnode.data.hook; // Reuse variable
51701        if (isDef(i)) {
51702            if (isDef(i.create))
51703                i.create(emptyNode, vnode);
51704            if (isDef(i.insert))
51705                insertedVnodeQueue.push(vnode);
51706        }
51707    }
51708    // set scope id attribute for scoped CSS.
51709    // this is implemented as a special case to avoid the overhead
51710    // of going through the normal attribute patching process.
51711    function setScope(vnode) {
51712        var i;
51713        if (isDef((i = vnode.fnScopeId))) {
51714            nodeOps.setStyleScope(vnode.elm, i);
51715        }
51716        else {
51717            var ancestor = vnode;
51718            while (ancestor) {
51719                if (isDef((i = ancestor.context)) && isDef((i = i.$options._scopeId))) {
51720                    nodeOps.setStyleScope(vnode.elm, i);
51721                }
51722                ancestor = ancestor.parent;
51723            }
51724        }
51725        // for slot content they should also get the scopeId from the host instance.
51726        if (isDef((i = activeInstance)) &&
51727            i !== vnode.context &&
51728            i !== vnode.fnContext &&
51729            isDef((i = i.$options._scopeId))) {
51730            nodeOps.setStyleScope(vnode.elm, i);
51731        }
51732    }
51733    function addVnodes(parentElm, refElm, vnodes, startIdx, endIdx, insertedVnodeQueue) {
51734        for (; startIdx <= endIdx; ++startIdx) {
51735            createElm(vnodes[startIdx], insertedVnodeQueue, parentElm, refElm, false, vnodes, startIdx);
51736        }
51737    }
51738    function invokeDestroyHook(vnode) {
51739        var i, j;
51740        var data = vnode.data;
51741        if (isDef(data)) {
51742            if (isDef((i = data.hook)) && isDef((i = i.destroy)))
51743                i(vnode);
51744            for (i = 0; i < cbs.destroy.length; ++i)
51745                cbs.destroy[i](vnode);
51746        }
51747        if (isDef((i = vnode.children))) {
51748            for (j = 0; j < vnode.children.length; ++j) {
51749                invokeDestroyHook(vnode.children[j]);
51750            }
51751        }
51752    }
51753    function removeVnodes(vnodes, startIdx, endIdx) {
51754        for (; startIdx <= endIdx; ++startIdx) {
51755            var ch = vnodes[startIdx];
51756            if (isDef(ch)) {
51757                if (isDef(ch.tag)) {
51758                    removeAndInvokeRemoveHook(ch);
51759                    invokeDestroyHook(ch);
51760                }
51761                else {
51762                    // Text node
51763                    removeNode(ch.elm);
51764                }
51765            }
51766        }
51767    }
51768    function removeAndInvokeRemoveHook(vnode, rm) {
51769        if (isDef(rm) || isDef(vnode.data)) {
51770            var i_3;
51771            var listeners = cbs.remove.length + 1;
51772            if (isDef(rm)) {
51773                // we have a recursively passed down rm callback
51774                // increase the listeners count
51775                rm.listeners += listeners;
51776            }
51777            else {
51778                // directly removing
51779                rm = createRmCb(vnode.elm, listeners);
51780            }
51781            // recursively invoke hooks on child component root node
51782            if (isDef((i_3 = vnode.componentInstance)) &&
51783                isDef((i_3 = i_3._vnode)) &&
51784                isDef(i_3.data)) {
51785                removeAndInvokeRemoveHook(i_3, rm);
51786            }
51787            for (i_3 = 0; i_3 < cbs.remove.length; ++i_3) {
51788                cbs.remove[i_3](vnode, rm);
51789            }
51790            if (isDef((i_3 = vnode.data.hook)) && isDef((i_3 = i_3.remove))) {
51791                i_3(vnode, rm);
51792            }
51793            else {
51794                rm();
51795            }
51796        }
51797        else {
51798            removeNode(vnode.elm);
51799        }
51800    }
51801    function updateChildren(parentElm, oldCh, newCh, insertedVnodeQueue, removeOnly) {
51802        var oldStartIdx = 0;
51803        var newStartIdx = 0;
51804        var oldEndIdx = oldCh.length - 1;
51805        var oldStartVnode = oldCh[0];
51806        var oldEndVnode = oldCh[oldEndIdx];
51807        var newEndIdx = newCh.length - 1;
51808        var newStartVnode = newCh[0];
51809        var newEndVnode = newCh[newEndIdx];
51810        var oldKeyToIdx, idxInOld, vnodeToMove, refElm;
51811        // removeOnly is a special flag used only by <transition-group>
51812        // to ensure removed elements stay in correct relative positions
51813        // during leaving transitions
51814        var canMove = !removeOnly;
51815        if (true) {
51816            checkDuplicateKeys(newCh);
51817        }
51818        while (oldStartIdx <= oldEndIdx && newStartIdx <= newEndIdx) {
51819            if (isUndef(oldStartVnode)) {
51820                oldStartVnode = oldCh[++oldStartIdx]; // Vnode has been moved left
51821            }
51822            else if (isUndef(oldEndVnode)) {
51823                oldEndVnode = oldCh[--oldEndIdx];
51824            }
51825            else if (sameVnode(oldStartVnode, newStartVnode)) {
51826                patchVnode(oldStartVnode, newStartVnode, insertedVnodeQueue, newCh, newStartIdx);
51827                oldStartVnode = oldCh[++oldStartIdx];
51828                newStartVnode = newCh[++newStartIdx];
51829            }
51830            else if (sameVnode(oldEndVnode, newEndVnode)) {
51831                patchVnode(oldEndVnode, newEndVnode, insertedVnodeQueue, newCh, newEndIdx);
51832                oldEndVnode = oldCh[--oldEndIdx];
51833                newEndVnode = newCh[--newEndIdx];
51834            }
51835            else if (sameVnode(oldStartVnode, newEndVnode)) {
51836                // Vnode moved right
51837                patchVnode(oldStartVnode, newEndVnode, insertedVnodeQueue, newCh, newEndIdx);
51838                canMove &&
51839                    nodeOps.insertBefore(parentElm, oldStartVnode.elm, nodeOps.nextSibling(oldEndVnode.elm));
51840                oldStartVnode = oldCh[++oldStartIdx];
51841                newEndVnode = newCh[--newEndIdx];
51842            }
51843            else if (sameVnode(oldEndVnode, newStartVnode)) {
51844                // Vnode moved left
51845                patchVnode(oldEndVnode, newStartVnode, insertedVnodeQueue, newCh, newStartIdx);
51846                canMove &&
51847                    nodeOps.insertBefore(parentElm, oldEndVnode.elm, oldStartVnode.elm);
51848                oldEndVnode = oldCh[--oldEndIdx];
51849                newStartVnode = newCh[++newStartIdx];
51850            }
51851            else {
51852                if (isUndef(oldKeyToIdx))
51853                    oldKeyToIdx = createKeyToOldIdx(oldCh, oldStartIdx, oldEndIdx);
51854                idxInOld = isDef(newStartVnode.key)
51855                    ? oldKeyToIdx[newStartVnode.key]
51856                    : findIdxInOld(newStartVnode, oldCh, oldStartIdx, oldEndIdx);
51857                if (isUndef(idxInOld)) {
51858                    // New element
51859                    createElm(newStartVnode, insertedVnodeQueue, parentElm, oldStartVnode.elm, false, newCh, newStartIdx);
51860                }
51861                else {
51862                    vnodeToMove = oldCh[idxInOld];
51863                    if (sameVnode(vnodeToMove, newStartVnode)) {
51864                        patchVnode(vnodeToMove, newStartVnode, insertedVnodeQueue, newCh, newStartIdx);
51865                        oldCh[idxInOld] = undefined;
51866                        canMove &&
51867                            nodeOps.insertBefore(parentElm, vnodeToMove.elm, oldStartVnode.elm);
51868                    }
51869                    else {
51870                        // same key but different element. treat as new element
51871                        createElm(newStartVnode, insertedVnodeQueue, parentElm, oldStartVnode.elm, false, newCh, newStartIdx);
51872                    }
51873                }
51874                newStartVnode = newCh[++newStartIdx];
51875            }
51876        }
51877        if (oldStartIdx > oldEndIdx) {
51878            refElm = isUndef(newCh[newEndIdx + 1]) ? null : newCh[newEndIdx + 1].elm;
51879            addVnodes(parentElm, refElm, newCh, newStartIdx, newEndIdx, insertedVnodeQueue);
51880        }
51881        else if (newStartIdx > newEndIdx) {
51882            removeVnodes(oldCh, oldStartIdx, oldEndIdx);
51883        }
51884    }
51885    function checkDuplicateKeys(children) {
51886        var seenKeys = {};
51887        for (var i_4 = 0; i_4 < children.length; i_4++) {
51888            var vnode = children[i_4];
51889            var key = vnode.key;
51890            if (isDef(key)) {
51891                if (seenKeys[key]) {
51892                    warn$2("Duplicate keys detected: '".concat(key, "'. This may cause an update error."), vnode.context);
51893                }
51894                else {
51895                    seenKeys[key] = true;
51896                }
51897            }
51898        }
51899    }
51900    function findIdxInOld(node, oldCh, start, end) {
51901        for (var i_5 = start; i_5 < end; i_5++) {
51902            var c = oldCh[i_5];
51903            if (isDef(c) && sameVnode(node, c))
51904                return i_5;
51905        }
51906    }
51907    function patchVnode(oldVnode, vnode, insertedVnodeQueue, ownerArray, index, removeOnly) {
51908        if (oldVnode === vnode) {
51909            return;
51910        }
51911        if (isDef(vnode.elm) && isDef(ownerArray)) {
51912            // clone reused vnode
51913            vnode = ownerArray[index] = cloneVNode(vnode);
51914        }
51915        var elm = (vnode.elm = oldVnode.elm);
51916        if (isTrue(oldVnode.isAsyncPlaceholder)) {
51917            if (isDef(vnode.asyncFactory.resolved)) {
51918                hydrate(oldVnode.elm, vnode, insertedVnodeQueue);
51919            }
51920            else {
51921                vnode.isAsyncPlaceholder = true;
51922            }
51923            return;
51924        }
51925        // reuse element for static trees.
51926        // note we only do this if the vnode is cloned -
51927        // if the new node is not cloned it means the render functions have been
51928        // reset by the hot-reload-api and we need to do a proper re-render.
51929        if (isTrue(vnode.isStatic) &&
51930            isTrue(oldVnode.isStatic) &&
51931            vnode.key === oldVnode.key &&
51932            (isTrue(vnode.isCloned) || isTrue(vnode.isOnce))) {
51933            vnode.componentInstance = oldVnode.componentInstance;
51934            return;
51935        }
51936        var i;
51937        var data = vnode.data;
51938        if (isDef(data) && isDef((i = data.hook)) && isDef((i = i.prepatch))) {
51939            i(oldVnode, vnode);
51940        }
51941        var oldCh = oldVnode.children;
51942        var ch = vnode.children;
51943        if (isDef(data) && isPatchable(vnode)) {
51944            for (i = 0; i < cbs.update.length; ++i)
51945                cbs.update[i](oldVnode, vnode);
51946            if (isDef((i = data.hook)) && isDef((i = i.update)))
51947                i(oldVnode, vnode);
51948        }
51949        if (isUndef(vnode.text)) {
51950            if (isDef(oldCh) && isDef(ch)) {
51951                if (oldCh !== ch)
51952                    updateChildren(elm, oldCh, ch, insertedVnodeQueue, removeOnly);
51953            }
51954            else if (isDef(ch)) {
51955                if (true) {
51956                    checkDuplicateKeys(ch);
51957                }
51958                if (isDef(oldVnode.text))
51959                    nodeOps.setTextContent(elm, '');
51960                addVnodes(elm, null, ch, 0, ch.length - 1, insertedVnodeQueue);
51961            }
51962            else if (isDef(oldCh)) {
51963                removeVnodes(oldCh, 0, oldCh.length - 1);
51964            }
51965            else if (isDef(oldVnode.text)) {
51966                nodeOps.setTextContent(elm, '');
51967            }
51968        }
51969        else if (oldVnode.text !== vnode.text) {
51970            nodeOps.setTextContent(elm, vnode.text);
51971        }
51972        if (isDef(data)) {
51973            if (isDef((i = data.hook)) && isDef((i = i.postpatch)))
51974                i(oldVnode, vnode);
51975        }
51976    }
51977    function invokeInsertHook(vnode, queue, initial) {
51978        // delay insert hooks for component root nodes, invoke them after the
51979        // element is really inserted
51980        if (isTrue(initial) && isDef(vnode.parent)) {
51981            vnode.parent.data.pendingInsert = queue;
51982        }
51983        else {
51984            for (var i_6 = 0; i_6 < queue.length; ++i_6) {
51985                queue[i_6].data.hook.insert(queue[i_6]);
51986            }
51987        }
51988    }
51989    var hydrationBailed = false;
51990    // list of modules that can skip create hook during hydration because they
51991    // are already rendered on the client or has no need for initialization
51992    // Note: style is excluded because it relies on initial clone for future
51993    // deep updates (#7063).
51994    var isRenderedModule = makeMap('attrs,class,staticClass,staticStyle,key');
51995    // Note: this is a browser-only function so we can assume elms are DOM nodes.
51996    function hydrate(elm, vnode, insertedVnodeQueue, inVPre) {
51997        var i;
51998        var tag = vnode.tag, data = vnode.data, children = vnode.children;
51999        inVPre = inVPre || (data && data.pre);
52000        vnode.elm = elm;
52001        if (isTrue(vnode.isComment) && isDef(vnode.asyncFactory)) {
52002            vnode.isAsyncPlaceholder = true;
52003            return true;
52004        }
52005        // assert node match
52006        if (true) {
52007            if (!assertNodeMatch(elm, vnode, inVPre)) {
52008                return false;
52009            }
52010        }
52011        if (isDef(data)) {
52012            if (isDef((i = data.hook)) && isDef((i = i.init)))
52013                i(vnode, true /* hydrating */);
52014            if (isDef((i = vnode.componentInstance))) {
52015                // child component. it should have hydrated its own tree.
52016                initComponent(vnode, insertedVnodeQueue);
52017                return true;
52018            }
52019        }
52020        if (isDef(tag)) {
52021            if (isDef(children)) {
52022                // empty element, allow client to pick up and populate children
52023                if (!elm.hasChildNodes()) {
52024                    createChildren(vnode, children, insertedVnodeQueue);
52025                }
52026                else {
52027                    // v-html and domProps: innerHTML
52028                    if (isDef((i = data)) &&
52029                        isDef((i = i.domProps)) &&
52030                        isDef((i = i.innerHTML))) {
52031                        if (i !== elm.innerHTML) {
52032                            /* istanbul ignore if */
52033                            if ( true &&
52034                                typeof console !== 'undefined' &&
52035                                !hydrationBailed) {
52036                                hydrationBailed = true;
52037                                console.warn('Parent: ', elm);
52038                                console.warn('server innerHTML: ', i);
52039                                console.warn('client innerHTML: ', elm.innerHTML);
52040                            }
52041                            return false;
52042                        }
52043                    }
52044                    else {
52045                        // iterate and compare children lists
52046                        var childrenMatch = true;
52047                        var childNode = elm.firstChild;
52048                        for (var i_7 = 0; i_7 < children.length; i_7++) {
52049                            if (!childNode ||
52050                                !hydrate(childNode, children[i_7], insertedVnodeQueue, inVPre)) {
52051                                childrenMatch = false;
52052                                break;
52053                            }
52054                            childNode = childNode.nextSibling;
52055                        }
52056                        // if childNode is not null, it means the actual childNodes list is
52057                        // longer than the virtual children list.
52058                        if (!childrenMatch || childNode) {
52059                            /* istanbul ignore if */
52060                            if ( true &&
52061                                typeof console !== 'undefined' &&
52062                                !hydrationBailed) {
52063                                hydrationBailed = true;
52064                                console.warn('Parent: ', elm);
52065                                console.warn('Mismatching childNodes vs. VNodes: ', elm.childNodes, children);
52066                            }
52067                            return false;
52068                        }
52069                    }
52070                }
52071            }
52072            if (isDef(data)) {
52073                var fullInvoke = false;
52074                for (var key in data) {
52075                    if (!isRenderedModule(key)) {
52076                        fullInvoke = true;
52077                        invokeCreateHooks(vnode, insertedVnodeQueue);
52078                        break;
52079                    }
52080                }
52081                if (!fullInvoke && data['class']) {
52082                    // ensure collecting deps for deep class bindings for future updates
52083                    traverse(data['class']);
52084                }
52085            }
52086        }
52087        else if (elm.data !== vnode.text) {
52088            elm.data = vnode.text;
52089        }
52090        return true;
52091    }
52092    function assertNodeMatch(node, vnode, inVPre) {
52093        if (isDef(vnode.tag)) {
52094            return (vnode.tag.indexOf('vue-component') === 0 ||
52095                (!isUnknownElement(vnode, inVPre) &&
52096                    vnode.tag.toLowerCase() ===
52097                        (node.tagName && node.tagName.toLowerCase())));
52098        }
52099        else {
52100            return node.nodeType === (vnode.isComment ? 8 : 3);
52101        }
52102    }
52103    return function patch(oldVnode, vnode, hydrating, removeOnly) {
52104        if (isUndef(vnode)) {
52105            if (isDef(oldVnode))
52106                invokeDestroyHook(oldVnode);
52107            return;
52108        }
52109        var isInitialPatch = false;
52110        var insertedVnodeQueue = [];
52111        if (isUndef(oldVnode)) {
52112            // empty mount (likely as component), create new root element
52113            isInitialPatch = true;
52114            createElm(vnode, insertedVnodeQueue);
52115        }
52116        else {
52117            var isRealElement = isDef(oldVnode.nodeType);
52118            if (!isRealElement && sameVnode(oldVnode, vnode)) {
52119                // patch existing root node
52120                patchVnode(oldVnode, vnode, insertedVnodeQueue, null, null, removeOnly);
52121            }
52122            else {
52123                if (isRealElement) {
52124                    // mounting to a real element
52125                    // check if this is server-rendered content and if we can perform
52126                    // a successful hydration.
52127                    if (oldVnode.nodeType === 1 && oldVnode.hasAttribute(SSR_ATTR)) {
52128                        oldVnode.removeAttribute(SSR_ATTR);
52129                        hydrating = true;
52130                    }
52131                    if (isTrue(hydrating)) {
52132                        if (hydrate(oldVnode, vnode, insertedVnodeQueue)) {
52133                            invokeInsertHook(vnode, insertedVnodeQueue, true);
52134                            return oldVnode;
52135                        }
52136                        else if (true) {
52137                            warn$2('The client-side rendered virtual DOM tree is not matching ' +
52138                                'server-rendered content. This is likely caused by incorrect ' +
52139                                'HTML markup, for example nesting block-level elements inside ' +
52140                                '<p>, or missing <tbody>. Bailing hydration and performing ' +
52141                                'full client-side render.');
52142                        }
52143                    }
52144                    // either not server-rendered, or hydration failed.
52145                    // create an empty node and replace it
52146                    oldVnode = emptyNodeAt(oldVnode);
52147                }
52148                // replacing existing element
52149                var oldElm = oldVnode.elm;
52150                var parentElm = nodeOps.parentNode(oldElm);
52151                // create new node
52152                createElm(vnode, insertedVnodeQueue, 
52153                // extremely rare edge case: do not insert if old element is in a
52154                // leaving transition. Only happens when combining transition +
52155                // keep-alive + HOCs. (#4590)
52156                oldElm._leaveCb ? null : parentElm, nodeOps.nextSibling(oldElm));
52157                // update parent placeholder node element, recursively
52158                if (isDef(vnode.parent)) {
52159                    var ancestor = vnode.parent;
52160                    var patchable = isPatchable(vnode);
52161                    while (ancestor) {
52162                        for (var i_8 = 0; i_8 < cbs.destroy.length; ++i_8) {
52163                            cbs.destroy[i_8](ancestor);
52164                        }
52165                        ancestor.elm = vnode.elm;
52166                        if (patchable) {
52167                            for (var i_9 = 0; i_9 < cbs.create.length; ++i_9) {
52168                                cbs.create[i_9](emptyNode, ancestor);
52169                            }
52170                            // #6513
52171                            // invoke insert hooks that may have been merged by create hooks.
52172                            // e.g. for directives that uses the "inserted" hook.
52173                            var insert_1 = ancestor.data.hook.insert;
52174                            if (insert_1.merged) {
52175                                // start at index 1 to avoid re-invoking component mounted hook
52176                                // clone insert hooks to avoid being mutated during iteration.
52177                                // e.g. for customed directives under transition group.
52178                                var cloned = insert_1.fns.slice(1);
52179                                for (var i_10 = 0; i_10 < cloned.length; i_10++) {
52180                                    cloned[i_10]();
52181                                }
52182                            }
52183                        }
52184                        else {
52185                            registerRef(ancestor);
52186                        }
52187                        ancestor = ancestor.parent;
52188                    }
52189                }
52190                // destroy old node
52191                if (isDef(parentElm)) {
52192                    removeVnodes([oldVnode], 0, 0);
52193                }
52194                else if (isDef(oldVnode.tag)) {
52195                    invokeDestroyHook(oldVnode);
52196                }
52197            }
52198        }
52199        invokeInsertHook(vnode, insertedVnodeQueue, isInitialPatch);
52200        return vnode.elm;
52201    };
52202}
52203
52204var directives$1 = {
52205    create: updateDirectives,
52206    update: updateDirectives,
52207    destroy: function unbindDirectives(vnode) {
52208        // @ts-expect-error emptyNode is not VNodeWithData
52209        updateDirectives(vnode, emptyNode);
52210    }
52211};
52212function updateDirectives(oldVnode, vnode) {
52213    if (oldVnode.data.directives || vnode.data.directives) {
52214        _update(oldVnode, vnode);
52215    }
52216}
52217function _update(oldVnode, vnode) {
52218    var isCreate = oldVnode === emptyNode;
52219    var isDestroy = vnode === emptyNode;
52220    var oldDirs = normalizeDirectives(oldVnode.data.directives, oldVnode.context);
52221    var newDirs = normalizeDirectives(vnode.data.directives, vnode.context);
52222    var dirsWithInsert = [];
52223    var dirsWithPostpatch = [];
52224    var key, oldDir, dir;
52225    for (key in newDirs) {
52226        oldDir = oldDirs[key];
52227        dir = newDirs[key];
52228        if (!oldDir) {
52229            // new directive, bind
52230            callHook(dir, 'bind', vnode, oldVnode);
52231            if (dir.def && dir.def.inserted) {
52232                dirsWithInsert.push(dir);
52233            }
52234        }
52235        else {
52236            // existing directive, update
52237            dir.oldValue = oldDir.value;
52238            dir.oldArg = oldDir.arg;
52239            callHook(dir, 'update', vnode, oldVnode);
52240            if (dir.def && dir.def.componentUpdated) {
52241                dirsWithPostpatch.push(dir);
52242            }
52243        }
52244    }
52245    if (dirsWithInsert.length) {
52246        var callInsert = function () {
52247            for (var i = 0; i < dirsWithInsert.length; i++) {
52248                callHook(dirsWithInsert[i], 'inserted', vnode, oldVnode);
52249            }
52250        };
52251        if (isCreate) {
52252            mergeVNodeHook(vnode, 'insert', callInsert);
52253        }
52254        else {
52255            callInsert();
52256        }
52257    }
52258    if (dirsWithPostpatch.length) {
52259        mergeVNodeHook(vnode, 'postpatch', function () {
52260            for (var i = 0; i < dirsWithPostpatch.length; i++) {
52261                callHook(dirsWithPostpatch[i], 'componentUpdated', vnode, oldVnode);
52262            }
52263        });
52264    }
52265    if (!isCreate) {
52266        for (key in oldDirs) {
52267            if (!newDirs[key]) {
52268                // no longer present, unbind
52269                callHook(oldDirs[key], 'unbind', oldVnode, oldVnode, isDestroy);
52270            }
52271        }
52272    }
52273}
52274var emptyModifiers = Object.create(null);
52275function normalizeDirectives(dirs, vm) {
52276    var res = Object.create(null);
52277    if (!dirs) {
52278        // $flow-disable-line
52279        return res;
52280    }
52281    var i, dir;
52282    for (i = 0; i < dirs.length; i++) {
52283        dir = dirs[i];
52284        if (!dir.modifiers) {
52285            // $flow-disable-line
52286            dir.modifiers = emptyModifiers;
52287        }
52288        res[getRawDirName(dir)] = dir;
52289        if (vm._setupState && vm._setupState.__sfc) {
52290            var setupDef = dir.def || resolveAsset(vm, '_setupState', 'v-' + dir.name);
52291            if (typeof setupDef === 'function') {
52292                dir.def = {
52293                    bind: setupDef,
52294                    update: setupDef,
52295                };
52296            }
52297            else {
52298                dir.def = setupDef;
52299            }
52300        }
52301        dir.def = dir.def || resolveAsset(vm.$options, 'directives', dir.name, true);
52302    }
52303    // $flow-disable-line
52304    return res;
52305}
52306function getRawDirName(dir) {
52307    return (dir.rawName || "".concat(dir.name, ".").concat(Object.keys(dir.modifiers || {}).join('.')));
52308}
52309function callHook(dir, hook, vnode, oldVnode, isDestroy) {
52310    var fn = dir.def && dir.def[hook];
52311    if (fn) {
52312        try {
52313            fn(vnode.elm, dir, vnode, oldVnode, isDestroy);
52314        }
52315        catch (e) {
52316            handleError(e, vnode.context, "directive ".concat(dir.name, " ").concat(hook, " hook"));
52317        }
52318    }
52319}
52320
52321var baseModules = [ref, directives$1];
52322
52323function updateAttrs(oldVnode, vnode) {
52324    var opts = vnode.componentOptions;
52325    if (isDef(opts) && opts.Ctor.options.inheritAttrs === false) {
52326        return;
52327    }
52328    if (isUndef(oldVnode.data.attrs) && isUndef(vnode.data.attrs)) {
52329        return;
52330    }
52331    var key, cur, old;
52332    var elm = vnode.elm;
52333    var oldAttrs = oldVnode.data.attrs || {};
52334    var attrs = vnode.data.attrs || {};
52335    // clone observed objects, as the user probably wants to mutate it
52336    if (isDef(attrs.__ob__) || isTrue(attrs._v_attr_proxy)) {
52337        attrs = vnode.data.attrs = extend({}, attrs);
52338    }
52339    for (key in attrs) {
52340        cur = attrs[key];
52341        old = oldAttrs[key];
52342        if (old !== cur) {
52343            setAttr(elm, key, cur, vnode.data.pre);
52344        }
52345    }
52346    // #4391: in IE9, setting type can reset value for input[type=radio]
52347    // #6666: IE/Edge forces progress value down to 1 before setting a max
52348    /* istanbul ignore if */
52349    if ((isIE || isEdge) && attrs.value !== oldAttrs.value) {
52350        setAttr(elm, 'value', attrs.value);
52351    }
52352    for (key in oldAttrs) {
52353        if (isUndef(attrs[key])) {
52354            if (isXlink(key)) {
52355                elm.removeAttributeNS(xlinkNS, getXlinkProp(key));
52356            }
52357            else if (!isEnumeratedAttr(key)) {
52358                elm.removeAttribute(key);
52359            }
52360        }
52361    }
52362}
52363function setAttr(el, key, value, isInPre) {
52364    if (isInPre || el.tagName.indexOf('-') > -1) {
52365        baseSetAttr(el, key, value);
52366    }
52367    else if (isBooleanAttr(key)) {
52368        // set attribute for blank value
52369        // e.g. <option disabled>Select one</option>
52370        if (isFalsyAttrValue(value)) {
52371            el.removeAttribute(key);
52372        }
52373        else {
52374            // technically allowfullscreen is a boolean attribute for <iframe>,
52375            // but Flash expects a value of "true" when used on <embed> tag
52376            value = key === 'allowfullscreen' && el.tagName === 'EMBED' ? 'true' : key;
52377            el.setAttribute(key, value);
52378        }
52379    }
52380    else if (isEnumeratedAttr(key)) {
52381        el.setAttribute(key, convertEnumeratedValue(key, value));
52382    }
52383    else if (isXlink(key)) {
52384        if (isFalsyAttrValue(value)) {
52385            el.removeAttributeNS(xlinkNS, getXlinkProp(key));
52386        }
52387        else {
52388            el.setAttributeNS(xlinkNS, key, value);
52389        }
52390    }
52391    else {
52392        baseSetAttr(el, key, value);
52393    }
52394}
52395function baseSetAttr(el, key, value) {
52396    if (isFalsyAttrValue(value)) {
52397        el.removeAttribute(key);
52398    }
52399    else {
52400        // #7138: IE10 & 11 fires input event when setting placeholder on
52401        // <textarea>... block the first input event and remove the blocker
52402        // immediately.
52403        /* istanbul ignore if */
52404        if (isIE &&
52405            !isIE9 &&
52406            el.tagName === 'TEXTAREA' &&
52407            key === 'placeholder' &&
52408            value !== '' &&
52409            !el.__ieph) {
52410            var blocker_1 = function (e) {
52411                e.stopImmediatePropagation();
52412                el.removeEventListener('input', blocker_1);
52413            };
52414            el.addEventListener('input', blocker_1);
52415            // $flow-disable-line
52416            el.__ieph = true; /* IE placeholder patched */
52417        }
52418        el.setAttribute(key, value);
52419    }
52420}
52421var attrs = {
52422    create: updateAttrs,
52423    update: updateAttrs
52424};
52425
52426function updateClass(oldVnode, vnode) {
52427    var el = vnode.elm;
52428    var data = vnode.data;
52429    var oldData = oldVnode.data;
52430    if (isUndef(data.staticClass) &&
52431        isUndef(data.class) &&
52432        (isUndef(oldData) ||
52433            (isUndef(oldData.staticClass) && isUndef(oldData.class)))) {
52434        return;
52435    }
52436    var cls = genClassForVnode(vnode);
52437    // handle transition classes
52438    var transitionClass = el._transitionClasses;
52439    if (isDef(transitionClass)) {
52440        cls = concat(cls, stringifyClass(transitionClass));
52441    }
52442    // set the class
52443    if (cls !== el._prevClass) {
52444        el.setAttribute('class', cls);
52445        el._prevClass = cls;
52446    }
52447}
52448var klass$1 = {
52449    create: updateClass,
52450    update: updateClass
52451};
52452
52453var validDivisionCharRE = /[\w).+\-_$\]]/;
52454function parseFilters(exp) {
52455    var inSingle = false;
52456    var inDouble = false;
52457    var inTemplateString = false;
52458    var inRegex = false;
52459    var curly = 0;
52460    var square = 0;
52461    var paren = 0;
52462    var lastFilterIndex = 0;
52463    var c, prev, i, expression, filters;
52464    for (i = 0; i < exp.length; i++) {
52465        prev = c;
52466        c = exp.charCodeAt(i);
52467        if (inSingle) {
52468            if (c === 0x27 && prev !== 0x5c)
52469                inSingle = false;
52470        }
52471        else if (inDouble) {
52472            if (c === 0x22 && prev !== 0x5c)
52473                inDouble = false;
52474        }
52475        else if (inTemplateString) {
52476            if (c === 0x60 && prev !== 0x5c)
52477                inTemplateString = false;
52478        }
52479        else if (inRegex) {
52480            if (c === 0x2f && prev !== 0x5c)
52481                inRegex = false;
52482        }
52483        else if (c === 0x7c && // pipe
52484            exp.charCodeAt(i + 1) !== 0x7c &&
52485            exp.charCodeAt(i - 1) !== 0x7c &&
52486            !curly &&
52487            !square &&
52488            !paren) {
52489            if (expression === undefined) {
52490                // first filter, end of expression
52491                lastFilterIndex = i + 1;
52492                expression = exp.slice(0, i).trim();
52493            }
52494            else {
52495                pushFilter();
52496            }
52497        }
52498        else {
52499            switch (c) {
52500                case 0x22:
52501                    inDouble = true;
52502                    break; // "
52503                case 0x27:
52504                    inSingle = true;
52505                    break; // '
52506                case 0x60:
52507                    inTemplateString = true;
52508                    break; // `
52509                case 0x28:
52510                    paren++;
52511                    break; // (
52512                case 0x29:
52513                    paren--;
52514                    break; // )
52515                case 0x5b:
52516                    square++;
52517                    break; // [
52518                case 0x5d:
52519                    square--;
52520                    break; // ]
52521                case 0x7b:
52522                    curly++;
52523                    break; // {
52524                case 0x7d:
52525                    curly--;
52526                    break; // }
52527            }
52528            if (c === 0x2f) {
52529                // /
52530                var j = i - 1;
52531                var p 
52532                // find first non-whitespace prev char
52533                = void 0;
52534                // find first non-whitespace prev char
52535                for (; j >= 0; j--) {
52536                    p = exp.charAt(j);
52537                    if (p !== ' ')
52538                        break;
52539                }
52540                if (!p || !validDivisionCharRE.test(p)) {
52541                    inRegex = true;
52542                }
52543            }
52544        }
52545    }
52546    if (expression === undefined) {
52547        expression = exp.slice(0, i).trim();
52548    }
52549    else if (lastFilterIndex !== 0) {
52550        pushFilter();
52551    }
52552    function pushFilter() {
52553        (filters || (filters = [])).push(exp.slice(lastFilterIndex, i).trim());
52554        lastFilterIndex = i + 1;
52555    }
52556    if (filters) {
52557        for (i = 0; i < filters.length; i++) {
52558            expression = wrapFilter(expression, filters[i]);
52559        }
52560    }
52561    return expression;
52562}
52563function wrapFilter(exp, filter) {
52564    var i = filter.indexOf('(');
52565    if (i < 0) {
52566        // _f: resolveFilter
52567        return "_f(\"".concat(filter, "\")(").concat(exp, ")");
52568    }
52569    else {
52570        var name_1 = filter.slice(0, i);
52571        var args = filter.slice(i + 1);
52572        return "_f(\"".concat(name_1, "\")(").concat(exp).concat(args !== ')' ? ',' + args : args);
52573    }
52574}
52575
52576/* eslint-disable no-unused-vars */
52577function baseWarn(msg, range) {
52578    console.error("[Vue compiler]: ".concat(msg));
52579}
52580/* eslint-enable no-unused-vars */
52581function pluckModuleFunction(modules, key) {
52582    return modules ? modules.map(function (m) { return m[key]; }).filter(function (_) { return _; }) : [];
52583}
52584function addProp(el, name, value, range, dynamic) {
52585    (el.props || (el.props = [])).push(rangeSetItem({ name: name, value: value, dynamic: dynamic }, range));
52586    el.plain = false;
52587}
52588function addAttr(el, name, value, range, dynamic) {
52589    var attrs = dynamic
52590        ? el.dynamicAttrs || (el.dynamicAttrs = [])
52591        : el.attrs || (el.attrs = []);
52592    attrs.push(rangeSetItem({ name: name, value: value, dynamic: dynamic }, range));
52593    el.plain = false;
52594}
52595// add a raw attr (use this in preTransforms)
52596function addRawAttr(el, name, value, range) {
52597    el.attrsMap[name] = value;
52598    el.attrsList.push(rangeSetItem({ name: name, value: value }, range));
52599}
52600function addDirective(el, name, rawName, value, arg, isDynamicArg, modifiers, range) {
52601    (el.directives || (el.directives = [])).push(rangeSetItem({
52602        name: name,
52603        rawName: rawName,
52604        value: value,
52605        arg: arg,
52606        isDynamicArg: isDynamicArg,
52607        modifiers: modifiers
52608    }, range));
52609    el.plain = false;
52610}
52611function prependModifierMarker(symbol, name, dynamic) {
52612    return dynamic ? "_p(".concat(name, ",\"").concat(symbol, "\")") : symbol + name; // mark the event as captured
52613}
52614function addHandler(el, name, value, modifiers, important, warn, range, dynamic) {
52615    modifiers = modifiers || emptyObject;
52616    // warn prevent and passive modifier
52617    /* istanbul ignore if */
52618    if ( true && warn && modifiers.prevent && modifiers.passive) {
52619        warn("passive and prevent can't be used together. " +
52620            "Passive handler can't prevent default event.", range);
52621    }
52622    // normalize click.right and click.middle since they don't actually fire
52623    // this is technically browser-specific, but at least for now browsers are
52624    // the only target envs that have right/middle clicks.
52625    if (modifiers.right) {
52626        if (dynamic) {
52627            name = "(".concat(name, ")==='click'?'contextmenu':(").concat(name, ")");
52628        }
52629        else if (name === 'click') {
52630            name = 'contextmenu';
52631            delete modifiers.right;
52632        }
52633    }
52634    else if (modifiers.middle) {
52635        if (dynamic) {
52636            name = "(".concat(name, ")==='click'?'mouseup':(").concat(name, ")");
52637        }
52638        else if (name === 'click') {
52639            name = 'mouseup';
52640        }
52641    }
52642    // check capture modifier
52643    if (modifiers.capture) {
52644        delete modifiers.capture;
52645        name = prependModifierMarker('!', name, dynamic);
52646    }
52647    if (modifiers.once) {
52648        delete modifiers.once;
52649        name = prependModifierMarker('~', name, dynamic);
52650    }
52651    /* istanbul ignore if */
52652    if (modifiers.passive) {
52653        delete modifiers.passive;
52654        name = prependModifierMarker('&', name, dynamic);
52655    }
52656    var events;
52657    if (modifiers.native) {
52658        delete modifiers.native;
52659        events = el.nativeEvents || (el.nativeEvents = {});
52660    }
52661    else {
52662        events = el.events || (el.events = {});
52663    }
52664    var newHandler = rangeSetItem({ value: value.trim(), dynamic: dynamic }, range);
52665    if (modifiers !== emptyObject) {
52666        newHandler.modifiers = modifiers;
52667    }
52668    var handlers = events[name];
52669    /* istanbul ignore if */
52670    if (Array.isArray(handlers)) {
52671        important ? handlers.unshift(newHandler) : handlers.push(newHandler);
52672    }
52673    else if (handlers) {
52674        events[name] = important ? [newHandler, handlers] : [handlers, newHandler];
52675    }
52676    else {
52677        events[name] = newHandler;
52678    }
52679    el.plain = false;
52680}
52681function getRawBindingAttr(el, name) {
52682    return (el.rawAttrsMap[':' + name] ||
52683        el.rawAttrsMap['v-bind:' + name] ||
52684        el.rawAttrsMap[name]);
52685}
52686function getBindingAttr(el, name, getStatic) {
52687    var dynamicValue = getAndRemoveAttr(el, ':' + name) || getAndRemoveAttr(el, 'v-bind:' + name);
52688    if (dynamicValue != null) {
52689        return parseFilters(dynamicValue);
52690    }
52691    else if (getStatic !== false) {
52692        var staticValue = getAndRemoveAttr(el, name);
52693        if (staticValue != null) {
52694            return JSON.stringify(staticValue);
52695        }
52696    }
52697}
52698// note: this only removes the attr from the Array (attrsList) so that it
52699// doesn't get processed by processAttrs.
52700// By default it does NOT remove it from the map (attrsMap) because the map is
52701// needed during codegen.
52702function getAndRemoveAttr(el, name, removeFromMap) {
52703    var val;
52704    if ((val = el.attrsMap[name]) != null) {
52705        var list = el.attrsList;
52706        for (var i = 0, l = list.length; i < l; i++) {
52707            if (list[i].name === name) {
52708                list.splice(i, 1);
52709                break;
52710            }
52711        }
52712    }
52713    if (removeFromMap) {
52714        delete el.attrsMap[name];
52715    }
52716    return val;
52717}
52718function getAndRemoveAttrByRegex(el, name) {
52719    var list = el.attrsList;
52720    for (var i = 0, l = list.length; i < l; i++) {
52721        var attr = list[i];
52722        if (name.test(attr.name)) {
52723            list.splice(i, 1);
52724            return attr;
52725        }
52726    }
52727}
52728function rangeSetItem(item, range) {
52729    if (range) {
52730        if (range.start != null) {
52731            item.start = range.start;
52732        }
52733        if (range.end != null) {
52734            item.end = range.end;
52735        }
52736    }
52737    return item;
52738}
52739
52740/**
52741 * Cross-platform code generation for component v-model
52742 */
52743function genComponentModel(el, value, modifiers) {
52744    var _a = modifiers || {}, number = _a.number, trim = _a.trim;
52745    var baseValueExpression = '$$v';
52746    var valueExpression = baseValueExpression;
52747    if (trim) {
52748        valueExpression =
52749            "(typeof ".concat(baseValueExpression, " === 'string'") +
52750                "? ".concat(baseValueExpression, ".trim()") +
52751                ": ".concat(baseValueExpression, ")");
52752    }
52753    if (number) {
52754        valueExpression = "_n(".concat(valueExpression, ")");
52755    }
52756    var assignment = genAssignmentCode(value, valueExpression);
52757    el.model = {
52758        value: "(".concat(value, ")"),
52759        expression: JSON.stringify(value),
52760        callback: "function (".concat(baseValueExpression, ") {").concat(assignment, "}")
52761    };
52762}
52763/**
52764 * Cross-platform codegen helper for generating v-model value assignment code.
52765 */
52766function genAssignmentCode(value, assignment) {
52767    var res = parseModel(value);
52768    if (res.key === null) {
52769        return "".concat(value, "=").concat(assignment);
52770    }
52771    else {
52772        return "$set(".concat(res.exp, ", ").concat(res.key, ", ").concat(assignment, ")");
52773    }
52774}
52775/**
52776 * Parse a v-model expression into a base path and a final key segment.
52777 * Handles both dot-path and possible square brackets.
52778 *
52779 * Possible cases:
52780 *
52781 * - test
52782 * - test[key]
52783 * - test[test1[key]]
52784 * - test["a"][key]
52785 * - xxx.test[a[a].test1[key]]
52786 * - test.xxx.a["asa"][test1[key]]
52787 *
52788 */
52789var len, str, chr, index, expressionPos, expressionEndPos;
52790function parseModel(val) {
52791    // Fix https://github.com/vuejs/vue/pull/7730
52792    // allow v-model="obj.val " (trailing whitespace)
52793    val = val.trim();
52794    len = val.length;
52795    if (val.indexOf('[') < 0 || val.lastIndexOf(']') < len - 1) {
52796        index = val.lastIndexOf('.');
52797        if (index > -1) {
52798            return {
52799                exp: val.slice(0, index),
52800                key: '"' + val.slice(index + 1) + '"'
52801            };
52802        }
52803        else {
52804            return {
52805                exp: val,
52806                key: null
52807            };
52808        }
52809    }
52810    str = val;
52811    index = expressionPos = expressionEndPos = 0;
52812    while (!eof()) {
52813        chr = next();
52814        /* istanbul ignore if */
52815        if (isStringStart(chr)) {
52816            parseString(chr);
52817        }
52818        else if (chr === 0x5b) {
52819            parseBracket(chr);
52820        }
52821    }
52822    return {
52823        exp: val.slice(0, expressionPos),
52824        key: val.slice(expressionPos + 1, expressionEndPos)
52825    };
52826}
52827function next() {
52828    return str.charCodeAt(++index);
52829}
52830function eof() {
52831    return index >= len;
52832}
52833function isStringStart(chr) {
52834    return chr === 0x22 || chr === 0x27;
52835}
52836function parseBracket(chr) {
52837    var inBracket = 1;
52838    expressionPos = index;
52839    while (!eof()) {
52840        chr = next();
52841        if (isStringStart(chr)) {
52842            parseString(chr);
52843            continue;
52844        }
52845        if (chr === 0x5b)
52846            inBracket++;
52847        if (chr === 0x5d)
52848            inBracket--;
52849        if (inBracket === 0) {
52850            expressionEndPos = index;
52851            break;
52852        }
52853    }
52854}
52855function parseString(chr) {
52856    var stringQuote = chr;
52857    while (!eof()) {
52858        chr = next();
52859        if (chr === stringQuote) {
52860            break;
52861        }
52862    }
52863}
52864
52865var warn$1;
52866// in some cases, the event used has to be determined at runtime
52867// so we used some reserved tokens during compile.
52868var RANGE_TOKEN = '__r';
52869var CHECKBOX_RADIO_TOKEN = '__c';
52870function model$1(el, dir, _warn) {
52871    warn$1 = _warn;
52872    var value = dir.value;
52873    var modifiers = dir.modifiers;
52874    var tag = el.tag;
52875    var type = el.attrsMap.type;
52876    if (true) {
52877        // inputs with type="file" are read only and setting the input's
52878        // value will throw an error.
52879        if (tag === 'input' && type === 'file') {
52880            warn$1("<".concat(el.tag, " v-model=\"").concat(value, "\" type=\"file\">:\n") +
52881                "File inputs are read only. Use a v-on:change listener instead.", el.rawAttrsMap['v-model']);
52882        }
52883    }
52884    if (el.component) {
52885        genComponentModel(el, value, modifiers);
52886        // component v-model doesn't need extra runtime
52887        return false;
52888    }
52889    else if (tag === 'select') {
52890        genSelect(el, value, modifiers);
52891    }
52892    else if (tag === 'input' && type === 'checkbox') {
52893        genCheckboxModel(el, value, modifiers);
52894    }
52895    else if (tag === 'input' && type === 'radio') {
52896        genRadioModel(el, value, modifiers);
52897    }
52898    else if (tag === 'input' || tag === 'textarea') {
52899        genDefaultModel(el, value, modifiers);
52900    }
52901    else if (!config.isReservedTag(tag)) {
52902        genComponentModel(el, value, modifiers);
52903        // component v-model doesn't need extra runtime
52904        return false;
52905    }
52906    else if (true) {
52907        warn$1("<".concat(el.tag, " v-model=\"").concat(value, "\">: ") +
52908            "v-model is not supported on this element type. " +
52909            "If you are working with contenteditable, it's recommended to " +
52910            'wrap a library dedicated for that purpose inside a custom component.', el.rawAttrsMap['v-model']);
52911    }
52912    // ensure runtime directive metadata
52913    return true;
52914}
52915function genCheckboxModel(el, value, modifiers) {
52916    var number = modifiers && modifiers.number;
52917    var valueBinding = getBindingAttr(el, 'value') || 'null';
52918    var trueValueBinding = getBindingAttr(el, 'true-value') || 'true';
52919    var falseValueBinding = getBindingAttr(el, 'false-value') || 'false';
52920    addProp(el, 'checked', "Array.isArray(".concat(value, ")") +
52921        "?_i(".concat(value, ",").concat(valueBinding, ")>-1") +
52922        (trueValueBinding === 'true'
52923            ? ":(".concat(value, ")")
52924            : ":_q(".concat(value, ",").concat(trueValueBinding, ")")));
52925    addHandler(el, 'change', "var $$a=".concat(value, ",") +
52926        '$$el=$event.target,' +
52927        "$$c=$$el.checked?(".concat(trueValueBinding, "):(").concat(falseValueBinding, ");") +
52928        'if(Array.isArray($$a)){' +
52929        "var $$v=".concat(number ? '_n(' + valueBinding + ')' : valueBinding, ",") +
52930        '$$i=_i($$a,$$v);' +
52931        "if($$el.checked){$$i<0&&(".concat(genAssignmentCode(value, '$$a.concat([$$v])'), ")}") +
52932        "else{$$i>-1&&(".concat(genAssignmentCode(value, '$$a.slice(0,$$i).concat($$a.slice($$i+1))'), ")}") +
52933        "}else{".concat(genAssignmentCode(value, '$$c'), "}"), null, true);
52934}
52935function genRadioModel(el, value, modifiers) {
52936    var number = modifiers && modifiers.number;
52937    var valueBinding = getBindingAttr(el, 'value') || 'null';
52938    valueBinding = number ? "_n(".concat(valueBinding, ")") : valueBinding;
52939    addProp(el, 'checked', "_q(".concat(value, ",").concat(valueBinding, ")"));
52940    addHandler(el, 'change', genAssignmentCode(value, valueBinding), null, true);
52941}
52942function genSelect(el, value, modifiers) {
52943    var number = modifiers && modifiers.number;
52944    var selectedVal = "Array.prototype.filter" +
52945        ".call($event.target.options,function(o){return o.selected})" +
52946        ".map(function(o){var val = \"_value\" in o ? o._value : o.value;" +
52947        "return ".concat(number ? '_n(val)' : 'val', "})");
52948    var assignment = '$event.target.multiple ? $$selectedVal : $$selectedVal[0]';
52949    var code = "var $$selectedVal = ".concat(selectedVal, ";");
52950    code = "".concat(code, " ").concat(genAssignmentCode(value, assignment));
52951    addHandler(el, 'change', code, null, true);
52952}
52953function genDefaultModel(el, value, modifiers) {
52954    var type = el.attrsMap.type;
52955    // warn if v-bind:value conflicts with v-model
52956    // except for inputs with v-bind:type
52957    if (true) {
52958        var value_1 = el.attrsMap['v-bind:value'] || el.attrsMap[':value'];
52959        var typeBinding = el.attrsMap['v-bind:type'] || el.attrsMap[':type'];
52960        if (value_1 && !typeBinding) {
52961            var binding = el.attrsMap['v-bind:value'] ? 'v-bind:value' : ':value';
52962            warn$1("".concat(binding, "=\"").concat(value_1, "\" conflicts with v-model on the same element ") +
52963                'because the latter already expands to a value binding internally', el.rawAttrsMap[binding]);
52964        }
52965    }
52966    var _a = modifiers || {}, lazy = _a.lazy, number = _a.number, trim = _a.trim;
52967    var needCompositionGuard = !lazy && type !== 'range';
52968    var event = lazy ? 'change' : type === 'range' ? RANGE_TOKEN : 'input';
52969    var valueExpression = '$event.target.value';
52970    if (trim) {
52971        valueExpression = "$event.target.value.trim()";
52972    }
52973    if (number) {
52974        valueExpression = "_n(".concat(valueExpression, ")");
52975    }
52976    var code = genAssignmentCode(value, valueExpression);
52977    if (needCompositionGuard) {
52978        code = "if($event.target.composing)return;".concat(code);
52979    }
52980    addProp(el, 'value', "(".concat(value, ")"));
52981    addHandler(el, event, code, null, true);
52982    if (trim || number) {
52983        addHandler(el, 'blur', '$forceUpdate()');
52984    }
52985}
52986
52987// normalize v-model event tokens that can only be determined at runtime.
52988// it's important to place the event as the first in the array because
52989// the whole point is ensuring the v-model callback gets called before
52990// user-attached handlers.
52991function normalizeEvents(on) {
52992    /* istanbul ignore if */
52993    if (isDef(on[RANGE_TOKEN])) {
52994        // IE input[type=range] only supports `change` event
52995        var event_1 = isIE ? 'change' : 'input';
52996        on[event_1] = [].concat(on[RANGE_TOKEN], on[event_1] || []);
52997        delete on[RANGE_TOKEN];
52998    }
52999    // This was originally intended to fix #4521 but no longer necessary
53000    // after 2.5. Keeping it for backwards compat with generated code from < 2.4
53001    /* istanbul ignore if */
53002    if (isDef(on[CHECKBOX_RADIO_TOKEN])) {
53003        on.change = [].concat(on[CHECKBOX_RADIO_TOKEN], on.change || []);
53004        delete on[CHECKBOX_RADIO_TOKEN];
53005    }
53006}
53007var target;
53008function createOnceHandler(event, handler, capture) {
53009    var _target = target; // save current target element in closure
53010    return function onceHandler() {
53011        var res = handler.apply(null, arguments);
53012        if (res !== null) {
53013            remove(event, onceHandler, capture, _target);
53014        }
53015    };
53016}
53017// #9446: Firefox <= 53 (in particular, ESR 52) has incorrect Event.timeStamp
53018// implementation and does not fire microtasks in between event propagation, so
53019// safe to exclude.
53020var useMicrotaskFix = isUsingMicroTask && !(isFF && Number(isFF[1]) <= 53);
53021function add(name, handler, capture, passive) {
53022    // async edge case #6566: inner click event triggers patch, event handler
53023    // attached to outer element during patch, and triggered again. This
53024    // happens because browsers fire microtask ticks between event propagation.
53025    // the solution is simple: we save the timestamp when a handler is attached,
53026    // and the handler would only fire if the event passed to it was fired
53027    // AFTER it was attached.
53028    if (useMicrotaskFix) {
53029        var attachedTimestamp_1 = currentFlushTimestamp;
53030        var original_1 = handler;
53031        //@ts-expect-error
53032        handler = original_1._wrapper = function (e) {
53033            if (
53034            // no bubbling, should always fire.
53035            // this is just a safety net in case event.timeStamp is unreliable in
53036            // certain weird environments...
53037            e.target === e.currentTarget ||
53038                // event is fired after handler attachment
53039                e.timeStamp >= attachedTimestamp_1 ||
53040                // bail for environments that have buggy event.timeStamp implementations
53041                // #9462 iOS 9 bug: event.timeStamp is 0 after history.pushState
53042                // #9681 QtWebEngine event.timeStamp is negative value
53043                e.timeStamp <= 0 ||
53044                // #9448 bail if event is fired in another document in a multi-page
53045                // electron/nw.js app, since event.timeStamp will be using a different
53046                // starting reference
53047                e.target.ownerDocument !== document) {
53048                return original_1.apply(this, arguments);
53049            }
53050        };
53051    }
53052    target.addEventListener(name, handler, supportsPassive ? { capture: capture, passive: passive } : capture);
53053}
53054function remove(name, handler, capture, _target) {
53055    (_target || target).removeEventListener(name, 
53056    //@ts-expect-error
53057    handler._wrapper || handler, capture);
53058}
53059function updateDOMListeners(oldVnode, vnode) {
53060    if (isUndef(oldVnode.data.on) && isUndef(vnode.data.on)) {
53061        return;
53062    }
53063    var on = vnode.data.on || {};
53064    var oldOn = oldVnode.data.on || {};
53065    // vnode is empty when removing all listeners,
53066    // and use old vnode dom element
53067    target = vnode.elm || oldVnode.elm;
53068    normalizeEvents(on);
53069    updateListeners(on, oldOn, add, remove, createOnceHandler, vnode.context);
53070    target = undefined;
53071}
53072var events = {
53073    create: updateDOMListeners,
53074    update: updateDOMListeners,
53075    // @ts-expect-error emptyNode has actually data
53076    destroy: function (vnode) { return updateDOMListeners(vnode, emptyNode); }
53077};
53078
53079var svgContainer;
53080function updateDOMProps(oldVnode, vnode) {
53081    if (isUndef(oldVnode.data.domProps) && isUndef(vnode.data.domProps)) {
53082        return;
53083    }
53084    var key, cur;
53085    var elm = vnode.elm;
53086    var oldProps = oldVnode.data.domProps || {};
53087    var props = vnode.data.domProps || {};
53088    // clone observed objects, as the user probably wants to mutate it
53089    if (isDef(props.__ob__) || isTrue(props._v_attr_proxy)) {
53090        props = vnode.data.domProps = extend({}, props);
53091    }
53092    for (key in oldProps) {
53093        if (!(key in props)) {
53094            elm[key] = '';
53095        }
53096    }
53097    for (key in props) {
53098        cur = props[key];
53099        // ignore children if the node has textContent or innerHTML,
53100        // as these will throw away existing DOM nodes and cause removal errors
53101        // on subsequent patches (#3360)
53102        if (key === 'textContent' || key === 'innerHTML') {
53103            if (vnode.children)
53104                vnode.children.length = 0;
53105            if (cur === oldProps[key])
53106                continue;
53107            // #6601 work around Chrome version <= 55 bug where single textNode
53108            // replaced by innerHTML/textContent retains its parentNode property
53109            if (elm.childNodes.length === 1) {
53110                elm.removeChild(elm.childNodes[0]);
53111            }
53112        }
53113        if (key === 'value' && elm.tagName !== 'PROGRESS') {
53114            // store value as _value as well since
53115            // non-string values will be stringified
53116            elm._value = cur;
53117            // avoid resetting cursor position when value is the same
53118            var strCur = isUndef(cur) ? '' : String(cur);
53119            if (shouldUpdateValue(elm, strCur)) {
53120                elm.value = strCur;
53121            }
53122        }
53123        else if (key === 'innerHTML' &&
53124            isSVG(elm.tagName) &&
53125            isUndef(elm.innerHTML)) {
53126            // IE doesn't support innerHTML for SVG elements
53127            svgContainer = svgContainer || document.createElement('div');
53128            svgContainer.innerHTML = "<svg>".concat(cur, "</svg>");
53129            var svg = svgContainer.firstChild;
53130            while (elm.firstChild) {
53131                elm.removeChild(elm.firstChild);
53132            }
53133            while (svg.firstChild) {
53134                elm.appendChild(svg.firstChild);
53135            }
53136        }
53137        else if (
53138        // skip the update if old and new VDOM state is the same.
53139        // `value` is handled separately because the DOM value may be temporarily
53140        // out of sync with VDOM state due to focus, composition and modifiers.
53141        // This  #4521 by skipping the unnecessary `checked` update.
53142        cur !== oldProps[key]) {
53143            // some property updates can throw
53144            // e.g. `value` on <progress> w/ non-finite value
53145            try {
53146                elm[key] = cur;
53147            }
53148            catch (e) { }
53149        }
53150    }
53151}
53152function shouldUpdateValue(elm, checkVal) {
53153    return (
53154    //@ts-expect-error
53155    !elm.composing &&
53156        (elm.tagName === 'OPTION' ||
53157            isNotInFocusAndDirty(elm, checkVal) ||
53158            isDirtyWithModifiers(elm, checkVal)));
53159}
53160function isNotInFocusAndDirty(elm, checkVal) {
53161    // return true when textbox (.number and .trim) loses focus and its value is
53162    // not equal to the updated value
53163    var notInFocus = true;
53164    // #6157
53165    // work around IE bug when accessing document.activeElement in an iframe
53166    try {
53167        notInFocus = document.activeElement !== elm;
53168    }
53169    catch (e) { }
53170    return notInFocus && elm.value !== checkVal;
53171}
53172function isDirtyWithModifiers(elm, newVal) {
53173    var value = elm.value;
53174    var modifiers = elm._vModifiers; // injected by v-model runtime
53175    if (isDef(modifiers)) {
53176        if (modifiers.number) {
53177            return toNumber(value) !== toNumber(newVal);
53178        }
53179        if (modifiers.trim) {
53180            return value.trim() !== newVal.trim();
53181        }
53182    }
53183    return value !== newVal;
53184}
53185var domProps = {
53186    create: updateDOMProps,
53187    update: updateDOMProps
53188};
53189
53190var parseStyleText = cached(function (cssText) {
53191    var res = {};
53192    var listDelimiter = /;(?![^(]*\))/g;
53193    var propertyDelimiter = /:(.+)/;
53194    cssText.split(listDelimiter).forEach(function (item) {
53195        if (item) {
53196            var tmp = item.split(propertyDelimiter);
53197            tmp.length > 1 && (res[tmp[0].trim()] = tmp[1].trim());
53198        }
53199    });
53200    return res;
53201});
53202// merge static and dynamic style data on the same vnode
53203function normalizeStyleData(data) {
53204    var style = normalizeStyleBinding(data.style);
53205    // static style is pre-processed into an object during compilation
53206    // and is always a fresh object, so it's safe to merge into it
53207    return data.staticStyle ? extend(data.staticStyle, style) : style;
53208}
53209// normalize possible array / string values into Object
53210function normalizeStyleBinding(bindingStyle) {
53211    if (Array.isArray(bindingStyle)) {
53212        return toObject(bindingStyle);
53213    }
53214    if (typeof bindingStyle === 'string') {
53215        return parseStyleText(bindingStyle);
53216    }
53217    return bindingStyle;
53218}
53219/**
53220 * parent component style should be after child's
53221 * so that parent component's style could override it
53222 */
53223function getStyle(vnode, checkChild) {
53224    var res = {};
53225    var styleData;
53226    if (checkChild) {
53227        var childNode = vnode;
53228        while (childNode.componentInstance) {
53229            childNode = childNode.componentInstance._vnode;
53230            if (childNode &&
53231                childNode.data &&
53232                (styleData = normalizeStyleData(childNode.data))) {
53233                extend(res, styleData);
53234            }
53235        }
53236    }
53237    if ((styleData = normalizeStyleData(vnode.data))) {
53238        extend(res, styleData);
53239    }
53240    var parentNode = vnode;
53241    // @ts-expect-error parentNode.parent not VNodeWithData
53242    while ((parentNode = parentNode.parent)) {
53243        if (parentNode.data && (styleData = normalizeStyleData(parentNode.data))) {
53244            extend(res, styleData);
53245        }
53246    }
53247    return res;
53248}
53249
53250var cssVarRE = /^--/;
53251var importantRE = /\s*!important$/;
53252var setProp = function (el, name, val) {
53253    /* istanbul ignore if */
53254    if (cssVarRE.test(name)) {
53255        el.style.setProperty(name, val);
53256    }
53257    else if (importantRE.test(val)) {
53258        el.style.setProperty(hyphenate(name), val.replace(importantRE, ''), 'important');
53259    }
53260    else {
53261        var normalizedName = normalize(name);
53262        if (Array.isArray(val)) {
53263            // Support values array created by autoprefixer, e.g.
53264            // {display: ["-webkit-box", "-ms-flexbox", "flex"]}
53265            // Set them one by one, and the browser will only set those it can recognize
53266            for (var i = 0, len = val.length; i < len; i++) {
53267                el.style[normalizedName] = val[i];
53268            }
53269        }
53270        else {
53271            el.style[normalizedName] = val;
53272        }
53273    }
53274};
53275var vendorNames = ['Webkit', 'Moz', 'ms'];
53276var emptyStyle;
53277var normalize = cached(function (prop) {
53278    emptyStyle = emptyStyle || document.createElement('div').style;
53279    prop = camelize(prop);
53280    if (prop !== 'filter' && prop in emptyStyle) {
53281        return prop;
53282    }
53283    var capName = prop.charAt(0).toUpperCase() + prop.slice(1);
53284    for (var i = 0; i < vendorNames.length; i++) {
53285        var name_1 = vendorNames[i] + capName;
53286        if (name_1 in emptyStyle) {
53287            return name_1;
53288        }
53289    }
53290});
53291function updateStyle(oldVnode, vnode) {
53292    var data = vnode.data;
53293    var oldData = oldVnode.data;
53294    if (isUndef(data.staticStyle) &&
53295        isUndef(data.style) &&
53296        isUndef(oldData.staticStyle) &&
53297        isUndef(oldData.style)) {
53298        return;
53299    }
53300    var cur, name;
53301    var el = vnode.elm;
53302    var oldStaticStyle = oldData.staticStyle;
53303    var oldStyleBinding = oldData.normalizedStyle || oldData.style || {};
53304    // if static style exists, stylebinding already merged into it when doing normalizeStyleData
53305    var oldStyle = oldStaticStyle || oldStyleBinding;
53306    var style = normalizeStyleBinding(vnode.data.style) || {};
53307    // store normalized style under a different key for next diff
53308    // make sure to clone it if it's reactive, since the user likely wants
53309    // to mutate it.
53310    vnode.data.normalizedStyle = isDef(style.__ob__) ? extend({}, style) : style;
53311    var newStyle = getStyle(vnode, true);
53312    for (name in oldStyle) {
53313        if (isUndef(newStyle[name])) {
53314            setProp(el, name, '');
53315        }
53316    }
53317    for (name in newStyle) {
53318        cur = newStyle[name];
53319        // ie9 setting to null has no effect, must use empty string
53320        setProp(el, name, cur == null ? '' : cur);
53321    }
53322}
53323var style$1 = {
53324    create: updateStyle,
53325    update: updateStyle
53326};
53327
53328var whitespaceRE$1 = /\s+/;
53329/**
53330 * Add class with compatibility for SVG since classList is not supported on
53331 * SVG elements in IE
53332 */
53333function addClass(el, cls) {
53334    /* istanbul ignore if */
53335    if (!cls || !(cls = cls.trim())) {
53336        return;
53337    }
53338    /* istanbul ignore else */
53339    if (el.classList) {
53340        if (cls.indexOf(' ') > -1) {
53341            cls.split(whitespaceRE$1).forEach(function (c) { return el.classList.add(c); });
53342        }
53343        else {
53344            el.classList.add(cls);
53345        }
53346    }
53347    else {
53348        var cur = " ".concat(el.getAttribute('class') || '', " ");
53349        if (cur.indexOf(' ' + cls + ' ') < 0) {
53350            el.setAttribute('class', (cur + cls).trim());
53351        }
53352    }
53353}
53354/**
53355 * Remove class with compatibility for SVG since classList is not supported on
53356 * SVG elements in IE
53357 */
53358function removeClass(el, cls) {
53359    /* istanbul ignore if */
53360    if (!cls || !(cls = cls.trim())) {
53361        return;
53362    }
53363    /* istanbul ignore else */
53364    if (el.classList) {
53365        if (cls.indexOf(' ') > -1) {
53366            cls.split(whitespaceRE$1).forEach(function (c) { return el.classList.remove(c); });
53367        }
53368        else {
53369            el.classList.remove(cls);
53370        }
53371        if (!el.classList.length) {
53372            el.removeAttribute('class');
53373        }
53374    }
53375    else {
53376        var cur = " ".concat(el.getAttribute('class') || '', " ");
53377        var tar = ' ' + cls + ' ';
53378        while (cur.indexOf(tar) >= 0) {
53379            cur = cur.replace(tar, ' ');
53380        }
53381        cur = cur.trim();
53382        if (cur) {
53383            el.setAttribute('class', cur);
53384        }
53385        else {
53386            el.removeAttribute('class');
53387        }
53388    }
53389}
53390
53391function resolveTransition(def) {
53392    if (!def) {
53393        return;
53394    }
53395    /* istanbul ignore else */
53396    if (typeof def === 'object') {
53397        var res = {};
53398        if (def.css !== false) {
53399            extend(res, autoCssTransition(def.name || 'v'));
53400        }
53401        extend(res, def);
53402        return res;
53403    }
53404    else if (typeof def === 'string') {
53405        return autoCssTransition(def);
53406    }
53407}
53408var autoCssTransition = cached(function (name) {
53409    return {
53410        enterClass: "".concat(name, "-enter"),
53411        enterToClass: "".concat(name, "-enter-to"),
53412        enterActiveClass: "".concat(name, "-enter-active"),
53413        leaveClass: "".concat(name, "-leave"),
53414        leaveToClass: "".concat(name, "-leave-to"),
53415        leaveActiveClass: "".concat(name, "-leave-active")
53416    };
53417});
53418var hasTransition = inBrowser && !isIE9;
53419var TRANSITION = 'transition';
53420var ANIMATION = 'animation';
53421// Transition property/event sniffing
53422var transitionProp = 'transition';
53423var transitionEndEvent = 'transitionend';
53424var animationProp = 'animation';
53425var animationEndEvent = 'animationend';
53426if (hasTransition) {
53427    /* istanbul ignore if */
53428    if (window.ontransitionend === undefined &&
53429        window.onwebkittransitionend !== undefined) {
53430        transitionProp = 'WebkitTransition';
53431        transitionEndEvent = 'webkitTransitionEnd';
53432    }
53433    if (window.onanimationend === undefined &&
53434        window.onwebkitanimationend !== undefined) {
53435        animationProp = 'WebkitAnimation';
53436        animationEndEvent = 'webkitAnimationEnd';
53437    }
53438}
53439// binding to window is necessary to make hot reload work in IE in strict mode
53440var raf = inBrowser
53441    ? window.requestAnimationFrame
53442        ? window.requestAnimationFrame.bind(window)
53443        : setTimeout
53444    : /* istanbul ignore next */ function (/* istanbul ignore next */ fn) { return fn(); };
53445function nextFrame(fn) {
53446    raf(function () {
53447        // @ts-expect-error
53448        raf(fn);
53449    });
53450}
53451function addTransitionClass(el, cls) {
53452    var transitionClasses = el._transitionClasses || (el._transitionClasses = []);
53453    if (transitionClasses.indexOf(cls) < 0) {
53454        transitionClasses.push(cls);
53455        addClass(el, cls);
53456    }
53457}
53458function removeTransitionClass(el, cls) {
53459    if (el._transitionClasses) {
53460        remove$2(el._transitionClasses, cls);
53461    }
53462    removeClass(el, cls);
53463}
53464function whenTransitionEnds(el, expectedType, cb) {
53465    var _a = getTransitionInfo(el, expectedType), type = _a.type, timeout = _a.timeout, propCount = _a.propCount;
53466    if (!type)
53467        return cb();
53468    var event = type === TRANSITION ? transitionEndEvent : animationEndEvent;
53469    var ended = 0;
53470    var end = function () {
53471        el.removeEventListener(event, onEnd);
53472        cb();
53473    };
53474    var onEnd = function (e) {
53475        if (e.target === el) {
53476            if (++ended >= propCount) {
53477                end();
53478            }
53479        }
53480    };
53481    setTimeout(function () {
53482        if (ended < propCount) {
53483            end();
53484        }
53485    }, timeout + 1);
53486    el.addEventListener(event, onEnd);
53487}
53488var transformRE = /\b(transform|all)(,|$)/;
53489function getTransitionInfo(el, expectedType) {
53490    var styles = window.getComputedStyle(el);
53491    // JSDOM may return undefined for transition properties
53492    var transitionDelays = (styles[transitionProp + 'Delay'] || '').split(', ');
53493    var transitionDurations = (styles[transitionProp + 'Duration'] || '').split(', ');
53494    var transitionTimeout = getTimeout(transitionDelays, transitionDurations);
53495    var animationDelays = (styles[animationProp + 'Delay'] || '').split(', ');
53496    var animationDurations = (styles[animationProp + 'Duration'] || '').split(', ');
53497    var animationTimeout = getTimeout(animationDelays, animationDurations);
53498    var type;
53499    var timeout = 0;
53500    var propCount = 0;
53501    /* istanbul ignore if */
53502    if (expectedType === TRANSITION) {
53503        if (transitionTimeout > 0) {
53504            type = TRANSITION;
53505            timeout = transitionTimeout;
53506            propCount = transitionDurations.length;
53507        }
53508    }
53509    else if (expectedType === ANIMATION) {
53510        if (animationTimeout > 0) {
53511            type = ANIMATION;
53512            timeout = animationTimeout;
53513            propCount = animationDurations.length;
53514        }
53515    }
53516    else {
53517        timeout = Math.max(transitionTimeout, animationTimeout);
53518        type =
53519            timeout > 0
53520                ? transitionTimeout > animationTimeout
53521                    ? TRANSITION
53522                    : ANIMATION
53523                : null;
53524        propCount = type
53525            ? type === TRANSITION
53526                ? transitionDurations.length
53527                : animationDurations.length
53528            : 0;
53529    }
53530    var hasTransform = type === TRANSITION && transformRE.test(styles[transitionProp + 'Property']);
53531    return {
53532        type: type,
53533        timeout: timeout,
53534        propCount: propCount,
53535        hasTransform: hasTransform
53536    };
53537}
53538function getTimeout(delays, durations) {
53539    /* istanbul ignore next */
53540    while (delays.length < durations.length) {
53541        delays = delays.concat(delays);
53542    }
53543    return Math.max.apply(null, durations.map(function (d, i) {
53544        return toMs(d) + toMs(delays[i]);
53545    }));
53546}
53547// Old versions of Chromium (below 61.0.3163.100) formats floating pointer numbers
53548// in a locale-dependent way, using a comma instead of a dot.
53549// If comma is not replaced with a dot, the input will be rounded down (i.e. acting
53550// as a floor function) causing unexpected behaviors
53551function toMs(s) {
53552    return Number(s.slice(0, -1).replace(',', '.')) * 1000;
53553}
53554
53555function enter(vnode, toggleDisplay) {
53556    var el = vnode.elm;
53557    // call leave callback now
53558    if (isDef(el._leaveCb)) {
53559        el._leaveCb.cancelled = true;
53560        el._leaveCb();
53561    }
53562    var data = resolveTransition(vnode.data.transition);
53563    if (isUndef(data)) {
53564        return;
53565    }
53566    /* istanbul ignore if */
53567    if (isDef(el._enterCb) || el.nodeType !== 1) {
53568        return;
53569    }
53570    var css = data.css, type = data.type, enterClass = data.enterClass, enterToClass = data.enterToClass, enterActiveClass = data.enterActiveClass, appearClass = data.appearClass, appearToClass = data.appearToClass, appearActiveClass = data.appearActiveClass, beforeEnter = data.beforeEnter, enter = data.enter, afterEnter = data.afterEnter, enterCancelled = data.enterCancelled, beforeAppear = data.beforeAppear, appear = data.appear, afterAppear = data.afterAppear, appearCancelled = data.appearCancelled, duration = data.duration;
53571    // activeInstance will always be the <transition> component managing this
53572    // transition. One edge case to check is when the <transition> is placed
53573    // as the root node of a child component. In that case we need to check
53574    // <transition>'s parent for appear check.
53575    var context = activeInstance;
53576    var transitionNode = activeInstance.$vnode;
53577    while (transitionNode && transitionNode.parent) {
53578        context = transitionNode.context;
53579        transitionNode = transitionNode.parent;
53580    }
53581    var isAppear = !context._isMounted || !vnode.isRootInsert;
53582    if (isAppear && !appear && appear !== '') {
53583        return;
53584    }
53585    var startClass = isAppear && appearClass ? appearClass : enterClass;
53586    var activeClass = isAppear && appearActiveClass ? appearActiveClass : enterActiveClass;
53587    var toClass = isAppear && appearToClass ? appearToClass : enterToClass;
53588    var beforeEnterHook = isAppear ? beforeAppear || beforeEnter : beforeEnter;
53589    var enterHook = isAppear ? (isFunction(appear) ? appear : enter) : enter;
53590    var afterEnterHook = isAppear ? afterAppear || afterEnter : afterEnter;
53591    var enterCancelledHook = isAppear
53592        ? appearCancelled || enterCancelled
53593        : enterCancelled;
53594    var explicitEnterDuration = toNumber(isObject(duration) ? duration.enter : duration);
53595    if ( true && explicitEnterDuration != null) {
53596        checkDuration(explicitEnterDuration, 'enter', vnode);
53597    }
53598    var expectsCSS = css !== false && !isIE9;
53599    var userWantsControl = getHookArgumentsLength(enterHook);
53600    var cb = (el._enterCb = once(function () {
53601        if (expectsCSS) {
53602            removeTransitionClass(el, toClass);
53603            removeTransitionClass(el, activeClass);
53604        }
53605        // @ts-expect-error
53606        if (cb.cancelled) {
53607            if (expectsCSS) {
53608                removeTransitionClass(el, startClass);
53609            }
53610            enterCancelledHook && enterCancelledHook(el);
53611        }
53612        else {
53613            afterEnterHook && afterEnterHook(el);
53614        }
53615        el._enterCb = null;
53616    }));
53617    if (!vnode.data.show) {
53618        // remove pending leave element on enter by injecting an insert hook
53619        mergeVNodeHook(vnode, 'insert', function () {
53620            var parent = el.parentNode;
53621            var pendingNode = parent && parent._pending && parent._pending[vnode.key];
53622            if (pendingNode &&
53623                pendingNode.tag === vnode.tag &&
53624                pendingNode.elm._leaveCb) {
53625                pendingNode.elm._leaveCb();
53626            }
53627            enterHook && enterHook(el, cb);
53628        });
53629    }
53630    // start enter transition
53631    beforeEnterHook && beforeEnterHook(el);
53632    if (expectsCSS) {
53633        addTransitionClass(el, startClass);
53634        addTransitionClass(el, activeClass);
53635        nextFrame(function () {
53636            removeTransitionClass(el, startClass);
53637            // @ts-expect-error
53638            if (!cb.cancelled) {
53639                addTransitionClass(el, toClass);
53640                if (!userWantsControl) {
53641                    if (isValidDuration(explicitEnterDuration)) {
53642                        setTimeout(cb, explicitEnterDuration);
53643                    }
53644                    else {
53645                        whenTransitionEnds(el, type, cb);
53646                    }
53647                }
53648            }
53649        });
53650    }
53651    if (vnode.data.show) {
53652        toggleDisplay && toggleDisplay();
53653        enterHook && enterHook(el, cb);
53654    }
53655    if (!expectsCSS && !userWantsControl) {
53656        cb();
53657    }
53658}
53659function leave(vnode, rm) {
53660    var el = vnode.elm;
53661    // call enter callback now
53662    if (isDef(el._enterCb)) {
53663        el._enterCb.cancelled = true;
53664        el._enterCb();
53665    }
53666    var data = resolveTransition(vnode.data.transition);
53667    if (isUndef(data) || el.nodeType !== 1) {
53668        return rm();
53669    }
53670    /* istanbul ignore if */
53671    if (isDef(el._leaveCb)) {
53672        return;
53673    }
53674    var css = data.css, type = data.type, leaveClass = data.leaveClass, leaveToClass = data.leaveToClass, leaveActiveClass = data.leaveActiveClass, beforeLeave = data.beforeLeave, leave = data.leave, afterLeave = data.afterLeave, leaveCancelled = data.leaveCancelled, delayLeave = data.delayLeave, duration = data.duration;
53675    var expectsCSS = css !== false && !isIE9;
53676    var userWantsControl = getHookArgumentsLength(leave);
53677    var explicitLeaveDuration = toNumber(isObject(duration) ? duration.leave : duration);
53678    if ( true && isDef(explicitLeaveDuration)) {
53679        checkDuration(explicitLeaveDuration, 'leave', vnode);
53680    }
53681    var cb = (el._leaveCb = once(function () {
53682        if (el.parentNode && el.parentNode._pending) {
53683            el.parentNode._pending[vnode.key] = null;
53684        }
53685        if (expectsCSS) {
53686            removeTransitionClass(el, leaveToClass);
53687            removeTransitionClass(el, leaveActiveClass);
53688        }
53689        // @ts-expect-error
53690        if (cb.cancelled) {
53691            if (expectsCSS) {
53692                removeTransitionClass(el, leaveClass);
53693            }
53694            leaveCancelled && leaveCancelled(el);
53695        }
53696        else {
53697            rm();
53698            afterLeave && afterLeave(el);
53699        }
53700        el._leaveCb = null;
53701    }));
53702    if (delayLeave) {
53703        delayLeave(performLeave);
53704    }
53705    else {
53706        performLeave();
53707    }
53708    function performLeave() {
53709        // the delayed leave may have already been cancelled
53710        // @ts-expect-error
53711        if (cb.cancelled) {
53712            return;
53713        }
53714        // record leaving element
53715        if (!vnode.data.show && el.parentNode) {
53716            (el.parentNode._pending || (el.parentNode._pending = {}))[vnode.key] =
53717                vnode;
53718        }
53719        beforeLeave && beforeLeave(el);
53720        if (expectsCSS) {
53721            addTransitionClass(el, leaveClass);
53722            addTransitionClass(el, leaveActiveClass);
53723            nextFrame(function () {
53724                removeTransitionClass(el, leaveClass);
53725                // @ts-expect-error
53726                if (!cb.cancelled) {
53727                    addTransitionClass(el, leaveToClass);
53728                    if (!userWantsControl) {
53729                        if (isValidDuration(explicitLeaveDuration)) {
53730                            setTimeout(cb, explicitLeaveDuration);
53731                        }
53732                        else {
53733                            whenTransitionEnds(el, type, cb);
53734                        }
53735                    }
53736                }
53737            });
53738        }
53739        leave && leave(el, cb);
53740        if (!expectsCSS && !userWantsControl) {
53741            cb();
53742        }
53743    }
53744}
53745// only used in dev mode
53746function checkDuration(val, name, vnode) {
53747    if (typeof val !== 'number') {
53748        warn$2("<transition> explicit ".concat(name, " duration is not a valid number - ") +
53749            "got ".concat(JSON.stringify(val), "."), vnode.context);
53750    }
53751    else if (isNaN(val)) {
53752        warn$2("<transition> explicit ".concat(name, " duration is NaN - ") +
53753            'the duration expression might be incorrect.', vnode.context);
53754    }
53755}
53756function isValidDuration(val) {
53757    return typeof val === 'number' && !isNaN(val);
53758}
53759/**
53760 * Normalize a transition hook's argument length. The hook may be:
53761 * - a merged hook (invoker) with the original in .fns
53762 * - a wrapped component method (check ._length)
53763 * - a plain function (.length)
53764 */
53765function getHookArgumentsLength(fn) {
53766    if (isUndef(fn)) {
53767        return false;
53768    }
53769    // @ts-expect-error
53770    var invokerFns = fn.fns;
53771    if (isDef(invokerFns)) {
53772        // invoker
53773        return getHookArgumentsLength(Array.isArray(invokerFns) ? invokerFns[0] : invokerFns);
53774    }
53775    else {
53776        // @ts-expect-error
53777        return (fn._length || fn.length) > 1;
53778    }
53779}
53780function _enter(_, vnode) {
53781    if (vnode.data.show !== true) {
53782        enter(vnode);
53783    }
53784}
53785var transition = inBrowser
53786    ? {
53787        create: _enter,
53788        activate: _enter,
53789        remove: function (vnode, rm) {
53790            /* istanbul ignore else */
53791            if (vnode.data.show !== true) {
53792                // @ts-expect-error
53793                leave(vnode, rm);
53794            }
53795            else {
53796                rm();
53797            }
53798        }
53799    }
53800    : {};
53801
53802var platformModules = [attrs, klass$1, events, domProps, style$1, transition];
53803
53804// the directive module should be applied last, after all
53805// built-in modules have been applied.
53806var modules$1 = platformModules.concat(baseModules);
53807var patch = createPatchFunction({ nodeOps: nodeOps, modules: modules$1 });
53808
53809/**
53810 * Not type checking this file because flow doesn't like attaching
53811 * properties to Elements.
53812 */
53813/* istanbul ignore if */
53814if (isIE9) {
53815    // http://www.matts411.com/post/internet-explorer-9-oninput/
53816    document.addEventListener('selectionchange', function () {
53817        var el = document.activeElement;
53818        // @ts-expect-error
53819        if (el && el.vmodel) {
53820            trigger(el, 'input');
53821        }
53822    });
53823}
53824var directive = {
53825    inserted: function (el, binding, vnode, oldVnode) {
53826        if (vnode.tag === 'select') {
53827            // #6903
53828            if (oldVnode.elm && !oldVnode.elm._vOptions) {
53829                mergeVNodeHook(vnode, 'postpatch', function () {
53830                    directive.componentUpdated(el, binding, vnode);
53831                });
53832            }
53833            else {
53834                setSelected(el, binding, vnode.context);
53835            }
53836            el._vOptions = [].map.call(el.options, getValue);
53837        }
53838        else if (vnode.tag === 'textarea' || isTextInputType(el.type)) {
53839            el._vModifiers = binding.modifiers;
53840            if (!binding.modifiers.lazy) {
53841                el.addEventListener('compositionstart', onCompositionStart);
53842                el.addEventListener('compositionend', onCompositionEnd);
53843                // Safari < 10.2 & UIWebView doesn't fire compositionend when
53844                // switching focus before confirming composition choice
53845                // this also fixes the issue where some browsers e.g. iOS Chrome
53846                // fires "change" instead of "input" on autocomplete.
53847                el.addEventListener('change', onCompositionEnd);
53848                /* istanbul ignore if */
53849                if (isIE9) {
53850                    el.vmodel = true;
53851                }
53852            }
53853        }
53854    },
53855    componentUpdated: function (el, binding, vnode) {
53856        if (vnode.tag === 'select') {
53857            setSelected(el, binding, vnode.context);
53858            // in case the options rendered by v-for have changed,
53859            // it's possible that the value is out-of-sync with the rendered options.
53860            // detect such cases and filter out values that no longer has a matching
53861            // option in the DOM.
53862            var prevOptions_1 = el._vOptions;
53863            var curOptions_1 = (el._vOptions = [].map.call(el.options, getValue));
53864            if (curOptions_1.some(function (o, i) { return !looseEqual(o, prevOptions_1[i]); })) {
53865                // trigger change event if
53866                // no matching option found for at least one value
53867                var needReset = el.multiple
53868                    ? binding.value.some(function (v) { return hasNoMatchingOption(v, curOptions_1); })
53869                    : binding.value !== binding.oldValue &&
53870                        hasNoMatchingOption(binding.value, curOptions_1);
53871                if (needReset) {
53872                    trigger(el, 'change');
53873                }
53874            }
53875        }
53876    }
53877};
53878function setSelected(el, binding, vm) {
53879    actuallySetSelected(el, binding, vm);
53880    /* istanbul ignore if */
53881    if (isIE || isEdge) {
53882        setTimeout(function () {
53883            actuallySetSelected(el, binding, vm);
53884        }, 0);
53885    }
53886}
53887function actuallySetSelected(el, binding, vm) {
53888    var value = binding.value;
53889    var isMultiple = el.multiple;
53890    if (isMultiple && !Array.isArray(value)) {
53891         true &&
53892            warn$2("<select multiple v-model=\"".concat(binding.expression, "\"> ") +
53893                "expects an Array value for its binding, but got ".concat(Object.prototype.toString
53894                    .call(value)
53895                    .slice(8, -1)), vm);
53896        return;
53897    }
53898    var selected, option;
53899    for (var i = 0, l = el.options.length; i < l; i++) {
53900        option = el.options[i];
53901        if (isMultiple) {
53902            selected = looseIndexOf(value, getValue(option)) > -1;
53903            if (option.selected !== selected) {
53904                option.selected = selected;
53905            }
53906        }
53907        else {
53908            if (looseEqual(getValue(option), value)) {
53909                if (el.selectedIndex !== i) {
53910                    el.selectedIndex = i;
53911                }
53912                return;
53913            }
53914        }
53915    }
53916    if (!isMultiple) {
53917        el.selectedIndex = -1;
53918    }
53919}
53920function hasNoMatchingOption(value, options) {
53921    return options.every(function (o) { return !looseEqual(o, value); });
53922}
53923function getValue(option) {
53924    return '_value' in option ? option._value : option.value;
53925}
53926function onCompositionStart(e) {
53927    e.target.composing = true;
53928}
53929function onCompositionEnd(e) {
53930    // prevent triggering an input event for no reason
53931    if (!e.target.composing)
53932        return;
53933    e.target.composing = false;
53934    trigger(e.target, 'input');
53935}
53936function trigger(el, type) {
53937    var e = document.createEvent('HTMLEvents');
53938    e.initEvent(type, true, true);
53939    el.dispatchEvent(e);
53940}
53941
53942// recursively search for possible transition defined inside the component root
53943function locateNode(vnode) {
53944    // @ts-expect-error
53945    return vnode.componentInstance && (!vnode.data || !vnode.data.transition)
53946        ? locateNode(vnode.componentInstance._vnode)
53947        : vnode;
53948}
53949var show = {
53950    bind: function (el, _a, vnode) {
53951        var value = _a.value;
53952        vnode = locateNode(vnode);
53953        var transition = vnode.data && vnode.data.transition;
53954        var originalDisplay = (el.__vOriginalDisplay =
53955            el.style.display === 'none' ? '' : el.style.display);
53956        if (value && transition) {
53957            vnode.data.show = true;
53958            enter(vnode, function () {
53959                el.style.display = originalDisplay;
53960            });
53961        }
53962        else {
53963            el.style.display = value ? originalDisplay : 'none';
53964        }
53965    },
53966    update: function (el, _a, vnode) {
53967        var value = _a.value, oldValue = _a.oldValue;
53968        /* istanbul ignore if */
53969        if (!value === !oldValue)
53970            return;
53971        vnode = locateNode(vnode);
53972        var transition = vnode.data && vnode.data.transition;
53973        if (transition) {
53974            vnode.data.show = true;
53975            if (value) {
53976                enter(vnode, function () {
53977                    el.style.display = el.__vOriginalDisplay;
53978                });
53979            }
53980            else {
53981                leave(vnode, function () {
53982                    el.style.display = 'none';
53983                });
53984            }
53985        }
53986        else {
53987            el.style.display = value ? el.__vOriginalDisplay : 'none';
53988        }
53989    },
53990    unbind: function (el, binding, vnode, oldVnode, isDestroy) {
53991        if (!isDestroy) {
53992            el.style.display = el.__vOriginalDisplay;
53993        }
53994    }
53995};
53996
53997var platformDirectives = {
53998    model: directive,
53999    show: show
54000};
54001
54002// Provides transition support for a single element/component.
54003var transitionProps = {
54004    name: String,
54005    appear: Boolean,
54006    css: Boolean,
54007    mode: String,
54008    type: String,
54009    enterClass: String,
54010    leaveClass: String,
54011    enterToClass: String,
54012    leaveToClass: String,
54013    enterActiveClass: String,
54014    leaveActiveClass: String,
54015    appearClass: String,
54016    appearActiveClass: String,
54017    appearToClass: String,
54018    duration: [Number, String, Object]
54019};
54020// in case the child is also an abstract component, e.g. <keep-alive>
54021// we want to recursively retrieve the real component to be rendered
54022function getRealChild(vnode) {
54023    var compOptions = vnode && vnode.componentOptions;
54024    if (compOptions && compOptions.Ctor.options.abstract) {
54025        return getRealChild(getFirstComponentChild(compOptions.children));
54026    }
54027    else {
54028        return vnode;
54029    }
54030}
54031function extractTransitionData(comp) {
54032    var data = {};
54033    var options = comp.$options;
54034    // props
54035    for (var key in options.propsData) {
54036        data[key] = comp[key];
54037    }
54038    // events.
54039    // extract listeners and pass them directly to the transition methods
54040    var listeners = options._parentListeners;
54041    for (var key in listeners) {
54042        data[camelize(key)] = listeners[key];
54043    }
54044    return data;
54045}
54046function placeholder(h, rawChild) {
54047    // @ts-expect-error
54048    if (/\d-keep-alive$/.test(rawChild.tag)) {
54049        return h('keep-alive', {
54050            props: rawChild.componentOptions.propsData
54051        });
54052    }
54053}
54054function hasParentTransition(vnode) {
54055    while ((vnode = vnode.parent)) {
54056        if (vnode.data.transition) {
54057            return true;
54058        }
54059    }
54060}
54061function isSameChild(child, oldChild) {
54062    return oldChild.key === child.key && oldChild.tag === child.tag;
54063}
54064var isNotTextNode = function (c) { return c.tag || isAsyncPlaceholder(c); };
54065var isVShowDirective = function (d) { return d.name === 'show'; };
54066var Transition = {
54067    name: 'transition',
54068    props: transitionProps,
54069    abstract: true,
54070    render: function (h) {
54071        var _this = this;
54072        var children = this.$slots.default;
54073        if (!children) {
54074            return;
54075        }
54076        // filter out text nodes (possible whitespaces)
54077        children = children.filter(isNotTextNode);
54078        /* istanbul ignore if */
54079        if (!children.length) {
54080            return;
54081        }
54082        // warn multiple elements
54083        if ( true && children.length > 1) {
54084            warn$2('<transition> can only be used on a single element. Use ' +
54085                '<transition-group> for lists.', this.$parent);
54086        }
54087        var mode = this.mode;
54088        // warn invalid mode
54089        if ( true && mode && mode !== 'in-out' && mode !== 'out-in') {
54090            warn$2('invalid <transition> mode: ' + mode, this.$parent);
54091        }
54092        var rawChild = children[0];
54093        // if this is a component root node and the component's
54094        // parent container node also has transition, skip.
54095        if (hasParentTransition(this.$vnode)) {
54096            return rawChild;
54097        }
54098        // apply transition data to child
54099        // use getRealChild() to ignore abstract components e.g. keep-alive
54100        var child = getRealChild(rawChild);
54101        /* istanbul ignore if */
54102        if (!child) {
54103            return rawChild;
54104        }
54105        if (this._leaving) {
54106            return placeholder(h, rawChild);
54107        }
54108        // ensure a key that is unique to the vnode type and to this transition
54109        // component instance. This key will be used to remove pending leaving nodes
54110        // during entering.
54111        var id = "__transition-".concat(this._uid, "-");
54112        child.key =
54113            child.key == null
54114                ? child.isComment
54115                    ? id + 'comment'
54116                    : id + child.tag
54117                : isPrimitive(child.key)
54118                    ? String(child.key).indexOf(id) === 0
54119                        ? child.key
54120                        : id + child.key
54121                    : child.key;
54122        var data = ((child.data || (child.data = {})).transition =
54123            extractTransitionData(this));
54124        var oldRawChild = this._vnode;
54125        var oldChild = getRealChild(oldRawChild);
54126        // mark v-show
54127        // so that the transition module can hand over the control to the directive
54128        if (child.data.directives && child.data.directives.some(isVShowDirective)) {
54129            child.data.show = true;
54130        }
54131        if (oldChild &&
54132            oldChild.data &&
54133            !isSameChild(child, oldChild) &&
54134            !isAsyncPlaceholder(oldChild) &&
54135            // #6687 component root is a comment node
54136            !(oldChild.componentInstance &&
54137                oldChild.componentInstance._vnode.isComment)) {
54138            // replace old child transition data with fresh one
54139            // important for dynamic transitions!
54140            var oldData = (oldChild.data.transition = extend({}, data));
54141            // handle transition mode
54142            if (mode === 'out-in') {
54143                // return placeholder node and queue update when leave finishes
54144                this._leaving = true;
54145                mergeVNodeHook(oldData, 'afterLeave', function () {
54146                    _this._leaving = false;
54147                    _this.$forceUpdate();
54148                });
54149                return placeholder(h, rawChild);
54150            }
54151            else if (mode === 'in-out') {
54152                if (isAsyncPlaceholder(child)) {
54153                    return oldRawChild;
54154                }
54155                var delayedLeave_1;
54156                var performLeave = function () {
54157                    delayedLeave_1();
54158                };
54159                mergeVNodeHook(data, 'afterEnter', performLeave);
54160                mergeVNodeHook(data, 'enterCancelled', performLeave);
54161                mergeVNodeHook(oldData, 'delayLeave', function (leave) {
54162                    delayedLeave_1 = leave;
54163                });
54164            }
54165        }
54166        return rawChild;
54167    }
54168};
54169
54170// Provides transition support for list items.
54171var props = extend({
54172    tag: String,
54173    moveClass: String
54174}, transitionProps);
54175delete props.mode;
54176var TransitionGroup = {
54177    props: props,
54178    beforeMount: function () {
54179        var _this = this;
54180        var update = this._update;
54181        this._update = function (vnode, hydrating) {
54182            var restoreActiveInstance = setActiveInstance(_this);
54183            // force removing pass
54184            _this.__patch__(_this._vnode, _this.kept, false, // hydrating
54185            true // removeOnly (!important, avoids unnecessary moves)
54186            );
54187            _this._vnode = _this.kept;
54188            restoreActiveInstance();
54189            update.call(_this, vnode, hydrating);
54190        };
54191    },
54192    render: function (h) {
54193        var tag = this.tag || this.$vnode.data.tag || 'span';
54194        var map = Object.create(null);
54195        var prevChildren = (this.prevChildren = this.children);
54196        var rawChildren = this.$slots.default || [];
54197        var children = (this.children = []);
54198        var transitionData = extractTransitionData(this);
54199        for (var i = 0; i < rawChildren.length; i++) {
54200            var c = rawChildren[i];
54201            if (c.tag) {
54202                if (c.key != null && String(c.key).indexOf('__vlist') !== 0) {
54203                    children.push(c);
54204                    map[c.key] = c;
54205                    (c.data || (c.data = {})).transition = transitionData;
54206                }
54207                else if (true) {
54208                    var opts = c.componentOptions;
54209                    var name_1 = opts
54210                        ? getComponentName(opts.Ctor.options) || opts.tag || ''
54211                        : c.tag;
54212                    warn$2("<transition-group> children must be keyed: <".concat(name_1, ">"));
54213                }
54214            }
54215        }
54216        if (prevChildren) {
54217            var kept = [];
54218            var removed = [];
54219            for (var i = 0; i < prevChildren.length; i++) {
54220                var c = prevChildren[i];
54221                c.data.transition = transitionData;
54222                // @ts-expect-error .getBoundingClientRect is not typed in Node
54223                c.data.pos = c.elm.getBoundingClientRect();
54224                if (map[c.key]) {
54225                    kept.push(c);
54226                }
54227                else {
54228                    removed.push(c);
54229                }
54230            }
54231            this.kept = h(tag, null, kept);
54232            this.removed = removed;
54233        }
54234        return h(tag, null, children);
54235    },
54236    updated: function () {
54237        var children = this.prevChildren;
54238        var moveClass = this.moveClass || (this.name || 'v') + '-move';
54239        if (!children.length || !this.hasMove(children[0].elm, moveClass)) {
54240            return;
54241        }
54242        // we divide the work into three loops to avoid mixing DOM reads and writes
54243        // in each iteration - which helps prevent layout thrashing.
54244        children.forEach(callPendingCbs);
54245        children.forEach(recordPosition);
54246        children.forEach(applyTranslation);
54247        // force reflow to put everything in position
54248        // assign to this to avoid being removed in tree-shaking
54249        // $flow-disable-line
54250        this._reflow = document.body.offsetHeight;
54251        children.forEach(function (c) {
54252            if (c.data.moved) {
54253                var el_1 = c.elm;
54254                var s = el_1.style;
54255                addTransitionClass(el_1, moveClass);
54256                s.transform = s.WebkitTransform = s.transitionDuration = '';
54257                el_1.addEventListener(transitionEndEvent, (el_1._moveCb = function cb(e) {
54258                    if (e && e.target !== el_1) {
54259                        return;
54260                    }
54261                    if (!e || /transform$/.test(e.propertyName)) {
54262                        el_1.removeEventListener(transitionEndEvent, cb);
54263                        el_1._moveCb = null;
54264                        removeTransitionClass(el_1, moveClass);
54265                    }
54266                }));
54267            }
54268        });
54269    },
54270    methods: {
54271        hasMove: function (el, moveClass) {
54272            /* istanbul ignore if */
54273            if (!hasTransition) {
54274                return false;
54275            }
54276            /* istanbul ignore if */
54277            if (this._hasMove) {
54278                return this._hasMove;
54279            }
54280            // Detect whether an element with the move class applied has
54281            // CSS transitions. Since the element may be inside an entering
54282            // transition at this very moment, we make a clone of it and remove
54283            // all other transition classes applied to ensure only the move class
54284            // is applied.
54285            var clone = el.cloneNode();
54286            if (el._transitionClasses) {
54287                el._transitionClasses.forEach(function (cls) {
54288                    removeClass(clone, cls);
54289                });
54290            }
54291            addClass(clone, moveClass);
54292            clone.style.display = 'none';
54293            this.$el.appendChild(clone);
54294            var info = getTransitionInfo(clone);
54295            this.$el.removeChild(clone);
54296            return (this._hasMove = info.hasTransform);
54297        }
54298    }
54299};
54300function callPendingCbs(c) {
54301    /* istanbul ignore if */
54302    if (c.elm._moveCb) {
54303        c.elm._moveCb();
54304    }
54305    /* istanbul ignore if */
54306    if (c.elm._enterCb) {
54307        c.elm._enterCb();
54308    }
54309}
54310function recordPosition(c) {
54311    c.data.newPos = c.elm.getBoundingClientRect();
54312}
54313function applyTranslation(c) {
54314    var oldPos = c.data.pos;
54315    var newPos = c.data.newPos;
54316    var dx = oldPos.left - newPos.left;
54317    var dy = oldPos.top - newPos.top;
54318    if (dx || dy) {
54319        c.data.moved = true;
54320        var s = c.elm.style;
54321        s.transform = s.WebkitTransform = "translate(".concat(dx, "px,").concat(dy, "px)");
54322        s.transitionDuration = '0s';
54323    }
54324}
54325
54326var platformComponents = {
54327    Transition: Transition,
54328    TransitionGroup: TransitionGroup
54329};
54330
54331// install platform specific utils
54332Vue.config.mustUseProp = mustUseProp;
54333Vue.config.isReservedTag = isReservedTag;
54334Vue.config.isReservedAttr = isReservedAttr;
54335Vue.config.getTagNamespace = getTagNamespace;
54336Vue.config.isUnknownElement = isUnknownElement;
54337// install platform runtime directives & components
54338extend(Vue.options.directives, platformDirectives);
54339extend(Vue.options.components, platformComponents);
54340// install platform patch function
54341Vue.prototype.__patch__ = inBrowser ? patch : noop;
54342// public mount method
54343Vue.prototype.$mount = function (el, hydrating) {
54344    el = el && inBrowser ? query(el) : undefined;
54345    return mountComponent(this, el, hydrating);
54346};
54347// devtools global hook
54348/* istanbul ignore next */
54349if (inBrowser) {
54350    setTimeout(function () {
54351        if (config.devtools) {
54352            if (devtools) {
54353                devtools.emit('init', Vue);
54354            }
54355            else if (true) {
54356                // @ts-expect-error
54357                console[console.info ? 'info' : 'log']('Download the Vue Devtools extension for a better development experience:\n' +
54358                    'https://github.com/vuejs/vue-devtools');
54359            }
54360        }
54361        if ( true &&
54362            config.productionTip !== false &&
54363            typeof console !== 'undefined') {
54364            // @ts-expect-error
54365            console[console.info ? 'info' : 'log']("You are running Vue in development mode.\n" +
54366                "Make sure to turn on production mode when deploying for production.\n" +
54367                "See more tips at https://vuejs.org/guide/deployment.html");
54368        }
54369    }, 0);
54370}
54371
54372var defaultTagRE = /\{\{((?:.|\r?\n)+?)\}\}/g;
54373var regexEscapeRE = /[-.*+?^${}()|[\]\/\\]/g;
54374var buildRegex = cached(function (delimiters) {
54375    var open = delimiters[0].replace(regexEscapeRE, '\\$&');
54376    var close = delimiters[1].replace(regexEscapeRE, '\\$&');
54377    return new RegExp(open + '((?:.|\\n)+?)' + close, 'g');
54378});
54379function parseText(text, delimiters) {
54380    //@ts-expect-error
54381    var tagRE = delimiters ? buildRegex(delimiters) : defaultTagRE;
54382    if (!tagRE.test(text)) {
54383        return;
54384    }
54385    var tokens = [];
54386    var rawTokens = [];
54387    var lastIndex = (tagRE.lastIndex = 0);
54388    var match, index, tokenValue;
54389    while ((match = tagRE.exec(text))) {
54390        index = match.index;
54391        // push text token
54392        if (index > lastIndex) {
54393            rawTokens.push((tokenValue = text.slice(lastIndex, index)));
54394            tokens.push(JSON.stringify(tokenValue));
54395        }
54396        // tag token
54397        var exp = parseFilters(match[1].trim());
54398        tokens.push("_s(".concat(exp, ")"));
54399        rawTokens.push({ '@binding': exp });
54400        lastIndex = index + match[0].length;
54401    }
54402    if (lastIndex < text.length) {
54403        rawTokens.push((tokenValue = text.slice(lastIndex)));
54404        tokens.push(JSON.stringify(tokenValue));
54405    }
54406    return {
54407        expression: tokens.join('+'),
54408        tokens: rawTokens
54409    };
54410}
54411
54412function transformNode$1(el, options) {
54413    var warn = options.warn || baseWarn;
54414    var staticClass = getAndRemoveAttr(el, 'class');
54415    if ( true && staticClass) {
54416        var res = parseText(staticClass, options.delimiters);
54417        if (res) {
54418            warn("class=\"".concat(staticClass, "\": ") +
54419                'Interpolation inside attributes has been removed. ' +
54420                'Use v-bind or the colon shorthand instead. For example, ' +
54421                'instead of <div class="{{ val }}">, use <div :class="val">.', el.rawAttrsMap['class']);
54422        }
54423    }
54424    if (staticClass) {
54425        el.staticClass = JSON.stringify(staticClass.replace(/\s+/g, ' ').trim());
54426    }
54427    var classBinding = getBindingAttr(el, 'class', false /* getStatic */);
54428    if (classBinding) {
54429        el.classBinding = classBinding;
54430    }
54431}
54432function genData$2(el) {
54433    var data = '';
54434    if (el.staticClass) {
54435        data += "staticClass:".concat(el.staticClass, ",");
54436    }
54437    if (el.classBinding) {
54438        data += "class:".concat(el.classBinding, ",");
54439    }
54440    return data;
54441}
54442var klass = {
54443    staticKeys: ['staticClass'],
54444    transformNode: transformNode$1,
54445    genData: genData$2
54446};
54447
54448function transformNode(el, options) {
54449    var warn = options.warn || baseWarn;
54450    var staticStyle = getAndRemoveAttr(el, 'style');
54451    if (staticStyle) {
54452        /* istanbul ignore if */
54453        if (true) {
54454            var res = parseText(staticStyle, options.delimiters);
54455            if (res) {
54456                warn("style=\"".concat(staticStyle, "\": ") +
54457                    'Interpolation inside attributes has been removed. ' +
54458                    'Use v-bind or the colon shorthand instead. For example, ' +
54459                    'instead of <div style="{{ val }}">, use <div :style="val">.', el.rawAttrsMap['style']);
54460            }
54461        }
54462        el.staticStyle = JSON.stringify(parseStyleText(staticStyle));
54463    }
54464    var styleBinding = getBindingAttr(el, 'style', false /* getStatic */);
54465    if (styleBinding) {
54466        el.styleBinding = styleBinding;
54467    }
54468}
54469function genData$1(el) {
54470    var data = '';
54471    if (el.staticStyle) {
54472        data += "staticStyle:".concat(el.staticStyle, ",");
54473    }
54474    if (el.styleBinding) {
54475        data += "style:(".concat(el.styleBinding, "),");
54476    }
54477    return data;
54478}
54479var style = {
54480    staticKeys: ['staticStyle'],
54481    transformNode: transformNode,
54482    genData: genData$1
54483};
54484
54485var decoder;
54486var he = {
54487    decode: function (html) {
54488        decoder = decoder || document.createElement('div');
54489        decoder.innerHTML = html;
54490        return decoder.textContent;
54491    }
54492};
54493
54494var isUnaryTag = makeMap('area,base,br,col,embed,frame,hr,img,input,isindex,keygen,' +
54495    'link,meta,param,source,track,wbr');
54496// Elements that you can, intentionally, leave open
54497// (and which close themselves)
54498var canBeLeftOpenTag = makeMap('colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr,source');
54499// HTML5 tags https://html.spec.whatwg.org/multipage/indices.html#elements-3
54500// Phrasing Content https://html.spec.whatwg.org/multipage/dom.html#phrasing-content
54501var isNonPhrasingTag = makeMap('address,article,aside,base,blockquote,body,caption,col,colgroup,dd,' +
54502    'details,dialog,div,dl,dt,fieldset,figcaption,figure,footer,form,' +
54503    'h1,h2,h3,h4,h5,h6,head,header,hgroup,hr,html,legend,li,menuitem,meta,' +
54504    'optgroup,option,param,rp,rt,source,style,summary,tbody,td,tfoot,th,thead,' +
54505    'title,tr,track');
54506
54507/**
54508 * Not type-checking this file because it's mostly vendor code.
54509 */
54510// Regular Expressions for parsing tags and attributes
54511var attribute = /^\s*([^\s"'<>\/=]+)(?:\s*(=)\s*(?:"([^"]*)"+|'([^']*)'+|([^\s"'=<>`]+)))?/;
54512var dynamicArgAttribute = /^\s*((?:v-[\w-]+:|@|:|#)\[[^=]+?\][^\s"'<>\/=]*)(?:\s*(=)\s*(?:"([^"]*)"+|'([^']*)'+|([^\s"'=<>`]+)))?/;
54513var ncname = "[a-zA-Z_][\\-\\.0-9_a-zA-Z".concat(unicodeRegExp.source, "]*");
54514var qnameCapture = "((?:".concat(ncname, "\\:)?").concat(ncname, ")");
54515var startTagOpen = new RegExp("^<".concat(qnameCapture));
54516var startTagClose = /^\s*(\/?)>/;
54517var endTag = new RegExp("^<\\/".concat(qnameCapture, "[^>]*>"));
54518var doctype = /^<!DOCTYPE [^>]+>/i;
54519// #7298: escape - to avoid being passed as HTML comment when inlined in page
54520var comment = /^<!\--/;
54521var conditionalComment = /^<!\[/;
54522// Special Elements (can contain anything)
54523var isPlainTextElement = makeMap('script,style,textarea', true);
54524var reCache = {};
54525var decodingMap = {
54526    '&lt;': '<',
54527    '&gt;': '>',
54528    '&quot;': '"',
54529    '&amp;': '&',
54530    '&#10;': '\n',
54531    '&#9;': '\t',
54532    '&#39;': "'"
54533};
54534var encodedAttr = /&(?:lt|gt|quot|amp|#39);/g;
54535var encodedAttrWithNewLines = /&(?:lt|gt|quot|amp|#39|#10|#9);/g;
54536// #5992
54537var isIgnoreNewlineTag = makeMap('pre,textarea', true);
54538var shouldIgnoreFirstNewline = function (tag, html) {
54539    return tag && isIgnoreNewlineTag(tag) && html[0] === '\n';
54540};
54541function decodeAttr(value, shouldDecodeNewlines) {
54542    var re = shouldDecodeNewlines ? encodedAttrWithNewLines : encodedAttr;
54543    return value.replace(re, function (match) { return decodingMap[match]; });
54544}
54545function parseHTML(html, options) {
54546    var stack = [];
54547    var expectHTML = options.expectHTML;
54548    var isUnaryTag = options.isUnaryTag || no;
54549    var canBeLeftOpenTag = options.canBeLeftOpenTag || no;
54550    var index = 0;
54551    var last, lastTag;
54552    var _loop_1 = function () {
54553        last = html;
54554        // Make sure we're not in a plaintext content element like script/style
54555        if (!lastTag || !isPlainTextElement(lastTag)) {
54556            var textEnd = html.indexOf('<');
54557            if (textEnd === 0) {
54558                // Comment:
54559                if (comment.test(html)) {
54560                    var commentEnd = html.indexOf('-->');
54561                    if (commentEnd >= 0) {
54562                        if (options.shouldKeepComment && options.comment) {
54563                            options.comment(html.substring(4, commentEnd), index, index + commentEnd + 3);
54564                        }
54565                        advance(commentEnd + 3);
54566                        return "continue";
54567                    }
54568                }
54569                // https://en.wikipedia.org/wiki/Conditional_comment#Downlevel-revealed_conditional_comment
54570                if (conditionalComment.test(html)) {
54571                    var conditionalEnd = html.indexOf(']>');
54572                    if (conditionalEnd >= 0) {
54573                        advance(conditionalEnd + 2);
54574                        return "continue";
54575                    }
54576                }
54577                // Doctype:
54578                var doctypeMatch = html.match(doctype);
54579                if (doctypeMatch) {
54580                    advance(doctypeMatch[0].length);
54581                    return "continue";
54582                }
54583                // End tag:
54584                var endTagMatch = html.match(endTag);
54585                if (endTagMatch) {
54586                    var curIndex = index;
54587                    advance(endTagMatch[0].length);
54588                    parseEndTag(endTagMatch[1], curIndex, index);
54589                    return "continue";
54590                }
54591                // Start tag:
54592                var startTagMatch = parseStartTag();
54593                if (startTagMatch) {
54594                    handleStartTag(startTagMatch);
54595                    if (shouldIgnoreFirstNewline(startTagMatch.tagName, html)) {
54596                        advance(1);
54597                    }
54598                    return "continue";
54599                }
54600            }
54601            var text = void 0, rest = void 0, next = void 0;
54602            if (textEnd >= 0) {
54603                rest = html.slice(textEnd);
54604                while (!endTag.test(rest) &&
54605                    !startTagOpen.test(rest) &&
54606                    !comment.test(rest) &&
54607                    !conditionalComment.test(rest)) {
54608                    // < in plain text, be forgiving and treat it as text
54609                    next = rest.indexOf('<', 1);
54610                    if (next < 0)
54611                        break;
54612                    textEnd += next;
54613                    rest = html.slice(textEnd);
54614                }
54615                text = html.substring(0, textEnd);
54616            }
54617            if (textEnd < 0) {
54618                text = html;
54619            }
54620            if (text) {
54621                advance(text.length);
54622            }
54623            if (options.chars && text) {
54624                options.chars(text, index - text.length, index);
54625            }
54626        }
54627        else {
54628            var endTagLength_1 = 0;
54629            var stackedTag_1 = lastTag.toLowerCase();
54630            var reStackedTag = reCache[stackedTag_1] ||
54631                (reCache[stackedTag_1] = new RegExp('([\\s\\S]*?)(</' + stackedTag_1 + '[^>]*>)', 'i'));
54632            var rest = html.replace(reStackedTag, function (all, text, endTag) {
54633                endTagLength_1 = endTag.length;
54634                if (!isPlainTextElement(stackedTag_1) && stackedTag_1 !== 'noscript') {
54635                    text = text
54636                        .replace(/<!\--([\s\S]*?)-->/g, '$1') // #7298
54637                        .replace(/<!\[CDATA\[([\s\S]*?)]]>/g, '$1');
54638                }
54639                if (shouldIgnoreFirstNewline(stackedTag_1, text)) {
54640                    text = text.slice(1);
54641                }
54642                if (options.chars) {
54643                    options.chars(text);
54644                }
54645                return '';
54646            });
54647            index += html.length - rest.length;
54648            html = rest;
54649            parseEndTag(stackedTag_1, index - endTagLength_1, index);
54650        }
54651        if (html === last) {
54652            options.chars && options.chars(html);
54653            if ( true && !stack.length && options.warn) {
54654                options.warn("Mal-formatted tag at end of template: \"".concat(html, "\""), {
54655                    start: index + html.length
54656                });
54657            }
54658            return "break";
54659        }
54660    };
54661    while (html) {
54662        var state_1 = _loop_1();
54663        if (state_1 === "break")
54664            break;
54665    }
54666    // Clean up any remaining tags
54667    parseEndTag();
54668    function advance(n) {
54669        index += n;
54670        html = html.substring(n);
54671    }
54672    function parseStartTag() {
54673        var start = html.match(startTagOpen);
54674        if (start) {
54675            var match = {
54676                tagName: start[1],
54677                attrs: [],
54678                start: index
54679            };
54680            advance(start[0].length);
54681            var end = void 0, attr = void 0;
54682            while (!(end = html.match(startTagClose)) &&
54683                (attr = html.match(dynamicArgAttribute) || html.match(attribute))) {
54684                attr.start = index;
54685                advance(attr[0].length);
54686                attr.end = index;
54687                match.attrs.push(attr);
54688            }
54689            if (end) {
54690                match.unarySlash = end[1];
54691                advance(end[0].length);
54692                match.end = index;
54693                return match;
54694            }
54695        }
54696    }
54697    function handleStartTag(match) {
54698        var tagName = match.tagName;
54699        var unarySlash = match.unarySlash;
54700        if (expectHTML) {
54701            if (lastTag === 'p' && isNonPhrasingTag(tagName)) {
54702                parseEndTag(lastTag);
54703            }
54704            if (canBeLeftOpenTag(tagName) && lastTag === tagName) {
54705                parseEndTag(tagName);
54706            }
54707        }
54708        var unary = isUnaryTag(tagName) || !!unarySlash;
54709        var l = match.attrs.length;
54710        var attrs = new Array(l);
54711        for (var i = 0; i < l; i++) {
54712            var args = match.attrs[i];
54713            var value = args[3] || args[4] || args[5] || '';
54714            var shouldDecodeNewlines = tagName === 'a' && args[1] === 'href'
54715                ? options.shouldDecodeNewlinesForHref
54716                : options.shouldDecodeNewlines;
54717            attrs[i] = {
54718                name: args[1],
54719                value: decodeAttr(value, shouldDecodeNewlines)
54720            };
54721            if ( true && options.outputSourceRange) {
54722                attrs[i].start = args.start + args[0].match(/^\s*/).length;
54723                attrs[i].end = args.end;
54724            }
54725        }
54726        if (!unary) {
54727            stack.push({
54728                tag: tagName,
54729                lowerCasedTag: tagName.toLowerCase(),
54730                attrs: attrs,
54731                start: match.start,
54732                end: match.end
54733            });
54734            lastTag = tagName;
54735        }
54736        if (options.start) {
54737            options.start(tagName, attrs, unary, match.start, match.end);
54738        }
54739    }
54740    function parseEndTag(tagName, start, end) {
54741        var pos, lowerCasedTagName;
54742        if (start == null)
54743            start = index;
54744        if (end == null)
54745            end = index;
54746        // Find the closest opened tag of the same type
54747        if (tagName) {
54748            lowerCasedTagName = tagName.toLowerCase();
54749            for (pos = stack.length - 1; pos >= 0; pos--) {
54750                if (stack[pos].lowerCasedTag === lowerCasedTagName) {
54751                    break;
54752                }
54753            }
54754        }
54755        else {
54756            // If no tag name is provided, clean shop
54757            pos = 0;
54758        }
54759        if (pos >= 0) {
54760            // Close all the open elements, up the stack
54761            for (var i = stack.length - 1; i >= pos; i--) {
54762                if ( true && (i > pos || !tagName) && options.warn) {
54763                    options.warn("tag <".concat(stack[i].tag, "> has no matching end tag."), {
54764                        start: stack[i].start,
54765                        end: stack[i].end
54766                    });
54767                }
54768                if (options.end) {
54769                    options.end(stack[i].tag, start, end);
54770                }
54771            }
54772            // Remove the open elements from the stack
54773            stack.length = pos;
54774            lastTag = pos && stack[pos - 1].tag;
54775        }
54776        else if (lowerCasedTagName === 'br') {
54777            if (options.start) {
54778                options.start(tagName, [], true, start, end);
54779            }
54780        }
54781        else if (lowerCasedTagName === 'p') {
54782            if (options.start) {
54783                options.start(tagName, [], false, start, end);
54784            }
54785            if (options.end) {
54786                options.end(tagName, start, end);
54787            }
54788        }
54789    }
54790}
54791
54792var onRE = /^@|^v-on:/;
54793var dirRE = /^v-|^@|^:|^#/;
54794var forAliasRE = /([\s\S]*?)\s+(?:in|of)\s+([\s\S]*)/;
54795var forIteratorRE = /,([^,\}\]]*)(?:,([^,\}\]]*))?$/;
54796var stripParensRE = /^\(|\)$/g;
54797var dynamicArgRE = /^\[.*\]$/;
54798var argRE = /:(.*)$/;
54799var bindRE = /^:|^\.|^v-bind:/;
54800var modifierRE = /\.[^.\]]+(?=[^\]]*$)/g;
54801var slotRE = /^v-slot(:|$)|^#/;
54802var lineBreakRE = /[\r\n]/;
54803var whitespaceRE = /[ \f\t\r\n]+/g;
54804var invalidAttributeRE = /[\s"'<>\/=]/;
54805var decodeHTMLCached = cached(he.decode);
54806var emptySlotScopeToken = "_empty_";
54807// configurable state
54808var warn;
54809var delimiters;
54810var transforms;
54811var preTransforms;
54812var postTransforms;
54813var platformIsPreTag;
54814var platformMustUseProp;
54815var platformGetTagNamespace;
54816var maybeComponent;
54817function createASTElement(tag, attrs, parent) {
54818    return {
54819        type: 1,
54820        tag: tag,
54821        attrsList: attrs,
54822        attrsMap: makeAttrsMap(attrs),
54823        rawAttrsMap: {},
54824        parent: parent,
54825        children: []
54826    };
54827}
54828/**
54829 * Convert HTML string to AST.
54830 */
54831function parse(template, options) {
54832    warn = options.warn || baseWarn;
54833    platformIsPreTag = options.isPreTag || no;
54834    platformMustUseProp = options.mustUseProp || no;
54835    platformGetTagNamespace = options.getTagNamespace || no;
54836    var isReservedTag = options.isReservedTag || no;
54837    maybeComponent = function (el) {
54838        return !!(el.component ||
54839            el.attrsMap[':is'] ||
54840            el.attrsMap['v-bind:is'] ||
54841            !(el.attrsMap.is ? isReservedTag(el.attrsMap.is) : isReservedTag(el.tag)));
54842    };
54843    transforms = pluckModuleFunction(options.modules, 'transformNode');
54844    preTransforms = pluckModuleFunction(options.modules, 'preTransformNode');
54845    postTransforms = pluckModuleFunction(options.modules, 'postTransformNode');
54846    delimiters = options.delimiters;
54847    var stack = [];
54848    var preserveWhitespace = options.preserveWhitespace !== false;
54849    var whitespaceOption = options.whitespace;
54850    var root;
54851    var currentParent;
54852    var inVPre = false;
54853    var inPre = false;
54854    var warned = false;
54855    function warnOnce(msg, range) {
54856        if (!warned) {
54857            warned = true;
54858            warn(msg, range);
54859        }
54860    }
54861    function closeElement(element) {
54862        trimEndingWhitespace(element);
54863        if (!inVPre && !element.processed) {
54864            element = processElement(element, options);
54865        }
54866        // tree management
54867        if (!stack.length && element !== root) {
54868            // allow root elements with v-if, v-else-if and v-else
54869            if (root.if && (element.elseif || element.else)) {
54870                if (true) {
54871                    checkRootConstraints(element);
54872                }
54873                addIfCondition(root, {
54874                    exp: element.elseif,
54875                    block: element
54876                });
54877            }
54878            else if (true) {
54879                warnOnce("Component template should contain exactly one root element. " +
54880                    "If you are using v-if on multiple elements, " +
54881                    "use v-else-if to chain them instead.", { start: element.start });
54882            }
54883        }
54884        if (currentParent && !element.forbidden) {
54885            if (element.elseif || element.else) {
54886                processIfConditions(element, currentParent);
54887            }
54888            else {
54889                if (element.slotScope) {
54890                    // scoped slot
54891                    // keep it in the children list so that v-else(-if) conditions can
54892                    // find it as the prev node.
54893                    var name_1 = element.slotTarget || '"default"';
54894                    (currentParent.scopedSlots || (currentParent.scopedSlots = {}))[name_1] = element;
54895                }
54896                currentParent.children.push(element);
54897                element.parent = currentParent;
54898            }
54899        }
54900        // final children cleanup
54901        // filter out scoped slots
54902        element.children = element.children.filter(function (c) { return !c.slotScope; });
54903        // remove trailing whitespace node again
54904        trimEndingWhitespace(element);
54905        // check pre state
54906        if (element.pre) {
54907            inVPre = false;
54908        }
54909        if (platformIsPreTag(element.tag)) {
54910            inPre = false;
54911        }
54912        // apply post-transforms
54913        for (var i = 0; i < postTransforms.length; i++) {
54914            postTransforms[i](element, options);
54915        }
54916    }
54917    function trimEndingWhitespace(el) {
54918        // remove trailing whitespace node
54919        if (!inPre) {
54920            var lastNode = void 0;
54921            while ((lastNode = el.children[el.children.length - 1]) &&
54922                lastNode.type === 3 &&
54923                lastNode.text === ' ') {
54924                el.children.pop();
54925            }
54926        }
54927    }
54928    function checkRootConstraints(el) {
54929        if (el.tag === 'slot' || el.tag === 'template') {
54930            warnOnce("Cannot use <".concat(el.tag, "> as component root element because it may ") +
54931                'contain multiple nodes.', { start: el.start });
54932        }
54933        if (el.attrsMap.hasOwnProperty('v-for')) {
54934            warnOnce('Cannot use v-for on stateful component root element because ' +
54935                'it renders multiple elements.', el.rawAttrsMap['v-for']);
54936        }
54937    }
54938    parseHTML(template, {
54939        warn: warn,
54940        expectHTML: options.expectHTML,
54941        isUnaryTag: options.isUnaryTag,
54942        canBeLeftOpenTag: options.canBeLeftOpenTag,
54943        shouldDecodeNewlines: options.shouldDecodeNewlines,
54944        shouldDecodeNewlinesForHref: options.shouldDecodeNewlinesForHref,
54945        shouldKeepComment: options.comments,
54946        outputSourceRange: options.outputSourceRange,
54947        start: function (tag, attrs, unary, start, end) {
54948            // check namespace.
54949            // inherit parent ns if there is one
54950            var ns = (currentParent && currentParent.ns) || platformGetTagNamespace(tag);
54951            // handle IE svg bug
54952            /* istanbul ignore if */
54953            if (isIE && ns === 'svg') {
54954                attrs = guardIESVGBug(attrs);
54955            }
54956            var element = createASTElement(tag, attrs, currentParent);
54957            if (ns) {
54958                element.ns = ns;
54959            }
54960            if (true) {
54961                if (options.outputSourceRange) {
54962                    element.start = start;
54963                    element.end = end;
54964                    element.rawAttrsMap = element.attrsList.reduce(function (cumulated, attr) {
54965                        cumulated[attr.name] = attr;
54966                        return cumulated;
54967                    }, {});
54968                }
54969                attrs.forEach(function (attr) {
54970                    if (invalidAttributeRE.test(attr.name)) {
54971                        warn("Invalid dynamic argument expression: attribute names cannot contain " +
54972                            "spaces, quotes, <, >, / or =.", options.outputSourceRange
54973                            ? {
54974                                start: attr.start + attr.name.indexOf("["),
54975                                end: attr.start + attr.name.length
54976                            }
54977                            : undefined);
54978                    }
54979                });
54980            }
54981            if (isForbiddenTag(element) && !isServerRendering()) {
54982                element.forbidden = true;
54983                 true &&
54984                    warn('Templates should only be responsible for mapping the state to the ' +
54985                        'UI. Avoid placing tags with side-effects in your templates, such as ' +
54986                        "<".concat(tag, ">") +
54987                        ', as they will not be parsed.', { start: element.start });
54988            }
54989            // apply pre-transforms
54990            for (var i = 0; i < preTransforms.length; i++) {
54991                element = preTransforms[i](element, options) || element;
54992            }
54993            if (!inVPre) {
54994                processPre(element);
54995                if (element.pre) {
54996                    inVPre = true;
54997                }
54998            }
54999            if (platformIsPreTag(element.tag)) {
55000                inPre = true;
55001            }
55002            if (inVPre) {
55003                processRawAttrs(element);
55004            }
55005            else if (!element.processed) {
55006                // structural directives
55007                processFor(element);
55008                processIf(element);
55009                processOnce(element);
55010            }
55011            if (!root) {
55012                root = element;
55013                if (true) {
55014                    checkRootConstraints(root);
55015                }
55016            }
55017            if (!unary) {
55018                currentParent = element;
55019                stack.push(element);
55020            }
55021            else {
55022                closeElement(element);
55023            }
55024        },
55025        end: function (tag, start, end) {
55026            var element = stack[stack.length - 1];
55027            // pop stack
55028            stack.length -= 1;
55029            currentParent = stack[stack.length - 1];
55030            if ( true && options.outputSourceRange) {
55031                element.end = end;
55032            }
55033            closeElement(element);
55034        },
55035        chars: function (text, start, end) {
55036            if (!currentParent) {
55037                if (true) {
55038                    if (text === template) {
55039                        warnOnce('Component template requires a root element, rather than just text.', { start: start });
55040                    }
55041                    else if ((text = text.trim())) {
55042                        warnOnce("text \"".concat(text, "\" outside root element will be ignored."), {
55043                            start: start
55044                        });
55045                    }
55046                }
55047                return;
55048            }
55049            // IE textarea placeholder bug
55050            /* istanbul ignore if */
55051            if (isIE &&
55052                currentParent.tag === 'textarea' &&
55053                currentParent.attrsMap.placeholder === text) {
55054                return;
55055            }
55056            var children = currentParent.children;
55057            if (inPre || text.trim()) {
55058                text = isTextTag(currentParent)
55059                    ? text
55060                    : decodeHTMLCached(text);
55061            }
55062            else if (!children.length) {
55063                // remove the whitespace-only node right after an opening tag
55064                text = '';
55065            }
55066            else if (whitespaceOption) {
55067                if (whitespaceOption === 'condense') {
55068                    // in condense mode, remove the whitespace node if it contains
55069                    // line break, otherwise condense to a single space
55070                    text = lineBreakRE.test(text) ? '' : ' ';
55071                }
55072                else {
55073                    text = ' ';
55074                }
55075            }
55076            else {
55077                text = preserveWhitespace ? ' ' : '';
55078            }
55079            if (text) {
55080                if (!inPre && whitespaceOption === 'condense') {
55081                    // condense consecutive whitespaces into single space
55082                    text = text.replace(whitespaceRE, ' ');
55083                }
55084                var res = void 0;
55085                var child = void 0;
55086                if (!inVPre && text !== ' ' && (res = parseText(text, delimiters))) {
55087                    child = {
55088                        type: 2,
55089                        expression: res.expression,
55090                        tokens: res.tokens,
55091                        text: text
55092                    };
55093                }
55094                else if (text !== ' ' ||
55095                    !children.length ||
55096                    children[children.length - 1].text !== ' ') {
55097                    child = {
55098                        type: 3,
55099                        text: text
55100                    };
55101                }
55102                if (child) {
55103                    if ( true && options.outputSourceRange) {
55104                        child.start = start;
55105                        child.end = end;
55106                    }
55107                    children.push(child);
55108                }
55109            }
55110        },
55111        comment: function (text, start, end) {
55112            // adding anything as a sibling to the root node is forbidden
55113            // comments should still be allowed, but ignored
55114            if (currentParent) {
55115                var child = {
55116                    type: 3,
55117                    text: text,
55118                    isComment: true
55119                };
55120                if ( true && options.outputSourceRange) {
55121                    child.start = start;
55122                    child.end = end;
55123                }
55124                currentParent.children.push(child);
55125            }
55126        }
55127    });
55128    return root;
55129}
55130function processPre(el) {
55131    if (getAndRemoveAttr(el, 'v-pre') != null) {
55132        el.pre = true;
55133    }
55134}
55135function processRawAttrs(el) {
55136    var list = el.attrsList;
55137    var len = list.length;
55138    if (len) {
55139        var attrs = (el.attrs = new Array(len));
55140        for (var i = 0; i < len; i++) {
55141            attrs[i] = {
55142                name: list[i].name,
55143                value: JSON.stringify(list[i].value)
55144            };
55145            if (list[i].start != null) {
55146                attrs[i].start = list[i].start;
55147                attrs[i].end = list[i].end;
55148            }
55149        }
55150    }
55151    else if (!el.pre) {
55152        // non root node in pre blocks with no attributes
55153        el.plain = true;
55154    }
55155}
55156function processElement(element, options) {
55157    processKey(element);
55158    // determine whether this is a plain element after
55159    // removing structural attributes
55160    element.plain =
55161        !element.key && !element.scopedSlots && !element.attrsList.length;
55162    processRef(element);
55163    processSlotContent(element);
55164    processSlotOutlet(element);
55165    processComponent(element);
55166    for (var i = 0; i < transforms.length; i++) {
55167        element = transforms[i](element, options) || element;
55168    }
55169    processAttrs(element);
55170    return element;
55171}
55172function processKey(el) {
55173    var exp = getBindingAttr(el, 'key');
55174    if (exp) {
55175        if (true) {
55176            if (el.tag === 'template') {
55177                warn("<template> cannot be keyed. Place the key on real elements instead.", getRawBindingAttr(el, 'key'));
55178            }
55179            if (el.for) {
55180                var iterator = el.iterator2 || el.iterator1;
55181                var parent_1 = el.parent;
55182                if (iterator &&
55183                    iterator === exp &&
55184                    parent_1 &&
55185                    parent_1.tag === 'transition-group') {
55186                    warn("Do not use v-for index as key on <transition-group> children, " +
55187                        "this is the same as not using keys.", getRawBindingAttr(el, 'key'), true /* tip */);
55188                }
55189            }
55190        }
55191        el.key = exp;
55192    }
55193}
55194function processRef(el) {
55195    var ref = getBindingAttr(el, 'ref');
55196    if (ref) {
55197        el.ref = ref;
55198        el.refInFor = checkInFor(el);
55199    }
55200}
55201function processFor(el) {
55202    var exp;
55203    if ((exp = getAndRemoveAttr(el, 'v-for'))) {
55204        var res = parseFor(exp);
55205        if (res) {
55206            extend(el, res);
55207        }
55208        else if (true) {
55209            warn("Invalid v-for expression: ".concat(exp), el.rawAttrsMap['v-for']);
55210        }
55211    }
55212}
55213function parseFor(exp) {
55214    var inMatch = exp.match(forAliasRE);
55215    if (!inMatch)
55216        return;
55217    var res = {};
55218    res.for = inMatch[2].trim();
55219    var alias = inMatch[1].trim().replace(stripParensRE, '');
55220    var iteratorMatch = alias.match(forIteratorRE);
55221    if (iteratorMatch) {
55222        res.alias = alias.replace(forIteratorRE, '').trim();
55223        res.iterator1 = iteratorMatch[1].trim();
55224        if (iteratorMatch[2]) {
55225            res.iterator2 = iteratorMatch[2].trim();
55226        }
55227    }
55228    else {
55229        res.alias = alias;
55230    }
55231    return res;
55232}
55233function processIf(el) {
55234    var exp = getAndRemoveAttr(el, 'v-if');
55235    if (exp) {
55236        el.if = exp;
55237        addIfCondition(el, {
55238            exp: exp,
55239            block: el
55240        });
55241    }
55242    else {
55243        if (getAndRemoveAttr(el, 'v-else') != null) {
55244            el.else = true;
55245        }
55246        var elseif = getAndRemoveAttr(el, 'v-else-if');
55247        if (elseif) {
55248            el.elseif = elseif;
55249        }
55250    }
55251}
55252function processIfConditions(el, parent) {
55253    var prev = findPrevElement(parent.children);
55254    if (prev && prev.if) {
55255        addIfCondition(prev, {
55256            exp: el.elseif,
55257            block: el
55258        });
55259    }
55260    else if (true) {
55261        warn("v-".concat(el.elseif ? 'else-if="' + el.elseif + '"' : 'else', " ") +
55262            "used on element <".concat(el.tag, "> without corresponding v-if."), el.rawAttrsMap[el.elseif ? 'v-else-if' : 'v-else']);
55263    }
55264}
55265function findPrevElement(children) {
55266    var i = children.length;
55267    while (i--) {
55268        if (children[i].type === 1) {
55269            return children[i];
55270        }
55271        else {
55272            if ( true && children[i].text !== ' ') {
55273                warn("text \"".concat(children[i].text.trim(), "\" between v-if and v-else(-if) ") +
55274                    "will be ignored.", children[i]);
55275            }
55276            children.pop();
55277        }
55278    }
55279}
55280function addIfCondition(el, condition) {
55281    if (!el.ifConditions) {
55282        el.ifConditions = [];
55283    }
55284    el.ifConditions.push(condition);
55285}
55286function processOnce(el) {
55287    var once = getAndRemoveAttr(el, 'v-once');
55288    if (once != null) {
55289        el.once = true;
55290    }
55291}
55292// handle content being passed to a component as slot,
55293// e.g. <template slot="xxx">, <div slot-scope="xxx">
55294function processSlotContent(el) {
55295    var slotScope;
55296    if (el.tag === 'template') {
55297        slotScope = getAndRemoveAttr(el, 'scope');
55298        /* istanbul ignore if */
55299        if ( true && slotScope) {
55300            warn("the \"scope\" attribute for scoped slots have been deprecated and " +
55301                "replaced by \"slot-scope\" since 2.5. The new \"slot-scope\" attribute " +
55302                "can also be used on plain elements in addition to <template> to " +
55303                "denote scoped slots.", el.rawAttrsMap['scope'], true);
55304        }
55305        el.slotScope = slotScope || getAndRemoveAttr(el, 'slot-scope');
55306    }
55307    else if ((slotScope = getAndRemoveAttr(el, 'slot-scope'))) {
55308        /* istanbul ignore if */
55309        if ( true && el.attrsMap['v-for']) {
55310            warn("Ambiguous combined usage of slot-scope and v-for on <".concat(el.tag, "> ") +
55311                "(v-for takes higher priority). Use a wrapper <template> for the " +
55312                "scoped slot to make it clearer.", el.rawAttrsMap['slot-scope'], true);
55313        }
55314        el.slotScope = slotScope;
55315    }
55316    // slot="xxx"
55317    var slotTarget = getBindingAttr(el, 'slot');
55318    if (slotTarget) {
55319        el.slotTarget = slotTarget === '""' ? '"default"' : slotTarget;
55320        el.slotTargetDynamic = !!(el.attrsMap[':slot'] || el.attrsMap['v-bind:slot']);
55321        // preserve slot as an attribute for native shadow DOM compat
55322        // only for non-scoped slots.
55323        if (el.tag !== 'template' && !el.slotScope) {
55324            addAttr(el, 'slot', slotTarget, getRawBindingAttr(el, 'slot'));
55325        }
55326    }
55327    // 2.6 v-slot syntax
55328    {
55329        if (el.tag === 'template') {
55330            // v-slot on <template>
55331            var slotBinding = getAndRemoveAttrByRegex(el, slotRE);
55332            if (slotBinding) {
55333                if (true) {
55334                    if (el.slotTarget || el.slotScope) {
55335                        warn("Unexpected mixed usage of different slot syntaxes.", el);
55336                    }
55337                    if (el.parent && !maybeComponent(el.parent)) {
55338                        warn("<template v-slot> can only appear at the root level inside " +
55339                            "the receiving component", el);
55340                    }
55341                }
55342                var _a = getSlotName(slotBinding), name_2 = _a.name, dynamic = _a.dynamic;
55343                el.slotTarget = name_2;
55344                el.slotTargetDynamic = dynamic;
55345                el.slotScope = slotBinding.value || emptySlotScopeToken; // force it into a scoped slot for perf
55346            }
55347        }
55348        else {
55349            // v-slot on component, denotes default slot
55350            var slotBinding = getAndRemoveAttrByRegex(el, slotRE);
55351            if (slotBinding) {
55352                if (true) {
55353                    if (!maybeComponent(el)) {
55354                        warn("v-slot can only be used on components or <template>.", slotBinding);
55355                    }
55356                    if (el.slotScope || el.slotTarget) {
55357                        warn("Unexpected mixed usage of different slot syntaxes.", el);
55358                    }
55359                    if (el.scopedSlots) {
55360                        warn("To avoid scope ambiguity, the default slot should also use " +
55361                            "<template> syntax when there are other named slots.", slotBinding);
55362                    }
55363                }
55364                // add the component's children to its default slot
55365                var slots = el.scopedSlots || (el.scopedSlots = {});
55366                var _b = getSlotName(slotBinding), name_3 = _b.name, dynamic = _b.dynamic;
55367                var slotContainer_1 = (slots[name_3] = createASTElement('template', [], el));
55368                slotContainer_1.slotTarget = name_3;
55369                slotContainer_1.slotTargetDynamic = dynamic;
55370                slotContainer_1.children = el.children.filter(function (c) {
55371                    if (!c.slotScope) {
55372                        c.parent = slotContainer_1;
55373                        return true;
55374                    }
55375                });
55376                slotContainer_1.slotScope = slotBinding.value || emptySlotScopeToken;
55377                // remove children as they are returned from scopedSlots now
55378                el.children = [];
55379                // mark el non-plain so data gets generated
55380                el.plain = false;
55381            }
55382        }
55383    }
55384}
55385function getSlotName(binding) {
55386    var name = binding.name.replace(slotRE, '');
55387    if (!name) {
55388        if (binding.name[0] !== '#') {
55389            name = 'default';
55390        }
55391        else if (true) {
55392            warn("v-slot shorthand syntax requires a slot name.", binding);
55393        }
55394    }
55395    return dynamicArgRE.test(name)
55396        ? // dynamic [name]
55397            { name: name.slice(1, -1), dynamic: true }
55398        : // static name
55399            { name: "\"".concat(name, "\""), dynamic: false };
55400}
55401// handle <slot/> outlets
55402function processSlotOutlet(el) {
55403    if (el.tag === 'slot') {
55404        el.slotName = getBindingAttr(el, 'name');
55405        if ( true && el.key) {
55406            warn("`key` does not work on <slot> because slots are abstract outlets " +
55407                "and can possibly expand into multiple elements. " +
55408                "Use the key on a wrapping element instead.", getRawBindingAttr(el, 'key'));
55409        }
55410    }
55411}
55412function processComponent(el) {
55413    var binding;
55414    if ((binding = getBindingAttr(el, 'is'))) {
55415        el.component = binding;
55416    }
55417    if (getAndRemoveAttr(el, 'inline-template') != null) {
55418        el.inlineTemplate = true;
55419    }
55420}
55421function processAttrs(el) {
55422    var list = el.attrsList;
55423    var i, l, name, rawName, value, modifiers, syncGen, isDynamic;
55424    for (i = 0, l = list.length; i < l; i++) {
55425        name = rawName = list[i].name;
55426        value = list[i].value;
55427        if (dirRE.test(name)) {
55428            // mark element as dynamic
55429            el.hasBindings = true;
55430            // modifiers
55431            modifiers = parseModifiers(name.replace(dirRE, ''));
55432            // support .foo shorthand syntax for the .prop modifier
55433            if (modifiers) {
55434                name = name.replace(modifierRE, '');
55435            }
55436            if (bindRE.test(name)) {
55437                // v-bind
55438                name = name.replace(bindRE, '');
55439                value = parseFilters(value);
55440                isDynamic = dynamicArgRE.test(name);
55441                if (isDynamic) {
55442                    name = name.slice(1, -1);
55443                }
55444                if ( true && value.trim().length === 0) {
55445                    warn("The value for a v-bind expression cannot be empty. Found in \"v-bind:".concat(name, "\""));
55446                }
55447                if (modifiers) {
55448                    if (modifiers.prop && !isDynamic) {
55449                        name = camelize(name);
55450                        if (name === 'innerHtml')
55451                            name = 'innerHTML';
55452                    }
55453                    if (modifiers.camel && !isDynamic) {
55454                        name = camelize(name);
55455                    }
55456                    if (modifiers.sync) {
55457                        syncGen = genAssignmentCode(value, "$event");
55458                        if (!isDynamic) {
55459                            addHandler(el, "update:".concat(camelize(name)), syncGen, null, false, warn, list[i]);
55460                            if (hyphenate(name) !== camelize(name)) {
55461                                addHandler(el, "update:".concat(hyphenate(name)), syncGen, null, false, warn, list[i]);
55462                            }
55463                        }
55464                        else {
55465                            // handler w/ dynamic event name
55466                            addHandler(el, "\"update:\"+(".concat(name, ")"), syncGen, null, false, warn, list[i], true // dynamic
55467                            );
55468                        }
55469                    }
55470                }
55471                if ((modifiers && modifiers.prop) ||
55472                    (!el.component && platformMustUseProp(el.tag, el.attrsMap.type, name))) {
55473                    addProp(el, name, value, list[i], isDynamic);
55474                }
55475                else {
55476                    addAttr(el, name, value, list[i], isDynamic);
55477                }
55478            }
55479            else if (onRE.test(name)) {
55480                // v-on
55481                name = name.replace(onRE, '');
55482                isDynamic = dynamicArgRE.test(name);
55483                if (isDynamic) {
55484                    name = name.slice(1, -1);
55485                }
55486                addHandler(el, name, value, modifiers, false, warn, list[i], isDynamic);
55487            }
55488            else {
55489                // normal directives
55490                name = name.replace(dirRE, '');
55491                // parse arg
55492                var argMatch = name.match(argRE);
55493                var arg = argMatch && argMatch[1];
55494                isDynamic = false;
55495                if (arg) {
55496                    name = name.slice(0, -(arg.length + 1));
55497                    if (dynamicArgRE.test(arg)) {
55498                        arg = arg.slice(1, -1);
55499                        isDynamic = true;
55500                    }
55501                }
55502                addDirective(el, name, rawName, value, arg, isDynamic, modifiers, list[i]);
55503                if ( true && name === 'model') {
55504                    checkForAliasModel(el, value);
55505                }
55506            }
55507        }
55508        else {
55509            // literal attribute
55510            if (true) {
55511                var res = parseText(value, delimiters);
55512                if (res) {
55513                    warn("".concat(name, "=\"").concat(value, "\": ") +
55514                        'Interpolation inside attributes has been removed. ' +
55515                        'Use v-bind or the colon shorthand instead. For example, ' +
55516                        'instead of <div id="{{ val }}">, use <div :id="val">.', list[i]);
55517                }
55518            }
55519            addAttr(el, name, JSON.stringify(value), list[i]);
55520            // #6887 firefox doesn't update muted state if set via attribute
55521            // even immediately after element creation
55522            if (!el.component &&
55523                name === 'muted' &&
55524                platformMustUseProp(el.tag, el.attrsMap.type, name)) {
55525                addProp(el, name, 'true', list[i]);
55526            }
55527        }
55528    }
55529}
55530function checkInFor(el) {
55531    var parent = el;
55532    while (parent) {
55533        if (parent.for !== undefined) {
55534            return true;
55535        }
55536        parent = parent.parent;
55537    }
55538    return false;
55539}
55540function parseModifiers(name) {
55541    var match = name.match(modifierRE);
55542    if (match) {
55543        var ret_1 = {};
55544        match.forEach(function (m) {
55545            ret_1[m.slice(1)] = true;
55546        });
55547        return ret_1;
55548    }
55549}
55550function makeAttrsMap(attrs) {
55551    var map = {};
55552    for (var i = 0, l = attrs.length; i < l; i++) {
55553        if ( true && map[attrs[i].name] && !isIE && !isEdge) {
55554            warn('duplicate attribute: ' + attrs[i].name, attrs[i]);
55555        }
55556        map[attrs[i].name] = attrs[i].value;
55557    }
55558    return map;
55559}
55560// for script (e.g. type="x/template") or style, do not decode content
55561function isTextTag(el) {
55562    return el.tag === 'script' || el.tag === 'style';
55563}
55564function isForbiddenTag(el) {
55565    return (el.tag === 'style' ||
55566        (el.tag === 'script' &&
55567            (!el.attrsMap.type || el.attrsMap.type === 'text/javascript')));
55568}
55569var ieNSBug = /^xmlns:NS\d+/;
55570var ieNSPrefix = /^NS\d+:/;
55571/* istanbul ignore next */
55572function guardIESVGBug(attrs) {
55573    var res = [];
55574    for (var i = 0; i < attrs.length; i++) {
55575        var attr = attrs[i];
55576        if (!ieNSBug.test(attr.name)) {
55577            attr.name = attr.name.replace(ieNSPrefix, '');
55578            res.push(attr);
55579        }
55580    }
55581    return res;
55582}
55583function checkForAliasModel(el, value) {
55584    var _el = el;
55585    while (_el) {
55586        if (_el.for && _el.alias === value) {
55587            warn("<".concat(el.tag, " v-model=\"").concat(value, "\">: ") +
55588                "You are binding v-model directly to a v-for iteration alias. " +
55589                "This will not be able to modify the v-for source array because " +
55590                "writing to the alias is like modifying a function local variable. " +
55591                "Consider using an array of objects and use v-model on an object property instead.", el.rawAttrsMap['v-model']);
55592        }
55593        _el = _el.parent;
55594    }
55595}
55596
55597/**
55598 * Expand input[v-model] with dynamic type bindings into v-if-else chains
55599 * Turn this:
55600 *   <input v-model="data[type]" :type="type">
55601 * into this:
55602 *   <input v-if="type === 'checkbox'" type="checkbox" v-model="data[type]">
55603 *   <input v-else-if="type === 'radio'" type="radio" v-model="data[type]">
55604 *   <input v-else :type="type" v-model="data[type]">
55605 */
55606function preTransformNode(el, options) {
55607    if (el.tag === 'input') {
55608        var map = el.attrsMap;
55609        if (!map['v-model']) {
55610            return;
55611        }
55612        var typeBinding = void 0;
55613        if (map[':type'] || map['v-bind:type']) {
55614            typeBinding = getBindingAttr(el, 'type');
55615        }
55616        if (!map.type && !typeBinding && map['v-bind']) {
55617            typeBinding = "(".concat(map['v-bind'], ").type");
55618        }
55619        if (typeBinding) {
55620            var ifCondition = getAndRemoveAttr(el, 'v-if', true);
55621            var ifConditionExtra = ifCondition ? "&&(".concat(ifCondition, ")") : "";
55622            var hasElse = getAndRemoveAttr(el, 'v-else', true) != null;
55623            var elseIfCondition = getAndRemoveAttr(el, 'v-else-if', true);
55624            // 1. checkbox
55625            var branch0 = cloneASTElement(el);
55626            // process for on the main node
55627            processFor(branch0);
55628            addRawAttr(branch0, 'type', 'checkbox');
55629            processElement(branch0, options);
55630            branch0.processed = true; // prevent it from double-processed
55631            branch0.if = "(".concat(typeBinding, ")==='checkbox'") + ifConditionExtra;
55632            addIfCondition(branch0, {
55633                exp: branch0.if,
55634                block: branch0
55635            });
55636            // 2. add radio else-if condition
55637            var branch1 = cloneASTElement(el);
55638            getAndRemoveAttr(branch1, 'v-for', true);
55639            addRawAttr(branch1, 'type', 'radio');
55640            processElement(branch1, options);
55641            addIfCondition(branch0, {
55642                exp: "(".concat(typeBinding, ")==='radio'") + ifConditionExtra,
55643                block: branch1
55644            });
55645            // 3. other
55646            var branch2 = cloneASTElement(el);
55647            getAndRemoveAttr(branch2, 'v-for', true);
55648            addRawAttr(branch2, ':type', typeBinding);
55649            processElement(branch2, options);
55650            addIfCondition(branch0, {
55651                exp: ifCondition,
55652                block: branch2
55653            });
55654            if (hasElse) {
55655                branch0.else = true;
55656            }
55657            else if (elseIfCondition) {
55658                branch0.elseif = elseIfCondition;
55659            }
55660            return branch0;
55661        }
55662    }
55663}
55664function cloneASTElement(el) {
55665    return createASTElement(el.tag, el.attrsList.slice(), el.parent);
55666}
55667var model = {
55668    preTransformNode: preTransformNode
55669};
55670
55671var modules = [klass, style, model];
55672
55673function text(el, dir) {
55674    if (dir.value) {
55675        addProp(el, 'textContent', "_s(".concat(dir.value, ")"), dir);
55676    }
55677}
55678
55679function html(el, dir) {
55680    if (dir.value) {
55681        addProp(el, 'innerHTML', "_s(".concat(dir.value, ")"), dir);
55682    }
55683}
55684
55685var directives = {
55686    model: model$1,
55687    text: text,
55688    html: html
55689};
55690
55691var baseOptions = {
55692    expectHTML: true,
55693    modules: modules,
55694    directives: directives,
55695    isPreTag: isPreTag,
55696    isUnaryTag: isUnaryTag,
55697    mustUseProp: mustUseProp,
55698    canBeLeftOpenTag: canBeLeftOpenTag,
55699    isReservedTag: isReservedTag,
55700    getTagNamespace: getTagNamespace,
55701    staticKeys: genStaticKeys$1(modules)
55702};
55703
55704var isStaticKey;
55705var isPlatformReservedTag;
55706var genStaticKeysCached = cached(genStaticKeys);
55707/**
55708 * Goal of the optimizer: walk the generated template AST tree
55709 * and detect sub-trees that are purely static, i.e. parts of
55710 * the DOM that never needs to change.
55711 *
55712 * Once we detect these sub-trees, we can:
55713 *
55714 * 1. Hoist them into constants, so that we no longer need to
55715 *    create fresh nodes for them on each re-render;
55716 * 2. Completely skip them in the patching process.
55717 */
55718function optimize(root, options) {
55719    if (!root)
55720        return;
55721    isStaticKey = genStaticKeysCached(options.staticKeys || '');
55722    isPlatformReservedTag = options.isReservedTag || no;
55723    // first pass: mark all non-static nodes.
55724    markStatic(root);
55725    // second pass: mark static roots.
55726    markStaticRoots(root, false);
55727}
55728function genStaticKeys(keys) {
55729    return makeMap('type,tag,attrsList,attrsMap,plain,parent,children,attrs,start,end,rawAttrsMap' +
55730        (keys ? ',' + keys : ''));
55731}
55732function markStatic(node) {
55733    node.static = isStatic(node);
55734    if (node.type === 1) {
55735        // do not make component slot content static. this avoids
55736        // 1. components not able to mutate slot nodes
55737        // 2. static slot content fails for hot-reloading
55738        if (!isPlatformReservedTag(node.tag) &&
55739            node.tag !== 'slot' &&
55740            node.attrsMap['inline-template'] == null) {
55741            return;
55742        }
55743        for (var i = 0, l = node.children.length; i < l; i++) {
55744            var child = node.children[i];
55745            markStatic(child);
55746            if (!child.static) {
55747                node.static = false;
55748            }
55749        }
55750        if (node.ifConditions) {
55751            for (var i = 1, l = node.ifConditions.length; i < l; i++) {
55752                var block = node.ifConditions[i].block;
55753                markStatic(block);
55754                if (!block.static) {
55755                    node.static = false;
55756                }
55757            }
55758        }
55759    }
55760}
55761function markStaticRoots(node, isInFor) {
55762    if (node.type === 1) {
55763        if (node.static || node.once) {
55764            node.staticInFor = isInFor;
55765        }
55766        // For a node to qualify as a static root, it should have children that
55767        // are not just static text. Otherwise the cost of hoisting out will
55768        // outweigh the benefits and it's better off to just always render it fresh.
55769        if (node.static &&
55770            node.children.length &&
55771            !(node.children.length === 1 && node.children[0].type === 3)) {
55772            node.staticRoot = true;
55773            return;
55774        }
55775        else {
55776            node.staticRoot = false;
55777        }
55778        if (node.children) {
55779            for (var i = 0, l = node.children.length; i < l; i++) {
55780                markStaticRoots(node.children[i], isInFor || !!node.for);
55781            }
55782        }
55783        if (node.ifConditions) {
55784            for (var i = 1, l = node.ifConditions.length; i < l; i++) {
55785                markStaticRoots(node.ifConditions[i].block, isInFor);
55786            }
55787        }
55788    }
55789}
55790function isStatic(node) {
55791    if (node.type === 2) {
55792        // expression
55793        return false;
55794    }
55795    if (node.type === 3) {
55796        // text
55797        return true;
55798    }
55799    return !!(node.pre ||
55800        (!node.hasBindings && // no dynamic bindings
55801            !node.if &&
55802            !node.for && // not v-if or v-for or v-else
55803            !isBuiltInTag(node.tag) && // not a built-in
55804            isPlatformReservedTag(node.tag) && // not a component
55805            !isDirectChildOfTemplateFor(node) &&
55806            Object.keys(node).every(isStaticKey)));
55807}
55808function isDirectChildOfTemplateFor(node) {
55809    while (node.parent) {
55810        node = node.parent;
55811        if (node.tag !== 'template') {
55812            return false;
55813        }
55814        if (node.for) {
55815            return true;
55816        }
55817    }
55818    return false;
55819}
55820
55821var fnExpRE = /^([\w$_]+|\([^)]*?\))\s*=>|^function(?:\s+[\w$]+)?\s*\(/;
55822var fnInvokeRE = /\([^)]*?\);*$/;
55823var simplePathRE = /^[A-Za-z_$][\w$]*(?:\.[A-Za-z_$][\w$]*|\['[^']*?']|\["[^"]*?"]|\[\d+]|\[[A-Za-z_$][\w$]*])*$/;
55824// KeyboardEvent.keyCode aliases
55825var keyCodes = {
55826    esc: 27,
55827    tab: 9,
55828    enter: 13,
55829    space: 32,
55830    up: 38,
55831    left: 37,
55832    right: 39,
55833    down: 40,
55834    delete: [8, 46]
55835};
55836// KeyboardEvent.key aliases
55837var keyNames = {
55838    // #7880: IE11 and Edge use `Esc` for Escape key name.
55839    esc: ['Esc', 'Escape'],
55840    tab: 'Tab',
55841    enter: 'Enter',
55842    // #9112: IE11 uses `Spacebar` for Space key name.
55843    space: [' ', 'Spacebar'],
55844    // #7806: IE11 uses key names without `Arrow` prefix for arrow keys.
55845    up: ['Up', 'ArrowUp'],
55846    left: ['Left', 'ArrowLeft'],
55847    right: ['Right', 'ArrowRight'],
55848    down: ['Down', 'ArrowDown'],
55849    // #9112: IE11 uses `Del` for Delete key name.
55850    delete: ['Backspace', 'Delete', 'Del']
55851};
55852// #4868: modifiers that prevent the execution of the listener
55853// need to explicitly return null so that we can determine whether to remove
55854// the listener for .once
55855var genGuard = function (condition) { return "if(".concat(condition, ")return null;"); };
55856var modifierCode = {
55857    stop: '$event.stopPropagation();',
55858    prevent: '$event.preventDefault();',
55859    self: genGuard("$event.target !== $event.currentTarget"),
55860    ctrl: genGuard("!$event.ctrlKey"),
55861    shift: genGuard("!$event.shiftKey"),
55862    alt: genGuard("!$event.altKey"),
55863    meta: genGuard("!$event.metaKey"),
55864    left: genGuard("'button' in $event && $event.button !== 0"),
55865    middle: genGuard("'button' in $event && $event.button !== 1"),
55866    right: genGuard("'button' in $event && $event.button !== 2")
55867};
55868function genHandlers(events, isNative) {
55869    var prefix = isNative ? 'nativeOn:' : 'on:';
55870    var staticHandlers = "";
55871    var dynamicHandlers = "";
55872    for (var name_1 in events) {
55873        var handlerCode = genHandler(events[name_1]);
55874        //@ts-expect-error
55875        if (events[name_1] && events[name_1].dynamic) {
55876            dynamicHandlers += "".concat(name_1, ",").concat(handlerCode, ",");
55877        }
55878        else {
55879            staticHandlers += "\"".concat(name_1, "\":").concat(handlerCode, ",");
55880        }
55881    }
55882    staticHandlers = "{".concat(staticHandlers.slice(0, -1), "}");
55883    if (dynamicHandlers) {
55884        return prefix + "_d(".concat(staticHandlers, ",[").concat(dynamicHandlers.slice(0, -1), "])");
55885    }
55886    else {
55887        return prefix + staticHandlers;
55888    }
55889}
55890function genHandler(handler) {
55891    if (!handler) {
55892        return 'function(){}';
55893    }
55894    if (Array.isArray(handler)) {
55895        return "[".concat(handler.map(function (handler) { return genHandler(handler); }).join(','), "]");
55896    }
55897    var isMethodPath = simplePathRE.test(handler.value);
55898    var isFunctionExpression = fnExpRE.test(handler.value);
55899    var isFunctionInvocation = simplePathRE.test(handler.value.replace(fnInvokeRE, ''));
55900    if (!handler.modifiers) {
55901        if (isMethodPath || isFunctionExpression) {
55902            return handler.value;
55903        }
55904        return "function($event){".concat(isFunctionInvocation ? "return ".concat(handler.value) : handler.value, "}"); // inline statement
55905    }
55906    else {
55907        var code = '';
55908        var genModifierCode = '';
55909        var keys = [];
55910        var _loop_1 = function (key) {
55911            if (modifierCode[key]) {
55912                genModifierCode += modifierCode[key];
55913                // left/right
55914                if (keyCodes[key]) {
55915                    keys.push(key);
55916                }
55917            }
55918            else if (key === 'exact') {
55919                var modifiers_1 = handler.modifiers;
55920                genModifierCode += genGuard(['ctrl', 'shift', 'alt', 'meta']
55921                    .filter(function (keyModifier) { return !modifiers_1[keyModifier]; })
55922                    .map(function (keyModifier) { return "$event.".concat(keyModifier, "Key"); })
55923                    .join('||'));
55924            }
55925            else {
55926                keys.push(key);
55927            }
55928        };
55929        for (var key in handler.modifiers) {
55930            _loop_1(key);
55931        }
55932        if (keys.length) {
55933            code += genKeyFilter(keys);
55934        }
55935        // Make sure modifiers like prevent and stop get executed after key filtering
55936        if (genModifierCode) {
55937            code += genModifierCode;
55938        }
55939        var handlerCode = isMethodPath
55940            ? "return ".concat(handler.value, ".apply(null, arguments)")
55941            : isFunctionExpression
55942                ? "return (".concat(handler.value, ").apply(null, arguments)")
55943                : isFunctionInvocation
55944                    ? "return ".concat(handler.value)
55945                    : handler.value;
55946        return "function($event){".concat(code).concat(handlerCode, "}");
55947    }
55948}
55949function genKeyFilter(keys) {
55950    return (
55951    // make sure the key filters only apply to KeyboardEvents
55952    // #9441: can't use 'keyCode' in $event because Chrome autofill fires fake
55953    // key events that do not have keyCode property...
55954    "if(!$event.type.indexOf('key')&&" +
55955        "".concat(keys.map(genFilterCode).join('&&'), ")return null;"));
55956}
55957function genFilterCode(key) {
55958    var keyVal = parseInt(key, 10);
55959    if (keyVal) {
55960        return "$event.keyCode!==".concat(keyVal);
55961    }
55962    var keyCode = keyCodes[key];
55963    var keyName = keyNames[key];
55964    return ("_k($event.keyCode," +
55965        "".concat(JSON.stringify(key), ",") +
55966        "".concat(JSON.stringify(keyCode), ",") +
55967        "$event.key," +
55968        "".concat(JSON.stringify(keyName)) +
55969        ")");
55970}
55971
55972function on(el, dir) {
55973    if ( true && dir.modifiers) {
55974        warn$2("v-on without argument does not support modifiers.");
55975    }
55976    el.wrapListeners = function (code) { return "_g(".concat(code, ",").concat(dir.value, ")"); };
55977}
55978
55979function bind(el, dir) {
55980    el.wrapData = function (code) {
55981        return "_b(".concat(code, ",'").concat(el.tag, "',").concat(dir.value, ",").concat(dir.modifiers && dir.modifiers.prop ? 'true' : 'false').concat(dir.modifiers && dir.modifiers.sync ? ',true' : '', ")");
55982    };
55983}
55984
55985var baseDirectives = {
55986    on: on,
55987    bind: bind,
55988    cloak: noop
55989};
55990
55991var CodegenState = /** @class */ (function () {
55992    function CodegenState(options) {
55993        this.options = options;
55994        this.warn = options.warn || baseWarn;
55995        this.transforms = pluckModuleFunction(options.modules, 'transformCode');
55996        this.dataGenFns = pluckModuleFunction(options.modules, 'genData');
55997        this.directives = extend(extend({}, baseDirectives), options.directives);
55998        var isReservedTag = options.isReservedTag || no;
55999        this.maybeComponent = function (el) {
56000            return !!el.component || !isReservedTag(el.tag);
56001        };
56002        this.onceId = 0;
56003        this.staticRenderFns = [];
56004        this.pre = false;
56005    }
56006    return CodegenState;
56007}());
56008function generate(ast, options) {
56009    var state = new CodegenState(options);
56010    // fix #11483, Root level <script> tags should not be rendered.
56011    var code = ast
56012        ? ast.tag === 'script'
56013            ? 'null'
56014            : genElement(ast, state)
56015        : '_c("div")';
56016    return {
56017        render: "with(this){return ".concat(code, "}"),
56018        staticRenderFns: state.staticRenderFns
56019    };
56020}
56021function genElement(el, state) {
56022    if (el.parent) {
56023        el.pre = el.pre || el.parent.pre;
56024    }
56025    if (el.staticRoot && !el.staticProcessed) {
56026        return genStatic(el, state);
56027    }
56028    else if (el.once && !el.onceProcessed) {
56029        return genOnce(el, state);
56030    }
56031    else if (el.for && !el.forProcessed) {
56032        return genFor(el, state);
56033    }
56034    else if (el.if && !el.ifProcessed) {
56035        return genIf(el, state);
56036    }
56037    else if (el.tag === 'template' && !el.slotTarget && !state.pre) {
56038        return genChildren(el, state) || 'void 0';
56039    }
56040    else if (el.tag === 'slot') {
56041        return genSlot(el, state);
56042    }
56043    else {
56044        // component or element
56045        var code = void 0;
56046        if (el.component) {
56047            code = genComponent(el.component, el, state);
56048        }
56049        else {
56050            var data = void 0;
56051            var maybeComponent = state.maybeComponent(el);
56052            if (!el.plain || (el.pre && maybeComponent)) {
56053                data = genData(el, state);
56054            }
56055            var tag 
56056            // check if this is a component in <script setup>
56057            = void 0;
56058            // check if this is a component in <script setup>
56059            var bindings = state.options.bindings;
56060            if (maybeComponent && bindings && bindings.__isScriptSetup !== false) {
56061                tag = checkBindingType(bindings, el.tag);
56062            }
56063            if (!tag)
56064                tag = "'".concat(el.tag, "'");
56065            var children = el.inlineTemplate ? null : genChildren(el, state, true);
56066            code = "_c(".concat(tag).concat(data ? ",".concat(data) : '' // data
56067            ).concat(children ? ",".concat(children) : '' // children
56068            , ")");
56069        }
56070        // module transforms
56071        for (var i = 0; i < state.transforms.length; i++) {
56072            code = state.transforms[i](el, code);
56073        }
56074        return code;
56075    }
56076}
56077function checkBindingType(bindings, key) {
56078    var camelName = camelize(key);
56079    var PascalName = capitalize(camelName);
56080    var checkType = function (type) {
56081        if (bindings[key] === type) {
56082            return key;
56083        }
56084        if (bindings[camelName] === type) {
56085            return camelName;
56086        }
56087        if (bindings[PascalName] === type) {
56088            return PascalName;
56089        }
56090    };
56091    var fromConst = checkType("setup-const" /* BindingTypes.SETUP_CONST */) ||
56092        checkType("setup-reactive-const" /* BindingTypes.SETUP_REACTIVE_CONST */);
56093    if (fromConst) {
56094        return fromConst;
56095    }
56096    var fromMaybeRef = checkType("setup-let" /* BindingTypes.SETUP_LET */) ||
56097        checkType("setup-ref" /* BindingTypes.SETUP_REF */) ||
56098        checkType("setup-maybe-ref" /* BindingTypes.SETUP_MAYBE_REF */);
56099    if (fromMaybeRef) {
56100        return fromMaybeRef;
56101    }
56102}
56103// hoist static sub-trees out
56104function genStatic(el, state) {
56105    el.staticProcessed = true;
56106    // Some elements (templates) need to behave differently inside of a v-pre
56107    // node.  All pre nodes are static roots, so we can use this as a location to
56108    // wrap a state change and reset it upon exiting the pre node.
56109    var originalPreState = state.pre;
56110    if (el.pre) {
56111        state.pre = el.pre;
56112    }
56113    state.staticRenderFns.push("with(this){return ".concat(genElement(el, state), "}"));
56114    state.pre = originalPreState;
56115    return "_m(".concat(state.staticRenderFns.length - 1).concat(el.staticInFor ? ',true' : '', ")");
56116}
56117// v-once
56118function genOnce(el, state) {
56119    el.onceProcessed = true;
56120    if (el.if && !el.ifProcessed) {
56121        return genIf(el, state);
56122    }
56123    else if (el.staticInFor) {
56124        var key = '';
56125        var parent_1 = el.parent;
56126        while (parent_1) {
56127            if (parent_1.for) {
56128                key = parent_1.key;
56129                break;
56130            }
56131            parent_1 = parent_1.parent;
56132        }
56133        if (!key) {
56134             true &&
56135                state.warn("v-once can only be used inside v-for that is keyed. ", el.rawAttrsMap['v-once']);
56136            return genElement(el, state);
56137        }
56138        return "_o(".concat(genElement(el, state), ",").concat(state.onceId++, ",").concat(key, ")");
56139    }
56140    else {
56141        return genStatic(el, state);
56142    }
56143}
56144function genIf(el, state, altGen, altEmpty) {
56145    el.ifProcessed = true; // avoid recursion
56146    return genIfConditions(el.ifConditions.slice(), state, altGen, altEmpty);
56147}
56148function genIfConditions(conditions, state, altGen, altEmpty) {
56149    if (!conditions.length) {
56150        return altEmpty || '_e()';
56151    }
56152    var condition = conditions.shift();
56153    if (condition.exp) {
56154        return "(".concat(condition.exp, ")?").concat(genTernaryExp(condition.block), ":").concat(genIfConditions(conditions, state, altGen, altEmpty));
56155    }
56156    else {
56157        return "".concat(genTernaryExp(condition.block));
56158    }
56159    // v-if with v-once should generate code like (a)?_m(0):_m(1)
56160    function genTernaryExp(el) {
56161        return altGen
56162            ? altGen(el, state)
56163            : el.once
56164                ? genOnce(el, state)
56165                : genElement(el, state);
56166    }
56167}
56168function genFor(el, state, altGen, altHelper) {
56169    var exp = el.for;
56170    var alias = el.alias;
56171    var iterator1 = el.iterator1 ? ",".concat(el.iterator1) : '';
56172    var iterator2 = el.iterator2 ? ",".concat(el.iterator2) : '';
56173    if ( true &&
56174        state.maybeComponent(el) &&
56175        el.tag !== 'slot' &&
56176        el.tag !== 'template' &&
56177        !el.key) {
56178        state.warn("<".concat(el.tag, " v-for=\"").concat(alias, " in ").concat(exp, "\">: component lists rendered with ") +
56179            "v-for should have explicit keys. " +
56180            "See https://v2.vuejs.org/v2/guide/list.html#key for more info.", el.rawAttrsMap['v-for'], true /* tip */);
56181    }
56182    el.forProcessed = true; // avoid recursion
56183    return ("".concat(altHelper || '_l', "((").concat(exp, "),") +
56184        "function(".concat(alias).concat(iterator1).concat(iterator2, "){") +
56185        "return ".concat((altGen || genElement)(el, state)) +
56186        '})');
56187}
56188function genData(el, state) {
56189    var data = '{';
56190    // directives first.
56191    // directives may mutate the el's other properties before they are generated.
56192    var dirs = genDirectives(el, state);
56193    if (dirs)
56194        data += dirs + ',';
56195    // key
56196    if (el.key) {
56197        data += "key:".concat(el.key, ",");
56198    }
56199    // ref
56200    if (el.ref) {
56201        data += "ref:".concat(el.ref, ",");
56202    }
56203    if (el.refInFor) {
56204        data += "refInFor:true,";
56205    }
56206    // pre
56207    if (el.pre) {
56208        data += "pre:true,";
56209    }
56210    // record original tag name for components using "is" attribute
56211    if (el.component) {
56212        data += "tag:\"".concat(el.tag, "\",");
56213    }
56214    // module data generation functions
56215    for (var i = 0; i < state.dataGenFns.length; i++) {
56216        data += state.dataGenFns[i](el);
56217    }
56218    // attributes
56219    if (el.attrs) {
56220        data += "attrs:".concat(genProps(el.attrs), ",");
56221    }
56222    // DOM props
56223    if (el.props) {
56224        data += "domProps:".concat(genProps(el.props), ",");
56225    }
56226    // event handlers
56227    if (el.events) {
56228        data += "".concat(genHandlers(el.events, false), ",");
56229    }
56230    if (el.nativeEvents) {
56231        data += "".concat(genHandlers(el.nativeEvents, true), ",");
56232    }
56233    // slot target
56234    // only for non-scoped slots
56235    if (el.slotTarget && !el.slotScope) {
56236        data += "slot:".concat(el.slotTarget, ",");
56237    }
56238    // scoped slots
56239    if (el.scopedSlots) {
56240        data += "".concat(genScopedSlots(el, el.scopedSlots, state), ",");
56241    }
56242    // component v-model
56243    if (el.model) {
56244        data += "model:{value:".concat(el.model.value, ",callback:").concat(el.model.callback, ",expression:").concat(el.model.expression, "},");
56245    }
56246    // inline-template
56247    if (el.inlineTemplate) {
56248        var inlineTemplate = genInlineTemplate(el, state);
56249        if (inlineTemplate) {
56250            data += "".concat(inlineTemplate, ",");
56251        }
56252    }
56253    data = data.replace(/,$/, '') + '}';
56254    // v-bind dynamic argument wrap
56255    // v-bind with dynamic arguments must be applied using the same v-bind object
56256    // merge helper so that class/style/mustUseProp attrs are handled correctly.
56257    if (el.dynamicAttrs) {
56258        data = "_b(".concat(data, ",\"").concat(el.tag, "\",").concat(genProps(el.dynamicAttrs), ")");
56259    }
56260    // v-bind data wrap
56261    if (el.wrapData) {
56262        data = el.wrapData(data);
56263    }
56264    // v-on data wrap
56265    if (el.wrapListeners) {
56266        data = el.wrapListeners(data);
56267    }
56268    return data;
56269}
56270function genDirectives(el, state) {
56271    var dirs = el.directives;
56272    if (!dirs)
56273        return;
56274    var res = 'directives:[';
56275    var hasRuntime = false;
56276    var i, l, dir, needRuntime;
56277    for (i = 0, l = dirs.length; i < l; i++) {
56278        dir = dirs[i];
56279        needRuntime = true;
56280        var gen = state.directives[dir.name];
56281        if (gen) {
56282            // compile-time directive that manipulates AST.
56283            // returns true if it also needs a runtime counterpart.
56284            needRuntime = !!gen(el, dir, state.warn);
56285        }
56286        if (needRuntime) {
56287            hasRuntime = true;
56288            res += "{name:\"".concat(dir.name, "\",rawName:\"").concat(dir.rawName, "\"").concat(dir.value
56289                ? ",value:(".concat(dir.value, "),expression:").concat(JSON.stringify(dir.value))
56290                : '').concat(dir.arg ? ",arg:".concat(dir.isDynamicArg ? dir.arg : "\"".concat(dir.arg, "\"")) : '').concat(dir.modifiers ? ",modifiers:".concat(JSON.stringify(dir.modifiers)) : '', "},");
56291        }
56292    }
56293    if (hasRuntime) {
56294        return res.slice(0, -1) + ']';
56295    }
56296}
56297function genInlineTemplate(el, state) {
56298    var ast = el.children[0];
56299    if ( true && (el.children.length !== 1 || ast.type !== 1)) {
56300        state.warn('Inline-template components must have exactly one child element.', { start: el.start });
56301    }
56302    if (ast && ast.type === 1) {
56303        var inlineRenderFns = generate(ast, state.options);
56304        return "inlineTemplate:{render:function(){".concat(inlineRenderFns.render, "},staticRenderFns:[").concat(inlineRenderFns.staticRenderFns
56305            .map(function (code) { return "function(){".concat(code, "}"); })
56306            .join(','), "]}");
56307    }
56308}
56309function genScopedSlots(el, slots, state) {
56310    // by default scoped slots are considered "stable", this allows child
56311    // components with only scoped slots to skip forced updates from parent.
56312    // but in some cases we have to bail-out of this optimization
56313    // for example if the slot contains dynamic names, has v-if or v-for on them...
56314    var needsForceUpdate = el.for ||
56315        Object.keys(slots).some(function (key) {
56316            var slot = slots[key];
56317            return (slot.slotTargetDynamic || slot.if || slot.for || containsSlotChild(slot) // is passing down slot from parent which may be dynamic
56318            );
56319        });
56320    // #9534: if a component with scoped slots is inside a conditional branch,
56321    // it's possible for the same component to be reused but with different
56322    // compiled slot content. To avoid that, we generate a unique key based on
56323    // the generated code of all the slot contents.
56324    var needsKey = !!el.if;
56325    // OR when it is inside another scoped slot or v-for (the reactivity may be
56326    // disconnected due to the intermediate scope variable)
56327    // #9438, #9506
56328    // TODO: this can be further optimized by properly analyzing in-scope bindings
56329    // and skip force updating ones that do not actually use scope variables.
56330    if (!needsForceUpdate) {
56331        var parent_2 = el.parent;
56332        while (parent_2) {
56333            if ((parent_2.slotScope && parent_2.slotScope !== emptySlotScopeToken) ||
56334                parent_2.for) {
56335                needsForceUpdate = true;
56336                break;
56337            }
56338            if (parent_2.if) {
56339                needsKey = true;
56340            }
56341            parent_2 = parent_2.parent;
56342        }
56343    }
56344    var generatedSlots = Object.keys(slots)
56345        .map(function (key) { return genScopedSlot(slots[key], state); })
56346        .join(',');
56347    return "scopedSlots:_u([".concat(generatedSlots, "]").concat(needsForceUpdate ? ",null,true" : "").concat(!needsForceUpdate && needsKey ? ",null,false,".concat(hash(generatedSlots)) : "", ")");
56348}
56349function hash(str) {
56350    var hash = 5381;
56351    var i = str.length;
56352    while (i) {
56353        hash = (hash * 33) ^ str.charCodeAt(--i);
56354    }
56355    return hash >>> 0;
56356}
56357function containsSlotChild(el) {
56358    if (el.type === 1) {
56359        if (el.tag === 'slot') {
56360            return true;
56361        }
56362        return el.children.some(containsSlotChild);
56363    }
56364    return false;
56365}
56366function genScopedSlot(el, state) {
56367    var isLegacySyntax = el.attrsMap['slot-scope'];
56368    if (el.if && !el.ifProcessed && !isLegacySyntax) {
56369        return genIf(el, state, genScopedSlot, "null");
56370    }
56371    if (el.for && !el.forProcessed) {
56372        return genFor(el, state, genScopedSlot);
56373    }
56374    var slotScope = el.slotScope === emptySlotScopeToken ? "" : String(el.slotScope);
56375    var fn = "function(".concat(slotScope, "){") +
56376        "return ".concat(el.tag === 'template'
56377            ? el.if && isLegacySyntax
56378                ? "(".concat(el.if, ")?").concat(genChildren(el, state) || 'undefined', ":undefined")
56379                : genChildren(el, state) || 'undefined'
56380            : genElement(el, state), "}");
56381    // reverse proxy v-slot without scope on this.$slots
56382    var reverseProxy = slotScope ? "" : ",proxy:true";
56383    return "{key:".concat(el.slotTarget || "\"default\"", ",fn:").concat(fn).concat(reverseProxy, "}");
56384}
56385function genChildren(el, state, checkSkip, altGenElement, altGenNode) {
56386    var children = el.children;
56387    if (children.length) {
56388        var el_1 = children[0];
56389        // optimize single v-for
56390        if (children.length === 1 &&
56391            el_1.for &&
56392            el_1.tag !== 'template' &&
56393            el_1.tag !== 'slot') {
56394            var normalizationType_1 = checkSkip
56395                ? state.maybeComponent(el_1)
56396                    ? ",1"
56397                    : ",0"
56398                : "";
56399            return "".concat((altGenElement || genElement)(el_1, state)).concat(normalizationType_1);
56400        }
56401        var normalizationType = checkSkip
56402            ? getNormalizationType(children, state.maybeComponent)
56403            : 0;
56404        var gen_1 = altGenNode || genNode;
56405        return "[".concat(children.map(function (c) { return gen_1(c, state); }).join(','), "]").concat(normalizationType ? ",".concat(normalizationType) : '');
56406    }
56407}
56408// determine the normalization needed for the children array.
56409// 0: no normalization needed
56410// 1: simple normalization needed (possible 1-level deep nested array)
56411// 2: full normalization needed
56412function getNormalizationType(children, maybeComponent) {
56413    var res = 0;
56414    for (var i = 0; i < children.length; i++) {
56415        var el = children[i];
56416        if (el.type !== 1) {
56417            continue;
56418        }
56419        if (needsNormalization(el) ||
56420            (el.ifConditions &&
56421                el.ifConditions.some(function (c) { return needsNormalization(c.block); }))) {
56422            res = 2;
56423            break;
56424        }
56425        if (maybeComponent(el) ||
56426            (el.ifConditions && el.ifConditions.some(function (c) { return maybeComponent(c.block); }))) {
56427            res = 1;
56428        }
56429    }
56430    return res;
56431}
56432function needsNormalization(el) {
56433    return el.for !== undefined || el.tag === 'template' || el.tag === 'slot';
56434}
56435function genNode(node, state) {
56436    if (node.type === 1) {
56437        return genElement(node, state);
56438    }
56439    else if (node.type === 3 && node.isComment) {
56440        return genComment(node);
56441    }
56442    else {
56443        return genText(node);
56444    }
56445}
56446function genText(text) {
56447    return "_v(".concat(text.type === 2
56448        ? text.expression // no need for () because already wrapped in _s()
56449        : transformSpecialNewlines(JSON.stringify(text.text)), ")");
56450}
56451function genComment(comment) {
56452    return "_e(".concat(JSON.stringify(comment.text), ")");
56453}
56454function genSlot(el, state) {
56455    var slotName = el.slotName || '"default"';
56456    var children = genChildren(el, state);
56457    var res = "_t(".concat(slotName).concat(children ? ",function(){return ".concat(children, "}") : '');
56458    var attrs = el.attrs || el.dynamicAttrs
56459        ? genProps((el.attrs || []).concat(el.dynamicAttrs || []).map(function (attr) { return ({
56460            // slot props are camelized
56461            name: camelize(attr.name),
56462            value: attr.value,
56463            dynamic: attr.dynamic
56464        }); }))
56465        : null;
56466    var bind = el.attrsMap['v-bind'];
56467    if ((attrs || bind) && !children) {
56468        res += ",null";
56469    }
56470    if (attrs) {
56471        res += ",".concat(attrs);
56472    }
56473    if (bind) {
56474        res += "".concat(attrs ? '' : ',null', ",").concat(bind);
56475    }
56476    return res + ')';
56477}
56478// componentName is el.component, take it as argument to shun flow's pessimistic refinement
56479function genComponent(componentName, el, state) {
56480    var children = el.inlineTemplate ? null : genChildren(el, state, true);
56481    return "_c(".concat(componentName, ",").concat(genData(el, state)).concat(children ? ",".concat(children) : '', ")");
56482}
56483function genProps(props) {
56484    var staticProps = "";
56485    var dynamicProps = "";
56486    for (var i = 0; i < props.length; i++) {
56487        var prop = props[i];
56488        var value = transformSpecialNewlines(prop.value);
56489        if (prop.dynamic) {
56490            dynamicProps += "".concat(prop.name, ",").concat(value, ",");
56491        }
56492        else {
56493            staticProps += "\"".concat(prop.name, "\":").concat(value, ",");
56494        }
56495    }
56496    staticProps = "{".concat(staticProps.slice(0, -1), "}");
56497    if (dynamicProps) {
56498        return "_d(".concat(staticProps, ",[").concat(dynamicProps.slice(0, -1), "])");
56499    }
56500    else {
56501        return staticProps;
56502    }
56503}
56504// #3895, #4268
56505function transformSpecialNewlines(text) {
56506    return text.replace(/\u2028/g, '\\u2028').replace(/\u2029/g, '\\u2029');
56507}
56508
56509// these keywords should not appear inside expressions, but operators like
56510// typeof, instanceof and in are allowed
56511var prohibitedKeywordRE = new RegExp('\\b' +
56512    ('do,if,for,let,new,try,var,case,else,with,await,break,catch,class,const,' +
56513        'super,throw,while,yield,delete,export,import,return,switch,default,' +
56514        'extends,finally,continue,debugger,function,arguments')
56515        .split(',')
56516        .join('\\b|\\b') +
56517    '\\b');
56518// these unary operators should not be used as property/method names
56519var unaryOperatorsRE = new RegExp('\\b' +
56520    'delete,typeof,void'.split(',').join('\\s*\\([^\\)]*\\)|\\b') +
56521    '\\s*\\([^\\)]*\\)');
56522// strip strings in expressions
56523var stripStringRE = /'(?:[^'\\]|\\.)*'|"(?:[^"\\]|\\.)*"|`(?:[^`\\]|\\.)*\$\{|\}(?:[^`\\]|\\.)*`|`(?:[^`\\]|\\.)*`/g;
56524// detect problematic expressions in a template
56525function detectErrors(ast, warn) {
56526    if (ast) {
56527        checkNode(ast, warn);
56528    }
56529}
56530function checkNode(node, warn) {
56531    if (node.type === 1) {
56532        for (var name_1 in node.attrsMap) {
56533            if (dirRE.test(name_1)) {
56534                var value = node.attrsMap[name_1];
56535                if (value) {
56536                    var range = node.rawAttrsMap[name_1];
56537                    if (name_1 === 'v-for') {
56538                        checkFor(node, "v-for=\"".concat(value, "\""), warn, range);
56539                    }
56540                    else if (name_1 === 'v-slot' || name_1[0] === '#') {
56541                        checkFunctionParameterExpression(value, "".concat(name_1, "=\"").concat(value, "\""), warn, range);
56542                    }
56543                    else if (onRE.test(name_1)) {
56544                        checkEvent(value, "".concat(name_1, "=\"").concat(value, "\""), warn, range);
56545                    }
56546                    else {
56547                        checkExpression(value, "".concat(name_1, "=\"").concat(value, "\""), warn, range);
56548                    }
56549                }
56550            }
56551        }
56552        if (node.children) {
56553            for (var i = 0; i < node.children.length; i++) {
56554                checkNode(node.children[i], warn);
56555            }
56556        }
56557    }
56558    else if (node.type === 2) {
56559        checkExpression(node.expression, node.text, warn, node);
56560    }
56561}
56562function checkEvent(exp, text, warn, range) {
56563    var stripped = exp.replace(stripStringRE, '');
56564    var keywordMatch = stripped.match(unaryOperatorsRE);
56565    if (keywordMatch && stripped.charAt(keywordMatch.index - 1) !== '$') {
56566        warn("avoid using JavaScript unary operator as property name: " +
56567            "\"".concat(keywordMatch[0], "\" in expression ").concat(text.trim()), range);
56568    }
56569    checkExpression(exp, text, warn, range);
56570}
56571function checkFor(node, text, warn, range) {
56572    checkExpression(node.for || '', text, warn, range);
56573    checkIdentifier(node.alias, 'v-for alias', text, warn, range);
56574    checkIdentifier(node.iterator1, 'v-for iterator', text, warn, range);
56575    checkIdentifier(node.iterator2, 'v-for iterator', text, warn, range);
56576}
56577function checkIdentifier(ident, type, text, warn, range) {
56578    if (typeof ident === 'string') {
56579        try {
56580            new Function("var ".concat(ident, "=_"));
56581        }
56582        catch (e) {
56583            warn("invalid ".concat(type, " \"").concat(ident, "\" in expression: ").concat(text.trim()), range);
56584        }
56585    }
56586}
56587function checkExpression(exp, text, warn, range) {
56588    try {
56589        new Function("return ".concat(exp));
56590    }
56591    catch (e) {
56592        var keywordMatch = exp
56593            .replace(stripStringRE, '')
56594            .match(prohibitedKeywordRE);
56595        if (keywordMatch) {
56596            warn("avoid using JavaScript keyword as property name: " +
56597                "\"".concat(keywordMatch[0], "\"\n  Raw expression: ").concat(text.trim()), range);
56598        }
56599        else {
56600            warn("invalid expression: ".concat(e.message, " in\n\n") +
56601                "    ".concat(exp, "\n\n") +
56602                "  Raw expression: ".concat(text.trim(), "\n"), range);
56603        }
56604    }
56605}
56606function checkFunctionParameterExpression(exp, text, warn, range) {
56607    try {
56608        new Function(exp, '');
56609    }
56610    catch (e) {
56611        warn("invalid function parameter expression: ".concat(e.message, " in\n\n") +
56612            "    ".concat(exp, "\n\n") +
56613            "  Raw expression: ".concat(text.trim(), "\n"), range);
56614    }
56615}
56616
56617var range = 2;
56618function generateCodeFrame(source, start, end) {
56619    if (start === void 0) { start = 0; }
56620    if (end === void 0) { end = source.length; }
56621    var lines = source.split(/\r?\n/);
56622    var count = 0;
56623    var res = [];
56624    for (var i = 0; i < lines.length; i++) {
56625        count += lines[i].length + 1;
56626        if (count >= start) {
56627            for (var j = i - range; j <= i + range || end > count; j++) {
56628                if (j < 0 || j >= lines.length)
56629                    continue;
56630                res.push("".concat(j + 1).concat(repeat(" ", 3 - String(j + 1).length), "|  ").concat(lines[j]));
56631                var lineLength = lines[j].length;
56632                if (j === i) {
56633                    // push underline
56634                    var pad = start - (count - lineLength) + 1;
56635                    var length_1 = end > count ? lineLength - pad : end - start;
56636                    res.push("   |  " + repeat(" ", pad) + repeat("^", length_1));
56637                }
56638                else if (j > i) {
56639                    if (end > count) {
56640                        var length_2 = Math.min(end - count, lineLength);
56641                        res.push("   |  " + repeat("^", length_2));
56642                    }
56643                    count += lineLength + 1;
56644                }
56645            }
56646            break;
56647        }
56648    }
56649    return res.join('\n');
56650}
56651function repeat(str, n) {
56652    var result = '';
56653    if (n > 0) {
56654        // eslint-disable-next-line no-constant-condition
56655        while (true) {
56656            // eslint-disable-line
56657            if (n & 1)
56658                result += str;
56659            n >>>= 1;
56660            if (n <= 0)
56661                break;
56662            str += str;
56663        }
56664    }
56665    return result;
56666}
56667
56668function createFunction(code, errors) {
56669    try {
56670        return new Function(code);
56671    }
56672    catch (err) {
56673        errors.push({ err: err, code: code });
56674        return noop;
56675    }
56676}
56677function createCompileToFunctionFn(compile) {
56678    var cache = Object.create(null);
56679    return function compileToFunctions(template, options, vm) {
56680        options = extend({}, options);
56681        var warn = options.warn || warn$2;
56682        delete options.warn;
56683        /* istanbul ignore if */
56684        if (true) {
56685            // detect possible CSP restriction
56686            try {
56687                new Function('return 1');
56688            }
56689            catch (e) {
56690                if (e.toString().match(/unsafe-eval|CSP/)) {
56691                    warn('It seems you are using the standalone build of Vue.js in an ' +
56692                        'environment with Content Security Policy that prohibits unsafe-eval. ' +
56693                        'The template compiler cannot work in this environment. Consider ' +
56694                        'relaxing the policy to allow unsafe-eval or pre-compiling your ' +
56695                        'templates into render functions.');
56696                }
56697            }
56698        }
56699        // check cache
56700        var key = options.delimiters
56701            ? String(options.delimiters) + template
56702            : template;
56703        if (cache[key]) {
56704            return cache[key];
56705        }
56706        // compile
56707        var compiled = compile(template, options);
56708        // check compilation errors/tips
56709        if (true) {
56710            if (compiled.errors && compiled.errors.length) {
56711                if (options.outputSourceRange) {
56712                    compiled.errors.forEach(function (e) {
56713                        warn("Error compiling template:\n\n".concat(e.msg, "\n\n") +
56714                            generateCodeFrame(template, e.start, e.end), vm);
56715                    });
56716                }
56717                else {
56718                    warn("Error compiling template:\n\n".concat(template, "\n\n") +
56719                        compiled.errors.map(function (e) { return "- ".concat(e); }).join('\n') +
56720                        '\n', vm);
56721                }
56722            }
56723            if (compiled.tips && compiled.tips.length) {
56724                if (options.outputSourceRange) {
56725                    compiled.tips.forEach(function (e) { return tip(e.msg, vm); });
56726                }
56727                else {
56728                    compiled.tips.forEach(function (msg) { return tip(msg, vm); });
56729                }
56730            }
56731        }
56732        // turn code into functions
56733        var res = {};
56734        var fnGenErrors = [];
56735        res.render = createFunction(compiled.render, fnGenErrors);
56736        res.staticRenderFns = compiled.staticRenderFns.map(function (code) {
56737            return createFunction(code, fnGenErrors);
56738        });
56739        // check function generation errors.
56740        // this should only happen if there is a bug in the compiler itself.
56741        // mostly for codegen development use
56742        /* istanbul ignore if */
56743        if (true) {
56744            if ((!compiled.errors || !compiled.errors.length) && fnGenErrors.length) {
56745                warn("Failed to generate render function:\n\n" +
56746                    fnGenErrors
56747                        .map(function (_a) {
56748                        var err = _a.err, code = _a.code;
56749                        return "".concat(err.toString(), " in\n\n").concat(code, "\n");
56750                    })
56751                        .join('\n'), vm);
56752            }
56753        }
56754        return (cache[key] = res);
56755    };
56756}
56757
56758function createCompilerCreator(baseCompile) {
56759    return function createCompiler(baseOptions) {
56760        function compile(template, options) {
56761            var finalOptions = Object.create(baseOptions);
56762            var errors = [];
56763            var tips = [];
56764            var warn = function (msg, range, tip) {
56765                (tip ? tips : errors).push(msg);
56766            };
56767            if (options) {
56768                if ( true && options.outputSourceRange) {
56769                    // $flow-disable-line
56770                    var leadingSpaceLength_1 = template.match(/^\s*/)[0].length;
56771                    warn = function (msg, range, tip) {
56772                        var data = typeof msg === 'string' ? { msg: msg } : msg;
56773                        if (range) {
56774                            if (range.start != null) {
56775                                data.start = range.start + leadingSpaceLength_1;
56776                            }
56777                            if (range.end != null) {
56778                                data.end = range.end + leadingSpaceLength_1;
56779                            }
56780                        }
56781                        (tip ? tips : errors).push(data);
56782                    };
56783                }
56784                // merge custom modules
56785                if (options.modules) {
56786                    finalOptions.modules = (baseOptions.modules || []).concat(options.modules);
56787                }
56788                // merge custom directives
56789                if (options.directives) {
56790                    finalOptions.directives = extend(Object.create(baseOptions.directives || null), options.directives);
56791                }
56792                // copy other options
56793                for (var key in options) {
56794                    if (key !== 'modules' && key !== 'directives') {
56795                        finalOptions[key] = options[key];
56796                    }
56797                }
56798            }
56799            finalOptions.warn = warn;
56800            var compiled = baseCompile(template.trim(), finalOptions);
56801            if (true) {
56802                detectErrors(compiled.ast, warn);
56803            }
56804            compiled.errors = errors;
56805            compiled.tips = tips;
56806            return compiled;
56807        }
56808        return {
56809            compile: compile,
56810            compileToFunctions: createCompileToFunctionFn(compile)
56811        };
56812    };
56813}
56814
56815// `createCompilerCreator` allows creating compilers that use alternative
56816// parser/optimizer/codegen, e.g the SSR optimizing compiler.
56817// Here we just export a default compiler using the default parts.
56818var createCompiler = createCompilerCreator(function baseCompile(template, options) {
56819    var ast = parse(template.trim(), options);
56820    if (options.optimize !== false) {
56821        optimize(ast, options);
56822    }
56823    var code = generate(ast, options);
56824    return {
56825        ast: ast,
56826        render: code.render,
56827        staticRenderFns: code.staticRenderFns
56828    };
56829});
56830
56831var _a = createCompiler(baseOptions), compileToFunctions = _a.compileToFunctions;
56832
56833// check whether current browser encodes a char inside attribute values
56834var div;
56835function getShouldDecode(href) {
56836    div = div || document.createElement('div');
56837    div.innerHTML = href ? "<a href=\"\n\"/>" : "<div a=\"\n\"/>";
56838    return div.innerHTML.indexOf('&#10;') > 0;
56839}
56840// #3663: IE encodes newlines inside attribute values while other browsers don't
56841var shouldDecodeNewlines = inBrowser ? getShouldDecode(false) : false;
56842// #6828: chrome encodes content in a[href]
56843var shouldDecodeNewlinesForHref = inBrowser
56844    ? getShouldDecode(true)
56845    : false;
56846
56847var idToTemplate = cached(function (id) {
56848    var el = query(id);
56849    return el && el.innerHTML;
56850});
56851var mount = Vue.prototype.$mount;
56852Vue.prototype.$mount = function (el, hydrating) {
56853    el = el && query(el);
56854    /* istanbul ignore if */
56855    if (el === document.body || el === document.documentElement) {
56856         true &&
56857            warn$2("Do not mount Vue to <html> or <body> - mount to normal elements instead.");
56858        return this;
56859    }
56860    var options = this.$options;
56861    // resolve template/el and convert to render function
56862    if (!options.render) {
56863        var template = options.template;
56864        if (template) {
56865            if (typeof template === 'string') {
56866                if (template.charAt(0) === '#') {
56867                    template = idToTemplate(template);
56868                    /* istanbul ignore if */
56869                    if ( true && !template) {
56870                        warn$2("Template element not found or is empty: ".concat(options.template), this);
56871                    }
56872                }
56873            }
56874            else if (template.nodeType) {
56875                template = template.innerHTML;
56876            }
56877            else {
56878                if (true) {
56879                    warn$2('invalid template option:' + template, this);
56880                }
56881                return this;
56882            }
56883        }
56884        else if (el) {
56885            // @ts-expect-error
56886            template = getOuterHTML(el);
56887        }
56888        if (template) {
56889            /* istanbul ignore if */
56890            if ( true && config.performance && mark) {
56891                mark('compile');
56892            }
56893            var _a = compileToFunctions(template, {
56894                outputSourceRange: "development" !== 'production',
56895                shouldDecodeNewlines: shouldDecodeNewlines,
56896                shouldDecodeNewlinesForHref: shouldDecodeNewlinesForHref,
56897                delimiters: options.delimiters,
56898                comments: options.comments
56899            }, this), render = _a.render, staticRenderFns = _a.staticRenderFns;
56900            options.render = render;
56901            options.staticRenderFns = staticRenderFns;
56902            /* istanbul ignore if */
56903            if ( true && config.performance && mark) {
56904                mark('compile end');
56905                measure("vue ".concat(this._name, " compile"), 'compile', 'compile end');
56906            }
56907        }
56908    }
56909    return mount.call(this, el, hydrating);
56910};
56911/**
56912 * Get outerHTML of elements, taking care
56913 * of SVG elements in IE as well.
56914 */
56915function getOuterHTML(el) {
56916    if (el.outerHTML) {
56917        return el.outerHTML;
56918    }
56919    else {
56920        var container = document.createElement('div');
56921        container.appendChild(el.cloneNode(true));
56922        return container.innerHTML;
56923    }
56924}
56925Vue.compile = compileToFunctions;
56926
56927
56928
56929
56930/***/ }),
56931
vendor: 52,287 bytes, lines 56932-56943
56932/***/ "./node_modules/vue2-dropzone/dist/vue2Dropzone.js":
56933/*!*********************************************************!*\
56934  !*** ./node_modules/vue2-dropzone/dist/vue2Dropzone.js ***!
56935  \*********************************************************/
56936/***/ (function(module) {
56937
56938!function(e,t){ true?module.exports=t():0}(this,function(){"use strict";var e,t=(function(e){var t=function(){function e(e,t){for(var i=0;i<t.length;i++){var n=t[i];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}return function(t,i,n){return i&&e(t.prototype,i),n&&e(t,n),t}}();function i(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var r=function(){function e(){n(this,e)}return t(e,[{key:"on",value:function(e,t){return this._callbacks=this._callbacks||{},this._callbacks[e]||(this._callbacks[e]=[]),this._callbacks[e].push(t),this}},{key:"emit",value:function(e){this._callbacks=this._callbacks||{};var t=this._callbacks[e];if(t){for(var i=arguments.length,n=Array(i>1?i-1:0),r=1;r<i;r++)n[r-1]=arguments[r];for(var o=0,s=s=t;;){if(o>=s.length)break;s[o++].apply(this,n)}}return this}},{key:"off",value:function(e,t){if(!this._callbacks||0===arguments.length)return this._callbacks={},this;var i=this._callbacks[e];if(!i)return this;if(1===arguments.length)return delete this._callbacks[e],this;for(var n=0;n<i.length;n++){if(i[n]===t){i.splice(n,1);break}}return this}}]),e}(),o=function(e){function o(e,t){n(this,o);var r,s=i(this,(o.__proto__||Object.getPrototypeOf(o)).call(this)),a=void 0;if(s.element=e,s.version=o.version,s.defaultOptions.previewTemplate=s.defaultOptions.previewTemplate.replace(/\n*/g,""),s.clickableElements=[],s.listeners=[],s.files=[],"string"==typeof s.element&&(s.element=document.querySelector(s.element)),!s.element||null==s.element.nodeType)throw new Error("Invalid dropzone element.");if(s.element.dropzone)throw new Error("Dropzone already attached.");o.instances.push(s),s.element.dropzone=s;var l,u=null!=(r=o.optionsForElement(s.element))?r:{};if(s.options=o.extend({},s.defaultOptions,u,null!=t?t:{}),s.options.forceFallback||!o.isBrowserSupported())return l=s.options.fallback.call(s),i(s,l);if(null==s.options.url&&(s.options.url=s.element.getAttribute("action")),!s.options.url)throw new Error("No URL provided.");if(s.options.acceptedFiles&&s.options.acceptedMimeTypes)throw new Error("You can't provide both 'acceptedFiles' and 'acceptedMimeTypes'. 'acceptedMimeTypes' is deprecated.");if(s.options.uploadMultiple&&s.options.chunking)throw new Error("You cannot set both: uploadMultiple and chunking.");return s.options.acceptedMimeTypes&&(s.options.acceptedFiles=s.options.acceptedMimeTypes,delete s.options.acceptedMimeTypes),null!=s.options.renameFilename&&(s.options.renameFile=function(e){return s.options.renameFilename.call(s,e.name,e)}),s.options.method=s.options.method.toUpperCase(),(a=s.getExistingFallback())&&a.parentNode&&a.parentNode.removeChild(a),!1!==s.options.previewsContainer&&(s.options.previewsContainer?s.previewsContainer=o.getElement(s.options.previewsContainer,"previewsContainer"):s.previewsContainer=s.element),s.options.clickable&&(!0===s.options.clickable?s.clickableElements=[s.element]:s.clickableElements=o.getElements(s.options.clickable,"clickable")),s.init(),s}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(o,r),t(o,null,[{key:"initClass",value:function(){this.prototype.Emitter=r,this.prototype.events=["drop","dragstart","dragend","dragenter","dragover","dragleave","addedfile","addedfiles","removedfile","thumbnail","error","errormultiple","processing","processingmultiple","uploadprogress","totaluploadprogress","sending","sendingmultiple","success","successmultiple","canceled","canceledmultiple","complete","completemultiple","reset","maxfilesexceeded","maxfilesreached","queuecomplete"],this.prototype.defaultOptions={url:null,method:"post",withCredentials:!1,timeout:3e4,parallelUploads:2,uploadMultiple:!1,chunking:!1,forceChunking:!1,chunkSize:2e6,parallelChunkUploads:!1,retryChunks:!1,retryChunksLimit:3,maxFilesize:256,paramName:"file",createImageThumbnails:!0,maxThumbnailFilesize:10,thumbnailWidth:120,thumbnailHeight:120,thumbnailMethod:"crop",resizeWidth:null,resizeHeight:null,resizeMimeType:null,resizeQuality:.8,resizeMethod:"contain",filesizeBase:1e3,maxFiles:null,headers:null,clickable:!0,ignoreHiddenFiles:!0,acceptedFiles:null,acceptedMimeTypes:null,autoProcessQueue:!0,autoQueue:!0,addRemoveLinks:!1,previewsContainer:null,hiddenInputContainer:"body",capture:null,renameFilename:null,renameFile:null,forceFallback:!1,dictDefaultMessage:"Drop files here to upload",dictFallbackMessage:"Your browser does not support drag'n'drop file uploads.",dictFallbackText:"Please use the fallback form below to upload your files like in the olden days.",dictFileTooBig:"File is too big ({{filesize}}MiB). Max filesize: {{maxFilesize}}MiB.",dictInvalidFileType:"You can't upload files of this type.",dictResponseError:"Server responded with {{statusCode}} code.",dictCancelUpload:"Cancel upload",dictUploadCanceled:"Upload canceled.",dictCancelUploadConfirmation:"Are you sure you want to cancel this upload?",dictRemoveFile:"Remove file",dictRemoveFileConfirmation:null,dictMaxFilesExceeded:"You can not upload any more files.",dictFileSizeUnits:{tb:"TB",gb:"GB",mb:"MB",kb:"KB",b:"b"},init:function(){},params:function(e,t,i){if(i)return{dzuuid:i.file.upload.uuid,dzchunkindex:i.index,dztotalfilesize:i.file.size,dzchunksize:this.options.chunkSize,dztotalchunkcount:i.file.upload.totalChunkCount,dzchunkbyteoffset:i.index*this.options.chunkSize}},accept:function(e,t){return t()},chunksUploaded:function(e,t){t()},fallback:function(){var e=void 0;this.element.className=this.element.className+" dz-browser-not-supported";for(var t=0,i=i=this.element.getElementsByTagName("div");;){if(t>=i.length)break;var n=i[t++];if(/(^| )dz-message($| )/.test(n.className)){e=n,n.className="dz-message";break}}e||(e=o.createElement('<div class="dz-message"><span></span></div>'),this.element.appendChild(e));var r=e.getElementsByTagName("span")[0];return r&&(null!=r.textContent?r.textContent=this.options.dictFallbackMessage:null!=r.innerText&&(r.innerText=this.options.dictFallbackMessage)),this.element.appendChild(this.getFallbackForm())},resize:function(e,t,i,n){var r={srcX:0,srcY:0,srcWidth:e.width,srcHeight:e.height},o=e.width/e.height;null==t&&null==i?(t=r.srcWidth,i=r.srcHeight):null==t?t=i*o:null==i&&(i=t/o);var s=(t=Math.min(t,r.srcWidth))/(i=Math.min(i,r.srcHeight));if(r.srcWidth>t||r.srcHeight>i)if("crop"===n)o>s?(r.srcHeight=e.height,r.srcWidth=r.srcHeight*s):(r.srcWidth=e.width,r.srcHeight=r.srcWidth/s);else{if("contain"!==n)throw new Error("Unknown resizeMethod '"+n+"'");o>s?i=t/o:t=i*o}return r.srcX=(e.width-r.srcWidth)/2,r.srcY=(e.height-r.srcHeight)/2,r.trgWidth=t,r.trgHeight=i,r},transformFile:function(e,t){return(this.options.resizeWidth||this.options.resizeHeight)&&e.type.match(/image.*/)?this.resizeImage(e,this.options.resizeWidth,this.options.resizeHeight,this.options.resizeMethod,t):t(e)},previewTemplate:'<div class="dz-preview dz-file-preview">\n  <div class="dz-image"><img data-dz-thumbnail /></div>\n  <div class="dz-details">\n    <div class="dz-size"><span data-dz-size></span></div>\n    <div class="dz-filename"><span data-dz-name></span></div>\n  </div>\n  <div class="dz-progress"><span class="dz-upload" data-dz-uploadprogress></span></div>\n  <div class="dz-error-message"><span data-dz-errormessage></span></div>\n  <div class="dz-success-mark">\n    <svg width="54px" height="54px" viewBox="0 0 54 54" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sketch="http://www.bohemiancoding.com/sketch/ns">\n      <title>Check</title>\n      <defs></defs>\n      <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" sketch:type="MSPage">\n        <path d="M23.5,31.8431458 L17.5852419,25.9283877 C16.0248253,24.3679711 13.4910294,24.366835 11.9289322,25.9289322 C10.3700136,27.4878508 10.3665912,30.0234455 11.9283877,31.5852419 L20.4147581,40.0716123 C20.5133999,40.1702541 20.6159315,40.2626649 20.7218615,40.3488435 C22.2835669,41.8725651 24.794234,41.8626202 26.3461564,40.3106978 L43.3106978,23.3461564 C44.8771021,21.7797521 44.8758057,19.2483887 43.3137085,17.6862915 C41.7547899,16.1273729 39.2176035,16.1255422 37.6538436,17.6893022 L23.5,31.8431458 Z M27,53 C41.3594035,53 53,41.3594035 53,27 C53,12.6405965 41.3594035,1 27,1 C12.6405965,1 1,12.6405965 1,27 C1,41.3594035 12.6405965,53 27,53 Z" id="Oval-2" stroke-opacity="0.198794158" stroke="#747474" fill-opacity="0.816519475" fill="#FFFFFF" sketch:type="MSShapeGroup"></path>\n      </g>\n    </svg>\n  </div>\n  <div class="dz-error-mark">\n    <svg width="54px" height="54px" viewBox="0 0 54 54" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:sketch="http://www.bohemiancoding.com/sketch/ns">\n      <title>Error</title>\n      <defs></defs>\n      <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" sketch:type="MSPage">\n        <g id="Check-+-Oval-2" sketch:type="MSLayerGroup" stroke="#747474" stroke-opacity="0.198794158" fill="#FFFFFF" fill-opacity="0.816519475">\n          <path d="M32.6568542,29 L38.3106978,23.3461564 C39.8771021,21.7797521 39.8758057,19.2483887 38.3137085,17.6862915 C36.7547899,16.1273729 34.2176035,16.1255422 32.6538436,17.6893022 L27,23.3431458 L21.3461564,17.6893022 C19.7823965,16.1255422 17.2452101,16.1273729 15.6862915,17.6862915 C14.1241943,19.2483887 14.1228979,21.7797521 15.6893022,23.3461564 L21.3431458,29 L15.6893022,34.6538436 C14.1228979,36.2202479 14.1241943,38.7516113 15.6862915,40.3137085 C17.2452101,41.8726271 19.7823965,41.8744578 21.3461564,40.3106978 L27,34.6568542 L32.6538436,40.3106978 C34.2176035,41.8744578 36.7547899,41.8726271 38.3137085,40.3137085 C39.8758057,38.7516113 39.8771021,36.2202479 38.3106978,34.6538436 L32.6568542,29 Z M27,53 C41.3594035,53 53,41.3594035 53,27 C53,12.6405965 41.3594035,1 27,1 C12.6405965,1 1,12.6405965 1,27 C1,41.3594035 12.6405965,53 27,53 Z" id="Oval-2" sketch:type="MSShapeGroup"></path>\n        </g>\n      </g>\n    </svg>\n  </div>\n</div>',drop:function(e){return this.element.classList.remove("dz-drag-hover")},dragstart:function(e){},dragend:function(e){return this.element.classList.remove("dz-drag-hover")},dragenter:function(e){return this.element.classList.add("dz-drag-hover")},dragover:function(e){return this.element.classList.add("dz-drag-hover")},dragleave:function(e){return this.element.classList.remove("dz-drag-hover")},paste:function(e){},reset:function(){return this.element.classList.remove("dz-started")},addedfile:function(e){var t=this;if(this.element===this.previewsContainer&&this.element.classList.add("dz-started"),this.previewsContainer){e.previewElement=o.createElement(this.options.previewTemplate.trim()),e.previewTemplate=e.previewElement,this.previewsContainer.appendChild(e.previewElement);for(var i=0,n=n=e.previewElement.querySelectorAll("[data-dz-name]");;){if(i>=n.length)break;var r=n[i++];r.textContent=e.name}for(var s=0,a=a=e.previewElement.querySelectorAll("[data-dz-size]");!(s>=a.length);)(r=a[s++]).innerHTML=this.filesize(e.size);this.options.addRemoveLinks&&(e._removeLink=o.createElement('<a class="dz-remove" href="javascript:undefined;" data-dz-remove>'+this.options.dictRemoveFile+"</a>"),e.previewElement.appendChild(e._removeLink));for(var l=function(i){return i.preventDefault(),i.stopPropagation(),e.status===o.UPLOADING?o.confirm(t.options.dictCancelUploadConfirmation,function(){return t.removeFile(e)}):t.options.dictRemoveFileConfirmation?o.confirm(t.options.dictRemoveFileConfirmation,function(){return t.removeFile(e)}):t.removeFile(e)},u=0,d=d=e.previewElement.querySelectorAll("[data-dz-remove]");;){if(u>=d.length)break;d[u++].addEventListener("click",l)}}},removedfile:function(e){return null!=e.previewElement&&null!=e.previewElement.parentNode&&e.previewElement.parentNode.removeChild(e.previewElement),this._updateMaxFilesReachedClass()},thumbnail:function(e,t){if(e.previewElement){e.previewElement.classList.remove("dz-file-preview");for(var i=0,n=n=e.previewElement.querySelectorAll("[data-dz-thumbnail]");;){if(i>=n.length)break;var r=n[i++];r.alt=e.name,r.src=t}return setTimeout(function(){return e.previewElement.classList.add("dz-image-preview")},1)}},error:function(e,t){if(e.previewElement){e.previewElement.classList.add("dz-error"),"String"!=typeof t&&t.error&&(t=t.error);for(var i=0,n=n=e.previewElement.querySelectorAll("[data-dz-errormessage]");;){if(i>=n.length)break;n[i++].textContent=t}}},errormultiple:function(){},processing:function(e){if(e.previewElement&&(e.previewElement.classList.add("dz-processing"),e._removeLink))return e._removeLink.innerHTML=this.options.dictCancelUpload},processingmultiple:function(){},uploadprogress:function(e,t,i){if(e.previewElement)for(var n=0,r=r=e.previewElement.querySelectorAll("[data-dz-uploadprogress]");;){if(n>=r.length)break;var o=r[n++];"PROGRESS"===o.nodeName?o.value=t:o.style.width=t+"%"}},totaluploadprogress:function(){},sending:function(){},sendingmultiple:function(){},success:function(e){if(e.previewElement)return e.previewElement.classList.add("dz-success")},successmultiple:function(){},canceled:function(e){return this.emit("error",e,this.options.dictUploadCanceled)},canceledmultiple:function(){},complete:function(e){if(e._removeLink&&(e._removeLink.innerHTML=this.options.dictRemoveFile),e.previewElement)return e.previewElement.classList.add("dz-complete")},completemultiple:function(){},maxfilesexceeded:function(){},maxfilesreached:function(){},queuecomplete:function(){},addedfiles:function(){}},this.prototype._thumbnailQueue=[],this.prototype._processingThumbnail=!1}},{key:"extend",value:function(e){for(var t=arguments.length,i=Array(t>1?t-1:0),n=1;n<t;n++)i[n-1]=arguments[n];for(var r=0,o=o=i;;){if(r>=o.length)break;var s=o[r++];for(var a in s){var l=s[a];e[a]=l}}return e}}]),t(o,[{key:"getAcceptedFiles",value:function(){return this.files.filter(function(e){return e.accepted}).map(function(e){return e})}},{key:"getRejectedFiles",value:function(){return this.files.filter(function(e){return!e.accepted}).map(function(e){return e})}},{key:"getFilesWithStatus",value:function(e){return this.files.filter(function(t){return t.status===e}).map(function(e){return e})}},{key:"getQueuedFiles",value:function(){return this.getFilesWithStatus(o.QUEUED)}},{key:"getUploadingFiles",value:function(){return this.getFilesWithStatus(o.UPLOADING)}},{key:"getAddedFiles",value:function(){return this.getFilesWithStatus(o.ADDED)}},{key:"getActiveFiles",value:function(){return this.files.filter(function(e){return e.status===o.UPLOADING||e.status===o.QUEUED}).map(function(e){return e})}},{key:"init",value:function(){var e=this;if("form"===this.element.tagName&&this.element.setAttribute("enctype","multipart/form-data"),this.element.classList.contains("dropzone")&&!this.element.querySelector(".dz-message")&&this.element.appendChild(o.createElement('<div class="dz-default dz-message"><span>'+this.options.dictDefaultMessage+"</span></div>")),this.clickableElements.length){!function t(){return e.hiddenFileInput&&e.hiddenFileInput.parentNode.removeChild(e.hiddenFileInput),e.hiddenFileInput=document.createElement("input"),e.hiddenFileInput.setAttribute("type","file"),(null===e.options.maxFiles||e.options.maxFiles>1)&&e.hiddenFileInput.setAttribute("multiple","multiple"),e.hiddenFileInput.className="dz-hidden-input",null!==e.options.acceptedFiles&&e.hiddenFileInput.setAttribute("accept",e.options.acceptedFiles),null!==e.options.capture&&e.hiddenFileInput.setAttribute("capture",e.options.capture),e.hiddenFileInput.style.visibility="hidden",e.hiddenFileInput.style.position="absolute",e.hiddenFileInput.style.top="0",e.hiddenFileInput.style.left="0",e.hiddenFileInput.style.height="0",e.hiddenFileInput.style.width="0",o.getElement(e.options.hiddenInputContainer,"hiddenInputContainer").appendChild(e.hiddenFileInput),e.hiddenFileInput.addEventListener("change",function(){var i=e.hiddenFileInput.files;if(i.length)for(var n=0,r=r=i;!(n>=r.length);){var o=r[n++];e.addFile(o)}return e.emit("addedfiles",i),t()})}()}this.URL=null!==window.URL?window.URL:window.webkitURL;for(var t=0,i=i=this.events;;){if(t>=i.length)break;var n=i[t++];this.on(n,this.options[n])}this.on("uploadprogress",function(){return e.updateTotalUploadProgress()}),this.on("removedfile",function(){return e.updateTotalUploadProgress()}),this.on("canceled",function(t){return e.emit("complete",t)}),this.on("complete",function(t){if(0===e.getAddedFiles().length&&0===e.getUploadingFiles().length&&0===e.getQueuedFiles().length)return setTimeout(function(){return e.emit("queuecomplete")},0)});var r=function(e){return e.stopPropagation(),e.preventDefault?e.preventDefault():e.returnValue=!1};return this.listeners=[{element:this.element,events:{dragstart:function(t){return e.emit("dragstart",t)},dragenter:function(t){return r(t),e.emit("dragenter",t)},dragover:function(t){var i=void 0;try{i=t.dataTransfer.effectAllowed}catch(e){}return t.dataTransfer.dropEffect="move"===i||"linkMove"===i?"move":"copy",r(t),e.emit("dragover",t)},dragleave:function(t){return e.emit("dragleave",t)},drop:function(t){return r(t),e.drop(t)},dragend:function(t){return e.emit("dragend",t)}}}],this.clickableElements.forEach(function(t){return e.listeners.push({element:t,events:{click:function(i){return(t!==e.element||i.target===e.element||o.elementInside(i.target,e.element.querySelector(".dz-message")))&&e.hiddenFileInput.click(),!0}}})}),this.enable(),this.options.init.call(this)}},{key:"destroy",value:function(){return this.disable(),this.removeAllFiles(!0),(null!=this.hiddenFileInput?this.hiddenFileInput.parentNode:void 0)&&(this.hiddenFileInput.parentNode.removeChild(this.hiddenFileInput),this.hiddenFileInput=null),delete this.element.dropzone,o.instances.splice(o.instances.indexOf(this),1)}},{key:"updateTotalUploadProgress",value:function(){var e=void 0,t=0,i=0;if(this.getActiveFiles().length){for(var n=0,r=r=this.getActiveFiles();;){if(n>=r.length)break;var o=r[n++];t+=o.upload.bytesSent,i+=o.upload.total}e=100*t/i}else e=100;return this.emit("totaluploadprogress",e,i,t)}},{key:"_getParamName",value:function(e){return"function"==typeof this.options.paramName?this.options.paramName(e):this.options.paramName+(this.options.uploadMultiple?"["+e+"]":"")}},{key:"_renameFile",value:function(e){return"function"!=typeof this.options.renameFile?e.name:this.options.renameFile(e)}},{key:"getFallbackForm",value:function(){var e,t=void 0;if(e=this.getExistingFallback())return e;var i='<div class="dz-fallback">';this.options.dictFallbackText&&(i+="<p>"+this.options.dictFallbackText+"</p>"),i+='<input type="file" name="'+this._getParamName(0)+'" '+(this.options.uploadMultiple?'multiple="multiple"':void 0)+' /><input type="submit" value="Upload!"></div>';var n=o.createElement(i);return"FORM"!==this.element.tagName?(t=o.createElement('<form action="'+this.options.url+'" enctype="multipart/form-data" method="'+this.options.method+'"></form>')).appendChild(n):(this.element.setAttribute("enctype","multipart/form-data"),this.element.setAttribute("method",this.options.method)),null!=t?t:n}},{key:"getExistingFallback",value:function(){for(var e=function(e){for(var t=0,i=i=e;;){if(t>=i.length)break;var n=i[t++];if(/(^| )fallback($| )/.test(n.className))return n}},t=["div","form"],i=0;i<t.length;i++){var n,r=t[i];if(n=e(this.element.getElementsByTagName(r)))return n}}},{key:"setupEventListeners",value:function(){return this.listeners.map(function(e){return function(){var t=[];for(var i in e.events){var n=e.events[i];t.push(e.element.addEventListener(i,n,!1))}return t}()})}},{key:"removeEventListeners",value:function(){return this.listeners.map(function(e){return function(){var t=[];for(var i in e.events){var n=e.events[i];t.push(e.element.removeEventListener(i,n,!1))}return t}()})}},{key:"disable",value:function(){var e=this;return this.clickableElements.forEach(function(e){return e.classList.remove("dz-clickable")}),this.removeEventListeners(),this.disabled=!0,this.files.map(function(t){return e.cancelUpload(t)})}},{key:"enable",value:function(){return delete this.disabled,this.clickableElements.forEach(function(e){return e.classList.add("dz-clickable")}),this.setupEventListeners()}},{key:"filesize",value:function(e){var t=0,i="b";if(e>0){for(var n=["tb","gb","mb","kb","b"],r=0;r<n.length;r++){var o=n[r];if(e>=Math.pow(this.options.filesizeBase,4-r)/10){t=e/Math.pow(this.options.filesizeBase,4-r),i=o;break}}t=Math.round(10*t)/10}return"<strong>"+t+"</strong> "+this.options.dictFileSizeUnits[i]}},{key:"_updateMaxFilesReachedClass",value:function(){return null!=this.options.maxFiles&&this.getAcceptedFiles().length>=this.options.maxFiles?(this.getAcceptedFiles().length===this.options.maxFiles&&this.emit("maxfilesreached",this.files),this.element.classList.add("dz-max-files-reached")):this.element.classList.remove("dz-max-files-reached")}},{key:"drop",value:function(e){if(e.dataTransfer){this.emit("drop",e);for(var t=[],i=0;i<e.dataTransfer.files.length;i++)t[i]=e.dataTransfer.files[i];if(this.emit("addedfiles",t),t.length){var n=e.dataTransfer.items;n&&n.length&&null!=n[0].webkitGetAsEntry?this._addFilesFromItems(n):this.handleFiles(t)}}}},{key:"paste",value:function(e){if(null!=(t=null!=e?e.clipboardData:void 0,i=function(e){return e.items},null!=t?i(t):void 0)){var t,i;this.emit("paste",e);var n=e.clipboardData.items;return n.length?this._addFilesFromItems(n):void 0}}},{key:"handleFiles",value:function(e){for(var t=0,i=i=e;;){if(t>=i.length)break;var n=i[t++];this.addFile(n)}}},{key:"_addFilesFromItems",value:function(e){var t=this;return function(){for(var i=[],n=0,r=r=e;;){if(n>=r.length)break;var o,s=r[n++];null!=s.webkitGetAsEntry&&(o=s.webkitGetAsEntry())?o.isFile?i.push(t.addFile(s.getAsFile())):o.isDirectory?i.push(t._addFilesFromDirectory(o,o.name)):i.push(void 0):null!=s.getAsFile&&(null==s.kind||"file"===s.kind)?i.push(t.addFile(s.getAsFile())):i.push(void 0)}return i}()}},{key:"_addFilesFromDirectory",value:function(e,t){var i=this,n=e.createReader(),r=function(e){return t=console,i="log",n=function(t){return t.log(e)},null!=t&&"function"==typeof t[i]?n(t,i):void 0;var t,i,n};return function e(){return n.readEntries(function(n){if(n.length>0){for(var r=0,o=o=n;!(r>=o.length);){var s=o[r++];s.isFile?s.file(function(e){if(!i.options.ignoreHiddenFiles||"."!==e.name.substring(0,1))return e.fullPath=t+"/"+e.name,i.addFile(e)}):s.isDirectory&&i._addFilesFromDirectory(s,t+"/"+s.name)}e()}return null},r)}()}},{key:"accept",value:function(e,t){return this.options.maxFilesize&&e.size>1024*this.options.maxFilesize*1024?t(this.options.dictFileTooBig.replace("{{filesize}}",Math.round(e.size/1024/10.24)/100).replace("{{maxFilesize}}",this.options.maxFilesize)):o.isValidFile(e,this.options.acceptedFiles)?null!=this.options.maxFiles&&this.getAcceptedFiles().length>=this.options.maxFiles?(t(this.options.dictMaxFilesExceeded.replace("{{maxFiles}}",this.options.maxFiles)),this.emit("maxfilesexceeded",e)):this.options.accept.call(this,e,t):t(this.options.dictInvalidFileType)}},{key:"addFile",value:function(e){var t=this;return e.upload={uuid:o.uuidv4(),progress:0,total:e.size,bytesSent:0,filename:this._renameFile(e),chunked:this.options.chunking&&(this.options.forceChunking||e.size>this.options.chunkSize),totalChunkCount:Math.ceil(e.size/this.options.chunkSize)},this.files.push(e),e.status=o.ADDED,this.emit("addedfile",e),this._enqueueThumbnail(e),this.accept(e,function(i){return i?(e.accepted=!1,t._errorProcessing([e],i)):(e.accepted=!0,t.options.autoQueue&&t.enqueueFile(e)),t._updateMaxFilesReachedClass()})}},{key:"enqueueFiles",value:function(e){for(var t=0,i=i=e;;){if(t>=i.length)break;var n=i[t++];this.enqueueFile(n)}return null}},{key:"enqueueFile",value:function(e){var t=this;if(e.status!==o.ADDED||!0!==e.accepted)throw new Error("This file can't be queued because it has already been processed or was rejected.");if(e.status=o.QUEUED,this.options.autoProcessQueue)return setTimeout(function(){return t.processQueue()},0)}},{key:"_enqueueThumbnail",value:function(e){var t=this;if(this.options.createImageThumbnails&&e.type.match(/image.*/)&&e.size<=1024*this.options.maxThumbnailFilesize*1024)return this._thumbnailQueue.push(e),setTimeout(function(){return t._processThumbnailQueue()},0)}},{key:"_processThumbnailQueue",value:function(){var e=this;if(!this._processingThumbnail&&0!==this._thumbnailQueue.length){this._processingThumbnail=!0;var t=this._thumbnailQueue.shift();return this.createThumbnail(t,this.options.thumbnailWidth,this.options.thumbnailHeight,this.options.thumbnailMethod,!0,function(i){return e.emit("thumbnail",t,i),e._processingThumbnail=!1,e._processThumbnailQueue()})}}},{key:"removeFile",value:function(e){if(e.status===o.UPLOADING&&this.cancelUpload(e),this.files=s(this.files,e),this.emit("removedfile",e),0===this.files.length)return this.emit("reset")}},{key:"removeAllFiles",value:function(e){null==e&&(e=!1);for(var t=0,i=i=this.files.slice();;){if(t>=i.length)break;var n=i[t++];(n.status!==o.UPLOADING||e)&&this.removeFile(n)}return null}},{key:"resizeImage",value:function(e,t,i,n,r){var s=this;return this.createThumbnail(e,t,i,n,!0,function(t,i){if(null==i)return r(e);var n=s.options.resizeMimeType;null==n&&(n=e.type);var a=i.toDataURL(n,s.options.resizeQuality);return"image/jpeg"!==n&&"image/jpg"!==n||(a=u.restore(e.dataURL,a)),r(o.dataURItoBlob(a))})}},{key:"createThumbnail",value:function(e,t,i,n,r,o){var s=this,a=new FileReader;return a.onload=function(){if(e.dataURL=a.result,"image/svg+xml"!==e.type)return s.createThumbnailFromUrl(e,t,i,n,r,o);null!=o&&o(a.result)},a.readAsDataURL(e)}},{key:"createThumbnailFromUrl",value:function(e,t,i,n,r,o,s){var a=this,u=document.createElement("img");return s&&(u.crossOrigin=s),u.onload=function(){var s=function(e){return e(1)};return"undefined"!=typeof EXIF&&null!==EXIF&&r&&(s=function(e){return EXIF.getData(u,function(){return e(EXIF.getTag(this,"Orientation"))})}),s(function(r){e.width=u.width,e.height=u.height;var s=a.options.resize.call(a,e,t,i,n),d=document.createElement("canvas"),c=d.getContext("2d");switch(d.width=s.trgWidth,d.height=s.trgHeight,r>4&&(d.width=s.trgHeight,d.height=s.trgWidth),r){case 2:c.translate(d.width,0),c.scale(-1,1);break;case 3:c.translate(d.width,d.height),c.rotate(Math.PI);break;case 4:c.translate(0,d.height),c.scale(1,-1);break;case 5:c.rotate(.5*Math.PI),c.scale(1,-1);break;case 6:c.rotate(.5*Math.PI),c.translate(0,-d.width);break;case 7:c.rotate(.5*Math.PI),c.translate(d.height,-d.width),c.scale(-1,1);break;case 8:c.rotate(-.5*Math.PI),c.translate(-d.height,0)}l(c,u,null!=s.srcX?s.srcX:0,null!=s.srcY?s.srcY:0,s.srcWidth,s.srcHeight,null!=s.trgX?s.trgX:0,null!=s.trgY?s.trgY:0,s.trgWidth,s.trgHeight);var p=d.toDataURL("image/png");if(null!=o)return o(p,d)})},null!=o&&(u.onerror=o),u.src=e.dataURL}},{key:"processQueue",value:function(){var e=this.options.parallelUploads,t=this.getUploadingFiles().length,i=t;if(!(t>=e)){var n=this.getQueuedFiles();if(n.length>0){if(this.options.uploadMultiple)return this.processFiles(n.slice(0,e-t));for(;i<e;){if(!n.length)return;this.processFile(n.shift()),i++}}}}},{key:"processFile",value:function(e){return this.processFiles([e])}},{key:"processFiles",value:function(e){for(var t=0,i=i=e;;){if(t>=i.length)break;var n=i[t++];n.processing=!0,n.status=o.UPLOADING,this.emit("processing",n)}return this.options.uploadMultiple&&this.emit("processingmultiple",e),this.uploadFiles(e)}},{key:"_getFilesWithXhr",value:function(e){return this.files.filter(function(t){return t.xhr===e}).map(function(e){return e})}},{key:"cancelUpload",value:function(e){if(e.status===o.UPLOADING){for(var t=this._getFilesWithXhr(e.xhr),i=0,n=n=t;;){if(i>=n.length)break;n[i++].status=o.CANCELED}void 0!==e.xhr&&e.xhr.abort();for(var r=0,s=s=t;;){if(r>=s.length)break;var a=s[r++];this.emit("canceled",a)}this.options.uploadMultiple&&this.emit("canceledmultiple",t)}else e.status!==o.ADDED&&e.status!==o.QUEUED||(e.status=o.CANCELED,this.emit("canceled",e),this.options.uploadMultiple&&this.emit("canceledmultiple",[e]));if(this.options.autoProcessQueue)return this.processQueue()}},{key:"resolveOption",value:function(e){if("function"==typeof e){for(var t=arguments.length,i=Array(t>1?t-1:0),n=1;n<t;n++)i[n-1]=arguments[n];return e.apply(this,i)}return e}},{key:"uploadFile",value:function(e){return this.uploadFiles([e])}},{key:"uploadFiles",value:function(e){var t=this;this._transformFiles(e,function(i){if(e[0].upload.chunked){var n=e[0],r=i[0];n.upload.chunks=[];var s=function(){for(var i=0;void 0!==n.upload.chunks[i];)i++;if(!(i>=n.upload.totalChunkCount)){var s=i*t.options.chunkSize,a=Math.min(s+t.options.chunkSize,n.size),l={name:t._getParamName(0),data:r.webkitSlice?r.webkitSlice(s,a):r.slice(s,a),filename:n.upload.filename,chunkIndex:i};n.upload.chunks[i]={file:n,index:i,dataBlock:l,status:o.UPLOADING,progress:0,retries:0},t._uploadData(e,[l])}};if(n.upload.finishedChunkUpload=function(i){var r=!0;i.status=o.SUCCESS,i.dataBlock=null,i.xhr=null;for(var a=0;a<n.upload.totalChunkCount;a++){if(void 0===n.upload.chunks[a])return s();n.upload.chunks[a].status!==o.SUCCESS&&(r=!1)}r&&t.options.chunksUploaded(n,function(){t._finished(e,"",null)})},t.options.parallelChunkUploads)for(var a=0;a<n.upload.totalChunkCount;a++)s();else s()}else{for(var l=[],u=0;u<e.length;u++)l[u]={name:t._getParamName(u),data:i[u],filename:e[u].upload.filename};t._uploadData(e,l)}})}},{key:"_getChunk",value:function(e,t){for(var i=0;i<e.upload.totalChunkCount;i++)if(void 0!==e.upload.chunks[i]&&e.upload.chunks[i].xhr===t)return e.upload.chunks[i]}},{key:"_uploadData",value:function(e,t){for(var i=this,n=new XMLHttpRequest,r=0,s=s=e;;){if(r>=s.length)break;s[r++].xhr=n}e[0].upload.chunked&&(e[0].upload.chunks[t[0].chunkIndex].xhr=n);var a=this.resolveOption(this.options.method,e),l=this.resolveOption(this.options.url,e);n.open(a,l,!0),n.timeout=this.resolveOption(this.options.timeout,e),n.withCredentials=!!this.options.withCredentials,n.onload=function(t){i._finishedUploading(e,n,t)},n.onerror=function(){i._handleUploadError(e,n)},(null!=n.upload?n.upload:n).onprogress=function(t){return i._updateFilesUploadProgress(e,n,t)};var u={Accept:"application/json","Cache-Control":"no-cache","X-Requested-With":"XMLHttpRequest"};for(var d in this.options.headers&&o.extend(u,this.options.headers),u){var c=u[d];c&&n.setRequestHeader(d,c)}var p=new FormData;if(this.options.params){var h=this.options.params;for(var f in"function"==typeof h&&(h=h.call(this,e,n,e[0].upload.chunked?this._getChunk(e[0],n):null)),h){var m=h[f];p.append(f,m)}}for(var v=0,g=g=e;;){if(v>=g.length)break;var k=g[v++];this.emit("sending",k,n,p)}this.options.uploadMultiple&&this.emit("sendingmultiple",e,n,p),this._addFormElementData(p);for(var y=0;y<t.length;y++){var b=t[y];p.append(b.name,b.data,b.filename)}this.submitRequest(n,p,e)}},{key:"_transformFiles",value:function(e,t){for(var i=this,n=[],r=0,o=function(o){i.options.transformFile.call(i,e[o],function(i){n[o]=i,++r===e.length&&t(n)})},s=0;s<e.length;s++)o(s)}},{key:"_addFormElementData",value:function(e){if("FORM"===this.element.tagName)for(var t=0,i=i=this.element.querySelectorAll("input, textarea, select, button");;){if(t>=i.length)break;var n=i[t++],r=n.getAttribute("name"),o=n.getAttribute("type");if(o&&(o=o.toLowerCase()),null!=r)if("SELECT"===n.tagName&&n.hasAttribute("multiple"))for(var s=0,a=a=n.options;;){if(s>=a.length)break;var l=a[s++];l.selected&&e.append(r,l.value)}else(!o||"checkbox"!==o&&"radio"!==o||n.checked)&&e.append(r,n.value)}}},{key:"_updateFilesUploadProgress",value:function(e,t,i){var n=void 0;if(void 0!==i){if(n=100*i.loaded/i.total,e[0].upload.chunked){var r=e[0],o=this._getChunk(r,t);o.progress=n,o.total=i.total,o.bytesSent=i.loaded,r.upload.progress=0,r.upload.total=0,r.upload.bytesSent=0;for(var s=0;s<r.upload.totalChunkCount;s++)void 0!==r.upload.chunks[s]&&void 0!==r.upload.chunks[s].progress&&(r.upload.progress+=r.upload.chunks[s].progress,r.upload.total+=r.upload.chunks[s].total,r.upload.bytesSent+=r.upload.chunks[s].bytesSent);r.upload.progress=r.upload.progress/r.upload.totalChunkCount}else for(var a=0,l=l=e;;){if(a>=l.length)break;var u=l[a++];u.upload.progress=n,u.upload.total=i.total,u.upload.bytesSent=i.loaded}for(var d=0,c=c=e;;){if(d>=c.length)break;var p=c[d++];this.emit("uploadprogress",p,p.upload.progress,p.upload.bytesSent)}}else{var h=!0;n=100;for(var f=0,m=m=e;;){if(f>=m.length)break;var v=m[f++];100===v.upload.progress&&v.upload.bytesSent===v.upload.total||(h=!1),v.upload.progress=n,v.upload.bytesSent=v.upload.total}if(h)return;for(var g=0,k=k=e;;){if(g>=k.length)break;var y=k[g++];this.emit("uploadprogress",y,n,y.upload.bytesSent)}}}},{key:"_finishedUploading",value:function(e,t,i){var n=void 0;if(e[0].status!==o.CANCELED&&4===t.readyState){if("arraybuffer"!==t.responseType&&"blob"!==t.responseType&&(n=t.responseText,t.getResponseHeader("content-type")&&~t.getResponseHeader("content-type").indexOf("application/json")))try{n=JSON.parse(n)}catch(e){i=e,n="Invalid JSON response from server."}this._updateFilesUploadProgress(e),200<=t.status&&t.status<300?e[0].upload.chunked?e[0].upload.finishedChunkUpload(this._getChunk(e[0],t)):this._finished(e,n,i):this._handleUploadError(e,t,n)}}},{key:"_handleUploadError",value:function(e,t,i){if(e[0].status!==o.CANCELED){if(e[0].upload.chunked&&this.options.retryChunks){var n=this._getChunk(e[0],t);if(n.retries++<this.options.retryChunksLimit)return void this._uploadData(e,[n.dataBlock]);console.warn("Retried this chunk too often. Giving up.")}for(var r=0,s=s=e;;){if(r>=s.length)break;s[r++],this._errorProcessing(e,i||this.options.dictResponseError.replace("{{statusCode}}",t.status),t)}}}},{key:"submitRequest",value:function(e,t,i){e.send(t)}},{key:"_finished",value:function(e,t,i){for(var n=0,r=r=e;;){if(n>=r.length)break;var s=r[n++];s.status=o.SUCCESS,this.emit("success",s,t,i),this.emit("complete",s)}if(this.options.uploadMultiple&&(this.emit("successmultiple",e,t,i),this.emit("completemultiple",e)),this.options.autoProcessQueue)return this.processQueue()}},{key:"_errorProcessing",value:function(e,t,i){for(var n=0,r=r=e;;){if(n>=r.length)break;var s=r[n++];s.status=o.ERROR,this.emit("error",s,t,i),this.emit("complete",s)}if(this.options.uploadMultiple&&(this.emit("errormultiple",e,t,i),this.emit("completemultiple",e)),this.options.autoProcessQueue)return this.processQueue()}}],[{key:"uuidv4",value:function(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(e){var t=16*Math.random()|0;return("x"===e?t:3&t|8).toString(16)})}}]),o}();o.initClass(),o.version="5.5.1",o.options={},o.optionsForElement=function(e){return e.getAttribute("id")?o.options[a(e.getAttribute("id"))]:void 0},o.instances=[],o.forElement=function(e){if("string"==typeof e&&(e=document.querySelector(e)),null==(null!=e?e.dropzone:void 0))throw new Error("No Dropzone found for given element. This is probably because you're trying to access it before Dropzone had the time to initialize. Use the `init` option to setup any additional observers on your Dropzone.");return e.dropzone},o.autoDiscover=!0,o.discover=function(){var e=void 0;if(document.querySelectorAll)e=document.querySelectorAll(".dropzone");else{e=[];var t=function(t){return function(){for(var i=[],n=0,r=r=t;;){if(n>=r.length)break;var o=r[n++];/(^| )dropzone($| )/.test(o.className)?i.push(e.push(o)):i.push(void 0)}return i}()};t(document.getElementsByTagName("div")),t(document.getElementsByTagName("form"))}return function(){for(var t=[],i=0,n=n=e;;){if(i>=n.length)break;var r=n[i++];!1!==o.optionsForElement(r)?t.push(new o(r)):t.push(void 0)}return t}()},o.blacklistedBrowsers=[/opera.*(Macintosh|Windows Phone).*version\/12/i],o.isBrowserSupported=function(){var e=!0;if(window.File&&window.FileReader&&window.FileList&&window.Blob&&window.FormData&&document.querySelector)if("classList"in document.createElement("a"))for(var t=0,i=i=o.blacklistedBrowsers;;){if(t>=i.length)break;i[t++].test(navigator.userAgent)&&(e=!1)}else e=!1;else e=!1;return e},o.dataURItoBlob=function(e){for(var t=atob(e.split(",")[1]),i=e.split(",")[0].split(":")[1].split(";")[0],n=new ArrayBuffer(t.length),r=new Uint8Array(n),o=0,s=t.length,a=0<=s;a?o<=s:o>=s;a?o++:o--)r[o]=t.charCodeAt(o);return new Blob([n],{type:i})};var s=function(e,t){return e.filter(function(e){return e!==t}).map(function(e){return e})},a=function(e){return e.replace(/[\-_](\w)/g,function(e){return e.charAt(1).toUpperCase()})};o.createElement=function(e){var t=document.createElement("div");return t.innerHTML=e,t.childNodes[0]},o.elementInside=function(e,t){if(e===t)return!0;for(;e=e.parentNode;)if(e===t)return!0;return!1},o.getElement=function(e,t){var i=void 0;if("string"==typeof e?i=document.querySelector(e):null!=e.nodeType&&(i=e),null==i)throw new Error("Invalid `"+t+"` option provided. Please provide a CSS selector or a plain HTML element.");return i},o.getElements=function(e,t){var i=void 0,n=void 0;if(e instanceof Array){n=[];try{for(var r=0,o=o=e;!(r>=o.length);)i=o[r++],n.push(this.getElement(i,t))}catch(e){n=null}}else if("string"==typeof e){n=[];for(var s=0,a=a=document.querySelectorAll(e);!(s>=a.length);)i=a[s++],n.push(i)}else null!=e.nodeType&&(n=[e]);if(null==n||!n.length)throw new Error("Invalid `"+t+"` option provided. Please provide a CSS selector, a plain HTML element or a list of those.");return n},o.confirm=function(e,t,i){return window.confirm(e)?t():null!=i?i():void 0},o.isValidFile=function(e,t){if(!t)return!0;t=t.split(",");for(var i=e.type,n=i.replace(/\/.*$/,""),r=0,o=o=t;;){if(r>=o.length)break;var s=o[r++];if("."===(s=s.trim()).charAt(0)){if(-1!==e.name.toLowerCase().indexOf(s.toLowerCase(),e.name.length-s.length))return!0}else if(/\/\*$/.test(s)){if(n===s.replace(/\/.*$/,""))return!0}else if(i===s)return!0}return!1},"undefined"!=typeof jQuery&&null!==jQuery&&(jQuery.fn.dropzone=function(e){return this.each(function(){return new o(this,e)})}),null!==e?e.exports=o:window.Dropzone=o,o.ADDED="added",o.QUEUED="queued",o.ACCEPTED=o.QUEUED,o.UPLOADING="uploading",o.PROCESSING=o.UPLOADING,o.CANCELED="canceled",o.ERROR="error",o.SUCCESS="success";var l=function(e,t,i,n,r,o,s,a,l,u){var d=function(e){e.naturalWidth;var t=e.naturalHeight,i=document.createElement("canvas");i.width=1,i.height=t;var n=i.getContext("2d");n.drawImage(e,0,0);for(var r=n.getImageData(1,0,1,t).data,o=0,s=t,a=t;a>o;)0===r[4*(a-1)+3]?s=a:o=a,a=s+o>>1;var l=a/t;return 0===l?1:l}(t);return e.drawImage(t,i,n,r,o,s,a,l,u/d)},u=function(){function e(){n(this,e)}return t(e,null,[{key:"initClass",value:function(){this.KEY_STR="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="}},{key:"encode64",value:function(e){for(var t="",i=void 0,n=void 0,r="",o=void 0,s=void 0,a=void 0,l="",u=0;o=(i=e[u++])>>2,s=(3&i)<<4|(n=e[u++])>>4,a=(15&n)<<2|(r=e[u++])>>6,l=63&r,isNaN(n)?a=l=64:isNaN(r)&&(l=64),t=t+this.KEY_STR.charAt(o)+this.KEY_STR.charAt(s)+this.KEY_STR.charAt(a)+this.KEY_STR.charAt(l),i=n=r="",o=s=a=l="",u<e.length;);return t}},{key:"restore",value:function(e,t){if(!e.match("data:image/jpeg;base64,"))return t;var i=this.decode64(e.replace("data:image/jpeg;base64,","")),n=this.slice2Segments(i),r=this.exifManipulation(t,n);return"data:image/jpeg;base64,"+this.encode64(r)}},{key:"exifManipulation",value:function(e,t){var i=this.getExifArray(t),n=this.insertExif(e,i);return new Uint8Array(n)}},{key:"getExifArray",value:function(e){for(var t=void 0,i=0;i<e.length;){if(255===(t=e[i])[0]&225===t[1])return t;i++}return[]}},{key:"insertExif",value:function(e,t){var i=e.replace("data:image/jpeg;base64,",""),n=this.decode64(i),r=n.indexOf(255,3),o=n.slice(0,r),s=n.slice(r),a=o;return a=(a=a.concat(t)).concat(s)}},{key:"slice2Segments",value:function(e){for(var t=0,i=[];;){if(255===e[t]&218===e[t+1])break;if(255===e[t]&216===e[t+1])t+=2;else{var n=t+(256*e[t+2]+e[t+3])+2,r=e.slice(t,n);i.push(r),t=n}if(t>e.length)break}return i}},{key:"decode64",value:function(e){var t=void 0,i=void 0,n="",r=void 0,o=void 0,s="",a=0,l=[];for(/[^A-Za-z0-9\+\/\=]/g.exec(e)&&console.warn("There were invalid base64 characters in the input text.\nValid base64 characters are A-Z, a-z, 0-9, '+', '/',and '='\nExpect errors in decoding."),e=e.replace(/[^A-Za-z0-9\+\/\=]/g,"");t=this.KEY_STR.indexOf(e.charAt(a++))<<2|(r=this.KEY_STR.indexOf(e.charAt(a++)))>>4,i=(15&r)<<4|(o=this.KEY_STR.indexOf(e.charAt(a++)))>>2,n=(3&o)<<6|(s=this.KEY_STR.indexOf(e.charAt(a++))),l.push(t),64!==o&&l.push(i),64!==s&&l.push(n),t=i=n="",r=o=s="",a<e.length;);return l}}]),e}();u.initClass(),o._autoDiscoverFunction=function(){if(o.autoDiscover)return o.discover()},function(e,t){var i=!1,n=!0,r=e.document,o=r.documentElement,s=r.addEventListener?"addEventListener":"attachEvent",a=r.addEventListener?"removeEventListener":"detachEvent",l=r.addEventListener?"":"on",u=function n(o){if("readystatechange"!==o.type||"complete"===r.readyState)return("load"===o.type?e:r)[a](l+o.type,n,!1),!i&&(i=!0)?t.call(e,o.type||o):void 0};if("complete"!==r.readyState){if(r.createEventObject&&o.doScroll){try{n=!e.frameElement}catch(e){}n&&function e(){try{o.doScroll("left")}catch(t){return void setTimeout(e,50)}return u("poll")}()}r[s](l+"DOMContentLoaded",u,!1),r[s](l+"readystatechange",u,!1),e[s](l+"load",u,!1)}}(window,o._autoDiscoverFunction)}(e={exports:{}},e.exports),e.exports),i={getSignedURL(e,t){let i={filePath:e.name,contentType:e.type};return new Promise((n,r)=>{var o=new FormData;let s=new XMLHttpRequest,a="function"==typeof t.signingURL?t.signingURL(e):t.signingURL;s.open("POST",a),s.onload=function(){200==s.status?n(JSON.parse(s.response)):r(s.statusText)},s.onerror=function(e){console.error("Network Error : Could not send request to AWS (Maybe CORS errors)"),r(e)},!0===t.withCredentials&&(s.withCredentials=!0),Object.entries(t.headers||{}).forEach(([e,t])=>{s.setRequestHeader(e,t)}),i=Object.assign(i,t.params||{}),Object.entries(i).forEach(([e,t])=>{o.append(e,t)}),s.send(o)})},sendFile(e,t,i){var n=i?this.setResponseHandler:this.sendS3Handler;return this.getSignedURL(e,t).then(t=>n(t,e)).catch(e=>e)},setResponseHandler(e,t){t.s3Signature=e.signature,t.s3Url=e.postEndpoint},sendS3Handler(e,t){let i=new FormData,n=e.signature;return Object.keys(n).forEach(function(e){i.append(e,n[e])}),i.append("file",t),new Promise((t,n)=>{let r=new XMLHttpRequest;r.open("POST",e.postEndpoint),r.onload=function(){if(201==r.status){var e=(new window.DOMParser).parseFromString(r.response,"text/xml").firstChild.children[0].innerHTML;t({success:!0,message:e})}else{var i=(new window.DOMParser).parseFromString(r.response,"text/xml").firstChild.children[0].innerHTML;n({success:!1,message:i+". Request is marked as resolved when returns as status 201"})}},r.onerror=function(e){var t=(new window.DOMParser).parseFromString(r.response,"text/xml").firstChild.children[1].innerHTML;n({success:!1,message:t})},r.send(i)})}};t.autoDiscover=!1;return function(e,t,i,n,r,o,s,a,l,u){"boolean"!=typeof s&&(l=a,a=s,s=!1);var d,c="function"==typeof i?i.options:i;if(e&&e.render&&(c.render=e.render,c.staticRenderFns=e.staticRenderFns,c._compiled=!0,r&&(c.functional=!0)),n&&(c._scopeId=n),o?(d=function(e){(e=e||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext)||"undefined"==typeof __VUE_SSR_CONTEXT__||(e=__VUE_SSR_CONTEXT__),t&&t.call(this,l(e)),e&&e._registeredComponents&&e._registeredComponents.add(o)},c._ssrRegister=d):t&&(d=s?function(){t.call(this,u(this.$root.$options.shadowRoot))}:function(e){t.call(this,a(e))}),d)if(c.functional){var p=c.render;c.render=function(e,t){return d.call(t),p(e,t)}}else{var h=c.beforeCreate;c.beforeCreate=h?[].concat(h,d):[d]}return i}({render:function(){var e=this.$createElement,t=this._self._c||e;return t("div",{ref:"dropzoneElement",class:{"vue-dropzone dropzone":this.includeStyling},attrs:{id:this.id}},[this.useCustomSlot?t("div",{staticClass:"dz-message"},[this._t("default",[this._v("Drop files here to upload")])],2):this._e()])},staticRenderFns:[]},void 0,{props:{id:{type:String,required:!0,default:"dropzone"},options:{type:Object,required:!0},includeStyling:{type:Boolean,default:!0,required:!1},awss3:{type:Object,required:!1,default:null},destroyDropzone:{type:Boolean,default:!0,required:!1},duplicateCheck:{type:Boolean,default:!1,required:!1},useCustomSlot:{type:Boolean,default:!1,required:!1}},data:()=>({isS3:!1,isS3OverridesServerPropagation:!1,wasQueueAutoProcess:!0}),computed:{dropzoneSettings(){let e={thumbnailWidth:200,thumbnailHeight:200};return Object.keys(this.options).forEach(function(t){e[t]=this.options[t]},this),null!==this.awss3&&(e.autoProcessQueue=!1,this.isS3=!0,this.isS3OverridesServerPropagation=!1===this.awss3.sendFileToServer,void 0!==this.options.autoProcessQueue&&(this.wasQueueAutoProcess=this.options.autoProcessQueue),this.isS3OverridesServerPropagation&&(e.url=(e=>e[0].s3Url))),e}},mounted(){if(this.$isServer&&this.hasBeenMounted)return;this.hasBeenMounted=!0,this.dropzone=new t(this.$refs.dropzoneElement,this.dropzoneSettings);let e=this;this.dropzone.on("thumbnail",function(t,i){e.$emit("vdropzone-thumbnail",t,i)}),this.dropzone.on("addedfile",function(t){var i,n;if(e.duplicateCheck&&this.files.length)for(i=0,n=this.files.length;i<n-1;i++)this.files[i].name===t.name&&this.files[i].size===t.size&&this.files[i].lastModifiedDate.toString()===t.lastModifiedDate.toString()&&(this.removeFile(t),e.$emit("vdropzone-duplicate-file",t));e.$emit("vdropzone-file-added",t),e.isS3&&e.wasQueueAutoProcess&&!t.manuallyAdded&&e.getSignedAndUploadToS3(t)}),this.dropzone.on("addedfiles",function(t){e.$emit("vdropzone-files-added",t)}),this.dropzone.on("removedfile",function(t){e.$emit("vdropzone-removed-file",t),t.manuallyAdded&&null!==e.dropzone.options.maxFiles&&e.dropzone.options.maxFiles++}),this.dropzone.on("success",function(t,i){if(e.$emit("vdropzone-success",t,i),e.isS3){if(e.isS3OverridesServerPropagation){var n=(new window.DOMParser).parseFromString(i,"text/xml").firstChild.children[0].innerHTML;e.$emit("vdropzone-s3-upload-success",n)}e.wasQueueAutoProcess&&e.setOption("autoProcessQueue",!1)}}),this.dropzone.on("successmultiple",function(t,i){e.$emit("vdropzone-success-multiple",t,i)}),this.dropzone.on("error",function(t,i,n){e.$emit("vdropzone-error",t,i,n),this.isS3&&e.$emit("vdropzone-s3-upload-error")}),this.dropzone.on("errormultiple",function(t,i,n){e.$emit("vdropzone-error-multiple",t,i,n)}),this.dropzone.on("sending",function(t,i,n){if(e.isS3)if(e.isS3OverridesServerPropagation){let e=t.s3Signature;Object.keys(e).forEach(function(t){n.append(t,e[t])})}else n.append("s3ObjectLocation",t.s3ObjectLocation);e.$emit("vdropzone-sending",t,i,n)}),this.dropzone.on("sendingmultiple",function(t,i,n){e.$emit("vdropzone-sending-multiple",t,i,n)}),this.dropzone.on("complete",function(t){e.$emit("vdropzone-complete",t)}),this.dropzone.on("completemultiple",function(t){e.$emit("vdropzone-complete-multiple",t)}),this.dropzone.on("canceled",function(t){e.$emit("vdropzone-canceled",t)}),this.dropzone.on("canceledmultiple",function(t){e.$emit("vdropzone-canceled-multiple",t)}),this.dropzone.on("maxfilesreached",function(t){e.$emit("vdropzone-max-files-reached",t)}),this.dropzone.on("maxfilesexceeded",function(t){e.$emit("vdropzone-max-files-exceeded",t)}),this.dropzone.on("processing",function(t){e.$emit("vdropzone-processing",t)}),this.dropzone.on("processingmultiple",function(t){e.$emit("vdropzone-processing-multiple",t)}),this.dropzone.on("uploadprogress",function(t,i,n){e.$emit("vdropzone-upload-progress",t,i,n)}),this.dropzone.on("totaluploadprogress",function(t,i,n){e.$emit("vdropzone-total-upload-progress",t,i,n)}),this.dropzone.on("reset",function(){e.$emit("vdropzone-reset")}),this.dropzone.on("queuecomplete",function(){e.$emit("vdropzone-queue-complete")}),this.dropzone.on("drop",function(t){e.$emit("vdropzone-drop",t)}),this.dropzone.on("dragstart",function(t){e.$emit("vdropzone-drag-start",t)}),this.dropzone.on("dragend",function(t){e.$emit("vdropzone-drag-end",t)}),this.dropzone.on("dragenter",function(t){e.$emit("vdropzone-drag-enter",t)}),this.dropzone.on("dragover",function(t){e.$emit("vdropzone-drag-over",t)}),this.dropzone.on("dragleave",function(t){e.$emit("vdropzone-drag-leave",t)}),e.$emit("vdropzone-mounted")},beforeDestroy(){this.destroyDropzone&&this.dropzone.destroy()},methods:{manuallyAddFile:function(e,t){e.manuallyAdded=!0,this.dropzone.emit("addedfile",e);let i=!1;if((t.indexOf(".svg")>-1||t.indexOf(".png")>-1||t.indexOf(".jpg")>-1||t.indexOf(".jpeg")>-1||t.indexOf(".gif")>-1||t.indexOf(".webp")>-1)&&(i=!0),this.dropzone.options.createImageThumbnails&&i&&e.size<=1024*this.dropzone.options.maxThumbnailFilesize*1024){t&&this.dropzone.emit("thumbnail",e,t);for(var n=e.previewElement.querySelectorAll("[data-dz-thumbnail]"),r=0;r<n.length;r++)n[r].style.width=this.dropzoneSettings.thumbnailWidth+"px",n[r].style.height=this.dropzoneSettings.thumbnailHeight+"px",n[r].style["object-fit"]="contain"}this.dropzone.emit("complete",e),this.dropzone.options.maxFiles&&this.dropzone.options.maxFiles--,this.dropzone.files.push(e),this.$emit("vdropzone-file-added-manually",e)},setOption:function(e,t){this.dropzone.options[e]=t},removeAllFiles:function(e){this.dropzone.removeAllFiles(e)},processQueue:function(){let e=this.dropzone;this.isS3&&!this.wasQueueAutoProcess?this.getQueuedFiles().forEach(e=>{this.getSignedAndUploadToS3(e)}):this.dropzone.processQueue(),this.dropzone.on("success",function(){e.options.autoProcessQueue=!0}),this.dropzone.on("queuecomplete",function(){e.options.autoProcessQueue=!1})},init:function(){return this.dropzone.init()},destroy:function(){return this.dropzone.destroy()},updateTotalUploadProgress:function(){return this.dropzone.updateTotalUploadProgress()},getFallbackForm:function(){return this.dropzone.getFallbackForm()},getExistingFallback:function(){return this.dropzone.getExistingFallback()},setupEventListeners:function(){return this.dropzone.setupEventListeners()},removeEventListeners:function(){return this.dropzone.removeEventListeners()},disable:function(){return this.dropzone.disable()},enable:function(){return this.dropzone.enable()},filesize:function(e){return this.dropzone.filesize(e)},accept:function(e,t){return this.dropzone.accept(e,t)},addFile:function(e){return this.dropzone.addFile(e)},removeFile:function(e){this.dropzone.removeFile(e)},getAcceptedFiles:function(){return this.dropzone.getAcceptedFiles()},getRejectedFiles:function(){return this.dropzone.getRejectedFiles()},getFilesWithStatus:function(){return this.dropzone.getFilesWithStatus()},getQueuedFiles:function(){return this.dropzone.getQueuedFiles()},getUploadingFiles:function(){return this.dropzone.getUploadingFiles()},getAddedFiles:function(){return this.dropzone.getAddedFiles()},getActiveFiles:function(){return this.dropzone.getActiveFiles()},getSignedAndUploadToS3(e){var t=i.sendFile(e,this.awss3,this.isS3OverridesServerPropagation);this.isS3OverridesServerPropagation?t.then(()=>{setTimeout(()=>this.dropzone.processFile(e))}):t.then(t=>{t.success?(e.s3ObjectLocation=t.message,setTimeout(()=>this.dropzone.processFile(e)),this.$emit("vdropzone-s3-upload-success",t.message)):void 0!==t.message?this.$emit("vdropzone-s3-upload-error",t.message):this.$emit("vdropzone-s3-upload-error","Network Error : Could not send request to AWS. (Maybe CORS error)")}),t.catch(e=>{alert(e)})},setAWSSigningURL(e){this.isS3&&(this.awss3.signingURL=e)}}},void 0,!1,void 0,void 0,void 0)});
56939//# sourceMappingURL=vue2Dropzone.js.map
56940
56941
56942/***/ }),
56943
vendor: 2,336 bytes, lines 56944-56973
56944/***/ "./node_modules/vue2-dropzone/dist/vue2Dropzone.min.css":
56945/*!**************************************************************!*\
56946  !*** ./node_modules/vue2-dropzone/dist/vue2Dropzone.min.css ***!
56947  \**************************************************************/
56948/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
56949
56950"use strict";
56951__webpack_require__.r(__webpack_exports__);
56952/* harmony export */ __webpack_require__.d(__webpack_exports__, {
56953/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
56954/* harmony export */ });
56955/* harmony import */ var _style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! !../../style-loader/dist/runtime/injectStylesIntoStyleTag.js */ "./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js");
56956/* harmony import */ var _style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__);
56957/* harmony import */ var _laravel_mix_node_modules_css_loader_dist_cjs_js_clonedRuleSet_9_use_1_postcss_loader_dist_cjs_js_clonedRuleSet_9_use_2_vue2Dropzone_min_css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! !!../../laravel-mix/node_modules/css-loader/dist/cjs.js??clonedRuleSet-9.use[1]!../../postcss-loader/dist/cjs.js??clonedRuleSet-9.use[2]!./vue2Dropzone.min.css */ "./node_modules/laravel-mix/node_modules/css-loader/dist/cjs.js??clonedRuleSet-9.use[1]!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-9.use[2]!./node_modules/vue2-dropzone/dist/vue2Dropzone.min.css");
56958
56959            
56960
56961var options = {};
56962
56963options.insert = "head";
56964options.singleton = false;
56965
56966var update = _style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default()(_laravel_mix_node_modules_css_loader_dist_cjs_js_clonedRuleSet_9_use_1_postcss_loader_dist_cjs_js_clonedRuleSet_9_use_2_vue2Dropzone_min_css__WEBPACK_IMPORTED_MODULE_1__["default"], options);
56967
56968
56969
56970/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_laravel_mix_node_modules_css_loader_dist_cjs_js_clonedRuleSet_9_use_1_postcss_loader_dist_cjs_js_clonedRuleSet_9_use_2_vue2Dropzone_min_css__WEBPACK_IMPORTED_MODULE_1__["default"].locals || {});
56971
56972/***/ }),
56973
vendor: 263,023 bytes, lines 56974-56983
56974/***/ "./node_modules/vue2-quill-editor/dist/index.js":
56975/*!******************************************************!*\
56976  !*** ./node_modules/vue2-quill-editor/dist/index.js ***!
56977  \******************************************************/
56978/***/ (function(module) {
56979
56980(function(t,e){ true?module.exports=e():0})(this,function(){return function(t){function e(r){if(n[r])return n[r].exports;var o=n[r]={i:r,l:!1,exports:{}};return t[r].call(o.exports,o,o.exports,e),o.l=!0,o.exports}var n={};return e.m=t,e.c=n,e.i=function(t){return t},e.d=function(t,n,r){e.o(t,n)||Object.defineProperty(t,n,{configurable:!1,enumerable:!0,get:r})},e.n=function(t){var n=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(n,"a",n),n},e.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},e.p="/",e(e.s=20)}([function(t,e,n){(function(e){function n(t,e){var n=t[1]||"",o=t[3];if(!o)return n;if(e){var i=r(o),l=o.sources.map(function(t){return"/*# sourceURL="+o.sourceRoot+t+" */"});return[n].concat(l).concat([i]).join("\n")}return[n].join("\n")}function r(t){return"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,"+new e(JSON.stringify(t)).toString("base64")+" */"}t.exports=function(t){var e=[];return e.toString=function(){return this.map(function(e){var r=n(e,t);return e[2]?"@media "+e[2]+"{"+r+"}":r}).join("")},e.i=function(t,n){"string"==typeof t&&(t=[[null,t,""]]);for(var r={},o=0;o<this.length;o++){var i=this[o][0];"number"==typeof i&&(r[i]=!0)}for(o=0;o<t.length;o++){var l=t[o];"number"==typeof l[0]&&r[l[0]]||(n&&!l[2]?l[2]=n:n&&(l[2]="("+l[2]+") and ("+n+")"),e.push(l))}},e}}).call(e,n(2).Buffer)},function(t,e,n){function r(t){for(var e=0;e<t.length;e++){var n=t[e],r=c[n.id];if(r){r.refs++;for(var o=0;o<r.parts.length;o++)r.parts[o](n.parts[o]);for(;o<n.parts.length;o++)r.parts.push(i(n.parts[o]));r.parts.length>n.parts.length&&(r.parts.length=n.parts.length)}else{for(var l=[],o=0;o<n.parts.length;o++)l.push(i(n.parts[o]));c[n.id]={id:n.id,refs:1,parts:l}}}}function o(){var t=document.createElement("style");return t.type="text/css",f.appendChild(t),t}function i(t){var e,n,r=document.querySelector('style[data-vue-ssr-id~="'+t.id+'"]');if(r){if(h)return y;r.parentNode.removeChild(r)}if(b){var i=p++;r=d||(d=o()),e=l.bind(null,r,i,!1),n=l.bind(null,r,i,!0)}else r=o(),e=a.bind(null,r),n=function(){r.parentNode.removeChild(r)};return e(t),function(r){if(r){if(r.css===t.css&&r.media===t.media&&r.sourceMap===t.sourceMap)return;e(t=r)}else n()}}function l(t,e,n,r){var o=n?"":r.css;if(t.styleSheet)t.styleSheet.cssText=v(e,o);else{var i=document.createTextNode(o),l=t.childNodes;l[e]&&t.removeChild(l[e]),l.length?t.insertBefore(i,l[e]):t.appendChild(i)}}function a(t,e){var n=e.css,r=e.media,o=e.sourceMap;if(r&&t.setAttribute("media",r),o&&(n+="\n/*# sourceURL="+o.sources[0]+" */",n+="\n/*# sourceMappingURL=data:application/json;base64,"+btoa(unescape(encodeURIComponent(JSON.stringify(o))))+" */"),t.styleSheet)t.styleSheet.cssText=n;else{for(;t.firstChild;)t.removeChild(t.firstChild);t.appendChild(document.createTextNode(n))}}var s="undefined"!=typeof document;if("undefined"!=typeof DEBUG&&DEBUG&&!s)throw new Error("vue-style-loader cannot be used in a non-browser environment. Use { target: 'node' } in your Webpack config to indicate a server-rendering environment.");var u=n(18),c={},f=s&&(document.head||document.getElementsByTagName("head")[0]),d=null,p=0,h=!1,y=function(){},b="undefined"!=typeof navigator&&/msie [6-9]\b/.test(navigator.userAgent.toLowerCase());t.exports=function(t,e,n){h=n;var o=u(t,e);return r(o),function(e){for(var n=[],i=0;i<o.length;i++){var l=o[i],a=c[l.id];a.refs--,n.push(a)}e?(o=u(t,e),r(o)):o=[];for(var i=0;i<n.length;i++){var a=n[i];if(0===a.refs){for(var s=0;s<a.parts.length;s++)a.parts[s]();delete c[a.id]}}}};var v=function(){var t=[];return function(e,n){return t[e]=n,t.filter(Boolean).join("\n")}}()},function(t,e,n){"use strict";(function(t){function r(){return i.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function o(t,e){if(r()<e)throw new RangeError("Invalid typed array length");return i.TYPED_ARRAY_SUPPORT?(t=new Uint8Array(e),t.__proto__=i.prototype):(null===t&&(t=new i(e)),t.length=e),t}function i(t,e,n){if(!(i.TYPED_ARRAY_SUPPORT||this instanceof i))return new i(t,e,n);if("number"==typeof t){if("string"==typeof e)throw new Error("If encoding is specified then the first argument must be a string");return u(this,t)}return l(this,t,e,n)}function l(t,e,n,r){if("number"==typeof e)throw new TypeError('"value" argument must not be a number');return"undefined"!=typeof ArrayBuffer&&e instanceof ArrayBuffer?d(t,e,n,r):"string"==typeof e?c(t,e,n):p(t,e)}function a(t){if("number"!=typeof t)throw new TypeError('"size" argument must be a number');if(t<0)throw new RangeError('"size" argument must not be negative')}function s(t,e,n,r){return a(e),e<=0?o(t,e):void 0!==n?"string"==typeof r?o(t,e).fill(n,r):o(t,e).fill(n):o(t,e)}function u(t,e){if(a(e),t=o(t,e<0?0:0|h(e)),!i.TYPED_ARRAY_SUPPORT)for(var n=0;n<e;++n)t[n]=0;return t}function c(t,e,n){if("string"==typeof n&&""!==n||(n="utf8"),!i.isEncoding(n))throw new TypeError('"encoding" must be a valid string encoding');var r=0|b(e,n);t=o(t,r);var l=t.write(e,n);return l!==r&&(t=t.slice(0,l)),t}function f(t,e){var n=e.length<0?0:0|h(e.length);t=o(t,n);for(var r=0;r<n;r+=1)t[r]=255&e[r];return t}function d(t,e,n,r){if(e.byteLength,n<0||e.byteLength<n)throw new RangeError("'offset' is out of bounds");if(e.byteLength<n+(r||0))throw new RangeError("'length' is out of bounds");return e=void 0===n&&void 0===r?new Uint8Array(e):void 0===r?new Uint8Array(e,n):new Uint8Array(e,n,r),i.TYPED_ARRAY_SUPPORT?(t=e,t.__proto__=i.prototype):t=f(t,e),t}function p(t,e){if(i.isBuffer(e)){var n=0|h(e.length);return t=o(t,n),0===t.length?t:(e.copy(t,0,0,n),t)}if(e){if("undefined"!=typeof ArrayBuffer&&e.buffer instanceof ArrayBuffer||"length"in e)return"number"!=typeof e.length||G(e.length)?o(t,0):f(t,e);if("Buffer"===e.type&&Q(e.data))return f(t,e.data)}throw new TypeError("First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.")}function h(t){if(t>=r())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+r().toString(16)+" bytes");return 0|t}function y(t){return+t!=t&&(t=0),i.alloc(+t)}function b(t,e){if(i.isBuffer(t))return t.length;if("undefined"!=typeof ArrayBuffer&&"function"==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(t)||t instanceof ArrayBuffer))return t.byteLength;"string"!=typeof t&&(t=""+t);var n=t.length;if(0===n)return 0;for(var r=!1;;)switch(e){case"ascii":case"latin1":case"binary":return n;case"utf8":case"utf-8":case void 0:return Y(t).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*n;case"hex":return n>>>1;case"base64":return V(t).length;default:if(r)return Y(t).length;e=(""+e).toLowerCase(),r=!0}}function v(t,e,n){var r=!1;if((void 0===e||e<0)&&(e=0),e>this.length)return"";if((void 0===n||n>this.length)&&(n=this.length),n<=0)return"";if(n>>>=0,e>>>=0,n<=e)return"";for(t||(t="utf8");;)switch(t){case"hex":return S(this,e,n);case"utf8":case"utf-8":return j(this,e,n);case"ascii":return T(this,e,n);case"latin1":case"binary":return P(this,e,n);case"base64":return A(this,e,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return C(this,e,n);default:if(r)throw new TypeError("Unknown encoding: "+t);t=(t+"").toLowerCase(),r=!0}}function g(t,e,n){var r=t[e];t[e]=t[n],t[n]=r}function m(t,e,n,r,o){if(0===t.length)return-1;if("string"==typeof n?(r=n,n=0):n>2147483647?n=2147483647:n<-2147483648&&(n=-2147483648),n=+n,isNaN(n)&&(n=o?0:t.length-1),n<0&&(n=t.length+n),n>=t.length){if(o)return-1;n=t.length-1}else if(n<0){if(!o)return-1;n=0}if("string"==typeof e&&(e=i.from(e,r)),i.isBuffer(e))return 0===e.length?-1:q(t,e,n,r,o);if("number"==typeof e)return e&=255,i.TYPED_ARRAY_SUPPORT&&"function"==typeof Uint8Array.prototype.indexOf?o?Uint8Array.prototype.indexOf.call(t,e,n):Uint8Array.prototype.lastIndexOf.call(t,e,n):q(t,[e],n,r,o);throw new TypeError("val must be string, number or Buffer")}function q(t,e,n,r,o){function i(t,e){return 1===l?t[e]:t.readUInt16BE(e*l)}var l=1,a=t.length,s=e.length;if(void 0!==r&&("ucs2"===(r=String(r).toLowerCase())||"ucs-2"===r||"utf16le"===r||"utf-16le"===r)){if(t.length<2||e.length<2)return-1;l=2,a/=2,s/=2,n/=2}var u;if(o){var c=-1;for(u=n;u<a;u++)if(i(t,u)===i(e,-1===c?0:u-c)){if(-1===c&&(c=u),u-c+1===s)return c*l}else-1!==c&&(u-=u-c),c=-1}else for(n+s>a&&(n=a-s),u=n;u>=0;u--){for(var f=!0,d=0;d<s;d++)if(i(t,u+d)!==i(e,d)){f=!1;break}if(f)return u}return-1}function w(t,e,n,r){n=Number(n)||0;var o=t.length-n;r?(r=Number(r))>o&&(r=o):r=o;var i=e.length;if(i%2!=0)throw new TypeError("Invalid hex string");r>i/2&&(r=i/2);for(var l=0;l<r;++l){var a=parseInt(e.substr(2*l,2),16);if(isNaN(a))return l;t[n+l]=a}return l}function _(t,e,n,r){return W(Y(e,t.length-n),t,n,r)}function k(t,e,n,r){return W(K(e),t,n,r)}function O(t,e,n,r){return k(t,e,n,r)}function x(t,e,n,r){return W(V(e),t,n,r)}function E(t,e,n,r){return W(Z(e,t.length-n),t,n,r)}function A(t,e,n){return 0===e&&n===t.length?$.fromByteArray(t):$.fromByteArray(t.slice(e,n))}function j(t,e,n){n=Math.min(t.length,n);for(var r=[],o=e;o<n;){var i=t[o],l=null,a=i>239?4:i>223?3:i>191?2:1;if(o+a<=n){var s,u,c,f;switch(a){case 1:i<128&&(l=i);break;case 2:s=t[o+1],128==(192&s)&&(f=(31&i)<<6|63&s)>127&&(l=f);break;case 3:s=t[o+1],u=t[o+2],128==(192&s)&&128==(192&u)&&(f=(15&i)<<12|(63&s)<<6|63&u)>2047&&(f<55296||f>57343)&&(l=f);break;case 4:s=t[o+1],u=t[o+2],c=t[o+3],128==(192&s)&&128==(192&u)&&128==(192&c)&&(f=(15&i)<<18|(63&s)<<12|(63&u)<<6|63&c)>65535&&f<1114112&&(l=f)}}null===l?(l=65533,a=1):l>65535&&(l-=65536,r.push(l>>>10&1023|55296),l=56320|1023&l),r.push(l),o+=a}return N(r)}function N(t){var e=t.length;if(e<=J)return String.fromCharCode.apply(String,t);for(var n="",r=0;r<e;)n+=String.fromCharCode.apply(String,t.slice(r,r+=J));return n}function T(t,e,n){var r="";n=Math.min(t.length,n);for(var o=e;o<n;++o)r+=String.fromCharCode(127&t[o]);return r}function P(t,e,n){var r="";n=Math.min(t.length,n);for(var o=e;o<n;++o)r+=String.fromCharCode(t[o]);return r}function S(t,e,n){var r=t.length;(!e||e<0)&&(e=0),(!n||n<0||n>r)&&(n=r);for(var o="",i=e;i<n;++i)o+=H(t[i]);return o}function C(t,e,n){for(var r=t.slice(e,n),o="",i=0;i<r.length;i+=2)o+=String.fromCharCode(r[i]+256*r[i+1]);return o}function L(t,e,n){if(t%1!=0||t<0)throw new RangeError("offset is not uint");if(t+e>n)throw new RangeError("Trying to access beyond buffer length")}function R(t,e,n,r,o,l){if(!i.isBuffer(t))throw new TypeError('"buffer" argument must be a Buffer instance');if(e>o||e<l)throw new RangeError('"value" argument is out of bounds');if(n+r>t.length)throw new RangeError("Index out of range")}function M(t,e,n,r){e<0&&(e=65535+e+1);for(var o=0,i=Math.min(t.length-n,2);o<i;++o)t[n+o]=(e&255<<8*(r?o:1-o))>>>8*(r?o:1-o)}function B(t,e,n,r){e<0&&(e=4294967295+e+1);for(var o=0,i=Math.min(t.length-n,4);o<i;++o)t[n+o]=e>>>8*(r?o:3-o)&255}function I(t,e,n,r,o,i){if(n+r>t.length)throw new RangeError("Index out of range");if(n<0)throw new RangeError("Index out of range")}function U(t,e,n,r,o){return o||I(t,e,n,4,3.4028234663852886e38,-3.4028234663852886e38),X.write(t,e,n,r,23,4),n+4}function D(t,e,n,r,o){return o||I(t,e,n,8,1.7976931348623157e308,-1.7976931348623157e308),X.write(t,e,n,r,52,8),n+8}function z(t){if(t=F(t).replace(tt,""),t.length<2)return"";for(;t.length%4!=0;)t+="=";return t}function F(t){return t.trim?t.trim():t.replace(/^\s+|\s+$/g,"")}function H(t){return t<16?"0"+t.toString(16):t.toString(16)}function Y(t,e){e=e||1/0;for(var n,r=t.length,o=null,i=[],l=0;l<r;++l){if((n=t.charCodeAt(l))>55295&&n<57344){if(!o){if(n>56319){(e-=3)>-1&&i.push(239,191,189);continue}if(l+1===r){(e-=3)>-1&&i.push(239,191,189);continue}o=n;continue}if(n<56320){(e-=3)>-1&&i.push(239,191,189),o=n;continue}n=65536+(o-55296<<10|n-56320)}else o&&(e-=3)>-1&&i.push(239,191,189);if(o=null,n<128){if((e-=1)<0)break;i.push(n)}else if(n<2048){if((e-=2)<0)break;i.push(n>>6|192,63&n|128)}else if(n<65536){if((e-=3)<0)break;i.push(n>>12|224,n>>6&63|128,63&n|128)}else{if(!(n<1114112))throw new Error("Invalid code point");if((e-=4)<0)break;i.push(n>>18|240,n>>12&63|128,n>>6&63|128,63&n|128)}}return i}function K(t){for(var e=[],n=0;n<t.length;++n)e.push(255&t.charCodeAt(n));return e}function Z(t,e){for(var n,r,o,i=[],l=0;l<t.length&&!((e-=2)<0);++l)n=t.charCodeAt(l),r=n>>8,o=n%256,i.push(o),i.push(r);return i}function V(t){return $.toByteArray(z(t))}function W(t,e,n,r){for(var o=0;o<r&&!(o+n>=e.length||o>=t.length);++o)e[o+n]=t[o];return o}function G(t){return t!==t}var $=n(5),X=n(9),Q=n(10);e.Buffer=i,e.SlowBuffer=y,e.INSPECT_MAX_BYTES=50,i.TYPED_ARRAY_SUPPORT=void 0!==t.TYPED_ARRAY_SUPPORT?t.TYPED_ARRAY_SUPPORT:function(){try{var t=new Uint8Array(1);return t.__proto__={__proto__:Uint8Array.prototype,foo:function(){return 42}},42===t.foo()&&"function"==typeof t.subarray&&0===t.subarray(1,1).byteLength}catch(t){return!1}}(),e.kMaxLength=r(),i.poolSize=8192,i._augment=function(t){return t.__proto__=i.prototype,t},i.from=function(t,e,n){return l(null,t,e,n)},i.TYPED_ARRAY_SUPPORT&&(i.prototype.__proto__=Uint8Array.prototype,i.__proto__=Uint8Array,"undefined"!=typeof Symbol&&Symbol.species&&i[Symbol.species]===i&&Object.defineProperty(i,Symbol.species,{value:null,configurable:!0})),i.alloc=function(t,e,n){return s(null,t,e,n)},i.allocUnsafe=function(t){return u(null,t)},i.allocUnsafeSlow=function(t){return u(null,t)},i.isBuffer=function(t){return!(null==t||!t._isBuffer)},i.compare=function(t,e){if(!i.isBuffer(t)||!i.isBuffer(e))throw new TypeError("Arguments must be Buffers");if(t===e)return 0;for(var n=t.length,r=e.length,o=0,l=Math.min(n,r);o<l;++o)if(t[o]!==e[o]){n=t[o],r=e[o];break}return n<r?-1:r<n?1:0},i.isEncoding=function(t){switch(String(t).toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"latin1":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return!0;default:return!1}},i.concat=function(t,e){if(!Q(t))throw new TypeError('"list" argument must be an Array of Buffers');if(0===t.length)return i.alloc(0);var n;if(void 0===e)for(e=0,n=0;n<t.length;++n)e+=t[n].length;var r=i.allocUnsafe(e),o=0;for(n=0;n<t.length;++n){var l=t[n];if(!i.isBuffer(l))throw new TypeError('"list" argument must be an Array of Buffers');l.copy(r,o),o+=l.length}return r},i.byteLength=b,i.prototype._isBuffer=!0,i.prototype.swap16=function(){var t=this.length;if(t%2!=0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(var e=0;e<t;e+=2)g(this,e,e+1);return this},i.prototype.swap32=function(){var t=this.length;if(t%4!=0)throw new RangeError("Buffer size must be a multiple of 32-bits");for(var e=0;e<t;e+=4)g(this,e,e+3),g(this,e+1,e+2);return this},i.prototype.swap64=function(){var t=this.length;if(t%8!=0)throw new RangeError("Buffer size must be a multiple of 64-bits");for(var e=0;e<t;e+=8)g(this,e,e+7),g(this,e+1,e+6),g(this,e+2,e+5),g(this,e+3,e+4);return this},i.prototype.toString=function(){var t=0|this.length;return 0===t?"":0===arguments.length?j(this,0,t):v.apply(this,arguments)},i.prototype.equals=function(t){if(!i.isBuffer(t))throw new TypeError("Argument must be a Buffer");return this===t||0===i.compare(this,t)},i.prototype.inspect=function(){var t="",n=e.INSPECT_MAX_BYTES;return this.length>0&&(t=this.toString("hex",0,n).match(/.{2}/g).join(" "),this.length>n&&(t+=" ... ")),"<Buffer "+t+">"},i.prototype.compare=function(t,e,n,r,o){if(!i.isBuffer(t))throw new TypeError("Argument must be a Buffer");if(void 0===e&&(e=0),void 0===n&&(n=t?t.length:0),void 0===r&&(r=0),void 0===o&&(o=this.length),e<0||n>t.length||r<0||o>this.length)throw new RangeError("out of range index");if(r>=o&&e>=n)return 0;if(r>=o)return-1;if(e>=n)return 1;if(e>>>=0,n>>>=0,r>>>=0,o>>>=0,this===t)return 0;for(var l=o-r,a=n-e,s=Math.min(l,a),u=this.slice(r,o),c=t.slice(e,n),f=0;f<s;++f)if(u[f]!==c[f]){l=u[f],a=c[f];break}return l<a?-1:a<l?1:0},i.prototype.includes=function(t,e,n){return-1!==this.indexOf(t,e,n)},i.prototype.indexOf=function(t,e,n){return m(this,t,e,n,!0)},i.prototype.lastIndexOf=function(t,e,n){return m(this,t,e,n,!1)},i.prototype.write=function(t,e,n,r){if(void 0===e)r="utf8",n=this.length,e=0;else if(void 0===n&&"string"==typeof e)r=e,n=this.length,e=0;else{if(!isFinite(e))throw new Error("Buffer.write(string, encoding, offset[, length]) is no longer supported");e|=0,isFinite(n)?(n|=0,void 0===r&&(r="utf8")):(r=n,n=void 0)}var o=this.length-e;if((void 0===n||n>o)&&(n=o),t.length>0&&(n<0||e<0)||e>this.length)throw new RangeError("Attempt to write outside buffer bounds");r||(r="utf8");for(var i=!1;;)switch(r){case"hex":return w(this,t,e,n);case"utf8":case"utf-8":return _(this,t,e,n);case"ascii":return k(this,t,e,n);case"latin1":case"binary":return O(this,t,e,n);case"base64":return x(this,t,e,n);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return E(this,t,e,n);default:if(i)throw new TypeError("Unknown encoding: "+r);r=(""+r).toLowerCase(),i=!0}},i.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var J=4096;i.prototype.slice=function(t,e){var n=this.length;t=~~t,e=void 0===e?n:~~e,t<0?(t+=n)<0&&(t=0):t>n&&(t=n),e<0?(e+=n)<0&&(e=0):e>n&&(e=n),e<t&&(e=t);var r;if(i.TYPED_ARRAY_SUPPORT)r=this.subarray(t,e),r.__proto__=i.prototype;else{var o=e-t;r=new i(o,void 0);for(var l=0;l<o;++l)r[l]=this[l+t]}return r},i.prototype.readUIntLE=function(t,e,n){t|=0,e|=0,n||L(t,e,this.length);for(var r=this[t],o=1,i=0;++i<e&&(o*=256);)r+=this[t+i]*o;return r},i.prototype.readUIntBE=function(t,e,n){t|=0,e|=0,n||L(t,e,this.length);for(var r=this[t+--e],o=1;e>0&&(o*=256);)r+=this[t+--e]*o;return r},i.prototype.readUInt8=function(t,e){return e||L(t,1,this.length),this[t]},i.prototype.readUInt16LE=function(t,e){return e||L(t,2,this.length),this[t]|this[t+1]<<8},i.prototype.readUInt16BE=function(t,e){return e||L(t,2,this.length),this[t]<<8|this[t+1]},i.prototype.readUInt32LE=function(t,e){return e||L(t,4,this.length),(this[t]|this[t+1]<<8|this[t+2]<<16)+16777216*this[t+3]},i.prototype.readUInt32BE=function(t,e){return e||L(t,4,this.length),16777216*this[t]+(this[t+1]<<16|this[t+2]<<8|this[t+3])},i.prototype.readIntLE=function(t,e,n){t|=0,e|=0,n||L(t,e,this.length);for(var r=this[t],o=1,i=0;++i<e&&(o*=256);)r+=this[t+i]*o;return o*=128,r>=o&&(r-=Math.pow(2,8*e)),r},i.prototype.readIntBE=function(t,e,n){t|=0,e|=0,n||L(t,e,this.length);for(var r=e,o=1,i=this[t+--r];r>0&&(o*=256);)i+=this[t+--r]*o;return o*=128,i>=o&&(i-=Math.pow(2,8*e)),i},i.prototype.readInt8=function(t,e){return e||L(t,1,this.length),128&this[t]?-1*(255-this[t]+1):this[t]},i.prototype.readInt16LE=function(t,e){e||L(t,2,this.length);var n=this[t]|this[t+1]<<8;return 32768&n?4294901760|n:n},i.prototype.readInt16BE=function(t,e){e||L(t,2,this.length);var n=this[t+1]|this[t]<<8;return 32768&n?4294901760|n:n},i.prototype.readInt32LE=function(t,e){return e||L(t,4,this.length),this[t]|this[t+1]<<8|this[t+2]<<16|this[t+3]<<24},i.prototype.readInt32BE=function(t,e){return e||L(t,4,this.length),this[t]<<24|this[t+1]<<16|this[t+2]<<8|this[t+3]},i.prototype.readFloatLE=function(t,e){return e||L(t,4,this.length),X.read(this,t,!0,23,4)},i.prototype.readFloatBE=function(t,e){return e||L(t,4,this.length),X.read(this,t,!1,23,4)},i.prototype.readDoubleLE=function(t,e){return e||L(t,8,this.length),X.read(this,t,!0,52,8)},i.prototype.readDoubleBE=function(t,e){return e||L(t,8,this.length),X.read(this,t,!1,52,8)},i.prototype.writeUIntLE=function(t,e,n,r){if(t=+t,e|=0,n|=0,!r){R(this,t,e,n,Math.pow(2,8*n)-1,0)}var o=1,i=0;for(this[e]=255&t;++i<n&&(o*=256);)this[e+i]=t/o&255;return e+n},i.prototype.writeUIntBE=function(t,e,n,r){if(t=+t,e|=0,n|=0,!r){R(this,t,e,n,Math.pow(2,8*n)-1,0)}var o=n-1,i=1;for(this[e+o]=255&t;--o>=0&&(i*=256);)this[e+o]=t/i&255;return e+n},i.prototype.writeUInt8=function(t,e,n){return t=+t,e|=0,n||R(this,t,e,1,255,0),i.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),this[e]=255&t,e+1},i.prototype.writeUInt16LE=function(t,e,n){return t=+t,e|=0,n||R(this,t,e,2,65535,0),i.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8):M(this,t,e,!0),e+2},i.prototype.writeUInt16BE=function(t,e,n){return t=+t,e|=0,n||R(this,t,e,2,65535,0),i.TYPED_ARRAY_SUPPORT?(this[e]=t>>>8,this[e+1]=255&t):M(this,t,e,!1),e+2},i.prototype.writeUInt32LE=function(t,e,n){return t=+t,e|=0,n||R(this,t,e,4,4294967295,0),i.TYPED_ARRAY_SUPPORT?(this[e+3]=t>>>24,this[e+2]=t>>>16,this[e+1]=t>>>8,this[e]=255&t):B(this,t,e,!0),e+4},i.prototype.writeUInt32BE=function(t,e,n){return t=+t,e|=0,n||R(this,t,e,4,4294967295,0),i.TYPED_ARRAY_SUPPORT?(this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t):B(this,t,e,!1),e+4},i.prototype.writeIntLE=function(t,e,n,r){if(t=+t,e|=0,!r){var o=Math.pow(2,8*n-1);R(this,t,e,n,o-1,-o)}var i=0,l=1,a=0;for(this[e]=255&t;++i<n&&(l*=256);)t<0&&0===a&&0!==this[e+i-1]&&(a=1),this[e+i]=(t/l>>0)-a&255;return e+n},i.prototype.writeIntBE=function(t,e,n,r){if(t=+t,e|=0,!r){var o=Math.pow(2,8*n-1);R(this,t,e,n,o-1,-o)}var i=n-1,l=1,a=0;for(this[e+i]=255&t;--i>=0&&(l*=256);)t<0&&0===a&&0!==this[e+i+1]&&(a=1),this[e+i]=(t/l>>0)-a&255;return e+n},i.prototype.writeInt8=function(t,e,n){return t=+t,e|=0,n||R(this,t,e,1,127,-128),i.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),t<0&&(t=255+t+1),this[e]=255&t,e+1},i.prototype.writeInt16LE=function(t,e,n){return t=+t,e|=0,n||R(this,t,e,2,32767,-32768),i.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8):M(this,t,e,!0),e+2},i.prototype.writeInt16BE=function(t,e,n){return t=+t,e|=0,n||R(this,t,e,2,32767,-32768),i.TYPED_ARRAY_SUPPORT?(this[e]=t>>>8,this[e+1]=255&t):M(this,t,e,!1),e+2},i.prototype.writeInt32LE=function(t,e,n){return t=+t,e|=0,n||R(this,t,e,4,2147483647,-2147483648),i.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8,this[e+2]=t>>>16,this[e+3]=t>>>24):B(this,t,e,!0),e+4},i.prototype.writeInt32BE=function(t,e,n){return t=+t,e|=0,n||R(this,t,e,4,2147483647,-2147483648),t<0&&(t=4294967295+t+1),i.TYPED_ARRAY_SUPPORT?(this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t):B(this,t,e,!1),e+4},i.prototype.writeFloatLE=function(t,e,n){return U(this,t,e,!0,n)},i.prototype.writeFloatBE=function(t,e,n){return U(this,t,e,!1,n)},i.prototype.writeDoubleLE=function(t,e,n){return D(this,t,e,!0,n)},i.prototype.writeDoubleBE=function(t,e,n){return D(this,t,e,!1,n)},i.prototype.copy=function(t,e,n,r){if(n||(n=0),r||0===r||(r=this.length),e>=t.length&&(e=t.length),e||(e=0),r>0&&r<n&&(r=n),r===n)return 0;if(0===t.length||0===this.length)return 0;if(e<0)throw new RangeError("targetStart out of bounds");if(n<0||n>=this.length)throw new RangeError("sourceStart out of bounds");if(r<0)throw new RangeError("sourceEnd out of bounds");r>this.length&&(r=this.length),t.length-e<r-n&&(r=t.length-e+n);var o,l=r-n;if(this===t&&n<e&&e<r)for(o=l-1;o>=0;--o)t[o+e]=this[o+n];else if(l<1e3||!i.TYPED_ARRAY_SUPPORT)for(o=0;o<l;++o)t[o+e]=this[o+n];else Uint8Array.prototype.set.call(t,this.subarray(n,n+l),e);return l},i.prototype.fill=function(t,e,n,r){if("string"==typeof t){if("string"==typeof e?(r=e,e=0,n=this.length):"string"==typeof n&&(r=n,n=this.length),1===t.length){var o=t.charCodeAt(0);o<256&&(t=o)}if(void 0!==r&&"string"!=typeof r)throw new TypeError("encoding must be a string");if("string"==typeof r&&!i.isEncoding(r))throw new TypeError("Unknown encoding: "+r)}else"number"==typeof t&&(t&=255);if(e<0||this.length<e||this.length<n)throw new RangeError("Out of range index");if(n<=e)return this;e>>>=0,n=void 0===n?this.length:n>>>0,t||(t=0);var l;if("number"==typeof t)for(l=e;l<n;++l)this[l]=t;else{var a=i.isBuffer(t)?t:Y(new i(t,r).toString()),s=a.length;for(l=0;l<n-e;++l)this[l+e]=a[l%s]}return this};var tt=/[^+\/0-9A-Za-z-_]/g}).call(e,n(19))},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(12),o=n.n(r);n.d(e,"VueEditor",function(){return o.a});var i={VueEditor:o.a,install:function(t){t.component(o.a.name,o.a)}};e.default=i},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(11),o=n.n(r),i=n(15),l=(n.n(i),n(16)),a=(n.n(l),[["bold","italic","underline","strike"],["blockquote","code-block","image"],[{list:"ordered"},{list:"bullet"}],[{indent:"-1"},{indent:"+1"}],[{header:[1,2,3,4,5,6,!1]}],[{color:[]},{background:[]}],[{font:[]}],[{align:[]}],["clean"]]);e.default={name:"vue-editor",props:{value:String,id:{type:String,default:"quill-container"},placeholder:String,disabled:Boolean,editorToolbar:Array},data:function(){return{quill:null,editor:null,toolbar:this.editorToolbar?this.editorToolbar:a}},mounted:function(){this.initializeVue2Editor(),this.handleUpdatedEditor()},watch:{value:function(t){t==this.editor.innerHTML||this.quill.hasFocus()||(this.editor.innerHTML=t)},disabled:function(t){this.quill.enable(!t)}},methods:{initializeVue2Editor:function(){this.setQuillElement(),this.setEditorElement(),this.checkForInitialContent()},setQuillElement:function(){this.quill=new o.a(this.$refs.quillContainer,{modules:{toolbar:this.toolbar},placeholder:this.placeholder?this.placeholder:"",theme:"snow",readOnly:!!this.disabled&&this.disabled})},setEditorElement:function(){this.editor=document.querySelector("#"+this.id+" .ql-editor")},checkForInitialContent:function(){this.editor.innerHTML=this.value||""},handleUpdatedEditor:function(){var t=this;this.quill.on("text-change",function(){t.$emit("input",t.editor.innerHTML)})}}}},function(t,e,n){"use strict";function r(t){var e=t.length;if(e%4>0)throw new Error("Invalid string. Length must be a multiple of 4");return"="===t[e-2]?2:"="===t[e-1]?1:0}function o(t){return 3*t.length/4-r(t)}function i(t){var e,n,o,i,l,a,s=t.length;l=r(t),a=new f(3*s/4-l),o=l>0?s-4:s;var u=0;for(e=0,n=0;e<o;e+=4,n+=3)i=c[t.charCodeAt(e)]<<18|c[t.charCodeAt(e+1)]<<12|c[t.charCodeAt(e+2)]<<6|c[t.charCodeAt(e+3)],a[u++]=i>>16&255,a[u++]=i>>8&255,a[u++]=255&i;return 2===l?(i=c[t.charCodeAt(e)]<<2|c[t.charCodeAt(e+1)]>>4,a[u++]=255&i):1===l&&(i=c[t.charCodeAt(e)]<<10|c[t.charCodeAt(e+1)]<<4|c[t.charCodeAt(e+2)]>>2,a[u++]=i>>8&255,a[u++]=255&i),a}function l(t){return u[t>>18&63]+u[t>>12&63]+u[t>>6&63]+u[63&t]}function a(t,e,n){for(var r,o=[],i=e;i<n;i+=3)r=(t[i]<<16)+(t[i+1]<<8)+t[i+2],o.push(l(r));return o.join("")}function s(t){for(var e,n=t.length,r=n%3,o="",i=[],l=0,s=n-r;l<s;l+=16383)i.push(a(t,l,l+16383>s?s:l+16383));return 1===r?(e=t[n-1],o+=u[e>>2],o+=u[e<<4&63],o+="=="):2===r&&(e=(t[n-2]<<8)+t[n-1],o+=u[e>>10],o+=u[e>>4&63],o+=u[e<<2&63],o+="="),i.push(o),i.join("")}e.byteLength=o,e.toByteArray=i,e.fromByteArray=s;for(var u=[],c=[],f="undefined"!=typeof Uint8Array?Uint8Array:Array,d="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",p=0,h=d.length;p<h;++p)u[p]=d[p],c[d.charCodeAt(p)]=p;c["-".charCodeAt(0)]=62,c["_".charCodeAt(0)]=63},function(t,e,n){e=t.exports=n(0)(void 0),e.push([t.i,'/*!\n * Quill Editor v1.2.3\n * https://quilljs.com/\n * Copyright (c) 2014, Jason Chen\n * Copyright (c) 2013, salesforce.com\n */.ql-container{box-sizing:border-box;font-family:Helvetica,Arial,sans-serif;font-size:13px;height:100%;margin:0;position:relative}.ql-container.ql-disabled .ql-tooltip{visibility:hidden}.ql-container.ql-disabled .ql-editor ul[data-checked]>li:before{pointer-events:none}.ql-clipboard{left:-100000px;height:1px;overflow-y:hidden;position:absolute;top:50%}.ql-clipboard p{margin:0;padding:0}.ql-editor{box-sizing:border-box;cursor:text;line-height:1.42;height:100%;outline:none;overflow-y:auto;padding:12px 15px;tab-size:4;-moz-tab-size:4;text-align:left;white-space:pre-wrap;word-wrap:break-word}.ql-editor blockquote,.ql-editor h1,.ql-editor h2,.ql-editor h3,.ql-editor h4,.ql-editor h5,.ql-editor h6,.ql-editor ol,.ql-editor p,.ql-editor pre,.ql-editor ul{margin:0;padding:0;counter-reset:list-1 list-2 list-3 list-4 list-5 list-6 list-7 list-8 list-9}.ql-editor ol,.ql-editor ul{padding-left:1.5em}.ql-editor ol>li,.ql-editor ul>li{list-style-type:none}.ql-editor ul>li:before{content:"\\2022"}.ql-editor ul[data-checked=false],.ql-editor ul[data-checked=true]{pointer-events:none}.ql-editor ul[data-checked=false]>li *,.ql-editor ul[data-checked=true]>li *{pointer-events:all}.ql-editor ul[data-checked=false]>li:before,.ql-editor ul[data-checked=true]>li:before{color:#777;cursor:pointer;pointer-events:all}.ql-editor ul[data-checked=true]>li:before{content:"\\2611"}.ql-editor ul[data-checked=false]>li:before{content:"\\2610"}.ql-editor li:before{display:inline-block;margin-right:.3em;text-align:right;white-space:nowrap;width:1.2em}.ql-editor li:not(.ql-direction-rtl):before{margin-left:-1.5em}.ql-editor ol li,.ql-editor ul li{padding-left:1.5em}.ql-editor ol li{counter-reset:list-1 list-2 list-3 list-4 list-5 list-6 list-7 list-8 list-9;counter-increment:list-num}.ql-editor ol li:before{content:counter(list-num,decimal) ". "}.ql-editor ol li.ql-indent-1{counter-increment:list-1}.ql-editor ol li.ql-indent-1:before{content:counter(list-1,lower-alpha) ". "}.ql-editor ol li.ql-indent-1{counter-reset:list-2 list-3 list-4 list-5 list-6 list-7 list-8 list-9}.ql-editor ol li.ql-indent-2{counter-increment:list-2}.ql-editor ol li.ql-indent-2:before{content:counter(list-2,lower-roman) ". "}.ql-editor ol li.ql-indent-2{counter-reset:list-3 list-4 list-5 list-6 list-7 list-8 list-9}.ql-editor ol li.ql-indent-3{counter-increment:list-3}.ql-editor ol li.ql-indent-3:before{content:counter(list-3,decimal) ". "}.ql-editor ol li.ql-indent-3{counter-reset:list-4 list-5 list-6 list-7 list-8 list-9}.ql-editor ol li.ql-indent-4{counter-increment:list-4}.ql-editor ol li.ql-indent-4:before{content:counter(list-4,lower-alpha) ". "}.ql-editor ol li.ql-indent-4{counter-reset:list-5 list-6 list-7 list-8 list-9}.ql-editor ol li.ql-indent-5{counter-increment:list-5}.ql-editor ol li.ql-indent-5:before{content:counter(list-5,lower-roman) ". "}.ql-editor ol li.ql-indent-5{counter-reset:list-6 list-7 list-8 list-9}.ql-editor ol li.ql-indent-6{counter-increment:list-6}.ql-editor ol li.ql-indent-6:before{content:counter(list-6,decimal) ". "}.ql-editor ol li.ql-indent-6{counter-reset:list-7 list-8 list-9}.ql-editor ol li.ql-indent-7{counter-increment:list-7}.ql-editor ol li.ql-indent-7:before{content:counter(list-7,lower-alpha) ". "}.ql-editor ol li.ql-indent-7{counter-reset:list-8 list-9}.ql-editor ol li.ql-indent-8{counter-increment:list-8}.ql-editor ol li.ql-indent-8:before{content:counter(list-8,lower-roman) ". "}.ql-editor ol li.ql-indent-8{counter-reset:list-9}.ql-editor ol li.ql-indent-9{counter-increment:list-9}.ql-editor ol li.ql-indent-9:before{content:counter(list-9,decimal) ". "}.ql-editor .ql-indent-1:not(.ql-direction-rtl){padding-left:3em}.ql-editor li.ql-indent-1:not(.ql-direction-rtl){padding-left:4.5em}.ql-editor .ql-indent-1.ql-direction-rtl.ql-align-right{padding-right:3em}.ql-editor li.ql-indent-1.ql-direction-rtl.ql-align-right{padding-right:4.5em}.ql-editor .ql-indent-2:not(.ql-direction-rtl){padding-left:6em}.ql-editor li.ql-indent-2:not(.ql-direction-rtl){padding-left:7.5em}.ql-editor .ql-indent-2.ql-direction-rtl.ql-align-right{padding-right:6em}.ql-editor li.ql-indent-2.ql-direction-rtl.ql-align-right{padding-right:7.5em}.ql-editor .ql-indent-3:not(.ql-direction-rtl){padding-left:9em}.ql-editor li.ql-indent-3:not(.ql-direction-rtl){padding-left:10.5em}.ql-editor .ql-indent-3.ql-direction-rtl.ql-align-right{padding-right:9em}.ql-editor li.ql-indent-3.ql-direction-rtl.ql-align-right{padding-right:10.5em}.ql-editor .ql-indent-4:not(.ql-direction-rtl){padding-left:12em}.ql-editor li.ql-indent-4:not(.ql-direction-rtl){padding-left:13.5em}.ql-editor .ql-indent-4.ql-direction-rtl.ql-align-right{padding-right:12em}.ql-editor li.ql-indent-4.ql-direction-rtl.ql-align-right{padding-right:13.5em}.ql-editor .ql-indent-5:not(.ql-direction-rtl){padding-left:15em}.ql-editor li.ql-indent-5:not(.ql-direction-rtl){padding-left:16.5em}.ql-editor .ql-indent-5.ql-direction-rtl.ql-align-right{padding-right:15em}.ql-editor li.ql-indent-5.ql-direction-rtl.ql-align-right{padding-right:16.5em}.ql-editor .ql-indent-6:not(.ql-direction-rtl){padding-left:18em}.ql-editor li.ql-indent-6:not(.ql-direction-rtl){padding-left:19.5em}.ql-editor .ql-indent-6.ql-direction-rtl.ql-align-right{padding-right:18em}.ql-editor li.ql-indent-6.ql-direction-rtl.ql-align-right{padding-right:19.5em}.ql-editor .ql-indent-7:not(.ql-direction-rtl){padding-left:21em}.ql-editor li.ql-indent-7:not(.ql-direction-rtl){padding-left:22.5em}.ql-editor .ql-indent-7.ql-direction-rtl.ql-align-right{padding-right:21em}.ql-editor li.ql-indent-7.ql-direction-rtl.ql-align-right{padding-right:22.5em}.ql-editor .ql-indent-8:not(.ql-direction-rtl){padding-left:24em}.ql-editor li.ql-indent-8:not(.ql-direction-rtl){padding-left:25.5em}.ql-editor .ql-indent-8.ql-direction-rtl.ql-align-right{padding-right:24em}.ql-editor li.ql-indent-8.ql-direction-rtl.ql-align-right{padding-right:25.5em}.ql-editor .ql-indent-9:not(.ql-direction-rtl){padding-left:27em}.ql-editor li.ql-indent-9:not(.ql-direction-rtl){padding-left:28.5em}.ql-editor .ql-indent-9.ql-direction-rtl.ql-align-right{padding-right:27em}.ql-editor li.ql-indent-9.ql-direction-rtl.ql-align-right{padding-right:28.5em}.ql-editor .ql-video{display:block;max-width:100%}.ql-editor .ql-video.ql-align-center{margin:0 auto}.ql-editor .ql-video.ql-align-right{margin:0 0 0 auto}.ql-editor .ql-bg-black{background-color:#000}.ql-editor .ql-bg-red{background-color:#e60000}.ql-editor .ql-bg-orange{background-color:#f90}.ql-editor .ql-bg-yellow{background-color:#ff0}.ql-editor .ql-bg-green{background-color:#008a00}.ql-editor .ql-bg-blue{background-color:#06c}.ql-editor .ql-bg-purple{background-color:#93f}.ql-editor .ql-color-white{color:#fff}.ql-editor .ql-color-red{color:#e60000}.ql-editor .ql-color-orange{color:#f90}.ql-editor .ql-color-yellow{color:#ff0}.ql-editor .ql-color-green{color:#008a00}.ql-editor .ql-color-blue{color:#06c}.ql-editor .ql-color-purple{color:#93f}.ql-editor .ql-font-serif{font-family:Georgia,Times New Roman,serif}.ql-editor .ql-font-monospace{font-family:Monaco,Courier New,monospace}.ql-editor .ql-size-small{font-size:.75em}.ql-editor .ql-size-large{font-size:1.5em}.ql-editor .ql-size-huge{font-size:2.5em}.ql-editor .ql-direction-rtl{direction:rtl;text-align:inherit}.ql-editor .ql-align-center{text-align:center}.ql-editor .ql-align-justify{text-align:justify}.ql-editor .ql-align-right{text-align:right}.ql-editor.ql-blank:before{color:rgba(0,0,0,.6);content:attr(data-placeholder);font-style:italic;pointer-events:none;position:absolute}',""])},function(t,e,n){e=t.exports=n(0)(void 0),e.push([t.i,'/*!\n * Quill Editor v1.2.3\n * https://quilljs.com/\n * Copyright (c) 2014, Jason Chen\n * Copyright (c) 2013, salesforce.com\n */.ql-container{box-sizing:border-box;font-family:Helvetica,Arial,sans-serif;font-size:13px;height:100%;margin:0;position:relative}.ql-container.ql-disabled .ql-tooltip{visibility:hidden}.ql-container.ql-disabled .ql-editor ul[data-checked]>li:before{pointer-events:none}.ql-clipboard{left:-100000px;height:1px;overflow-y:hidden;position:absolute;top:50%}.ql-clipboard p{margin:0;padding:0}.ql-editor{box-sizing:border-box;cursor:text;line-height:1.42;height:100%;outline:none;overflow-y:auto;padding:12px 15px;tab-size:4;-moz-tab-size:4;text-align:left;white-space:pre-wrap;word-wrap:break-word}.ql-editor blockquote,.ql-editor h1,.ql-editor h2,.ql-editor h3,.ql-editor h4,.ql-editor h5,.ql-editor h6,.ql-editor ol,.ql-editor p,.ql-editor pre,.ql-editor ul{margin:0;padding:0;counter-reset:list-1 list-2 list-3 list-4 list-5 list-6 list-7 list-8 list-9}.ql-editor ol,.ql-editor ul{padding-left:1.5em}.ql-editor ol>li,.ql-editor ul>li{list-style-type:none}.ql-editor ul>li:before{content:"\\2022"}.ql-editor ul[data-checked=false],.ql-editor ul[data-checked=true]{pointer-events:none}.ql-editor ul[data-checked=false]>li *,.ql-editor ul[data-checked=true]>li *{pointer-events:all}.ql-editor ul[data-checked=false]>li:before,.ql-editor ul[data-checked=true]>li:before{color:#777;cursor:pointer;pointer-events:all}.ql-editor ul[data-checked=true]>li:before{content:"\\2611"}.ql-editor ul[data-checked=false]>li:before{content:"\\2610"}.ql-editor li:before{display:inline-block;margin-right:.3em;text-align:right;white-space:nowrap;width:1.2em}.ql-editor li:not(.ql-direction-rtl):before{margin-left:-1.5em}.ql-editor ol li,.ql-editor ul li{padding-left:1.5em}.ql-editor ol li{counter-reset:list-1 list-2 list-3 list-4 list-5 list-6 list-7 list-8 list-9;counter-increment:list-num}.ql-editor ol li:before{content:counter(list-num,decimal) ". "}.ql-editor ol li.ql-indent-1{counter-increment:list-1}.ql-editor ol li.ql-indent-1:before{content:counter(list-1,lower-alpha) ". "}.ql-editor ol li.ql-indent-1{counter-reset:list-2 list-3 list-4 list-5 list-6 list-7 list-8 list-9}.ql-editor ol li.ql-indent-2{counter-increment:list-2}.ql-editor ol li.ql-indent-2:before{content:counter(list-2,lower-roman) ". "}.ql-editor ol li.ql-indent-2{counter-reset:list-3 list-4 list-5 list-6 list-7 list-8 list-9}.ql-editor ol li.ql-indent-3{counter-increment:list-3}.ql-editor ol li.ql-indent-3:before{content:counter(list-3,decimal) ". "}.ql-editor ol li.ql-indent-3{counter-reset:list-4 list-5 list-6 list-7 list-8 list-9}.ql-editor ol li.ql-indent-4{counter-increment:list-4}.ql-editor ol li.ql-indent-4:before{content:counter(list-4,lower-alpha) ". "}.ql-editor ol li.ql-indent-4{counter-reset:list-5 list-6 list-7 list-8 list-9}.ql-editor ol li.ql-indent-5{counter-increment:list-5}.ql-editor ol li.ql-indent-5:before{content:counter(list-5,lower-roman) ". "}.ql-editor ol li.ql-indent-5{counter-reset:list-6 list-7 list-8 list-9}.ql-editor ol li.ql-indent-6{counter-increment:list-6}.ql-editor ol li.ql-indent-6:before{content:counter(list-6,decimal) ". "}.ql-editor ol li.ql-indent-6{counter-reset:list-7 list-8 list-9}.ql-editor ol li.ql-indent-7{counter-increment:list-7}.ql-editor ol li.ql-indent-7:before{content:counter(list-7,lower-alpha) ". "}.ql-editor ol li.ql-indent-7{counter-reset:list-8 list-9}.ql-editor ol li.ql-indent-8{counter-increment:list-8}.ql-editor ol li.ql-indent-8:before{content:counter(list-8,lower-roman) ". "}.ql-editor ol li.ql-indent-8{counter-reset:list-9}.ql-editor ol li.ql-indent-9{counter-increment:list-9}.ql-editor ol li.ql-indent-9:before{content:counter(list-9,decimal) ". "}.ql-editor .ql-indent-1:not(.ql-direction-rtl){padding-left:3em}.ql-editor li.ql-indent-1:not(.ql-direction-rtl){padding-left:4.5em}.ql-editor .ql-indent-1.ql-direction-rtl.ql-align-right{padding-right:3em}.ql-editor li.ql-indent-1.ql-direction-rtl.ql-align-right{padding-right:4.5em}.ql-editor .ql-indent-2:not(.ql-direction-rtl){padding-left:6em}.ql-editor li.ql-indent-2:not(.ql-direction-rtl){padding-left:7.5em}.ql-editor .ql-indent-2.ql-direction-rtl.ql-align-right{padding-right:6em}.ql-editor li.ql-indent-2.ql-direction-rtl.ql-align-right{padding-right:7.5em}.ql-editor .ql-indent-3:not(.ql-direction-rtl){padding-left:9em}.ql-editor li.ql-indent-3:not(.ql-direction-rtl){padding-left:10.5em}.ql-editor .ql-indent-3.ql-direction-rtl.ql-align-right{padding-right:9em}.ql-editor li.ql-indent-3.ql-direction-rtl.ql-align-right{padding-right:10.5em}.ql-editor .ql-indent-4:not(.ql-direction-rtl){padding-left:12em}.ql-editor li.ql-indent-4:not(.ql-direction-rtl){padding-left:13.5em}.ql-editor .ql-indent-4.ql-direction-rtl.ql-align-right{padding-right:12em}.ql-editor li.ql-indent-4.ql-direction-rtl.ql-align-right{padding-right:13.5em}.ql-editor .ql-indent-5:not(.ql-direction-rtl){padding-left:15em}.ql-editor li.ql-indent-5:not(.ql-direction-rtl){padding-left:16.5em}.ql-editor .ql-indent-5.ql-direction-rtl.ql-align-right{padding-right:15em}.ql-editor li.ql-indent-5.ql-direction-rtl.ql-align-right{padding-right:16.5em}.ql-editor .ql-indent-6:not(.ql-direction-rtl){padding-left:18em}.ql-editor li.ql-indent-6:not(.ql-direction-rtl){padding-left:19.5em}.ql-editor .ql-indent-6.ql-direction-rtl.ql-align-right{padding-right:18em}.ql-editor li.ql-indent-6.ql-direction-rtl.ql-align-right{padding-right:19.5em}.ql-editor .ql-indent-7:not(.ql-direction-rtl){padding-left:21em}.ql-editor li.ql-indent-7:not(.ql-direction-rtl){padding-left:22.5em}.ql-editor .ql-indent-7.ql-direction-rtl.ql-align-right{padding-right:21em}.ql-editor li.ql-indent-7.ql-direction-rtl.ql-align-right{padding-right:22.5em}.ql-editor .ql-indent-8:not(.ql-direction-rtl){padding-left:24em}.ql-editor li.ql-indent-8:not(.ql-direction-rtl){padding-left:25.5em}.ql-editor .ql-indent-8.ql-direction-rtl.ql-align-right{padding-right:24em}.ql-editor li.ql-indent-8.ql-direction-rtl.ql-align-right{padding-right:25.5em}.ql-editor .ql-indent-9:not(.ql-direction-rtl){padding-left:27em}.ql-editor li.ql-indent-9:not(.ql-direction-rtl){padding-left:28.5em}.ql-editor .ql-indent-9.ql-direction-rtl.ql-align-right{padding-right:27em}.ql-editor li.ql-indent-9.ql-direction-rtl.ql-align-right{padding-right:28.5em}.ql-editor .ql-video{display:block;max-width:100%}.ql-editor .ql-video.ql-align-center{margin:0 auto}.ql-editor .ql-video.ql-align-right{margin:0 0 0 auto}.ql-editor .ql-bg-black{background-color:#000}.ql-editor .ql-bg-red{background-color:#e60000}.ql-editor .ql-bg-orange{background-color:#f90}.ql-editor .ql-bg-yellow{background-color:#ff0}.ql-editor .ql-bg-green{background-color:#008a00}.ql-editor .ql-bg-blue{background-color:#06c}.ql-editor .ql-bg-purple{background-color:#93f}.ql-editor .ql-color-white{color:#fff}.ql-editor .ql-color-red{color:#e60000}.ql-editor .ql-color-orange{color:#f90}.ql-editor .ql-color-yellow{color:#ff0}.ql-editor .ql-color-green{color:#008a00}.ql-editor .ql-color-blue{color:#06c}.ql-editor .ql-color-purple{color:#93f}.ql-editor .ql-font-serif{font-family:Georgia,Times New Roman,serif}.ql-editor .ql-font-monospace{font-family:Monaco,Courier New,monospace}.ql-editor .ql-size-small{font-size:.75em}.ql-editor .ql-size-large{font-size:1.5em}.ql-editor .ql-size-huge{font-size:2.5em}.ql-editor .ql-direction-rtl{direction:rtl;text-align:inherit}.ql-editor .ql-align-center{text-align:center}.ql-editor .ql-align-justify{text-align:justify}.ql-editor .ql-align-right{text-align:right}.ql-editor.ql-blank:before{color:rgba(0,0,0,.6);content:attr(data-placeholder);font-style:italic;pointer-events:none;position:absolute}.ql-snow.ql-toolbar:after,.ql-snow .ql-toolbar:after{clear:both;content:"";display:table}.ql-snow.ql-toolbar button,.ql-snow .ql-toolbar button{background:none;border:none;cursor:pointer;display:inline-block;float:left;height:24px;padding:3px 5px;width:28px}.ql-snow.ql-toolbar button svg,.ql-snow .ql-toolbar button svg{float:left;height:100%}.ql-snow.ql-toolbar button:active:hover,.ql-snow .ql-toolbar button:active:hover{outline:none}.ql-snow.ql-toolbar input.ql-image[type=file],.ql-snow .ql-toolbar input.ql-image[type=file]{display:none}.ql-snow.ql-toolbar .ql-picker-item.ql-selected,.ql-snow .ql-toolbar .ql-picker-item.ql-selected,.ql-snow.ql-toolbar .ql-picker-item:hover,.ql-snow .ql-toolbar .ql-picker-item:hover,.ql-snow.ql-toolbar .ql-picker-label.ql-active,.ql-snow .ql-toolbar .ql-picker-label.ql-active,.ql-snow.ql-toolbar .ql-picker-label:hover,.ql-snow .ql-toolbar .ql-picker-label:hover,.ql-snow.ql-toolbar button.ql-active,.ql-snow .ql-toolbar button.ql-active,.ql-snow.ql-toolbar button:hover,.ql-snow .ql-toolbar button:hover{color:#06c}.ql-snow.ql-toolbar .ql-picker-item.ql-selected .ql-fill,.ql-snow .ql-toolbar .ql-picker-item.ql-selected .ql-fill,.ql-snow.ql-toolbar .ql-picker-item.ql-selected .ql-stroke.ql-fill,.ql-snow .ql-toolbar .ql-picker-item.ql-selected .ql-stroke.ql-fill,.ql-snow.ql-toolbar .ql-picker-item:hover .ql-fill,.ql-snow .ql-toolbar .ql-picker-item:hover .ql-fill,.ql-snow.ql-toolbar .ql-picker-item:hover .ql-stroke.ql-fill,.ql-snow .ql-toolbar .ql-picker-item:hover .ql-stroke.ql-fill,.ql-snow.ql-toolbar .ql-picker-label.ql-active .ql-fill,.ql-snow .ql-toolbar .ql-picker-label.ql-active .ql-fill,.ql-snow.ql-toolbar .ql-picker-label.ql-active .ql-stroke.ql-fill,.ql-snow .ql-toolbar .ql-picker-label.ql-active .ql-stroke.ql-fill,.ql-snow.ql-toolbar .ql-picker-label:hover .ql-fill,.ql-snow .ql-toolbar .ql-picker-label:hover .ql-fill,.ql-snow.ql-toolbar .ql-picker-label:hover .ql-stroke.ql-fill,.ql-snow .ql-toolbar .ql-picker-label:hover .ql-stroke.ql-fill,.ql-snow.ql-toolbar button.ql-active .ql-fill,.ql-snow .ql-toolbar button.ql-active .ql-fill,.ql-snow.ql-toolbar button.ql-active .ql-stroke.ql-fill,.ql-snow .ql-toolbar button.ql-active .ql-stroke.ql-fill,.ql-snow.ql-toolbar button:hover .ql-fill,.ql-snow .ql-toolbar button:hover .ql-fill,.ql-snow.ql-toolbar button:hover .ql-stroke.ql-fill,.ql-snow .ql-toolbar button:hover .ql-stroke.ql-fill{fill:#06c}.ql-snow.ql-toolbar .ql-picker-item.ql-selected .ql-stroke,.ql-snow .ql-toolbar .ql-picker-item.ql-selected .ql-stroke,.ql-snow.ql-toolbar .ql-picker-item.ql-selected .ql-stroke-miter,.ql-snow .ql-toolbar .ql-picker-item.ql-selected .ql-stroke-miter,.ql-snow.ql-toolbar .ql-picker-item:hover .ql-stroke,.ql-snow .ql-toolbar .ql-picker-item:hover .ql-stroke,.ql-snow.ql-toolbar .ql-picker-item:hover .ql-stroke-miter,.ql-snow .ql-toolbar .ql-picker-item:hover .ql-stroke-miter,.ql-snow.ql-toolbar .ql-picker-label.ql-active .ql-stroke,.ql-snow .ql-toolbar .ql-picker-label.ql-active .ql-stroke,.ql-snow.ql-toolbar .ql-picker-label.ql-active .ql-stroke-miter,.ql-snow .ql-toolbar .ql-picker-label.ql-active .ql-stroke-miter,.ql-snow.ql-toolbar .ql-picker-label:hover .ql-stroke,.ql-snow .ql-toolbar .ql-picker-label:hover .ql-stroke,.ql-snow.ql-toolbar .ql-picker-label:hover .ql-stroke-miter,.ql-snow .ql-toolbar .ql-picker-label:hover .ql-stroke-miter,.ql-snow.ql-toolbar button.ql-active .ql-stroke,.ql-snow .ql-toolbar button.ql-active .ql-stroke,.ql-snow.ql-toolbar button.ql-active .ql-stroke-miter,.ql-snow .ql-toolbar button.ql-active .ql-stroke-miter,.ql-snow.ql-toolbar button:hover .ql-stroke,.ql-snow .ql-toolbar button:hover .ql-stroke,.ql-snow.ql-toolbar button:hover .ql-stroke-miter,.ql-snow .ql-toolbar button:hover .ql-stroke-miter{stroke:#06c}.ql-snow,.ql-snow *{box-sizing:border-box}.ql-snow .ql-hidden{display:none}.ql-snow .ql-out-bottom,.ql-snow .ql-out-top{visibility:hidden}.ql-snow .ql-tooltip{position:absolute;transform:translateY(10px)}.ql-snow .ql-tooltip a{cursor:pointer;text-decoration:none}.ql-snow .ql-tooltip.ql-flip{transform:translateY(-10px)}.ql-snow .ql-formats{display:inline-block;vertical-align:middle}.ql-snow .ql-formats:after{clear:both;content:"";display:table}.ql-snow .ql-stroke{fill:none;stroke:#444;stroke-linecap:round;stroke-linejoin:round;stroke-width:2}.ql-snow .ql-stroke-miter{fill:none;stroke:#444;stroke-miterlimit:10;stroke-width:2}.ql-snow .ql-fill,.ql-snow .ql-stroke.ql-fill{fill:#444}.ql-snow .ql-empty{fill:none}.ql-snow .ql-even{fill-rule:evenodd}.ql-snow .ql-stroke.ql-thin,.ql-snow .ql-thin{stroke-width:1}.ql-snow .ql-transparent{opacity:.4}.ql-snow .ql-direction svg:last-child{display:none}.ql-snow .ql-direction.ql-active svg:last-child{display:inline}.ql-snow .ql-direction.ql-active svg:first-child{display:none}.ql-snow .ql-editor h1{font-size:2em}.ql-snow .ql-editor h2{font-size:1.5em}.ql-snow .ql-editor h3{font-size:1.17em}.ql-snow .ql-editor h4{font-size:1em}.ql-snow .ql-editor h5{font-size:.83em}.ql-snow .ql-editor h6{font-size:.67em}.ql-snow .ql-editor a{text-decoration:underline}.ql-snow .ql-editor blockquote{border-left:4px solid #ccc;margin-bottom:5px;margin-top:5px;padding-left:16px}.ql-snow .ql-editor code,.ql-snow .ql-editor pre{background-color:#f0f0f0;border-radius:3px}.ql-snow .ql-editor pre{white-space:pre-wrap;margin-bottom:5px;margin-top:5px;padding:5px 10px}.ql-snow .ql-editor code{font-size:85%;padding-bottom:2px;padding-top:2px}.ql-snow .ql-editor code:after,.ql-snow .ql-editor code:before{content:"\\A0";letter-spacing:-2px}.ql-snow .ql-editor pre.ql-syntax{background-color:#23241f;color:#f8f8f2;overflow:visible}.ql-snow .ql-editor img{max-width:100%}.ql-snow .ql-picker{color:#444;display:inline-block;float:left;font-size:14px;font-weight:500;height:24px;position:relative;vertical-align:middle}.ql-snow .ql-picker-label{cursor:pointer;display:inline-block;height:100%;padding-left:8px;padding-right:2px;position:relative;width:100%}.ql-snow .ql-picker-label:before{display:inline-block;line-height:22px}.ql-snow .ql-picker-options{background-color:#fff;display:none;min-width:100%;padding:4px 8px;position:absolute;white-space:nowrap}.ql-snow .ql-picker-options .ql-picker-item{cursor:pointer;display:block;padding-bottom:5px;padding-top:5px}.ql-snow .ql-picker.ql-expanded .ql-picker-label{color:#ccc;z-index:2}.ql-snow .ql-picker.ql-expanded .ql-picker-label .ql-fill{fill:#ccc}.ql-snow .ql-picker.ql-expanded .ql-picker-label .ql-stroke{stroke:#ccc}.ql-snow .ql-picker.ql-expanded .ql-picker-options{display:block;margin-top:-1px;top:100%;z-index:1}.ql-snow .ql-color-picker,.ql-snow .ql-icon-picker{width:28px}.ql-snow .ql-color-picker .ql-picker-label,.ql-snow .ql-icon-picker .ql-picker-label{padding:2px 4px}.ql-snow .ql-color-picker .ql-picker-label svg,.ql-snow .ql-icon-picker .ql-picker-label svg{right:4px}.ql-snow .ql-icon-picker .ql-picker-options{padding:4px 0}.ql-snow .ql-icon-picker .ql-picker-item{height:24px;width:24px;padding:2px 4px}.ql-snow .ql-color-picker .ql-picker-options{padding:3px 5px;width:152px}.ql-snow .ql-color-picker .ql-picker-item{border:1px solid transparent;float:left;height:16px;margin:2px;padding:0;width:16px}.ql-snow .ql-picker:not(.ql-color-picker):not(.ql-icon-picker) svg{position:absolute;margin-top:-9px;right:0;top:50%;width:18px}.ql-snow .ql-picker.ql-font .ql-picker-item[data-label]:not([data-label=""]):before,.ql-snow .ql-picker.ql-font .ql-picker-label[data-label]:not([data-label=""]):before,.ql-snow .ql-picker.ql-header .ql-picker-item[data-label]:not([data-label=""]):before,.ql-snow .ql-picker.ql-header .ql-picker-label[data-label]:not([data-label=""]):before,.ql-snow .ql-picker.ql-size .ql-picker-item[data-label]:not([data-label=""]):before,.ql-snow .ql-picker.ql-size .ql-picker-label[data-label]:not([data-label=""]):before{content:attr(data-label)}.ql-snow .ql-picker.ql-header{width:98px}.ql-snow .ql-picker.ql-header .ql-picker-item:before,.ql-snow .ql-picker.ql-header .ql-picker-label:before{content:"Normal"}.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="1"]:before,.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="1"]:before{content:"Heading 1"}.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="2"]:before,.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="2"]:before{content:"Heading 2"}.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="3"]:before,.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="3"]:before{content:"Heading 3"}.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="4"]:before,.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="4"]:before{content:"Heading 4"}.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="5"]:before,.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="5"]:before{content:"Heading 5"}.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="6"]:before,.ql-snow .ql-picker.ql-header .ql-picker-label[data-value="6"]:before{content:"Heading 6"}.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="1"]:before{font-size:2em}.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="2"]:before{font-size:1.5em}.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="3"]:before{font-size:1.17em}.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="4"]:before{font-size:1em}.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="5"]:before{font-size:.83em}.ql-snow .ql-picker.ql-header .ql-picker-item[data-value="6"]:before{font-size:.67em}.ql-snow .ql-picker.ql-font{width:108px}.ql-snow .ql-picker.ql-font .ql-picker-item:before,.ql-snow .ql-picker.ql-font .ql-picker-label:before{content:"Sans Serif"}.ql-snow .ql-picker.ql-font .ql-picker-item[data-value=serif]:before,.ql-snow .ql-picker.ql-font .ql-picker-label[data-value=serif]:before{content:"Serif"}.ql-snow .ql-picker.ql-font .ql-picker-item[data-value=monospace]:before,.ql-snow .ql-picker.ql-font .ql-picker-label[data-value=monospace]:before{content:"Monospace"}.ql-snow .ql-picker.ql-font .ql-picker-item[data-value=serif]:before{font-family:Georgia,Times New Roman,serif}.ql-snow .ql-picker.ql-font .ql-picker-item[data-value=monospace]:before{font-family:Monaco,Courier New,monospace}.ql-snow .ql-picker.ql-size{width:98px}.ql-snow .ql-picker.ql-size .ql-picker-item:before,.ql-snow .ql-picker.ql-size .ql-picker-label:before{content:"Normal"}.ql-snow .ql-picker.ql-size .ql-picker-item[data-value=small]:before,.ql-snow .ql-picker.ql-size .ql-picker-label[data-value=small]:before{content:"Small"}.ql-snow .ql-picker.ql-size .ql-picker-item[data-value=large]:before,.ql-snow .ql-picker.ql-size .ql-picker-label[data-value=large]:before{content:"Large"}.ql-snow .ql-picker.ql-size .ql-picker-item[data-value=huge]:before,.ql-snow .ql-picker.ql-size .ql-picker-label[data-value=huge]:before{content:"Huge"}.ql-snow .ql-picker.ql-size .ql-picker-item[data-value=small]:before{font-size:10px}.ql-snow .ql-picker.ql-size .ql-picker-item[data-value=large]:before{font-size:18px}.ql-snow .ql-picker.ql-size .ql-picker-item[data-value=huge]:before{font-size:32px}.ql-snow .ql-color-picker.ql-background .ql-picker-item{background-color:#fff}.ql-snow .ql-color-picker.ql-color .ql-picker-item{background-color:#000}.ql-toolbar.ql-snow{border:1px solid #ccc;box-sizing:border-box;font-family:Helvetica Neue,Helvetica,Arial,sans-serif;padding:8px}.ql-toolbar.ql-snow .ql-formats{margin-right:15px}.ql-toolbar.ql-snow .ql-picker-label{border:1px solid transparent}.ql-toolbar.ql-snow .ql-picker-options{border:1px solid transparent;box-shadow:0 2px 8px rgba(0,0,0,.2)}.ql-toolbar.ql-snow .ql-picker.ql-expanded .ql-picker-label,.ql-toolbar.ql-snow .ql-picker.ql-expanded .ql-picker-options{border-color:#ccc}.ql-toolbar.ql-snow .ql-color-picker .ql-picker-item.ql-selected,.ql-toolbar.ql-snow .ql-color-picker .ql-picker-item:hover{border-color:#000}.ql-toolbar.ql-snow+.ql-container.ql-snow{border-top:0}.ql-snow .ql-tooltip{background-color:#fff;border:1px solid #ccc;box-shadow:0 0 5px #ddd;color:#444;padding:5px 12px;white-space:nowrap}.ql-snow .ql-tooltip:before{content:"Visit URL:";line-height:26px;margin-right:8px}.ql-snow .ql-tooltip input[type=text]{display:none;border:1px solid #ccc;font-size:13px;height:26px;margin:0;padding:3px 5px;width:170px}.ql-snow .ql-tooltip a.ql-preview{display:inline-block;max-width:200px;overflow-x:hidden;text-overflow:ellipsis;vertical-align:top}.ql-snow .ql-tooltip a.ql-action:after{border-right:1px solid #ccc;content:"Edit";margin-left:16px;padding-right:8px}.ql-snow .ql-tooltip a.ql-remove:before{content:"Remove";margin-left:8px}.ql-snow .ql-tooltip a{line-height:26px}.ql-snow .ql-tooltip.ql-editing a.ql-preview,.ql-snow .ql-tooltip.ql-editing a.ql-remove{display:none}.ql-snow .ql-tooltip.ql-editing input[type=text]{display:inline-block}.ql-snow .ql-tooltip.ql-editing a.ql-action:after{border-right:0;content:"Save";padding-right:0}.ql-snow .ql-tooltip[data-mode=link]:before{content:"Enter link:"}.ql-snow .ql-tooltip[data-mode=formula]:before{content:"Enter formula:"}.ql-snow .ql-tooltip[data-mode=video]:before{content:"Enter video:"}.ql-snow a{color:#06c}.ql-container.ql-snow{border:1px solid #ccc}',""])},function(t,e,n){e=t.exports=n(0)(void 0),e.push([t.i,"#quill-container{height:400px}",""])},function(t,e){e.read=function(t,e,n,r,o){var i,l,a=8*o-r-1,s=(1<<a)-1,u=s>>1,c=-7,f=n?o-1:0,d=n?-1:1,p=t[e+f];for(f+=d,i=p&(1<<-c)-1,p>>=-c,c+=a;c>0;i=256*i+t[e+f],f+=d,c-=8);for(l=i&(1<<-c)-1,i>>=-c,c+=r;c>0;l=256*l+t[e+f],f+=d,c-=8);if(0===i)i=1-u;else{if(i===s)return l?NaN:1/0*(p?-1:1);l+=Math.pow(2,r),i-=u}return(p?-1:1)*l*Math.pow(2,i-r)},e.write=function(t,e,n,r,o,i){var l,a,s,u=8*i-o-1,c=(1<<u)-1,f=c>>1,d=23===o?Math.pow(2,-24)-Math.pow(2,-77):0,p=r?0:i-1,h=r?1:-1,y=e<0||0===e&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(a=isNaN(e)?1:0,l=c):(l=Math.floor(Math.log(e)/Math.LN2),e*(s=Math.pow(2,-l))<1&&(l--,s*=2),e+=l+f>=1?d/s:d*Math.pow(2,1-f),e*s>=2&&(l++,s/=2),l+f>=c?(a=0,l=c):l+f>=1?(a=(e*s-1)*Math.pow(2,o),l+=f):(a=e*Math.pow(2,f-1)*Math.pow(2,o),l=0));o>=8;t[n+p]=255&a,p+=h,a/=256,o-=8);for(l=l<<o|a,u+=o;u>0;t[n+p]=255&l,p+=h,l/=256,u-=8);t[n+p-h]|=128*y}},function(t,e){var n={}.toString;t.exports=Array.isArray||function(t){return"[object Array]"==n.call(t)}},function(t,e,n){(function(e){(function(e,n){t.exports=n()})(0,function(){return function(t){function e(r){if(n[r])return n[r].exports;var o=n[r]={i:r,l:!1,exports:{}};return t[r].call(o.exports,o,o.exports,e),o.l=!0,o.exports}var n={};return e.m=t,e.c=n,e.i=function(t){return t},e.d=function(t,n,r){e.o(t,n)||Object.defineProperty(t,n,{configurable:!1,enumerable:!0,get:r})},e.n=function(t){var n=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(n,"a",n),n},e.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},e.p="",e(e.s=136)}([function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(21),o=n(22),i=n(23),l=n(59),a=n(58),s=n(56),u=n(57),c=n(60),f=n(13),d=n(31),p=n(33),h=n(32),y=n(1),b={Scope:y.Scope,create:y.create,find:y.find,query:y.query,register:y.register,Container:r.default,Format:o.default,Leaf:i.default,Embed:u.default,Scroll:l.default,Block:s.default,Inline:a.default,Text:c.default,Attributor:{Attribute:f.default,Class:d.default,Style:p.default,Store:h.default}};e.default=b},function(t,e,n){"use strict";function r(t,e){var n=i(t);if(null==n)throw new s("Unable to create "+t+" blot");var r=n;return new r(t instanceof Node?t:r.create(e),e)}function o(t,n){return void 0===n&&(n=!1),null==t?null:null!=t[e.DATA_KEY]?t[e.DATA_KEY].blot:n?o(t.parentNode,n):null}function i(t,e){void 0===e&&(e=p.ANY);var n;if("string"==typeof t)n=d[t]||u[t];else if(t instanceof Text)n=d.text;else if("number"==typeof t)t&p.LEVEL&p.BLOCK?n=d.block:t&p.LEVEL&p.INLINE&&(n=d.inline);else if(t instanceof HTMLElement){var r=(t.getAttribute("class")||"").split(/\s+/);for(var o in r)if(n=c[r[o]])break;n=n||f[t.tagName]}return null==n?null:e&p.LEVEL&n.scope&&e&p.TYPE&n.scope?n:null}function l(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];if(t.length>1)return t.map(function(t){return l(t)});var n=t[0];if("string"!=typeof n.blotName&&"string"!=typeof n.attrName)throw new s("Invalid definition");if("abstract"===n.blotName)throw new s("Cannot register abstract class");if(d[n.blotName||n.attrName]=n,"string"==typeof n.keyName)u[n.keyName]=n;else if(null!=n.className&&(c[n.className]=n),null!=n.tagName){Array.isArray(n.tagName)?n.tagName=n.tagName.map(function(t){return t.toUpperCase()}):n.tagName=n.tagName.toUpperCase();var r=Array.isArray(n.tagName)?n.tagName:[n.tagName];r.forEach(function(t){null!=f[t]&&null!=n.className||(f[t]=n)})}return n}var a=this&&this.__extends||function(){var t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])};return function(e,n){function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}();Object.defineProperty(e,"__esModule",{value:!0});var s=function(t){function e(e){var n=this;return e="[Parchment] "+e,n=t.call(this,e)||this,n.message=e,n.name=n.constructor.name,n}return a(e,t),e}(Error);e.ParchmentError=s;var u={},c={},f={},d={};e.DATA_KEY="__blot";var p;(function(t){t[t.TYPE=3]="TYPE",t[t.LEVEL=12]="LEVEL",t[t.ATTRIBUTE=13]="ATTRIBUTE",t[t.BLOT=14]="BLOT",t[t.INLINE=7]="INLINE",t[t.BLOCK=11]="BLOCK",t[t.BLOCK_BLOT=10]="BLOCK_BLOT",t[t.INLINE_BLOT=6]="INLINE_BLOT",t[t.BLOCK_ATTRIBUTE=9]="BLOCK_ATTRIBUTE",t[t.INLINE_ATTRIBUTE=5]="INLINE_ATTRIBUTE",t[t.ANY=15]="ANY"})(p=e.Scope||(e.Scope={})),e.create=r,e.find=o,e.query=i,e.register=l},function(t,e,n){var r=n(54),o=n(11),i=n(3),l=n(20),a=String.fromCharCode(0),s=function(t){Array.isArray(t)?this.ops=t:null!=t&&Array.isArray(t.ops)?this.ops=t.ops:this.ops=[]};s.prototype.insert=function(t,e){var n={};return 0===t.length?this:(n.insert=t,null!=e&&"object"==typeof e&&Object.keys(e).length>0&&(n.attributes=e),this.push(n))},s.prototype.delete=function(t){return t<=0?this:this.push({delete:t})},s.prototype.retain=function(t,e){if(t<=0)return this;var n={retain:t};return null!=e&&"object"==typeof e&&Object.keys(e).length>0&&(n.attributes=e),this.push(n)},s.prototype.push=function(t){var e=this.ops.length,n=this.ops[e-1];if(t=i(!0,{},t),"object"==typeof n){if("number"==typeof t.delete&&"number"==typeof n.delete)return this.ops[e-1]={delete:n.delete+t.delete},this;if("number"==typeof n.delete&&null!=t.insert&&(e-=1,"object"!=typeof(n=this.ops[e-1])))return this.ops.unshift(t),this;if(o(t.attributes,n.attributes)){if("string"==typeof t.insert&&"string"==typeof n.insert)return this.ops[e-1]={insert:n.insert+t.insert},"object"==typeof t.attributes&&(this.ops[e-1].attributes=t.attributes),this;if("number"==typeof t.retain&&"number"==typeof n.retain)return this.ops[e-1]={retain:n.retain+t.retain},"object"==typeof t.attributes&&(this.ops[e-1].attributes=t.attributes),this}}return e===this.ops.length?this.ops.push(t):this.ops.splice(e,0,t),this},s.prototype.filter=function(t){return this.ops.filter(t)},s.prototype.forEach=function(t){this.ops.forEach(t)},s.prototype.map=function(t){return this.ops.map(t)},s.prototype.partition=function(t){var e=[],n=[];return this.forEach(function(r){(t(r)?e:n).push(r)}),[e,n]},s.prototype.reduce=function(t,e){return this.ops.reduce(t,e)},s.prototype.chop=function(){var t=this.ops[this.ops.length-1];return t&&t.retain&&!t.attributes&&this.ops.pop(),this},s.prototype.length=function(){return this.reduce(function(t,e){return t+l.length(e)},0)},s.prototype.slice=function(t,e){t=t||0,"number"!=typeof e&&(e=1/0);for(var n=[],r=l.iterator(this.ops),o=0;o<e&&r.hasNext();){var i;o<t?i=r.next(t-o):(i=r.next(e-o),n.push(i)),o+=l.length(i)}return new s(n)},s.prototype.compose=function(t){for(var e=l.iterator(this.ops),n=l.iterator(t.ops),r=new s;e.hasNext()||n.hasNext();)if("insert"===n.peekType())r.push(n.next());else if("delete"===e.peekType())r.push(e.next());else{var o=Math.min(e.peekLength(),n.peekLength()),i=e.next(o),a=n.next(o);if("number"==typeof a.retain){var u={};"number"==typeof i.retain?u.retain=o:u.insert=i.insert;var c=l.attributes.compose(i.attributes,a.attributes,"number"==typeof i.retain);c&&(u.attributes=c),r.push(u)}else"number"==typeof a.delete&&"number"==typeof i.retain&&r.push(a)}return r.chop()},s.prototype.concat=function(t){var e=new s(this.ops.slice());return t.ops.length>0&&(e.push(t.ops[0]),e.ops=e.ops.concat(t.ops.slice(1))),e},s.prototype.diff=function(t,e){if(this.ops===t.ops)return new s;var n=[this,t].map(function(e){return e.map(function(n){if(null!=n.insert)return"string"==typeof n.insert?n.insert:a;var r=e===t?"on":"with";throw new Error("diff() called "+r+" non-document")}).join("")}),i=new s,u=r(n[0],n[1],e),c=l.iterator(this.ops),f=l.iterator(t.ops);return u.forEach(function(t){for(var e=t[1].length;e>0;){var n=0;switch(t[0]){case r.INSERT:n=Math.min(f.peekLength(),e),i.push(f.next(n));break;case r.DELETE:n=Math.min(e,c.peekLength()),c.next(n),i.delete(n);break;case r.EQUAL:n=Math.min(c.peekLength(),f.peekLength(),e);var a=c.next(n),s=f.next(n);o(a.insert,s.insert)?i.retain(n,l.attributes.diff(a.attributes,s.attributes)):i.push(s).delete(n)}e-=n}}),i.chop()},s.prototype.eachLine=function(t,e){e=e||"\n";for(var n=l.iterator(this.ops),r=new s,o=0;n.hasNext();){if("insert"!==n.peekType())return;var i=n.peek(),a=l.length(i)-n.peekLength(),u="string"==typeof i.insert?i.insert.indexOf(e,a)-a:-1;if(u<0)r.push(n.next());else if(u>0)r.push(n.next(u));else{if(!1===t(r,n.next(1).attributes||{},o))return;o+=1,r=new s}}r.length()>0&&t(r,{},o)},s.prototype.transform=function(t,e){if(e=!!e,"number"==typeof t)return this.transformPosition(t,e);for(var n=l.iterator(this.ops),r=l.iterator(t.ops),o=new s;n.hasNext()||r.hasNext();)if("insert"!==n.peekType()||!e&&"insert"===r.peekType())if("insert"===r.peekType())o.push(r.next());else{var i=Math.min(n.peekLength(),r.peekLength()),a=n.next(i),u=r.next(i);if(a.delete)continue;u.delete?o.push(u):o.retain(i,l.attributes.transform(a.attributes,u.attributes,e))}else o.retain(l.length(n.next()));return o.chop()},s.prototype.transformPosition=function(t,e){e=!!e;for(var n=l.iterator(this.ops),r=0;n.hasNext()&&r<=t;){var o=n.peekLength(),i=n.peekType();n.next(),"delete"!==i?("insert"===i&&(r<t||!e)&&(t+=o),r+=o):t-=Math.min(o,t-r)}return t},t.exports=s},function(t,e){"use strict";var n=Object.prototype.hasOwnProperty,r=Object.prototype.toString,o=function(t){return"function"==typeof Array.isArray?Array.isArray(t):"[object Array]"===r.call(t)},i=function(t){if(!t||"[object Object]"!==r.call(t))return!1;var e=n.call(t,"constructor"),o=t.constructor&&t.constructor.prototype&&n.call(t.constructor.prototype,"isPrototypeOf");if(t.constructor&&!e&&!o)return!1;var i;for(i in t);return void 0===i||n.call(t,i)};t.exports=function t(){var e,n,r,l,a,s,u=arguments[0],c=1,f=arguments.length,d=!1;for("boolean"==typeof u?(d=u,u=arguments[1]||{},c=2):("object"!=typeof u&&"function"!=typeof u||null==u)&&(u={});c<f;++c)if(null!=(e=arguments[c]))for(n in e)r=u[n],l=e[n],u!==l&&(d&&l&&(i(l)||(a=o(l)))?(a?(a=!1,s=r&&o(r)?r:[]):s=r&&i(r)?r:{},u[n]=t(d,s,l)):void 0!==l&&(u[n]=l));return u}},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}function o(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function i(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function l(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}function a(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return null==t?e:("function"==typeof t.formats&&(e=(0,f.default)(e,t.formats())),null==t.parent||"scroll"==t.parent.blotName||t.parent.statics.scope!==t.statics.scope?e:a(t.parent,e))}Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.BlockEmbed=e.bubbleFormats=void 0;var s=function(){function t(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}return function(e,n,r){return n&&t(e.prototype,n),r&&t(e,r),e}}(),u=function t(e,n,r){null===e&&(e=Function.prototype);var o=Object.getOwnPropertyDescriptor(e,n);if(void 0===o){var i=Object.getPrototypeOf(e);return null===i?void 0:t(i,n,r)}if("value"in o)return o.value;var l=o.get;if(void 0!==l)return l.call(r)},c=n(3),f=r(c),d=n(2),p=r(d),h=n(0),y=r(h),b=n(17),v=r(b),g=n(7),m=r(g),q=n(8),w=r(q),_=n(12),k=r(_),O=function(t){function e(){return o(this,e),i(this,(e.__proto__||Object.getPrototypeOf(e)).apply(this,arguments))}return l(e,t),s(e,[{key:"attach",value:function(){u(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"attach",this).call(this),this.attributes=new y.default.Attributor.Store(this.domNode)}},{key:"delta",value:function(){return(new p.default).insert(this.value(),(0,f.default)(this.formats(),this.attributes.values()))}},{key:"format",value:function(t,e){var n=y.default.query(t,y.default.Scope.BLOCK_ATTRIBUTE);null!=n&&this.attributes.attribute(n,e)}},{key:"formatAt",value:function(t,e,n,r){this.format(n,r)}},{key:"insertAt",value:function(t,n,r){if("string"==typeof n&&n.endsWith("\n")){var o=y.default.create(x.blotName);this.parent.insertBefore(o,0===t?this:this.next),o.insertAt(0,n.slice(0,-1))}else u(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"insertAt",this).call(this,t,n,r)}}]),e}(m.default);O.scope=y.default.Scope.BLOCK_BLOT;var x=function(t){function e(t){o(this,e);var n=i(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,t));return n.cache={},n}return l(e,t),s(e,[{key:"delta",value:function(){return null==this.cache.delta&&(this.cache.delta=this.descendants(y.default.Leaf).reduce(function(t,e){return 0===e.length()?t:t.insert(e.value(),a(e))},new p.default).insert("\n",a(this))),this.cache.delta}},{key:"deleteAt",value:function(t,n){u(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"deleteAt",this).call(this,t,n),this.cache={}}},{key:"formatAt",value:function(t,n,r,o){n<=0||(y.default.query(r,y.default.Scope.BLOCK)?t+n===this.length()&&this.format(r,o):u(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"formatAt",this).call(this,t,Math.min(n,this.length()-t-1),r,o),this.cache={})}},{key:"insertAt",value:function(t,n,r){if(null!=r)return u(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"insertAt",this).call(this,t,n,r);if(0!==n.length){var o=n.split("\n"),i=o.shift();i.length>0&&(t<this.length()-1||null==this.children.tail?u(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"insertAt",this).call(this,Math.min(t,this.length()-1),i):this.children.tail.insertAt(this.children.tail.length(),i),this.cache={});var l=this;o.reduce(function(t,e){return l=l.split(t,!0),l.insertAt(0,e),e.length},t+i.length)}}},{key:"insertBefore",value:function(t,n){var r=this.children.head;u(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"insertBefore",this).call(this,t,n),r instanceof v.default&&r.remove(),this.cache={}}},{key:"length",value:function(){return null==this.cache.length&&(this.cache.length=u(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"length",this).call(this)+1),this.cache.length}},{key:"moveChildren",value:function(t,n){u(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"moveChildren",this).call(this,t,n),this.cache={}}},{key:"optimize",value:function(){u(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"optimize",this).call(this),this.cache={}}},{key:"path",value:function(t){return u(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"path",this).call(this,t,!0)}},{key:"removeChild",value:function(t){u(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"removeChild",this).call(this,t),this.cache={}}},{key:"split",value:function(t){var n=arguments.length>1&&void 0!==arguments[1]&&arguments[1];if(n&&(0===t||t>=this.length()-1)){var r=this.clone();return 0===t?(this.parent.insertBefore(r,this),this):(this.parent.insertBefore(r,this.next),r)}var o=u(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"split",this).call(this,t,n);return this.cache={},o}}]),e}(y.default.Block);x.blotName="block",x.tagName="P",x.defaultChild="break",x.allowedChildren=[w.default,m.default,k.default],e.bubbleFormats=a,e.BlockEmbed=O,e.default=x},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}function o(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function i(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function l(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}Object.defineProperty(e,"__esModule",{value:!0});var a=function(){function t(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}return function(e,n,r){return n&&t(e.prototype,n),r&&t(e,r),e}}(),s=function t(e,n,r){null===e&&(e=Function.prototype);var o=Object.getOwnPropertyDescriptor(e,n);if(void 0===o){var i=Object.getPrototypeOf(e);return null===i?void 0:t(i,n,r)}if("value"in o)return o.value;var l=o.get;if(void 0!==l)return l.call(r)},u=n(53),c=r(u),f=n(10),d=r(f),p=(0,d.default)("quill:events"),h=function(t){function e(){o(this,e);var t=i(this,(e.__proto__||Object.getPrototypeOf(e)).call(this));return t.on("error",p.error),t}return l(e,t),a(e,[{key:"emit",value:function(){p.log.apply(p,arguments),s(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"emit",this).apply(this,arguments)}}]),e}(c.default);h.events={EDITOR_CHANGE:"editor-change",SCROLL_BEFORE_UPDATE:"scroll-before-update",SCROLL_OPTIMIZE:"scroll-optimize",SCROLL_UPDATE:"scroll-update",SELECTION_CHANGE:"selection-change",TEXT_CHANGE:"text-change"},h.sources={API:"api",SILENT:"silent",USER:"user"},e.default=h},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}function o(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function i(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function l(t,e){if(e=(0,E.default)(!0,{container:t,modules:{clipboard:!0,keyboard:!0,history:!0}},e),e.theme&&e.theme!==S.DEFAULTS.theme){if(e.theme=S.import("themes/"+e.theme),null==e.theme)throw new Error("Invalid theme "+e.theme+". Did you register it?")}else e.theme=T.default;var n=(0,E.default)(!0,{},e.theme.DEFAULTS);[n,e].forEach(function(t){t.modules=t.modules||{},Object.keys(t.modules).forEach(function(e){!0===t.modules[e]&&(t.modules[e]={})})});var r=Object.keys(n.modules).concat(Object.keys(e.modules)),o=r.reduce(function(t,e){var n=S.import("modules/"+e);return null==n?P.error("Cannot load "+e+" module. Are you sure you registered it?"):t[e]=n.DEFAULTS||{},t},{});return null!=e.modules&&e.modules.toolbar&&e.modules.toolbar.constructor!==Object&&(e.modules.toolbar={container:e.modules.toolbar}),e=(0,E.default)(!0,{},S.DEFAULTS,{modules:o},n,e),["bounds","container","scrollingContainer"].forEach(function(t){"string"==typeof e[t]&&(e[t]=document.querySelector(e[t]))}),e.modules=Object.keys(e.modules).reduce(function(t,n){return e.modules[n]&&(t[n]=e.modules[n]),t},{}),e}function a(t,e,n,r){if(this.options.strict&&!this.isEnabled()&&e===g.default.sources.USER)return new h.default;var o=null==n?null:this.getSelection(),i=this.editor.delta,l=t();if(null!=o&&(!0===n&&(n=o.index),null==r?o=u(o,l,e):0!==r&&(o=u(o,n,r,e)),this.setSelection(o,g.default.sources.SILENT)),l.length()>0){var a,s=[g.default.events.TEXT_CHANGE,l,i,e];if((a=this.emitter).emit.apply(a,[g.default.events.EDITOR_CHANGE].concat(s)),e!==g.default.sources.SILENT){var c;(c=this.emitter).emit.apply(c,s)}}return l}function s(t,e,n,r,o){var i={};return"number"==typeof t.index&&"number"==typeof t.length?"number"!=typeof e?(o=r,r=n,n=e,e=t.length,t=t.index):(e=t.length,t=t.index):"number"!=typeof e&&(o=r,r=n,n=e,e=0),"object"===(void 0===n?"undefined":c(n))?(i=n,o=r):"string"==typeof n&&(null!=r?i[n]=r:o=n),o=o||g.default.sources.API,[t,e,i,o]}function u(t,e,n,r){if(null==t)return null;var o=void 0,i=void 0;if(e instanceof h.default){var l=[t.index,t.index+t.length].map(function(t){return e.transformPosition(t,r===g.default.sources.USER)}),a=f(l,2);o=a[0],i=a[1]}else{var s=[t.index,t.index+t.length].map(function(t){return t<e||t===e&&r!==g.default.sources.USER?t:n>=0?t+n:Math.max(e,t+n)}),u=f(s,2);o=u[0],i=u[1]}return new k.Range(o,i-o)}Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.overload=e.expandConfig=void 0;var c="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},f=function(){function t(t,e){var n=[],r=!0,o=!1,i=void 0;try{for(var l,a=t[Symbol.iterator]();!(r=(l=a.next()).done)&&(n.push(l.value),!e||n.length!==e);r=!0);}catch(t){o=!0,i=t}finally{try{!r&&a.return&&a.return()}finally{if(o)throw i}}return n}return function(e,n){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return t(e,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),d=function(){function t(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}return function(e,n,r){return n&&t(e.prototype,n),r&&t(e,r),e}}();n(43);var p=n(2),h=r(p),y=n(14),b=r(y),v=n(5),g=r(v),m=n(9),q=r(m),w=n(0),_=r(w),k=n(15),O=r(k),x=n(3),E=r(x),A=n(10),j=r(A),N=n(29),T=r(N),P=(0,j.default)("quill"),S=function(){function t(e){var n=this,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(i(this,t),this.options=l(e,r),this.container=this.options.container,null==this.container)return P.error("Invalid Quill container",e);this.options.debug&&t.debug(this.options.debug);var o=this.container.innerHTML.trim();this.container.classList.add("ql-container"),this.container.innerHTML="",this.container.__quill=this,this.root=this.addContainer("ql-editor"),this.root.classList.add("ql-blank"),this.scrollingContainer=this.options.scrollingContainer||this.root,this.emitter=new g.default,this.scroll=_.default.create(this.root,{emitter:this.emitter,scrollingContainer:this.scrollingContainer,whitelist:this.options.formats}),this.editor=new b.default(this.scroll),this.selection=new O.default(this.scroll,this.emitter),this.theme=new this.options.theme(this,this.options),this.keyboard=this.theme.addModule("keyboard"),this.clipboard=this.theme.addModule("clipboard"),this.history=this.theme.addModule("history"),this.theme.init(),this.emitter.on(g.default.events.EDITOR_CHANGE,function(t){t===g.default.events.TEXT_CHANGE&&n.root.classList.toggle("ql-blank",n.editor.isBlank())}),this.emitter.on(g.default.events.SCROLL_UPDATE,function(t,e){var r=n.selection.lastRange,o=r&&0===r.length?r.index:void 0;a.call(n,function(){return n.editor.update(null,e,o)},t)});var s=this.clipboard.convert("<div class='ql-editor' style=\"white-space: normal;\">"+o+"<p><br></p></div>");this.setContents(s),this.history.clear(),this.options.placeholder&&this.root.setAttribute("data-placeholder",this.options.placeholder),this.options.readOnly&&this.disable()}return d(t,null,[{key:"debug",value:function(t){!0===t&&(t="log"),j.default.level(t)}},{key:"find",value:function(t){return t.__quill||_.default.find(t)}},{key:"import",value:function(t){return null==this.imports[t]&&P.error("Cannot import "+t+". Are you sure it was registered?"),this.imports[t]}},{key:"register",value:function(t,e){var n=this,r=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if("string"!=typeof t){var o=t.attrName||t.blotName;"string"==typeof o?this.register("formats/"+o,t,e):Object.keys(t).forEach(function(r){n.register(r,t[r],e)})}else null==this.imports[t]||r||P.warn("Overwriting "+t+" with",e),this.imports[t]=e,(t.startsWith("blots/")||t.startsWith("formats/"))&&"abstract"!==e.blotName?_.default.register(e):t.startsWith("modules")&&"function"==typeof e.register&&e.register()}}]),d(t,[{key:"addContainer",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;if("string"==typeof t){var n=t;t=document.createElement("div"),t.classList.add(n)}return this.container.insertBefore(t,e),t}},{key:"blur",value:function(){this.selection.setRange(null)}},{key:"deleteText",value:function(t,e,n){var r=this,o=s(t,e,n),i=f(o,4);return t=i[0],e=i[1],n=i[3],a.call(this,function(){return r.editor.deleteText(t,e)},n,t,-1*e)}},{key:"disable",value:function(){this.enable(!1)}},{key:"enable",value:function(){var t=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];this.scroll.enable(t),this.container.classList.toggle("ql-disabled",!t)}},{key:"focus",value:function(){var t=this.scrollingContainer.scrollTop;this.selection.focus(),this.scrollingContainer.scrollTop=t,this.selection.scrollIntoView()}},{key:"format",value:function(t,e){var n=this,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:g.default.sources.API;return a.call(this,function(){var r=n.getSelection(!0),i=new h.default;if(null==r)return i;if(_.default.query(t,_.default.Scope.BLOCK))i=n.editor.formatLine(r.index,r.length,o({},t,e));else{if(0===r.length)return n.selection.format(t,e),i;i=n.editor.formatText(r.index,r.length,o({},t,e))}return n.setSelection(r,g.default.sources.SILENT),i},r)}},{key:"formatLine",value:function(t,e,n,r,o){var i=this,l=void 0,u=s(t,e,n,r,o),c=f(u,4);return t=c[0],e=c[1],l=c[2],o=c[3],a.call(this,function(){return i.editor.formatLine(t,e,l)},o,t,0)}},{key:"formatText",value:function(t,e,n,r,o){var i=this,l=void 0,u=s(t,e,n,r,o),c=f(u,4);return t=c[0],e=c[1],l=c[2],o=c[3],a.call(this,function(){return i.editor.formatText(t,e,l)},o,t,0)}},{key:"getBounds",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=void 0;n="number"==typeof t?this.selection.getBounds(t,e):this.selection.getBounds(t.index,t.length);var r=this.container.getBoundingClientRect();return{bottom:n.bottom-r.top,height:n.height,left:n.left-r.left,right:n.right-r.left,top:n.top-r.top,width:n.width}}},{key:"getContents",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.getLength()-t,n=s(t,e),r=f(n,2);return t=r[0],e=r[1],this.editor.getContents(t,e)}},{key:"getFormat",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.getSelection(),e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;return"number"==typeof t?this.editor.getFormat(t,e):this.editor.getFormat(t.index,t.length)}},{key:"getIndex",value:function(t){return t.offset(this.scroll)}},{key:"getLength",value:function(){return this.scroll.length()}},{key:"getLeaf",value:function(t){return this.scroll.leaf(t)}},{key:"getLine",value:function(t){return this.scroll.line(t)}},{key:"getLines",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:Number.MAX_VALUE;return"number"!=typeof t?this.scroll.lines(t.index,t.length):this.scroll.lines(t,e)}},{key:"getModule",value:function(t){return this.theme.modules[t]}},{key:"getSelection",value:function(){return arguments.length>0&&void 0!==arguments[0]&&arguments[0]&&this.focus(),this.update(),this.selection.getRange()[0]}},{key:"getText",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this.getLength()-t,n=s(t,e),r=f(n,2);return t=r[0],e=r[1],this.editor.getText(t,e)}},{key:"hasFocus",value:function(){return this.selection.hasFocus()}},{key:"insertEmbed",value:function(e,n,r){var o=this,i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:t.sources.API;return a.call(this,function(){return o.editor.insertEmbed(e,n,r)},i,e)}},{key:"insertText",value:function(t,e,n,r,o){var i=this,l=void 0,u=s(t,0,n,r,o),c=f(u,4);return t=c[0],l=c[2],o=c[3],a.call(this,function(){return i.editor.insertText(t,e,l)},o,t,e.length)}},{key:"isEnabled",value:function(){return!this.container.classList.contains("ql-disabled")}},{key:"off",value:function(){return this.emitter.off.apply(this.emitter,arguments)}},{key:"on",value:function(){return this.emitter.on.apply(this.emitter,arguments)}},{key:"once",value:function(){return this.emitter.once.apply(this.emitter,arguments)}},{key:"pasteHTML",value:function(t,e,n){this.clipboard.dangerouslyPasteHTML(t,e,n)}},{key:"removeFormat",value:function(t,e,n){var r=this,o=s(t,e,n),i=f(o,4);return t=i[0],e=i[1],n=i[3],a.call(this,function(){return r.editor.removeFormat(t,e)},n,t)}},{key:"setContents",value:function(t){var e=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:g.default.sources.API;return a.call(this,function(){t=new h.default(t);var n=e.getLength(),r=e.editor.deleteText(0,n),o=e.editor.applyDelta(t),i=o.ops[o.ops.length-1];return null!=i&&"string"==typeof i.insert&&"\n"===i.insert[i.insert.length-1]&&(e.editor.deleteText(e.getLength()-1,1),o.delete(1)),r.compose(o)},n)}},{key:"setSelection",value:function(e,n,r){if(null==e)this.selection.setRange(null,n||t.sources.API);else{var o=s(e,n,r),i=f(o,4);e=i[0],n=i[1],r=i[3],this.selection.setRange(new k.Range(e,n),r)}r!==g.default.sources.SILENT&&this.selection.scrollIntoView()}},{key:"setText",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:g.default.sources.API,n=(new h.default).insert(t);return this.setContents(n,e)}},{key:"update",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:g.default.sources.USER,e=this.scroll.update(t);return this.selection.update(t),e}},{key:"updateContents",value:function(t){var e=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:g.default.sources.API;return a.call(this,function(){return t=new h.default(t),e.editor.applyDelta(t,n)},n,!0)}}]),t}();S.DEFAULTS={bounds:null,formats:null,modules:{},placeholder:"",readOnly:!1,scrollingContainer:null,strict:!0,theme:"default"},S.events=g.default.events,S.sources=g.default.sources,S.version="1.2.3",S.imports={delta:h.default,parchment:_.default,"core/module":q.default,"core/theme":T.default},e.expandConfig=l,e.overload=s,e.default=S},function(t,e,n){"use strict";function r(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function o(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function i(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}Object.defineProperty(e,"__esModule",{value:!0});var l=n(0),a=function(t){return t&&t.__esModule?t:{default:t}}(l),s=function(t){function e(){return r(this,e),o(this,(e.__proto__||Object.getPrototypeOf(e)).apply(this,arguments))}return i(e,t),e}(a.default.Embed);e.default=s},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}function o(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function i(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function l(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}Object.defineProperty(e,"__esModule",{value:!0});var a=function(){function t(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}return function(e,n,r){return n&&t(e.prototype,n),r&&t(e,r),e}}(),s=function t(e,n,r){null===e&&(e=Function.prototype);var o=Object.getOwnPropertyDescriptor(e,n);if(void 0===o){var i=Object.getPrototypeOf(e);return null===i?void 0:t(i,n,r)}if("value"in o)return o.value;var l=o.get;if(void 0!==l)return l.call(r)},u=n(7),c=r(u),f=n(12),d=r(f),p=n(0),h=r(p),y=function(t){function e(){return o(this,e),i(this,(e.__proto__||Object.getPrototypeOf(e)).apply(this,arguments))}return l(e,t),a(e,[{key:"formatAt",value:function(t,n,r,o){if(e.compare(this.statics.blotName,r)<0&&h.default.query(r,h.default.Scope.BLOT)){var i=this.isolate(t,n);o&&i.wrap(r,o)}else s(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"formatAt",this).call(this,t,n,r,o)}},{key:"optimize",value:function(){if(s(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"optimize",this).call(this),this.parent instanceof e&&e.compare(this.statics.blotName,this.parent.statics.blotName)>0){var t=this.parent.isolate(this.offset(),this.length());this.moveChildren(t),t.wrap(this)}}}],[{key:"compare",value:function(t,n){var r=e.order.indexOf(t),o=e.order.indexOf(n);return r>=0||o>=0?r-o:t===n?0:t<n?-1:1}}]),e}(h.default.Inline);y.allowedChildren=[y,c.default,d.default],y.order=["cursor","inline","code","underline","strike","italic","bold","script","link"],e.default=y},function(t,e,n){"use strict";function r(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0});var o=function t(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};r(this,t),this.quill=e,this.options=n};o.DEFAULTS={},e.default=o},function(t,e,n){"use strict";function r(t){if(i.indexOf(t)<=i.indexOf(l)){for(var e=arguments.length,n=Array(e>1?e-1:0),r=1;r<e;r++)n[r-1]=arguments[r];console[t].apply(console,n)}}function o(t){return i.reduce(function(e,n){return e[n]=r.bind(console,n,t),e},{})}Object.defineProperty(e,"__esModule",{value:!0});var i=["error","warn","log","info"],l="warn";r.level=o.level=function(t){l=t},e.default=o},function(t,e,n){function r(t){return null===t||void 0===t}function o(t){return!(!t||"object"!=typeof t||"number"!=typeof t.length)&&("function"==typeof t.copy&&"function"==typeof t.slice&&!(t.length>0&&"number"!=typeof t[0]))}function i(t,e,n){var i,c;if(r(t)||r(e))return!1;if(t.prototype!==e.prototype)return!1;if(s(t))return!!s(e)&&(t=l.call(t),e=l.call(e),u(t,e,n));if(o(t)){if(!o(e))return!1;if(t.length!==e.length)return!1;for(i=0;i<t.length;i++)if(t[i]!==e[i])return!1;return!0}try{var f=a(t),d=a(e)}catch(t){return!1}if(f.length!=d.length)return!1;for(f.sort(),d.sort(),i=f.length-1;i>=0;i--)if(f[i]!=d[i])return!1;for(i=f.length-1;i>=0;i--)if(c=f[i],!u(t[c],e[c],n))return!1;return typeof t==typeof e}var l=Array.prototype.slice,a=n(52),s=n(51),u=t.exports=function(t,e,n){return n||(n={}),t===e||(t instanceof Date&&e instanceof Date?t.getTime()===e.getTime():!t||!e||"object"!=typeof t&&"object"!=typeof e?n.strict?t===e:t==e:i(t,e,n))}},function(t,e,n){"use strict";function r(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function o(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function i(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}Object.defineProperty(e,"__esModule",{value:!0});var l=n(0),a=function(t){return t&&t.__esModule?t:{default:t}}(l),s=function(t){function e(){return r(this,e),o(this,(e.__proto__||Object.getPrototypeOf(e)).apply(this,arguments))}return i(e,t),e}(a.default.Text);e.default=s},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(1),o=function(){function t(t,e,n){void 0===n&&(n={}),this.attrName=t,this.keyName=e;var o=r.Scope.TYPE&r.Scope.ATTRIBUTE;null!=n.scope?this.scope=n.scope&r.Scope.LEVEL|o:this.scope=r.Scope.ATTRIBUTE,null!=n.whitelist&&(this.whitelist=n.whitelist)}return t.keys=function(t){return[].map.call(t.attributes,function(t){return t.name})},t.prototype.add=function(t,e){return!!this.canAdd(t,e)&&(t.setAttribute(this.keyName,e),!0)},t.prototype.canAdd=function(t,e){return null!=r.query(t,r.Scope.BLOT&(this.scope|r.Scope.TYPE))&&(null==this.whitelist||this.whitelist.indexOf(e)>-1)},t.prototype.remove=function(t){t.removeAttribute(this.keyName)},t.prototype.value=function(t){var e=t.getAttribute(this.keyName);return this.canAdd(t,e)?e:""},t}();e.default=o},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}function o(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function i(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function l(t,e){return Object.keys(e).reduce(function(n,r){return null==t[r]?n:(e[r]===t[r]?n[r]=e[r]:Array.isArray(e[r])?e[r].indexOf(t[r])<0&&(n[r]=e[r].concat([t[r]])):n[r]=[e[r],t[r]],n)},{})}function a(t){return t.reduce(function(t,e){if(1===e.insert){var n=(0,O.default)(e.attributes);return delete n.image,t.insert({image:e.attributes.image},n)}if(null==e.attributes||!0!==e.attributes.list&&!0!==e.attributes.bullet||(e=(0,O.default)(e),e.attributes.list?e.attributes.list="ordered":(e.attributes.list="bullet",delete e.attributes.bullet)),"string"==typeof e.insert){var r=e.insert.replace(/\r\n/g,"\n").replace(/\r/g,"\n");return t.insert(r,e.attributes)}return t.push(e)},new d.default)}Object.defineProperty(e,"__esModule",{value:!0});var s="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},u=function(){function t(t,e){var n=[],r=!0,o=!1,i=void 0;try{for(var l,a=t[Symbol.iterator]();!(r=(l=a.next()).done)&&(n.push(l.value),!e||n.length!==e);r=!0);}catch(t){o=!0,i=t}finally{try{!r&&a.return&&a.return()}finally{if(o)throw i}}return n}return function(e,n){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return t(e,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),c=function(){function t(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}return function(e,n,r){return n&&t(e.prototype,n),r&&t(e,r),e}}(),f=n(2),d=r(f),p=n(20),h=r(p),y=n(0),b=r(y),v=n(16),g=r(v),m=n(25),q=r(m),w=n(4),_=r(w),k=n(19),O=r(k),x=n(11),E=r(x),A=n(3),j=r(A),N=function(){function t(e){i(this,t),this.scroll=e,this.delta=this.getDelta()}return c(t,[{key:"applyDelta",value:function(t){var e=this,n=!1;this.scroll.update();var r=this.scroll.length();return this.scroll.batch=!0,t=a(t),t.reduce(function(t,o){var i=o.retain||o.delete||o.insert.length||1,l=o.attributes||{};if(null!=o.insert){if("string"==typeof o.insert){var a=o.insert;a.endsWith("\n")&&n&&(n=!1,a=a.slice(0,-1)),t>=r&&!a.endsWith("\n")&&(n=!0),e.scroll.insertAt(t,a);var c=e.scroll.line(t),f=u(c,2),d=f[0],p=f[1],y=(0,j.default)({},(0,w.bubbleFormats)(d));if(d instanceof _.default){var v=d.descendant(b.default.Leaf,p),g=u(v,1),m=g[0];y=(0,j.default)(y,(0,w.bubbleFormats)(m))}l=h.default.attributes.diff(y,l)||{}}else if("object"===s(o.insert)){var q=Object.keys(o.insert)[0];if(null==q)return t;e.scroll.insertAt(t,q,o.insert[q])}r+=i}return Object.keys(l).forEach(function(n){e.scroll.formatAt(t,i,n,l[n])}),t+i},0),t.reduce(function(t,n){return"number"==typeof n.delete?(e.scroll.deleteAt(t,n.delete),t):t+(n.retain||n.insert.length||1)},0),this.scroll.batch=!1,this.scroll.optimize(),this.update(t)}},{key:"deleteText",value:function(t,e){return this.scroll.deleteAt(t,e),this.update((new d.default).retain(t).delete(e))}},{key:"formatLine",value:function(t,e){var n=this,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this.scroll.update(),Object.keys(r).forEach(function(o){if(null==n.scroll.whitelist||n.scroll.whitelist[o]){var i=n.scroll.lines(t,Math.max(e,1)),l=e;i.forEach(function(e){var i=e.length();if(e instanceof g.default){var a=t-e.offset(n.scroll),s=e.newlineIndex(a+l)-a+1;e.formatAt(a,s,o,r[o])}else e.format(o,r[o]);l-=i})}}),this.scroll.optimize(),this.update((new d.default).retain(t).retain(e,(0,O.default)(r)))}},{key:"formatText",value:function(t,e){var n=this,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return Object.keys(r).forEach(function(o){n.scroll.formatAt(t,e,o,r[o])}),this.update((new d.default).retain(t).retain(e,(0,O.default)(r)))}},{key:"getContents",value:function(t,e){return this.delta.slice(t,t+e)}},{key:"getDelta",value:function(){return this.scroll.lines().reduce(function(t,e){return t.concat(e.delta())},new d.default)}},{key:"getFormat",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=[],r=[];0===e?this.scroll.path(t).forEach(function(t){var e=u(t,1),o=e[0];o instanceof _.default?n.push(o):o instanceof b.default.Leaf&&r.push(o)}):(n=this.scroll.lines(t,e),r=this.scroll.descendants(b.default.Leaf,t,e));var o=[n,r].map(function(t){if(0===t.length)return{};for(var e=(0,w.bubbleFormats)(t.shift());Object.keys(e).length>0;){var n=t.shift();if(null==n)return e;e=l((0,w.bubbleFormats)(n),e)}return e});return j.default.apply(j.default,o)}},{key:"getText",value:function(t,e){return this.getContents(t,e).filter(function(t){return"string"==typeof t.insert}).map(function(t){return t.insert}).join("")}},{key:"insertEmbed",value:function(t,e,n){return this.scroll.insertAt(t,e,n),this.update((new d.default).retain(t).insert(o({},e,n)))}},{key:"insertText",value:function(t,e){var n=this,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return e=e.replace(/\r\n/g,"\n").replace(/\r/g,"\n"),this.scroll.insertAt(t,e),Object.keys(r).forEach(function(o){n.scroll.formatAt(t,e.length,o,r[o])}),this.update((new d.default).retain(t).insert(e,(0,O.default)(r)))}},{key:"isBlank",value:function(){if(0==this.scroll.children.length)return!0;if(this.scroll.children.length>1)return!1;var t=this.scroll.children.head;return t.length()<=1&&0==Object.keys(t.formats()).length}},{key:"removeFormat",value:function(t,e){var n=this.getText(t,e),r=this.scroll.line(t+e),o=u(r,2),i=o[0],l=o[1],a=0,s=new d.default;null!=i&&(a=i instanceof g.default?i.newlineIndex(l)-l+1:i.length()-l,s=i.delta().slice(l,l+a-1).insert("\n"));var c=this.getContents(t,e+a),f=c.diff((new d.default).insert(n).concat(s)),p=(new d.default).retain(t).concat(f);return this.applyDelta(p)}},{key:"update",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:void 0,r=this.delta;if(1===e.length&&"characterData"===e[0].type&&b.default.find(e[0].target)){var o=b.default.find(e[0].target),i=(0,w.bubbleFormats)(o),l=o.offset(this.scroll),a=e[0].oldValue.replace(q.default.CONTENTS,""),s=(new d.default).insert(a),u=(new d.default).insert(o.value());t=(new d.default).retain(l).concat(s.diff(u,n)).reduce(function(t,e){return e.insert?t.insert(e.insert,i):t.push(e)},new d.default),this.delta=r.compose(t)}else this.delta=this.getDelta(),t&&(0,E.default)(r.compose(t),this.delta)||(t=r.diff(this.delta,n));return t}}]),t}();e.default=N},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}function o(t){if(Array.isArray(t)){for(var e=0,n=Array(t.length);e<t.length;e++)n[e]=t[e];return n}return Array.from(t)}function i(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function l(t,e){try{e.parentNode}catch(t){return!1}return e instanceof Text&&(e=e.parentNode),t.contains(e)}Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.Range=void 0;var a=function(){function t(t,e){var n=[],r=!0,o=!1,i=void 0;try{for(var l,a=t[Symbol.iterator]();!(r=(l=a.next()).done)&&(n.push(l.value),!e||n.length!==e);r=!0);}catch(t){o=!0,i=t}finally{try{!r&&a.return&&a.return()}finally{if(o)throw i}}return n}return function(e,n){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return t(e,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),s=function(){function t(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}return function(e,n,r){return n&&t(e.prototype,n),r&&t(e,r),e}}(),u=n(0),c=r(u),f=n(19),d=r(f),p=n(11),h=r(p),y=n(5),b=r(y),v=n(10),g=r(v),m=(0,g.default)("quill:selection"),q=function t(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;i(this,t),this.index=e,this.length=n},w=function(){function t(e,n){var r=this;i(this,t),this.emitter=n,this.scroll=e,this.composing=!1,this.root=this.scroll.domNode,this.root.addEventListener("compositionstart",function(){r.composing=!0}),this.root.addEventListener("compositionend",function(){r.composing=!1}),this.cursor=c.default.create("cursor",this),this.lastRange=this.savedRange=new q(0,0),["keyup","mouseup","mouseleave","touchend","touchleave","focus","blur"].forEach(function(t){r.root.addEventListener(t,function(){setTimeout(r.update.bind(r,b.default.sources.USER),100)})}),this.emitter.on(b.default.events.EDITOR_CHANGE,function(t,e){t===b.default.events.TEXT_CHANGE&&e.length()>0&&r.update(b.default.sources.SILENT)}),this.emitter.on(b.default.events.SCROLL_BEFORE_UPDATE,function(){var t=r.getNativeRange();null!=t&&t.start.node!==r.cursor.textNode&&r.emitter.once(b.default.events.SCROLL_UPDATE,function(){try{r.setNativeRange(t.start.node,t.start.offset,t.end.node,t.end.offset)}catch(t){}})}),this.update(b.default.sources.SILENT)}return s(t,[{key:"focus",value:function(){this.hasFocus()||(this.root.focus(),this.setRange(this.savedRange))}},{key:"format",value:function(t,e){if(null==this.scroll.whitelist||this.scroll.whitelist[t]){this.scroll.update();var n=this.getNativeRange();if(null!=n&&n.native.collapsed&&!c.default.query(t,c.default.Scope.BLOCK)){if(n.start.node!==this.cursor.textNode){var r=c.default.find(n.start.node,!1);if(null==r)return;if(r instanceof c.default.Leaf){var o=r.split(n.start.offset);r.parent.insertBefore(this.cursor,o)}else r.insertBefore(this.cursor,n.start.node);this.cursor.attach()}this.cursor.format(t,e),this.scroll.optimize(),this.setNativeRange(this.cursor.textNode,this.cursor.textNode.data.length),this.update()}}}},{key:"getBounds",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=this.scroll.length();t=Math.min(t,n-1),e=Math.min(t+e,n-1)-t;var r=void 0,o=this.scroll.leaf(t),i=a(o,2),l=i[0],s=i[1];if(null==l)return null;var u=l.position(s,!0),c=a(u,2);r=c[0],s=c[1];var f=document.createRange();if(e>0){f.setStart(r,s);var d=this.scroll.leaf(t+e),p=a(d,2);if(l=p[0],s=p[1],null==l)return null;var h=l.position(s,!0),y=a(h,2);return r=y[0],s=y[1],f.setEnd(r,s),f.getBoundingClientRect()}var b="left",v=void 0;return r instanceof Text?(s<r.data.length?(f.setStart(r,s),f.setEnd(r,s+1)):(f.setStart(r,s-1),f.setEnd(r,s),b="right"),v=f.getBoundingClientRect()):(v=l.domNode.getBoundingClientRect(),s>0&&(b="right")),{bottom:v.top+v.height,height:v.height,left:v[b],right:v[b],top:v.top,width:0}}},{key:"getNativeRange",value:function(){var t=document.getSelection();if(null==t||t.rangeCount<=0)return null;var e=t.getRangeAt(0);if(null==e)return null;if(!l(this.root,e.startContainer)||!e.collapsed&&!l(this.root,e.endContainer))return null;var n={start:{node:e.startContainer,offset:e.startOffset},end:{node:e.endContainer,offset:e.endOffset},native:e};return[n.start,n.end].forEach(function(t){for(var e=t.node,n=t.offset;!(e instanceof Text)&&e.childNodes.length>0;)if(e.childNodes.length>n)e=e.childNodes[n],n=0;else{if(e.childNodes.length!==n)break;e=e.lastChild,n=e instanceof Text?e.data.length:e.childNodes.length+1}t.node=e,t.offset=n}),m.info("getNativeRange",n),n}},{key:"getRange",value:function(){var t=this,e=this.getNativeRange();if(null==e)return[null,null];var n=[[e.start.node,e.start.offset]];e.native.collapsed||n.push([e.end.node,e.end.offset]);var r=n.map(function(e){var n=a(e,2),r=n[0],o=n[1],i=c.default.find(r,!0),l=i.offset(t.scroll);return 0===o?l:i instanceof c.default.Container?l+i.length():l+i.index(r,o)}),i=Math.min.apply(Math,o(r)),l=Math.max.apply(Math,o(r));return l=Math.min(l,this.scroll.length()-1),[new q(i,l-i),e]}},{key:"hasFocus",value:function(){return document.activeElement===this.root}},{key:"scrollIntoView",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.lastRange;if(null!=t){var e=this.getBounds(t.index,t.length);if(null!=e){var n=this.scroll.length()-1,r=this.scroll.line(Math.min(t.index,n)),o=a(r,1),i=o[0],l=i;if(t.length>0){var s=this.scroll.line(Math.min(t.index+t.length,n));l=a(s,1)[0]}if(null!=i&&null!=l){var u=this.scroll.scrollingContainer,c=u.getBoundingClientRect();e.top<c.top?u.scrollTop-=c.top-e.top:e.bottom>c.bottom&&(u.scrollTop+=e.bottom-c.bottom)}}}}},{key:"setNativeRange",value:function(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:t,r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:e,o=arguments.length>4&&void 0!==arguments[4]&&arguments[4];if(m.info("setNativeRange",t,e,n,r),null==t||null!=this.root.parentNode&&null!=t.parentNode&&null!=n.parentNode){var i=document.getSelection();if(null!=i)if(null!=t){this.hasFocus()||this.root.focus();var l=(this.getNativeRange()||{}).native;if(null==l||o||t!==l.startContainer||e!==l.startOffset||n!==l.endContainer||r!==l.endOffset){"BR"==t.tagName&&(e=[].indexOf.call(t.parentNode.childNodes,t),t=t.parentNode),"BR"==n.tagName&&(r=[].indexOf.call(n.parentNode.childNodes,n),n=n.parentNode);var a=document.createRange();a.setStart(t,e),a.setEnd(n,r),i.removeAllRanges(),i.addRange(a)}}else i.removeAllRanges(),this.root.blur(),document.body.focus()}}},{key:"setRange",value:function(t){var e=this,n=arguments.length>1&&void 0!==arguments[1]&&arguments[1],r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:b.default.sources.API;if("string"==typeof n&&(r=n,n=!1),m.info("setRange",t),null!=t){var i=t.collapsed?[t.index]:[t.index,t.index+t.length],l=[],s=this.scroll.length();i.forEach(function(t,n){t=Math.min(s-1,t);var r=void 0,o=e.scroll.leaf(t),i=a(o,2),u=i[0],c=i[1],f=u.position(c,0!==n),d=a(f,2);r=d[0],c=d[1],l.push(r,c)}),l.length<2&&(l=l.concat(l)),this.setNativeRange.apply(this,o(l).concat([n]))}else this.setNativeRange(null);this.update(r)}},{key:"update",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:b.default.sources.USER,e=this.lastRange,n=this.getRange(),r=a(n,2),o=r[0],i=r[1];if(this.lastRange=o,null!=this.lastRange&&(this.savedRange=this.lastRange),!(0,h.default)(e,this.lastRange)){var l;!this.composing&&null!=i&&i.native.collapsed&&i.start.node!==this.cursor.textNode&&this.cursor.restore();var s=[b.default.events.SELECTION_CHANGE,(0,d.default)(this.lastRange),(0,d.default)(e),t];if((l=this.emitter).emit.apply(l,[b.default.events.EDITOR_CHANGE].concat(s)),t!==b.default.sources.SILENT){var u;(u=this.emitter).emit.apply(u,s)}}}}]),t}();e.Range=q,e.default=w},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}function o(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function i(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function l(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.Code=void 0;var a=function(){function t(t,e){var n=[],r=!0,o=!1,i=void 0;try{for(var l,a=t[Symbol.iterator]();!(r=(l=a.next()).done)&&(n.push(l.value),!e||n.length!==e);r=!0);}catch(t){o=!0,i=t}finally{try{!r&&a.return&&a.return()}finally{if(o)throw i}}return n}return function(e,n){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return t(e,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),s=function(){function t(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}return function(e,n,r){return n&&t(e.prototype,n),r&&t(e,r),e}}(),u=function t(e,n,r){null===e&&(e=Function.prototype);var o=Object.getOwnPropertyDescriptor(e,n);if(void 0===o){var i=Object.getPrototypeOf(e);return null===i?void 0:t(i,n,r)}if("value"in o)return o.value;var l=o.get;if(void 0!==l)return l.call(r)},c=n(2),f=r(c),d=n(0),p=r(d),h=n(4),y=r(h),b=n(8),v=r(b),g=n(12),m=r(g),q=function(t){function e(){return o(this,e),i(this,(e.__proto__||Object.getPrototypeOf(e)).apply(this,arguments))}return l(e,t),e}(v.default);q.blotName="code",q.tagName="CODE";var w=function(t){function e(){return o(this,e),i(this,(e.__proto__||Object.getPrototypeOf(e)).apply(this,arguments))}return l(e,t),s(e,[{key:"delta",value:function(){var t=this,e=this.domNode.textContent;return e.endsWith("\n")&&(e=e.slice(0,-1)),e.split("\n").reduce(function(e,n){return e.insert(n).insert("\n",t.formats())},new f.default)}},{key:"format",value:function(t,n){if(t!==this.statics.blotName||!n){var r=this.descendant(m.default,this.length()-1),o=a(r,1),i=o[0];null!=i&&i.deleteAt(i.length()-1,1),u(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"format",this).call(this,t,n)}}},{key:"formatAt",value:function(t,n,r,o){if(0!==n&&null!=p.default.query(r,p.default.Scope.BLOCK)&&(r!==this.statics.blotName||o!==this.statics.formats(this.domNode))){var i=this.newlineIndex(t);if(!(i<0||i>=t+n)){var l=this.newlineIndex(t,!0)+1,a=i-l+1,s=this.isolate(l,a),u=s.next;s.format(r,o),u instanceof e&&u.formatAt(0,t-l+n-a,r,o)}}}},{key:"insertAt",value:function(t,e,n){if(null==n){var r=this.descendant(m.default,t),o=a(r,2),i=o[0],l=o[1];i.insertAt(l,e)}}},{key:"length",value:function(){var t=this.domNode.textContent.length;return this.domNode.textContent.endsWith("\n")?t:t+1}},{key:"newlineIndex",value:function(t){if(arguments.length>1&&void 0!==arguments[1]&&arguments[1])return this.domNode.textContent.slice(0,t).lastIndexOf("\n");var e=this.domNode.textContent.slice(t).indexOf("\n");return e>-1?t+e:-1}},{key:"optimize",value:function(){this.domNode.textContent.endsWith("\n")||this.appendChild(p.default.create("text","\n")),u(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"optimize",this).call(this);var t=this.next;null!=t&&t.prev===this&&t.statics.blotName===this.statics.blotName&&this.statics.formats(this.domNode)===t.statics.formats(t.domNode)&&(t.optimize(),t.moveChildren(this),t.remove())}},{key:"replace",value:function(t){u(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"replace",this).call(this,t),[].slice.call(this.domNode.querySelectorAll("*")).forEach(function(t){var e=p.default.find(t);null==e?t.parentNode.removeChild(t):e instanceof p.default.Embed?e.remove():e.unwrap()})}}],[{key:"create",value:function(t){var n=u(e.__proto__||Object.getPrototypeOf(e),"create",this).call(this,t);return n.setAttribute("spellcheck",!1),n}},{key:"formats",value:function(){return!0}}]),e}(y.default);w.blotName="code-block",w.tagName="PRE",w.TAB="  ",e.Code=q,e.default=w},function(t,e,n){"use strict";function r(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function o(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function i(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}Object.defineProperty(e,"__esModule",{value:!0});var l=function(){function t(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}return function(e,n,r){return n&&t(e.prototype,n),r&&t(e,r),e}}(),a=function t(e,n,r){null===e&&(e=Function.prototype);var o=Object.getOwnPropertyDescriptor(e,n);if(void 0===o){var i=Object.getPrototypeOf(e);return null===i?void 0:t(i,n,r)}if("value"in o)return o.value;var l=o.get;if(void 0!==l)return l.call(r)},s=n(7),u=function(t){return t&&t.__esModule?t:{default:t}}(s),c=function(t){function e(){return r(this,e),o(this,(e.__proto__||Object.getPrototypeOf(e)).apply(this,arguments))}return i(e,t),l(e,[{key:"insertInto",value:function(t,n){0===t.children.length?a(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"insertInto",this).call(this,t,n):this.remove()}},{key:"length",value:function(){return 0}},{key:"value",value:function(){return""}}],[{key:"value",value:function(){}}]),e}(u.default);c.blotName="break",c.tagName="BR",e.default=c},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}function o(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function i(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function l(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}function a(t){return t instanceof b.default||t instanceof y.BlockEmbed}Object.defineProperty(e,"__esModule",{value:!0});var s=function(){function t(t,e){var n=[],r=!0,o=!1,i=void 0;try{for(var l,a=t[Symbol.iterator]();!(r=(l=a.next()).done)&&(n.push(l.value),!e||n.length!==e);r=!0);}catch(t){o=!0,i=t}finally{try{!r&&a.return&&a.return()}finally{if(o)throw i}}return n}return function(e,n){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return t(e,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),u=function(){function t(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}return function(e,n,r){return n&&t(e.prototype,n),r&&t(e,r),e}}(),c=function t(e,n,r){null===e&&(e=Function.prototype);var o=Object.getOwnPropertyDescriptor(e,n);if(void 0===o){var i=Object.getPrototypeOf(e);return null===i?void 0:t(i,n,r)}if("value"in o)return o.value;var l=o.get;if(void 0!==l)return l.call(r)},f=n(0),d=r(f),p=n(5),h=r(p),y=n(4),b=r(y),v=n(17),g=r(v),m=n(24),q=r(m),w=n(16),_=r(w),k=function(t){function e(t,n){o(this,e);var r=i(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,t));return r.emitter=n.emitter,r.scrollingContainer=n.scrollingContainer,Array.isArray(n.whitelist)&&(r.whitelist=n.whitelist.reduce(function(t,e){return t[e]=!0,t},{})),r.optimize(),r.enable(),r}return l(e,t),u(e,[{key:"deleteAt",value:function(t,n){var r=this.line(t),o=s(r,2),i=o[0],l=o[1],a=this.line(t+n),u=s(a,1),f=u[0];if(c(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"deleteAt",this).call(this,t,n),null!=f&&i!==f&&l>0&&!(i instanceof y.BlockEmbed)&&!(f instanceof y.BlockEmbed)){f instanceof _.default&&f.deleteAt(f.length()-1,1);var d=f.children.head instanceof g.default?null:f.children.head;i.moveChildren(f,d),i.remove()}this.optimize()}},{key:"enable",value:function(){var t=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];this.domNode.setAttribute("contenteditable",t)}},{key:"formatAt",value:function(t,n,r,o){(null==this.whitelist||this.whitelist[r])&&(c(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"formatAt",this).call(this,t,n,r,o),this.optimize())}},{key:"insertAt",value:function(t,n,r){if(null==r||null==this.whitelist||this.whitelist[n]){if(t>=this.length())if(null==r||null==d.default.query(n,d.default.Scope.BLOCK)){var o=d.default.create(this.statics.defaultChild);this.appendChild(o),null==r&&n.endsWith("\n")&&(n=n.slice(0,-1)),o.insertAt(0,n,r)}else{var i=d.default.create(n,r);this.appendChild(i)}else c(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"insertAt",this).call(this,t,n,r);this.optimize()}}},{key:"insertBefore",value:function(t,n){if(t.statics.scope===d.default.Scope.INLINE_BLOT){var r=d.default.create(this.statics.defaultChild);r.appendChild(t),t=r}c(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"insertBefore",this).call(this,t,n)}},{key:"leaf",value:function(t){return this.path(t).pop()||[null,-1]}},{key:"line",value:function(t){return t===this.length()?this.line(t-1):this.descendant(a,t)}},{key:"lines",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:Number.MAX_VALUE;return function t(e,n,r){var o=[],i=r;return e.children.forEachAt(n,r,function(e,n,r){a(e)?o.push(e):e instanceof d.default.Container&&(o=o.concat(t(e,n,i))),i-=r}),o}(this,t,e)}},{key:"optimize",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];!0!==this.batch&&(c(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"optimize",this).call(this,t),t.length>0&&this.emitter.emit(h.default.events.SCROLL_OPTIMIZE,t))}},{key:"path",value:function(t){return c(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"path",this).call(this,t).slice(1)}},{key:"update",value:function(t){if(!0!==this.batch){var n=h.default.sources.USER;"string"==typeof t&&(n=t),Array.isArray(t)||(t=this.observer.takeRecords()),t.length>0&&this.emitter.emit(h.default.events.SCROLL_BEFORE_UPDATE,n,t),c(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"update",this).call(this,t.concat([])),t.length>0&&this.emitter.emit(h.default.events.SCROLL_UPDATE,n,t)}}}]),e}(d.default.Scroll);k.blotName="scroll",k.className="ql-editor",k.tagName="DIV",k.defaultChild="block",k.allowedChildren=[b.default,y.BlockEmbed,q.default],e.default=k},function(t,n){var r=function(){"use strict";function t(t,e){return null!=e&&t instanceof e}function n(r,o,i,l,f){function d(r,i){if(null===r)return null;if(0===i)return r;var b,v;if("object"!=typeof r)return r;if(t(r,s))b=new s;else if(t(r,u))b=new u;else if(t(r,c))b=new c(function(t,e){r.then(function(e){t(d(e,i-1))},function(t){e(d(t,i-1))})});else if(n.__isArray(r))b=[];else if(n.__isRegExp(r))b=new RegExp(r.source,a(r)),r.lastIndex&&(b.lastIndex=r.lastIndex);else if(n.__isDate(r))b=new Date(r.getTime());else{if(y&&e.isBuffer(r))return b=new e(r.length),r.copy(b),b;t(r,Error)?b=Object.create(r):void 0===l?(v=Object.getPrototypeOf(r),b=Object.create(v)):(b=Object.create(l),v=l)}if(o){var g=p.indexOf(r);if(-1!=g)return h[g];p.push(r),h.push(b)}t(r,s)&&r.forEach(function(t,e){var n=d(e,i-1),r=d(t,i-1);b.set(n,r)}),t(r,u)&&r.forEach(function(t){var e=d(t,i-1);b.add(e)});for(var m in r){var q;v&&(q=Object.getOwnPropertyDescriptor(v,m)),q&&null==q.set||(b[m]=d(r[m],i-1))}if(Object.getOwnPropertySymbols)for(var w=Object.getOwnPropertySymbols(r),m=0;m<w.length;m++){var _=w[m],k=Object.getOwnPropertyDescriptor(r,_);(!k||k.enumerable||f)&&(b[_]=d(r[_],i-1),k.enumerable||Object.defineProperty(b,_,{enumerable:!1}))}if(f)for(var O=Object.getOwnPropertyNames(r),m=0;m<O.length;m++){var x=O[m],k=Object.getOwnPropertyDescriptor(r,x);k&&k.enumerable||(b[x]=d(r[x],i-1),Object.defineProperty(b,x,{enumerable:!1}))}return b}"object"==typeof o&&(i=o.depth,l=o.prototype,f=o.includeNonEnumerable,o=o.circular);var p=[],h=[],y=void 0!==e;return void 0===o&&(o=!0),void 0===i&&(i=1/0),d(r,i)}function r(t){return Object.prototype.toString.call(t)}function o(t){return"object"==typeof t&&"[object Date]"===r(t)}function i(t){return"object"==typeof t&&"[object Array]"===r(t)}function l(t){return"object"==typeof t&&"[object RegExp]"===r(t)}function a(t){var e="";return t.global&&(e+="g"),t.ignoreCase&&(e+="i"),t.multiline&&(e+="m"),e}var s;try{s=Map}catch(t){s=function(){}}var u;try{u=Set}catch(t){u=function(){}}var c;try{c=Promise}catch(t){c=function(){}}return n.clonePrototype=function(t){if(null===t)return null;var e=function(){};return e.prototype=t,new e},n.__objToStr=r,n.__isDate=o,n.__isArray=i,n.__isRegExp=l,n.__getRegExpFlags=a,n}();"object"==typeof t&&t.exports&&(t.exports=r)},function(t,e,n){function r(t){this.ops=t,this.index=0,this.offset=0}var o=n(11),i=n(3),l={attributes:{compose:function(t,e,n){"object"!=typeof t&&(t={}),"object"!=typeof e&&(e={});var r=i(!0,{},e);n||(r=Object.keys(r).reduce(function(t,e){return null!=r[e]&&(t[e]=r[e]),t},{}));for(var o in t)void 0!==t[o]&&void 0===e[o]&&(r[o]=t[o]);return Object.keys(r).length>0?r:void 0},diff:function(t,e){"object"!=typeof t&&(t={}),"object"!=typeof e&&(e={});var n=Object.keys(t).concat(Object.keys(e)).reduce(function(n,r){return o(t[r],e[r])||(n[r]=void 0===e[r]?null:e[r]),n},{});return Object.keys(n).length>0?n:void 0},transform:function(t,e,n){if("object"!=typeof t)return e;if("object"==typeof e){if(!n)return e;var r=Object.keys(e).reduce(function(n,r){return void 0===t[r]&&(n[r]=e[r]),n},{});return Object.keys(r).length>0?r:void 0}}},iterator:function(t){return new r(t)},length:function(t){return"number"==typeof t.delete?t.delete:"number"==typeof t.retain?t.retain:"string"==typeof t.insert?t.insert.length:1}};r.prototype.hasNext=function(){return this.peekLength()<1/0},r.prototype.next=function(t){t||(t=1/0);var e=this.ops[this.index];if(e){var n=this.offset,r=l.length(e);if(t>=r-n?(t=r-n,this.index+=1,this.offset=0):this.offset+=t,"number"==typeof e.delete)return{delete:t};var o={};return e.attributes&&(o.attributes=e.attributes),"number"==typeof e.retain?o.retain=t:"string"==typeof e.insert?o.insert=e.insert.substr(n,t):o.insert=e.insert,o}return{retain:1/0}},r.prototype.peek=function(){return this.ops[this.index]},r.prototype.peekLength=function(){return this.ops[this.index]?l.length(this.ops[this.index])-this.offset:1/0},r.prototype.peekType=function(){return this.ops[this.index]?"number"==typeof this.ops[this.index].delete?"delete":"number"==typeof this.ops[this.index].retain?"retain":"insert":"retain"},t.exports=l},function(t,e,n){"use strict";function r(t){var e=a.find(t);if(null==e)try{e=a.create(t)}catch(n){e=a.create(a.Scope.INLINE),[].slice.call(t.childNodes).forEach(function(t){e.domNode.appendChild(t)}),t.parentNode.replaceChild(e.domNode,t),e.attach()}return e}var o=this&&this.__extends||function(){var t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])};return function(e,n){function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}();Object.defineProperty(e,"__esModule",{value:!0});var i=n(61),l=n(34),a=n(1),s=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),e.prototype.appendChild=function(t){this.insertBefore(t)},e.prototype.attach=function(){var e=this;t.prototype.attach.call(this),this.children=new i.default,[].slice.call(this.domNode.childNodes).reverse().forEach(function(t){try{var n=r(t);e.insertBefore(n,e.children.head)}catch(t){if(t instanceof a.ParchmentError)return;throw t}})},e.prototype.deleteAt=function(t,e){if(0===t&&e===this.length())return this.remove();this.children.forEachAt(t,e,function(t,e,n){t.deleteAt(e,n)})},e.prototype.descendant=function(t,n){var r=this.children.find(n),o=r[0],i=r[1];return null==t.blotName&&t(o)||null!=t.blotName&&o instanceof t?[o,i]:o instanceof e?o.descendant(t,i):[null,-1]},e.prototype.descendants=function(t,n,r){void 0===n&&(n=0),void 0===r&&(r=Number.MAX_VALUE);var o=[],i=r;return this.children.forEachAt(n,r,function(n,r,l){(null==t.blotName&&t(n)||null!=t.blotName&&n instanceof t)&&o.push(n),n instanceof e&&(o=o.concat(n.descendants(t,r,i))),i-=l}),o},e.prototype.detach=function(){this.children.forEach(function(t){t.detach()}),t.prototype.detach.call(this)},e.prototype.formatAt=function(t,e,n,r){this.children.forEachAt(t,e,function(t,e,o){t.formatAt(e,o,n,r)})},e.prototype.insertAt=function(t,e,n){var r=this.children.find(t),o=r[0],i=r[1];if(o)o.insertAt(i,e,n);else{var l=null==n?a.create("text",e):a.create(e,n);this.appendChild(l)}},e.prototype.insertBefore=function(t,e){if(null!=this.statics.allowedChildren&&!this.statics.allowedChildren.some(function(e){return t instanceof e}))throw new a.ParchmentError("Cannot insert "+t.statics.blotName+" into "+this.statics.blotName);t.insertInto(this,e)},e.prototype.length=function(){return this.children.reduce(function(t,e){return t+e.length()},0)},e.prototype.moveChildren=function(t,e){this.children.forEach(function(n){t.insertBefore(n,e)})},e.prototype.optimize=function(){if(t.prototype.optimize.call(this),0===this.children.length)if(null!=this.statics.defaultChild){var e=a.create(this.statics.defaultChild);this.appendChild(e),e.optimize()}else this.remove()},e.prototype.path=function(t,n){void 0===n&&(n=!1);var r=this.children.find(t,n),o=r[0],i=r[1],l=[[this,t]];return o instanceof e?l.concat(o.path(i,n)):(null!=o&&l.push([o,i]),l)},e.prototype.removeChild=function(t){this.children.remove(t)},e.prototype.replace=function(n){n instanceof e&&n.moveChildren(this),t.prototype.replace.call(this,n)},e.prototype.split=function(t,e){if(void 0===e&&(e=!1),!e){if(0===t)return this;if(t===this.length())return this.next}var n=this.clone();return this.parent.insertBefore(n,this.next),this.children.forEachAt(t,this.length(),function(t,r,o){t=t.split(r,e),n.appendChild(t)}),n},e.prototype.unwrap=function(){this.moveChildren(this.parent,this.next),this.remove()},e.prototype.update=function(t){var e=this,n=[],o=[];t.forEach(function(t){t.target===e.domNode&&"childList"===t.type&&(n.push.apply(n,t.addedNodes),o.push.apply(o,t.removedNodes))}),o.forEach(function(t){if(!(null!=t.parentNode&&"IFRAME"!==t.tagName&&document.body.compareDocumentPosition(t)&Node.DOCUMENT_POSITION_CONTAINED_BY)){var n=a.find(t);null!=n&&(null!=n.domNode.parentNode&&n.domNode.parentNode!==e.domNode||n.detach())}}),n.filter(function(t){return t.parentNode==e.domNode}).sort(function(t,e){return t===e?0:t.compareDocumentPosition(e)&Node.DOCUMENT_POSITION_FOLLOWING?1:-1}).forEach(function(t){var n=null;null!=t.nextSibling&&(n=a.find(t.nextSibling));var o=r(t);o.next==n&&null!=o.next||(null!=o.parent&&o.parent.removeChild(e),e.insertBefore(o,n))})},e}(l.default);e.default=s},function(t,e,n){"use strict";var r=this&&this.__extends||function(){var t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])};return function(e,n){function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}();Object.defineProperty(e,"__esModule",{value:!0});var o=n(13),i=n(32),l=n(21),a=n(1),s=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return r(e,t),e.formats=function(t){return"string"==typeof this.tagName||(Array.isArray(this.tagName)?t.tagName.toLowerCase():void 0)},e.prototype.attach=function(){t.prototype.attach.call(this),this.attributes=new i.default(this.domNode)},e.prototype.format=function(t,e){var n=a.query(t);n instanceof o.default?this.attributes.attribute(n,e):e&&(null==n||t===this.statics.blotName&&this.formats()[t]===e||this.replaceWith(t,e))},e.prototype.formats=function(){var t=this.attributes.values(),e=this.statics.formats(this.domNode);return null!=e&&(t[this.statics.blotName]=e),t},e.prototype.replaceWith=function(e,n){var r=t.prototype.replaceWith.call(this,e,n);return this.attributes.copy(r),r},e.prototype.update=function(e){var n=this;t.prototype.update.call(this,e),e.some(function(t){return t.target===n.domNode&&"attributes"===t.type})&&this.attributes.build()},e.prototype.wrap=function(n,r){var o=t.prototype.wrap.call(this,n,r);return o instanceof e&&o.statics.scope===this.statics.scope&&this.attributes.move(o),o},e}(l.default);e.default=s},function(t,e,n){"use strict";var r=this&&this.__extends||function(){var t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])};return function(e,n){function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}();Object.defineProperty(e,"__esModule",{value:!0});var o=n(34),i=n(1),l=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return r(e,t),e.value=function(t){return!0},e.prototype.index=function(t,e){return t!==this.domNode?-1:Math.min(e,1)},e.prototype.position=function(t,e){var n=[].indexOf.call(this.parent.domNode.childNodes,this.domNode);return t>0&&(n+=1),[this.parent.domNode,n]},e.prototype.value=function(){return t={},t[this.statics.blotName]=this.statics.value(this.domNode)||!0,t;var t},e}(o.default);l.scope=i.Scope.INLINE_BLOT,e.default=l},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}function o(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function i(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function l(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}Object.defineProperty(e,"__esModule",{value:!0});var a=n(0),s=r(a),u=n(4),c=r(u),f=function(t){function e(){return o(this,e),i(this,(e.__proto__||Object.getPrototypeOf(e)).apply(this,arguments))}return l(e,t),e}(s.default.Container);f.allowedChildren=[c.default,u.BlockEmbed,f],e.default=f},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}function o(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function i(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function l(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}Object.defineProperty(e,"__esModule",{value:!0});var a=function(){function t(t,e){var n=[],r=!0,o=!1,i=void 0;try{for(var l,a=t[Symbol.iterator]();!(r=(l=a.next()).done)&&(n.push(l.value),!e||n.length!==e);r=!0);}catch(t){o=!0,i=t}finally{try{!r&&a.return&&a.return()}finally{if(o)throw i}}return n}return function(e,n){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return t(e,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),s=function t(e,n,r){null===e&&(e=Function.prototype);var o=Object.getOwnPropertyDescriptor(e,n);if(void 0===o){var i=Object.getPrototypeOf(e);return null===i?void 0:t(i,n,r)}if("value"in o)return o.value;var l=o.get;if(void 0!==l)return l.call(r)},u=function(){function t(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}return function(e,n,r){return n&&t(e.prototype,n),r&&t(e,r),e}}(),c=n(0),f=r(c),d=n(7),p=r(d),h=n(12),y=r(h),b=n(5),v=r(b),g=function(t){function e(t,n){o(this,e);var r=i(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,t));return r.selection=n,r.textNode=document.createTextNode(e.CONTENTS),r.domNode.appendChild(r.textNode),r._length=0,r}return l(e,t),u(e,null,[{key:"value",value:function(){}}]),u(e,[{key:"detach",value:function(){null!=this.parent&&this.parent.removeChild(this)}},{key:"format",value:function(t,n){if(0!==this._length)return s(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"format",this).call(this,t,n);for(var r=this,o=0;null!=r&&r.statics.scope!==f.default.Scope.BLOCK_BLOT;)o+=r.offset(r.parent),r=r.parent;null!=r&&(this._length=e.CONTENTS.length,r.optimize(),r.formatAt(o,e.CONTENTS.length,t,n),this._length=0)}},{key:"index",value:function(t,n){return t===this.textNode?0:s(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"index",this).call(this,t,n)}},{key:"length",value:function(){return this._length}},{key:"position",value:function(){return[this.textNode,this.textNode.data.length]}},{key:"remove",value:function(){s(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"remove",this).call(this),this.parent=null}},{key:"restore",value:function(){var t=this;if(!this.selection.composing&&null!=this.parent){var n=this.textNode,r=this.selection.getNativeRange(),o=void 0,i=void 0,l=void 0;if(null!=r&&r.start.node===n&&r.end.node===n){var s=[n,r.start.offset,r.end.offset];o=s[0],i=s[1],l=s[2]}for(;null!=this.domNode.lastChild&&this.domNode.lastChild!==this.textNode;)this.domNode.parentNode.insertBefore(this.domNode.lastChild,this.domNode);if(this.textNode.data!==e.CONTENTS){var u=this.textNode.data.split(e.CONTENTS).join("");this.next instanceof y.default?(o=this.next.domNode,this.next.insertAt(0,u),this.textNode.data=e.CONTENTS):(this.textNode.data=u,this.parent.insertBefore(f.default.create(this.textNode),this),this.textNode=document.createTextNode(e.CONTENTS),this.domNode.appendChild(this.textNode))}this.remove(),null!=i&&this.selection.emitter.once(v.default.events.SCROLL_OPTIMIZE,function(){var e=[i,l].map(function(t){return Math.max(0,Math.min(o.data.length,t-1))}),n=a(e,2);i=n[0],l=n[1],t.selection.setNativeRange(o,i,o,l)})}}},{key:"update",value:function(t){var e=this;t.forEach(function(t){"characterData"===t.type&&t.target===e.textNode&&e.restore()})}},{key:"value",value:function(){return""}}]),e}(p.default);g.blotName="cursor",g.className="ql-cursor",g.tagName="span",g.CONTENTS="\ufeff",e.default=g},function(t,e,n){"use strict";function r(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function o(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function i(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}Object.defineProperty(e,"__esModule",{value:!0}),e.ColorStyle=e.ColorClass=e.ColorAttributor=void 0;var l=function(){function t(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}return function(e,n,r){return n&&t(e.prototype,n),r&&t(e,r),e}}(),a=function t(e,n,r){null===e&&(e=Function.prototype);var o=Object.getOwnPropertyDescriptor(e,n);if(void 0===o){var i=Object.getPrototypeOf(e);return null===i?void 0:t(i,n,r)}if("value"in o)return o.value;var l=o.get;if(void 0!==l)return l.call(r)},s=n(0),u=function(t){return t&&t.__esModule?t:{default:t}}(s),c=function(t){function e(){return r(this,e),o(this,(e.__proto__||Object.getPrototypeOf(e)).apply(this,arguments))}return i(e,t),l(e,[{key:"value",value:function(t){var n=a(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"value",this).call(this,t);return n.startsWith("rgb(")?(n=n.replace(/^[^\d]+/,"").replace(/[^\d]+$/,""),"#"+n.split(",").map(function(t){return("00"+parseInt(t).toString(16)).slice(-2)}).join("")):n}}]),e}(u.default.Attributor.Style),f=new u.default.Attributor.Class("color","ql-color",{scope:u.default.Scope.INLINE}),d=new c("color","color",{scope:u.default.Scope.INLINE});e.ColorAttributor=c,e.ColorClass=f,e.ColorStyle=d},function(t,e,n){"use strict";function r(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function o(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function i(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}function l(t,e){var n=document.createElement("a");n.href=t;var r=n.href.slice(0,n.href.indexOf(":"));return e.indexOf(r)>-1}Object.defineProperty(e,"__esModule",{value:!0}),e.sanitize=e.default=void 0;var a=function(){function t(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}return function(e,n,r){return n&&t(e.prototype,n),r&&t(e,r),e}}(),s=function t(e,n,r){null===e&&(e=Function.prototype);var o=Object.getOwnPropertyDescriptor(e,n);if(void 0===o){var i=Object.getPrototypeOf(e);return null===i?void 0:t(i,n,r)}if("value"in o)return o.value;var l=o.get;if(void 0!==l)return l.call(r)},u=n(8),c=function(t){return t&&t.__esModule?t:{default:t}}(u),f=function(t){function e(){return r(this,e),o(this,(e.__proto__||Object.getPrototypeOf(e)).apply(this,arguments))}return i(e,t),a(e,[{key:"format",value:function(t,n){if(t!==this.statics.blotName||!n)return s(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"format",this).call(this,t,n);n=this.constructor.sanitize(n),this.domNode.setAttribute("href",n)}}],[{key:"create",value:function(t){var n=s(e.__proto__||Object.getPrototypeOf(e),"create",this).call(this,t);return t=this.sanitize(t),n.setAttribute("href",t),n.setAttribute("target","_blank"),n}},{key:"formats",value:function(t){return t.getAttribute("href")}},{key:"sanitize",value:function(t){return l(t,["http","https","mailto"])?t:this.SANITIZED_URL}}]),e}(c.default);f.blotName="link",f.tagName="A",f.SANITIZED_URL="about:blank",e.default=f,e.sanitize=l},function(t,e,n){"use strict";function r(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0});var o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},i=function(){function t(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}return function(e,n,r){return n&&t(e.prototype,n),r&&t(e,r),e}}(),l=n(88),a=function(t){return t&&t.__esModule?t:{default:t}}(l),s=function(){function t(e){var n=this;r(this,t),this.select=e,this.container=document.createElement("span"),this.buildPicker(),this.select.style.display="none",this.select.parentNode.insertBefore(this.container,this.select),this.label.addEventListener("mousedown",function(){n.container.classList.toggle("ql-expanded")}),this.select.addEventListener("change",this.update.bind(this))}return i(t,[{key:"buildItem",value:function(t){var e=this,n=document.createElement("span");return n.classList.add("ql-picker-item"),t.hasAttribute("value")&&n.setAttribute("data-value",t.getAttribute("value")),t.textContent&&n.setAttribute("data-label",t.textContent),n.addEventListener("click",function(){e.selectItem(n,!0)}),n}},{key:"buildLabel",value:function(){var t=document.createElement("span");return t.classList.add("ql-picker-label"),t.innerHTML=a.default,this.container.appendChild(t),t}},{key:"buildOptions",value:function(){var t=this,e=document.createElement("span");e.classList.add("ql-picker-options"),[].slice.call(this.select.options).forEach(function(n){var r=t.buildItem(n);e.appendChild(r),n.hasAttribute("selected")&&t.selectItem(r)}),this.container.appendChild(e)}},{key:"buildPicker",value:function(){var t=this;[].slice.call(this.select.attributes).forEach(function(e){t.container.setAttribute(e.name,e.value)}),this.container.classList.add("ql-picker"),this.label=this.buildLabel(),this.buildOptions()}},{key:"close",value:function(){this.container.classList.remove("ql-expanded")}},{key:"selectItem",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=this.container.querySelector(".ql-selected");if(t!==n&&(null!=n&&n.classList.remove("ql-selected"),null!=t&&(t.classList.add("ql-selected"),this.select.selectedIndex=[].indexOf.call(t.parentNode.children,t),t.hasAttribute("data-value")?this.label.setAttribute("data-value",t.getAttribute("data-value")):this.label.removeAttribute("data-value"),t.hasAttribute("data-label")?this.label.setAttribute("data-label",t.getAttribute("data-label")):this.label.removeAttribute("data-label"),e))){if("function"==typeof Event)this.select.dispatchEvent(new Event("change"));else if("object"===("undefined"==typeof Event?"undefined":o(Event))){var r=document.createEvent("Event");r.initEvent("change",!0,!0),this.select.dispatchEvent(r)}this.close()}}},{key:"update",value:function(){var t=void 0;if(this.select.selectedIndex>-1){var e=this.container.querySelector(".ql-picker-options").children[this.select.selectedIndex];t=this.select.options[this.select.selectedIndex],this.selectItem(e)}else this.selectItem(null);var n=null!=t&&t!==this.select.querySelector("option[selected]");this.label.classList.toggle("ql-active",n)}}]),t}();e.default=s},function(t,e,n){"use strict";function r(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0});var o=function(){function t(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}return function(e,n,r){return n&&t(e.prototype,n),r&&t(e,r),e}}(),i=function(){function t(e,n){r(this,t),this.quill=e,this.options=n,this.modules={}}return o(t,[{key:"init",value:function(){var t=this;Object.keys(this.options.modules).forEach(function(e){null==t.modules[e]&&t.addModule(e)})}},{key:"addModule",value:function(t){var e=this.quill.constructor.import("modules/"+t);return this.modules[t]=new e(this.quill,this.options.modules[t]||{}),this.modules[t]}}]),t}();i.DEFAULTS={modules:{}},i.themes={default:i},e.default=i},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}function o(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function i(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function l(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}function a(t,e){if(!(0===t.index||this.quill.getLength()<=1)){var n=this.quill.getLine(t.index),r=y(n,1),o=r[0],i={};if(0===e.offset){var l=o.formats(),a=this.quill.getFormat(t.index-1,1);i=O.default.attributes.diff(l,a)||{}}var s=/[\uD800-\uDBFF][\uDC00-\uDFFF]$/.test(e.prefix)?2:1;this.quill.deleteText(t.index-s,s,j.default.sources.USER),Object.keys(i).length>0&&this.quill.formatLine(t.index-s,s,i,j.default.sources.USER),this.quill.selection.scrollIntoView()}}function s(t,e){var n=/^[\uD800-\uDBFF][\uDC00-\uDFFF]/.test(e.suffix)?2:1;t.index>=this.quill.getLength()-n||this.quill.deleteText(t.index,n,j.default.sources.USER)}function u(t){this.quill.deleteText(t,j.default.sources.USER),this.quill.setSelection(t.index,j.default.sources.SILENT),this.quill.selection.scrollIntoView()}function c(t,e){var n=this;t.length>0&&this.quill.scroll.deleteAt(t.index,t.length);var r=Object.keys(e.format).reduce(function(t,n){return E.default.query(n,E.default.Scope.BLOCK)&&!Array.isArray(e.format[n])&&(t[n]=e.format[n]),t},{});this.quill.insertText(t.index,"\n",r,j.default.sources.USER),this.quill.setSelection(t.index+1,j.default.sources.SILENT),this.quill.selection.scrollIntoView(),Object.keys(e.format).forEach(function(t){null==r[t]&&(Array.isArray(e.format[t])||"link"!==t&&n.quill.format(t,e.format[t],j.default.sources.USER))})}function f(t){return{key:R.keys.TAB,shiftKey:!t,format:{"code-block":!0},handler:function(e){var n=E.default.query("code-block"),r=e.index,o=e.length,i=this.quill.scroll.descendant(n,r),l=y(i,2),a=l[0],s=l[1];if(null!=a){var u=this.quill.getIndex(a),c=a.newlineIndex(s,!0)+1,f=a.newlineIndex(u+s+o),d=a.domNode.textContent.slice(c,f).split("\n");s=0,d.forEach(function(e,i){t?(a.insertAt(c+s,n.TAB),s+=n.TAB.length,0===i?r+=n.TAB.length:o+=n.TAB.length):e.startsWith(n.TAB)&&(a.deleteAt(c+s,n.TAB.length),s-=n.TAB.length,0===i?r-=n.TAB.length:o-=n.TAB.length),s+=e.length+1}),this.quill.update(j.default.sources.USER),this.quill.setSelection(r,o,j.default.sources.SILENT)}}}}function d(t){return{key:t[0].toUpperCase(),shortKey:!0,handler:function(e,n){this.quill.format(t,!n.format[t],j.default.sources.USER)}}}function p(t){if("string"==typeof t||"number"==typeof t)return p({key:t});if("object"===(void 0===t?"undefined":h(t))&&(t=(0,g.default)(t,!1)),"string"==typeof t.key)if(null!=R.keys[t.key.toUpperCase()])t.key=R.keys[t.key.toUpperCase()];else{if(1!==t.key.length)return null;t.key=t.key.toUpperCase().charCodeAt(0)}return t.shortKey&&(t[L]=t.shortKey,delete t.shortKey),t}Object.defineProperty(e,"__esModule",{value:!0}),e.SHORTKEY=e.default=void 0;var h="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},y=function(){function t(t,e){var n=[],r=!0,o=!1,i=void 0;try{for(var l,a=t[Symbol.iterator]();!(r=(l=a.next()).done)&&(n.push(l.value),!e||n.length!==e);r=!0);}catch(t){o=!0,i=t}finally{try{!r&&a.return&&a.return()}finally{if(o)throw i}}return n}return function(e,n){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return t(e,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),b=function(){function t(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}return function(e,n,r){return n&&t(e.prototype,n),r&&t(e,r),e}}(),v=n(19),g=r(v),m=n(11),q=r(m),w=n(3),_=r(w),k=n(20),O=r(k),x=n(0),E=r(x),A=n(6),j=r(A),N=n(10),T=r(N),P=n(9),S=r(P),C=(0,T.default)("quill:keyboard"),L=/Mac/i.test(navigator.platform)?"metaKey":"ctrlKey",R=function(t){function e(t,n){o(this,e);var r=i(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,t,n));return r.bindings={},Object.keys(r.options.bindings).forEach(function(t){r.options.bindings[t]&&r.addBinding(r.options.bindings[t])}),r.addBinding({key:e.keys.ENTER,shiftKey:null},c),r.addBinding({key:e.keys.ENTER,metaKey:null,ctrlKey:null,altKey:null},function(){}),/Firefox/i.test(navigator.userAgent)?(r.addBinding({key:e.keys.BACKSPACE},{collapsed:!0},a),r.addBinding({key:e.keys.DELETE},{collapsed:!0},s)):(r.addBinding({key:e.keys.BACKSPACE},{collapsed:!0,prefix:/^.?$/},a),r.addBinding({key:e.keys.DELETE},{collapsed:!0,suffix:/^.?$/},s)),r.addBinding({key:e.keys.BACKSPACE},{collapsed:!1},u),r.addBinding({key:e.keys.DELETE},{collapsed:!1},u),r.addBinding({key:e.keys.BACKSPACE},{empty:!0,shortKey:!0},a),r.listen(),r}return l(e,t),b(e,null,[{key:"match",value:function(t,e){return e=p(e),!["altKey","ctrlKey","metaKey","shiftKey"].some(function(n){return!!e[n]!==t[n]&&null!==e[n]})&&e.key===(t.which||t.keyCode)}}]),b(e,[{key:"addBinding",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=p(t);if(null==r||null==r.key)return C.warn("Attempted to add invalid keyboard binding",r);"function"==typeof e&&(e={handler:e}),"function"==typeof n&&(n={handler:n}),r=(0,_.default)(r,e,n),this.bindings[r.key]=this.bindings[r.key]||[],this.bindings[r.key].push(r)}},{key:"listen",value:function(){var t=this;this.quill.root.addEventListener("keydown",function(n){if(!n.defaultPrevented){var r=n.which||n.keyCode,o=(t.bindings[r]||[]).filter(function(t){return e.match(n,t)});if(0!==o.length){var i=t.quill.getSelection();if(null!=i&&t.quill.hasFocus()){var l=t.quill.getLine(i.index),a=y(l,2),s=a[0],u=a[1],c=t.quill.getLeaf(i.index),f=y(c,2),d=f[0],p=f[1],b=0===i.length?[d,p]:t.quill.getLeaf(i.index+i.length),v=y(b,2),g=v[0],m=v[1],w=d instanceof E.default.Text?d.value().slice(0,p):"",_=g instanceof E.default.Text?g.value().slice(m):"",k={collapsed:0===i.length,empty:0===i.length&&s.length()<=1,format:t.quill.getFormat(i),offset:u,prefix:w,suffix:_};o.some(function(e){if(null!=e.collapsed&&e.collapsed!==k.collapsed)return!1;if(null!=e.empty&&e.empty!==k.empty)return!1;if(null!=e.offset&&e.offset!==k.offset)return!1;if(Array.isArray(e.format)){if(e.format.every(function(t){return null==k.format[t]}))return!1}else if("object"===h(e.format)&&!Object.keys(e.format).every(function(t){return!0===e.format[t]?null!=k.format[t]:!1===e.format[t]?null==k.format[t]:(0,q.default)(e.format[t],k.format[t])}))return!1;return!(null!=e.prefix&&!e.prefix.test(k.prefix))&&(!(null!=e.suffix&&!e.suffix.test(k.suffix))&&!0!==e.handler.call(t,i,k))})&&n.preventDefault()}}}})}}]),e}(S.default);R.keys={BACKSPACE:8,TAB:9,ENTER:13,ESCAPE:27,LEFT:37,UP:38,RIGHT:39,DOWN:40,DELETE:46},R.DEFAULTS={bindings:{bold:d("bold"),italic:d("italic"),underline:d("underline"),indent:{key:R.keys.TAB,format:["blockquote","indent","list"],handler:function(t,e){if(e.collapsed&&0!==e.offset)return!0;this.quill.format("indent","+1",j.default.sources.USER)}},outdent:{key:R.keys.TAB,shiftKey:!0,format:["blockquote","indent","list"],handler:function(t,e){if(e.collapsed&&0!==e.offset)return!0;this.quill.format("indent","-1",j.default.sources.USER)}},"outdent backspace":{key:R.keys.BACKSPACE,collapsed:!0,format:["blockquote","indent","list"],offset:0,handler:function(t,e){null!=e.format.indent?this.quill.format("indent","-1",j.default.sources.USER):null!=e.format.blockquote?this.quill.format("blockquote",!1,j.default.sources.USER):null!=e.format.list&&this.quill.format("list",!1,j.default.sources.USER)}},"indent code-block":f(!0),"outdent code-block":f(!1),"remove tab":{key:R.keys.TAB,shiftKey:!0,collapsed:!0,prefix:/\t$/,handler:function(t){this.quill.deleteText(t.index-1,1,j.default.sources.USER)}},tab:{key:R.keys.TAB,handler:function(t,e){e.collapsed||this.quill.scroll.deleteAt(t.index,t.length),this.quill.insertText(t.index,"\t",j.default.sources.USER),this.quill.setSelection(t.index+1,j.default.sources.SILENT)}},"list empty enter":{key:R.keys.ENTER,collapsed:!0,format:["list"],empty:!0,handler:function(t,e){this.quill.format("list",!1,j.default.sources.USER),e.format.indent&&this.quill.format("indent",!1,j.default.sources.USER)}},"checklist enter":{key:R.keys.ENTER,collapsed:!0,format:{list:"checked"},handler:function(t){this.quill.scroll.insertAt(t.index,"\n");var e=this.quill.getLine(t.index+1);y(e,1)[0].format("list","unchecked"),this.quill.update(j.default.sources.USER),this.quill.setSelection(t.index+1,j.default.sources.SILENT),this.quill.selection.scrollIntoView()}},"header enter":{key:R.keys.ENTER,collapsed:!0,format:["header"],suffix:/^$/,handler:function(t){this.quill.scroll.insertAt(t.index,"\n"),this.quill.formatText(t.index+1,1,"header",!1,j.default.sources.USER),this.quill.setSelection(t.index+1,j.default.sources.SILENT),this.quill.selection.scrollIntoView()}},"list autofill":{key:" ",collapsed:!0,format:{list:!1},prefix:/^\s*?(1\.|-|\[ \]|\[x\])$/,handler:function(t,e){if(null!=this.quill.scroll.whitelist&&!this.quill.scroll.whitelist.list)return!0;var n=e.prefix.length,r=void 0;switch(e.prefix.trim()){case"[ ]":r="unchecked";break;case"[x]":r="checked";break;case"-":r="bullet";break;default:r="ordered"}this.quill.scroll.deleteAt(t.index-n,n),this.quill.formatLine(t.index-n,1,"list",r,j.default.sources.USER),this.quill.setSelection(t.index-n,j.default.sources.SILENT)}},"code exit":{key:R.keys.ENTER,collapsed:!0,format:["code-block"],prefix:/\n\n$/,suffix:/^\s+$/,handler:function(t){this.quill.format("code-block",!1,j.default.sources.USER),this.quill.deleteText(t.index-2,1,j.default.sources.USER)}}}},e.default=R,e.SHORTKEY=L},function(t,e,n){"use strict";function r(t,e){return(t.getAttribute("class")||"").split(/\s+/).filter(function(t){return 0===t.indexOf(e+"-")})}var o=this&&this.__extends||function(){var t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])};return function(e,n){function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}();Object.defineProperty(e,"__esModule",{value:!0});var i=n(13),l=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),e.keys=function(t){return(t.getAttribute("class")||"").split(/\s+/).map(function(t){return t.split("-").slice(0,-1).join("-")})},e.prototype.add=function(t,e){return!!this.canAdd(t,e)&&(this.remove(t),t.classList.add(this.keyName+"-"+e),!0)},e.prototype.remove=function(t){r(t,this.keyName).forEach(function(e){t.classList.remove(e)}),0===t.classList.length&&t.removeAttribute("class")},e.prototype.value=function(t){var e=r(t,this.keyName)[0]||"",n=e.slice(this.keyName.length+1);return this.canAdd(t,n)?n:""},e}(i.default);e.default=l},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(13),o=n(31),i=n(33),l=n(1),a=function(){function t(t){this.attributes={},this.domNode=t,this.build()}return t.prototype.attribute=function(t,e){e?t.add(this.domNode,e)&&(null!=t.value(this.domNode)?this.attributes[t.attrName]=t:delete this.attributes[t.attrName]):(t.remove(this.domNode),delete this.attributes[t.attrName])},t.prototype.build=function(){var t=this;this.attributes={};var e=r.default.keys(this.domNode),n=o.default.keys(this.domNode),a=i.default.keys(this.domNode);e.concat(n).concat(a).forEach(function(e){var n=l.query(e,l.Scope.ATTRIBUTE);n instanceof r.default&&(t.attributes[n.attrName]=n)})},t.prototype.copy=function(t){var e=this;Object.keys(this.attributes).forEach(function(n){var r=e.attributes[n].value(e.domNode);t.format(n,r)})},t.prototype.move=function(t){var e=this;this.copy(t),Object.keys(this.attributes).forEach(function(t){e.attributes[t].remove(e.domNode)}),this.attributes={}},t.prototype.values=function(){var t=this;return Object.keys(this.attributes).reduce(function(e,n){return e[n]=t.attributes[n].value(t.domNode),e},{})},t}();e.default=a},function(t,e,n){"use strict";function r(t){var e=t.split("-"),n=e.slice(1).map(function(t){return t[0].toUpperCase()+t.slice(1)}).join("");return e[0]+n}var o=this&&this.__extends||function(){var t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])};return function(e,n){function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}();Object.defineProperty(e,"__esModule",{value:!0});var i=n(13),l=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),e.keys=function(t){return(t.getAttribute("style")||"").split(";").map(function(t){return t.split(":")[0].trim()})},e.prototype.add=function(t,e){return!!this.canAdd(t,e)&&(t.style[r(this.keyName)]=e,!0)},e.prototype.remove=function(t){t.style[r(this.keyName)]="",t.getAttribute("style")||t.removeAttribute("style")},e.prototype.value=function(t){var e=t.style[r(this.keyName)];return this.canAdd(t,e)?e:""},e}(i.default);e.default=l},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(1),o=function(){function t(t){this.domNode=t,this.attach()}return Object.defineProperty(t.prototype,"statics",{get:function(){return this.constructor},enumerable:!0,configurable:!0}),t.create=function(t){if(null==this.tagName)throw new r.ParchmentError("Blot definition missing tagName");var e;return Array.isArray(this.tagName)?("string"==typeof t&&(t=t.toUpperCase(),parseInt(t).toString()===t&&(t=parseInt(t))),e="number"==typeof t?document.createElement(this.tagName[t-1]):this.tagName.indexOf(t)>-1?document.createElement(t):document.createElement(this.tagName[0])):e=document.createElement(this.tagName),this.className&&e.classList.add(this.className),e},t.prototype.attach=function(){this.domNode[r.DATA_KEY]={blot:this}},t.prototype.clone=function(){var t=this.domNode.cloneNode();return r.create(t)},t.prototype.detach=function(){null!=this.parent&&this.parent.removeChild(this),delete this.domNode[r.DATA_KEY]},t.prototype.deleteAt=function(t,e){this.isolate(t,e).remove()},t.prototype.formatAt=function(t,e,n,o){var i=this.isolate(t,e);if(null!=r.query(n,r.Scope.BLOT)&&o)i.wrap(n,o);else if(null!=r.query(n,r.Scope.ATTRIBUTE)){var l=r.create(this.statics.scope);i.wrap(l),l.format(n,o)}},t.prototype.insertAt=function(t,e,n){var o=null==n?r.create("text",e):r.create(e,n),i=this.split(t);this.parent.insertBefore(o,i)},t.prototype.insertInto=function(t,e){if(null!=this.parent&&this.parent.children.remove(this),t.children.insertBefore(this,e),null!=e)var n=e.domNode;null!=this.next&&this.domNode.nextSibling==n||t.domNode.insertBefore(this.domNode,void 0!==n?n:null),this.parent=t},t.prototype.isolate=function(t,e){var n=this.split(t);return n.split(e),n},t.prototype.length=function(){return 1},t.prototype.offset=function(t){return void 0===t&&(t=this.parent),null==this.parent||this==t?0:this.parent.children.offset(this)+this.parent.offset(t)},t.prototype.optimize=function(){null!=this.domNode[r.DATA_KEY]&&delete this.domNode[r.DATA_KEY].mutations},t.prototype.remove=function(){null!=this.domNode.parentNode&&this.domNode.parentNode.removeChild(this.domNode),this.detach()},t.prototype.replace=function(t){null!=t.parent&&(t.parent.insertBefore(this,t.next),t.remove())},t.prototype.replaceWith=function(t,e){var n="string"==typeof t?r.create(t,e):t;return n.replace(this),n},t.prototype.split=function(t,e){return 0===t?this:this.next},t.prototype.update=function(t){void 0===t&&(t=[])},t.prototype.wrap=function(t,e){var n="string"==typeof t?r.create(t,e):t;return null!=this.parent&&this.parent.insertBefore(n,this.next),n.appendChild(this),n},t}();o.blotName="abstract",e.default=o},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}var o=n(0),i=r(o),l=n(6),a=r(l),s=n(4),u=r(s),c=n(17),f=r(c),d=n(24),p=r(d),h=n(25),y=r(h),b=n(7),v=r(b),g=n(8),m=r(g),q=n(18),w=r(q),_=n(12),k=r(_),O=n(45),x=r(O),E=n(42),A=r(E),j=n(30),N=r(j);a.default.register({"blots/block":u.default,"blots/block/embed":s.BlockEmbed,"blots/break":f.default,"blots/container":p.default,"blots/cursor":y.default,"blots/embed":v.default,"blots/inline":m.default,"blots/scroll":w.default,"blots/text":k.default,"modules/clipboard":x.default,"modules/history":A.default,"modules/keyboard":N.default}),i.default.register(u.default,f.default,y.default,m.default,w.default,k.default),t.exports=a.default},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.AlignStyle=e.AlignClass=e.AlignAttribute=void 0;var r=n(0),o=function(t){return t&&t.__esModule?t:{default:t}}(r),i={scope:o.default.Scope.BLOCK,whitelist:["right","center","justify"]},l=new o.default.Attributor.Attribute("align","align",i),a=new o.default.Attributor.Class("align","ql-align",i),s=new o.default.Attributor.Style("align","text-align",i);e.AlignAttribute=l,e.AlignClass=a,e.AlignStyle=s},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.BackgroundStyle=e.BackgroundClass=void 0;var r=n(0),o=function(t){return t&&t.__esModule?t:{default:t}}(r),i=n(26),l=new o.default.Attributor.Class("background","ql-bg",{scope:o.default.Scope.INLINE}),a=new i.ColorAttributor("background","background-color",{scope:o.default.Scope.INLINE});e.BackgroundClass=l,e.BackgroundStyle=a},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.DirectionStyle=e.DirectionClass=e.DirectionAttribute=void 0;var r=n(0),o=function(t){return t&&t.__esModule?t:{default:t}}(r),i={scope:o.default.Scope.BLOCK,whitelist:["rtl"]},l=new o.default.Attributor.Attribute("direction","dir",i),a=new o.default.Attributor.Class("direction","ql-direction",i),s=new o.default.Attributor.Style("direction","direction",i);e.DirectionAttribute=l,e.DirectionClass=a,e.DirectionStyle=s},function(t,e,n){"use strict";function r(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function o(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function i(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}Object.defineProperty(e,"__esModule",{value:!0}),e.FontClass=e.FontStyle=void 0;var l=function(){function t(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}return function(e,n,r){return n&&t(e.prototype,n),r&&t(e,r),e}}(),a=function t(e,n,r){null===e&&(e=Function.prototype);var o=Object.getOwnPropertyDescriptor(e,n);if(void 0===o){var i=Object.getPrototypeOf(e);return null===i?void 0:t(i,n,r)}if("value"in o)return o.value;var l=o.get;if(void 0!==l)return l.call(r)},s=n(0),u=function(t){return t&&t.__esModule?t:{default:t}}(s),c={scope:u.default.Scope.INLINE,whitelist:["serif","monospace"]},f=new u.default.Attributor.Class("font","ql-font",c),d=function(t){function e(){return r(this,e),o(this,(e.__proto__||Object.getPrototypeOf(e)).apply(this,arguments))}return i(e,t),l(e,[{key:"value",value:function(t){return a(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"value",this).call(this,t).replace(/["']/g,"")}}]),e}(u.default.Attributor.Style),p=new d("font","font-family",c);e.FontStyle=p,e.FontClass=f},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.SizeStyle=e.SizeClass=void 0;var r=n(0),o=function(t){return t&&t.__esModule?t:{default:t}}(r),i=new o.default.Attributor.Class("size","ql-size",{scope:o.default.Scope.INLINE,whitelist:["small","large","huge"]}),l=new o.default.Attributor.Style("size","font-size",{scope:o.default.Scope.INLINE,whitelist:["10px","18px","32px"]});e.SizeClass=i,e.SizeStyle=l},function(t,e,n){"use strict";t.exports={align:{"":n(79),center:n(77),right:n(80),justify:n(78)},background:n(81),blockquote:n(82),bold:n(83),clean:n(84),code:n(55),"code-block":n(55),color:n(85),direction:{"":n(86),rtl:n(87)},float:{center:n(89),full:n(90),left:n(91),right:n(92)},formula:n(93),header:{1:n(95),2:n(94)},italic:n(98),image:n(96),indent:{"+1":n(97),"-1":n(103)},link:n(99),list:{ordered:n(102),bullet:n(100),check:n(101)},script:{sub:n(105),super:n(106)},strike:n(104),underline:n(107),video:n(108)}},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}function o(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function i(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function l(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}function a(t){var e=t.ops[t.ops.length-1];return null!=e&&(null!=e.insert?"string"==typeof e.insert&&e.insert.endsWith("\n"):null!=e.attributes&&Object.keys(e.attributes).some(function(t){return null!=f.default.query(t,f.default.Scope.BLOCK)}))}function s(t){var e=t.reduce(function(t,e){return t+=e.delete||0},0),n=t.length()-e;return a(t)&&(n-=1),n}Object.defineProperty(e,"__esModule",{value:!0}),e.getLastChangeIndex=e.default=void 0;var u=function(){function t(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}return function(e,n,r){return n&&t(e.prototype,n),r&&t(e,r),e}}(),c=n(0),f=r(c),d=n(6),p=r(d),h=n(9),y=r(h),b=function(t){function e(t,n){o(this,e);var r=i(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,t,n));return r.lastRecorded=0,r.ignoreChange=!1,r.clear(),r.quill.on(p.default.events.EDITOR_CHANGE,function(t,e,n,o){t!==p.default.events.TEXT_CHANGE||r.ignoreChange||(r.options.userOnly&&o!==p.default.sources.USER?r.transform(e):r.record(e,n))}),r.quill.keyboard.addBinding({key:"Z",shortKey:!0},r.undo.bind(r)),r.quill.keyboard.addBinding({key:"Z",shortKey:!0,shiftKey:!0},r.redo.bind(r)),/Win/i.test(navigator.platform)&&r.quill.keyboard.addBinding({key:"Y",shortKey:!0},r.redo.bind(r)),r}return l(e,t),u(e,[{key:"change",value:function(t,e){if(0!==this.stack[t].length){var n=this.stack[t].pop();this.lastRecorded=0,this.ignoreChange=!0,this.quill.updateContents(n[t],p.default.sources.USER),this.ignoreChange=!1;var r=s(n[t]);this.quill.setSelection(r),this.quill.selection.scrollIntoView(),this.stack[e].push(n)}}},{key:"clear",value:function(){this.stack={undo:[],redo:[]}}},{key:"record",value:function(t,e){if(0!==t.ops.length){this.stack.redo=[];var n=this.quill.getContents().diff(e),r=Date.now();if(this.lastRecorded+this.options.delay>r&&this.stack.undo.length>0){var o=this.stack.undo.pop();n=n.compose(o.undo),t=o.redo.compose(t)}else this.lastRecorded=r;this.stack.undo.push({redo:t,undo:n}),this.stack.undo.length>this.options.maxStack&&this.stack.undo.shift()}}},{key:"redo",value:function(){this.change("redo","undo")}},{key:"transform",value:function(t){this.stack.undo.forEach(function(e){e.undo=t.transform(e.undo,!0),e.redo=t.transform(e.redo,!0)}),this.stack.redo.forEach(function(e){e.undo=t.transform(e.undo,!0),e.redo=t.transform(e.redo,!0)})}},{key:"undo",value:function(){this.change("undo","redo")}}]),e}(y.default);b.DEFAULTS={delay:1e3,maxStack:100,userOnly:!1},e.default=b,e.getLastChangeIndex=s},function(t,e,n){"use strict";var r=document.createElement("div");if(r.classList.toggle("test-class",!1),r.classList.contains("test-class")){var o=DOMTokenList.prototype.toggle;DOMTokenList.prototype.toggle=function(t,e){return arguments.length>1&&!this.contains(t)==!e?e:o.call(this,t)}}String.prototype.startsWith||(String.prototype.startsWith=function(t,e){return e=e||0,this.substr(e,t.length)===t}),String.prototype.endsWith||(String.prototype.endsWith=function(t,e){var n=this.toString();("number"!=typeof e||!isFinite(e)||Math.floor(e)!==e||e>n.length)&&(e=n.length),e-=t.length;var r=n.indexOf(t,e);return-1!==r&&r===e}),Array.prototype.find||Object.defineProperty(Array.prototype,"find",{value:function(t){if(null===this)throw new TypeError("Array.prototype.find called on null or undefined");if("function"!=typeof t)throw new TypeError("predicate must be a function");for(var e,n=Object(this),r=n.length>>>0,o=arguments[1],i=0;i<r;i++)if(e=n[i],t.call(o,e,i,n))return e}}),document.addEventListener("DOMContentLoaded",function(){document.execCommand("enableObjectResizing",!1,!1)})},function(t,e,n){"use strict";function r(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function o(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function i(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}Object.defineProperty(e,"__esModule",{value:!0});var l=function(){function t(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}return function(e,n,r){return n&&t(e.prototype,n),r&&t(e,r),e}}(),a=function t(e,n,r){null===e&&(e=Function.prototype);var o=Object.getOwnPropertyDescriptor(e,n);if(void 0===o){var i=Object.getPrototypeOf(e);return null===i?void 0:t(i,n,r)}if("value"in o)return o.value;var l=o.get;if(void 0!==l)return l.call(r)},s=n(8),u=function(t){return t&&t.__esModule?t:{default:t}}(s),c=function(t){function e(){return r(this,e),o(this,(e.__proto__||Object.getPrototypeOf(e)).apply(this,arguments))}return i(e,t),l(e,[{key:"optimize",value:function(){a(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"optimize",this).call(this),this.domNode.tagName!==this.statics.tagName[0]&&this.replaceWith(this.statics.blotName)}}],[{key:"create",value:function(){return a(e.__proto__||Object.getPrototypeOf(e),"create",this).call(this)}},{key:"formats",value:function(){return!0}}]),e}(u.default);c.blotName="bold",c.tagName=["STRONG","B"],e.default=c},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}function o(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function i(t){if(Array.isArray(t)){for(var e=0,n=Array(t.length);e<t.length;e++)n[e]=t[e];return n}return Array.from(t)}function l(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function a(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function s(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}function u(t){if(t.nodeType!==Node.ELEMENT_NODE)return{};return t["__ql-computed-style"]||(t["__ql-computed-style"]=window.getComputedStyle(t))}function c(t,e){for(var n="",r=t.ops.length-1;r>=0&&n.length<e.length;--r){var o=t.ops[r];if("string"!=typeof o.insert)break;n=o.insert+n}return n.slice(-1*e.length)===e}function f(t){if(0===t.childNodes.length)return!1;var e=u(t);return["block","list-item"].indexOf(e.display)>-1}function d(t,e,n){return t.nodeType===t.TEXT_NODE?n.reduce(function(e,n){return n(t,e)},new x.default):t.nodeType===t.ELEMENT_NODE?[].reduce.call(t.childNodes||[],function(r,o){var i=d(o,e,n);return o.nodeType===t.ELEMENT_NODE&&(i=e.reduce(function(t,e){return e(o,t)},i),i=(o[z]||[]).reduce(function(t,e){return e(o,t)},i)),r.concat(i)},new x.default):new x.default}function p(t,e,n){return n.compose((new x.default).retain(n.length(),o({},t,!0)))}function h(t,e){var n=A.default.Attributor.Attribute.keys(t),r=A.default.Attributor.Class.keys(t),o=A.default.Attributor.Style.keys(t),i={};return n.concat(r).concat(o).forEach(function(e){var n=A.default.query(e,A.default.Scope.ATTRIBUTE);null!=n&&(i[n.attrName]=n.value(t),i[n.attrName])||(null!=H[e]&&(n=H[e],i[n.attrName]=n.value(t)||void 0),null!=Y[e]&&(n=Y[e],i[n.attrName]=n.value(t)||void 0))}),Object.keys(i).length>0&&(e=e.compose((new x.default).retain(e.length(),i))),e}function y(t,e){var n=A.default.query(t);if(null==n)return e;if(n.prototype instanceof A.default.Embed){var r={},i=n.value(t);null!=i&&(r[n.blotName]=i,e=(new x.default).insert(r,n.formats(t)))}else if("function"==typeof n.formats){var l=o({},n.blotName,n.formats(t));e=e.compose((new x.default).retain(e.length(),l))}return e}function b(t,e){return c(e,"\n")||e.insert("\n"),e}function v(){return new x.default}function g(t,e){return f(t)&&!c(e,"\n")&&e.insert("\n"),e}function m(t,e){if(f(t)&&null!=t.nextElementSibling&&!c(e,"\n\n")){var n=t.offsetHeight+parseFloat(u(t).marginTop)+parseFloat(u(t).marginBottom);t.nextElementSibling.offsetTop>t.offsetTop+1.5*n&&e.insert("\n")}return e}function q(t,e){var n={},r=t.style||{};return r.fontStyle&&"italic"===u(t).fontStyle&&(n.italic=!0),r.fontWeight&&"bold"===u(t).fontWeight&&(n.bold=!0),Object.keys(n).length>0&&(e=e.compose((new x.default).retain(e.length(),n))),parseFloat(r.textIndent||0)>0&&(e=(new x.default).insert("\t").concat(e)),e}function w(t,e){var n=t.data;if("O:P"===t.parentNode.tagName)return e.insert(n.trim());if(!u(t.parentNode).whiteSpace.startsWith("pre")){var r=function(t,e){return e=e.replace(/[^\u00a0]/g,""),e.length<1&&t?" ":e};n=n.replace(/\r\n/g," ").replace(/\n/g," "),n=n.replace(/\s\s+/g,r.bind(r,!0)),(null==t.previousSibling&&f(t.parentNode)||null!=t.previousSibling&&f(t.previousSibling))&&(n=n.replace(/^\s+/,r.bind(r,!1))),(null==t.nextSibling&&f(t.parentNode)||null!=t.nextSibling&&f(t.nextSibling))&&(n=n.replace(/\s+$/,r.bind(r,!1)))}return e.insert(n)}Object.defineProperty(e,"__esModule",{value:!0}),e.matchText=e.matchSpacing=e.matchNewline=e.matchBlot=e.matchAttributor=e.default=void 0;var _=function(){function t(t,e){var n=[],r=!0,o=!1,i=void 0;try{for(var l,a=t[Symbol.iterator]();!(r=(l=a.next()).done)&&(n.push(l.value),!e||n.length!==e);r=!0);}catch(t){o=!0,i=t}finally{try{!r&&a.return&&a.return()}finally{if(o)throw i}}return n}return function(e,n){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return t(e,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),k=function(){function t(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}return function(e,n,r){return n&&t(e.prototype,n),r&&t(e,r),e}}(),O=n(2),x=r(O),E=n(0),A=r(E),j=n(6),N=r(j),T=n(10),P=r(T),S=n(9),C=r(S),L=n(36),R=n(37),M=n(26),B=n(38),I=n(39),U=n(40),D=(0,P.default)("quill:clipboard"),z="__ql-matcher",F=[[Node.TEXT_NODE,w],["br",b],[Node.ELEMENT_NODE,g],[Node.ELEMENT_NODE,y],[Node.ELEMENT_NODE,m],[Node.ELEMENT_NODE,h],[Node.ELEMENT_NODE,q],["b",p.bind(p,"bold")],["i",p.bind(p,"italic")],["style",v]],H=[L.AlignAttribute,B.DirectionAttribute].reduce(function(t,e){return t[e.keyName]=e,t},{}),Y=[L.AlignStyle,R.BackgroundStyle,M.ColorStyle,B.DirectionStyle,I.FontStyle,U.SizeStyle].reduce(function(t,e){return t[e.keyName]=e,t},{}),K=function(t){function e(t,n){l(this,e);var r=a(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,t,n));return r.quill.root.addEventListener("paste",r.onPaste.bind(r)),r.container=r.quill.addContainer("ql-clipboard"),r.container.setAttribute("contenteditable",!0),r.container.setAttribute("tabindex",-1),r.matchers=[],F.concat(r.options.matchers).forEach(function(t){r.addMatcher.apply(r,i(t))}),r}return s(e,t),k(e,[{key:"addMatcher",value:function(t,e){this.matchers.push([t,e])}},{key:"convert",value:function(t){"string"==typeof t&&(this.container.innerHTML=t);var e=this.prepareMatching(),n=_(e,2),r=n[0],o=n[1],i=d(this.container,r,o);return c(i,"\n")&&null==i.ops[i.ops.length-1].attributes&&(i=i.compose((new x.default).retain(i.length()-1).delete(1))),D.log("convert",this.container.innerHTML,i),this.container.innerHTML="",i}},{key:"dangerouslyPasteHTML",value:function(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:N.default.sources.API;if("string"==typeof t)return this.quill.setContents(this.convert(t),e);var r=this.convert(e);return this.quill.updateContents((new x.default).retain(t).concat(r),n)}},{key:"onPaste",value:function(t){var e=this;if(!t.defaultPrevented&&this.quill.isEnabled()){var n=this.quill.getSelection(),r=(new x.default).retain(n.index),o=this.quill.scrollingContainer.scrollTop;this.container.focus(),setTimeout(function(){e.quill.selection.update(N.default.sources.SILENT),r=r.concat(e.convert()).delete(n.length),e.quill.updateContents(r,N.default.sources.USER),e.quill.setSelection(r.length()-n.length,N.default.sources.SILENT),e.quill.scrollingContainer.scrollTop=o,e.quill.selection.scrollIntoView()},1)}}},{key:"prepareMatching",value:function(){var t=this,e=[],n=[];return this.matchers.forEach(function(r){var o=_(r,2),i=o[0],l=o[1];switch(i){case Node.TEXT_NODE:n.push(l);break;case Node.ELEMENT_NODE:e.push(l);break;default:[].forEach.call(t.container.querySelectorAll(i),function(t){t[z]=t[z]||[],t[z].push(l)})}}),[e,n]}}]),e}(C.default);K.DEFAULTS={matchers:[]},e.default=K,e.matchAttributor=h,e.matchBlot=y,e.matchNewline=g,e.matchSpacing=m,e.matchText=w},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}function o(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function i(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function l(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function a(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}function s(t,e,n){var r=document.createElement("button");r.setAttribute("type","button"),r.classList.add("ql-"+e),null!=n&&(r.value=n),t.appendChild(r)}function u(t,e){Array.isArray(e[0])||(e=[e]),e.forEach(function(e){var n=document.createElement("span");n.classList.add("ql-formats"),e.forEach(function(t){if("string"==typeof t)s(n,t);else{var e=Object.keys(t)[0],r=t[e];Array.isArray(r)?c(n,e,r):s(n,e,r)}}),t.appendChild(n)})}function c(t,e,n){var r=document.createElement("select");r.classList.add("ql-"+e),n.forEach(function(t){var e=document.createElement("option");!1!==t?e.setAttribute("value",t):e.setAttribute("selected","selected"),r.appendChild(e)}),t.appendChild(r)}Object.defineProperty(e,"__esModule",{value:!0}),e.addControls=e.default=void 0;var f=function(){function t(t,e){var n=[],r=!0,o=!1,i=void 0;try{for(var l,a=t[Symbol.iterator]();!(r=(l=a.next()).done)&&(n.push(l.value),!e||n.length!==e);r=!0);}catch(t){o=!0,i=t}finally{try{!r&&a.return&&a.return()}finally{if(o)throw i}}return n}return function(e,n){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return t(e,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),d=function(){function t(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}return function(e,n,r){return n&&t(e.prototype,n),r&&t(e,r),e}}(),p=n(2),h=r(p),y=n(0),b=r(y),v=n(6),g=r(v),m=n(10),q=r(m),w=n(9),_=r(w),k=(0,q.default)("quill:toolbar"),O=function(t){function e(t,n){i(this,e);var r=l(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,t,n));if(Array.isArray(r.options.container)){var o=document.createElement("div");u(o,r.options.container),t.container.parentNode.insertBefore(o,t.container),r.container=o}else"string"==typeof r.options.container?r.container=document.querySelector(r.options.container):r.container=r.options.container;if(!(r.container instanceof HTMLElement)){var a;return a=k.error("Container required for toolbar",r.options),l(r,a)}return r.container.classList.add("ql-toolbar"),r.controls=[],r.handlers={},Object.keys(r.options.handlers).forEach(function(t){r.addHandler(t,r.options.handlers[t])}),[].forEach.call(r.container.querySelectorAll("button, select"),function(t){r.attach(t)}),r.quill.on(g.default.events.EDITOR_CHANGE,function(t,e){t===g.default.events.SELECTION_CHANGE&&r.update(e)}),r.quill.on(g.default.events.SCROLL_OPTIMIZE,function(){var t=r.quill.selection.getRange(),e=f(t,1),n=e[0];r.update(n)}),r}return a(e,t),d(e,[{key:"addHandler",value:function(t,e){this.handlers[t]=e}},{key:"attach",value:function(t){var e=this,n=[].find.call(t.classList,function(t){return 0===t.indexOf("ql-")});if(n){if(n=n.slice("ql-".length),"BUTTON"===t.tagName&&t.setAttribute("type","button"),null==this.handlers[n]){if(null!=this.quill.scroll.whitelist&&null==this.quill.scroll.whitelist[n])return void k.warn("ignoring attaching to disabled format",n,t);if(null==b.default.query(n))return void k.warn("ignoring attaching to nonexistent format",n,t)}var r="SELECT"===t.tagName?"change":"click";t.addEventListener(r,function(r){var i=void 0;if("SELECT"===t.tagName){if(t.selectedIndex<0)return;var l=t.options[t.selectedIndex];i=!l.hasAttribute("selected")&&(l.value||!1)}else i=!t.classList.contains("ql-active")&&(t.value||!t.hasAttribute("value")),r.preventDefault();e.quill.focus();var a=e.quill.selection.getRange(),s=f(a,1),u=s[0];if(null!=e.handlers[n])e.handlers[n].call(e,i);else if(b.default.query(n).prototype instanceof b.default.Embed){if(!(i=prompt("Enter "+n)))return;e.quill.updateContents((new h.default).retain(u.index).delete(u.length).insert(o({},n,i)),g.default.sources.USER)}else e.quill.format(n,i,g.default.sources.USER);e.update(u)}),this.controls.push([n,t])}}},{key:"update",value:function(t){var e=null==t?{}:this.quill.getFormat(t);this.controls.forEach(function(n){var r=f(n,2),o=r[0],i=r[1];if("SELECT"===i.tagName){var l=void 0;if(null==t)l=null;else if(null==e[o])l=i.querySelector("option[selected]");else if(!Array.isArray(e[o])){var a=e[o];"string"==typeof a&&(a=a.replace(/\"/g,'\\"')),l=i.querySelector('option[value="'+a+'"]')}null==l?(i.value="",i.selectedIndex=-1):l.selected=!0}else if(null==t)i.classList.remove("ql-active");else if(i.hasAttribute("value")){var s=e[o]===i.getAttribute("value")||null!=e[o]&&e[o].toString()===i.getAttribute("value")||null==e[o]&&!i.getAttribute("value");i.classList.toggle("ql-active",s)}else i.classList.toggle("ql-active",null!=e[o])})}}]),e}(_.default);O.DEFAULTS={},O.DEFAULTS={container:null,handlers:{clean:function(){var t=this,e=this.quill.getSelection();if(null!=e)if(0==e.length){var n=this.quill.getFormat();Object.keys(n).forEach(function(e){null!=b.default.query(e,b.default.Scope.INLINE)&&t.quill.format(e,!1)})}else this.quill.removeFormat(e,g.default.sources.USER)},direction:function(t){var e=this.quill.getFormat().align;"rtl"===t&&null==e?this.quill.format("align","right",g.default.sources.USER):t||"right"!==e||this.quill.format("align",!1,g.default.sources.USER),this.quill.format("direction",t,g.default.sources.USER)},indent:function(t){var e=this.quill.getSelection(),n=this.quill.getFormat(e),r=parseInt(n.indent||0);if("+1"===t||"-1"===t){var o="+1"===t?1:-1;"rtl"===n.direction&&(o*=-1),this.quill.format("indent",r+o,g.default.sources.USER)}},link:function(t){!0===t&&(t=prompt("Enter link URL:")),this.quill.format("link",t,g.default.sources.USER)},list:function(t){var e=this.quill.getSelection(),n=this.quill.getFormat(e);"check"===t?"checked"===n.list||"unchecked"===n.list?this.quill.format("list",!1,g.default.sources.USER):this.quill.format("list","unchecked",g.default.sources.USER):this.quill.format("list",t,g.default.sources.USER)}}},e.default=O,e.addControls=u},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}function o(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function i(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function l(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}function a(t,e){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];e.forEach(function(e){var r=document.createElement("option");e===n?r.setAttribute("selected","selected"):r.setAttribute("value",e),t.appendChild(r)})}Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.BaseTooltip=void 0;var s=function(){function t(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}return function(e,n,r){return n&&t(e.prototype,n),r&&t(e,r),e}}(),u=function t(e,n,r){null===e&&(e=Function.prototype);var o=Object.getOwnPropertyDescriptor(e,n);if(void 0===o){var i=Object.getPrototypeOf(e);return null===i?void 0:t(i,n,r)}if("value"in o)return o.value;var l=o.get;if(void 0!==l)return l.call(r)},c=n(3),f=r(c),d=n(2),p=r(d),h=n(5),y=r(h),b=n(30),v=r(b),g=n(29),m=r(g),q=n(48),w=r(q),_=n(49),k=r(_),O=n(28),x=r(O),E=n(50),A=r(E),j=[!1,"center","right","justify"],N=["#000000","#e60000","#ff9900","#ffff00","#008a00","#0066cc","#9933ff","#ffffff","#facccc","#ffebcc","#ffffcc","#cce8cc","#cce0f5","#ebd6ff","#bbbbbb","#f06666","#ffc266","#ffff66","#66b966","#66a3e0","#c285ff","#888888","#a10000","#b26b00","#b2b200","#006100","#0047b2","#6b24b2","#444444","#5c0000","#663d00","#666600","#003700","#002966","#3d1466"],T=[!1,"serif","monospace"],P=["1","2","3",!1],S=["small",!1,"large","huge"],C=function(t){function e(t,n){o(this,e);var r=i(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,t,n)),l=function e(n){if(!document.body.contains(t.root))return document.body.removeEventListener("click",e);null==r.tooltip||r.tooltip.root.contains(n.target)||document.activeElement===r.tooltip.textbox||r.quill.hasFocus()||r.tooltip.hide(),null!=r.pickers&&r.pickers.forEach(function(t){t.container.contains(n.target)||t.close()})};return document.body.addEventListener("click",l),r}return l(e,t),s(e,[{key:"addModule",value:function(t){var n=u(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"addModule",this).call(this,t);return"toolbar"===t&&this.extendToolbar(n),n}},{key:"buildButtons",value:function(t,e){t.forEach(function(t){(t.getAttribute("class")||"").split(/\s+/).forEach(function(n){if(n.startsWith("ql-")&&(n=n.slice("ql-".length),null!=e[n]))if("direction"===n)t.innerHTML=e[n][""]+e[n].rtl;else if("string"==typeof e[n])t.innerHTML=e[n];else{var r=t.value||"";null!=r&&e[n][r]&&(t.innerHTML=e[n][r])}})})}},{key:"buildPickers",value:function(t,e){var n=this;this.pickers=t.map(function(t){if(t.classList.contains("ql-align"))return null==t.querySelector("option")&&a(t,j),new k.default(t,e.align);if(t.classList.contains("ql-background")||t.classList.contains("ql-color")){var n=t.classList.contains("ql-background")?"background":"color";return null==t.querySelector("option")&&a(t,N,"background"===n?"#ffffff":"#000000"),new w.default(t,e[n])}return null==t.querySelector("option")&&(t.classList.contains("ql-font")?a(t,T):t.classList.contains("ql-header")?a(t,P):t.classList.contains("ql-size")&&a(t,S)),new x.default(t)});var r=function(){n.pickers.forEach(function(t){t.update()})};this.quill.on(y.default.events.SELECTION_CHANGE,r).on(y.default.events.SCROLL_OPTIMIZE,r)}}]),e}(m.default);C.DEFAULTS=(0,f.default)(!0,{},m.default.DEFAULTS,{modules:{toolbar:{handlers:{formula:function(){this.quill.theme.tooltip.edit("formula")},image:function(){var t=this,e=this.container.querySelector("input.ql-image[type=file]");null==e&&(e=document.createElement("input"),e.setAttribute("type","file"),e.setAttribute("accept","image/png, image/gif, image/jpeg, image/bmp, image/x-icon, image/svg+xml"),e.classList.add("ql-image"),e.addEventListener("change",function(){if(null!=e.files&&null!=e.files[0]){var n=new FileReader;n.onload=function(n){var r=t.quill.getSelection(!0);t.quill.updateContents((new p.default).retain(r.index).delete(r.length).insert({image:n.target.result}),y.default.sources.USER),e.value=""},n.readAsDataURL(e.files[0])}}),this.container.appendChild(e)),e.click()},video:function(){this.quill.theme.tooltip.edit("video")}}}}});var L=function(t){function e(t,n){o(this,e);var r=i(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,t,n));return r.textbox=r.root.querySelector('input[type="text"]'),r.listen(),r}return l(e,t),s(e,[{key:"listen",value:function(){var t=this;this.textbox.addEventListener("keydown",function(e){v.default.match(e,"enter")?(t.save(),e.preventDefault()):v.default.match(e,"escape")&&(t.cancel(),e.preventDefault())})}},{key:"cancel",value:function(){this.hide()}},{key:"edit",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"link",e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;this.root.classList.remove("ql-hidden"),this.root.classList.add("ql-editing"),null!=e?this.textbox.value=e:t!==this.root.getAttribute("data-mode")&&(this.textbox.value=""),this.position(this.quill.getBounds(this.quill.selection.savedRange)),this.textbox.select(),this.textbox.setAttribute("placeholder",this.textbox.getAttribute("data-"+t)||""),this.root.setAttribute("data-mode",t)}},{key:"restoreFocus",value:function(){var t=this.quill.scrollingContainer.scrollTop;this.quill.focus(),this.quill.scrollingContainer.scrollTop=t}},{key:"save",value:function(){var t=this.textbox.value;switch(this.root.getAttribute("data-mode")){case"link":var e=this.quill.root.scrollTop;this.linkRange?(this.quill.formatText(this.linkRange,"link",t,y.default.sources.USER),delete this.linkRange):(this.restoreFocus(),this.quill.format("link",t,y.default.sources.USER)),this.quill.root.scrollTop=e;break;case"video":var n=t.match(/^(https?):\/\/(www\.)?youtube\.com\/watch.*v=([a-zA-Z0-9_-]+)/)||t.match(/^(https?):\/\/(www\.)?youtu\.be\/([a-zA-Z0-9_-]+)/);n?t=n[1]+"://www.youtube.com/embed/"+n[3]+"?showinfo=0":(n=t.match(/^(https?):\/\/(www\.)?vimeo\.com\/(\d+)/))&&(t=n[1]+"://player.vimeo.com/video/"+n[3]+"/");case"formula":if(!t)break;var r=this.quill.getSelection(!0),o=r.index+r.length;null!=r&&(this.quill.insertEmbed(o,this.root.getAttribute("data-mode"),t,y.default.sources.USER),"formula"===this.root.getAttribute("data-mode")&&this.quill.insertText(o+1," ",y.default.sources.USER),this.quill.setSelection(o+2,y.default.sources.USER))}this.textbox.value="",this.hide()}}]),e}(A.default);e.BaseTooltip=L,e.default=C},function(t,e,n){"use strict";function r(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function o(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function i(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}Object.defineProperty(e,"__esModule",{value:!0});var l=function(){function t(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}return function(e,n,r){return n&&t(e.prototype,n),r&&t(e,r),e}}(),a=function t(e,n,r){null===e&&(e=Function.prototype);var o=Object.getOwnPropertyDescriptor(e,n);if(void 0===o){var i=Object.getPrototypeOf(e);return null===i?void 0:t(i,n,r)}if("value"in o)return o.value;var l=o.get;if(void 0!==l)return l.call(r)},s=n(28),u=function(t){return t&&t.__esModule?t:{default:t}}(s),c=function(t){function e(t,n){r(this,e);var i=o(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,t));return i.label.innerHTML=n,i.container.classList.add("ql-color-picker"),[].slice.call(i.container.querySelectorAll(".ql-picker-item"),0,7).forEach(function(t){t.classList.add("ql-primary")}),i}return i(e,t),l(e,[{key:"buildItem",value:function(t){var n=a(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"buildItem",this).call(this,t);return n.style.backgroundColor=t.getAttribute("value")||"",n}},{key:"selectItem",value:function(t,n){a(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"selectItem",this).call(this,t,n);var r=this.label.querySelector(".ql-color-label"),o=t?t.getAttribute("data-value")||"":"";r&&("line"===r.tagName?r.style.stroke=o:r.style.fill=o)}}]),e}(u.default);e.default=c},function(t,e,n){"use strict";function r(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function o(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function i(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}Object.defineProperty(e,"__esModule",{value:!0});var l=function(){function t(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}return function(e,n,r){return n&&t(e.prototype,n),r&&t(e,r),e}}(),a=function t(e,n,r){null===e&&(e=Function.prototype);var o=Object.getOwnPropertyDescriptor(e,n);if(void 0===o){var i=Object.getPrototypeOf(e);return null===i?void 0:t(i,n,r)}if("value"in o)return o.value;var l=o.get;if(void 0!==l)return l.call(r)},s=n(28),u=function(t){return t&&t.__esModule?t:{default:t}}(s),c=function(t){function e(t,n){r(this,e);var i=o(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,t));return i.container.classList.add("ql-icon-picker"),[].forEach.call(i.container.querySelectorAll(".ql-picker-item"),function(t){t.innerHTML=n[t.getAttribute("data-value")||""]}),i.defaultItem=i.container.querySelector(".ql-selected"),i.selectItem(i.defaultItem),i}return i(e,t),l(e,[{key:"selectItem",value:function(t,n){a(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"selectItem",this).call(this,t,n),t=t||this.defaultItem,this.label.innerHTML=t.innerHTML}}]),e}(u.default);e.default=c},function(t,e,n){"use strict";function r(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0});var o=function(){function t(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}return function(e,n,r){return n&&t(e.prototype,n),r&&t(e,r),e}}(),i=function(){function t(e,n){var o=this;r(this,t),this.quill=e,this.boundsContainer=n||document.body,this.root=e.addContainer("ql-tooltip"),this.root.innerHTML=this.constructor.TEMPLATE,this.quill.root===this.quill.scrollingContainer&&this.quill.root.addEventListener("scroll",function(){o.root.style.marginTop=-1*o.quill.root.scrollTop+"px"}),this.hide()}return o(t,[{key:"hide",value:function(){this.root.classList.add("ql-hidden")}},{key:"position",value:function(t){var e=t.left+t.width/2-this.root.offsetWidth/2,n=t.bottom+this.quill.root.scrollTop;this.root.style.left=e+"px",this.root.style.top=n+"px",this.root.classList.remove("ql-flip");var r=this.boundsContainer.getBoundingClientRect(),o=this.root.getBoundingClientRect(),i=0;if(o.right>r.right&&(i=r.right-o.right,this.root.style.left=e+i+"px"),o.left<r.left&&(i=r.left-o.left,this.root.style.left=e+i+"px"),o.bottom>r.bottom){var l=o.bottom-o.top,a=t.bottom-t.top+l;this.root.style.top=n-a+"px",this.root.classList.add("ql-flip")}return i}},{key:"show",value:function(){this.root.classList.remove("ql-editing"),this.root.classList.remove("ql-hidden")}}]),t}();e.default=i},function(t,e){function n(t){return"[object Arguments]"==Object.prototype.toString.call(t)}function r(t){return t&&"object"==typeof t&&"number"==typeof t.length&&Object.prototype.hasOwnProperty.call(t,"callee")&&!Object.prototype.propertyIsEnumerable.call(t,"callee")||!1}var o="[object Arguments]"==function(){return Object.prototype.toString.call(arguments)}();e=t.exports=o?n:r,e.supported=n,e.unsupported=r},function(t,e){function n(t){var e=[];for(var n in t)e.push(n);return e}e=t.exports="function"==typeof Object.keys?Object.keys:n,e.shim=n},function(t,e){"use strict";function n(){}function r(t,e,n){this.fn=t,this.context=e,this.once=n||!1}function o(){this._events=new n,this._eventsCount=0}var i=Object.prototype.hasOwnProperty,l="~";Object.create&&(n.prototype=Object.create(null),(new n).__proto__||(l=!1)),o.prototype.eventNames=function(){var t,e,n=[];if(0===this._eventsCount)return n;for(e in t=this._events)i.call(t,e)&&n.push(l?e.slice(1):e);return Object.getOwnPropertySymbols?n.concat(Object.getOwnPropertySymbols(t)):n},o.prototype.listeners=function(t,e){var n=l?l+t:t,r=this._events[n];if(e)return!!r;if(!r)return[];if(r.fn)return[r.fn];for(var o=0,i=r.length,a=new Array(i);o<i;o++)a[o]=r[o].fn;return a},o.prototype.emit=function(t,e,n,r,o,i){var a=l?l+t:t;if(!this._events[a])return!1;var s,u,c=this._events[a],f=arguments.length;if(c.fn){switch(c.once&&this.removeListener(t,c.fn,void 0,!0),f){case 1:return c.fn.call(c.context),!0;case 2:return c.fn.call(c.context,e),!0;case 3:return c.fn.call(c.context,e,n),!0;case 4:return c.fn.call(c.context,e,n,r),!0;case 5:return c.fn.call(c.context,e,n,r,o),!0;case 6:return c.fn.call(c.context,e,n,r,o,i),!0}for(u=1,s=new Array(f-1);u<f;u++)s[u-1]=arguments[u];c.fn.apply(c.context,s)}else{var d,p=c.length;for(u=0;u<p;u++)switch(c[u].once&&this.removeListener(t,c[u].fn,void 0,!0),f){case 1:c[u].fn.call(c[u].context);break;case 2:c[u].fn.call(c[u].context,e);break;case 3:c[u].fn.call(c[u].context,e,n);break;case 4:c[u].fn.call(c[u].context,e,n,r);break;default:if(!s)for(d=1,s=new Array(f-1);d<f;d++)s[d-1]=arguments[d];c[u].fn.apply(c[u].context,s)}}return!0},o.prototype.on=function(t,e,n){var o=new r(e,n||this),i=l?l+t:t;return this._events[i]?this._events[i].fn?this._events[i]=[this._events[i],o]:this._events[i].push(o):(this._events[i]=o,this._eventsCount++),this},o.prototype.once=function(t,e,n){var o=new r(e,n||this,!0),i=l?l+t:t;return this._events[i]?this._events[i].fn?this._events[i]=[this._events[i],o]:this._events[i].push(o):(this._events[i]=o,this._eventsCount++),this},o.prototype.removeListener=function(t,e,r,o){var i=l?l+t:t;if(!this._events[i])return this;if(!e)return 0==--this._eventsCount?this._events=new n:delete this._events[i],this;var a=this._events[i];if(a.fn)a.fn!==e||o&&!a.once||r&&a.context!==r||(0==--this._eventsCount?this._events=new n:delete this._events[i]);else{for(var s=0,u=[],c=a.length;s<c;s++)(a[s].fn!==e||o&&!a[s].once||r&&a[s].context!==r)&&u.push(a[s]);u.length?this._events[i]=1===u.length?u[0]:u:0==--this._eventsCount?this._events=new n:delete this._events[i]}return this},o.prototype.removeAllListeners=function(t){var e;return t?(e=l?l+t:t,this._events[e]&&(0==--this._eventsCount?this._events=new n:delete this._events[e])):(this._events=new n,this._eventsCount=0),this},o.prototype.off=o.prototype.removeListener,o.prototype.addListener=o.prototype.on,o.prototype.setMaxListeners=function(){return this},o.prefixed=l,o.EventEmitter=o,void 0!==t&&(t.exports=o)},function(t,e){function n(t,e,n){if(t==e)return t?[[y,t]]:[];(n<0||t.length<n)&&(n=null);var o=l(t,e),i=t.substring(0,o);t=t.substring(o),e=e.substring(o),o=a(t,e);var s=t.substring(t.length-o);t=t.substring(0,t.length-o),e=e.substring(0,e.length-o);var c=r(t,e);return i&&c.unshift([y,i]),s&&c.push([y,s]),u(c),null!=n&&(c=f(c,n)),c}function r(t,e){var r;if(!t)return[[h,e]];if(!e)return[[p,t]];var i=t.length>e.length?t:e,l=t.length>e.length?e:t,a=i.indexOf(l);if(-1!=a)return r=[[h,i.substring(0,a)],[y,l],[h,i.substring(a+l.length)]],t.length>e.length&&(r[0][0]=r[2][0]=p),r;if(1==l.length)return[[p,t],[h,e]];var u=s(t,e);if(u){var c=u[0],f=u[1],d=u[2],b=u[3],v=u[4],g=n(c,d),m=n(f,b);return g.concat([[y,v]],m)}return o(t,e)}function o(t,e){for(var n=t.length,r=e.length,o=Math.ceil((n+r)/2),l=o,a=2*o,s=new Array(a),u=new Array(a),c=0;c<a;c++)s[c]=-1,u[c]=-1;s[l+1]=0,u[l+1]=0;for(var f=n-r,d=f%2!=0,y=0,b=0,v=0,g=0,m=0;m<o;m++){for(var q=-m+y;q<=m-b;q+=2){var w,_=l+q;w=q==-m||q!=m&&s[_-1]<s[_+1]?s[_+1]:s[_-1]+1;for(var k=w-q;w<n&&k<r&&t.charAt(w)==e.charAt(k);)w++,k++;if(s[_]=w,w>n)b+=2;else if(k>r)y+=2;else if(d){var O=l+f-q;if(O>=0&&O<a&&-1!=u[O]){var x=n-u[O];if(w>=x)return i(t,e,w,k)}}}for(var E=-m+v;E<=m-g;E+=2){var x,O=l+E;x=E==-m||E!=m&&u[O-1]<u[O+1]?u[O+1]:u[O-1]+1;for(var A=x-E;x<n&&A<r&&t.charAt(n-x-1)==e.charAt(r-A-1);)x++,A++;if(u[O]=x,x>n)g+=2;else if(A>r)v+=2;else if(!d){var _=l+f-E;if(_>=0&&_<a&&-1!=s[_]){var w=s[_],k=l+w-_;if(x=n-x,w>=x)return i(t,e,w,k)}}}}return[[p,t],[h,e]]}function i(t,e,r,o){var i=t.substring(0,r),l=e.substring(0,o),a=t.substring(r),s=e.substring(o),u=n(i,l),c=n(a,s);return u.concat(c)}function l(t,e){if(!t||!e||t.charAt(0)!=e.charAt(0))return 0;for(var n=0,r=Math.min(t.length,e.length),o=r,i=0;n<o;)t.substring(i,o)==e.substring(i,o)?(n=o,i=n):r=o,o=Math.floor((r-n)/2+n);return o}function a(t,e){if(!t||!e||t.charAt(t.length-1)!=e.charAt(e.length-1))return 0;for(var n=0,r=Math.min(t.length,e.length),o=r,i=0;n<o;)t.substring(t.length-o,t.length-i)==e.substring(e.length-o,e.length-i)?(n=o,i=n):r=o,o=Math.floor((r-n)/2+n);return o}function s(t,e){function n(t,e,n){for(var r,o,i,s,u=t.substring(n,n+Math.floor(t.length/4)),c=-1,f="";-1!=(c=e.indexOf(u,c+1));){var d=l(t.substring(n),e.substring(c)),p=a(t.substring(0,n),e.substring(0,c));f.length<p+d&&(f=e.substring(c-p,c)+e.substring(c,c+d),r=t.substring(0,n-p),o=t.substring(n+d),i=e.substring(0,c-p),s=e.substring(c+d))}return 2*f.length>=t.length?[r,o,i,s,f]:null}var r=t.length>e.length?t:e,o=t.length>e.length?e:t;if(r.length<4||2*o.length<r.length)return null;var i,s=n(r,o,Math.ceil(r.length/4)),u=n(r,o,Math.ceil(r.length/2));if(!s&&!u)return null;i=u?s&&s[4].length>u[4].length?s:u:s;var c,f,d,p;return t.length>e.length?(c=i[0],f=i[1],d=i[2],p=i[3]):(d=i[0],p=i[1],c=i[2],f=i[3]),[c,f,d,p,i[4]]}function u(t){t.push([y,""]);for(var e,n=0,r=0,o=0,i="",s="";n<t.length;)switch(t[n][0]){case h:o++,s+=t[n][1],n++;break;case p:r++,i+=t[n][1],n++;break;case y:r+o>1?(0!==r&&0!==o&&(e=l(s,i),0!==e&&(n-r-o>0&&t[n-r-o-1][0]==y?t[n-r-o-1][1]+=s.substring(0,e):(t.splice(0,0,[y,s.substring(0,e)]),n++),s=s.substring(e),i=i.substring(e)),0!==(e=a(s,i))&&(t[n][1]=s.substring(s.length-e)+t[n][1],s=s.substring(0,s.length-e),i=i.substring(0,i.length-e))),0===r?t.splice(n-o,r+o,[h,s]):0===o?t.splice(n-r,r+o,[p,i]):t.splice(n-r-o,r+o,[p,i],[h,s]),n=n-r-o+(r?1:0)+(o?1:0)+1):0!==n&&t[n-1][0]==y?(t[n-1][1]+=t[n][1],t.splice(n,1)):n++,o=0,r=0,i="",s=""}""===t[t.length-1][1]&&t.pop();var c=!1;for(n=1;n<t.length-1;)t[n-1][0]==y&&t[n+1][0]==y&&(t[n][1].substring(t[n][1].length-t[n-1][1].length)==t[n-1][1]?(t[n][1]=t[n-1][1]+t[n][1].substring(0,t[n][1].length-t[n-1][1].length),t[n+1][1]=t[n-1][1]+t[n+1][1],t.splice(n-1,1),c=!0):t[n][1].substring(0,t[n+1][1].length)==t[n+1][1]&&(t[n-1][1]+=t[n+1][1],t[n][1]=t[n][1].substring(t[n+1][1].length)+t[n+1][1],t.splice(n+1,1),c=!0)),n++;c&&u(t)}function c(t,e){if(0===e)return[y,t];for(var n=0,r=0;r<t.length;r++){var o=t[r];if(o[0]===p||o[0]===y){var i=n+o[1].length;if(e===i)return[r+1,t];if(e<i){t=t.slice();var l=e-n,a=[o[0],o[1].slice(0,l)],s=[o[0],o[1].slice(l)];return t.splice(r,1,a,s),[r+1,t]}n=i}}throw new Error("cursor_pos is out of bounds!")}function f(t,e){var n=c(t,e),r=n[1],o=n[0],i=r[o],l=r[o+1];if(null==i)return t;if(i[0]!==y)return t;if(null!=l&&i[1]+l[1]===l[1]+i[1])return r.splice(o,2,l,i),d(r,o,2);if(null!=l&&0===l[1].indexOf(i[1])){r.splice(o,2,[l[0],i[1]],[0,i[1]]);var a=l[1].slice(i[1].length);return a.length>0&&r.splice(o+2,0,[l[0],a]),d(r,o,3)}return t}function d(t,e,n){for(var r=e+n-1;r>=0&&r>=e-1;r--)if(r+1<t.length){var o=t[r],i=t[r+1];o[0]===i[1]&&t.splice(r,2,[o[0],o[1]+i[1]])}return t}var p=-1,h=1,y=0,b=n;b.INSERT=h,b.DELETE=p,b.EQUAL=y,t.exports=b},function(t,e){t.exports='<svg viewbox="0 0 18 18"> <polyline class="ql-even ql-stroke" points="5 7 3 9 5 11"></polyline> <polyline class="ql-even ql-stroke" points="13 7 15 9 13 11"></polyline> <line class=ql-stroke x1=10 x2=8 y1=5 y2=13></line> </svg>'},function(t,e,n){"use strict";var r=this&&this.__extends||function(){var t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])};return function(e,n){function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}();Object.defineProperty(e,"__esModule",{value:!0});var o=n(22),i=n(1),l=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return r(e,t),e.formats=function(n){var r=i.query(e.blotName).tagName;if(n.tagName!==r)return t.formats.call(this,n)},e.prototype.format=function(n,r){null!=i.query(n,i.Scope.BLOCK)&&(n!==this.statics.blotName||r?t.prototype.format.call(this,n,r):this.replaceWith(e.blotName))},e.prototype.formatAt=function(e,n,r,o){null!=i.query(r,i.Scope.BLOCK)?this.format(r,o):t.prototype.formatAt.call(this,e,n,r,o)},e.prototype.insertAt=function(e,n,r){if(null==r||null!=i.query(n,i.Scope.INLINE))t.prototype.insertAt.call(this,e,n,r);else{var o=this.split(e),l=i.create(n,r);o.parent.insertBefore(l,o)}},e.prototype.update=function(e){navigator.userAgent.match(/Trident/)?this.attach():t.prototype.update.call(this,e)},e}(o.default);l.blotName="block",l.scope=i.Scope.BLOCK_BLOT,l.tagName="P",e.default=l},function(t,e,n){"use strict";var r=this&&this.__extends||function(){var t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])};return function(e,n){function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}();Object.defineProperty(e,"__esModule",{value:!0});var o=n(23),i=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return r(e,t),e.formats=function(t){},e.prototype.format=function(e,n){t.prototype.formatAt.call(this,0,this.length(),e,n)},e.prototype.formatAt=function(e,n,r,o){0===e&&n===this.length()?this.format(r,o):t.prototype.formatAt.call(this,e,n,r,o)},e.prototype.formats=function(){return this.statics.formats(this.domNode)},e}(o.default);e.default=i},function(t,e,n){"use strict";function r(t,e){if(Object.keys(t).length!==Object.keys(e).length)return!1;for(var n in t)if(t[n]!==e[n])return!1;return!0}var o=this&&this.__extends||function(){var t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])};return function(e,n){function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}();Object.defineProperty(e,"__esModule",{value:!0});var i=n(22),l=n(1),a=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),e.formats=function(n){if(n.tagName!==e.tagName)return t.formats.call(this,n)},e.prototype.format=function(n,r){var o=this;n!==this.statics.blotName||r?t.prototype.format.call(this,n,r):(this.children.forEach(function(t){t instanceof i.default||(t=t.wrap(e.blotName,!0)),o.attributes.copy(t)}),this.unwrap())},e.prototype.formatAt=function(e,n,r,o){if(null!=this.formats()[r]||l.query(r,l.Scope.ATTRIBUTE)){this.isolate(e,n).format(r,o)}else t.prototype.formatAt.call(this,e,n,r,o)},e.prototype.optimize=function(){t.prototype.optimize.call(this);var n=this.formats();if(0===Object.keys(n).length)return this.unwrap();var o=this.next;o instanceof e&&o.prev===this&&r(n,o.formats())&&(o.moveChildren(this),o.remove())},e}(i.default);a.blotName="inline",a.scope=l.Scope.INLINE_BLOT,a.tagName="SPAN",e.default=a},function(t,e,n){"use strict";var r=this&&this.__extends||function(){var t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])};return function(e,n){function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}();Object.defineProperty(e,"__esModule",{value:!0});var o=n(21),i=n(1),l={attributes:!0,characterData:!0,characterDataOldValue:!0,childList:!0,subtree:!0},a=function(t){function e(e){var n=t.call(this,e)||this;return n.parent=null,n.observer=new MutationObserver(function(t){n.update(t)}),n.observer.observe(n.domNode,l),n}return r(e,t),e.prototype.detach=function(){t.prototype.detach.call(this),this.observer.disconnect()},e.prototype.deleteAt=function(e,n){this.update(),0===e&&n===this.length()?this.children.forEach(function(t){t.remove()}):t.prototype.deleteAt.call(this,e,n)},e.prototype.formatAt=function(e,n,r,o){this.update(),t.prototype.formatAt.call(this,e,n,r,o)},e.prototype.insertAt=function(e,n,r){this.update(),t.prototype.insertAt.call(this,e,n,r)},e.prototype.optimize=function(e){var n=this;void 0===e&&(e=[]),t.prototype.optimize.call(this);for(var r=[].slice.call(this.observer.takeRecords());r.length>0;)e.push(r.pop());for(var l=function(t,e){void 0===e&&(e=!0),null!=t&&t!==n&&null!=t.domNode.parentNode&&(null==t.domNode[i.DATA_KEY].mutations&&(t.domNode[i.DATA_KEY].mutations=[]),e&&l(t.parent))},a=function(t){null!=t.domNode[i.DATA_KEY]&&null!=t.domNode[i.DATA_KEY].mutations&&(t instanceof o.default&&t.children.forEach(a),t.optimize())},s=e,u=0;s.length>0;u+=1){if(u>=100)throw new Error("[Parchment] Maximum optimize iterations reached");for(s.forEach(function(t){var e=i.find(t.target,!0);null!=e&&(e.domNode===t.target&&("childList"===t.type?(l(i.find(t.previousSibling,!1)),[].forEach.call(t.addedNodes,function(t){var e=i.find(t,!1);l(e,!1),e instanceof o.default&&e.children.forEach(function(t){l(t,!1)})})):"attributes"===t.type&&l(e.prev)),l(e))}),this.children.forEach(a),s=[].slice.call(this.observer.takeRecords()),r=s.slice();r.length>0;)e.push(r.pop())}},e.prototype.update=function(e){var n=this;e=e||this.observer.takeRecords(),e.map(function(t){var e=i.find(t.target,!0);if(null!=e)return null==e.domNode[i.DATA_KEY].mutations?(e.domNode[i.DATA_KEY].mutations=[t],e):(e.domNode[i.DATA_KEY].mutations.push(t),null)}).forEach(function(t){null!=t&&t!==n&&null!=t.domNode[i.DATA_KEY]&&t.update(t.domNode[i.DATA_KEY].mutations||[])}),null!=this.domNode[i.DATA_KEY].mutations&&t.prototype.update.call(this,this.domNode[i.DATA_KEY].mutations),this.optimize(e)},e}(o.default);a.blotName="scroll",a.defaultChild="block",a.scope=i.Scope.BLOCK_BLOT,a.tagName="DIV",e.default=a},function(t,e,n){"use strict";var r=this&&this.__extends||function(){var t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])};return function(e,n){function r(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(r.prototype=n.prototype,new r)}}();Object.defineProperty(e,"__esModule",{value:!0});var o=n(23),i=n(1),l=function(t){function e(e){var n=t.call(this,e)||this;return n.text=n.statics.value(n.domNode),n}return r(e,t),e.create=function(t){return document.createTextNode(t)},e.value=function(t){return t.data},e.prototype.deleteAt=function(t,e){this.domNode.data=this.text=this.text.slice(0,t)+this.text.slice(t+e)},e.prototype.index=function(t,e){return this.domNode===t?e:-1},e.prototype.insertAt=function(e,n,r){null==r?(this.text=this.text.slice(0,e)+n+this.text.slice(e),this.domNode.data=this.text):t.prototype.insertAt.call(this,e,n,r)},e.prototype.length=function(){return this.text.length},e.prototype.optimize=function(){t.prototype.optimize.call(this),this.text=this.statics.value(this.domNode),0===this.text.length?this.remove():this.next instanceof e&&this.next.prev===this&&(this.insertAt(this.length(),this.next.value()),this.next.remove())},e.prototype.position=function(t,e){return void 0===e&&(e=!1),[this.domNode,t]},e.prototype.split=function(t,e){if(void 0===e&&(e=!1),!e){if(0===t)return this;if(t===this.length())return this.next}var n=i.create(this.domNode.splitText(t));return this.parent.insertBefore(n,this.next),this.text=this.statics.value(this.domNode),n},e.prototype.update=function(t){var e=this;t.some(function(t){return"characterData"===t.type&&t.target===e.domNode})&&(this.text=this.statics.value(this.domNode))},e.prototype.value=function(){return this.text},e}(o.default);l.blotName="text",l.scope=i.Scope.INLINE_BLOT,e.default=l},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=function(){function t(){this.head=this.tail=void 0,this.length=0}return t.prototype.append=function(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];this.insertBefore(t[0],void 0),t.length>1&&this.append.apply(this,t.slice(1))},t.prototype.contains=function(t){for(var e,n=this.iterator();e=n();)if(e===t)return!0;return!1},t.prototype.insertBefore=function(t,e){t.next=e,null!=e?(t.prev=e.prev,null!=e.prev&&(e.prev.next=t),e.prev=t,e===this.head&&(this.head=t)):null!=this.tail?(this.tail.next=t,t.prev=this.tail,this.tail=t):(t.prev=void 0,this.head=this.tail=t),this.length+=1},t.prototype.offset=function(t){for(var e=0,n=this.head;null!=n;){if(n===t)return e;e+=n.length(),n=n.next}return-1},t.prototype.remove=function(t){this.contains(t)&&(null!=t.prev&&(t.prev.next=t.next),null!=t.next&&(t.next.prev=t.prev),t===this.head&&(this.head=t.next),t===this.tail&&(this.tail=t.prev),this.length-=1)},t.prototype.iterator=function(t){return void 0===t&&(t=this.head),function(){var e=t;return null!=t&&(t=t.next),e}},t.prototype.find=function(t,e){void 0===e&&(e=!1);for(var n,r=this.iterator();n=r();){var o=n.length();if(t<o||e&&t===o&&(null==n.next||0!==n.next.length()))return[n,t];t-=o}return[null,0]},t.prototype.forEach=function(t){for(var e,n=this.iterator();e=n();)t(e)},t.prototype.forEachAt=function(t,e,n){if(!(e<=0))for(var r,o=this.find(t),i=o[0],l=o[1],a=t-l,s=this.iterator(i);(r=s())&&a<t+e;){var u=r.length();t>a?n(r,t-a,Math.min(e,a+u-t)):n(r,0,Math.min(u,t+e-a)),a+=u}},t.prototype.map=function(t){return this.reduce(function(e,n){return e.push(t(n)),e},[])},t.prototype.reduce=function(t,e){for(var n,r=this.iterator();n=r();)e=t(e,n);return e},t}();e.default=r},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}var o=n(35),i=r(o),l=n(36),a=n(38),s=n(67),u=n(64),c=r(u),f=n(65),d=r(f),p=n(69),h=r(p),y=n(37),b=n(26),v=n(39),g=n(40),m=n(44),q=r(m),w=n(68),_=r(w),k=n(27),O=r(k),x=n(70),E=r(x),A=n(71),j=r(A),N=n(72),T=r(N),P=n(66),S=r(P),C=n(73),L=r(C),R=n(16),M=r(R),B=n(74),I=r(B),U=n(75),D=r(U),z=n(46),F=r(z),H=n(41),Y=r(H),K=n(28),Z=r(K),V=n(48),W=r(V),G=n(49),$=r(G),X=n(50),Q=r(X),J=n(76),tt=r(J),et=n(63),nt=r(et);i.default.register({"attributors/attribute/direction":a.DirectionAttribute,"attributors/class/align":l.AlignClass,"attributors/class/background":y.BackgroundClass,"attributors/class/color":b.ColorClass,"attributors/class/direction":a.DirectionClass,"attributors/class/font":v.FontClass,"attributors/class/size":g.SizeClass,"attributors/style/align":l.AlignStyle,"attributors/style/background":y.BackgroundStyle,"attributors/style/color":b.ColorStyle,"attributors/style/direction":a.DirectionStyle,"attributors/style/font":v.FontStyle,"attributors/style/size":g.SizeStyle},!0),i.default.register({"formats/align":l.AlignClass,"formats/direction":a.DirectionClass,"formats/indent":s.IndentClass,"formats/background":y.BackgroundStyle,"formats/color":b.ColorStyle,"formats/font":v.FontClass,"formats/size":g.SizeClass,"formats/blockquote":c.default,"formats/code-block":M.default,"formats/header":d.default,"formats/list":h.default,"formats/bold":q.default,"formats/code":R.Code,"formats/italic":_.default,"formats/link":O.default,"formats/script":E.default,"formats/strike":j.default,"formats/underline":T.default,"formats/image":S.default,"formats/video":L.default,"formats/list/item":p.ListItem,"modules/formula":I.default,"modules/syntax":D.default,"modules/toolbar":F.default,"themes/bubble":tt.default,"themes/snow":nt.default,"ui/icons":Y.default,"ui/picker":Z.default,"ui/icon-picker":$.default,"ui/color-picker":W.default,"ui/tooltip":Q.default},!0),t.exports=i.default},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}function o(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function i(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function l(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}Object.defineProperty(e,"__esModule",{value:!0});var a=function(){function t(t,e){var n=[],r=!0,o=!1,i=void 0;try{for(var l,a=t[Symbol.iterator]();!(r=(l=a.next()).done)&&(n.push(l.value),!e||n.length!==e);r=!0);}catch(t){o=!0,i=t}finally{try{!r&&a.return&&a.return()}finally{if(o)throw i}}return n}return function(e,n){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return t(e,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),s=function t(e,n,r){null===e&&(e=Function.prototype);var o=Object.getOwnPropertyDescriptor(e,n);if(void 0===o){var i=Object.getPrototypeOf(e);return null===i?void 0:t(i,n,r)}if("value"in o)return o.value;var l=o.get;if(void 0!==l)return l.call(r)},u=function(){function t(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}return function(e,n,r){return n&&t(e.prototype,n),r&&t(e,r),e}}(),c=n(3),f=r(c),d=n(5),p=r(d),h=n(47),y=r(h),b=n(27),v=r(b),g=n(15),m=n(41),q=r(m),w=[[{header:["1","2","3",!1]}],["bold","italic","underline","link"],[{list:"ordered"},{list:"bullet"}],["clean"]],_=function(t){function e(t,n){o(this,e),null!=n.modules.toolbar&&null==n.modules.toolbar.container&&(n.modules.toolbar.container=w);var r=i(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,t,n));return r.quill.container.classList.add("ql-snow"),r}return l(e,t),u(e,[{key:"extendToolbar",value:function(t){t.container.classList.add("ql-snow"),this.buildButtons([].slice.call(t.container.querySelectorAll("button")),q.default),this.buildPickers([].slice.call(t.container.querySelectorAll("select")),q.default),this.tooltip=new k(this.quill,this.options.bounds),t.container.querySelector(".ql-link")&&this.quill.keyboard.addBinding({key:"K",shortKey:!0},function(e,n){t.handlers.link.call(t,!n.format.link)})}}]),e}(y.default);_.DEFAULTS=(0,f.default)(!0,{},y.default.DEFAULTS,{modules:{toolbar:{handlers:{link:function(t){if(t){var e=this.quill.getSelection();if(null==e||0==e.length)return;var n=this.quill.getText(e);/^\S+@\S+\.\S+$/.test(n)&&0!==n.indexOf("mailto:")&&(n="mailto:"+n);this.quill.theme.tooltip.edit("link",n)}else this.quill.format("link",!1)}}}}});var k=function(t){function e(t,n){o(this,e);var r=i(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,t,n));return r.preview=r.root.querySelector("a.ql-preview"),r}return l(e,t),u(e,[{key:"listen",value:function(){var t=this;s(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"listen",this).call(this),this.root.querySelector("a.ql-action").addEventListener("click",function(e){t.root.classList.contains("ql-editing")?t.save():t.edit("link",t.preview.textContent),e.preventDefault()}),this.root.querySelector("a.ql-remove").addEventListener("click",function(e){if(null!=t.linkRange){var n=t.linkRange;t.restoreFocus(),t.quill.formatText(n,"link",!1,p.default.sources.USER),delete t.linkRange}e.preventDefault(),t.hide()}),this.quill.on(p.default.events.SELECTION_CHANGE,function(e,n,r){if(null!=e){if(0===e.length&&r===p.default.sources.USER){var o=t.quill.scroll.descendant(v.default,e.index),i=a(o,2),l=i[0],s=i[1];if(null!=l){t.linkRange=new g.Range(e.index-s,l.length());var u=v.default.formats(l.domNode);return t.preview.textContent=u,t.preview.setAttribute("href",u),t.show(),void t.position(t.quill.getBounds(t.linkRange))}}else delete t.linkRange;t.hide()}})}},{key:"show",value:function(){s(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"show",this).call(this),this.root.removeAttribute("data-mode")}}]),e}(h.BaseTooltip);k.TEMPLATE=['<a class="ql-preview" target="_blank" href="about:blank"></a>','<input type="text" data-formula="e=mc^2" data-link="quilljs.com" data-video="Embed URL">','<a class="ql-action"></a>','<a class="ql-remove"></a>'].join(""),e.default=_},function(t,e,n){"use strict";function r(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function o(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function i(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}Object.defineProperty(e,"__esModule",{value:!0});var l=n(4),a=function(t){return t&&t.__esModule?t:{default:t}}(l),s=function(t){function e(){return r(this,e),o(this,(e.__proto__||Object.getPrototypeOf(e)).apply(this,arguments))}return i(e,t),e}(a.default);s.blotName="blockquote",s.tagName="blockquote",e.default=s},function(t,e,n){"use strict";function r(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function o(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function i(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}Object.defineProperty(e,"__esModule",{value:!0});var l=function(){function t(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}return function(e,n,r){return n&&t(e.prototype,n),r&&t(e,r),e}}(),a=n(4),s=function(t){return t&&t.__esModule?t:{default:t}}(a),u=function(t){function e(){return r(this,e),o(this,(e.__proto__||Object.getPrototypeOf(e)).apply(this,arguments))}return i(e,t),l(e,null,[{key:"formats",value:function(t){return this.tagName.indexOf(t.tagName)+1}}]),e}(s.default);u.blotName="header",u.tagName=["H1","H2","H3","H4","H5","H6"],e.default=u},function(t,e,n){"use strict";function r(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function o(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function i(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}Object.defineProperty(e,"__esModule",{value:!0});var l=function(){function t(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}return function(e,n,r){return n&&t(e.prototype,n),r&&t(e,r),e}}(),a=function t(e,n,r){null===e&&(e=Function.prototype);var o=Object.getOwnPropertyDescriptor(e,n);if(void 0===o){var i=Object.getPrototypeOf(e);return null===i?void 0:t(i,n,r)}if("value"in o)return o.value;var l=o.get;if(void 0!==l)return l.call(r)},s=n(7),u=function(t){return t&&t.__esModule?t:{default:t}}(s),c=n(27),f=["alt","height","width"],d=function(t){function e(){return r(this,e),o(this,(e.__proto__||Object.getPrototypeOf(e)).apply(this,arguments))}return i(e,t),l(e,[{key:"format",value:function(t,n){f.indexOf(t)>-1?n?this.domNode.setAttribute(t,n):this.domNode.removeAttribute(t):a(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"format",this).call(this,t,n)}}],[{key:"create",value:function(t){var n=a(e.__proto__||Object.getPrototypeOf(e),"create",this).call(this,t);return"string"==typeof t&&n.setAttribute("src",this.sanitize(t)),n}},{key:"formats",value:function(t){return f.reduce(function(e,n){return t.hasAttribute(n)&&(e[n]=t.getAttribute(n)),e},{})}},{key:"match",value:function(t){return/\.(jpe?g|gif|png)$/.test(t)||/^data:image\/.+;base64/.test(t)}},{key:"sanitize",value:function(t){return(0,c.sanitize)(t,["http","https","data"])?t:"//:0"}},{key:"value",value:function(t){return t.getAttribute("src")}}]),e}(u.default);d.blotName="image",d.tagName="IMG",e.default=d},function(t,e,n){"use strict";function r(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function o(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function i(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}Object.defineProperty(e,"__esModule",{value:!0}),e.IndentClass=void 0;var l=function(){function t(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}return function(e,n,r){return n&&t(e.prototype,n),r&&t(e,r),e}}(),a=function t(e,n,r){null===e&&(e=Function.prototype);var o=Object.getOwnPropertyDescriptor(e,n);if(void 0===o){var i=Object.getPrototypeOf(e);return null===i?void 0:t(i,n,r)}if("value"in o)return o.value;var l=o.get;if(void 0!==l)return l.call(r)},s=n(0),u=function(t){return t&&t.__esModule?t:{default:t}}(s),c=function(t){function e(){return r(this,e),o(this,(e.__proto__||Object.getPrototypeOf(e)).apply(this,arguments))}return i(e,t),l(e,[{key:"add",value:function(t,n){if("+1"===n||"-1"===n){var r=this.value(t)||0;n="+1"===n?r+1:r-1}return 0===n?(this.remove(t),!0):a(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"add",this).call(this,t,n)}},{key:"canAdd",value:function(t,n){return a(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"canAdd",this).call(this,t,n)||a(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"canAdd",this).call(this,t,parseInt(n))}},{key:"value",value:function(t){return parseInt(a(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"value",this).call(this,t))||void 0}}]),e}(u.default.Attributor.Class),f=new c("indent","ql-indent",{scope:u.default.Scope.BLOCK,whitelist:[1,2,3,4,5,6,7,8]});e.IndentClass=f},function(t,e,n){"use strict";function r(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function o(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function i(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}Object.defineProperty(e,"__esModule",{value:!0});var l=n(44),a=function(t){return t&&t.__esModule?t:{default:t}}(l),s=function(t){function e(){return r(this,e),o(this,(e.__proto__||Object.getPrototypeOf(e)).apply(this,arguments))}return i(e,t),e}(a.default);s.blotName="italic",s.tagName=["EM","I"],e.default=s},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}function o(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function i(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function l(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function a(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.ListItem=void 0;var s=function(){function t(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}return function(e,n,r){return n&&t(e.prototype,n),r&&t(e,r),e}}(),u=function t(e,n,r){null===e&&(e=Function.prototype);var o=Object.getOwnPropertyDescriptor(e,n);if(void 0===o){var i=Object.getPrototypeOf(e);return null===i?void 0:t(i,n,r)}if("value"in o)return o.value;var l=o.get;if(void 0!==l)return l.call(r)},c=n(0),f=r(c),d=n(4),p=r(d),h=n(24),y=r(h),b=function(t){function e(){return i(this,e),l(this,(e.__proto__||Object.getPrototypeOf(e)).apply(this,arguments))}return a(e,t),s(e,[{key:"format",value:function(t,n){t!==v.blotName||n?u(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"format",this).call(this,t,n):this.replaceWith(f.default.create(this.statics.scope))}},{key:"remove",value:function(){null==this.prev&&null==this.next?this.parent.remove():u(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"remove",this).call(this)}},{key:"replaceWith",value:function(t,n){return this.parent.isolate(this.offset(this.parent),this.length()),t===this.parent.statics.blotName?(this.parent.replaceWith(t,n),this):(this.parent.unwrap(),u(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"replaceWith",this).call(this,t,n))}}],[{key:"formats",value:function(t){return t.tagName===this.tagName?void 0:u(e.__proto__||Object.getPrototypeOf(e),"formats",this).call(this,t)}}]),e}(p.default);b.blotName="list-item",b.tagName="LI";var v=function(t){function e(t){i(this,e);var n=l(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,t));return t.addEventListener("click",function(e){if(e.target.parentNode===t){var r=n.statics.formats(t),o=f.default.find(e.target);"checked"===r?o.format("list","unchecked"):"unchecked"===r&&o.format("list","checked")}}),n}return a(e,t),s(e,null,[{key:"create",value:function(t){var n="ordered"===t?"OL":"UL",r=u(e.__proto__||Object.getPrototypeOf(e),"create",this).call(this,n);return"checked"!==t&&"unchecked"!==t||r.setAttribute("data-checked","checked"===t),r}},{key:"formats",value:function(t){return"OL"===t.tagName?"ordered":"UL"===t.tagName?t.hasAttribute("data-checked")?"true"===t.getAttribute("data-checked")?"checked":"unchecked":"bullet":void 0}}]),s(e,[{key:"format",value:function(t,e){this.children.length>0&&this.children.tail.format(t,e)}},{key:"formats",value:function(){return o({},this.statics.blotName,this.statics.formats(this.domNode))}},{key:"insertBefore",value:function(t,n){if(t instanceof b)u(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"insertBefore",this).call(this,t,n);else{var r=null==n?this.length():n.offset(this),o=this.split(r);o.parent.insertBefore(t,o)}}},{key:"optimize",value:function(){u(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"optimize",this).call(this);var t=this.next;null!=t&&t.prev===this&&t.statics.blotName===this.statics.blotName&&t.domNode.tagName===this.domNode.tagName&&t.domNode.getAttribute("data-checked")===this.domNode.getAttribute("data-checked")&&(t.moveChildren(this),t.remove())}},{key:"replace",value:function(t){if(t.statics.blotName!==this.statics.blotName){var n=f.default.create(this.statics.defaultChild);t.moveChildren(n),this.appendChild(n)}u(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"replace",this).call(this,t)}}]),e}(y.default);v.blotName="list",v.scope=f.default.Scope.BLOCK_BLOT,v.tagName=["OL","UL"],v.defaultChild="list-item",v.allowedChildren=[b],e.ListItem=b,e.default=v},function(t,e,n){"use strict";function r(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function o(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function i(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}Object.defineProperty(e,"__esModule",{value:!0});var l=function(){function t(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}return function(e,n,r){return n&&t(e.prototype,n),r&&t(e,r),e}}(),a=function t(e,n,r){null===e&&(e=Function.prototype);var o=Object.getOwnPropertyDescriptor(e,n);if(void 0===o){var i=Object.getPrototypeOf(e);return null===i?void 0:t(i,n,r)}if("value"in o)return o.value;var l=o.get;if(void 0!==l)return l.call(r)},s=n(8),u=function(t){return t&&t.__esModule?t:{default:t}}(s),c=function(t){function e(){return r(this,e),o(this,(e.__proto__||Object.getPrototypeOf(e)).apply(this,arguments))}return i(e,t),l(e,null,[{key:"create",value:function(t){return"super"===t?document.createElement("sup"):"sub"===t?document.createElement("sub"):a(e.__proto__||Object.getPrototypeOf(e),"create",this).call(this,t)}},{key:"formats",value:function(t){return"SUB"===t.tagName?"sub":"SUP"===t.tagName?"super":void 0}}]),e}(u.default);c.blotName="script",c.tagName=["SUB","SUP"],e.default=c},function(t,e,n){"use strict";function r(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function o(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function i(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}Object.defineProperty(e,"__esModule",{value:!0});var l=n(8),a=function(t){return t&&t.__esModule?t:{default:t}}(l),s=function(t){function e(){return r(this,e),o(this,(e.__proto__||Object.getPrototypeOf(e)).apply(this,arguments))}return i(e,t),e}(a.default);s.blotName="strike",s.tagName="S",e.default=s},function(t,e,n){"use strict";function r(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function o(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function i(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}Object.defineProperty(e,"__esModule",{value:!0});var l=n(8),a=function(t){return t&&t.__esModule?t:{default:t}}(l),s=function(t){function e(){return r(this,e),o(this,(e.__proto__||Object.getPrototypeOf(e)).apply(this,arguments))}return i(e,t),e}(a.default);s.blotName="underline",s.tagName="U",e.default=s},function(t,e,n){"use strict";function r(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function o(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function i(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}Object.defineProperty(e,"__esModule",{value:!0});var l=function(){function t(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}return function(e,n,r){return n&&t(e.prototype,n),r&&t(e,r),e}}(),a=function t(e,n,r){null===e&&(e=Function.prototype);var o=Object.getOwnPropertyDescriptor(e,n);if(void 0===o){var i=Object.getPrototypeOf(e);return null===i?void 0:t(i,n,r)}if("value"in o)return o.value;var l=o.get;if(void 0!==l)return l.call(r)},s=n(4),u=n(27),c=function(t){return t&&t.__esModule?t:{default:t}}(u),f=["height","width"],d=function(t){function e(){return r(this,e),o(this,(e.__proto__||Object.getPrototypeOf(e)).apply(this,arguments))}return i(e,t),l(e,[{key:"format",value:function(t,n){f.indexOf(t)>-1?n?this.domNode.setAttribute(t,n):this.domNode.removeAttribute(t):a(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"format",this).call(this,t,n)}}],[{key:"create",value:function(t){var n=a(e.__proto__||Object.getPrototypeOf(e),"create",this).call(this,t);return n.setAttribute("frameborder","0"),n.setAttribute("allowfullscreen",!0),n.setAttribute("src",this.sanitize(t)),n}},{key:"formats",value:function(t){return f.reduce(function(e,n){return t.hasAttribute(n)&&(e[n]=t.getAttribute(n)),e},{})}},{key:"sanitize",value:function(t){return c.default.sanitize(t)}},{key:"value",value:function(t){return t.getAttribute("src")}}]),e}(s.BlockEmbed);d.blotName="video",d.className="ql-video",d.tagName="IFRAME",e.default=d},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}function o(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function i(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function l(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.FormulaBlot=void 0;var a=function(){function t(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}return function(e,n,r){return n&&t(e.prototype,n),r&&t(e,r),e}}(),s=function t(e,n,r){null===e&&(e=Function.prototype);var o=Object.getOwnPropertyDescriptor(e,n);if(void 0===o){var i=Object.getPrototypeOf(e);return null===i?void 0:t(i,n,r)}if("value"in o)return o.value;var l=o.get;if(void 0!==l)return l.call(r)},u=n(7),c=r(u),f=n(6),d=r(f),p=n(9),h=r(p),y=function(t){function e(){return o(this,e),i(this,(e.__proto__||Object.getPrototypeOf(e)).apply(this,arguments))}return l(e,t),a(e,[{key:"index",value:function(){return 1}}],[{key:"create",value:function(t){var n=s(e.__proto__||Object.getPrototypeOf(e),"create",this).call(this,t);return"string"==typeof t&&(window.katex.render(t,n),n.setAttribute("data-value",t)),n.setAttribute("contenteditable",!1),n}},{key:"value",value:function(t){return t.getAttribute("data-value")}}]),e}(c.default);y.blotName="formula",y.className="ql-formula",y.tagName="SPAN";var b=function(t){function e(){o(this,e);var t=i(this,(e.__proto__||Object.getPrototypeOf(e)).call(this));if(null==window.katex)throw new Error("Formula module requires KaTeX.");return t}return l(e,t),a(e,null,[{key:"register",value:function(){d.default.register(y,!0)}}]),e}(h.default);e.FormulaBlot=y,e.default=b},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}function o(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function i(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function l(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.CodeToken=e.CodeBlock=void 0;var a=function(){function t(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}return function(e,n,r){return n&&t(e.prototype,n),r&&t(e,r),e}}(),s=function t(e,n,r){null===e&&(e=Function.prototype);var o=Object.getOwnPropertyDescriptor(e,n);if(void 0===o){var i=Object.getPrototypeOf(e);return null===i?void 0:t(i,n,r)}if("value"in o)return o.value;var l=o.get;if(void 0!==l)return l.call(r)},u=n(0),c=r(u),f=n(6),d=r(f),p=n(9),h=r(p),y=n(16),b=r(y),v=function(t){function e(){return o(this,e),i(this,(e.__proto__||Object.getPrototypeOf(e)).apply(this,arguments))}return l(e,t),a(e,[{key:"replaceWith",value:function(t){this.domNode.textContent=this.domNode.textContent,this.attach(),s(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"replaceWith",this).call(this,t)}},{key:"highlight",value:function(t){if(this.cachedHTML!==this.domNode.innerHTML){var e=this.domNode.textContent;(e.trim().length>0||null==this.cachedHTML)&&(this.domNode.innerHTML=t(e),this.attach()),this.cachedHTML=this.domNode.innerHTML}}}]),e}(b.default);v.className="ql-syntax";var g=new c.default.Attributor.Class("token","hljs",{scope:c.default.Scope.INLINE}),m=function(t){function e(t,n){o(this,e);var r=i(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,t,n));if("function"!=typeof r.options.highlight)throw new Error("Syntax module requires highlight.js. Please include the library on the page before Quill.");var l=null;return r.quill.on(d.default.events.SCROLL_OPTIMIZE,function(){null==l&&(l=setTimeout(function(){r.highlight(),l=null},100))}),r.highlight(),r}return l(e,t),a(e,null,[{key:"register",value:function(){d.default.register(g,!0),d.default.register(v,!0)}}]),a(e,[{key:"highlight",value:function(){var t=this;if(!this.quill.selection.composing){var e=this.quill.getSelection();this.quill.scroll.descendants(v).forEach(function(e){e.highlight(t.options.highlight)}),this.quill.update(d.default.sources.SILENT),null!=e&&this.quill.setSelection(e,d.default.sources.SILENT)}}}]),e}(h.default);m.DEFAULTS={highlight:function(){return null==window.hljs?null:function(t){return window.hljs.highlightAuto(t).value}}()},e.CodeBlock=v,e.CodeToken=g,e.default=m},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}function o(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function i(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function l(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}Object.defineProperty(e,"__esModule",{value:!0}),e.default=e.BubbleTooltip=void 0;var a=function t(e,n,r){null===e&&(e=Function.prototype);var o=Object.getOwnPropertyDescriptor(e,n);if(void 0===o){var i=Object.getPrototypeOf(e);return null===i?void 0:t(i,n,r)}if("value"in o)return o.value;var l=o.get;if(void 0!==l)return l.call(r)},s=function(){function t(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}return function(e,n,r){return n&&t(e.prototype,n),r&&t(e,r),e}}(),u=n(3),c=r(u),f=n(5),d=r(f),p=n(47),h=r(p),y=n(15),b=n(41),v=r(b),g=[["bold","italic","link"],[{header:1},{header:2},"blockquote"]],m=function(t){function e(t,n){o(this,e),null!=n.modules.toolbar&&null==n.modules.toolbar.container&&(n.modules.toolbar.container=g);var r=i(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,t,n));return r.quill.container.classList.add("ql-bubble"),r}return l(e,t),s(e,[{key:"extendToolbar",value:function(t){this.tooltip=new q(this.quill,this.options.bounds),this.tooltip.root.appendChild(t.container),this.buildButtons([].slice.call(t.container.querySelectorAll("button")),v.default),this.buildPickers([].slice.call(t.container.querySelectorAll("select")),v.default)}}]),e}(h.default);m.DEFAULTS=(0,c.default)(!0,{},h.default.DEFAULTS,{modules:{toolbar:{handlers:{link:function(t){t?this.quill.theme.tooltip.edit():this.quill.format("link",!1)}}}}});var q=function(t){function e(t,n){o(this,e);var r=i(this,(e.__proto__||Object.getPrototypeOf(e)).call(this,t,n));return r.quill.on(d.default.events.EDITOR_CHANGE,function(t,e,n,o){if(t===d.default.events.SELECTION_CHANGE)if(null!=e&&e.length>0&&o===d.default.sources.USER){r.show(),r.root.style.left="0px",r.root.style.width="",r.root.style.width=r.root.offsetWidth+"px";var i=r.quill.getLines(e.index,e.length);if(1===i.length)r.position(r.quill.getBounds(e));else{var l=i[i.length-1],a=r.quill.getIndex(l),s=Math.min(l.length()-1,e.index+e.length-a),u=r.quill.getBounds(new y.Range(a,s));r.position(u)}}else document.activeElement!==r.textbox&&r.quill.hasFocus()&&r.hide()}),r}return l(e,t),s(e,[{key:"listen",value:function(){var t=this;a(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"listen",this).call(this),this.root.querySelector(".ql-close").addEventListener("click",function(){t.root.classList.remove("ql-editing")}),this.quill.on(d.default.events.SCROLL_OPTIMIZE,function(){setTimeout(function(){if(!t.root.classList.contains("ql-hidden")){var e=t.quill.getSelection();null!=e&&t.position(t.quill.getBounds(e))}},1)})}},{key:"cancel",value:function(){this.show()}},{key:"position",value:function(t){var n=a(e.prototype.__proto__||Object.getPrototypeOf(e.prototype),"position",this).call(this,t),r=this.root.querySelector(".ql-tooltip-arrow");if(r.style.marginLeft="",0===n)return n;r.style.marginLeft=-1*n-r.offsetWidth/2+"px"}}]),e}(p.BaseTooltip);q.TEMPLATE=['<span class="ql-tooltip-arrow"></span>','<div class="ql-tooltip-editor">','<input type="text" data-formula="e=mc^2" data-link="quilljs.com" data-video="Embed URL">','<a class="ql-close"></a>',"</div>"].join(""),e.BubbleTooltip=q,e.default=m},function(t,e){t.exports='<svg viewbox="0 0 18 18"> <line class=ql-stroke x1=15 x2=3 y1=9 y2=9></line> <line class=ql-stroke x1=14 x2=4 y1=14 y2=14></line> <line class=ql-stroke x1=12 x2=6 y1=4 y2=4></line> </svg>'},function(t,e){t.exports='<svg viewbox="0 0 18 18"> <line class=ql-stroke x1=15 x2=3 y1=9 y2=9></line> <line class=ql-stroke x1=15 x2=3 y1=14 y2=14></line> <line class=ql-stroke x1=15 x2=3 y1=4 y2=4></line> </svg>'},function(t,e){t.exports='<svg viewbox="0 0 18 18"> <line class=ql-stroke x1=3 x2=15 y1=9 y2=9></line> <line class=ql-stroke x1=3 x2=13 y1=14 y2=14></line> <line class=ql-stroke x1=3 x2=9 y1=4 y2=4></line> </svg>'},function(t,e){t.exports='<svg viewbox="0 0 18 18"> <line class=ql-stroke x1=15 x2=3 y1=9 y2=9></line> <line class=ql-stroke x1=15 x2=5 y1=14 y2=14></line> <line class=ql-stroke x1=15 x2=9 y1=4 y2=4></line> </svg>'},function(t,e){t.exports='<svg viewbox="0 0 18 18"> <g class="ql-fill ql-color-label"> <polygon points="6 6.868 6 6 5 6 5 7 5.942 7 6 6.868"></polygon> <rect height=1 width=1 x=4 y=4></rect> <polygon points="6.817 5 6 5 6 6 6.38 6 6.817 5"></polygon> <rect height=1 width=1 x=2 y=6></rect> <rect height=1 width=1 x=3 y=5></rect> <rect height=1 width=1 x=4 y=7></rect> <polygon points="4 11.439 4 11 3 11 3 12 3.755 12 4 11.439"></polygon> <rect height=1 width=1 x=2 y=12></rect> <rect height=1 width=1 x=2 y=9></rect> <rect height=1 width=1 x=2 y=15></rect> <polygon points="4.63 10 4 10 4 11 4.192 11 4.63 10"></polygon> <rect height=1 width=1 x=3 y=8></rect> <path d=M10.832,4.2L11,4.582V4H10.708A1.948,1.948,0,0,1,10.832,4.2Z></path> <path d=M7,4.582L7.168,4.2A1.929,1.929,0,0,1,7.292,4H7V4.582Z></path> <path d=M8,13H7.683l-0.351.8a1.933,1.933,0,0,1-.124.2H8V13Z></path> <rect height=1 width=1 x=12 y=2></rect> <rect height=1 width=1 x=11 y=3></rect> <path d=M9,3H8V3.282A1.985,1.985,0,0,1,9,3Z></path> <rect height=1 width=1 x=2 y=3></rect> <rect height=1 width=1 x=6 y=2></rect> <rect height=1 width=1 x=3 y=2></rect> <rect height=1 width=1 x=5 y=3></rect> <rect height=1 width=1 x=9 y=2></rect> <rect height=1 width=1 x=15 y=14></rect> <polygon points="13.447 10.174 13.469 10.225 13.472 10.232 13.808 11 14 11 14 10 13.37 10 13.447 10.174"></polygon> <rect height=1 width=1 x=13 y=7></rect> <rect height=1 width=1 x=15 y=5></rect> <rect height=1 width=1 x=14 y=6></rect> <rect height=1 width=1 x=15 y=8></rect> <rect height=1 width=1 x=14 y=9></rect> <path d=M3.775,14H3v1H4V14.314A1.97,1.97,0,0,1,3.775,14Z></path> <rect height=1 width=1 x=14 y=3></rect> <polygon points="12 6.868 12 6 11.62 6 12 6.868"></polygon> <rect height=1 width=1 x=15 y=2></rect> <rect height=1 width=1 x=12 y=5></rect> <rect height=1 width=1 x=13 y=4></rect> <polygon points="12.933 9 13 9 13 8 12.495 8 12.933 9"></polygon> <rect height=1 width=1 x=9 y=14></rect> <rect height=1 width=1 x=8 y=15></rect> <path d=M6,14.926V15H7V14.316A1.993,1.993,0,0,1,6,14.926Z></path> <rect height=1 width=1 x=5 y=15></rect> <path d=M10.668,13.8L10.317,13H10v1h0.792A1.947,1.947,0,0,1,10.668,13.8Z></path> <rect height=1 width=1 x=11 y=15></rect> <path d=M14.332,12.2a1.99,1.99,0,0,1,.166.8H15V12H14.245Z></path> <rect height=1 width=1 x=14 y=15></rect> <rect height=1 width=1 x=15 y=11></rect> </g> <polyline class=ql-stroke points="5.5 13 9 5 12.5 13"></polyline> <line class=ql-stroke x1=11.63 x2=6.38 y1=11 y2=11></line> </svg>'},function(t,e){t.exports='<svg viewbox="0 0 18 18"> <rect class="ql-fill ql-stroke" height=3 width=3 x=4 y=5></rect> <rect class="ql-fill ql-stroke" height=3 width=3 x=11 y=5></rect> <path class="ql-even ql-fill ql-stroke" d=M7,8c0,4.031-3,5-3,5></path> <path class="ql-even ql-fill ql-stroke" d=M14,8c0,4.031-3,5-3,5></path> </svg>'},function(t,e){t.exports='<svg viewbox="0 0 18 18"> <path class=ql-stroke d=M5,4H9.5A2.5,2.5,0,0,1,12,6.5v0A2.5,2.5,0,0,1,9.5,9H5A0,0,0,0,1,5,9V4A0,0,0,0,1,5,4Z></path> <path class=ql-stroke d=M5,9h5.5A2.5,2.5,0,0,1,13,11.5v0A2.5,2.5,0,0,1,10.5,14H5a0,0,0,0,1,0,0V9A0,0,0,0,1,5,9Z></path> </svg>'},function(t,e){t.exports='<svg class="" viewbox="0 0 18 18"> <line class=ql-stroke x1=5 x2=13 y1=3 y2=3></line> <line class=ql-stroke x1=6 x2=9.35 y1=12 y2=3></line> <line class=ql-stroke x1=11 x2=15 y1=11 y2=15></line> <line class=ql-stroke x1=15 x2=11 y1=11 y2=15></line> <rect class=ql-fill height=1 rx=0.5 ry=0.5 width=7 x=2 y=14></rect> </svg>'},function(t,e){t.exports='<svg viewbox="0 0 18 18"> <line class="ql-color-label ql-stroke ql-transparent" x1=3 x2=15 y1=15 y2=15></line> <polyline class=ql-stroke points="5.5 11 9 3 12.5 11"></polyline> <line class=ql-stroke x1=11.63 x2=6.38 y1=9 y2=9></line> </svg>'},function(t,e){t.exports='<svg viewbox="0 0 18 18"> <polygon class="ql-stroke ql-fill" points="3 11 5 9 3 7 3 11"></polygon> <line class="ql-stroke ql-fill" x1=15 x2=11 y1=4 y2=4></line> <path class=ql-fill d=M11,3a3,3,0,0,0,0,6h1V3H11Z></path> <rect class=ql-fill height=11 width=1 x=11 y=4></rect> <rect class=ql-fill height=11 width=1 x=13 y=4></rect> </svg>'},function(t,e){t.exports='<svg viewbox="0 0 18 18"> <polygon class="ql-stroke ql-fill" points="15 12 13 10 15 8 15 12"></polygon> <line class="ql-stroke ql-fill" x1=9 x2=5 y1=4 y2=4></line> <path class=ql-fill d=M5,3A3,3,0,0,0,5,9H6V3H5Z></path> <rect class=ql-fill height=11 width=1 x=5 y=4></rect> <rect class=ql-fill height=11 width=1 x=7 y=4></rect> </svg>'},function(t,e){t.exports='<svg viewbox="0 0 18 18"> <polygon class=ql-stroke points="7 11 9 13 11 11 7 11"></polygon> <polygon class=ql-stroke points="7 7 9 5 11 7 7 7"></polygon> </svg>'},function(t,e){t.exports='<svg viewbox="0 0 18 18"> <path class=ql-fill d=M14,16H4a1,1,0,0,1,0-2H14A1,1,0,0,1,14,16Z /> <path class=ql-fill d=M14,4H4A1,1,0,0,1,4,2H14A1,1,0,0,1,14,4Z /> <rect class=ql-fill x=3 y=6 width=12 height=6 rx=1 ry=1 /> </svg>'},function(t,e){t.exports='<svg viewbox="0 0 18 18"> <path class=ql-fill d=M13,16H5a1,1,0,0,1,0-2h8A1,1,0,0,1,13,16Z /> <path class=ql-fill d=M13,4H5A1,1,0,0,1,5,2h8A1,1,0,0,1,13,4Z /> <rect class=ql-fill x=2 y=6 width=14 height=6 rx=1 ry=1 /> </svg>'},function(t,e){t.exports='<svg viewbox="0 0 18 18"> <path class=ql-fill d=M15,8H13a1,1,0,0,1,0-2h2A1,1,0,0,1,15,8Z /> <path class=ql-fill d=M15,12H13a1,1,0,0,1,0-2h2A1,1,0,0,1,15,12Z /> <path class=ql-fill d=M15,16H5a1,1,0,0,1,0-2H15A1,1,0,0,1,15,16Z /> <path class=ql-fill d=M15,4H5A1,1,0,0,1,5,2H15A1,1,0,0,1,15,4Z /> <rect class=ql-fill x=2 y=6 width=8 height=6 rx=1 ry=1 /> </svg>'},function(t,e){t.exports='<svg viewbox="0 0 18 18"> <path class=ql-fill d=M5,8H3A1,1,0,0,1,3,6H5A1,1,0,0,1,5,8Z /> <path class=ql-fill d=M5,12H3a1,1,0,0,1,0-2H5A1,1,0,0,1,5,12Z /> <path class=ql-fill d=M13,16H3a1,1,0,0,1,0-2H13A1,1,0,0,1,13,16Z /> <path class=ql-fill d=M13,4H3A1,1,0,0,1,3,2H13A1,1,0,0,1,13,4Z /> <rect class=ql-fill x=8 y=6 width=8 height=6 rx=1 ry=1 transform="translate(24 18) rotate(-180)"/> </svg>'},function(t,e){t.exports='<svg viewbox="0 0 18 18"> <path class=ql-fill d=M11.759,2.482a2.561,2.561,0,0,0-3.53.607A7.656,7.656,0,0,0,6.8,6.2C6.109,9.188,5.275,14.677,4.15,14.927a1.545,1.545,0,0,0-1.3-.933A0.922,0.922,0,0,0,2,15.036S1.954,16,4.119,16s3.091-2.691,3.7-5.553c0.177-.826.36-1.726,0.554-2.6L8.775,6.2c0.381-1.421.807-2.521,1.306-2.676a1.014,1.014,0,0,0,1.02.56A0.966,0.966,0,0,0,11.759,2.482Z></path> <rect class=ql-fill height=1.6 rx=0.8 ry=0.8 width=5 x=5.15 y=6.2></rect> <path class=ql-fill d=M13.663,12.027a1.662,1.662,0,0,1,.266-0.276q0.193,0.069.456,0.138a2.1,2.1,0,0,0,.535.069,1.075,1.075,0,0,0,.767-0.3,1.044,1.044,0,0,0,.314-0.8,0.84,0.84,0,0,0-.238-0.619,0.8,0.8,0,0,0-.594-0.239,1.154,1.154,0,0,0-.781.3,4.607,4.607,0,0,0-.781,1q-0.091.15-.218,0.346l-0.246.38c-0.068-.288-0.137-0.582-0.212-0.885-0.459-1.847-2.494-.984-2.941-0.8-0.482.2-.353,0.647-0.094,0.529a0.869,0.869,0,0,1,1.281.585c0.217,0.751.377,1.436,0.527,2.038a5.688,5.688,0,0,1-.362.467,2.69,2.69,0,0,1-.264.271q-0.221-.08-0.471-0.147a2.029,2.029,0,0,0-.522-0.066,1.079,1.079,0,0,0-.768.3A1.058,1.058,0,0,0,9,15.131a0.82,0.82,0,0,0,.832.852,1.134,1.134,0,0,0,.787-0.3,5.11,5.11,0,0,0,.776-0.993q0.141-.219.215-0.34c0.046-.076.122-0.194,0.223-0.346a2.786,2.786,0,0,0,.918,1.726,2.582,2.582,0,0,0,2.376-.185c0.317-.181.212-0.565,0-0.494A0.807,0.807,0,0,1,14.176,15a5.159,5.159,0,0,1-.913-2.446l0,0Q13.487,12.24,13.663,12.027Z></path> </svg>'},function(t,e){t.exports='<svg viewbox="0 0 18 18"> <line class=ql-stroke x1=3 x2=3 y1=4 y2=14></line> <line class=ql-stroke x1=11 x2=11 y1=4 y2=14></line> <line class=ql-stroke x1=11 x2=3 y1=9 y2=9></line> <path class="ql-stroke ql-thin" d=M15.5,14.5h-2c0-.234,1.85-1.076,1.85-2.234a0.959,0.959,0,0,0-1.85-.109></path> </svg>'},function(t,e){t.exports='<svg viewbox="0 0 18 18"> <line class=ql-stroke x1=3 x2=3 y1=4 y2=14></line> <line class=ql-stroke x1=11 x2=11 y1=4 y2=14></line> <line class=ql-stroke x1=11 x2=3 y1=9 y2=9></line> <line class="ql-stroke ql-thin" x1=13.5 x2=15.5 y1=14.5 y2=14.5></line> <path class=ql-fill d=M14.5,15a0.5,0.5,0,0,1-.5-0.5V12.085l-0.276.138A0.5,0.5,0,0,1,13.053,12c-0.124-.247-0.023-0.324.224-0.447l1-.5A0.5,0.5,0,0,1,15,11.5v3A0.5,0.5,0,0,1,14.5,15Z></path> </svg>'},function(t,e){t.exports='<svg viewbox="0 0 18 18"> <rect class=ql-stroke height=10 width=12 x=3 y=4></rect> <circle class=ql-fill cx=6 cy=7 r=1></circle> <polyline class="ql-even ql-fill" points="5 12 5 11 7 9 8 10 11 7 13 9 13 12 5 12"></polyline> </svg>'},function(t,e){t.exports='<svg viewbox="0 0 18 18"> <line class=ql-stroke x1=3 x2=15 y1=14 y2=14></line> <line class=ql-stroke x1=3 x2=15 y1=4 y2=4></line> <line class=ql-stroke x1=9 x2=15 y1=9 y2=9></line> <polyline class="ql-fill ql-stroke" points="3 7 3 11 5 9 3 7"></polyline> </svg>'},function(t,e){t.exports='<svg viewbox="0 0 18 18"> <line class=ql-stroke x1=7 x2=13 y1=4 y2=4></line> <line class=ql-stroke x1=5 x2=11 y1=14 y2=14></line> <line class=ql-stroke x1=8 x2=10 y1=14 y2=4></line> </svg>'},function(t,e){t.exports='<svg viewbox="0 0 18 18"> <line class=ql-stroke x1=7 x2=11 y1=7 y2=11></line> <path class="ql-even ql-stroke" d=M8.9,4.577a3.476,3.476,0,0,1,.36,4.679A3.476,3.476,0,0,1,4.577,8.9C3.185,7.5,2.035,6.4,4.217,4.217S7.5,3.185,8.9,4.577Z></path> <path class="ql-even ql-stroke" d=M13.423,9.1a3.476,3.476,0,0,0-4.679-.36,3.476,3.476,0,0,0,.36,4.679c1.392,1.392,2.5,2.542,4.679.36S14.815,10.5,13.423,9.1Z></path> </svg>'},function(t,e){t.exports='<svg viewbox="0 0 18 18"> <line class=ql-stroke x1=6 x2=15 y1=4 y2=4></line> <line class=ql-stroke x1=6 x2=15 y1=9 y2=9></line> <line class=ql-stroke x1=6 x2=15 y1=14 y2=14></line> <line class=ql-stroke x1=3 x2=3 y1=4 y2=4></line> <line class=ql-stroke x1=3 x2=3 y1=9 y2=9></line> <line class=ql-stroke x1=3 x2=3 y1=14 y2=14></line> </svg>'},function(t,e){t.exports='<svg class="" viewbox="0 0 18 18"> <line class=ql-stroke x1=9 x2=15 y1=4 y2=4></line> <polyline class=ql-stroke points="3 4 4 5 6 3"></polyline> <line class=ql-stroke x1=9 x2=15 y1=14 y2=14></line> <polyline class=ql-stroke points="3 14 4 15 6 13"></polyline> <line class=ql-stroke x1=9 x2=15 y1=9 y2=9></line> <polyline class=ql-stroke points="3 9 4 10 6 8"></polyline> </svg>'},function(t,e){t.exports='<svg viewbox="0 0 18 18"> <line class=ql-stroke x1=7 x2=15 y1=4 y2=4></line> <line class=ql-stroke x1=7 x2=15 y1=9 y2=9></line> <line class=ql-stroke x1=7 x2=15 y1=14 y2=14></line> <line class="ql-stroke ql-thin" x1=2.5 x2=4.5 y1=5.5 y2=5.5></line> <path class=ql-fill d=M3.5,6A0.5,0.5,0,0,1,3,5.5V3.085l-0.276.138A0.5,0.5,0,0,1,2.053,3c-0.124-.247-0.023-0.324.224-0.447l1-.5A0.5,0.5,0,0,1,4,2.5v3A0.5,0.5,0,0,1,3.5,6Z></path> <path class="ql-stroke ql-thin" d=M4.5,10.5h-2c0-.234,1.85-1.076,1.85-2.234A0.959,0.959,0,0,0,2.5,8.156></path> <path class="ql-stroke ql-thin" d=M2.5,14.846a0.959,0.959,0,0,0,1.85-.109A0.7,0.7,0,0,0,3.75,14a0.688,0.688,0,0,0,.6-0.736,0.959,0.959,0,0,0-1.85-.109></path> </svg>'},function(t,e){t.exports='<svg viewbox="0 0 18 18"> <line class=ql-stroke x1=3 x2=15 y1=14 y2=14></line> <line class=ql-stroke x1=3 x2=15 y1=4 y2=4></line> <line class=ql-stroke x1=9 x2=15 y1=9 y2=9></line> <polyline class=ql-stroke points="5 7 5 11 3 9 5 7"></polyline> </svg>'},function(t,e){t.exports='<svg viewbox="0 0 18 18"> <line class="ql-stroke ql-thin" x1=15.5 x2=2.5 y1=8.5 y2=9.5></line> <path class=ql-fill d=M9.007,8C6.542,7.791,6,7.519,6,6.5,6,5.792,7.283,5,9,5c1.571,0,2.765.679,2.969,1.309a1,1,0,0,0,1.9-.617C13.356,4.106,11.354,3,9,3,6.2,3,4,4.538,4,6.5a3.2,3.2,0,0,0,.5,1.843Z></path> <path class=ql-fill d=M8.984,10C11.457,10.208,12,10.479,12,11.5c0,0.708-1.283,1.5-3,1.5-1.571,0-2.765-.679-2.969-1.309a1,1,0,1,0-1.9.617C4.644,13.894,6.646,15,9,15c2.8,0,5-1.538,5-3.5a3.2,3.2,0,0,0-.5-1.843Z></path> </svg>'},function(t,e){t.exports='<svg viewbox="0 0 18 18"> <path class=ql-fill d=M15.5,15H13.861a3.858,3.858,0,0,0,1.914-2.975,1.8,1.8,0,0,0-1.6-1.751A1.921,1.921,0,0,0,12.021,11.7a0.50013,0.50013,0,1,0,.957.291h0a0.914,0.914,0,0,1,1.053-.725,0.81,0.81,0,0,1,.744.762c0,1.076-1.16971,1.86982-1.93971,2.43082A1.45639,1.45639,0,0,0,12,15.5a0.5,0.5,0,0,0,.5.5h3A0.5,0.5,0,0,0,15.5,15Z /> <path class=ql-fill d=M9.65,5.241a1,1,0,0,0-1.409.108L6,7.964,3.759,5.349A1,1,0,0,0,2.192,6.59178Q2.21541,6.6213,2.241,6.649L4.684,9.5,2.241,12.35A1,1,0,0,0,3.71,13.70722q0.02557-.02768.049-0.05722L6,11.036,8.241,13.65a1,1,0,1,0,1.567-1.24277Q9.78459,12.3777,9.759,12.35L7.316,9.5,9.759,6.651A1,1,0,0,0,9.65,5.241Z /> </svg>'},function(t,e){t.exports='<svg viewbox="0 0 18 18"> <path class=ql-fill d=M15.5,7H13.861a4.015,4.015,0,0,0,1.914-2.975,1.8,1.8,0,0,0-1.6-1.751A1.922,1.922,0,0,0,12.021,3.7a0.5,0.5,0,1,0,.957.291,0.917,0.917,0,0,1,1.053-.725,0.81,0.81,0,0,1,.744.762c0,1.077-1.164,1.925-1.934,2.486A1.423,1.423,0,0,0,12,7.5a0.5,0.5,0,0,0,.5.5h3A0.5,0.5,0,0,0,15.5,7Z /> <path class=ql-fill d=M9.651,5.241a1,1,0,0,0-1.41.108L6,7.964,3.759,5.349a1,1,0,1,0-1.519,1.3L4.683,9.5,2.241,12.35a1,1,0,1,0,1.519,1.3L6,11.036,8.241,13.65a1,1,0,0,0,1.519-1.3L7.317,9.5,9.759,6.651A1,1,0,0,0,9.651,5.241Z /> </svg>'},function(t,e){t.exports='<svg viewbox="0 0 18 18"> <path class=ql-stroke d=M5,3V9a4.012,4.012,0,0,0,4,4H9a4.012,4.012,0,0,0,4-4V3></path> <rect class=ql-fill height=1 rx=0.5 ry=0.5 width=12 x=3 y=15></rect> </svg>'},function(t,e){t.exports='<svg viewbox="0 0 18 18"> <rect class=ql-stroke height=12 width=12 x=3 y=3></rect> <rect class=ql-fill height=12 width=1 x=5 y=3></rect> <rect class=ql-fill height=12 width=1 x=12 y=3></rect> <rect class=ql-fill height=2 width=8 x=5 y=8></rect> <rect class=ql-fill height=1 width=3 x=3 y=5></rect> <rect class=ql-fill height=1 width=3 x=3 y=7></rect> <rect class=ql-fill height=1 width=3 x=3 y=10></rect> <rect class=ql-fill height=1 width=3 x=3 y=12></rect> <rect class=ql-fill height=1 width=3 x=12 y=5></rect> <rect class=ql-fill height=1 width=3 x=12 y=7></rect> <rect class=ql-fill height=1 width=3 x=12 y=10></rect> <rect class=ql-fill height=1 width=3 x=12 y=12></rect> </svg>'},,,,,,,,,,,,,,,,,,,,,,,,,,,,function(t,e,n){t.exports=n(62)}])})}).call(e,n(2).Buffer)},function(t,e,n){n(17);var r=n(13)(n(4),n(14),null,null);t.exports=r.exports},function(t,e){t.exports=function(t,e,n,r){var o,i=t=t||{},l=typeof t.default;"object"!==l&&"function"!==l||(o=t,i=t.default);var a="function"==typeof i?i.options:i;if(e&&(a.render=e.render,a.staticRenderFns=e.staticRenderFns),n&&(a._scopeId=n),r){var s=Object.create(a.computed||null);Object.keys(r).forEach(function(t){var e=r[t];s[t]=function(){return e}}),a.computed=s}return{esModule:o,exports:i,options:a}}},function(t,e){t.exports={render:function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{staticClass:"quillWrapper"},[n("div",{ref:"quillContainer",attrs:{id:t.id}})])},staticRenderFns:[]}},function(t,e,n){var r=n(6);"string"==typeof r&&(r=[[t.i,r,""]]),r.locals&&(t.exports=r.locals);n(1)("3a8079a0",r,!0)},function(t,e,n){var r=n(7);"string"==typeof r&&(r=[[t.i,r,""]]),r.locals&&(t.exports=r.locals);n(1)("d22a7388",r,!0)},function(t,e,n){var r=n(8);"string"==typeof r&&(r=[[t.i,r,""]]),r.locals&&(t.exports=r.locals);n(1)("1cdebd1c",r,!0)},function(t,e){t.exports=function(t,e){for(var n=[],r={},o=0;o<e.length;o++){var i=e[o],l=i[0],a=i[1],s=i[2],u=i[3],c={id:t+":"+o,css:a,media:s,sourceMap:u};r[l]?r[l].parts.push(c):n.push(r[l]={id:l,parts:[c]})}return n}},function(t,e){var n;n=function(){return this}();try{n=n||Function("return this")()||(0,eval)("this")}catch(t){"object"==typeof window&&(n=window)}t.exports=n},function(t,e,n){t.exports=n(3)}])});
56981
56982/***/ }),
56983
vendor: 1,385 bytes, lines 56984-57025
56984/***/ "./node_modules/youtube-player/dist/FunctionStateMap.js":
56985/*!**************************************************************!*\
56986  !*** ./node_modules/youtube-player/dist/FunctionStateMap.js ***!
56987  \**************************************************************/
56988/***/ ((module, exports, __webpack_require__) => {
56989
56990"use strict";
56991
56992
56993Object.defineProperty(exports, "__esModule", ({
56994  value: true
56995}));
56996
56997var _PlayerStates = __webpack_require__(/*! ./constants/PlayerStates */ "./node_modules/youtube-player/dist/constants/PlayerStates.js");
56998
56999var _PlayerStates2 = _interopRequireDefault(_PlayerStates);
57000
57001function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
57002
57003exports["default"] = {
57004  pauseVideo: {
57005    acceptableStates: [_PlayerStates2.default.ENDED, _PlayerStates2.default.PAUSED],
57006    stateChangeRequired: false
57007  },
57008  playVideo: {
57009    acceptableStates: [_PlayerStates2.default.ENDED, _PlayerStates2.default.PLAYING],
57010    stateChangeRequired: false
57011  },
57012  seekTo: {
57013    acceptableStates: [_PlayerStates2.default.ENDED, _PlayerStates2.default.PLAYING, _PlayerStates2.default.PAUSED],
57014    stateChangeRequired: true,
57015
57016    // TRICKY: `seekTo` may not cause a state change if no buffering is
57017    // required.
57018    // eslint-disable-next-line unicorn/numeric-separators-style
57019    timeout: 3000
57020  }
57021};
57022module.exports = exports['default'];
57023
57024/***/ }),
57025
vendor: 5,059 bytes, lines 57026-57173
57026/***/ "./node_modules/youtube-player/dist/YouTubePlayer.js":
57027/*!***********************************************************!*\
57028  !*** ./node_modules/youtube-player/dist/YouTubePlayer.js ***!
57029  \***********************************************************/
57030/***/ ((module, exports, __webpack_require__) => {
57031
57032"use strict";
57033
57034
57035Object.defineProperty(exports, "__esModule", ({
57036  value: true
57037}));
57038
57039var _debug = __webpack_require__(/*! debug */ "./node_modules/youtube-player/node_modules/debug/src/browser.js");
57040
57041var _debug2 = _interopRequireDefault(_debug);
57042
57043var _FunctionStateMap = __webpack_require__(/*! ./FunctionStateMap */ "./node_modules/youtube-player/dist/FunctionStateMap.js");
57044
57045var _FunctionStateMap2 = _interopRequireDefault(_FunctionStateMap);
57046
57047var _eventNames = __webpack_require__(/*! ./eventNames */ "./node_modules/youtube-player/dist/eventNames.js");
57048
57049var _eventNames2 = _interopRequireDefault(_eventNames);
57050
57051var _functionNames = __webpack_require__(/*! ./functionNames */ "./node_modules/youtube-player/dist/functionNames.js");
57052
57053var _functionNames2 = _interopRequireDefault(_functionNames);
57054
57055function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
57056
57057/* eslint-disable promise/prefer-await-to-then */
57058
57059const debug = (0, _debug2.default)('youtube-player');
57060
57061const YouTubePlayer = {};
57062
57063/**
57064 * Construct an object that defines an event handler for all of the YouTube
57065 * player events. Proxy captured events through an event emitter.
57066 *
57067 * @todo Capture event parameters.
57068 * @see https://developers.google.com/youtube/iframe_api_reference#Events
57069 */
57070YouTubePlayer.proxyEvents = emitter => {
57071  const events = {};
57072
57073  for (const eventName of _eventNames2.default) {
57074    const onEventName = 'on' + eventName.slice(0, 1).toUpperCase() + eventName.slice(1);
57075
57076    events[onEventName] = event => {
57077      debug('event "%s"', onEventName, event);
57078
57079      emitter.trigger(eventName, event);
57080    };
57081  }
57082
57083  return events;
57084};
57085
57086/**
57087 * Delays player API method execution until player state is ready.
57088 *
57089 * @todo Proxy all of the methods using Object.keys.
57090 * @todo See TRICKY below.
57091 * @param playerAPIReady Promise that resolves when player is ready.
57092 * @param strictState A flag designating whether or not to wait for
57093 * an acceptable state when calling supported functions.
57094 * @returns {object}
57095 */
57096YouTubePlayer.promisifyPlayer = (playerAPIReady, strictState = false) => {
57097  const functions = {};
57098
57099  for (const functionName of _functionNames2.default) {
57100    if (strictState && _FunctionStateMap2.default[functionName]) {
57101      functions[functionName] = (...args) => {
57102        return playerAPIReady.then(player => {
57103          const stateInfo = _FunctionStateMap2.default[functionName];
57104          const playerState = player.getPlayerState();
57105
57106          // eslint-disable-next-line no-warning-comments
57107          // TODO: Just spread the args into the function once Babel is fixed:
57108          // https://github.com/babel/babel/issues/4270
57109          //
57110          // eslint-disable-next-line prefer-spread
57111          const value = player[functionName].apply(player, args);
57112
57113          // TRICKY: For functions like `seekTo`, a change in state must be
57114          // triggered given that the resulting state could match the initial
57115          // state.
57116          if (stateInfo.stateChangeRequired ||
57117
57118          // eslint-disable-next-line no-extra-parens
57119          Array.isArray(stateInfo.acceptableStates) && !stateInfo.acceptableStates.includes(playerState)) {
57120            return new Promise(resolve => {
57121              const onPlayerStateChange = () => {
57122                const playerStateAfterChange = player.getPlayerState();
57123
57124                let timeout;
57125
57126                if (typeof stateInfo.timeout === 'number') {
57127                  timeout = setTimeout(() => {
57128                    player.removeEventListener('onStateChange', onPlayerStateChange);
57129
57130                    resolve();
57131                  }, stateInfo.timeout);
57132                }
57133
57134                if (Array.isArray(stateInfo.acceptableStates) && stateInfo.acceptableStates.includes(playerStateAfterChange)) {
57135                  player.removeEventListener('onStateChange', onPlayerStateChange);
57136
57137                  clearTimeout(timeout);
57138
57139                  resolve();
57140                }
57141              };
57142
57143              player.addEventListener('onStateChange', onPlayerStateChange);
57144            }).then(() => {
57145              return value;
57146            });
57147          }
57148
57149          return value;
57150        });
57151      };
57152    } else {
57153      functions[functionName] = (...args) => {
57154        return playerAPIReady.then(player => {
57155          // eslint-disable-next-line no-warning-comments
57156          // TODO: Just spread the args into the function once Babel is fixed:
57157          // https://github.com/babel/babel/issues/4270
57158          //
57159          // eslint-disable-next-line prefer-spread
57160          return player[functionName].apply(player, args);
57161        });
57162      };
57163    }
57164  }
57165
57166  return functions;
57167};
57168
57169exports["default"] = YouTubePlayer;
57170module.exports = exports['default'];
57171
57172/***/ }),
57173
vendor: 568 bytes, lines 57174-57197
57174/***/ "./node_modules/youtube-player/dist/constants/PlayerStates.js":
57175/*!********************************************************************!*\
57176  !*** ./node_modules/youtube-player/dist/constants/PlayerStates.js ***!
57177  \********************************************************************/
57178/***/ ((module, exports) => {
57179
57180"use strict";
57181
57182
57183Object.defineProperty(exports, "__esModule", ({
57184  value: true
57185}));
57186exports["default"] = {
57187  BUFFERING: 3,
57188  ENDED: 0,
57189  PAUSED: 2,
57190  PLAYING: 1,
57191  UNSTARTED: -1,
57192  VIDEO_CUED: 5
57193};
57194module.exports = exports["default"];
57195
57196/***/ }),
57197
vendor: 752 bytes, lines 57198-57221
57198/***/ "./node_modules/youtube-player/dist/eventNames.js":
57199/*!********************************************************!*\
57200  !*** ./node_modules/youtube-player/dist/eventNames.js ***!
57201  \********************************************************/
57202/***/ ((module, exports) => {
57203
57204"use strict";
57205
57206
57207Object.defineProperty(exports, "__esModule", ({
57208  value: true
57209}));
57210
57211
57212/**
57213 * @see https://developers.google.com/youtube/iframe_api_reference#Events
57214 * `volumeChange` is not officially supported but seems to work
57215 * it emits an object: `{volume: 82.6923076923077, muted: false}`
57216 */
57217exports["default"] = ['ready', 'stateChange', 'playbackQualityChange', 'playbackRateChange', 'error', 'apiChange', 'volumeChange'];
57218module.exports = exports['default'];
57219
57220/***/ }),
57221
vendor: 1,260 bytes, lines 57222-57243
57222/***/ "./node_modules/youtube-player/dist/functionNames.js":
57223/*!***********************************************************!*\
57224  !*** ./node_modules/youtube-player/dist/functionNames.js ***!
57225  \***********************************************************/
57226/***/ ((module, exports) => {
57227
57228"use strict";
57229
57230
57231Object.defineProperty(exports, "__esModule", ({
57232  value: true
57233}));
57234
57235
57236/**
57237 * @see https://developers.google.com/youtube/iframe_api_reference#Functions
57238 */
57239exports["default"] = ['cueVideoById', 'loadVideoById', 'cueVideoByUrl', 'loadVideoByUrl', 'playVideo', 'pauseVideo', 'stopVideo', 'getVideoLoadedFraction', 'cuePlaylist', 'loadPlaylist', 'nextVideo', 'previousVideo', 'playVideoAt', 'setShuffle', 'setLoop', 'getPlaylist', 'getPlaylistIndex', 'setOption', 'mute', 'unMute', 'isMuted', 'setVolume', 'getVolume', 'seekTo', 'getPlayerState', 'getPlaybackRate', 'setPlaybackRate', 'getAvailablePlaybackRates', 'getPlaybackQuality', 'setPlaybackQuality', 'getAvailableQualityLevels', 'getCurrentTime', 'getDuration', 'removeEventListener', 'getVideoUrl', 'getVideoEmbedCode', 'getOptions', 'getOption', 'addEventListener', 'destroy', 'setSize', 'getIframe', 'getSphericalProperties', 'setSphericalProperties'];
57240module.exports = exports['default'];
57241
57242/***/ }),
57243
vendor: 3,255 bytes, lines 57244-57343
57244/***/ "./node_modules/youtube-player/dist/index.js":
57245/*!***************************************************!*\
57246  !*** ./node_modules/youtube-player/dist/index.js ***!
57247  \***************************************************/
57248/***/ ((module, exports, __webpack_require__) => {
57249
57250"use strict";
57251
57252
57253Object.defineProperty(exports, "__esModule", ({
57254  value: true
57255}));
57256
57257var _sister = __webpack_require__(/*! sister */ "./node_modules/sister/src/sister.js");
57258
57259var _sister2 = _interopRequireDefault(_sister);
57260
57261var _YouTubePlayer = __webpack_require__(/*! ./YouTubePlayer */ "./node_modules/youtube-player/dist/YouTubePlayer.js");
57262
57263var _YouTubePlayer2 = _interopRequireDefault(_YouTubePlayer);
57264
57265var _loadYouTubeIframeApi = __webpack_require__(/*! ./loadYouTubeIframeApi */ "./node_modules/youtube-player/dist/loadYouTubeIframeApi.js");
57266
57267var _loadYouTubeIframeApi2 = _interopRequireDefault(_loadYouTubeIframeApi);
57268
57269function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
57270
57271/**
57272 * @typedef YT.Player
57273 * @see https://developers.google.com/youtube/iframe_api_reference
57274 */
57275
57276/**
57277 * @see https://developers.google.com/youtube/iframe_api_reference#Loading_a_Video_Player
57278 */
57279let youtubeIframeAPI;
57280
57281/**
57282 * A factory function used to produce an instance of YT.Player and queue function calls and proxy events of the resulting object.
57283 *
57284 * @param maybeElementId Either An existing YT.Player instance,
57285 * the DOM element or the id of the HTML element where the API will insert an <iframe>.
57286 * @param options See `options` (Ignored when using an existing YT.Player instance).
57287 * @param strictState A flag designating whether or not to wait for
57288 * an acceptable state when calling supported functions. Default: `false`.
57289 * See `FunctionStateMap.js` for supported functions and acceptable states.
57290 */
57291
57292
57293exports["default"] = (maybeElementId, options = {}, strictState = false) => {
57294  const emitter = (0, _sister2.default)();
57295
57296  if (!youtubeIframeAPI) {
57297    youtubeIframeAPI = (0, _loadYouTubeIframeApi2.default)(emitter);
57298  }
57299
57300  if (options.events) {
57301    throw new Error('Event handlers cannot be overwritten.');
57302  }
57303
57304  // eslint-disable-next-line unicorn/prefer-query-selector
57305  if (typeof maybeElementId === 'string' && !document.getElementById(maybeElementId)) {
57306    throw new Error('Element "' + maybeElementId + '" does not exist.');
57307  }
57308
57309  options.events = _YouTubePlayer2.default.proxyEvents(emitter);
57310
57311  const playerAPIReady = new Promise(resolve => {
57312    if (typeof maybeElementId === 'object' && maybeElementId.playVideo instanceof Function) {
57313      const player = maybeElementId;
57314
57315      resolve(player);
57316    } else {
57317      // asume maybeElementId can be rendered inside
57318      // eslint-disable-next-line promise/catch-or-return
57319      youtubeIframeAPI.then(YT => {
57320        // eslint-disable-line promise/prefer-await-to-then
57321        const player = new YT.Player(maybeElementId, options);
57322
57323        emitter.on('ready', () => {
57324          resolve(player);
57325        });
57326
57327        return null;
57328      });
57329    }
57330  });
57331
57332  const playerApi = _YouTubePlayer2.default.promisifyPlayer(playerAPIReady, strictState);
57333
57334  playerApi.on = emitter.on;
57335  playerApi.off = emitter.off;
57336
57337  return playerApi;
57338};
57339
57340module.exports = exports['default'];
57341
57342/***/ }),
57343
vendor: 1,692 bytes, lines 57344-57402
57344/***/ "./node_modules/youtube-player/dist/loadYouTubeIframeApi.js":
57345/*!******************************************************************!*\
57346  !*** ./node_modules/youtube-player/dist/loadYouTubeIframeApi.js ***!
57347  \******************************************************************/
57348/***/ ((module, exports, __webpack_require__) => {
57349
57350"use strict";
57351
57352
57353Object.defineProperty(exports, "__esModule", ({
57354  value: true
57355}));
57356
57357var _loadScript = __webpack_require__(/*! load-script */ "./node_modules/load-script/index.js");
57358
57359var _loadScript2 = _interopRequireDefault(_loadScript);
57360
57361function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
57362
57363exports["default"] = emitter => {
57364  /**
57365   * A promise that is resolved when window.onYouTubeIframeAPIReady is called.
57366   * The promise is resolved with a reference to window.YT object.
57367   */
57368  const iframeAPIReady = new Promise(resolve => {
57369    if (window.YT && window.YT.Player && window.YT.Player instanceof Function) {
57370      resolve(window.YT);
57371
57372      return;
57373    } else {
57374      const protocol = window.location.protocol === 'http:' ? 'http:' : 'https:';
57375
57376      (0, _loadScript2.default)(protocol + '//www.youtube.com/iframe_api', error => {
57377        if (error) {
57378          emitter.trigger('error', error);
57379        }
57380      });
57381    }
57382
57383    const previous = window.onYouTubeIframeAPIReady;
57384
57385    // The API will call this function when page has finished downloading
57386    // the JavaScript for the player API.
57387    window.onYouTubeIframeAPIReady = () => {
57388      if (previous) {
57389        previous();
57390      }
57391
57392      resolve(window.YT);
57393    };
57394  });
57395
57396  return iframeAPIReady;
57397};
57398
57399module.exports = exports['default'];
57400
57401/***/ }),
57402
vendor: 6,640 bytes, lines 57403-57685
57403/***/ "./node_modules/youtube-player/node_modules/debug/src/browser.js":
57404/*!***********************************************************************!*\
57405  !*** ./node_modules/youtube-player/node_modules/debug/src/browser.js ***!
57406  \***********************************************************************/
57407/***/ ((module, exports, __webpack_require__) => {
57408
57409/* provided dependency */ var process = __webpack_require__(/*! process/browser.js */ "./node_modules/process/browser.js");
57410/* eslint-env browser */
57411
57412/**
57413 * This is the web browser implementation of `debug()`.
57414 */
57415
57416exports.formatArgs = formatArgs;
57417exports.save = save;
57418exports.load = load;
57419exports.useColors = useColors;
57420exports.storage = localstorage();
57421exports.destroy = (() => {
57422	let warned = false;
57423
57424	return () => {
57425		if (!warned) {
57426			warned = true;
57427			console.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');
57428		}
57429	};
57430})();
57431
57432/**
57433 * Colors.
57434 */
57435
57436exports.colors = [
57437	'#0000CC',
57438	'#0000FF',
57439	'#0033CC',
57440	'#0033FF',
57441	'#0066CC',
57442	'#0066FF',
57443	'#0099CC',
57444	'#0099FF',
57445	'#00CC00',
57446	'#00CC33',
57447	'#00CC66',
57448	'#00CC99',
57449	'#00CCCC',
57450	'#00CCFF',
57451	'#3300CC',
57452	'#3300FF',
57453	'#3333CC',
57454	'#3333FF',
57455	'#3366CC',
57456	'#3366FF',
57457	'#3399CC',
57458	'#3399FF',
57459	'#33CC00',
57460	'#33CC33',
57461	'#33CC66',
57462	'#33CC99',
57463	'#33CCCC',
57464	'#33CCFF',
57465	'#6600CC',
57466	'#6600FF',
57467	'#6633CC',
57468	'#6633FF',
57469	'#66CC00',
57470	'#66CC33',
57471	'#9900CC',
57472	'#9900FF',
57473	'#9933CC',
57474	'#9933FF',
57475	'#99CC00',
57476	'#99CC33',
57477	'#CC0000',
57478	'#CC0033',
57479	'#CC0066',
57480	'#CC0099',
57481	'#CC00CC',
57482	'#CC00FF',
57483	'#CC3300',
57484	'#CC3333',
57485	'#CC3366',
57486	'#CC3399',
57487	'#CC33CC',
57488	'#CC33FF',
57489	'#CC6600',
57490	'#CC6633',
57491	'#CC9900',
57492	'#CC9933',
57493	'#CCCC00',
57494	'#CCCC33',
57495	'#FF0000',
57496	'#FF0033',
57497	'#FF0066',
57498	'#FF0099',
57499	'#FF00CC',
57500	'#FF00FF',
57501	'#FF3300',
57502	'#FF3333',
57503	'#FF3366',
57504	'#FF3399',
57505	'#FF33CC',
57506	'#FF33FF',
57507	'#FF6600',
57508	'#FF6633',
57509	'#FF9900',
57510	'#FF9933',
57511	'#FFCC00',
57512	'#FFCC33'
57513];
57514
57515/**
57516 * Currently only WebKit-based Web Inspectors, Firefox >= v31,
57517 * and the Firebug extension (any Firefox version) are known
57518 * to support "%c" CSS customizations.
57519 *
57520 * TODO: add a `localStorage` variable to explicitly enable/disable colors
57521 */
57522
57523// eslint-disable-next-line complexity
57524function useColors() {
57525	// NB: In an Electron preload script, document will be defined but not fully
57526	// initialized. Since we know we're in Chrome, we'll just detect this case
57527	// explicitly
57528	if (typeof window !== 'undefined' && window.process && (window.process.type === 'renderer' || window.process.__nwjs)) {
57529		return true;
57530	}
57531
57532	// Internet Explorer and Edge do not support colors.
57533	if (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/)) {
57534		return false;
57535	}
57536
57537	let m;
57538
57539	// Is webkit? http://stackoverflow.com/a/16459606/376773
57540	// document is undefined in react-native: https://github.com/facebook/react-native/pull/1632
57541	// eslint-disable-next-line no-return-assign
57542	return (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||
57543		// Is firebug? http://stackoverflow.com/a/398120/376773
57544		(typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||
57545		// Is firefox >= v31?
57546		// https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages
57547		(typeof navigator !== 'undefined' && navigator.userAgent && (m = navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/)) && parseInt(m[1], 10) >= 31) ||
57548		// Double check webkit in userAgent just in case we are in a worker
57549		(typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/));
57550}
57551
57552/**
57553 * Colorize log arguments if enabled.
57554 *
57555 * @api public
57556 */
57557
57558function formatArgs(args) {
57559	args[0] = (this.useColors ? '%c' : '') +
57560		this.namespace +
57561		(this.useColors ? ' %c' : ' ') +
57562		args[0] +
57563		(this.useColors ? '%c ' : ' ') +
57564		'+' + module.exports.humanize(this.diff);
57565
57566	if (!this.useColors) {
57567		return;
57568	}
57569
57570	const c = 'color: ' + this.color;
57571	args.splice(1, 0, c, 'color: inherit');
57572
57573	// The final "%c" is somewhat tricky, because there could be other
57574	// arguments passed either before or after the %c, so we need to
57575	// figure out the correct index to insert the CSS into
57576	let index = 0;
57577	let lastC = 0;
57578	args[0].replace(/%[a-zA-Z%]/g, match => {
57579		if (match === '%%') {
57580			return;
57581		}
57582		index++;
57583		if (match === '%c') {
57584			// We only are interested in the *last* %c
57585			// (the user may have provided their own)
57586			lastC = index;
57587		}
57588	});
57589
57590	args.splice(lastC, 0, c);
57591}
57592
57593/**
57594 * Invokes `console.debug()` when available.
57595 * No-op when `console.debug` is not a "function".
57596 * If `console.debug` is not available, falls back
57597 * to `console.log`.
57598 *
57599 * @api public
57600 */
57601exports.log = console.debug || console.log || (() => {});
57602
57603/**
57604 * Save `namespaces`.
57605 *
57606 * @param {String} namespaces
57607 * @api private
57608 */
57609function save(namespaces) {
57610	try {
57611		if (namespaces) {
57612			exports.storage.setItem('debug', namespaces);
57613		} else {
57614			exports.storage.removeItem('debug');
57615		}
57616	} catch (error) {
57617		// Swallow
57618		// XXX (@Qix-) should we be logging these?
57619	}
57620}
57621
57622/**
57623 * Load `namespaces`.
57624 *
57625 * @return {String} returns the previously persisted debug modes
57626 * @api private
57627 */
57628function load() {
57629	let r;
57630	try {
57631		r = exports.storage.getItem('debug');
57632	} catch (error) {
57633		// Swallow
57634		// XXX (@Qix-) should we be logging these?
57635	}
57636
57637	// If debug isn't set in LS, and we're in Electron, try to load $DEBUG
57638	if (!r && typeof process !== 'undefined' && 'env' in process) {
57639		r = process.env.DEBUG;
57640	}
57641
57642	return r;
57643}
57644
57645/**
57646 * Localstorage attempts to return the localstorage.
57647 *
57648 * This is necessary because safari throws
57649 * when a user disables cookies/localstorage
57650 * and you attempt to access it.
57651 *
57652 * @return {LocalStorage}
57653 * @api private
57654 */
57655
57656function localstorage() {
57657	try {
57658		// TVMLKit (Apple TV JS Runtime) does not have a window object, just localStorage in the global context
57659		// The Browser also has localStorage in the global context.
57660		return localStorage;
57661	} catch (error) {
57662		// Swallow
57663		// XXX (@Qix-) should we be logging these?
57664	}
57665}
57666
57667module.exports = __webpack_require__(/*! ./common */ "./node_modules/youtube-player/node_modules/debug/src/common.js")(exports);
57668
57669const {formatters} = module.exports;
57670
57671/**
57672 * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.
57673 */
57674
57675formatters.j = function (v) {
57676	try {
57677		return JSON.stringify(v);
57678	} catch (error) {
57679		return '[UnexpectedJSONParseError]: ' + error.message;
57680	}
57681};
57682
57683
57684/***/ }),
57685
vendor: 7,367 bytes, lines 57686-57987
57686/***/ "./node_modules/youtube-player/node_modules/debug/src/common.js":
57687/*!**********************************************************************!*\
57688  !*** ./node_modules/youtube-player/node_modules/debug/src/common.js ***!
57689  \**********************************************************************/
57690/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
57691
57692
57693/**
57694 * This is the common logic for both the Node.js and web browser
57695 * implementations of `debug()`.
57696 */
57697
57698function setup(env) {
57699	createDebug.debug = createDebug;
57700	createDebug.default = createDebug;
57701	createDebug.coerce = coerce;
57702	createDebug.disable = disable;
57703	createDebug.enable = enable;
57704	createDebug.enabled = enabled;
57705	createDebug.humanize = __webpack_require__(/*! ms */ "./node_modules/youtube-player/node_modules/ms/index.js");
57706	createDebug.destroy = destroy;
57707
57708	Object.keys(env).forEach(key => {
57709		createDebug[key] = env[key];
57710	});
57711
57712	/**
57713	* The currently active debug mode names, and names to skip.
57714	*/
57715
57716	createDebug.names = [];
57717	createDebug.skips = [];
57718
57719	/**
57720	* Map of special "%n" handling functions, for the debug "format" argument.
57721	*
57722	* Valid key names are a single, lower or upper-case letter, i.e. "n" and "N".
57723	*/
57724	createDebug.formatters = {};
57725
57726	/**
57727	* Selects a color for a debug namespace
57728	* @param {String} namespace The namespace string for the debug instance to be colored
57729	* @return {Number|String} An ANSI color code for the given namespace
57730	* @api private
57731	*/
57732	function selectColor(namespace) {
57733		let hash = 0;
57734
57735		for (let i = 0; i < namespace.length; i++) {
57736			hash = ((hash << 5) - hash) + namespace.charCodeAt(i);
57737			hash |= 0; // Convert to 32bit integer
57738		}
57739
57740		return createDebug.colors[Math.abs(hash) % createDebug.colors.length];
57741	}
57742	createDebug.selectColor = selectColor;
57743
57744	/**
57745	* Create a debugger with the given `namespace`.
57746	*
57747	* @param {String} namespace
57748	* @return {Function}
57749	* @api public
57750	*/
57751	function createDebug(namespace) {
57752		let prevTime;
57753		let enableOverride = null;
57754		let namespacesCache;
57755		let enabledCache;
57756
57757		function debug(...args) {
57758			// Disabled?
57759			if (!debug.enabled) {
57760				return;
57761			}
57762
57763			const self = debug;
57764
57765			// Set `diff` timestamp
57766			const curr = Number(new Date());
57767			const ms = curr - (prevTime || curr);
57768			self.diff = ms;
57769			self.prev = prevTime;
57770			self.curr = curr;
57771			prevTime = curr;
57772
57773			args[0] = createDebug.coerce(args[0]);
57774
57775			if (typeof args[0] !== 'string') {
57776				// Anything else let's inspect with %O
57777				args.unshift('%O');
57778			}
57779
57780			// Apply any `formatters` transformations
57781			let index = 0;
57782			args[0] = args[0].replace(/%([a-zA-Z%])/g, (match, format) => {
57783				// If we encounter an escaped % then don't increase the array index
57784				if (match === '%%') {
57785					return '%';
57786				}
57787				index++;
57788				const formatter = createDebug.formatters[format];
57789				if (typeof formatter === 'function') {
57790					const val = args[index];
57791					match = formatter.call(self, val);
57792
57793					// Now we need to remove `args[index]` since it's inlined in the `format`
57794					args.splice(index, 1);
57795					index--;
57796				}
57797				return match;
57798			});
57799
57800			// Apply env-specific formatting (colors, etc.)
57801			createDebug.formatArgs.call(self, args);
57802
57803			const logFn = self.log || createDebug.log;
57804			logFn.apply(self, args);
57805		}
57806
57807		debug.namespace = namespace;
57808		debug.useColors = createDebug.useColors();
57809		debug.color = createDebug.selectColor(namespace);
57810		debug.extend = extend;
57811		debug.destroy = createDebug.destroy; // XXX Temporary. Will be removed in the next major release.
57812
57813		Object.defineProperty(debug, 'enabled', {
57814			enumerable: true,
57815			configurable: false,
57816			get: () => {
57817				if (enableOverride !== null) {
57818					return enableOverride;
57819				}
57820				if (namespacesCache !== createDebug.namespaces) {
57821					namespacesCache = createDebug.namespaces;
57822					enabledCache = createDebug.enabled(namespace);
57823				}
57824
57825				return enabledCache;
57826			},
57827			set: v => {
57828				enableOverride = v;
57829			}
57830		});
57831
57832		// Env-specific initialization logic for debug instances
57833		if (typeof createDebug.init === 'function') {
57834			createDebug.init(debug);
57835		}
57836
57837		return debug;
57838	}
57839
57840	function extend(namespace, delimiter) {
57841		const newDebug = createDebug(this.namespace + (typeof delimiter === 'undefined' ? ':' : delimiter) + namespace);
57842		newDebug.log = this.log;
57843		return newDebug;
57844	}
57845
57846	/**
57847	* Enables a debug mode by namespaces. This can include modes
57848	* separated by a colon and wildcards.
57849	*
57850	* @param {String} namespaces
57851	* @api public
57852	*/
57853	function enable(namespaces) {
57854		createDebug.save(namespaces);
57855		createDebug.namespaces = namespaces;
57856
57857		createDebug.names = [];
57858		createDebug.skips = [];
57859
57860		const split = (typeof namespaces === 'string' ? namespaces : '')
57861			.trim()
57862			.replace(' ', ',')
57863			.split(',')
57864			.filter(Boolean);
57865
57866		for (const ns of split) {
57867			if (ns[0] === '-') {
57868				createDebug.skips.push(ns.slice(1));
57869			} else {
57870				createDebug.names.push(ns);
57871			}
57872		}
57873	}
57874
57875	/**
57876	 * Checks if the given string matches a namespace template, honoring
57877	 * asterisks as wildcards.
57878	 *
57879	 * @param {String} search
57880	 * @param {String} template
57881	 * @return {Boolean}
57882	 */
57883	function matchesTemplate(search, template) {
57884		let searchIndex = 0;
57885		let templateIndex = 0;
57886		let starIndex = -1;
57887		let matchIndex = 0;
57888
57889		while (searchIndex < search.length) {
57890			if (templateIndex < template.length && (template[templateIndex] === search[searchIndex] || template[templateIndex] === '*')) {
57891				// Match character or proceed with wildcard
57892				if (template[templateIndex] === '*') {
57893					starIndex = templateIndex;
57894					matchIndex = searchIndex;
57895					templateIndex++; // Skip the '*'
57896				} else {
57897					searchIndex++;
57898					templateIndex++;
57899				}
57900			} else if (starIndex !== -1) { // eslint-disable-line no-negated-condition
57901				// Backtrack to the last '*' and try to match more characters
57902				templateIndex = starIndex + 1;
57903				matchIndex++;
57904				searchIndex = matchIndex;
57905			} else {
57906				return false; // No match
57907			}
57908		}
57909
57910		// Handle trailing '*' in template
57911		while (templateIndex < template.length && template[templateIndex] === '*') {
57912			templateIndex++;
57913		}
57914
57915		return templateIndex === template.length;
57916	}
57917
57918	/**
57919	* Disable debug output.
57920	*
57921	* @return {String} namespaces
57922	* @api public
57923	*/
57924	function disable() {
57925		const namespaces = [
57926			...createDebug.names,
57927			...createDebug.skips.map(namespace => '-' + namespace)
57928		].join(',');
57929		createDebug.enable('');
57930		return namespaces;
57931	}
57932
57933	/**
57934	* Returns true if the given mode name is enabled, false otherwise.
57935	*
57936	* @param {String} name
57937	* @return {Boolean}
57938	* @api public
57939	*/
57940	function enabled(name) {
57941		for (const skip of createDebug.skips) {
57942			if (matchesTemplate(name, skip)) {
57943				return false;
57944			}
57945		}
57946
57947		for (const ns of createDebug.names) {
57948			if (matchesTemplate(name, ns)) {
57949				return true;
57950			}
57951		}
57952
57953		return false;
57954	}
57955
57956	/**
57957	* Coerce `val`.
57958	*
57959	* @param {Mixed} val
57960	* @return {Mixed}
57961	* @api private
57962	*/
57963	function coerce(val) {
57964		if (val instanceof Error) {
57965			return val.stack || val.message;
57966		}
57967		return val;
57968	}
57969
57970	/**
57971	* XXX DO NOT USE. This is a temporary stub function.
57972	* XXX It WILL be removed in the next major release.
57973	*/
57974	function destroy() {
57975		console.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');
57976	}
57977
57978	createDebug.enable(createDebug.load());
57979
57980	return createDebug;
57981}
57982
57983module.exports = setup;
57984
57985
57986/***/ }),
57987
vendor: 3,326 bytes, lines 57988-58159
57988/***/ "./node_modules/youtube-player/node_modules/ms/index.js":
57989/*!**************************************************************!*\
57990  !*** ./node_modules/youtube-player/node_modules/ms/index.js ***!
57991  \**************************************************************/
57992/***/ ((module) => {
57993
57994/**
57995 * Helpers.
57996 */
57997
57998var s = 1000;
57999var m = s * 60;
58000var h = m * 60;
58001var d = h * 24;
58002var w = d * 7;
58003var y = d * 365.25;
58004
58005/**
58006 * Parse or format the given `val`.
58007 *
58008 * Options:
58009 *
58010 *  - `long` verbose formatting [false]
58011 *
58012 * @param {String|Number} val
58013 * @param {Object} [options]
58014 * @throws {Error} throw an error if val is not a non-empty string or a number
58015 * @return {String|Number}
58016 * @api public
58017 */
58018
58019module.exports = function (val, options) {
58020  options = options || {};
58021  var type = typeof val;
58022  if (type === 'string' && val.length > 0) {
58023    return parse(val);
58024  } else if (type === 'number' && isFinite(val)) {
58025    return options.long ? fmtLong(val) : fmtShort(val);
58026  }
58027  throw new Error(
58028    'val is not a non-empty string or a valid number. val=' +
58029      JSON.stringify(val)
58030  );
58031};
58032
58033/**
58034 * Parse the given `str` and return milliseconds.
58035 *
58036 * @param {String} str
58037 * @return {Number}
58038 * @api private
58039 */
58040
58041function parse(str) {
58042  str = String(str);
58043  if (str.length > 100) {
58044    return;
58045  }
58046  var match = /^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(
58047    str
58048  );
58049  if (!match) {
58050    return;
58051  }
58052  var n = parseFloat(match[1]);
58053  var type = (match[2] || 'ms').toLowerCase();
58054  switch (type) {
58055    case 'years':
58056    case 'year':
58057    case 'yrs':
58058    case 'yr':
58059    case 'y':
58060      return n * y;
58061    case 'weeks':
58062    case 'week':
58063    case 'w':
58064      return n * w;
58065    case 'days':
58066    case 'day':
58067    case 'd':
58068      return n * d;
58069    case 'hours':
58070    case 'hour':
58071    case 'hrs':
58072    case 'hr':
58073    case 'h':
58074      return n * h;
58075    case 'minutes':
58076    case 'minute':
58077    case 'mins':
58078    case 'min':
58079    case 'm':
58080      return n * m;
58081    case 'seconds':
58082    case 'second':
58083    case 'secs':
58084    case 'sec':
58085    case 's':
58086      return n * s;
58087    case 'milliseconds':
58088    case 'millisecond':
58089    case 'msecs':
58090    case 'msec':
58091    case 'ms':
58092      return n;
58093    default:
58094      return undefined;
58095  }
58096}
58097
58098/**
58099 * Short format for `ms`.
58100 *
58101 * @param {Number} ms
58102 * @return {String}
58103 * @api private
58104 */
58105
58106function fmtShort(ms) {
58107  var msAbs = Math.abs(ms);
58108  if (msAbs >= d) {
58109    return Math.round(ms / d) + 'd';
58110  }
58111  if (msAbs >= h) {
58112    return Math.round(ms / h) + 'h';
58113  }
58114  if (msAbs >= m) {
58115    return Math.round(ms / m) + 'm';
58116  }
58117  if (msAbs >= s) {
58118    return Math.round(ms / s) + 's';
58119  }
58120  return ms + 'ms';
58121}
58122
58123/**
58124 * Long format for `ms`.
58125 *
58126 * @param {Number} ms
58127 * @return {String}
58128 * @api private
58129 */
58130
58131function fmtLong(ms) {
58132  var msAbs = Math.abs(ms);
58133  if (msAbs >= d) {
58134    return plural(ms, msAbs, d, 'day');
58135  }
58136  if (msAbs >= h) {
58137    return plural(ms, msAbs, h, 'hour');
58138  }
58139  if (msAbs >= m) {
58140    return plural(ms, msAbs, m, 'minute');
58141  }
58142  if (msAbs >= s) {
58143    return plural(ms, msAbs, s, 'second');
58144  }
58145  return ms + ' ms';
58146}
58147
58148/**
58149 * Pluralization helper.
58150 */
58151
58152function plural(ms, msAbs, n, name) {
58153  var isPlural = msAbs >= n * 1.5;
58154  return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : '');
58155}
58156
58157
58158/***/ }),
58159
58160/***/ "./resources/js/app.js":
58161/*!*****************************!*\
58162  !*** ./resources/js/app.js ***!
58163  \*****************************/
58164/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
58165
58166"use strict";
58167__webpack_require__.r(__webpack_exports__);
58168/* harmony import */ var vue__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! vue */ "./node_modules/vue/dist/vue.esm.js");
58169/* harmony import */ var vue_router__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! vue-router */ "./node_modules/vue-router/dist/vue-router.esm.js");
58170/* harmony import */ var _routes__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./routes */ "./resources/js/routes.js");
58171/* harmony import */ var vue_sweetalert2__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! vue-sweetalert2 */ "./node_modules/vue-sweetalert2/dist/vue-sweetalert.mjs");
58172/* harmony import */ var sweetalert2_dist_sweetalert2_min_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! sweetalert2/dist/sweetalert2.min.css */ "./node_modules/sweetalert2/dist/sweetalert2.min.css");
58173__webpack_require__(/*! ./bootstrap */ "./resources/js/bootstrap.js");
58174// import { vue } from "laravel-mix";
58175
58176
58177
58178// import VNepaliDatePicker from "v-nepalidatepicker";
58179
58180
58181window.Vue = vue__WEBPACK_IMPORTED_MODULE_3__["default"]; //this is important! Do not use require('vue') for livewire-vue
58182
58183// Register Vue components
58184vue__WEBPACK_IMPORTED_MODULE_3__["default"].component("token-search", (__webpack_require__(/*! ./components/TokenSearch.vue */ "./resources/js/components/TokenSearch.vue")["default"]));
58185vue__WEBPACK_IMPORTED_MODULE_3__["default"].component("suchi-form", (__webpack_require__(/*! ./components/SuchiForm.vue */ "./resources/js/components/SuchiForm.vue")["default"]));
58186vue__WEBPACK_IMPORTED_MODULE_3__["default"].component("register-suchi-modal", (__webpack_require__(/*! ./components/RegisterSuchiModal.vue */ "./resources/js/components/RegisterSuchiModal.vue")["default"]));
58187vue__WEBPACK_IMPORTED_MODULE_3__["default"].component("qr-code", (__webpack_require__(/*! ./components/QrCode.vue */ "./resources/js/components/QrCode.vue")["default"]));
58188vue__WEBPACK_IMPORTED_MODULE_3__["default"].component("registered-suchi-list", (__webpack_require__(/*! ./components/RegisteredSuchiList.vue */ "./resources/js/components/RegisteredSuchiList.vue")["default"]));
58189vue__WEBPACK_IMPORTED_MODULE_3__["default"].component("gallery-albums", (__webpack_require__(/*! ./gallery/Albums.vue */ "./resources/js/gallery/Albums.vue")["default"]));
58190vue__WEBPACK_IMPORTED_MODULE_3__["default"].component("gallery-uploader", (__webpack_require__(/*! ./gallery/Uploader.vue */ "./resources/js/gallery/Uploader.vue")["default"]));
58191vue__WEBPACK_IMPORTED_MODULE_3__["default"].component("frontend-albums", (__webpack_require__(/*! ./gallery/FrontendAlbums.vue */ "./resources/js/gallery/FrontendAlbums.vue")["default"]));
58192vue__WEBPACK_IMPORTED_MODULE_3__["default"].component("frontend-view-album", (__webpack_require__(/*! ./gallery/ViewAlbum.vue */ "./resources/js/gallery/ViewAlbum.vue")["default"]));
58193vue__WEBPACK_IMPORTED_MODULE_3__["default"].component("frontend-video-gallery", (__webpack_require__(/*! ./video/VideoGallery.vue */ "./resources/js/video/VideoGallery.vue")["default"]));
58194vue__WEBPACK_IMPORTED_MODULE_3__["default"].component("news-list", (__webpack_require__(/*! ./components/NewsList.vue */ "./resources/js/components/NewsList.vue")["default"]));
58195vue__WEBPACK_IMPORTED_MODULE_3__["default"].component("rec-chart", (__webpack_require__(/*! ./charts/RecomendationChart.vue */ "./resources/js/charts/RecomendationChart.vue")["default"]));
58196vue__WEBPACK_IMPORTED_MODULE_3__["default"].use(vue_router__WEBPACK_IMPORTED_MODULE_4__["default"]);
58197vue__WEBPACK_IMPORTED_MODULE_3__["default"].use(vue_sweetalert2__WEBPACK_IMPORTED_MODULE_1__["default"]);
58198
58199// Initialize Vue
58200var app = new vue__WEBPACK_IMPORTED_MODULE_3__["default"]({
58201  el: "#app",
58202  router: new vue_router__WEBPACK_IMPORTED_MODULE_4__["default"](_routes__WEBPACK_IMPORTED_MODULE_0__["default"])
58203});
58204
58205/***/ }),
58206
58207/***/ "./resources/js/bootstrap.js":
58208/*!***********************************!*\
58209  !*** ./resources/js/bootstrap.js ***!
58210  \***********************************/
58211/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
58212
58213window._ = __webpack_require__(/*! lodash */ "./node_modules/lodash/lodash.js");
58214
58215/**
58216 * We'll load the axios HTTP library which allows us to easily issue requests
58217 * to our Laravel back-end. This library automatically handles sending the
58218 * CSRF token as a header based on the value of the "XSRF" token cookie.
58219 */
58220
58221window.axios = __webpack_require__(/*! axios */ "./node_modules/axios/index.js");
58222window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';
58223window.axios.defaults.headers.common['X-CSRF-TOKEN'] = document.querySelector('meta[name="csrf-token"]').getAttribute('content');
58224
58225/**
58226 * Echo exposes an expressive API for subscribing to channels and listening
58227 * for events that are broadcast by Laravel. Echo and event broadcasting
58228 * allows your team to easily build robust real-time web applications.
58229 */
58230
58231// import Echo from 'laravel-echo';
58232
58233// window.Pusher = require('pusher-js');
58234
58235// window.Echo = new Echo({
58236//     broadcaster: 'pusher',
58237//     key: process.env.MIX_PUSHER_APP_KEY,
58238//     cluster: process.env.MIX_PUSHER_APP_CLUSTER,
58239//     forceTLS: true
58240// });
58241
58242/***/ }),
58243
58244/***/ "./resources/js/charts/RecomendationChart.vue":
58245/*!****************************************************!*\
58246  !*** ./resources/js/charts/RecomendationChart.vue ***!
58247  \****************************************************/
58248/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
58249
58250"use strict";
58251__webpack_require__.r(__webpack_exports__);
58252/* harmony export */ __webpack_require__.d(__webpack_exports__, {
58253/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
58254/* harmony export */ });
58255/* harmony import */ var _RecomendationChart_vue_vue_type_template_id_f2b1363c__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./RecomendationChart.vue?vue&type=template&id=f2b1363c */ "./resources/js/charts/RecomendationChart.vue?vue&type=template&id=f2b1363c");
58256/* harmony import */ var _RecomendationChart_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./RecomendationChart.vue?vue&type=script&lang=js */ "./resources/js/charts/RecomendationChart.vue?vue&type=script&lang=js");
58257/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! !../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
58258
58259
58260
58261
58262
58263/* normalize component */
58264;
58265var component = (0,_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__["default"])(
58266  _RecomendationChart_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_1__["default"],
58267  _RecomendationChart_vue_vue_type_template_id_f2b1363c__WEBPACK_IMPORTED_MODULE_0__.render,
58268  _RecomendationChart_vue_vue_type_template_id_f2b1363c__WEBPACK_IMPORTED_MODULE_0__.staticRenderFns,
58269  false,
58270  null,
58271  null,
58272  null
58273  
58274)
58275
58276/* hot reload */
58277if (false) { var api; }
58278component.options.__file = "resources/js/charts/RecomendationChart.vue"
58279/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (component.exports);
58280
58281/***/ }),
58282
58283/***/ "./resources/js/charts/RecomendationChart.vue?vue&type=script&lang=js":
58284/*!****************************************************************************!*\
58285  !*** ./resources/js/charts/RecomendationChart.vue?vue&type=script&lang=js ***!
58286  \****************************************************************************/
58287/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
58288
58289"use strict";
58290__webpack_require__.r(__webpack_exports__);
58291/* harmony export */ __webpack_require__.d(__webpack_exports__, {
58292/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
58293/* harmony export */ });
58294/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_index_js_vue_loader_options_RecomendationChart_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RecomendationChart.vue?vue&type=script&lang=js */ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/charts/RecomendationChart.vue?vue&type=script&lang=js");
58295 /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_index_js_vue_loader_options_RecomendationChart_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_0__["default"]); 
58296
58297/***/ }),
58298
58299/***/ "./resources/js/charts/RecomendationChart.vue?vue&type=template&id=f2b1363c":
58300/*!**********************************************************************************!*\
58301  !*** ./resources/js/charts/RecomendationChart.vue?vue&type=template&id=f2b1363c ***!
58302  \**********************************************************************************/
58303/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
58304
58305"use strict";
58306__webpack_require__.r(__webpack_exports__);
58307/* harmony export */ __webpack_require__.d(__webpack_exports__, {
58308/* harmony export */   render: () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_RecomendationChart_vue_vue_type_template_id_f2b1363c__WEBPACK_IMPORTED_MODULE_0__.render),
58309/* harmony export */   staticRenderFns: () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_RecomendationChart_vue_vue_type_template_id_f2b1363c__WEBPACK_IMPORTED_MODULE_0__.staticRenderFns)
58310/* harmony export */ });
58311/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_RecomendationChart_vue_vue_type_template_id_f2b1363c__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!../../../node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RecomendationChart.vue?vue&type=template&id=f2b1363c */ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/charts/RecomendationChart.vue?vue&type=template&id=f2b1363c");
58312
58313
58314/***/ }),
58315
58316/***/ "./resources/js/components/NewsList.vue":
58317/*!**********************************************!*\
58318  !*** ./resources/js/components/NewsList.vue ***!
58319  \**********************************************/
58320/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
58321
58322"use strict";
58323__webpack_require__.r(__webpack_exports__);
58324/* harmony export */ __webpack_require__.d(__webpack_exports__, {
58325/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
58326/* harmony export */ });
58327/* harmony import */ var _NewsList_vue_vue_type_template_id_b8a09a08_scoped_true__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./NewsList.vue?vue&type=template&id=b8a09a08&scoped=true */ "./resources/js/components/NewsList.vue?vue&type=template&id=b8a09a08&scoped=true");
58328/* harmony import */ var _NewsList_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./NewsList.vue?vue&type=script&lang=js */ "./resources/js/components/NewsList.vue?vue&type=script&lang=js");
58329/* harmony import */ var _NewsList_vue_vue_type_style_index_0_id_b8a09a08_scoped_true_lang_scss__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./NewsList.vue?vue&type=style&index=0&id=b8a09a08&scoped=true&lang=scss */ "./resources/js/components/NewsList.vue?vue&type=style&index=0&id=b8a09a08&scoped=true&lang=scss");
58330/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! !../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
58331
58332
58333
58334;
58335
58336
58337/* normalize component */
58338
58339var component = (0,_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__["default"])(
58340  _NewsList_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_1__["default"],
58341  _NewsList_vue_vue_type_template_id_b8a09a08_scoped_true__WEBPACK_IMPORTED_MODULE_0__.render,
58342  _NewsList_vue_vue_type_template_id_b8a09a08_scoped_true__WEBPACK_IMPORTED_MODULE_0__.staticRenderFns,
58343  false,
58344  null,
58345  "b8a09a08",
58346  null
58347  
58348)
58349
58350/* hot reload */
58351if (false) { var api; }
58352component.options.__file = "resources/js/components/NewsList.vue"
58353/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (component.exports);
58354
58355/***/ }),
58356
58357/***/ "./resources/js/components/NewsList.vue?vue&type=script&lang=js":
58358/*!**********************************************************************!*\
58359  !*** ./resources/js/components/NewsList.vue?vue&type=script&lang=js ***!
58360  \**********************************************************************/
58361/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
58362
58363"use strict";
58364__webpack_require__.r(__webpack_exports__);
58365/* harmony export */ __webpack_require__.d(__webpack_exports__, {
58366/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
58367/* harmony export */ });
58368/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_index_js_vue_loader_options_NewsList_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./NewsList.vue?vue&type=script&lang=js */ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/NewsList.vue?vue&type=script&lang=js");
58369 /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_index_js_vue_loader_options_NewsList_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_0__["default"]); 
58370
58371/***/ }),
58372
58373/***/ "./resources/js/components/NewsList.vue?vue&type=style&index=0&id=b8a09a08&scoped=true&lang=scss":
58374/*!*******************************************************************************************************!*\
58375  !*** ./resources/js/components/NewsList.vue?vue&type=style&index=0&id=b8a09a08&scoped=true&lang=scss ***!
58376  \*******************************************************************************************************/
58377/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
58378
58379"use strict";
58380__webpack_require__.r(__webpack_exports__);
58381/* harmony import */ var _node_modules_style_loader_dist_cjs_js_node_modules_laravel_mix_node_modules_css_loader_dist_cjs_js_clonedRuleSet_12_use_1_node_modules_vue_loader_lib_loaders_stylePostLo
58381ader_js_node_modules_postcss_loader_dist_cjs_js_clonedRuleSet_12_use_2_node_modules_sass_loader_dist_cjs_js_clonedRuleSet_12_use_3_node_modules_vue_loader_lib_index_js_vue_loader_options_NewsList_vue_vue_type_style_index_0_id_b8a09a08_scoped_true_lang_scss__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/style-loader/dist/cjs.js!../../../node_modules/laravel-mix/node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!../../../node_modules/sass-loader/dist/cjs.js??clonedRuleSet-12.use[3]!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./NewsList.vue?vue&type=style&index=0&id=b8a09a08&scoped=true&lang=scss */ "./node_modules/style-loader/dist/cjs.js!./node_modules/laravel-mix/node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-12.use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/NewsList.vue?vue&type=style&index=0&id=b8a09a08&scoped=true&lang=scss");
58382
58383
58384/***/ }),
58385
58386/***/ "./resources/js/components/NewsList.vue?vue&type=template&id=b8a09a08&scoped=true":
58387/*!****************************************************************************************!*\
58388  !*** ./resources/js/components/NewsList.vue?vue&type=template&id=b8a09a08&scoped=true ***!
58389  \****************************************************************************************/
58390/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
58391
58392"use strict";
58393__webpack_require__.r(__webpack_exports__);
58394/* harmony export */ __webpack_require__.d(__webpack_exports__, {
58395/* harmony export */   render: () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_NewsList_vue_vue_type_template_id_b8a09a08_scoped_true__WEBPACK_IMPORTED_MODULE_0__.render),
58396/* harmony export */   staticRenderFns: () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_NewsList_vue_vue_type_template_id_b8a09a08_scoped_true__WEBPACK_IMPORTED_MODULE_0__.staticRenderFns)
58397/* harmony export */ });
58398/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_NewsList_vue_vue_type_template_id_b8a09a08_scoped_true__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!../../../node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./NewsList.vue?vue&type=template&id=b8a09a08&scoped=true */ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/NewsList.vue?vue&type=template&id=b8a09a08&scoped=true");
58399
58400
58401/***/ }),
58402
58403/***/ "./resources/js/components/QrCode.vue":
58404/*!********************************************!*\
58405  !*** ./resources/js/components/QrCode.vue ***!
58406  \********************************************/
58407/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
58408
58409"use strict";
58410__webpack_require__.r(__webpack_exports__);
58411/* harmony export */ __webpack_require__.d(__webpack_exports__, {
58412/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
58413/* harmony export */ });
58414/* harmony import */ var _QrCode_vue_vue_type_template_id_25825ed9__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./QrCode.vue?vue&type=template&id=25825ed9 */ "./resources/js/components/QrCode.vue?vue&type=template&id=25825ed9");
58415/* harmony import */ var _QrCode_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./QrCode.vue?vue&type=script&lang=js */ "./resources/js/components/QrCode.vue?vue&type=script&lang=js");
58416/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! !../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
58417
58418
58419
58420
58421
58422/* normalize component */
58423;
58424var component = (0,_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__["default"])(
58425  _QrCode_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_1__["default"],
58426  _QrCode_vue_vue_type_template_id_25825ed9__WEBPACK_IMPORTED_MODULE_0__.render,
58427  _QrCode_vue_vue_type_template_id_25825ed9__WEBPACK_IMPORTED_MODULE_0__.staticRenderFns,
58428  false,
58429  null,
58430  null,
58431  null
58432  
58433)
58434
58435/* hot reload */
58436if (false) { var api; }
58437component.options.__file = "resources/js/components/QrCode.vue"
58438/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (component.exports);
58439
58440/***/ }),
58441
58442/***/ "./resources/js/components/QrCode.vue?vue&type=script&lang=js":
58443/*!********************************************************************!*\
58444  !*** ./resources/js/components/QrCode.vue?vue&type=script&lang=js ***!
58445  \********************************************************************/
58446/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
58447
58448"use strict";
58449__webpack_require__.r(__webpack_exports__);
58450/* harmony export */ __webpack_require__.d(__webpack_exports__, {
58451/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
58452/* harmony export */ });
58453/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_index_js_vue_loader_options_QrCode_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./QrCode.vue?vue&type=script&lang=js */ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/QrCode.vue?vue&type=script&lang=js");
58454 /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_index_js_vue_loader_options_QrCode_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_0__["default"]); 
58455
58456/***/ }),
58457
58458/***/ "./resources/js/components/QrCode.vue?vue&type=template&id=25825ed9":
58459/*!**************************************************************************!*\
58460  !*** ./resources/js/components/QrCode.vue?vue&type=template&id=25825ed9 ***!
58461  \**************************************************************************/
58462/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
58463
58464"use strict";
58465__webpack_require__.r(__webpack_exports__);
58466/* harmony export */ __webpack_require__.d(__webpack_exports__, {
58467/* harmony export */   render: () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_QrCode_vue_vue_type_template_id_25825ed9__WEBPACK_IMPORTED_MODULE_0__.render),
58468/* harmony export */   staticRenderFns: () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_QrCode_vue_vue_type_template_id_25825ed9__WEBPACK_IMPORTED_MODULE_0__.staticRenderFns)
58469/* harmony export */ });
58470/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_QrCode_vue_vue_type_template_id_25825ed9__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!../../../node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./QrCode.vue?vue&type=template&id=25825ed9 */ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/QrCode.vue?vue&type=template&id=25825ed9"
vendor: 25 bytes, lines 58470-58475
58470);
58471
58472
58473/***/ }),
58474
58475/***/ "./
58475resources/js/components/RegisterSuchiModal.vue":
58476/*!********************************************************!*\
58477  !*** ./resources/js/components/RegisterSuchiModal.vue ***!
58478  \********************************************************/
58479/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
58480
58481"use strict";
58482__webpack_require__.r(__webpack_exports__);
58483/* harmony export */ __webpack_require__.d(__webpack_exports__, {
58484/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
58485/* harmony export */ });
58486/* harmony import */ var _RegisterSuchiModal_vue_vue_type_template_id_91deeb0e__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./RegisterSuchiModal.vue?vue&type=template&id=91deeb0e */ "./resources/js/components/RegisterSuchiModal.vue?vue&type=template&id=91deeb0e");
58487/* harmony import */ var _RegisterSuchiModal_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./RegisterSuchiModal.vue?vue&type=script&lang=js */ "./resources/js/components/RegisterSuchiModal.vue?vue&type=script&lang=js");
58488/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! !../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
58489
58490
58491
58492
58493
58494/* normalize component */
58495;
58496var component = (0,_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__["default"])(
58497  _RegisterSuchiModal_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_1__["default"],
58498  _RegisterSuchiModal_vue_vue_type_template_id_91deeb0e__WEBPACK_IMPORTED_MODULE_0__.render,
58499  _RegisterSuchiModal_vue_vue_type_template_id_91deeb0e__WEBPACK_IMPORTED_MODULE_0__.staticRenderFns,
58500  false,
58501  null,
58502  null,
58503  null
58504  
58505)
58506
58507/* hot reload */
58508if (false) { var api; }
58509component.options.__file = "resources/js/components/RegisterSuchiModal.vue"
58510/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (component.exports);
58511
58512/***/ }),
58513
58514/***/ "./resources/js/components/RegisterSuchiModal.vue?vue&type=script&lang=js":
58515/*!********************************************************************************!*\
58516  !*** ./resources/js/components/RegisterSuchiModal.vue?vue&type=script&lang=js ***!
58517  \********************************************************************************/
58518/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
58519
58520"use strict";
58521__webpack_require__.r(__webpack_exports__);
58522/* harmony export */ __webpack_require__.d(__webpack_exports__, {
58523/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
58524/* harmony export */ });
58525/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_index_js_vue_loader_options_RegisterSuchiModal_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RegisterSuchiModal.vue?vue&type=script&lang=js */ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/RegisterSuchiModal.vue?vue&type=script&lang=js");
58526 /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_index_js_vue_loader_options_RegisterSuchiModal_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_0__["default"]); 
58527
58528/***/ }),
58529
58530/***/ "./resources/js/components/RegisterSuchiModal.vue?vue&type=template&id=91deeb0e":
58531/*!**************************************************************************************!*\
58532  !*** ./resources/js/components/RegisterSuchiModal.vue?vue&type=template&id=91deeb0e ***!
58533  \**************************************************************************************/
58534/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
58535
58536"use strict";
58537__webpack_require__.r(__webpack_exports__);
58538/* harmony export */ __webpack_require__.d(__webpack_exports__, {
58539/* harmony export */   render: () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_RegisterSuchiModal_vue_vue_type_template_id_91deeb0e__WEBPACK_IMPORTED_MODULE_0__.render),
58540/* harmony export */   staticRenderFns: () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_RegisterSuchiModal_vue_vue_type_template_id_91deeb0e__WEBPACK_IMPORTED_MODULE_0__.staticRenderFns)
58541/* harmony export */ });
58542/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_RegisterSuchiModal_vue_vue_type_template_id_91deeb0e__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!../../../node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RegisterSuchiModal.vue?vue&type=template&id=91deeb0e */ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/RegisterSuchiModal.vue?vue&type=template&id=91deeb0e"
vendor: 25 bytes, lines 58542-58547
58542);
58543
58544
58545/***/ }),
58546
58547/***/ "./
58547resources/js/components/RegisteredSuchiList.vue":
58548/*!*********************************************************!*\
58549  !*** ./resources/js/components/RegisteredSuchiList.vue ***!
58550  \*********************************************************/
58551/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
58552
58553"use strict";
58554__webpack_require__.r(__webpack_exports__);
58555/* harmony export */ __webpack_require__.d(__webpack_exports__, {
58556/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
58557/* harmony export */ });
58558/* harmony import */ var _RegisteredSuchiList_vue_vue_type_template_id_81db757a__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./RegisteredSuchiList.vue?vue&type=template&id=81db757a */ "./resources/js/components/RegisteredSuchiList.vue?vue&type=template&id=81db757a");
58559/* harmony import */ var _RegisteredSuchiList_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./RegisteredSuchiList.vue?vue&type=script&lang=js */ "./resources/js/components/RegisteredSuchiList.vue?vue&type=script&lang=js");
58560/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! !../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
58561
58562
58563
58564
58565
58566/* normalize component */
58567;
58568var component = (0,_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__["default"])(
58569  _RegisteredSuchiList_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_1__["default"],
58570  _RegisteredSuchiList_vue_vue_type_template_id_81db757a__WEBPACK_IMPORTED_MODULE_0__.render,
58571  _RegisteredSuchiList_vue_vue_type_template_id_81db757a__WEBPACK_IMPORTED_MODULE_0__.staticRenderFns,
58572  false,
58573  null,
58574  null,
58575  null
58576  
58577)
58578
58579/* hot reload */
58580if (false) { var api; }
58581component.options.__file = "resources/js/components/RegisteredSuchiList.vue"
58582/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (component.exports);
58583
58584/***/ }),
58585
58586/***/ "./resources/js/components/RegisteredSuchiList.vue?vue&type=script&lang=js":
58587/*!*********************************************************************************!*\
58588  !*** ./resources/js/components/RegisteredSuchiList.vue?vue&type=script&lang=js ***!
58589  \*********************************************************************************/
58590/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
58591
58592"use strict";
58593__webpack_require__.r(__webpack_exports__);
58594/* harmony export */ __webpack_require__.d(__webpack_exports__, {
58595/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
58596/* harmony export */ });
58597/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_index_js_vue_loader_options_RegisteredSuchiList_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RegisteredSuchiList.vue?vue&type=script&lang=js */ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/RegisteredSuchiList.vue?vue&type=script&lang=js");
58598 /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_index_js_vue_loader_options_RegisteredSuchiList_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_0__["default"]); 
58599
58600/***/ }),
58601
58602/***/ "./resources/js/components/RegisteredSuchiList.vue?vue&type=template&id=81db757a":
58603/*!***************************************************************************************!*\
58604  !*** ./resources/js/components/RegisteredSuchiList.vue?vue&type=template&id=81db757a ***!
58605  \***************************************************************************************/
58606/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
58607
58608"use strict";
58609__webpack_require__.r(__webpack_exports__);
58610/* harmony export */ __webpack_require__.d(__webpack_exports__, {
58611/* harmony export */   render: () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_RegisteredSuchiList_vue_vue_type_template_id_81db757a__WEBPACK_IMPORTED_MODULE_0__.render),
58612/* harmony export */   staticRenderFns: () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_RegisteredSuchiList_vue_vue_type_template_id_81db757a__WEBPACK_IMPORTED_MODULE_0__.staticRenderFns)
58613/* harmony export */ });
58614/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_RegisteredSuchiList_vue_vue_type_template_id_81db757a__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!../../../node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RegisteredSuchiList.vue?vue&type=template&id=81db757a */ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/RegisteredSuchiList.vue?vue&type=template&id=81db757a");
58615
58616
58617/***/ }),
58618
58619/***/ "./resources/js/components/Spinner.vue":
58620/*!*********************************************!*\
58621  !*** ./resources/js/components/Spinner.vue ***!
58622  \*********************************************/
58623/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
58624
58625"use strict";
58626__webpack_require__.r(__webpack_exports__);
58627/* harmony export */ __webpack_require__.d(__webpack_exports__, {
58628/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
58629/* harmony export */ });
58630/* harmony import */ var _Spinner_vue_vue_type_template_id_7ae326fe__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Spinner.vue?vue&type=template&id=7ae326fe */ "./resources/js/components/Spinner.vue?vue&type=template&id=7ae326fe");
58631/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! !../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
58632
58633var script = {}
58634
58635
58636/* normalize component */
58637;
58638var component = (0,_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_1__["default"])(
58639  script,
58640  _Spinner_vue_vue_type_template_id_7ae326fe__WEBPACK_IMPORTED_MODULE_0__.render,
58641  _Spinner_vue_vue_type_template_id_7ae326fe__WEBPACK_IMPORTED_MODULE_0__.staticRenderFns,
58642  false,
58643  null,
58644  null,
58645  null
58646  
58647)
58648
58649/* hot reload */
58650if (false) { var api; }
58651component.options.__file = "resources/js/components/Spinner.vue"
58652/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (component.exports);
58653
58654/***/ }),
58655
58656/***/ "./resources/js/components/Spinner.vue?vue&type=template&id=7ae326fe":
58657/*!***************************************************************************!*\
58658  !*** ./resources/js/components/Spinner.vue?vue&type=template&id=7ae326fe ***!
58659  \***************************************************************************/
58660/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
58661
58662"use strict";
58663__webpack_require__.r(__webpack_exports__);
58664/* harmony export */ __webpack_require__.d(__webpack_exports__, {
58665/* harmony export */   render: () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_Spinner_vue_vue_type_template_id_7ae326fe__WEBPACK_IMPORTED_MODULE_0__.render),
58666/* harmony export */   staticRenderFns: () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_Spinner_vue_vue_type_template_id_7ae326fe__WEBPACK_IMPORTED_MODULE_0__.staticRenderFns)
58667/* harmony export */ });
58668/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_Spinner_vue_vue_type_template_id_7ae326fe__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!../../../node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Spinner.vue?vue&type=template&id=7ae326fe */ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/Spinner.vue?vue&type=template&id=7ae326fe");
58669
58670
58671/***/ }),
58672
58673/***/ "./resources/js/components/SuchiForm.vue":
58674/*!***********************************************!*\
58675  !*** ./resources/js/components/SuchiForm.vue ***!
58676  \***********************************************/
58677/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
58678
58679"use strict";
58680__webpack_require__.r(__webpack_exports__);
58681/* harmony export */ __webpack_require__.d(__webpack_exports__, {
58682/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
58683/* harmony export */ });
58684/* harmony import */ var _SuchiForm_vue_vue_type_template_id_cd9393ea_scoped_true__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./SuchiForm.vue?vue&type=template&id=cd9393ea&scoped=true */ "./resources/js/components/SuchiForm.vue?vue&type=template&id=cd9393ea&scoped=true");
58685/* harmony import */ var _SuchiForm_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./SuchiForm.vue?vue&type=script&lang=js */ "./resources/js/components/SuchiForm.vue?vue&type=script&lang=js");
58686/* harmony import */ var _SuchiForm_vue_vue_type_style_index_0_id_cd9393ea_scoped_true_lang_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./SuchiForm.vue?vue&type=style&index=0&id=cd9393ea&scoped=true&lang=css */ "./resources/js/components/SuchiForm.vue?vue&type=style&index=0&id=cd9393ea&scoped=true&lang=css");
58687/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! !../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
58688
58689
58690
58691;
58692
58693
58694/* normalize component */
58695
58696var component = (0,_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__["default"])(
58697  _SuchiForm_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_1__["default"],
58698  _SuchiForm_vue_vue_type_template_id_cd9393ea_scoped_true__WEBPACK_IMPORTED_MODULE_0__.render,
58699  _SuchiForm_vue_vue_type_template_id_cd9393ea_scoped_true__WEBPACK_IMPORTED_MODULE_0__.staticRenderFns,
58700  false,
58701  null,
58702  "cd9393ea",
58703  null
58704  
58705)
58706
58707/* hot reload */
58708if (false) { var api; }
58709component.options.__file = "resources/js/components/SuchiForm.vue"
58710/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (component.exports);
58711
58712/***/ }),
58713
58714/***/ "./resources/js/components/SuchiForm.vue?vue&type=script&lang=js":
58715/*!***********************************************************************!*\
58716  !*** ./resources/js/components/SuchiForm.vue?vue&type=script&lang=js ***!
58717  \***********************************************************************/
58718/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
58719
58720"use strict";
58721__webpack_require__.r(__webpack_exports__);
58722/* harmony export */ __webpack_require__.d(__webpack_exports__, {
58723/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
58724/* harmony export */ });
58725/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_index_js_vue_loader_options_SuchiForm_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SuchiForm.vue?vue&type=script&lang=js */ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/SuchiForm.vue?vue&type=script&lang=js");
58726 /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_index_js_vue_loader_options_SuchiForm_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_0__["default"]); 
58727
58728/***/ }),
58729
58730/***/ "./resources/js/components/SuchiForm.vue?vue&type=style&index=0&id=cd9393ea&scoped=true&lang=css":
58731/*!*******************************************************************************************************!*\
58732  !*** ./resources/js/components/SuchiForm.vue?vue&type=style&index=0&id=cd9393ea&scoped=true&lang=css ***!
58733  \*******************************************************************************************************/
58734/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
58735
58736"use strict";
58737__webpack_require__.r(__webpack_exports__);
58738/* harmony import */ var _node_modules_style_loader_dist_cjs_js_node_modules_laravel_mix_node_modules_css_loader_dist_cjs_js_clonedRuleSet_9_use_1_node_modules_vue_loader_lib_loaders_stylePostLo
58738ader_js_node_modules_postcss_loader_dist_cjs_js_clonedRuleSet_9_use_2_node_modules_vue_loader_lib_index_js_vue_loader_options_SuchiForm_vue_vue_type_style_index_0_id_cd9393ea_scoped_true_lang_css__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/style-loader/dist/cjs.js!../../../node_modules/laravel-mix/node_modules/css-loader/dist/cjs.js??clonedRuleSet-9.use[1]!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-9.use[2]!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SuchiForm.vue?vue&type=style&index=0&id=cd9393ea&scoped=true&lang=css */ "./node_modules/style-loader/dist/cjs.js!./node_modules/laravel-mix/node_modules/css-loader/dist/cjs.js??clonedRuleSet-9.use[1]!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-9.use[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/SuchiForm.vue?vue&type=style&index=0&id=cd9393ea&scoped=true&lang=css");
58739
58740
58741/***/ }),
58742
58743/***/ "./resources/js/components/SuchiForm.vue?vue&type=template&id=cd9393ea&scoped=true":
58744/*!*****************************************************************************************!*\
58745  !*** ./resources/js/components/SuchiForm.vue?vue&type=template&id=cd9393ea&scoped=true ***!
58746  \*****************************************************************************************/
58747/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
58748
58749"use strict";
58750__webpack_require__.r(__webpack_exports__);
58751/* harmony export */ __webpack_require__.d(__webpack_exports__, {
58752/* harmony export */   render: () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_SuchiForm_vue_vue_type_template_id_cd9393ea_scoped_true__WEBPACK_IMPORTED_MODULE_0__.render),
58753/* harmony export */   staticRenderFns: () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_SuchiForm_vue_vue_type_template_id_cd9393ea_scoped_true__WEBPACK_IMPORTED_MODULE_0__.staticRenderFns)
58754/* harmony export */ });
58755/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_SuchiForm_vue_vue_type_template_id_cd9393ea_scoped_true__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!../../../node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SuchiForm.vue?vue&type=template&id=cd9393ea&scoped=true */ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/SuchiForm.vue?vue&type=template&id=cd9393ea&scoped=true");
58756
58757
58758/***/ }),
58759
58760/***/ "./resources/js/components/SuchiListView.vue":
58761/*!***************************************************!*\
58762  !*** ./resources/js/components/SuchiListView.vue ***!
58763  \***************************************************/
58764/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
58765
58766"use strict";
58767__webpack_require__.r(__webpack_exports__);
58768/* harmony export */ __webpack_require__.d(__webpack_exports__, {
58769/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
58770/* harmony export */ });
58771/* harmony import */ var _SuchiListView_vue_vue_type_template_id_2c0132aa__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./SuchiListView.vue?vue&type=template&id=2c0132aa */ "./resources/js/components/SuchiListView.vue?vue&type=template&id=2c0132aa");
58772/* harmony import */ var _SuchiListView_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./SuchiListView.vue?vue&type=script&lang=js */ "./resources/js/components/SuchiListView.vue?vue&type=script&lang=js");
58773/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! !../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
58774
58775
58776
58777
58778
58779/* normalize component */
58780;
58781var component = (0,_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__["default"])(
58782  _SuchiListView_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_1__["default"],
58783  _SuchiListView_vue_vue_type_template_id_2c0132aa__WEBPACK_IMPORTED_MODULE_0__.render,
58784  _SuchiListView_vue_vue_type_template_id_2c0132aa__WEBPACK_IMPORTED_MODULE_0__.staticRenderFns,
58785  false,
58786  null,
58787  null,
58788  null
58789  
58790)
58791
58792/* hot reload */
58793if (false) { var api; }
58794component.options.__file = "resources/js/components/SuchiListView.vue"
58795/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (component.exports);
58796
58797/***/ }),
58798
58799/***/ "./resources/js/components/SuchiListView.vue?vue&type=script&lang=js":
58800/*!***************************************************************************!*\
58801  !*** ./resources/js/components/SuchiListView.vue?vue&type=script&lang=js ***!
58802  \***************************************************************************/
58803/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
58804
58805"use strict";
58806__webpack_require__.r(__webpack_exports__);
58807/* harmony export */ __webpack_require__.d(__webpack_exports__, {
58808/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
58809/* harmony export */ });
58810/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_index_js_vue_loader_options_SuchiListView_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SuchiListView.vue?vue&type=script&lang=js */ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/SuchiListView.vue?vue&type=script&lang=js");
58811 /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_index_js_vue_loader_options_SuchiListView_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_0__["default"]); 
58812
58813/***/ }),
58814
58815/***/ "./resources/js/components/SuchiListView.vue?vue&type=template&id=2c0132aa":
58816/*!*********************************************************************************!*\
58817  !*** ./resources/js/components/SuchiListView.vue?vue&type=template&id=2c0132aa ***!
58818  \*********************************************************************************/
58819/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
58820
58821"use strict";
58822__webpack_require__.r(__webpack_exports__);
58823/* harmony export */ __webpack_require__.d(__webpack_exports__, {
58824/* harmony export */   render: () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_SuchiListView_vue_vue_type_template_id_2c0132aa__WEBPACK_IMPORTED_MODULE_0__.render),
58825/* harmony export */   staticRenderFns: () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_SuchiListView_vue_vue_type_template_id_2c0132aa__WEBPACK_IMPORTED_MODULE_0__.staticRenderFns)
58826/* harmony export */ });
58827/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_SuchiListView_vue_vue_type_template_id_2c0132aa__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!../../../node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SuchiListView.vue?vue&type=template&id=2c0132aa */ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/SuchiListView.vue?vue&type=template&id=2c0132aa");
58828
58829
58830/***/ }),
58831
58832/***/ "./resources/js/components/TokenSearch.vue":
58833/*!*************************************************!*\
58834  !*** ./resources/js/components/TokenSearch.vue ***!
58835  \*************************************************/
58836/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
58837
58838"use strict";
58839__webpack_require__.r(__webpack_exports__);
58840/* harmony export */ __webpack_require__.d(__webpack_exports__, {
58841/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
58842/* harmony export */ });
58843/* harmony import */ var _TokenSearch_vue_vue_type_template_id_dc6d0134_scoped_true__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./TokenSearch.vue?vue&type=template&id=dc6d0134&scoped=true */ "./resources/js/components/TokenSearch.vue?vue&type=template&id=dc6d0134&scoped=true");
58844/* harmony import */ var _TokenSearch_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./TokenSearch.vue?vue&type=script&lang=js */ "./resources/js/components/TokenSearch.vue?vue&type=script&lang=js");
58845/* harmony import */ var _TokenSearch_vue_vue_type_style_index_0_id_dc6d0134_scoped_true_lang_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./TokenSearch.vue?vue&type=style&index=0&id=dc6d0134&scoped=true&lang=css */ "./resources/js/components/TokenSearch.vue?vue&type=style&index=0&id=dc6d0134&scoped=true&lang=css");
58846/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! !../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
58847
58848
58849
58850;
58851
58852
58853/* normalize component */
58854
58855var component = (0,_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__["default"])(
58856  _TokenSearch_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_1__["default"],
58857  _TokenSearch_vue_vue_type_template_id_dc6d0134_scoped_true__WEBPACK_IMPORTED_MODULE_0__.render,
58858  _TokenSearch_vue_vue_type_template_id_dc6d0134_scoped_true__WEBPACK_IMPORTED_MODULE_0__.staticRenderFns,
58859  false,
58860  null,
58861  "dc6d0134",
58862  null
58863  
58864)
58865
58866/* hot reload */
58867if (false) { var api; }
58868component.options.__file = "resources/js/components/TokenSearch.vue"
58869/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (component.exports);
58870
58871/***/ }),
58872
58873/***/ "./resources/js/components/TokenSearch.vue?vue&type=script&lang=js":
58874/*!*************************************************************************!*\
58875  !*** ./resources/js/components/TokenSearch.vue?vue&type=script&lang=js ***!
58876  \*************************************************************************/
58877/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
58878
58879"use strict";
58880__webpack_require__.r(__webpack_exports__);
58881/* harmony export */ __webpack_require__.d(__webpack_exports__, {
58882/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
58883/* harmony export */ });
58884/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_index_js_vue_loader_options_TokenSearch_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TokenSearch.vue?vue&type=script&lang=js */ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/TokenSearch.vue?vue&type=script&lang=js");
58885 /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_index_js_vue_loader_options_TokenSearch_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_0__["default"]); 
58886
58887/***/ }),
58888
58889/***/ "./resources/js/components/TokenSearch.vue?vue&type=style&index=0&id=dc6d0134&scoped=true&lang=css":
58890/*!*********************************************************************************************************!*\
58891  !*** ./resources/js/components/TokenSearch.vue?vue&type=style&index=0&id=dc6d0134&scoped=true&lang=css ***!
58892  \*********************************************************************************************************/
58893/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
58894
58895"use strict";
58896__webpack_require__.r(__webpack_exports__);
58897/* harmony import */ var _node_modules_style_loader_dist_cjs_js_node_modules_laravel_mix_node_modules_css_loader_dist_cjs_js_clonedRuleSet_9_use_1_node_modules_vue_loader_lib_loaders_stylePostLo
58897ader_js_node_modules_postcss_loader_dist_cjs_js_clonedRuleSet_9_use_2_node_modules_vue_loader_lib_index_js_vue_loader_options_TokenSearch_vue_vue_type_style_index_0_id_dc6d0134_scoped_true_lang_css__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/style-loader/dist/cjs.js!../../../node_modules/laravel-mix/node_modules/css-loader/dist/cjs.js??clonedRuleSet-9.use[1]!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-9.use[2]!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TokenSearch.vue?vue&type=style&index=0&id=dc6d0134&scoped=true&lang=css */ "./node_modules/style-loader/dist/cjs.js!./node_modules/laravel-mix/node_modules/css-loader/dist/cjs.js??clonedRuleSet-9.use[1]!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-9.use[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/TokenSearch.vue?vue&type=style&index=0&id=dc6d0134&scoped=true&lang=css");
58898
58899
58900/***/ }),
58901
58902/***/ "./resources/js/components/TokenSearch.vue?vue&type=template&id=dc6d0134&scoped=true":
58903/*!*******************************************************************************************!*\
58904  !*** ./resources/js/components/TokenSearch.vue?vue&type=template&id=dc6d0134&scoped=true ***!
58905  \*******************************************************************************************/
58906/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
58907
58908"use strict";
58909__webpack_require__.r(__webpack_exports__);
58910/* harmony export */ __webpack_require__.d(__webpack_exports__, {
58911/* harmony export */   render: () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_TokenSearch_vue_vue_type_template_id_dc6d0134_scoped_true__WEBPACK_IMPORTED_MODULE_0__.render),
58912/* harmony export */   staticRenderFns: () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_TokenSearch_vue_vue_type_template_id_dc6d0134_scoped_true__WEBPACK_IMPORTED_MODULE_0__.staticRenderFns)
58913/* harmony export */ });
58914/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_TokenSearch_vue_vue_type_template_id_dc6d0134_scoped_true__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!../../../node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TokenSearch.vue?vue&type=template&id=dc6d0134&scoped=true */ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/TokenSearch.vue?vue&type=template&id=dc6d0134&scoped=true");
58915
58916
58917/***/ }),
58918
58919/***/ "./resources/js/gallery/Albums.vue":
58920/*!*****************************************!*\
58921  !*** ./resources/js/gallery/Albums.vue ***!
58922  \*****************************************/
58923/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
58924
58925"use strict";
58926__webpack_require__.r(__webpack_exports__);
58927/* harmony export */ __webpack_require__.d(__webpack_exports__, {
58928/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
58929/* harmony export */ });
58930/* harmony import */ var _Albums_vue_vue_type_template_id_52e77a42_scoped_true__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Albums.vue?vue&type=template&id=52e77a42&scoped=true */ "./resources/js/gallery/Albums.vue?vue&type=template&id=52e77a42&scoped=true");
58931/* harmony import */ var _Albums_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Albums.vue?vue&type=script&lang=js */ "./resources/js/gallery/Albums.vue?vue&type=script&lang=js");
58932/* harmony import */ var _Albums_vue_vue_type_style_index_0_id_52e77a42_scoped_true_lang_scss__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./Albums.vue?vue&type=style&index=0&id=52e77a42&scoped=true&lang=scss */ "./resources/js/gallery/Albums.vue?vue&type=style&index=0&id=52e77a42&scoped=true&lang=scss");
58933/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! !../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
58934
58935
58936
58937;
58938
58939
58940/* normalize component */
58941
58942var component = (0,_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__["default"])(
58943  _Albums_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_1__["default"],
58944  _Albums_vue_vue_type_template_id_52e77a42_scoped_true__WEBPACK_IMPORTED_MODULE_0__.render,
58945  _Albums_vue_vue_type_template_id_52e77a42_scoped_true__WEBPACK_IMPORTED_MODULE_0__.staticRenderFns,
58946  false,
58947  null,
58948  "52e77a42",
58949  null
58950  
58951)
58952
58953/* hot reload */
58954if (false) { var api; }
58955component.options.__file = "resources/js/gallery/Albums.vue"
58956/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (component.exports);
58957
58958/***/ }),
58959
58960/***/ "./resources/js/gallery/Albums.vue?vue&type=script&lang=js":
58961/*!*****************************************************************!*\
58962  !*** ./resources/js/gallery/Albums.vue?vue&type=script&lang=js ***!
58963  \*****************************************************************/
58964/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
58965
58966"use strict";
58967__webpack_require__.r(__webpack_exports__);
58968/* harmony export */ __webpack_require__.d(__webpack_exports__, {
58969/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
58970/* harmony export */ });
58971/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_index_js_vue_loader_options_Albums_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Albums.vue?vue&type=script&lang=js */ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/gallery/Albums.vue?vue&type=script&lang=js");
58972 /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_index_js_vue_loader_options_Albums_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_0__["default"]); 
58973
58974/***/ }),
58975
58976/***/ "./resources/js/gallery/Albums.vue?vue&type=style&index=0&id=52e77a42&scoped=true&lang=scss":
58977/*!**************************************************************************************************!*\
58978  !*** ./resources/js/gallery/Albums.vue?vue&type=style&index=0&id=52e77a42&scoped=true&lang=scss ***!
58979  \**************************************************************************************************/
58980/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
58981
58982"use strict";
58983__webpack_require__.r(__webpack_exports__);
58984/* harmony import */ var _node_modules_style_loader_dist_cjs_js_node_modules_laravel_mix_node_modules_css_loader_dist_cjs_js_clonedRuleSet_12_use_1_node_modules_vue_loader_lib_loaders_stylePostLo
58984ader_js_node_modules_postcss_loader_dist_cjs_js_clonedRuleSet_12_use_2_node_modules_sass_loader_dist_cjs_js_clonedRuleSet_12_use_3_node_modules_vue_loader_lib_index_js_vue_loader_options_Albums_vue_vue_type_style_index_0_id_52e77a42_scoped_true_lang_scss__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/style-loader/dist/cjs.js!../../../node_modules/laravel-mix/node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!../../../node_modules/sass-loader/dist/cjs.js??clonedRuleSet-12.use[3]!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Albums.vue?vue&type=style&index=0&id=52e77a42&scoped=true&lang=scss */ "./node_modules/style-loader/dist/cjs.js!./node_modules/laravel-mix/node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-12.use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/gallery/Albums.vue?vue&type=style&index=0&id=52e77a42&scoped=true&lang=scss");
58985
58986
58987/***/ }),
58988
58989/***/ "./resources/js/gallery/Albums.vue?vue&type=template&id=52e77a42&scoped=true":
58990/*!***********************************************************************************!*\
58991  !*** ./resources/js/gallery/Albums.vue?vue&type=template&id=52e77a42&scoped=true ***!
58992  \***********************************************************************************/
58993/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
58994
58995"use strict";
58996__webpack_require__.r(__webpack_exports__);
58997/* harmony export */ __webpack_require__.d(__webpack_exports__, {
58998/* harmony export */   render: () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_Albums_vue_vue_type_template_id_52e77a42_scoped_true__WEBPACK_IMPORTED_MODULE_0__.render),
58999/* harmony export */   staticRenderFns: () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_Albums_vue_vue_type_template_id_52e77a42_scoped_true__WEBPACK_IMPORTED_MODULE_0__.staticRenderFns)
59000/* harmony export */ });
59001/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_Albums_vue_vue_type_template_id_52e77a42_scoped_true__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!../../../node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Albums.vue?vue&type=template&id=52e77a42&scoped=true */ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/gallery/Albums.vue?vue&type=template&id=52e77a42&scoped=true");
59002
59003
59004/***/ }),
59005
59006/***/ "./resources/js/gallery/FrontendAlbums.vue":
59007/*!*************************************************!*\
59008  !*** ./resources/js/gallery/FrontendAlbums.vue ***!
59009  \*************************************************/
59010/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
59011
59012"use strict";
59013__webpack_require__.r(__webpack_exports__);
59014/* harmony export */ __webpack_require__.d(__webpack_exports__, {
59015/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
59016/* harmony export */ });
59017/* harmony import */ var _FrontendAlbums_vue_vue_type_template_id_6feaa8de_scoped_true__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./FrontendAlbums.vue?vue&type=template&id=6feaa8de&scoped=true */ "./resources/js/gallery/FrontendAlbums.vue?vue&type=template&id=6feaa8de&scoped=true");
59018/* harmony import */ var _FrontendAlbums_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./FrontendAlbums.vue?vue&type=script&lang=js */ "./resources/js/gallery/FrontendAlbums.vue?vue&type=script&lang=js");
59019/* harmony import */ var _FrontendAlbums_vue_vue_type_style_index_0_id_6feaa8de_scoped_true_lang_scss__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./FrontendAlbums.vue?vue&type=style&index=0&id=6feaa8de&scoped=true&lang=scss */ "./resources/js/gallery/FrontendAlbums.vue?vue&type=style&index=0&id=6feaa8de&scoped=true&lang=scss");
59020/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! !../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
59021
59022
59023
59024;
59025
59026
59027/* normalize component */
59028
59029var component = (0,_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__["default"])(
59030  _FrontendAlbums_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_1__["default"],
59031  _FrontendAlbums_vue_vue_type_template_id_6feaa8de_scoped_true__WEBPACK_IMPORTED_MODULE_0__.render,
59032  _FrontendAlbums_vue_vue_type_template_id_6feaa8de_scoped_true__WEBPACK_IMPORTED_MODULE_0__.staticRenderFns,
59033  false,
59034  null,
59035  "6feaa8de",
59036  null
59037  
59038)
59039
59040/* hot reload */
59041if (false) { var api; }
59042component.options.__file = "resources/js/gallery/FrontendAlbums.vue"
59043/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (component.exports);
59044
59045/***/ }),
59046
59047/***/ "./resources/js/gallery/FrontendAlbums.vue?vue&type=script&lang=js":
59048/*!*************************************************************************!*\
59049  !*** ./resources/js/gallery/FrontendAlbums.vue?vue&type=script&lang=js ***!
59050  \*************************************************************************/
59051/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
59052
59053"use strict";
59054__webpack_require__.r(__webpack_exports__);
59055/* harmony export */ __webpack_require__.d(__webpack_exports__, {
59056/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
59057/* harmony export */ });
59058/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_index_js_vue_loader_options_FrontendAlbums_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FrontendAlbums.vue?vue&type=script&lang=js */ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/gallery/FrontendAlbums.vue?vue&type=script&lang=js");
59059 /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_index_js_vue_loader_options_FrontendAlbums_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_0__["default"]); 
59060
59061/***/ }),
59062
59063/***/ "./resources/js/gallery/FrontendAlbums.vue?vue&type=style&index=0&id=6feaa8de&scoped=true&lang=scss":
59064/*!**********************************************************************************************************!*\
59065  !*** ./resources/js/gallery/FrontendAlbums.vue?vue&type=style&index=0&id=6feaa8de&scoped=true&lang=scss ***!
59066  \**********************************************************************************************************/
59067/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
59068
59069"use strict";
59070__webpack_require__.r(__webpack_exports__);
59071/* harmony import */ var _node_modules_style_loader_dist_cjs_js_node_modules_laravel_mix_node_modules_css_loader_dist_cjs_js_clonedRuleSet_12_use_1_node_modules_vue_loader_lib_loaders_stylePostLo
59071ader_js_node_modules_postcss_loader_dist_cjs_js_clonedRuleSet_12_use_2_node_modules_sass_loader_dist_cjs_js_clonedRuleSet_12_use_3_node_modules_vue_loader_lib_index_js_vue_loader_options_FrontendAlbums_vue_vue_type_style_index_0_id_6feaa8de_scoped_true_lang_scss__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/style-loader/dist/cjs.js!../../../node_modules/laravel-mix/node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!../../../node_modules/sass-loader/dist/cjs.js??clonedRuleSet-12.use[3]!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FrontendAlbums.vue?vue&type=style&index=0&id=6feaa8de&scoped=true&lang=scss */ "./node_modules/style-loader/dist/cjs.js!./node_modules/laravel-mix/node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-12.use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/gallery/FrontendAlbums.vue?vue&type=style&index=0&id=6feaa8de&scoped=true&lang=scss");
59072
59073
59074/***/ }),
59075
59076/***/ "./resources/js/gallery/FrontendAlbums.vue?vue&type=template&id=6feaa8de&scoped=true":
59077/*!*******************************************************************************************!*\
59078  !*** ./resources/js/gallery/FrontendAlbums.vue?vue&type=template&id=6feaa8de&scoped=true ***!
59079  \*******************************************************************************************/
59080/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
59081
59082"use strict";
59083__webpack_require__.r(__webpack_exports__);
59084/* harmony export */ __webpack_require__.d(__webpack_exports__, {
59085/* harmony export */   render: () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_FrontendAlbums_vue_vue_type_template_id_6feaa8de_scoped_true__WEBPACK_IMPORTED_MODULE_0__.render),
59086/* harmony export */   staticRenderFns: () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_FrontendAlbums_vue_vue_type_template_id_6feaa8de_scoped_true__WEBPACK_IMPORTED_MODULE_0__.staticRenderFns)
59087/* harmony export */ });
59088/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_FrontendAlbums_vue_vue_type_template_id_6feaa8de_scoped_true__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!../../../node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FrontendAlbums.vue?vue&type=template&id=6feaa8de&scoped=true */ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/gallery/FrontendAlbums.vue?vue&type=template&id=6feaa8de&scoped=true");
59089
59090
59091/***/ }),
59092
59093/***/ "./resources/js/gallery/Uploader.vue":
59094/*!*******************************************!*\
59095  !*** ./resources/js/gallery/Uploader.vue ***!
59096  \*******************************************/
59097/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
59098
59099"use strict";
59100__webpack_require__.r(__webpack_exports__);
59101/* harmony export */ __webpack_require__.d(__webpack_exports__, {
59102/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
59103/* harmony export */ });
59104/* harmony import */ var _Uploader_vue_vue_type_template_id_6e95a0ae_scoped_true__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Uploader.vue?vue&type=template&id=6e95a0ae&scoped=true */ "./resources/js/gallery/Uploader.vue?vue&type=template&id=6e95a0ae&scoped=true");
59105/* harmony import */ var _Uploader_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Uploader.vue?vue&type=script&lang=js */ "./resources/js/gallery/Uploader.vue?vue&type=script&lang=js");
59106/* harmony import */ var _Uploader_vue_vue_type_style_index_0_id_6e95a0ae_scoped_true_lang_scss__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./Uploader.vue?vue&type=style&index=0&id=6e95a0ae&scoped=true&lang=scss */ "./resources/js/gallery/Uploader.vue?vue&type=style&index=0&id=6e95a0ae&scoped=true&lang=scss");
59107/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! !../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
59108
59109
59110
59111;
59112
59113
59114/* normalize component */
59115
59116var component = (0,_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__["default"])(
59117  _Uploader_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_1__["default"],
59118  _Uploader_vue_vue_type_template_id_6e95a0ae_scoped_true__WEBPACK_IMPORTED_MODULE_0__.render,
59119  _Uploader_vue_vue_type_template_id_6e95a0ae_scoped_true__WEBPACK_IMPORTED_MODULE_0__.staticRenderFns,
59120  false,
59121  null,
59122  "6e95a0ae",
59123  null
59124  
59125)
59126
59127/* hot reload */
59128if (false) { var api; }
59129component.options.__file = "resources/js/gallery/Uploader.vue"
59130/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (component.exports);
59131
59132/***/ }),
59133
59134/***/ "./resources/js/gallery/Uploader.vue?vue&type=script&lang=js":
59135/*!*******************************************************************!*\
59136  !*** ./resources/js/gallery/Uploader.vue?vue&type=script&lang=js ***!
59137  \*******************************************************************/
59138/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
59139
59140"use strict";
59141__webpack_require__.r(__webpack_exports__);
59142/* harmony export */ __webpack_require__.d(__webpack_exports__, {
59143/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
59144/* harmony export */ });
59145/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_index_js_vue_loader_options_Uploader_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Uploader.vue?vue&type=script&lang=js */ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/gallery/Uploader.vue?vue&type=script&lang=js");
59146 /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_index_js_vue_loader_options_Uploader_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_0__["default"]); 
59147
59148/***/ }),
59149
59150/***/ "./resources/js/gallery/Uploader.vue?vue&type=style&index=0&id=6e95a0ae&scoped=true&lang=scss":
59151/*!****************************************************************************************************!*\
59152  !*** ./resources/js/gallery/Uploader.vue?vue&type=style&index=0&id=6e95a0ae&scoped=true&lang=scss ***!
59153  \****************************************************************************************************/
59154/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
59155
59156"use strict";
59157__webpack_require__.r(__webpack_exports__);
59158/* harmony import */ var _node_modules_style_loader_dist_cjs_js_node_modules_laravel_mix_node_modules_css_loader_dist_cjs_js_clonedRuleSet_12_use_1_node_modules_vue_loader_lib_loaders_stylePostLo
59158ader_js_node_modules_postcss_loader_dist_cjs_js_clonedRuleSet_12_use_2_node_modules_sass_loader_dist_cjs_js_clonedRuleSet_12_use_3_node_modules_vue_loader_lib_index_js_vue_loader_options_Uploader_vue_vue_type_style_index_0_id_6e95a0ae_scoped_true_lang_scss__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/style-loader/dist/cjs.js!../../../node_modules/laravel-mix/node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!../../../node_modules/sass-loader/dist/cjs.js??clonedRuleSet-12.use[3]!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Uploader.vue?vue&type=style&index=0&id=6e95a0ae&scoped=true&lang=scss */ "./node_modules/style-loader/dist/cjs.js!./node_modules/laravel-mix/node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-12.use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/gallery/Uploader.vue?vue&type=style&index=0&id=6e95a0ae&scoped=true&lang=scss");
59159
59160
59161/***/ }),
59162
59163/***/ "./resources/js/gallery/Uploader.vue?vue&type=template&id=6e95a0ae&scoped=true":
59164/*!*************************************************************************************!*\
59165  !*** ./resources/js/gallery/Uploader.vue?vue&type=template&id=6e95a0ae&scoped=true ***!
59166  \*************************************************************************************/
59167/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
59168
59169"use strict";
59170__webpack_require__.r(__webpack_exports__);
59171/* harmony export */ __webpack_require__.d(__webpack_exports__, {
59172/* harmony export */   render: () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_Uploader_vue_vue_type_template_id_6e95a0ae_scoped_true__WEBPACK_IMPORTED_MODULE_0__.render),
59173/* harmony export */   staticRenderFns: () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_Uploader_vue_vue_type_template_id_6e95a0ae_scoped_true__WEBPACK_IMPORTED_MODULE_0__.staticRenderFns)
59174/* harmony export */ });
59175/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_Uploader_vue_vue_type_template_id_6e95a0ae_scoped_true__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!../../../node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Uploader.vue?vue&type=template&id=6e95a0ae&scoped=true */ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/gallery/Uploader.vue?vue&type=template&id=6e95a0ae&scoped=true");
59176
59177
59178/***/ }),
59179
59180/***/ "./resources/js/gallery/ViewAlbum.vue":
59181/*!********************************************!*\
59182  !*** ./resources/js/gallery/ViewAlbum.vue ***!
59183  \********************************************/
59184/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
59185
59186"use strict";
59187__webpack_require__.r(__webpack_exports__);
59188/* harmony export */ __webpack_require__.d(__webpack_exports__, {
59189/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
59190/* harmony export */ });
59191/* harmony import */ var _ViewAlbum_vue_vue_type_template_id_923d41c2_scoped_true__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./ViewAlbum.vue?vue&type=template&id=923d41c2&scoped=true */ "./resources/js/gallery/ViewAlbum.vue?vue&type=template&id=923d41c2&scoped=true");
59192/* harmony import */ var _ViewAlbum_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./ViewAlbum.vue?vue&type=script&lang=js */ "./resources/js/gallery/ViewAlbum.vue?vue&type=script&lang=js");
59193/* harmony import */ var _ViewAlbum_vue_vue_type_style_index_0_id_923d41c2_scoped_true_lang_scss__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./ViewAlbum.vue?vue&type=style&index=0&id=923d41c2&scoped=true&lang=scss */ "./resources/js/gallery/ViewAlbum.vue?vue&type=style&index=0&id=923d41c2&scoped=true&lang=scss");
59194/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! !../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
59195
59196
59197
59198;
59199
59200
59201/* normalize component */
59202
59203var component = (0,_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__["default"])(
59204  _ViewAlbum_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_1__["default"],
59205  _ViewAlbum_vue_vue_type_template_id_923d41c2_scoped_true__WEBPACK_IMPORTED_MODULE_0__.render,
59206  _ViewAlbum_vue_vue_type_template_id_923d41c2_scoped_true__WEBPACK_IMPORTED_MODULE_0__.staticRenderFns,
59207  false,
59208  null,
59209  "923d41c2",
59210  null
59211  
59212)
59213
59214/* hot reload */
59215if (false) { var api; }
59216component.options.__file = "resources/js/gallery/ViewAlbum.vue"
59217/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (component.exports);
59218
59219/***/ }),
59220
59221/***/ "./resources/js/gallery/ViewAlbum.vue?vue&type=script&lang=js":
59222/*!********************************************************************!*\
59223  !*** ./resources/js/gallery/ViewAlbum.vue?vue&type=script&lang=js ***!
59224  \********************************************************************/
59225/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
59226
59227"use strict";
59228__webpack_require__.r(__webpack_exports__);
59229/* harmony export */ __webpack_require__.d(__webpack_exports__, {
59230/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
59231/* harmony export */ });
59232/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_index_js_vue_loader_options_ViewAlbum_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ViewAlbum.vue?vue&type=script&lang=js */ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/gallery/ViewAlbum.vue?vue&type=script&lang=js");
59233 /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_index_js_vue_loader_options_ViewAlbum_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_0__["default"]); 
59234
59235/***/ }),
59236
59237/***/ "./resources/js/gallery/ViewAlbum.vue?vue&type=style&index=0&id=923d41c2&scoped=true&lang=scss":
59238/*!*****************************************************************************************************!*\
59239  !*** ./resources/js/gallery/ViewAlbum.vue?vue&type=style&index=0&id=923d41c2&scoped=true&lang=scss ***!
59240  \*****************************************************************************************************/
59241/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
59242
59243"use strict";
59244__webpack_require__.r(__webpack_exports__);
59245/* harmony import */ var _node_modules_style_loader_dist_cjs_js_node_modules_laravel_mix_node_modules_css_loader_dist_cjs_js_clonedRuleSet_12_use_1_node_modules_vue_loader_lib_loaders_stylePostLo
59245ader_js_node_modules_postcss_loader_dist_cjs_js_clonedRuleSet_12_use_2_node_modules_sass_loader_dist_cjs_js_clonedRuleSet_12_use_3_node_modules_vue_loader_lib_index_js_vue_loader_options_ViewAlbum_vue_vue_type_style_index_0_id_923d41c2_scoped_true_lang_scss__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/style-loader/dist/cjs.js!../../../node_modules/laravel-mix/node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!../../../node_modules/sass-loader/dist/cjs.js??clonedRuleSet-12.use[3]!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ViewAlbum.vue?vue&type=style&index=0&id=923d41c2&scoped=true&lang=scss */ "./node_modules/style-loader/dist/cjs.js!./node_modules/laravel-mix/node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-12.use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/gallery/ViewAlbum.vue?vue&type=style&index=0&id=923d41c2&scoped=true&lang=scss");
59246
59247
59248/***/ }),
59249
59250/***/ "./resources/js/gallery/ViewAlbum.vue?vue&type=template&id=923d41c2&scoped=true":
59251/*!**************************************************************************************!*\
59252  !*** ./resources/js/gallery/ViewAlbum.vue?vue&type=template&id=923d41c2&scoped=true ***!
59253  \**************************************************************************************/
59254/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
59255
59256"use strict";
59257__webpack_require__.r(__webpack_exports__);
59258/* harmony export */ __webpack_require__.d(__webpack_exports__, {
59259/* harmony export */   render: () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_ViewAlbum_vue_vue_type_template_id_923d41c2_scoped_true__WEBPACK_IMPORTED_MODULE_0__.render),
59260/* harmony export */   staticRenderFns: () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_ViewAlbum_vue_vue_type_template_id_923d41c2_scoped_true__WEBPACK_IMPORTED_MODULE_0__.staticRenderFns)
59261/* harmony export */ });
59262/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_ViewAlbum_vue_vue_type_template_id_923d41c2_scoped_true__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!../../../node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ViewAlbum.vue?vue&type=template&id=923d41c2&scoped=true */ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/gallery/ViewAlbum.vue?vue&type=template&id=923d41c2&scoped=true");
59263
59264
59265/***/ }),
59266
59267/***/ "./resources/js/routes.js":
59268/*!********************************!*\
59269  !*** ./resources/js/routes.js ***!
59270  \********************************/
59271/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
59272
59273"use strict";
59274__webpack_require__.r(__webpack_exports__);
59275/* harmony export */ __webpack_require__.d(__webpack_exports__, {
59276/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
59277/* harmony export */ });
59278var routes = {
59279  mode: "history",
59280  routes: []
59281};
59282/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (routes);
59283
59284/***/ }),
59285
59286/***/ "./resources/js/video/VideoGallery.vue":
59287/*!*********************************************!*\
59288  !*** ./resources/js/video/VideoGallery.vue ***!
59289  \*********************************************/
59290/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
59291
59292"use strict";
59293__webpack_require__.r(__webpack_exports__);
59294/* harmony export */ __webpack_require__.d(__webpack_exports__, {
59295/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
59296/* harmony export */ });
59297/* harmony import */ var _VideoGallery_vue_vue_type_template_id_05149dee_scoped_true__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./VideoGallery.vue?vue&type=template&id=05149dee&scoped=true */ "./resources/js/video/VideoGallery.vue?vue&type=template&id=05149dee&scoped=true");
59298/* harmony import */ var _VideoGallery_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./VideoGallery.vue?vue&type=script&lang=js */ "./resources/js/video/VideoGallery.vue?vue&type=script&lang=js");
59299/* harmony import */ var _VideoGallery_vue_vue_type_style_index_0_id_05149dee_lang_scss_scoped_true__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./VideoGallery.vue?vue&type=style&index=0&id=05149dee&lang=scss&scoped=true */ "./resources/js/video/VideoGallery.vue?vue&type=style&index=0&id=05149dee&lang=scss&scoped=true");
59300/* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! !../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js");
59301
59302
59303
59304;
59305
59306
59307/* normalize component */
59308
59309var component = (0,_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_3__["default"])(
59310  _VideoGallery_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_1__["default"],
59311  _VideoGallery_vue_vue_type_template_id_05149dee_scoped_true__WEBPACK_IMPORTED_MODULE_0__.render,
59312  _VideoGallery_vue_vue_type_template_id_05149dee_scoped_true__WEBPACK_IMPORTED_MODULE_0__.staticRenderFns,
59313  false,
59314  null,
59315  "05149dee",
59316  null
59317  
59318)
59319
59320/* hot reload */
59321if (false) { var api; }
59322component.options.__file = "resources/js/video/VideoGallery.vue"
59323/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (component.exports);
59324
59325/***/ }),
59326
59327/***/ "./resources/js/video/VideoGallery.vue?vue&type=script&lang=js":
59328/*!*********************************************************************!*\
59329  !*** ./resources/js/video/VideoGallery.vue?vue&type=script&lang=js ***!
59330  \*********************************************************************/
59331/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
59332
59333"use strict";
59334__webpack_require__.r(__webpack_exports__);
59335/* harmony export */ __webpack_require__.d(__webpack_exports__, {
59336/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
59337/* harmony export */ });
59338/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_index_js_vue_loader_options_VideoGallery_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./VideoGallery.vue?vue&type=script&lang=js */ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/video/VideoGallery.vue?vue&type=script&lang=js");
59339 /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_index_js_vue_loader_options_VideoGallery_vue_vue_type_script_lang_js__WEBPACK_IMPORTED_MODULE_0__["default"]); 
59340
59341/***/ }),
59342
59343/***/ "./resources/js/video/VideoGallery.vue?vue&type=style&index=0&id=05149dee&lang=scss&scoped=true":
59344/*!******************************************************************************************************!*\
59345  !*** ./resources/js/video/VideoGallery.vue?vue&type=style&index=0&id=05149dee&lang=scss&scoped=true ***!
59346  \******************************************************************************************************/
59347/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
59348
59349"use strict";
59350__webpack_require__.r(__webpack_exports__);
59351/* harmony import */ var _node_modules_style_loader_dist_cjs_js_node_modules_laravel_mix_node_modules_css_loader_dist_cjs_js_clonedRuleSet_12_use_1_node_modules_vue_loader_lib_loaders_stylePostLo
59351ader_js_node_modules_postcss_loader_dist_cjs_js_clonedRuleSet_12_use_2_node_modules_sass_loader_dist_cjs_js_clonedRuleSet_12_use_3_node_modules_vue_loader_lib_index_js_vue_loader_options_VideoGallery_vue_vue_type_style_index_0_id_05149dee_lang_scss_scoped_true__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/style-loader/dist/cjs.js!../../../node_modules/laravel-mix/node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!../../../node_modules/sass-loader/dist/cjs.js??clonedRuleSet-12.use[3]!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./VideoGallery.vue?vue&type=style&index=0&id=05149dee&lang=scss&scoped=true */ "./node_modules/style-loader/dist/cjs.js!./node_modules/laravel-mix/node_modules/css-loader/dist/cjs.js??clonedRuleSet-12.use[1]!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/dist/cjs.js??clonedRuleSet-12.use[2]!./node_modules/sass-loader/dist/cjs.js??clonedRuleSet-12.use[3]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/video/VideoGallery.vue?vue&type=style&index=0&id=05149dee&lang=scss&scoped=true");
59352
59353
59354/***/ }),
59355
59356/***/ "./resources/js/video/VideoGallery.vue?vue&type=template&id=05149dee&scoped=true":
59357/*!***************************************************************************************!*\
59358  !*** ./resources/js/video/VideoGallery.vue?vue&type=template&id=05149dee&scoped=true ***!
59359  \***************************************************************************************/
59360/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
59361
59362"use strict";
59363__webpack_require__.r(__webpack_exports__);
59364/* harmony export */ __webpack_require__.d(__webpack_exports__, {
59365/* harmony export */   render: () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_VideoGallery_vue_vue_type_template_id_05149dee_scoped_true__WEBPACK_IMPORTED_MODULE_0__.render),
59366/* harmony export */   staticRenderFns: () => (/* reexport safe */ _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_VideoGallery_vue_vue_type_template_id_05149dee_scoped_true__WEBPACK_IMPORTED_MODULE_0__.staticRenderFns)
59367/* harmony export */ });
59368/* harmony import */ var _node_modules_babel_loader_lib_index_js_clonedRuleSet_5_use_0_node_modules_vue_loader_lib_loaders_templateLoader_js_ruleSet_1_rules_2_node_modules_vue_loader_lib_index_js_vue_loader_options_VideoGallery_vue_vue_type_template_id_05149dee_scoped_true__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!../../../node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./VideoGallery.vue?vue&type=template&id=05149dee&scoped=true */ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5.use[0]!./node_modules/vue-loader/lib/loaders/templateLoader.js??ruleSet[1].rules[2]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/video/VideoGallery.vue?vue&type=template&id=05149dee&scoped=true");
59369
59370
59371/***/ }),
59372
59373/***/ "./resources/sass/app.scss":
59374/*!*********************************!*\
59375  !*** ./resources/sass/app.scss ***!
59376  \*********************************/
59377/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
59378
59379"use strict";
59380__webpack_require__.r(__webpack_exports__);
59381// extracted by mini-css-extract-plugin
59382
59383
59384/***/ })
vendor: 7,764 bytes, lines 59384-59581
59384
59385
59386/******/ 	});
59387/************************************************************************/
59388/******/ 	// The module cache
59389/******/ 	var __webpack_module_cache__ = {};
59390/******/ 	
59391/******/ 	// The require function
59392/******/ 	function __webpack_require__(moduleId) {
59393/******/ 		// Check if module is in cache
59394/******/ 		var cachedModule = __webpack_module_cache__[moduleId];
59395/******/ 		if (cachedModule !== undefined) {
59396/******/ 			return cachedModule.exports;
59397/******/ 		}
59398/******/ 		// Create a new module (and put it into the cache)
59399/******/ 		var module = __webpack_module_cache__[moduleId] = {
59400/******/ 			id: moduleId,
59401/******/ 			loaded: false,
59402/******/ 			exports: {}
59403/******/ 		};
59404/******/ 	
59405/******/ 		// Execute the module function
59406/******/ 		__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);
59407/******/ 	
59408/******/ 		// Flag the module as loaded
59409/******/ 		module.loaded = true;
59410/******/ 	
59411/******/ 		// Return the exports of the module
59412/******/ 		return module.exports;
59413/******/ 	}
59414/******/ 	
59415/******/ 	// expose the modules object (__webpack_modules__)
59416/******/ 	__webpack_require__.m = __webpack_modules__;
59417/******/ 	
59418/************************************************************************/
59419/******/ 	/* webpack/runtime/chunk loaded */
59420/******/ 	(() => {
59421/******/ 		var deferred = [];
59422/******/ 		__webpack_require__.O = (result, chunkIds, fn, priority) => {
59423/******/ 			if(chunkIds) {
59424/******/ 				priority = priority || 0;
59425/******/ 				for(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];
59426/******/ 				deferred[i] = [chunkIds, fn, priority];
59427/******/ 				return;
59428/******/ 			}
59429/******/ 			var notFulfilled = Infinity;
59430/******/ 			for (var i = 0; i < deferred.length; i++) {
59431/******/ 				var [chunkIds, fn, priority] = deferred[i];
59432/******/ 				var fulfilled = true;
59433/******/ 				for (var j = 0; j < chunkIds.length; j++) {
59434/******/ 					if ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) {
59435/******/ 						chunkIds.splice(j--, 1);
59436/******/ 					} else {
59437/******/ 						fulfilled = false;
59438/******/ 						if(priority < notFulfilled) notFulfilled = priority;
59439/******/ 					}
59440/******/ 				}
59441/******/ 				if(fulfilled) {
59442/******/ 					deferred.splice(i--, 1)
59443/******/ 					var r = fn();
59444/******/ 					if (r !== undefined) result = r;
59445/******/ 				}
59446/******/ 			}
59447/******/ 			return result;
59448/******/ 		};
59449/******/ 	})();
59450/******/ 	
59451/******/ 	/* webpack/runtime/compat get default export */
59452/******/ 	(() => {
59453/******/ 		// getDefaultExport function for compatibility with non-harmony modules
59454/******/ 		__webpack_require__.n = (module) => {
59455/******/ 			var getter = module && module.__esModule ?
59456/******/ 				() => (module['default']) :
59457/******/ 				() => (module);
59458/******/ 			__webpack_require__.d(getter, { a: getter });
59459/******/ 			return getter;
59460/******/ 		};
59461/******/ 	})();
59462/******/ 	
59463/******/ 	/* webpack/runtime/define property getters */
59464/******/ 	(() => {
59465/******/ 		// define getter functions for harmony exports
59466/******/ 		__webpack_require__.d = (exports, definition) => {
59467/******/ 			for(var key in definition) {
59468/******/ 				if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
59469/******/ 					Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
59470/******/ 				}
59471/******/ 			}
59472/******/ 		};
59473/******/ 	})();
59474/******/ 	
59475/******/ 	/* webpack/runtime/global */
59476/******/ 	(() => {
59477/******/ 		__webpack_require__.g = (function() {
59478/******/ 			if (typeof globalThis === 'object') return globalThis;
59479/******/ 			try {
59480/******/ 				return this || new Function('return this')();
59481/******/ 			} catch (e) {
59482/******/ 				if (typeof window === 'object') return window;
59483/******/ 			}
59484/******/ 		})();
59485/******/ 	})();
59486/******/ 	
59487/******/ 	/* webpack/runtime/hasOwnProperty shorthand */
59488/******/ 	(() => {
59489/******/ 		__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
59490/******/ 	})();
59491/******/ 	
59492/******/ 	/* webpack/runtime/make namespace object */
59493/******/ 	(() => {
59494/******/ 		// define __esModule on exports
59495/******/ 		__webpack_require__.r = (exports) => {
59496/******/ 			if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
59497/******/ 				Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
59498/******/ 			}
59499/******/ 			Object.defineProperty(exports, '__esModule', { value: true });
59500/******/ 		};
59501/******/ 	})();
59502/******/ 	
59503/******/ 	/* webpack/runtime/node module decorator */
59504/******/ 	(() => {
59505/******/ 		__webpack_require__.nmd = (module) => {
59506/******/ 			module.paths = [];
59507/******/ 			if (!module.children) module.children = [];
59508/******/ 			return module;
59509/******/ 		};
59510/******/ 	})();
59511/******/ 	
59512/******/ 	/* webpack/runtime/jsonp chunk loading */
59513/******/ 	(() => {
59514/******/ 		// no baseURI
59515/******/ 		
59516/******/ 		// object to store loaded and loading chunks
59517/******/ 		// undefined = chunk not loaded, null = chunk preloaded/prefetched
59518/******/ 		// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded
59519/******/ 		var installedChunks = {
59520/******/ 			"/js/app": 0,
59521/******/ 			"css/app": 0
59522/******/ 		};
59523/******/ 		
59524/******/ 		// no chunk on demand loading
59525/******/ 		
59526/******/ 		// no prefetching
59527/******/ 		
59528/******/ 		// no preloaded
59529/******/ 		
59530/******/ 		// no HMR
59531/******/ 		
59532/******/ 		// no HMR manifest
59533/******/ 		
59534/******/ 		__webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0);
59535/******/ 		
59536/******/ 		// install a JSONP callback for chunk loading
59537/******/ 		var webpackJsonpCallback = (parentChunkLoadingFunction, data) => {
59538/******/ 			var [chunkIds, moreModules, runtime] = data;
59539/******/ 			// add "moreModules" to the modules object,
59540/******/ 			// then flag all "chunkIds" as loaded and fire callback
59541/******/ 			var moduleId, chunkId, i = 0;
59542/******/ 			if(chunkIds.some((id) => (installedChunks[id] !== 0))) {
59543/******/ 				for(moduleId in moreModules) {
59544/******/ 					if(__webpack_require__.o(moreModules, moduleId)) {
59545/******/ 						__webpack_require__.m[moduleId] = moreModules[moduleId];
59546/******/ 					}
59547/******/ 				}
59548/******/ 				if(runtime) var result = runtime(__webpack_require__);
59549/******/ 			}
59550/******/ 			if(parentChunkLoadingFunction) parentChunkLoadingFunction(data);
59551/******/ 			for(;i < chunkIds.length; i++) {
59552/******/ 				chunkId = chunkIds[i];
59553/******/ 				if(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {
59554/******/ 					installedChunks[chunkId][0]();
59555/******/ 				}
59556/******/ 				installedChunks[chunkId] = 0;
59557/******/ 			}
59558/******/ 			return __webpack_require__.O(result);
59559/******/ 		}
59560/******/ 		
59561/******/ 		var chunkLoadingGlobal = self["webpackChunk"] = self["webpackChunk"] || [];
59562/******/ 		chunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));
59563/******/ 		chunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));
59564/******/ 	})();
59565/******/ 	
59566/******/ 	/* webpack/runtime/nonce */
59567/******/ 	(() => {
59568/******/ 		__webpack_require__.nc = undefined;
59569/******/ 	})();
59570/******/ 	
59571/************************************************************************/
59572/******/ 	
59573/******/ 	// startup
59574/******/ 	// Load entry module and return exports
59575/******/ 	// This entry module depends on other loaded chunks and execution need to be delayed
59576/******/ 	__webpack_require__.O(undefined, ["css/app"], () => (__webpack_require__("./resources/js/app.js")))
59577/******/ 	var __webpack_exports__ = __webpack_require__.O(undefined, ["css/app"], () => (__webpack_require__("./resources/sass/app.scss")))
59578/******/ 	__webpack_exports__ = __webpack_require__.O(__webpack_exports__);
59579/******/ 	
59580/******/ })()
59581;

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.