valtech-components 2.0.725 → 2.0.726

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -11,6 +11,19 @@ import { VALTECH_FIREBASE_CONFIG } from './config';
11
11
  import { buildPath } from './utils/path-builder';
12
12
  import * as i0 from "@angular/core";
13
13
  import * as i1 from "@angular/fire/firestore";
14
+ /**
15
+ * Internal sentinel used to mark a collection path as global cross-app —
16
+ * i.e. it should NOT be prefixed with `apps/{appId}/`.
17
+ *
18
+ * Apps consume this via `CollectionOptions.skipAppPrefix`; the sentinel
19
+ * stays in `TypedCollection` and is stripped here before Firestore sees it.
20
+ *
21
+ * Format keeps it impossible to collide with a real Firestore path (`:` is
22
+ * not allowed in collection segments).
23
+ *
24
+ * @internal
25
+ */
26
+ export const ABS_PATH_SENTINEL = '__abs__:';
14
27
  /**
15
28
  * Servicio para operaciones CRUD en Firestore.
16
29
  *
@@ -53,9 +66,17 @@ export class FirestoreService {
53
66
  * Prefija el path de colección con el appId si está configurado.
54
67
  * Si no hay appId, retorna el path sin modificar (backward compatible).
55
68
  *
69
+ * Si el path empieza con `ABS_PATH_SENTINEL` (`__abs__:`), se asume que el
70
+ * caller quiere un path global cross-app (ej. `users/{uid}/notifications` —
71
+ * el inbox global de notificaciones). El sentinel se strippea y el resto
72
+ * del path se pasa verbatim, sin prefijo `apps/{appId}/`.
73
+ *
56
74
  * @internal
57
75
  */
58
76
  prefixCollectionPath(collectionPath) {
77
+ if (collectionPath.startsWith(ABS_PATH_SENTINEL)) {
78
+ return collectionPath.slice(ABS_PATH_SENTINEL.length);
79
+ }
59
80
  if (!this.config?.appId)
60
81
  return collectionPath;
61
82
  return `apps/${this.config.appId}/${collectionPath}`;
@@ -547,4 +568,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
547
568
  type: Injectable,
548
569
  args: [{ providedIn: 'root' }]
549
570
  }], ctorParameters: () => [{ type: i1.Firestore }] });
550
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlyZXN0b3JlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL3NlcnZpY2VzL2ZpcmViYXNlL2ZpcmVzdG9yZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7OztHQUtHO0FBRUgsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUNMLE1BQU0sRUFDTixVQUFVLEVBQ1YsY0FBYyxFQUNkLFNBQVMsRUFDVCxHQUFHLEVBQ0gsT0FBTyxFQUtQLGtCQUFrQixFQUNsQixNQUFNLEVBQ04sT0FBTyxFQUNQLEtBQUssRUFDTCxPQUFPLEVBQ1AsS0FBSyxFQUVMLGVBQWUsRUFDZixNQUFNLEVBQ04sVUFBVSxFQUNWLE9BQU8sRUFDUCxTQUFTLEVBQ1QsS0FBSyxFQUNMLFNBQVMsRUFDVCxTQUFTLEVBQ1QsS0FBSyxFQUNMLFVBQVUsRUFDVixTQUFTLEVBQ1QsVUFBVSxFQUNWLFdBQVcsR0FFWixNQUFNLHlCQUF5QixDQUFDO0FBQ2pDLE9BQU8sRUFBRSxHQUFHLEVBQWMsTUFBTSxNQUFNLENBQUM7QUFFdkMsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sVUFBVSxDQUFDO0FBRW5ELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQzs7O0FBRWpEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWdDRztBQUVILE1BQU0sT0FBTyxnQkFBZ0I7SUFHM0IsWUFBb0IsU0FBb0I7UUFBcEIsY0FBUyxHQUFULFNBQVMsQ0FBVztRQUZoQyxXQUFNLEdBQUcsTUFBTSxDQUFDLHVCQUF1QixFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFFMUIsQ0FBQztJQUU1Qzs7Ozs7T0FLRztJQUNLLG9CQUFvQixDQUFDLGNBQXNCO1FBQ2pELElBQUksQ0FBQyxJQUFJLENBQUMsTUFB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QUFDO2lCQUFNLElBQUksS0FBSyxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDdkUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM5QyxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQztZQUN0QixDQUFDO1FBQ0gsQ0FBQztRQUVELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFRDs7T0FFRztJQUNLLFNBQVMsQ0FBQyxJQUFZO1FBQzVCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDakMsSUFBSSxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNyRCxNQUFNLElBQUksS0FBSyxDQUFDLCtCQUErQixJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ3pELENBQUM7UUFDRCxNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFHLENBQUM7UUFDOUIsTUFBTSxjQUFjLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMxQyxPQUFPLENBQUMsY0FBYyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2pDLENBQUM7K0dBcGtCVSxnQkFBZ0I7bUhBQWhCLGdCQUFnQixjQURILE1BQU07OzRGQUNuQixnQkFBZ0I7a0JBRDVCLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBGaXJlc3RvcmUgU2VydmljZVxuICpcbiAqIFNlcnZpY2lvIGdlbsOpcmljbyBwYXJhIG9wZXJhY2lvbmVzIENSVUQgZW4gRmlyZXN0b3JlLlxuICogU29wb3J0YSBsZWN0dXJhcyBvbmUtdGltZSwgc3Vic2NyaXBjaW9uZXMgcmVhbC10aW1lLCBwYWdpbmFjacOzbiB5IHF1ZXJpZXMgY29tcGxlamFzLlxuICovXG5cbmltcG9ydCB7IGluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgYWRkRG9jLFxuICBjb2xsZWN0aW9uLFxuICBjb2xsZWN0aW9uRGF0YSxcbiAgZGVsZXRlRG9jLFxuICBkb2MsXG4gIGRvY0RhdGEsXG4gIERvY3VtZW50RGF0YSxcbiAgRG9jdW1lbnRSZWZlcmVuY2UsXG4gIERvY3VtZW50U25hcHNob3QsXG4gIEZpcmVzdG9yZSxcbiAgZ2V0Q291bnRGcm9tU2VydmVyLFxuICBnZXREb2MsXG4gIGdldERvY3MsXG4gIGxpbWl0LFxuICBvcmRlckJ5LFxuICBxdWVyeSxcbiAgUXVlcnlDb25zdHJhaW50LFxuICBzZXJ2ZXJUaW1lc3RhbXAsXG4gIHNldERvYyxcbiAgc3RhcnRBZnRlcixcbiAgc3RhcnRBdCxcbiAgZW5kQmVmb3JlLFxuICBlbmRBdCxcbiAgVGltZXN0YW1wLFxuICB1cGRhdGVEb2MsXG4gIHdoZXJlLFxuICB3cml0ZUJhdGNoLFxuICBpbmNyZW1lbnQsXG4gIGFycmF5VW5pb24sXG4gIGFycmF5UmVtb3ZlLFxuICBGaWVsZFZhbHVlLFxufSBmcm9tICdAYW5ndWxhci9maXJlL2ZpcmVzdG9yZSc7XG5pbXBvcnQgeyBtYXAsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgVkFMVEVDSF9GSVJFQkFTRV9DT05GSUcgfSBmcm9tICcuL2NvbmZpZyc7XG5pbXBvcnQgeyBGaXJlc3RvcmVEb2N1bWVudCwgUGFnaW5hdGVkUmVzdWx0LCBRdWVyeU9wdGlvbnMgfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IGJ1aWxkUGF0aCB9IGZyb20gJy4vdXRpbHMvcGF0aC1idWlsZGVyJztcblxuLyoqXG4gKiBTZXJ2aWNpbyBwYXJhIG9wZXJhY2lvbmVzIENSVUQgZW4gRmlyZXN0b3JlLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBpbnRlcmZhY2UgVXNlciBleHRlbmRzIEZpcmVzdG9yZURvY3VtZW50IHtcbiAqICAgbmFtZTogc3RyaW5nO1xuICogICBlbWFpbDogc3RyaW5nO1xuICogICByb2xlOiAnYWRtaW4nIHwgJ3VzZXInO1xuICogfVxuICpcbiAqIEBDb21wb25lbnQoey4uLn0pXG4gKiBleHBvcnQgY2xhc3MgVXNlcnNDb21wb25lbnQge1xuICogICBwcml2YXRlIGZpcmVzdG9yZSA9IGluamVjdChGaXJlc3RvcmVTZXJ2aWNlKTtcbiAqXG4gKiAgIC8vIExlY3R1cmEgb25lLXRpbWVcbiAqICAgYXN5bmMgbG9hZFVzZXIoaWQ6IHN0cmluZykge1xuICogICAgIGNvbnN0IHVzZXIgPSBhd2FpdCB0aGlzLmZpcmVzdG9yZS5nZXREb2M8VXNlcj4oJ3VzZXJzJywgaWQpO1xuICogICB9XG4gKlxuICogICAvLyBTdWJzY3JpcGNpw7NuIHJlYWwtdGltZVxuICogICB1c2VycyQgPSB0aGlzLmZpcmVzdG9yZS5jb2xsZWN0aW9uQ2hhbmdlczxVc2VyPigndXNlcnMnLCB7XG4gKiAgICAgd2hlcmU6IFt7IGZpZWxkOiAncm9sZScsIG9wZXJhdG9yOiAnPT0nLCB2YWx1ZTogJ2FkbWluJyB9XSxcbiAqICAgICBvcmRlckJ5OiBbeyBmaWVsZDogJ25hbWUnLCBkaXJlY3Rpb246ICdhc2MnIH1dXG4gKiAgIH0pO1xuICpcbiAqICAgLy8gQ3JlYXIgZG9jdW1lbnRvXG4gKiAgIGFzeW5jIGNyZWF0ZVVzZXIoZGF0YTogT21pdDxVc2VyLCAnaWQnPikge1xuICogICAgIGNvbnN0IHVzZXIgPSBhd2FpdCB0aGlzLmZpcmVzdG9yZS5hZGREb2M8VXNlcj4oJ3VzZXJzJywgZGF0YSk7XG4gKiAgIH1cbiAqIH1cbiAqIGBgYFxuICovXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIEZpcmVzdG9yZVNlcnZpY2Uge1xuICBwcml2YXRlIGNvbmZpZyA9IGluamVjdChWQUxURUNIX0ZJUkVCQVNFX0NPTkZJRywgeyBvcHRpb25hbDogdHJ1ZSB9KTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGZpcmVzdG9yZTogRmlyZXN0b3JlKSB7fVxuXG4gIC8qKlxuICAgKiBQcmVmaWphIGVsIHBhdGggZGUgY29sZWNjacOzbiBjb24gZWwgYXBwSWQgc2kgZXN0w6EgY29uZmlndXJhZG8uXG4gICAqIFNpIG5vIGhheSBhcHBJZCwgcmV0b3JuYSBlbCBwYXRoIHNpbiBtb2RpZmljYXIgKGJhY2t3YXJkIGNvbXBhdGlibGUpLlxuICAgKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHByaXZhdGUgcHJlZml4Q29sbGVjdGlvblBhdGgoY29sbGVjdGlvblBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKCF0aGlzLmNvbmZpZz8uYXBwSWQpIHJldHVybiBjb2xsZWN0aW9uUGF0aDtcbiAgICByZXR1cm4gYGFwcHMvJHt0aGlzLmNvbmZpZy5hcHBJZH0vJHtjb2xsZWN0aW9uUGF0aH1gO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIExFQ1RVUkFTIE9ORS1USU1FIChQcm9taXNlKVxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAvKipcbiAgICogT2J0aWVuZSB1biBkb2N1bWVudG8gcG9yIElEIChsZWN0dXJhIMO6bmljYSkuXG4gICAqXG4gICAqIEBwYXJhbSBjb2xsZWN0aW9uUGF0aCAtIFJ1dGEgZGUgbGEgY29sZWNjacOzblxuICAgKiBAcGFyYW0gZG9jSWQgLSBJRCBkZWwgZG9jdW1lbnRvXG4gICAqIEByZXR1cm5zIERvY3VtZW50byBvIG51bGwgc2kgbm8gZXhpc3RlXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogY29uc3QgdXNlciA9IGF3YWl0IGZpcmVzdG9yZVNlcnZpY2UuZ2V0RG9jPFVzZXI+KCd1c2VycycsICdhYmMxMjMnKTtcbiAgICogaWYgKHVzZXIpIHtcbiAgICogICBjb25zb2xlLmxvZyh1c2VyLm5hbWUpO1xuICAgKiB9XG4gICAqIGBgYFxuICAgKi9cbiAgYXN5bmMgZ2V0RG9jPFQgZXh0ZW5kcyBGaXJlc3RvcmVEb2N1bWVudD4oXG4gICAgY29sbGVjdGlvblBhdGg6IHN0cmluZyxcbiAgICBkb2NJZDogc3RyaW5nXG4gICk6IFByb21pc2U8VCB8IG51bGw+IHtcbiAgICBjb25zdCBwcmVmaXhlZFBhdGggPSB0aGlzLnByZWZpeENvbGxlY3Rpb25QYXRoKGNvbGxlY3Rpb25QYXRoKTtcbiAgICBjb25zdCBkb2NSZWYgPSBkb2ModGhpcy5maXJlc3RvcmUsIHByZWZpeGVkUGF0aCwgZG9jSWQpO1xuICAgIGNvbnN0IHNuYXBzaG90ID0gYXdhaXQgZ2V0RG9jKGRvY1JlZik7XG5cbiAgICBpZiAoIXNuYXBzaG90LmV4aXN0cygpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5tYXBEb2N1bWVudDxUPihzbmFwc2hvdCk7XG4gIH1cblxuICAvKipcbiAgICogT2J0aWVuZSBtw7psdGlwbGVzIGRvY3VtZW50b3MgY29uIG9wY2lvbmVzIGRlIHF1ZXJ5LlxuICAgKlxuICAgKiBAcGFyYW0gY29sbGVjdGlvblBhdGggLSBSdXRhIGRlIGxhIGNvbGVjY2nDs25cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBPcGNpb25lcyBkZSBxdWVyeSAod2hlcmUsIG9yZGVyQnksIGxpbWl0KVxuICAgKiBAcmV0dXJucyBBcnJheSBkZSBkb2N1bWVudG9zXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogLy8gVG9kb3MgbG9zIHVzdWFyaW9zIGFjdGl2b3Mgb3JkZW5hZG9zIHBvciBub21icmVcbiAgICogY29uc3QgdXNlcnMgPSBhd2FpdCBmaXJlc3RvcmVTZXJ2aWNlLmdldERvY3M8VXNlcj4oJ3VzZXJzJywge1xuICAgKiAgIHdoZXJlOiBbeyBmaWVsZDogJ2FjdGl2ZScsIG9wZXJhdG9yOiAnPT0nLCB2YWx1ZTogdHJ1ZSB9XSxcbiAgICogICBvcmRlckJ5OiBbeyBmaWVsZDogJ25hbWUnLCBkaXJlY3Rpb246ICdhc2MnIH1dLFxuICAgKiAgIGxpbWl0OiA1MFxuICAgKiB9KTtcbiAgICogYGBgXG4gICAqL1xuICBhc3luYyBnZXREb2NzPFQgZXh0ZW5kcyBGaXJlc3RvcmVEb2N1bWVudD4oXG4gICAgY29sbGVjdGlvblBhdGg6IHN0cmluZyxcbiAgICBvcHRpb25zPzogUXVlcnlPcHRpb25zXG4gICk6IFByb21pc2U8VFtdPiB7XG4gICAgY29uc3QgcHJlZml4ZWRQYXRoID0gdGhpcy5wcmVmaXhDb2xsZWN0aW9uUGF0aChjb2xsZWN0aW9uUGF0aCk7XG4gICAgY29uc3QgY29sbGVjdGlvblJlZiA9IGNvbGxlY3Rpb24odGhpcy5maXJlc3RvcmUsIHByZWZpeGVkUGF0aCk7XG4gICAgY29uc3QgY29uc3RyYWludHMgPSB0aGlzLmJ1aWxkUXVlcnlDb25zdHJhaW50cyhvcHRpb25zKTtcbiAgICBjb25zdCBxID0gcXVlcnkoY29sbGVjdGlvblJlZiwgLi4uY29uc3RyYWludHMpO1xuICAgIGNvbnN0IHNuYXBzaG90ID0gYXdhaXQgZ2V0RG9jcyhxKTtcblxuICAgIHJldHVybiBzbmFwc2hvdC5kb2NzLm1hcChkb2MgPT4gdGhpcy5tYXBEb2N1bWVudDxUPihkb2MpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDdWVudGEgZG9jdW1lbnRvcyB1c2FuZG8gYWdncmVnYXRpb24gcXVlcnkgZGVsIHNlcnZpZG9yLlxuICAgKiBObyBkZXNjYXJnYSBsb3MgZG9jdW1lbnRvcyDigJQgbXVjaG8gbcOhcyBlZmljaWVudGUgcGFyYSBjb250ZW9zIHkgYmFkZ2VzLlxuICAgKi9cbiAgYXN5bmMgY291bnREb2NzKGNvbGxlY3Rpb25QYXRoOiBzdHJpbmcsIG9wdGlvbnM/OiBRdWVyeU9wdGlvbnMpOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIGNvbnN0IHByZWZpeGVkUGF0aCA9IHRoaXMucHJlZml4Q29sbGVjdGlvblBhdGgoY29sbGVjdGlvblBhdGgpO1xuICAgIGNvbnN0IGNvbGxlY3Rpb25SZWYgPSBjb2xsZWN0aW9uKHRoaXMuZmlyZXN0b3JlLCBwcmVmaXhlZFBhdGgpO1xuICAgIGNvbnN0IGNvbnN0cmFpbnRzID0gdGhpcy5idWlsZFF1ZXJ5Q29uc3RyYWludHMob3B0aW9ucyk7XG4gICAgY29uc3QgcSA9IHF1ZXJ5KGNvbGxlY3Rpb25SZWYsIC4uLmNvbnN0cmFpbnRzKTtcbiAgICBjb25zdCBzbmFwc2hvdCA9IGF3YWl0IGdldENvdW50RnJvbVNlcnZlcihxKTtcbiAgICByZXR1cm4gc25hcHNob3QuZGF0YSgpLmNvdW50O1xuICB9XG5cbiAgLyoqXG4gICAqIE9idGllbmUgZG9jdW1lbnRvcyBjb24gcGFnaW5hY2nDs24gYmFzYWRhIGVuIGN1cnNvcmVzLlxuICAgKlxuICAgKiBAcGFyYW0gY29sbGVjdGlvblBhdGggLSBSdXRhIGRlIGxhIGNvbGVjY2nDs25cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBPcGNpb25lcyBkZSBxdWVyeSAoZGViZSBpbmNsdWlyIGxpbWl0KVxuICAgKiBAcmV0dXJucyBSZXN1bHRhZG8gcGFnaW5hZG8gY29uIGN1cnNvciBwYXJhIGxhIHNpZ3VpZW50ZSBww6FnaW5hXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogLy8gUHJpbWVyYSBww6FnaW5hXG4gICAqIGNvbnN0IHBhZ2UxID0gYXdhaXQgZmlyZXN0b3JlU2VydmljZS5nZXRQYWdpbmF0ZWQ8VXNlcj4oJ3VzZXJzJywge1xuICAgKiAgIG9yZGVyQnk6IFt7IGZpZWxkOiAnY3JlYXRlZEF0JywgZGlyZWN0aW9uOiAnZGVzYycgfV0sXG4gICAqICAgbGltaXQ6IDEwXG4gICAqIH0pO1xuICAgKlxuICAgKiAvLyBTaWd1aWVudGUgcMOhZ2luYVxuICAgKiBpZiAocGFnZTEuaGFzTW9yZSkge1xuICAgKiAgIGNvbnN0IHBhZ2UyID0gYXdhaXQgZmlyZXN0b3JlU2VydmljZS5nZXRQYWdpbmF0ZWQ8VXNlcj4oJ3VzZXJzJywge1xuICAgKiAgICAgb3JkZXJCeTogW3sgZmllbGQ6ICdjcmVhdGVkQXQnLCBkaXJlY3Rpb246ICdkZXNjJyB9XSxcbiAgICogICAgIGxpbWl0OiAxMCxcbiAgICogICAgIHN0YXJ0QWZ0ZXI6IHBhZ2UxLmxhc3REb2NcbiAgICogICB9KTtcbiAgICogfVxuICAgKiBgYGBcbiAgICovXG4gIGFzeW5jIGdldFBhZ2luYXRlZDxUIGV4dGVuZHMgRmlyZXN0b3JlRG9jdW1lbnQ+KFxuICAgIGNvbGxlY3Rpb25QYXRoOiBzdHJpbmcsXG4gICAgb3B0aW9uczogUXVlcnlPcHRpb25zICYgeyBsaW1pdDogbnVtYmVyIH1cbiAgKTogUHJvbWlzZTxQYWdpbmF0ZWRSZXN1bHQ8VD4+IHtcbiAgICBjb25zdCBwcmVmaXhlZFBhdGggPSB0aGlzLnByZWZpeENvbGxlY3Rpb25QYXRoKGNvbGxlY3Rpb25QYXRoKTtcbiAgICBjb25zdCBjb2xsZWN0aW9uUmVmID0gY29sbGVjdGlvbih0aGlzLmZpcmVzdG9yZSwgcHJlZml4ZWRQYXRoKTtcbiAgICBjb25zdCBjb25zdHJhaW50cyA9IHRoaXMuYnVpbGRRdWVyeUNvbnN0cmFpbnRzKG9wdGlvbnMpO1xuXG4gICAgLy8gUGVkaXIgdW5vIG3DoXMgcGFyYSBzYWJlciBzaSBoYXkgbcOhcyBww6FnaW5hc1xuICAgIGNvbnN0IHEgPSBxdWVyeShjb2xsZWN0aW9uUmVmLCAuLi5jb25zdHJhaW50cywgbGltaXQob3B0aW9ucy5saW1pdCArIDEpKTtcbiAgICBjb25zdCBzbmFwc2hvdCA9IGF3YWl0IGdldERvY3MocSk7XG5cbiAgICBjb25zdCBkb2NzID0gc25hcHNob3QuZG9jcztcbiAgICBjb25zdCBoYXNNb3JlID0gZG9jcy5sZW5ndGggPiBvcHRpb25zLmxpbWl0O1xuXG4gICAgLy8gU2kgaGF5IG3DoXMsIHJlbW92ZXIgZWwgZG9jdW1lbnRvIGV4dHJhXG4gICAgY29uc3QgcmVzdWx0RG9jcyA9IGhhc01vcmUgPyBkb2NzLnNsaWNlKDAsIC0xKSA6IGRvY3M7XG4gICAgY29uc3QgbGFzdERvYyA9IHJlc3VsdERvY3MubGVuZ3RoID4gMCA/IHJlc3VsdERvY3NbcmVzdWx0RG9jcy5sZW5ndGggLSAxXSA6IG51bGw7XG5cbiAgICByZXR1cm4ge1xuICAgICAgZGF0YTogcmVzdWx0RG9jcy5tYXAoZG9jID0+IHRoaXMubWFwRG9jdW1lbnQ8VD4oZG9jKSksXG4gICAgICBoYXNNb3JlLFxuICAgICAgbGFzdERvYyxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFZlcmlmaWNhIHNpIHVuIGRvY3VtZW50byBleGlzdGUuXG4gICAqXG4gICAqIEBwYXJhbSBjb2xsZWN0aW9uUGF0aCAtIFJ1dGEgZGUgbGEgY29sZWNjacOzblxuICAgKiBAcGFyYW0gZG9jSWQgLSBJRCBkZWwgZG9jdW1lbnRvXG4gICAqIEByZXR1cm5zIHRydWUgc2kgZWwgZG9jdW1lbnRvIGV4aXN0ZVxuICAgKi9cbiAgYXN5bmMgZXhpc3RzKGNvbGxlY3Rpb25QYXRoOiBzdHJpbmcsIGRvY0lkOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBwcmVmaXhlZFBhdGggPSB0aGlzLnByZWZpeENvbGxlY3Rpb25QYXRoKGNvbGxlY3Rpb25QYXRoKTtcbiAgICBjb25zdCBkb2NSZWYgPSBkb2ModGhpcy5maXJlc3RvcmUsIHByZWZpeGVkUGF0aCwgZG9jSWQpO1xuICAgIGNvbnN0IHNuYXBzaG90ID0gYXdhaXQgZ2V0RG9jKGRvY1JlZik7XG4gICAgcmV0dXJuIHNuYXBzaG90LmV4aXN0cygpO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFNVQlNDUklQQ0lPTkVTIFJFQUwtVElNRSAoT2JzZXJ2YWJsZSlcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIFN1c2NyaWJlIGEgY2FtYmlvcyBkZSB1biBkb2N1bWVudG8gKHJlYWwtdGltZSkuXG4gICAqXG4gICAqIEBwYXJhbSBjb2xsZWN0aW9uUGF0aCAtIFJ1dGEgZGUgbGEgY29sZWNjacOzblxuICAgKiBAcGFyYW0gZG9jSWQgLSBJRCBkZWwgZG9jdW1lbnRvXG4gICAqIEByZXR1cm5zIE9ic2VydmFibGUgcXVlIGVtaXRlIGN1YW5kbyBlbCBkb2N1bWVudG8gY2FtYmlhXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogLy8gRW4gZWwgY29tcG9uZW50ZVxuICAgKiB1c2VyJCA9IHRoaXMuZmlyZXN0b3JlU2VydmljZS5kb2NDaGFuZ2VzPFVzZXI+KCd1c2VycycsIHRoaXMudXNlcklkKTtcbiAgICpcbiAgICogLy8gRW4gZWwgdGVtcGxhdGVcbiAgICogQGlmICh1c2VyJCB8IGFzeW5jOyBhcyB1c2VyKSB7XG4gICAqICAgPHA+e3sgdXNlci5uYW1lIH19PC9wPlxuICAgKiB9XG4gICAqIGBgYFxuICAgKi9cbiAgZG9jQ2hhbmdlczxUIGV4dGVuZHMgRmlyZXN0b3JlRG9jdW1lbnQ+KFxuICAgIGNvbGxlY3Rpb25QYXRoOiBzdHJpbmcsXG4gICAgZG9jSWQ6IHN0cmluZ1xuICApOiBPYnNlcnZhYmxlPFQgfCBudWxsPiB7XG4gICAgY29uc3QgcHJlZml4ZWRQYXRoID0gdGhpcy5wcmVmaXhDb2xsZWN0aW9uUGF0aChjb2xsZWN0aW9uUGF0aCk7XG4gICAgY29uc3QgZG9jUmVmID0gZG9jKHRoaXMuZmlyZXN0b3JlLCBwcmVmaXhlZFBhdGgsIGRvY0lkKTtcbiAgICByZXR1cm4gZG9jRGF0YShkb2NSZWYsIHsgaWRGaWVsZDogJ2lkJyB9KS5waXBlKFxuICAgICAgbWFwKGRhdGEgPT4ge1xuICAgICAgICBpZiAoIWRhdGEpIHJldHVybiBudWxsO1xuICAgICAgICByZXR1cm4gdGhpcy5jb252ZXJ0VGltZXN0YW1wcyhkYXRhIGFzIERvY3VtZW50RGF0YSkgYXMgVDtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdXNjcmliZSBhIGNhbWJpb3MgZGUgdW5hIGNvbGVjY2nDs24gKHJlYWwtdGltZSkuXG4gICAqXG4gICAqIEBwYXJhbSBjb2xsZWN0aW9uUGF0aCAtIFJ1dGEgZGUgbGEgY29sZWNjacOzblxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wY2lvbmVzIGRlIHF1ZXJ5XG4gICAqIEByZXR1cm5zIE9ic2VydmFibGUgcXVlIGVtaXRlIGN1YW5kbyBsYSBjb2xlY2Npw7NuIGNhbWJpYVxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIC8vIFVzdWFyaW9zIGFjdGl2b3MgZW4gdGllbXBvIHJlYWxcbiAgICogYWN0aXZlVXNlcnMkID0gdGhpcy5maXJlc3RvcmVTZXJ2aWNlLmNvbGxlY3Rpb25DaGFuZ2VzPFVzZXI+KCd1c2VycycsIHtcbiAgICogICB3aGVyZTogW3sgZmllbGQ6ICdzdGF0dXMnLCBvcGVyYXRvcjogJz09JywgdmFsdWU6ICdvbmxpbmUnIH1dXG4gICAqIH0pO1xuICAgKiBgYGBcbiAgICovXG4gIGNvbGxlY3Rpb25DaGFuZ2VzPFQgZXh0ZW5kcyBGaXJlc3RvcmVEb2N1bWVudD4oXG4gICAgY29sbGVjdGlvblBhdGg6IHN0cmluZyxcbiAgICBvcHRpb25zPzogUXVlcnlPcHRpb25zXG4gICk6IE9ic2VydmFibGU8VFtdPiB7XG4gICAgY29uc3QgcHJlZml4ZWRQYXRoID0gdGhpcy5wcmVmaXhDb2xsZWN0aW9uUGF0aChjb2xsZWN0aW9uUGF0aCk7XG4gICAgY29uc3QgY29sbGVjdGlvblJlZiA9IGNvbGxlY3Rpb24odGhpcy5maXJlc3RvcmUsIHByZWZpeGVkUGF0aCk7XG4gICAgY29uc3QgY29uc3RyYWludHMgPSB0aGlzLmJ1aWxkUXVlcnlDb25zdHJhaW50cyhvcHRpb25zKTtcbiAgICBjb25zdCBxID0gcXVlcnkoY29sbGVjdGlvblJlZiwgLi4uY29uc3RyYWludHMpO1xuXG4gICAgcmV0dXJuIGNvbGxlY3Rpb25EYXRhKHEsIHsgaWRGaWVsZDogJ2lkJyB9KS5waXBlKFxuICAgICAgbWFwKGRvY3MgPT4gZG9jcy5tYXAoZG9jID0+IHRoaXMuY29udmVydFRpbWVzdGFtcHMoZG9jKSBhcyBUKSlcbiAgICApO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIEVTQ1JJVFVSQVxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAvKipcbiAgICogQWdyZWdhIHVuIGRvY3VtZW50byBjb24gSUQgYXV0by1nZW5lcmFkby5cbiAgICpcbiAgICogQHBhcmFtIGNvbGxlY3Rpb25QYXRoIC0gUnV0YSBkZSBsYSBjb2xlY2Npw7NuXG4gICAqIEBwYXJhbSBkYXRhIC0gRGF0b3MgZGVsIGRvY3VtZW50byAoc2luIGlkLCBjcmVhdGVkQXQsIHVwZGF0ZWRBdClcbiAgICogQHJldHVybnMgRG9jdW1lbnRvIGNyZWFkbyBjb24gc3UgSURcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBjb25zdCBuZXdVc2VyID0gYXdhaXQgZmlyZXN0b3JlU2VydmljZS5hZGREb2M8VXNlcj4oJ3VzZXJzJywge1xuICAgKiAgIG5hbWU6ICdKb2huIERvZScsXG4gICAqICAgZW1haWw6ICdqb2huQGV4YW1wbGUuY29tJyxcbiAgICogICByb2xlOiAndXNlcidcbiAgICogfSk7XG4gICAqIGNvbnNvbGUubG9nKCdDcmVhdGVkIHVzZXIgd2l0aCBJRDonLCBuZXdVc2VyLmlkKTtcbiAgICogYGBgXG4gICAqL1xuICBhc3luYyBhZGREb2M8VCBleHRlbmRzIEZpcmVzdG9yZURvY3VtZW50PihcbiAgICBjb2xsZWN0aW9uUGF0aDogc3RyaW5nLFxuICAgIGRhdGE6IE9taXQ8VCwgJ2lkJyB8ICdjcmVhdGVkQXQnIHwgJ3VwZGF0ZWRBdCc+XG4gICk6IFByb21pc2U8VD4ge1xuICAgIGNvbnN0IHByZWZpeGVkUGF0aCA9IHRoaXMucHJlZml4Q29sbGVjdGlvblBhdGgoY29sbGVjdGlvblBhdGgpO1xuICAgIGNvbnN0IGNvbGxlY3Rpb25SZWYgPSBjb2xsZWN0aW9uKHRoaXMuZmlyZXN0b3JlLCBwcmVmaXhlZFBhdGgpO1xuICAgIGNvbnN0IHRpbWVzdGFtcCA9IHNlcnZlclRpbWVzdGFtcCgpO1xuXG4gICAgY29uc3QgZG9jRGF0YSA9IHtcbiAgICAgIC4uLmRhdGEsXG4gICAgICBjcmVhdGVkQXQ6IHRpbWVzdGFtcCxcbiAgICAgIHVwZGF0ZWRBdDogdGltZXN0YW1wLFxuICAgIH07XG5cbiAgICBjb25zdCBkb2NSZWYgPSBhd2FpdCBhZGREb2MoY29sbGVjdGlvblJlZiwgZG9jRGF0YSk7XG5cbiAgICAvLyBSZXRvcm5hciBvcHRpbcOtc3RpY2FtZW50ZSBzaW4gc2VndW5kbyByb3VuZC10cmlwLlxuICAgIC8vIHNlcnZlclRpbWVzdGFtcCgpIHJlc3VlbHZlIGVuIGVsIHNlcnZpZG9yOyB1c2Ftb3MgRGF0ZS5ub3coKSBsb2NhbG1lbnRlXG4gICAgLy8gcGFyYSBldml0YXIgdW4gZ2V0RG9jKCkgZXh0cmEuIEVsIHZhbG9yIHJlYWwgbGxlZ2EgZW4gbGEgcHLDs3hpbWEgbGVjdHVyYS5cbiAgICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpO1xuICAgIHJldHVybiB7IGlkOiBkb2NSZWYuaWQsIC4uLmRhdGEsIGNyZWF0ZWRBdDogbm93LCB1cGRhdGVkQXQ6IG5vdyB9IGFzIFQ7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYSBvIHNvYnJlc2NyaWJlIHVuIGRvY3VtZW50byBjb24gSUQgZXNwZWPDrWZpY28uXG4gICAqXG4gICAqIEBwYXJhbSBjb2xsZWN0aW9uUGF0aCAtIFJ1dGEgZGUgbGEgY29sZWNjacOzblxuICAgKiBAcGFyYW0gZG9jSWQgLSBJRCBkZWwgZG9jdW1lbnRvXG4gICAqIEBwYXJhbSBkYXRhIC0gRGF0b3MgZGVsIGRvY3VtZW50b1xuICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wY2lvbmVzIChtZXJnZTogdHJ1ZSBwYXJhIG1lcmdlIGVuIGx1Z2FyIGRlIHNvYnJlc2NyaWJpcilcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiAvLyBTb2JyZXNjcmliaXIgY29tcGxldGFtZW50ZVxuICAgKiBhd2FpdCBmaXJlc3RvcmVTZXJ2aWNlLnNldERvYzxVc2VyPigndXNlcnMnLCAndXNlcjEyMycsIHVzZXJEYXRhKTtcbiAgICpcbiAgICogLy8gTWVyZ2UgY29uIGRhdG9zIGV4aXN0ZW50ZXNcbiAgICogYXdhaXQgZmlyZXN0b3JlU2VydmljZS5zZXREb2M8VXNlcj4oJ3VzZXJzJywgJ3VzZXIxMjMnLCB7IG5hbWU6ICdOZXcgTmFtZScgfSwgeyBtZXJnZTogdHJ1ZSB9KTtcbiAgICogYGBgXG4gICAqL1xuICBhc3luYyBzZXREb2M8VCBleHRlbmRzIEZpcmVzdG9yZURvY3VtZW50PihcbiAgICBjb2xsZWN0aW9uUGF0aDogc3RyaW5nLFxuICAgIGRvY0lkOiBzdHJpbmcsXG4gICAgZGF0YTogT21pdDxULCAnaWQnPixcbiAgICBvcHRpb25zPzogeyBtZXJnZT86IGJvb2xlYW4gfVxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBwcmVmaXhlZFBhdGggPSB0aGlzLnByZWZpeENvbGxlY3Rpb25QYXRoKGNvbGxlY3Rpb25QYXRoKTtcbiAgICBjb25zdCBkb2NSZWYgPSBkb2ModGhpcy5maXJlc3RvcmUsIHByZWZpeGVkUGF0aCwgZG9jSWQpO1xuICAgIGNvbnN0IHRpbWVzdGFtcCA9IHNlcnZlclRpbWVzdGFtcCgpO1xuXG4gICAgY29uc3QgZG9jRGF0YSA9IHtcbiAgICAgIC4uLmRhdGEsXG4gICAgICB1cGRhdGVkQXQ6IHRpbWVzdGFtcCxcbiAgICAgIC4uLihvcHRpb25zPy5tZXJnZSA/IHt9IDogeyBjcmVhdGVkQXQ6IHRpbWVzdGFtcCB9KSxcbiAgICB9O1xuXG4gICAgYXdhaXQgc2V0RG9jKGRvY1JlZiwgZG9jRGF0YSwgeyBtZXJnZTogb3B0aW9ucz8ubWVyZ2UgPz8gZmFsc2UgfSk7XG4gIH1cblxuICAvKipcbiAgICogQWN0dWFsaXphIGNhbXBvcyBlc3BlY8OtZmljb3MgZGUgdW4gZG9jdW1lbnRvLlxuICAgKlxuICAgKiBAcGFyYW0gY29sbGVjdGlvblBhdGggLSBSdXRhIGRlIGxhIGNvbGVjY2nDs25cbiAgICogQHBhcmFtIGRvY0lkIC0gSUQgZGVsIGRvY3VtZW50b1xuICAgKiBAcGFyYW0gZGF0YSAtIENhbXBvcyBhIGFjdHVhbGl6YXJcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBhd2FpdCBmaXJlc3RvcmVTZXJ2aWNlLnVwZGF0ZURvYzxVc2VyPigndXNlcnMnLCAndXNlcjEyMycsIHtcbiAgICogICBuYW1lOiAnVXBkYXRlZCBOYW1lJyxcbiAgICogICBsYXN0TG9naW46IG5ldyBEYXRlKClcbiAgICogfSk7XG4gICAqIGBgYFxuICAgKi9cbiAgYXN5bmMgdXBkYXRlRG9jPFQgZXh0ZW5kcyBGaXJlc3RvcmVEb2N1bWVudD4oXG4gICAgY29sbGVjdGlvblBhdGg6IHN0cmluZyxcbiAgICBkb2NJZDogc3RyaW5nLFxuICAgIGRhdGE6IFBhcnRpYWw8T21pdDxULCAnaWQnIHwgJ2NyZWF0ZWRBdCc+PlxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBwcmVmaXhlZFBhdGggPSB0aGlzLnByZWZpeENvbGxlY3Rpb25QYXRoKGNvbGxlY3Rpb25QYXRoKTtcbiAgICBjb25zdCBkb2NSZWYgPSBkb2ModGhpcy5maXJlc3RvcmUsIHByZWZpeGVkUGF0aCwgZG9jSWQpO1xuXG4gICAgYXdhaXQgdXBkYXRlRG9jKGRvY1JlZiwge1xuICAgICAgLi4uZGF0YSxcbiAgICAgIHVwZGF0ZWRBdDogc2VydmVyVGltZXN0YW1wKCksXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogRWxpbWluYSB1biBkb2N1bWVudG8uXG4gICAqXG4gICAqIEBwYXJhbSBjb2xsZWN0aW9uUGF0aCAtIFJ1dGEgZGUgbGEgY29sZWNjacOzblxuICAgKiBAcGFyYW0gZG9jSWQgLSBJRCBkZWwgZG9jdW1lbnRvXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogYXdhaXQgZmlyZXN0b3JlU2VydmljZS5kZWxldGVEb2MoJ3VzZXJzJywgJ3VzZXIxMjMnKTtcbiAgICogYGBgXG4gICAqL1xuICBhc3luYyBkZWxldGVEb2MoY29sbGVjdGlvblBhdGg6IHN0cmluZywgZG9jSWQ6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHByZWZpeGVkUGF0aCA9IHRoaXMucHJlZml4Q29sbGVjdGlvblBhdGgoY29sbGVjdGlvblBhdGgpO1xuICAgIGNvbnN0IGRvY1JlZiA9IGRvYyh0aGlzLmZpcmVzdG9yZSwgcHJlZml4ZWRQYXRoLCBkb2NJZCk7XG4gICAgYXdhaXQgZGVsZXRlRG9jKGRvY1JlZik7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gT1BFUkFDSU9ORVMgRU4gTE9URVxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAvKipcbiAgICogRWplY3V0YSBtw7psdGlwbGVzIG9wZXJhY2lvbmVzIGRlIGVzY3JpdHVyYSBkZSBmb3JtYSBhdMOzbWljYS5cbiAgICpcbiAgICogQHBhcmFtIG9wZXJhdGlvbnMgLSBGdW5jacOzbiBxdWUgcmVjaWJlIGVsIGJhdGNoIHkgYWdyZWdhIG9wZXJhY2lvbmVzXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogYXdhaXQgZmlyZXN0b3JlU2VydmljZS5iYXRjaCgoYmF0Y2gpID0+IHtcbiAgICogICBiYXRjaC5zZXQoJ3VzZXJzL3VzZXIxJywgeyBuYW1lOiAnVXNlciAxJyB9KTtcbiAgICogICBiYXRjaC51cGRhdGUoJ3VzZXJzL3VzZXIyJywgeyBzdGF0dXM6ICdpbmFjdGl2ZScgfSk7XG4gICAqICAgYmF0Y2guZGVsZXRlKCd1c2Vycy91c2VyMycpO1xuICAgKiB9KTtcbiAgICogYGBgXG4gICAqL1xuICBhc3luYyBiYXRjaChcbiAgICBvcGVyYXRpb25zOiAoYmF0Y2g6IHtcbiAgICAgIHNldDogPFQ+KHBhdGg6IHN0cmluZywgZGF0YTogVCkgPT4gdm9pZDtcbiAgICAgIHVwZGF0ZTogPFQ+KHBhdGg6IHN0cmluZywgZGF0YTogUGFydGlhbDxUPikgPT4gdm9pZDtcbiAgICAgIGRlbGV0ZTogKHBhdGg6IHN0cmluZykgPT4gdm9pZDtcbiAgICB9KSA9PiB2b2lkXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGJhdGNoID0gd3JpdGVCYXRjaCh0aGlzLmZpcmVzdG9yZSk7XG5cbiAgICBjb25zdCBiYXRjaEFwaSA9IHtcbiAgICAgIHNldDogPFQ+KHBhdGg6IHN0cmluZywgZGF0YTogVCkgPT4ge1xuICAgICAgICBjb25zdCBbY29sbGVjdGlvblBhdGgsIGRvY0lkXSA9IHRoaXMuc3BsaXRQYXRoKHBhdGgpO1xuICAgICAgICBjb25zdCBwcmVmaXhlZFBhdGggPSB0aGlzLnByZWZpeENvbGxlY3Rpb25QYXRoKGNvbGxlY3Rpb25QYXRoKTtcbiAgICAgICAgY29uc3QgZG9jUmVmID0gZG9jKHRoaXMuZmlyZXN0b3JlLCBwcmVmaXhlZFBhdGgsIGRvY0lkKTtcbiAgICAgICAgYmF0Y2guc2V0KGRvY1JlZiwge1xuICAgICAgICAgIC4uLmRhdGEsXG4gICAgICAgICAgY3JlYXRlZEF0OiBzZXJ2ZXJUaW1lc3RhbXAoKSxcbiAgICAgICAgICB1cGRhdGVkQXQ6IHNlcnZlclRpbWVzdGFtcCgpLFxuICAgICAgICB9IGFzIERvY3VtZW50RGF0YSk7XG4gICAgICB9LFxuICAgICAgdXBkYXRlOiA8VD4ocGF0aDogc3RyaW5nLCBkYXRhOiBQYXJ0aWFsPFQ+KSA9PiB7XG4gICAgICAgIGNvbnN0IFtjb2xsZWN0aW9uUGF0aCwgZG9jSWRdID0gdGhpcy5zcGxpdFBhdGgocGF0aCk7XG4gICAgICAgIGNvbnN0IHByZWZpeGVkUGF0aCA9IHRoaXMucHJlZml4Q29sbGVjdGlvblBhdGgoY29sbGVjdGlvblBhdGgpO1xuICAgICAgICBjb25zdCBkb2NSZWYgPSBkb2ModGhpcy5maXJlc3RvcmUsIHByZWZpeGVkUGF0aCwgZG9jSWQpO1xuICAgICAgICBiYXRjaC51cGRhdGUoZG9jUmVmLCB7XG4gICAgICAgICAgLi4uZGF0YSxcbiAgICAgICAgICB1cGRhdGVkQXQ6IHNlcnZlclRpbWVzdGFtcCgpLFxuICAgICAgICB9IGFzIERvY3VtZW50RGF0YSk7XG4gICAgICB9LFxuICAgICAgZGVsZXRlOiAocGF0aDogc3RyaW5nKSA9PiB7XG4gICAgICAgIGNvbnN0IFtjb2xsZWN0aW9uUGF0aCwgZG9jSWRdID0gdGhpcy5zcGxpdFBhdGgocGF0aCk7XG4gICAgICAgIGNvbnN0IHByZWZpeGVkUGF0aCA9IHRoaXMucHJlZml4Q29sbGVjdGlvblBhdGgoY29sbGVjdGlvblBhdGgpO1xuICAgICAgICBjb25zdCBkb2NSZWYgPSBkb2ModGhpcy5maXJlc3RvcmUsIHByZWZpeGVkUGF0aCwgZG9jSWQpO1xuICAgICAgICBiYXRjaC5kZWxldGUoZG9jUmVmKTtcbiAgICAgIH0sXG4gICAgfTtcblxuICAgIG9wZXJhdGlvbnMoYmF0Y2hBcGkpO1xuICAgIGF3YWl0IGJhdGNoLmNvbW1pdCgpO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFVUSUxJREFERVNcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIENvbnN0cnV5ZSB1bmEgcnV0YSBhIHBhcnRpciBkZSB1biB0ZW1wbGF0ZS5cbiAgICpcbiAgICogQHBhcmFtIHRlbXBsYXRlIC0gVGVtcGxhdGUgY29uIHBsYWNlaG9sZGVycyB7cGFyYW19XG4gICAqIEBwYXJhbSBwYXJhbXMgLSBWYWxvcmVzIHBhcmEgbG9zIHBsYWNlaG9sZGVyc1xuICAgKiBAcmV0dXJucyBSdXRhIGNvbnN0cnVpZGFcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBjb25zdCBwYXRoID0gZmlyZXN0b3JlU2VydmljZS5idWlsZFBhdGgoJ3VzZXJzL3t1c2VySWR9L2RvY3VtZW50cy97ZG9jSWR9Jywge1xuICAgKiAgIHVzZXJJZDogJ3VzZXIxMjMnLFxuICAgKiAgIGRvY0lkOiAnZG9jNDU2J1xuICAgKiB9KTtcbiAgICogLy8gPT4gJ3VzZXJzL3VzZXIxMjMvZG9jdW1lbnRzL2RvYzQ1NidcbiAgICogYGBgXG4gICAqL1xuICBidWlsZFBhdGgodGVtcGxhdGU6IHN0cmluZywgcGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KTogc3RyaW5nIHtcbiAgICByZXR1cm4gYnVpbGRQYXRoKHRlbXBsYXRlLCBwYXJhbXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYSB1biBJRCDDum5pY28gcGFyYSB1biBkb2N1bWVudG8gKHNpbiBjcmVhcmxvKS5cbiAgICpcbiAgICogQHBhcmFtIGNvbGxlY3Rpb25QYXRoIC0gUnV0YSBkZSBsYSBjb2xlY2Npw7NuXG4gICAqIEByZXR1cm5zIElEIMO6bmljbyBnZW5lcmFkbyBwb3IgRmlyZXN0b3JlXG4gICAqL1xuICBnZW5lcmF0ZUlkKGNvbGxlY3Rpb25QYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IHByZWZpeGVkUGF0aCA9IHRoaXMucHJlZml4Q29sbGVjdGlvblBhdGgoY29sbGVjdGlvblBhdGgpO1xuICAgIGNvbnN0IGNvbGxlY3Rpb25SZWYgPSBjb2xsZWN0aW9uKHRoaXMuZmlyZXN0b3JlLCBwcmVmaXhlZFBhdGgpO1xuICAgIHJldHVybiBkb2MoY29sbGVjdGlvblJlZikuaWQ7XG4gIH1cblxuICAvKipcbiAgICogUmV0b3JuYSB1biB2YWxvciBkZSB0aW1lc3RhbXAgZGVsIHNlcnZpZG9yLlxuICAgKiBVc2FyIGVuIGNhbXBvcyBkZSBmZWNoYSBwYXJhIHF1ZSBGaXJlc3RvcmUgYXNpZ25lIGVsIHRpbWVzdGFtcC5cbiAgICovXG4gIHNlcnZlclRpbWVzdGFtcCgpOiBGaWVsZFZhbHVlIHtcbiAgICByZXR1cm4gc2VydmVyVGltZXN0YW1wKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0b3JuYSB1biB2YWxvciBwYXJhIGFncmVnYXIgZWxlbWVudG9zIGEgdW4gYXJyYXkuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogYXdhaXQgZmlyZXN0b3JlU2VydmljZS51cGRhdGVEb2MoJ3VzZXJzJywgJ3VzZXIxMjMnLCB7XG4gICAqICAgdGFnczogZmlyZXN0b3JlU2VydmljZS5hcnJheVVuaW9uKCduZXctdGFnJylcbiAgICogfSk7XG4gICAqIGBgYFxuICAgKi9cbiAgYXJyYXlVbmlvbiguLi5lbGVtZW50czogdW5rbm93bltdKTogRmllbGRWYWx1ZSB7XG4gICAgcmV0dXJuIGFycmF5VW5pb24oLi4uZWxlbWVudHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldG9ybmEgdW4gdmFsb3IgcGFyYSByZW1vdmVyIGVsZW1lbnRvcyBkZSB1biBhcnJheS5cbiAgICovXG4gIGFycmF5UmVtb3ZlKC4uLmVsZW1lbnRzOiB1bmtub3duW10pOiBGaWVsZFZhbHVlIHtcbiAgICByZXR1cm4gYXJyYXlSZW1vdmUoLi4uZWxlbWVudHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldG9ybmEgdW4gdmFsb3IgcGFyYSBpbmNyZW1lbnRhciB1biBjYW1wbyBudW3DqXJpY28uXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogYXdhaXQgZmlyZXN0b3JlU2VydmljZS51cGRhdGVEb2MoJ3VzZXJzJywgJ3VzZXIxMjMnLCB7XG4gICAqICAgbG9naW5Db3VudDogZmlyZXN0b3JlU2VydmljZS5pbmNyZW1lbnQoMSlcbiAgICogfSk7XG4gICAqIGBgYFxuICAgKi9cbiAgaW5jcmVtZW50KG46IG51bWJlcik6IEZpZWxkVmFsdWUge1xuICAgIHJldHVybiBpbmNyZW1lbnQobik7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gTcOJVE9ET1MgUFJJVkFET1NcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIENvbnN0cnV5ZSBsb3MgUXVlcnlDb25zdHJhaW50cyBhIHBhcnRpciBkZSBRdWVyeU9wdGlvbnNcbiAgICovXG4gIHByaXZhdGUgYnVpbGRRdWVyeUNvbnN0cmFpbnRzKG9wdGlvbnM/OiBRdWVyeU9wdGlvbnMpOiBRdWVyeUNvbnN0cmFpbnRbXSB7XG4gICAgY29uc3QgY29uc3RyYWludHM6IFF1ZXJ5Q29uc3RyYWludFtdID0gW107XG5cbiAgICBpZiAoIW9wdGlvbnMpIHJldHVybiBjb25zdHJhaW50cztcblxuICAgIC8vIFdoZXJlIGNsYXVzZXNcbiAgICBpZiAob3B0aW9ucy53aGVyZSkge1xuICAgICAgZm9yIChjb25zdCBjbGF1c2Ugb2Ygb3B0aW9ucy53aGVyZSkge1xuICAgICAgICBjb25zdHJhaW50cy5wdXNoKHdoZXJlKGNsYXVzZS5maWVsZCwgY2xhdXNlLm9wZXJhdG9yLCBjbGF1c2UudmFsdWUpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBPcmRlckJ5IGNsYXVzZXNcbiAgICBpZiAob3B0aW9ucy5vcmRlckJ5KSB7XG4gICAgICBmb3IgKGNvbnN0IGNsYXVzZSBvZiBvcHRpb25zLm9yZGVyQnkpIHtcbiAgICAgICAgY29uc3RyYWludHMucHVzaChvcmRlckJ5KGNsYXVzZS5maWVsZCwgY2xhdXNlLmRpcmVjdGlvbikpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEN1cnNvcnMgcGFyYSBwYWdpbmFjacOzblxuICAgIGlmIChvcHRpb25zLnN0YXJ0QWZ0ZXIpIHtcbiAgICAgIGNvbnN0cmFpbnRzLnB1c2goc3RhcnRBZnRlcihvcHRpb25zLnN0YXJ0QWZ0ZXIpKTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMuc3RhcnRBdCkge1xuICAgICAgY29uc3RyYWludHMucHVzaChzdGFydEF0KG9wdGlvbnMuc3RhcnRBdCkpO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy5lbmRCZWZvcmUpIHtcbiAgICAgIGNvbnN0cmFpbnRzLnB1c2goZW5kQmVmb3JlKG9wdGlvbnMuZW5kQmVmb3JlKSk7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLmVuZEF0KSB7XG4gICAgICBjb25zdHJhaW50cy5wdXNoKGVuZEF0KG9wdGlvbnMuZW5kQXQpKTtcbiAgICB9XG5cbiAgICAvLyBMaW1pdCAoc2UgYWdyZWdhIGFsIGZpbmFsKVxuICAgIGlmIChvcHRpb25zLmxpbWl0KSB7XG4gICAgICBjb25zdHJhaW50cy5wdXNoKGxpbWl0KG9wdGlvbnMubGltaXQpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29uc3RyYWludHM7XG4gIH1cblxuICAvKipcbiAgICogTWFwZWEgdW4gRG9jdW1lbnRTbmFwc2hvdCBhIG51ZXN0cm8gdGlwb1xuICAgKi9cbiAgcHJpdmF0ZSBtYXBEb2N1bWVudDxUIGV4dGVuZHMgRmlyZXN0b3JlRG9jdW1lbnQ+KHNuYXBzaG90OiBEb2N1bWVudFNuYXBzaG90PERvY3VtZW50RGF0YT4pOiBUIHtcbiAgICBjb25zdCBkYXRhID0gc25hcHNob3QuZGF0YSgpO1xuICAgIGlmICghZGF0YSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdEb2N1bWVudG8gbm8gdGllbmUgZGF0b3MnKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IHNuYXBzaG90LmlkLFxuICAgICAgLi4udGhpcy5jb252ZXJ0VGltZXN0YW1wcyhkYXRhKSxcbiAgICB9IGFzIFQ7XG4gIH1cblxuICAvKipcbiAgICogQ29udmllcnRlIFRpbWVzdGFtcHMgZGUgRmlyZXN0b3JlIGEgRGF0ZSBkZSBKYXZhU2NyaXB0XG4gICAqL1xuICBwcml2YXRlIGNvbnZlcnRUaW1lc3RhbXBzKGRhdGE6IERvY3VtZW50RGF0YSk6IERvY3VtZW50RGF0YSB7XG4gICAgY29uc3QgcmVzdWx0OiBEb2N1bWVudERhdGEgPSB7fTtcblxuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGRhdGEpKSB7XG4gICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBUaW1lc3RhbXApIHtcbiAgICAgICAgcmVzdWx0W2tleV0gPSB2YWx1ZS50b0RhdGUoKTtcbiAgICAgIH0gZWxzZSBpZiAodmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgcmVzdWx0W2tleV0gPSB0aGlzLmNvbnZlcnRUaW1lc3RhbXBzKHZhbHVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3VsdFtrZXldID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBEaXZpZGUgdW5hIHJ1dGEgZGUgZG9jdW1lbnRvIGVuIGNvbGVjY2nDs24gZSBJRFxuICAgKi9cbiAgcHJpdmF0ZSBzcGxpdFBhdGgocGF0aDogc3RyaW5nKTogW3N0cmluZywgc3RyaW5nXSB7XG4gICAgY29uc3Qgc2VnbWVudHMgPSBwYXRoLnNwbGl0KCcvJyk7XG4gICAgaWYgKHNlZ21lbnRzLmxlbmd0aCA8IDIgfHwgc2VnbWVudHMubGVuZ3RoICUgMiAhPT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBSdXRhIGRlIGRvY3VtZW50byBpbnbDoWxpZGE6ICR7cGF0aH1gKTtcbiAgICB9XG4gICAgY29uc3QgZG9jSWQgPSBzZWdtZW50cy5wb3AoKSE7XG4gICAgY29uc3QgY29sbGVjdGlvblBhdGggPSBzZWdtZW50cy5qb2luKCcvJyk7XG4gICAgcmV0dXJuIFtjb2xsZWN0aW9uUGF0aCwgZG9jSWRdO1xuICB9XG59XG4iXX0=
571
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlyZXN0b3JlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL3NlcnZpY2VzL2ZpcmViYXNlL2ZpcmVzdG9yZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7OztHQUtHO0FBRUgsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUNMLE1BQU0sRUFDTixVQUFVLEVBQ1YsY0FBYyxFQUNkLFNBQVMsRUFDVCxHQUFHLEVBQ0gsT0FBTyxFQUtQLGtCQUFrQixFQUNsQixNQUFNLEVBQ04sT0FBTyxFQUNQLEtBQUssRUFDTCxPQUFPLEVBQ1AsS0FBSyxFQUVMLGVBQWUsRUFDZixNQUFNLEVBQ04sVUFBVSxFQUNWLE9BQU8sRUFDUCxTQUFTLEVBQ1QsS0FBSyxFQUNMLFNBQVMsRUFDVCxTQUFTLEVBQ1QsS0FBSyxFQUNMLFVBQVUsRUFDVixTQUFTLEVBQ1QsVUFBVSxFQUNWLFdBQVcsR0FFWixNQUFNLHlCQUF5QixDQUFDO0FBQ2pDLE9BQU8sRUFBRSxHQUFHLEVBQWMsTUFBTSxNQUFNLENBQUM7QUFFdkMsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sVUFBVSxDQUFDO0FBRW5ELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQzs7O0FBRWpEOzs7Ozs7Ozs7OztHQVdHO0FBQ0gsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsVUFBVSxDQUFDO0FBRTVDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWdDRztBQUVILE1BQU0sT0FBTyxnQkFBZ0I7SUFHM0IsWUFBb0IsU0FBb0I7UUFBcEIsY0FBUyxHQUFULFNBQVMsQ0FBVztRQUZoQyxXQUFNLEdBQUcsTUFBTSxDQUFDLHVCQUF1QixFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFFMUIsQ0FBQztJQUU1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QUNuQixnQkFBZ0I7a0JBRDVCLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBGaXJlc3RvcmUgU2VydmljZVxuICpcbiAqIFNlcnZpY2lvIGdlbsOpcmljbyBwYXJhIG9wZXJhY2lvbmVzIENSVUQgZW4gRmlyZXN0b3JlLlxuICogU29wb3J0YSBsZWN0dXJhcyBvbmUtdGltZSwgc3Vic2NyaXBjaW9uZXMgcmVhbC10aW1lLCBwYWdpbmFjacOzbiB5IHF1ZXJpZXMgY29tcGxlamFzLlxuICovXG5cbmltcG9ydCB7IGluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgYWRkRG9jLFxuICBjb2xsZWN0aW9uLFxuICBjb2xsZWN0aW9uRGF0YSxcbiAgZGVsZXRlRG9jLFxuICBkb2MsXG4gIGRvY0RhdGEsXG4gIERvY3VtZW50RGF0YSxcbiAgRG9jdW1lbnRSZWZlcmVuY2UsXG4gIERvY3VtZW50U25hcHNob3QsXG4gIEZpcmVzdG9yZSxcbiAgZ2V0Q291bnRGcm9tU2VydmVyLFxuICBnZXREb2MsXG4gIGdldERvY3MsXG4gIGxpbWl0LFxuICBvcmRlckJ5LFxuICBxdWVyeSxcbiAgUXVlcnlDb25zdHJhaW50LFxuICBzZXJ2ZXJUaW1lc3RhbXAsXG4gIHNldERvYyxcbiAgc3RhcnRBZnRlcixcbiAgc3RhcnRBdCxcbiAgZW5kQmVmb3JlLFxuICBlbmRBdCxcbiAgVGltZXN0YW1wLFxuICB1cGRhdGVEb2MsXG4gIHdoZXJlLFxuICB3cml0ZUJhdGNoLFxuICBpbmNyZW1lbnQsXG4gIGFycmF5VW5pb24sXG4gIGFycmF5UmVtb3ZlLFxuICBGaWVsZFZhbHVlLFxufSBmcm9tICdAYW5ndWxhci9maXJlL2ZpcmVzdG9yZSc7XG5pbXBvcnQgeyBtYXAsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgVkFMVEVDSF9GSVJFQkFTRV9DT05GSUcgfSBmcm9tICcuL2NvbmZpZyc7XG5pbXBvcnQgeyBGaXJlc3RvcmVEb2N1bWVudCwgUGFnaW5hdGVkUmVzdWx0LCBRdWVyeU9wdGlvbnMgfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IGJ1aWxkUGF0aCB9IGZyb20gJy4vdXRpbHMvcGF0aC1idWlsZGVyJztcblxuLyoqXG4gKiBJbnRlcm5hbCBzZW50aW5lbCB1c2VkIHRvIG1hcmsgYSBjb2xsZWN0aW9uIHBhdGggYXMgZ2xvYmFsIGNyb3NzLWFwcCDigJRcbiAqIGkuZS4gaXQgc2hvdWxkIE5PVCBiZSBwcmVmaXhlZCB3aXRoIGBhcHBzL3thcHBJZH0vYC5cbiAqXG4gKiBBcHBzIGNvbnN1bWUgdGhpcyB2aWEgYENvbGxlY3Rpb25PcHRpb25zLnNraXBBcHBQcmVmaXhgOyB0aGUgc2VudGluZWxcbiAqIHN0YXlzIGluIGBUeXBlZENvbGxlY3Rpb25gIGFuZCBpcyBzdHJpcHBlZCBoZXJlIGJlZm9yZSBGaXJlc3RvcmUgc2VlcyBpdC5cbiAqXG4gKiBGb3JtYXQga2VlcHMgaXQgaW1wb3NzaWJsZSB0byBjb2xsaWRlIHdpdGggYSByZWFsIEZpcmVzdG9yZSBwYXRoIChgOmAgaXNcbiAqIG5vdCBhbGxvd2VkIGluIGNvbGxlY3Rpb24gc2VnbWVudHMpLlxuICpcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgQUJTX1BBVEhfU0VOVElORUwgPSAnX19hYnNfXzonO1xuXG4vKipcbiAqIFNlcnZpY2lvIHBhcmEgb3BlcmFjaW9uZXMgQ1JVRCBlbiBGaXJlc3RvcmUuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGludGVyZmFjZSBVc2VyIGV4dGVuZHMgRmlyZXN0b3JlRG9jdW1lbnQge1xuICogICBuYW1lOiBzdHJpbmc7XG4gKiAgIGVtYWlsOiBzdHJpbmc7XG4gKiAgIHJvbGU6ICdhZG1pbicgfCAndXNlcic7XG4gKiB9XG4gKlxuICogQENvbXBvbmVudCh7Li4ufSlcbiAqIGV4cG9ydCBjbGFzcyBVc2Vyc0NvbXBvbmVudCB7XG4gKiAgIHByaXZhdGUgZmlyZXN0b3JlID0gaW5qZWN0KEZpcmVzdG9yZVNlcnZpY2UpO1xuICpcbiAqICAgLy8gTGVjdHVyYSBvbmUtdGltZVxuICogICBhc3luYyBsb2FkVXNlcihpZDogc3RyaW5nKSB7XG4gKiAgICAgY29uc3QgdXNlciA9IGF3YWl0IHRoaXMuZmlyZXN0b3JlLmdldERvYzxVc2VyPigndXNlcnMnLCBpZCk7XG4gKiAgIH1cbiAqXG4gKiAgIC8vIFN1YnNjcmlwY2nDs24gcmVhbC10aW1lXG4gKiAgIHVzZXJzJCA9IHRoaXMuZmlyZXN0b3JlLmNvbGxlY3Rpb25DaGFuZ2VzPFVzZXI+KCd1c2VycycsIHtcbiAqICAgICB3aGVyZTogW3sgZmllbGQ6ICdyb2xlJywgb3BlcmF0b3I6ICc9PScsIHZhbHVlOiAnYWRtaW4nIH1dLFxuICogICAgIG9yZGVyQnk6IFt7IGZpZWxkOiAnbmFtZScsIGRpcmVjdGlvbjogJ2FzYycgfV1cbiAqICAgfSk7XG4gKlxuICogICAvLyBDcmVhciBkb2N1bWVudG9cbiAqICAgYXN5bmMgY3JlYXRlVXNlcihkYXRhOiBPbWl0PFVzZXIsICdpZCc+KSB7XG4gKiAgICAgY29uc3QgdXNlciA9IGF3YWl0IHRoaXMuZmlyZXN0b3JlLmFkZERvYzxVc2VyPigndXNlcnMnLCBkYXRhKTtcbiAqICAgfVxuICogfVxuICogYGBgXG4gKi9cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgRmlyZXN0b3JlU2VydmljZSB7XG4gIHByaXZhdGUgY29uZmlnID0gaW5qZWN0KFZBTFRFQ0hfRklSRUJBU0VfQ09ORklHLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZmlyZXN0b3JlOiBGaXJlc3RvcmUpIHt9XG5cbiAgLyoqXG4gICAqIFByZWZpamEgZWwgcGF0aCBkZSBjb2xlY2Npw7NuIGNvbiBlbCBhcHBJZCBzaSBlc3TDoSBjb25maWd1cmFkby5cbiAgICogU2kgbm8gaGF5IGFwcElkLCByZXRvcm5hIGVsIHBhdGggc2luIG1vZGlmaWNhciAoYmFja3dhcmQgY29tcGF0aWJsZSkuXG4gICAqXG4gICAqIFNpIGVsIHBhdGggZW1waWV6YSBjb24gYEFCU19QQVRIX1NFTlRJTkVMYCAoYF9fYWJzX186YCksIHNlIGFzdW1lIHF1ZSBlbFxuICAgKiBjYWxsZXIgcXVpZXJlIHVuIHBhdGggZ2xvYmFsIGNyb3NzLWFwcCAoZWouIGB1c2Vycy97dWlkfS9ub3RpZmljYXRpb25zYCDigJRcbiAgICogZWwgaW5ib3ggZ2xvYmFsIGRlIG5vdGlmaWNhY2lvbmVzKS4gRWwgc2VudGluZWwgc2Ugc3RyaXBwZWEgeSBlbCByZXN0b1xuICAgKiBkZWwgcGF0aCBzZSBwYXNhIHZlcmJhdGltLCBzaW4gcHJlZmlqbyBgYXBwcy97YXBwSWR9L2AuXG4gICAqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHJpdmF0ZSBwcmVmaXhDb2xsZWN0aW9uUGF0aChjb2xsZWN0aW9uUGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoY29sbGVjdGlvblBhdGguc3RhcnRzV2l0aChBQlNfUEFUSF9TRU5USU5FTCkpIHtcbiAgICAgIHJldHVybiBjb2xsZWN0aW9uUGF0aC5zbGljZShBQlNfUEFUSF9TRU5USU5FTC5sZW5ndGgpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuY29uZmlnPy5hcHBJZCkgcmV0dXJuIGNvbGxlY3Rpb25QYXRoO1xuICAgIHJldHVybiBgYXBwcy8ke3RoaXMuY29uZmlnLmFwcElkfS8ke2NvbGxlY3Rpb25QYXRofWA7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gTEVDVFVSQVMgT05FLVRJTUUgKFByb21pc2UpXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8qKlxuICAgKiBPYnRpZW5lIHVuIGRvY3VtZW50byBwb3IgSUQgKGxlY3R1cmEgw7puaWNhKS5cbiAgICpcbiAgICogQHBhcmFtIGNvbGxlY3Rpb25QYXRoIC0gUnV0YSBkZSBsYSBjb2xlY2Npw7NuXG4gICAqIEBwYXJhbSBkb2NJZCAtIElEIGRlbCBkb2N1bWVudG9cbiAgICogQHJldHVybnMgRG9jdW1lbnRvIG8gbnVsbCBzaSBubyBleGlzdGVcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBjb25zdCB1c2VyID0gYXdhaXQgZmlyZXN0b3JlU2VydmljZS5nZXREb2M8VXNlcj4oJ3VzZXJzJywgJ2FiYzEyMycpO1xuICAgKiBpZiAodXNlcikge1xuICAgKiAgIGNvbnNvbGUubG9nKHVzZXIubmFtZSk7XG4gICAqIH1cbiAgICogYGBgXG4gICAqL1xuICBhc3luYyBnZXREb2M8VCBleHRlbmRzIEZpcmVzdG9yZURvY3VtZW50PihcbiAgICBjb2xsZWN0aW9uUGF0aDogc3RyaW5nLFxuICAgIGRvY0lkOiBzdHJpbmdcbiAgKTogUHJvbWlzZTxUIHwgbnVsbD4ge1xuICAgIGNvbnN0IHByZWZpeGVkUGF0aCA9IHRoaXMucHJlZml4Q29sbGVjdGlvblBhdGgoY29sbGVjdGlvblBhdGgpO1xuICAgIGNvbnN0IGRvY1JlZiA9IGRvYyh0aGlzLmZpcmVzdG9yZSwgcHJlZml4ZWRQYXRoLCBkb2NJZCk7XG4gICAgY29uc3Qgc25hcHNob3QgPSBhd2FpdCBnZXREb2MoZG9jUmVmKTtcblxuICAgIGlmICghc25hcHNob3QuZXhpc3RzKCkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLm1hcERvY3VtZW50PFQ+KHNuYXBzaG90KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPYnRpZW5lIG3Dumx0aXBsZXMgZG9jdW1lbnRvcyBjb24gb3BjaW9uZXMgZGUgcXVlcnkuXG4gICAqXG4gICAqIEBwYXJhbSBjb2xsZWN0aW9uUGF0aCAtIFJ1dGEgZGUgbGEgY29sZWNjacOzblxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wY2lvbmVzIGRlIHF1ZXJ5ICh3aGVyZSwgb3JkZXJCeSwgbGltaXQpXG4gICAqIEByZXR1cm5zIEFycmF5IGRlIGRvY3VtZW50b3NcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiAvLyBUb2RvcyBsb3MgdXN1YXJpb3MgYWN0aXZvcyBvcmRlbmFkb3MgcG9yIG5vbWJyZVxuICAgKiBjb25zdCB1c2VycyA9IGF3YWl0IGZpcmVzdG9yZVNlcnZpY2UuZ2V0RG9jczxVc2VyPigndXNlcnMnLCB7XG4gICAqICAgd2hlcmU6IFt7IGZpZWxkOiAnYWN0aXZlJywgb3BlcmF0b3I6ICc9PScsIHZhbHVlOiB0cnVlIH1dLFxuICAgKiAgIG9yZGVyQnk6IFt7IGZpZWxkOiAnbmFtZScsIGRpcmVjdGlvbjogJ2FzYycgfV0sXG4gICAqICAgbGltaXQ6IDUwXG4gICAqIH0pO1xuICAgKiBgYGBcbiAgICovXG4gIGFzeW5jIGdldERvY3M8VCBleHRlbmRzIEZpcmVzdG9yZURvY3VtZW50PihcbiAgICBjb2xsZWN0aW9uUGF0aDogc3RyaW5nLFxuICAgIG9wdGlvbnM/OiBRdWVyeU9wdGlvbnNcbiAgKTogUHJvbWlzZTxUW10+IHtcbiAgICBjb25zdCBwcmVmaXhlZFBhdGggPSB0aGlzLnByZWZpeENvbGxlY3Rpb25QYXRoKGNvbGxlY3Rpb25QYXRoKTtcbiAgICBjb25zdCBjb2xsZWN0aW9uUmVmID0gY29sbGVjdGlvbih0aGlzLmZpcmVzdG9yZSwgcHJlZml4ZWRQYXRoKTtcbiAgICBjb25zdCBjb25zdHJhaW50cyA9IHRoaXMuYnVpbGRRdWVyeUNvbnN0cmFpbnRzKG9wdGlvbnMpO1xuICAgIGNvbnN0IHEgPSBxdWVyeShjb2xsZWN0aW9uUmVmLCAuLi5jb25zdHJhaW50cyk7XG4gICAgY29uc3Qgc25hcHNob3QgPSBhd2FpdCBnZXREb2NzKHEpO1xuXG4gICAgcmV0dXJuIHNuYXBzaG90LmRvY3MubWFwKGRvYyA9PiB0aGlzLm1hcERvY3VtZW50PFQ+KGRvYykpO1xuICB9XG5cbiAgLyoqXG4gICAqIEN1ZW50YSBkb2N1bWVudG9zIHVzYW5kbyBhZ2dyZWdhdGlvbiBxdWVyeSBkZWwgc2Vydmlkb3IuXG4gICAqIE5vIGRlc2NhcmdhIGxvcyBkb2N1bWVudG9zIOKAlCBtdWNobyBtw6FzIGVmaWNpZW50ZSBwYXJhIGNvbnRlb3MgeSBiYWRnZXMuXG4gICAqL1xuICBhc3luYyBjb3VudERvY3MoY29sbGVjdGlvblBhdGg6IHN0cmluZywgb3B0aW9ucz86IFF1ZXJ5T3B0aW9ucyk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgY29uc3QgcHJlZml4ZWRQYXRoID0gdGhpcy5wcmVmaXhDb2xsZWN0aW9uUGF0aChjb2xsZWN0aW9uUGF0aCk7XG4gICAgY29uc3QgY29sbGVjdGlvblJlZiA9IGNvbGxlY3Rpb24odGhpcy5maXJlc3RvcmUsIHByZWZpeGVkUGF0aCk7XG4gICAgY29uc3QgY29uc3RyYWludHMgPSB0aGlzLmJ1aWxkUXVlcnlDb25zdHJhaW50cyhvcHRpb25zKTtcbiAgICBjb25zdCBxID0gcXVlcnkoY29sbGVjdGlvblJlZiwgLi4uY29uc3RyYWludHMpO1xuICAgIGNvbnN0IHNuYXBzaG90ID0gYXdhaXQgZ2V0Q291bnRGcm9tU2VydmVyKHEpO1xuICAgIHJldHVybiBzbmFwc2hvdC5kYXRhKCkuY291bnQ7XG4gIH1cblxuICAvKipcbiAgICogT2J0aWVuZSBkb2N1bWVudG9zIGNvbiBwYWdpbmFjacOzbiBiYXNhZGEgZW4gY3Vyc29yZXMuXG4gICAqXG4gICAqIEBwYXJhbSBjb2xsZWN0aW9uUGF0aCAtIFJ1dGEgZGUgbGEgY29sZWNjacOzblxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIE9wY2lvbmVzIGRlIHF1ZXJ5IChkZWJlIGluY2x1aXIgbGltaXQpXG4gICAqIEByZXR1cm5zIFJlc3VsdGFkbyBwYWdpbmFkbyBjb24gY3Vyc29yIHBhcmEgbGEgc2lndWllbnRlIHDDoWdpbmFcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiAvLyBQcmltZXJhIHDDoWdpbmFcbiAgICogY29uc3QgcGFnZTEgPSBhd2FpdCBmaXJlc3RvcmVTZXJ2aWNlLmdldFBhZ2luYXRlZDxVc2VyPigndXNlcnMnLCB7XG4gICAqICAgb3JkZXJCeTogW3sgZmllbGQ6ICdjcmVhdGVkQXQnLCBkaXJlY3Rpb246ICdkZXNjJyB9XSxcbiAgICogICBsaW1pdDogMTBcbiAgICogfSk7XG4gICAqXG4gICAqIC8vIFNpZ3VpZW50ZSBww6FnaW5hXG4gICAqIGlmIChwYWdlMS5oYXNNb3JlKSB7XG4gICAqICAgY29uc3QgcGFnZTIgPSBhd2FpdCBmaXJlc3RvcmVTZXJ2aWNlLmdldFBhZ2luYXRlZDxVc2VyPigndXNlcnMnLCB7XG4gICAqICAgICBvcmRlckJ5OiBbeyBmaWVsZDogJ2NyZWF0ZWRBdCcsIGRpcmVjdGlvbjogJ2Rlc2MnIH1dLFxuICAgKiAgICAgbGltaXQ6IDEwLFxuICAgKiAgICAgc3RhcnRBZnRlcjogcGFnZTEubGFzdERvY1xuICAgKiAgIH0pO1xuICAgKiB9XG4gICAqIGBgYFxuICAgKi9cbiAgYXN5bmMgZ2V0UGFnaW5hdGVkPFQgZXh0ZW5kcyBGaXJlc3RvcmVEb2N1bWVudD4oXG4gICAgY29sbGVjdGlvblBhdGg6IHN0cmluZyxcbiAgICBvcHRpb25zOiBRdWVyeU9wdGlvbnMgJiB7IGxpbWl0OiBudW1iZXIgfVxuICApOiBQcm9taXNlPFBhZ2luYXRlZFJlc3VsdDxUPj4ge1xuICAgIGNvbnN0IHByZWZpeGVkUGF0aCA9IHRoaXMucHJlZml4Q29sbGVjdGlvblBhdGgoY29sbGVjdGlvblBhdGgpO1xuICAgIGNvbnN0IGNvbGxlY3Rpb25SZWYgPSBjb2xsZWN0aW9uKHRoaXMuZmlyZXN0b3JlLCBwcmVmaXhlZFBhdGgpO1xuICAgIGNvbnN0IGNvbnN0cmFpbnRzID0gdGhpcy5idWlsZFF1ZXJ5Q29uc3RyYWludHMob3B0aW9ucyk7XG5cbiAgICAvLyBQZWRpciB1bm8gbcOhcyBwYXJhIHNhYmVyIHNpIGhheSBtw6FzIHDDoWdpbmFzXG4gICAgY29uc3QgcSA9IHF1ZXJ5KGNvbGxlY3Rpb25SZWYsIC4uLmNvbnN0cmFpbnRzLCBsaW1pdChvcHRpb25zLmxpbWl0ICsgMSkpO1xuICAgIGNvbnN0IHNuYXBzaG90ID0gYXdhaXQgZ2V0RG9jcyhxKTtcblxuICAgIGNvbnN0IGRvY3MgPSBzbmFwc2hvdC5kb2NzO1xuICAgIGNvbnN0IGhhc01vcmUgPSBkb2NzLmxlbmd0aCA+IG9wdGlvbnMubGltaXQ7XG5cbiAgICAvLyBTaSBoYXkgbcOhcywgcmVtb3ZlciBlbCBkb2N1bWVudG8gZXh0cmFcbiAgICBjb25zdCByZXN1bHREb2NzID0gaGFzTW9yZSA/IGRvY3Muc2xpY2UoMCwgLTEpIDogZG9jcztcbiAgICBjb25zdCBsYXN0RG9jID0gcmVzdWx0RG9jcy5sZW5ndGggPiAwID8gcmVzdWx0RG9jc1tyZXN1bHREb2NzLmxlbmd0aCAtIDFdIDogbnVsbDtcblxuICAgIHJldHVybiB7XG4gICAgICBkYXRhOiByZXN1bHREb2NzLm1hcChkb2MgPT4gdGhpcy5tYXBEb2N1bWVudDxUPihkb2MpKSxcbiAgICAgIGhhc01vcmUsXG4gICAgICBsYXN0RG9jLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogVmVyaWZpY2Egc2kgdW4gZG9jdW1lbnRvIGV4aXN0ZS5cbiAgICpcbiAgICogQHBhcmFtIGNvbGxlY3Rpb25QYXRoIC0gUnV0YSBkZSBsYSBjb2xlY2Npw7NuXG4gICAqIEBwYXJhbSBkb2NJZCAtIElEIGRlbCBkb2N1bWVudG9cbiAgICogQHJldHVybnMgdHJ1ZSBzaSBlbCBkb2N1bWVudG8gZXhpc3RlXG4gICAqL1xuICBhc3luYyBleGlzdHMoY29sbGVjdGlvblBhdGg6IHN0cmluZywgZG9jSWQ6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHByZWZpeGVkUGF0aCA9IHRoaXMucHJlZml4Q29sbGVjdGlvblBhdGgoY29sbGVjdGlvblBhdGgpO1xuICAgIGNvbnN0IGRvY1JlZiA9IGRvYyh0aGlzLmZpcmVzdG9yZSwgcHJlZml4ZWRQYXRoLCBkb2NJZCk7XG4gICAgY29uc3Qgc25hcHNob3QgPSBhd2FpdCBnZXREb2MoZG9jUmVmKTtcbiAgICByZXR1cm4gc25hcHNob3QuZXhpc3RzKCk7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gU1VCU0NSSVBDSU9ORVMgUkVBTC1USU1FIChPYnNlcnZhYmxlKVxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAvKipcbiAgICogU3VzY3JpYmUgYSBjYW1iaW9zIGRlIHVuIGRvY3VtZW50byAocmVhbC10aW1lKS5cbiAgICpcbiAgICogQHBhcmFtIGNvbGxlY3Rpb25QYXRoIC0gUnV0YSBkZSBsYSBjb2xlY2Npw7NuXG4gICAqIEBwYXJhbSBkb2NJZCAtIElEIGRlbCBkb2N1bWVudG9cbiAgICogQHJldHVybnMgT2JzZXJ2YWJsZSBxdWUgZW1pdGUgY3VhbmRvIGVsIGRvY3VtZW50byBjYW1iaWFcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiAvLyBFbiBlbCBjb21wb25lbnRlXG4gICAqIHVzZXIkID0gdGhpcy5maXJlc3RvcmVTZXJ2aWNlLmRvY0NoYW5nZXM8VXNlcj4oJ3VzZXJzJywgdGhpcy51c2VySWQpO1xuICAgKlxuICAgKiAvLyBFbiBlbCB0ZW1wbGF0ZVxuICAgKiBAaWYgKHVzZXIkIHwgYXN5bmM7IGFzIHVzZXIpIHtcbiAgICogICA8cD57eyB1c2VyLm5hbWUgfX08L3A+XG4gICAqIH1cbiAgICogYGBgXG4gICAqL1xuICBkb2NDaGFuZ2VzPFQgZXh0ZW5kcyBGaXJlc3RvcmVEb2N1bWVudD4oXG4gICAgY29sbGVjdGlvblBhdGg6IHN0cmluZyxcbiAgICBkb2NJZDogc3RyaW5nXG4gICk6IE9ic2VydmFibGU8VCB8IG51bGw+IHtcbiAgICBjb25zdCBwcmVmaXhlZFBhdGggPSB0aGlzLnByZWZpeENvbGxlY3Rpb25QYXRoKGNvbGxlY3Rpb25QYXRoKTtcbiAgICBjb25zdCBkb2NSZWYgPSBkb2ModGhpcy5maXJlc3RvcmUsIHByZWZpeGVkUGF0aCwgZG9jSWQpO1xuICAgIHJldHVybiBkb2NEYXRhKGRvY1JlZiwgeyBpZEZpZWxkOiAnaWQnIH0pLnBpcGUoXG4gICAgICBtYXAoZGF0YSA9PiB7XG4gICAgICAgIGlmICghZGF0YSkgcmV0dXJuIG51bGw7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnZlcnRUaW1lc3RhbXBzKGRhdGEgYXMgRG9jdW1lbnREYXRhKSBhcyBUO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFN1c2NyaWJlIGEgY2FtYmlvcyBkZSB1bmEgY29sZWNjacOzbiAocmVhbC10aW1lKS5cbiAgICpcbiAgICogQHBhcmFtIGNvbGxlY3Rpb25QYXRoIC0gUnV0YSBkZSBsYSBjb2xlY2Npw7NuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gT3BjaW9uZXMgZGUgcXVlcnlcbiAgICogQHJldHVybnMgT2JzZXJ2YWJsZSBxdWUgZW1pdGUgY3VhbmRvIGxhIGNvbGVjY2nDs24gY2FtYmlhXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogLy8gVXN1YXJpb3MgYWN0aXZvcyBlbiB0aWVtcG8gcmVhbFxuICAgKiBhY3RpdmVVc2VycyQgPSB0aGlzLmZpcmVzdG9yZVNlcnZpY2UuY29sbGVjdGlvbkNoYW5nZXM8VXNlcj4oJ3VzZXJzJywge1xuICAgKiAgIHdoZXJlOiBbeyBmaWVsZDogJ3N0YXR1cycsIG9wZXJhdG9yOiAnPT0nLCB2YWx1ZTogJ29ubGluZScgfV1cbiAgICogfSk7XG4gICAqIGBgYFxuICAgKi9cbiAgY29sbGVjdGlvbkNoYW5nZXM8VCBleHRlbmRzIEZpcmVzdG9yZURvY3VtZW50PihcbiAgICBjb2xsZWN0aW9uUGF0aDogc3RyaW5nLFxuICAgIG9wdGlvbnM/OiBRdWVyeU9wdGlvbnNcbiAgKTogT2JzZXJ2YWJsZTxUW10+IHtcbiAgICBjb25zdCBwcmVmaXhlZFBhdGggPSB0aGlzLnByZWZpeENvbGxlY3Rpb25QYXRoKGNvbGxlY3Rpb25QYXRoKTtcbiAgICBjb25zdCBjb2xsZWN0aW9uUmVmID0gY29sbGVjdGlvbih0aGlzLmZpcmVzdG9yZSwgcHJlZml4ZWRQYXRoKTtcbiAgICBjb25zdCBjb25zdHJhaW50cyA9IHRoaXMuYnVpbGRRdWVyeUNvbnN0cmFpbnRzKG9wdGlvbnMpO1xuICAgIGNvbnN0IHEgPSBxdWVyeShjb2xsZWN0aW9uUmVmLCAuLi5jb25zdHJhaW50cyk7XG5cbiAgICByZXR1cm4gY29sbGVjdGlvbkRhdGEocSwgeyBpZEZpZWxkOiAnaWQnIH0pLnBpcGUoXG4gICAgICBtYXAoZG9jcyA9PiBkb2NzLm1hcChkb2MgPT4gdGhpcy5jb252ZXJ0VGltZXN0YW1wcyhkb2MpIGFzIFQpKVxuICAgICk7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gRVNDUklUVVJBXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8qKlxuICAgKiBBZ3JlZ2EgdW4gZG9jdW1lbnRvIGNvbiBJRCBhdXRvLWdlbmVyYWRvLlxuICAgKlxuICAgKiBAcGFyYW0gY29sbGVjdGlvblBhdGggLSBSdXRhIGRlIGxhIGNvbGVjY2nDs25cbiAgICogQHBhcmFtIGRhdGEgLSBEYXRvcyBkZWwgZG9jdW1lbnRvIChzaW4gaWQsIGNyZWF0ZWRBdCwgdXBkYXRlZEF0KVxuICAgKiBAcmV0dXJucyBEb2N1bWVudG8gY3JlYWRvIGNvbiBzdSBJRFxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGNvbnN0IG5ld1VzZXIgPSBhd2FpdCBmaXJlc3RvcmVTZXJ2aWNlLmFkZERvYzxVc2VyPigndXNlcnMnLCB7XG4gICAqICAgbmFtZTogJ0pvaG4gRG9lJyxcbiAgICogICBlbWFpbDogJ2pvaG5AZXhhbXBsZS5jb20nLFxuICAgKiAgIHJvbGU6ICd1c2VyJ1xuICAgKiB9KTtcbiAgICogY29uc29sZS5sb2coJ0NyZWF0ZWQgdXNlciB3aXRoIElEOicsIG5ld1VzZXIuaWQpO1xuICAgKiBgYGBcbiAgICovXG4gIGFzeW5jIGFkZERvYzxUIGV4dGVuZHMgRmlyZXN0b3JlRG9jdW1lbnQ+KFxuICAgIGNvbGxlY3Rpb25QYXRoOiBzdHJpbmcsXG4gICAgZGF0YTogT21pdDxULCAnaWQnIHwgJ2NyZWF0ZWRBdCcgfCAndXBkYXRlZEF0Jz5cbiAgKTogUHJvbWlzZTxUPiB7XG4gICAgY29uc3QgcHJlZml4ZWRQYXRoID0gdGhpcy5wcmVmaXhDb2xsZWN0aW9uUGF0aChjb2xsZWN0aW9uUGF0aCk7XG4gICAgY29uc3QgY29sbGVjdGlvblJlZiA9IGNvbGxlY3Rpb24odGhpcy5maXJlc3RvcmUsIHByZWZpeGVkUGF0aCk7XG4gICAgY29uc3QgdGltZXN0YW1wID0gc2VydmVyVGltZXN0YW1wKCk7XG5cbiAgICBjb25zdCBkb2NEYXRhID0ge1xuICAgICAgLi4uZGF0YSxcbiAgICAgIGNyZWF0ZWRBdDogdGltZXN0YW1wLFxuICAgICAgdXBkYXRlZEF0OiB0aW1lc3RhbXAsXG4gICAgfTtcblxuICAgIGNvbnN0IGRvY1JlZiA9IGF3YWl0IGFkZERvYyhjb2xsZWN0aW9uUmVmLCBkb2NEYXRhKTtcblxuICAgIC8vIFJldG9ybmFyIG9wdGltw61zdGljYW1lbnRlIHNpbiBzZWd1bmRvIHJvdW5kLXRyaXAuXG4gICAgLy8gc2VydmVyVGltZXN0YW1wKCkgcmVzdWVsdmUgZW4gZWwgc2Vydmlkb3I7IHVzYW1vcyBEYXRlLm5vdygpIGxvY2FsbWVudGVcbiAgICAvLyBwYXJhIGV2aXRhciB1biBnZXREb2MoKSBleHRyYS4gRWwgdmFsb3IgcmVhbCBsbGVnYSBlbiBsYSBwcsOzeGltYSBsZWN0dXJhLlxuICAgIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCk7XG4gICAgcmV0dXJuIHsgaWQ6IGRvY1JlZi5pZCwgLi4uZGF0YSwgY3JlYXRlZEF0OiBub3csIHVwZGF0ZWRBdDogbm93IH0gYXMgVDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhIG8gc29icmVzY3JpYmUgdW4gZG9jdW1lbnRvIGNvbiBJRCBlc3BlY8OtZmljby5cbiAgICpcbiAgICogQHBhcmFtIGNvbGxlY3Rpb25QYXRoIC0gUnV0YSBkZSBsYSBjb2xlY2Npw7NuXG4gICAqIEBwYXJhbSBkb2NJZCAtIElEIGRlbCBkb2N1bWVudG9cbiAgICogQHBhcmFtIGRhdGEgLSBEYXRvcyBkZWwgZG9jdW1lbnRvXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gT3BjaW9uZXMgKG1lcmdlOiB0cnVlIHBhcmEgbWVyZ2UgZW4gbHVnYXIgZGUgc29icmVzY3JpYmlyKVxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIC8vIFNvYnJlc2NyaWJpciBjb21wbGV0YW1lbnRlXG4gICAqIGF3YWl0IGZpcmVzdG9yZVNlcnZpY2Uuc2V0RG9jPFVzZXI+KCd1c2VycycsICd1c2VyMTIzJywgdXNlckRhdGEpO1xuICAgKlxuICAgKiAvLyBNZXJnZSBjb24gZGF0b3MgZXhpc3RlbnRlc1xuICAgKiBhd2FpdCBmaXJlc3RvcmVTZXJ2aWNlLnNldERvYzxVc2VyPigndXNlcnMnLCAndXNlcjEyMycsIHsgbmFtZTogJ05ldyBOYW1lJyB9LCB7IG1lcmdlOiB0cnVlIH0pO1xuICAgKiBgYGBcbiAgICovXG4gIGFzeW5jIHNldERvYzxUIGV4dGVuZHMgRmlyZXN0b3JlRG9jdW1lbnQ+KFxuICAgIGNvbGxlY3Rpb25QYXRoOiBzdHJpbmcsXG4gICAgZG9jSWQ6IHN0cmluZyxcbiAgICBkYXRhOiBPbWl0PFQsICdpZCc+LFxuICAgIG9wdGlvbnM/OiB7IG1lcmdlPzogYm9vbGVhbiB9XG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHByZWZpeGVkUGF0aCA9IHRoaXMucHJlZml4Q29sbGVjdGlvblBhdGgoY29sbGVjdGlvblBhdGgpO1xuICAgIGNvbnN0IGRvY1JlZiA9IGRvYyh0aGlzLmZpcmVzdG9yZSwgcHJlZml4ZWRQYXRoLCBkb2NJZCk7XG4gICAgY29uc3QgdGltZXN0YW1wID0gc2VydmVyVGltZXN0YW1wKCk7XG5cbiAgICBjb25zdCBkb2NEYXRhID0ge1xuICAgICAgLi4uZGF0YSxcbiAgICAgIHVwZGF0ZWRBdDogdGltZXN0YW1wLFxuICAgICAgLi4uKG9wdGlvbnM/Lm1lcmdlID8ge30gOiB7IGNyZWF0ZWRBdDogdGltZXN0YW1wIH0pLFxuICAgIH07XG5cbiAgICBhd2FpdCBzZXREb2MoZG9jUmVmLCBkb2NEYXRhLCB7IG1lcmdlOiBvcHRpb25zPy5tZXJnZSA/PyBmYWxzZSB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBY3R1YWxpemEgY2FtcG9zIGVzcGVjw61maWNvcyBkZSB1biBkb2N1bWVudG8uXG4gICAqXG4gICAqIEBwYXJhbSBjb2xsZWN0aW9uUGF0aCAtIFJ1dGEgZGUgbGEgY29sZWNjacOzblxuICAgKiBAcGFyYW0gZG9jSWQgLSBJRCBkZWwgZG9jdW1lbnRvXG4gICAqIEBwYXJhbSBkYXRhIC0gQ2FtcG9zIGEgYWN0dWFsaXphclxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGF3YWl0IGZpcmVzdG9yZVNlcnZpY2UudXBkYXRlRG9jPFVzZXI+KCd1c2VycycsICd1c2VyMTIzJywge1xuICAgKiAgIG5hbWU6ICdVcGRhdGVkIE5hbWUnLFxuICAgKiAgIGxhc3RMb2dpbjogbmV3IERhdGUoKVxuICAgKiB9KTtcbiAgICogYGBgXG4gICAqL1xuICBhc3luYyB1cGRhdGVEb2M8VCBleHRlbmRzIEZpcmVzdG9yZURvY3VtZW50PihcbiAgICBjb2xsZWN0aW9uUGF0aDogc3RyaW5nLFxuICAgIGRvY0lkOiBzdHJpbmcsXG4gICAgZGF0YTogUGFydGlhbDxPbWl0PFQsICdpZCcgfCAnY3JlYXRlZEF0Jz4+XG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHByZWZpeGVkUGF0aCA9IHRoaXMucHJlZml4Q29sbGVjdGlvblBhdGgoY29sbGVjdGlvblBhdGgpO1xuICAgIGNvbnN0IGRvY1JlZiA9IGRvYyh0aGlzLmZpcmVzdG9yZSwgcHJlZml4ZWRQYXRoLCBkb2NJZCk7XG5cbiAgICBhd2FpdCB1cGRhdGVEb2MoZG9jUmVmLCB7XG4gICAgICAuLi5kYXRhLFxuICAgICAgdXBkYXRlZEF0OiBzZXJ2ZXJUaW1lc3RhbXAoKSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbGltaW5hIHVuIGRvY3VtZW50by5cbiAgICpcbiAgICogQHBhcmFtIGNvbGxlY3Rpb25QYXRoIC0gUnV0YSBkZSBsYSBjb2xlY2Npw7NuXG4gICAqIEBwYXJhbSBkb2NJZCAtIElEIGRlbCBkb2N1bWVudG9cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBhd2FpdCBmaXJlc3RvcmVTZXJ2aWNlLmRlbGV0ZURvYygndXNlcnMnLCAndXNlcjEyMycpO1xuICAgKiBgYGBcbiAgICovXG4gIGFzeW5jIGRlbGV0ZURvYyhjb2xsZWN0aW9uUGF0aDogc3RyaW5nLCBkb2NJZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgcHJlZml4ZWRQYXRoID0gdGhpcy5wcmVmaXhDb2xsZWN0aW9uUGF0aChjb2xsZWN0aW9uUGF0aCk7XG4gICAgY29uc3QgZG9jUmVmID0gZG9jKHRoaXMuZmlyZXN0b3JlLCBwcmVmaXhlZFBhdGgsIGRvY0lkKTtcbiAgICBhd2FpdCBkZWxldGVEb2MoZG9jUmVmKTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBPUEVSQUNJT05FUyBFTiBMT1RFXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8qKlxuICAgKiBFamVjdXRhIG3Dumx0aXBsZXMgb3BlcmFjaW9uZXMgZGUgZXNjcml0dXJhIGRlIGZvcm1hIGF0w7NtaWNhLlxuICAgKlxuICAgKiBAcGFyYW0gb3BlcmF0aW9ucyAtIEZ1bmNpw7NuIHF1ZSByZWNpYmUgZWwgYmF0Y2ggeSBhZ3JlZ2Egb3BlcmFjaW9uZXNcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBhd2FpdCBmaXJlc3RvcmVTZXJ2aWNlLmJhdGNoKChiYXRjaCkgPT4ge1xuICAgKiAgIGJhdGNoLnNldCgndXNlcnMvdXNlcjEnLCB7IG5hbWU6ICdVc2VyIDEnIH0pO1xuICAgKiAgIGJhdGNoLnVwZGF0ZSgndXNlcnMvdXNlcjInLCB7IHN0YXR1czogJ2luYWN0aXZlJyB9KTtcbiAgICogICBiYXRjaC5kZWxldGUoJ3VzZXJzL3VzZXIzJyk7XG4gICAqIH0pO1xuICAgKiBgYGBcbiAgICovXG4gIGFzeW5jIGJhdGNoKFxuICAgIG9wZXJhdGlvbnM6IChiYXRjaDoge1xuICAgICAgc2V0OiA8VD4ocGF0aDogc3RyaW5nLCBkYXRhOiBUKSA9PiB2b2lkO1xuICAgICAgdXBkYXRlOiA8VD4ocGF0aDogc3RyaW5nLCBkYXRhOiBQYXJ0aWFsPFQ+KSA9PiB2b2lkO1xuICAgICAgZGVsZXRlOiAocGF0aDogc3RyaW5nKSA9PiB2b2lkO1xuICAgIH0pID0+IHZvaWRcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgYmF0Y2ggPSB3cml0ZUJhdGNoKHRoaXMuZmlyZXN0b3JlKTtcblxuICAgIGNvbnN0IGJhdGNoQXBpID0ge1xuICAgICAgc2V0OiA8VD4ocGF0aDogc3RyaW5nLCBkYXRhOiBUKSA9PiB7XG4gICAgICAgIGNvbnN0IFtjb2xsZWN0aW9uUGF0aCwgZG9jSWRdID0gdGhpcy5zcGxpdFBhdGgocGF0aCk7XG4gICAgICAgIGNvbnN0IHByZWZpeGVkUGF0aCA9IHRoaXMucHJlZml4Q29sbGVjdGlvblBhdGgoY29sbGVjdGlvblBhdGgpO1xuICAgICAgICBjb25zdCBkb2NSZWYgPSBkb2ModGhpcy5maXJlc3RvcmUsIHByZWZpeGVkUGF0aCwgZG9jSWQpO1xuICAgICAgICBiYXRjaC5zZXQoZG9jUmVmLCB7XG4gICAgICAgICAgLi4uZGF0YSxcbiAgICAgICAgICBjcmVhdGVkQXQ6IHNlcnZlclRpbWVzdGFtcCgpLFxuICAgICAgICAgIHVwZGF0ZWRBdDogc2VydmVyVGltZXN0YW1wKCksXG4gICAgICAgIH0gYXMgRG9jdW1lbnREYXRhKTtcbiAgICAgIH0sXG4gICAgICB1cGRhdGU6IDxUPihwYXRoOiBzdHJpbmcsIGRhdGE6IFBhcnRpYWw8VD4pID0+IHtcbiAgICAgICAgY29uc3QgW2NvbGxlY3Rpb25QYXRoLCBkb2NJZF0gPSB0aGlzLnNwbGl0UGF0aChwYXRoKTtcbiAgICAgICAgY29uc3QgcHJlZml4ZWRQYXRoID0gdGhpcy5wcmVmaXhDb2xsZWN0aW9uUGF0aChjb2xsZWN0aW9uUGF0aCk7XG4gICAgICAgIGNvbnN0IGRvY1JlZiA9IGRvYyh0aGlzLmZpcmVzdG9yZSwgcHJlZml4ZWRQYXRoLCBkb2NJZCk7XG4gICAgICAgIGJhdGNoLnVwZGF0ZShkb2NSZWYsIHtcbiAgICAgICAgICAuLi5kYXRhLFxuICAgICAgICAgIHVwZGF0ZWRBdDogc2VydmVyVGltZXN0YW1wKCksXG4gICAgICAgIH0gYXMgRG9jdW1lbnREYXRhKTtcbiAgICAgIH0sXG4gICAgICBkZWxldGU6IChwYXRoOiBzdHJpbmcpID0+IHtcbiAgICAgICAgY29uc3QgW2NvbGxlY3Rpb25QYXRoLCBkb2NJZF0gPSB0aGlzLnNwbGl0UGF0aChwYXRoKTtcbiAgICAgICAgY29uc3QgcHJlZml4ZWRQYXRoID0gdGhpcy5wcmVmaXhDb2xsZWN0aW9uUGF0aChjb2xsZWN0aW9uUGF0aCk7XG4gICAgICAgIGNvbnN0IGRvY1JlZiA9IGRvYyh0aGlzLmZpcmVzdG9yZSwgcHJlZml4ZWRQYXRoLCBkb2NJZCk7XG4gICAgICAgIGJhdGNoLmRlbGV0ZShkb2NSZWYpO1xuICAgICAgfSxcbiAgICB9O1xuXG4gICAgb3BlcmF0aW9ucyhiYXRjaEFwaSk7XG4gICAgYXdhaXQgYmF0Y2guY29tbWl0KCk7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gVVRJTElEQURFU1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAvKipcbiAgICogQ29uc3RydXllIHVuYSBydXRhIGEgcGFydGlyIGRlIHVuIHRlbXBsYXRlLlxuICAgKlxuICAgKiBAcGFyYW0gdGVtcGxhdGUgLSBUZW1wbGF0ZSBjb24gcGxhY2Vob2xkZXJzIHtwYXJhbX1cbiAgICogQHBhcmFtIHBhcmFtcyAtIFZhbG9yZXMgcGFyYSBsb3MgcGxhY2Vob2xkZXJzXG4gICAqIEByZXR1cm5zIFJ1dGEgY29uc3RydWlkYVxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGNvbnN0IHBhdGggPSBmaXJlc3RvcmVTZXJ2aWNlLmJ1aWxkUGF0aCgndXNlcnMve3VzZXJJZH0vZG9jdW1lbnRzL3tkb2NJZH0nLCB7XG4gICAqICAgdXNlcklkOiAndXNlcjEyMycsXG4gICAqICAgZG9jSWQ6ICdkb2M0NTYnXG4gICAqIH0pO1xuICAgKiAvLyA9PiAndXNlcnMvdXNlcjEyMy9kb2N1bWVudHMvZG9jNDU2J1xuICAgKiBgYGBcbiAgICovXG4gIGJ1aWxkUGF0aCh0ZW1wbGF0ZTogc3RyaW5nLCBwYXJhbXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pOiBzdHJpbmcge1xuICAgIHJldHVybiBidWlsZFBhdGgodGVtcGxhdGUsIHBhcmFtcyk7XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhIHVuIElEIMO6bmljbyBwYXJhIHVuIGRvY3VtZW50byAoc2luIGNyZWFybG8pLlxuICAgKlxuICAgKiBAcGFyYW0gY29sbGVjdGlvblBhdGggLSBSdXRhIGRlIGxhIGNvbGVjY2nDs25cbiAgICogQHJldHVybnMgSUQgw7puaWNvIGdlbmVyYWRvIHBvciBGaXJlc3RvcmVcbiAgICovXG4gIGdlbmVyYXRlSWQoY29sbGVjdGlvblBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgcHJlZml4ZWRQYXRoID0gdGhpcy5wcmVmaXhDb2xsZWN0aW9uUGF0aChjb2xsZWN0aW9uUGF0aCk7XG4gICAgY29uc3QgY29sbGVjdGlvblJlZiA9IGNvbGxlY3Rpb24odGhpcy5maXJlc3RvcmUsIHByZWZpeGVkUGF0aCk7XG4gICAgcmV0dXJuIGRvYyhjb2xsZWN0aW9uUmVmKS5pZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRvcm5hIHVuIHZhbG9yIGRlIHRpbWVzdGFtcCBkZWwgc2Vydmlkb3IuXG4gICAqIFVzYXIgZW4gY2FtcG9zIGRlIGZlY2hhIHBhcmEgcXVlIEZpcmVzdG9yZSBhc2lnbmUgZWwgdGltZXN0YW1wLlxuICAgKi9cbiAgc2VydmVyVGltZXN0YW1wKCk6IEZpZWxkVmFsdWUge1xuICAgIHJldHVybiBzZXJ2ZXJUaW1lc3RhbXAoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRvcm5hIHVuIHZhbG9yIHBhcmEgYWdyZWdhciBlbGVtZW50b3MgYSB1biBhcnJheS5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBhd2FpdCBmaXJlc3RvcmVTZXJ2aWNlLnVwZGF0ZURvYygndXNlcnMnLCAndXNlcjEyMycsIHtcbiAgICogICB0YWdzOiBmaXJlc3RvcmVTZXJ2aWNlLmFycmF5VW5pb24oJ25ldy10YWcnKVxuICAgKiB9KTtcbiAgICogYGBgXG4gICAqL1xuICBhcnJheVVuaW9uKC4uLmVsZW1lbnRzOiB1bmtub3duW10pOiBGaWVsZFZhbHVlIHtcbiAgICByZXR1cm4gYXJyYXlVbmlvbiguLi5lbGVtZW50cyk7XG4gIH1cblxuICAvKipcbiAgICogUmV0b3JuYSB1biB2YWxvciBwYXJhIHJlbW92ZXIgZWxlbWVudG9zIGRlIHVuIGFycmF5LlxuICAgKi9cbiAgYXJyYXlSZW1vdmUoLi4uZWxlbWVudHM6IHVua25vd25bXSk6IEZpZWxkVmFsdWUge1xuICAgIHJldHVybiBhcnJheVJlbW92ZSguLi5lbGVtZW50cyk7XG4gIH1cblxuICAvKipcbiAgICogUmV0b3JuYSB1biB2YWxvciBwYXJhIGluY3JlbWVudGFyIHVuIGNhbXBvIG51bcOpcmljby5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBhd2FpdCBmaXJlc3RvcmVTZXJ2aWNlLnVwZGF0ZURvYygndXNlcnMnLCAndXNlcjEyMycsIHtcbiAgICogICBsb2dpbkNvdW50OiBmaXJlc3RvcmVTZXJ2aWNlLmluY3JlbWVudCgxKVxuICAgKiB9KTtcbiAgICogYGBgXG4gICAqL1xuICBpbmNyZW1lbnQobjogbnVtYmVyKTogRmllbGRWYWx1ZSB7XG4gICAgcmV0dXJuIGluY3JlbWVudChuKTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBNw4lUT0RPUyBQUklWQURPU1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAvKipcbiAgICogQ29uc3RydXllIGxvcyBRdWVyeUNvbnN0cmFpbnRzIGEgcGFydGlyIGRlIFF1ZXJ5T3B0aW9uc1xuICAgKi9cbiAgcHJpdmF0ZSBidWlsZFF1ZXJ5Q29uc3RyYWludHMob3B0aW9ucz86IFF1ZXJ5T3B0aW9ucyk6IFF1ZXJ5Q29uc3RyYWludFtdIHtcbiAgICBjb25zdCBjb25zdHJhaW50czogUXVlcnlDb25zdHJhaW50W10gPSBbXTtcblxuICAgIGlmICghb3B0aW9ucykgcmV0dXJuIGNvbnN0cmFpbnRzO1xuXG4gICAgLy8gV2hlcmUgY2xhdXNlc1xuICAgIGlmIChvcHRpb25zLndoZXJlKSB7XG4gICAgICBmb3IgKGNvbnN0IGNsYXVzZSBvZiBvcHRpb25zLndoZXJlKSB7XG4gICAgICAgIGNvbnN0cmFpbnRzLnB1c2god2hlcmUoY2xhdXNlLmZpZWxkLCBjbGF1c2Uub3BlcmF0b3IsIGNsYXVzZS52YWx1ZSkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIE9yZGVyQnkgY2xhdXNlc1xuICAgIGlmIChvcHRpb25zLm9yZGVyQnkpIHtcbiAgICAgIGZvciAoY29uc3QgY2xhdXNlIG9mIG9wdGlvbnMub3JkZXJCeSkge1xuICAgICAgICBjb25zdHJhaW50cy5wdXNoKG9yZGVyQnkoY2xhdXNlLmZpZWxkLCBjbGF1c2UuZGlyZWN0aW9uKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQ3Vyc29ycyBwYXJhIHBhZ2luYWNpw7NuXG4gICAgaWYgKG9wdGlvbnMuc3RhcnRBZnRlcikge1xuICAgICAgY29uc3RyYWludHMucHVzaChzdGFydEFmdGVyKG9wdGlvbnMuc3RhcnRBZnRlcikpO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy5zdGFydEF0KSB7XG4gICAgICBjb25zdHJhaW50cy5wdXNoKHN0YXJ0QXQob3B0aW9ucy5zdGFydEF0KSk7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLmVuZEJlZm9yZSkge1xuICAgICAgY29uc3RyYWludHMucHVzaChlbmRCZWZvcmUob3B0aW9ucy5lbmRCZWZvcmUpKTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMuZW5kQXQpIHtcbiAgICAgIGNvbnN0cmFpbnRzLnB1c2goZW5kQXQob3B0aW9ucy5lbmRBdCkpO1xuICAgIH1cblxuICAgIC8vIExpbWl0IChzZSBhZ3JlZ2EgYWwgZmluYWwpXG4gICAgaWYgKG9wdGlvbnMubGltaXQpIHtcbiAgICAgIGNvbnN0cmFpbnRzLnB1c2gobGltaXQob3B0aW9ucy5saW1pdCkpO1xuICAgIH1cblxuICAgIHJldHVybiBjb25zdHJhaW50cztcbiAgfVxuXG4gIC8qKlxuICAgKiBNYXBlYSB1biBEb2N1bWVudFNuYXBzaG90IGEgbnVlc3RybyB0aXBvXG4gICAqL1xuICBwcml2YXRlIG1hcERvY3VtZW50PFQgZXh0ZW5kcyBGaXJlc3RvcmVEb2N1bWVudD4oc25hcHNob3Q6IERvY3VtZW50U25hcHNob3Q8RG9jdW1lbnREYXRhPik6IFQge1xuICAgIGNvbnN0IGRhdGEgPSBzbmFwc2hvdC5kYXRhKCk7XG4gICAgaWYgKCFkYXRhKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0RvY3VtZW50byBubyB0aWVuZSBkYXRvcycpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBpZDogc25hcHNob3QuaWQsXG4gICAgICAuLi50aGlzLmNvbnZlcnRUaW1lc3RhbXBzKGRhdGEpLFxuICAgIH0gYXMgVDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252aWVydGUgVGltZXN0YW1wcyBkZSBGaXJlc3RvcmUgYSBEYXRlIGRlIEphdmFTY3JpcHRcbiAgICovXG4gIHByaXZhdGUgY29udmVydFRpbWVzdGFtcHMoZGF0YTogRG9jdW1lbnREYXRhKTogRG9jdW1lbnREYXRhIHtcbiAgICBjb25zdCByZXN1bHQ6IERvY3VtZW50RGF0YSA9IHt9O1xuXG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZGF0YSkpIHtcbiAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFRpbWVzdGFtcCkge1xuICAgICAgICByZXN1bHRba2V5XSA9IHZhbHVlLnRvRGF0ZSgpO1xuICAgICAgfSBlbHNlIGlmICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICByZXN1bHRba2V5XSA9IHRoaXMuY29udmVydFRpbWVzdGFtcHModmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdWx0W2tleV0gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIERpdmlkZSB1bmEgcnV0YSBkZSBkb2N1bWVudG8gZW4gY29sZWNjacOzbiBlIElEXG4gICAqL1xuICBwcml2YXRlIHNwbGl0UGF0aChwYXRoOiBzdHJpbmcpOiBbc3RyaW5nLCBzdHJpbmddIHtcbiAgICBjb25zdCBzZWdtZW50cyA9IHBhdGguc3BsaXQoJy8nKTtcbiAgICBpZiAoc2VnbWVudHMubGVuZ3RoIDwgMiB8fCBzZWdtZW50cy5sZW5ndGggJSAyICE9PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFJ1dGEgZGUgZG9jdW1lbnRvIGludsOhbGlkYTogJHtwYXRofWApO1xuICAgIH1cbiAgICBjb25zdCBkb2NJZCA9IHNlZ21lbnRzLnBvcCgpITtcbiAgICBjb25zdCBjb2xsZWN0aW9uUGF0aCA9IHNlZ21lbnRzLmpvaW4oJy8nKTtcbiAgICByZXR1cm4gW2NvbGxlY3Rpb25QYXRoLCBkb2NJZF07XG4gIH1cbn1cbiJdfQ==
@@ -9,57 +9,90 @@
9
9
  // STORAGE PATH BUILDERS
10
10
  // ============================================================================
11
11
  /**
12
- * Genera paths de Storage con namespace por app.
12
+ * Genera paths de Storage alineados con storage.rules.
13
+ *
14
+ * Convenciones (ver frontend/firebase/storage.rules):
15
+ * - Avatar global del user (cross-app): /users/{uid}/avatar.jpg
16
+ * - Files privados del user (cross-app): /users/{uid}/files/{path}
17
+ * - Avatar per-app del user: /apps/{appId}/users/{uid}/avatar.jpg
18
+ * - Files per-app del user: /apps/{appId}/users/{uid}/files/{path}
19
+ * - Public per-app: /apps/{appId}/public/{path}
20
+ * - Shared per-app (auth-only): /apps/{appId}/shared/{path}
21
+ * - Public global: /public/{path}
13
22
  *
14
23
  * @example
15
- * // Path específico de la app
16
- * storagePaths.forApp('showcase', 'uploads', 'image.jpg')
17
- * // => 'showcase/uploads/image.jpg'
24
+ * storagePaths.forApp('showcase', 'public', 'banner.jpg')
25
+ * // => 'apps/showcase/public/banner.jpg'
26
+ *
27
+ * storagePaths.userAvatar('user123')
28
+ * // => 'users/user123/avatar.jpg'
18
29
  *
19
- * // Path compartido
20
- * storagePaths.shared.profilePhoto('user123', 'avatar.jpg')
21
- * // => 'profile-photos/user123/avatar.jpg'
30
+ * storagePaths.appUserFile('showcase', 'user123', 'doc.pdf')
31
+ * // => 'apps/showcase/users/user123/files/doc.pdf'
22
32
  */
23
33
  export const storagePaths = {
24
- /** Carpeta específica de la app: {appId}/{...paths} */
25
- forApp: (appId, ...paths) => [appId, ...paths].join('/'),
26
- /** Carpetas compartidas (sin namespace) */
27
- shared: {
28
- /** Foto de perfil de usuario */
29
- profilePhoto: (userId, fileName) => `profile-photos/${userId}/${fileName}`,
30
- /** Archivos públicos accesibles sin autenticación */
31
- public: (...paths) => `public/${paths.join('/')}`,
32
- },
34
+ /** Path per-app: apps/{appId}/{...paths} */
35
+ forApp: (appId, ...paths) => ['apps', appId, ...paths].join('/'),
36
+ /** Avatar global del user (cross-app) */
37
+ userAvatar: (userId) => `users/${userId}/avatar.jpg`,
38
+ /** Thumbnail global del user (cross-app) */
39
+ userThumb: (userId) => `users/${userId}/thumb.jpg`,
40
+ /** File privado global del user (cross-app) */
41
+ userFile: (userId, ...paths) => ['users', userId, 'files', ...paths].join('/'),
42
+ /** Avatar per-app del user */
43
+ appUserAvatar: (appId, userId) => `apps/${appId}/users/${userId}/avatar.jpg`,
44
+ /** File per-app del user */
45
+ appUserFile: (appId, userId, ...paths) => ['apps', appId, 'users', userId, 'files', ...paths].join('/'),
46
+ /** Public global (acceso sin auth, write admin-only) */
47
+ public: (...paths) => `public/${paths.join('/')}`,
33
48
  };
34
49
  // ============================================================================
35
50
  // FIRESTORE COLLECTION BUILDERS
36
51
  // ============================================================================
37
52
  /**
38
- * Genera paths de colecciones con namespace por app.
53
+ * Genera paths de colecciones alineados con firestore.rules.
39
54
  *
40
- * IMPORTANTE: La estructura es /apps/{appId}/{collection}/{docId}
41
- * Firestore requiere número impar de segmentos para paths de colección.
55
+ * Convenciones (ver frontend/firebase/firestore.rules):
56
+ * - Cross-app shared:
57
+ * /users/{uid} (privado), /profiles/{uid} (público global),
58
+ * /users/{uid}/notifications (INBOX GLOBAL cross-app cross-org)
59
+ * - Per-app:
60
+ * /apps/{appId}/{collection}, /apps/{appId}/profiles/{uid}
61
+ * - Per-app per-user (notifications NO viven aquí):
62
+ * /apps/{appId}/users/{uid}/{collection}
63
+ * - Per-app per-org:
64
+ * /apps/{appId}/orgs/{orgId}/{collection}
42
65
  *
43
66
  * @example
44
- * // Colección específica de la app
45
67
  * collections.forApp('showcase', 'items')
46
68
  * // => 'apps/showcase/items'
47
69
  *
48
- * // Colección compartida
49
- * collections.shared.users
50
- * // => 'users'
70
+ * collections.appUser('showcase', 'user123', 'drafts')
71
+ * // => 'apps/showcase/users/user123/drafts'
72
+ *
73
+ * collections.appOrg('showcase', 'org_abc', 'posts')
74
+ * // => 'apps/showcase/orgs/org_abc/posts'
75
+ *
76
+ * collections.userNotifications('user123')
77
+ * // => 'users/user123/notifications'
51
78
  */
52
79
  export const collections = {
53
- /** Colección específica de la app: apps/{appId}/{collection} */
80
+ /** Per-app cross-user: apps/{appId}/{collection} */
54
81
  forApp: (appId, collectionName) => `apps/${appId}/${collectionName}`,
55
- /** Colecciones compartidas (sin namespace, nivel raíz) */
82
+ /** Per-app per-user: apps/{appId}/users/{uid}/{collection} */
83
+ appUser: (appId, userId, collectionName) => `apps/${appId}/users/${userId}/${collectionName}`,
84
+ /** Per-app per-org: apps/{appId}/orgs/{orgId}/{collection} */
85
+ appOrg: (appId, orgId, collectionName) => `apps/${appId}/orgs/${orgId}/${collectionName}`,
86
+ /** Per-app perfil público del user: apps/{appId}/profiles/{uid} */
87
+ appProfile: (appId, userId) => `apps/${appId}/profiles/${userId}`,
88
+ /** Inbox global del user (cross-app cross-org) */
89
+ userNotifications: (userId) => `users/${userId}/notifications`,
90
+ /** Cross-app shared (sin namespace, nivel raíz) */
56
91
  shared: {
57
- /** Usuarios del sistema */
92
+ /** Doc privado del user — /users/{uid} */
58
93
  users: 'users',
59
- /** Perfiles públicos */
94
+ /** Perfiles públicos globales — /profiles/{uid} */
60
95
  profiles: 'profiles',
61
- /** Notificaciones de usuarios */
62
- notifications: 'notifications',
63
96
  },
64
97
  };
65
98
  /**
@@ -111,4 +144,4 @@ export function createFirebaseConfig(config, options = {}) {
111
144
  export function isEmulatorMode(config) {
112
145
  return config.emulator !== undefined;
113
146
  }
114
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hhcmVkLWNvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvc2VydmljZXMvZmlyZWJhc2Uvc2hhcmVkLWNvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFRSCwrRUFBK0U7QUFDL0Usd0JBQXdCO0FBQ3hCLCtFQUErRTtBQUUvRTs7Ozs7Ozs7Ozs7R0FXRztBQUNILE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRztJQUMxQix1REFBdUQ7SUFDdkQsTUFBTSxFQUFFLENBQUMsS0FBWSxFQUFFLEdBQUcsS0FBZSxFQUFVLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxHQUFHLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7SUFFakYsMkNBQTJDO0lBQzNDLE1BQU0sRUFBRTtRQUNOLGdDQUFnQztRQUNoQyxZQUFZLEVBQUUsQ0FBQyxNQUFjLEVBQUUsUUFBZ0IsRUFBVSxFQUFFLENBQ3pELGtCQUFrQixNQUFNLElBQUksUUFBUSxFQUFFO1FBRXhDLHFEQUFxRDtRQUNyRCxNQUFNLEVBQUUsQ0FBQyxHQUFHLEtBQWUsRUFBVSxFQUFFLENBQUMsVUFBVSxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFO0tBQ3BFO0NBQ0YsQ0FBQztBQUVGLCtFQUErRTtBQUMvRSxnQ0FBZ0M7QUFDaEMsK0VBQStFO0FBRS9FOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHO0lBQ3pCLGdFQUFnRTtJQUNoRSxNQUFNLEVBQUUsQ0FBQyxLQUFZLEVBQUUsY0FBc0IsRUFBVSxFQUFFLENBQUMsUUFBUSxLQUFLLElBQUksY0FBYyxFQUFFO0lBRTNGLDBEQUEwRDtJQUMxRCxNQUFNLEVBQUU7UUFDTiwyQkFBMkI7UUFDM0IsS0FBSyxFQUFFLE9BQU87UUFDZCx3QkFBd0I7UUFDeEIsUUFBUSxFQUFFLFVBQVU7UUFDcEIsaUNBQWlDO1FBQ2pDLGFBQWEsRUFBRSxlQUFlO0tBQy9CO0NBQ0YsQ0FBQztBQWtDRjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBd0JHO0FBQ0gsTUFBTSxVQUFVLG9CQUFvQixDQUNsQyxNQUFzQixFQUN0QixVQUF1QyxFQUFFO0lBRXpDLE1BQU0sRUFBRSxRQUFRLEVBQUUsV0FBVyxHQUFHLElBQUksRUFBRSxLQUFLLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBRSxHQUFHLE9BQU8sQ0FBQztJQUUxRixvRUFBb0U7SUFDcEUsTUFBTSxFQUFFLGVBQWUsR0FBRyxLQUFLLEVBQUUsaUJBQWlCLEVBQUUsR0FBRyxZQUFZLEVBQUUsR0FBRyxNQUFNLENBQUM7SUFFL0UsT0FBTztRQUNMLFFBQVEsRUFBRSxZQUE4QjtRQUN4QyxXQUFXO1FBQ1gsZUFBZTtRQUNmLGlCQUFpQjtRQUNqQixRQUFRO1FBQ1IsS0FBSztRQUNMLGVBQWU7UUFDZixlQUFlO0tBQ2hCLENBQUM7QUFDSixDQUFDO0FBRUQsK0VBQStFO0FBQy9FLDZDQUE2QztBQUM3QywrRUFBK0U7QUFFL0U7O0dBRUc7QUFDSCxNQUFNLFVBQVUsY0FBYyxDQUFDLE1BQTZCO0lBQzFELE9BQU8sTUFBTSxDQUFDLFFBQVEsS0FBSyxTQUFTLENBQUM7QUFDdkMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogRmlyZWJhc2UgU2hhcmVkIENvbmZpZ3VyYXRpb25cbiAqXG4gKiBVdGlsaWRhZGVzIGdlbsOpcmljYXMgcGFyYSBjb25maWd1cmFjacOzbiBkZSBGaXJlYmFzZS5cbiAqIExhcyBjb25zdGFudGVzIGVzcGVjw61maWNhcyBkZWwgcHJveWVjdG8gKEFQUF9JRFMsIEZJUkVCQVNFX1BST0pFQ1RTLCBFTVVMQVRPUl9DT05GSUcpXG4gKiBkZWJlbiBkZWZpbmlyc2UgZW4gY2FkYSBhcHAgY29uc3VtaWRvcmEuXG4gKi9cblxuaW1wb3J0IHsgQXBwSWQsIEVtdWxhdG9yQ29uZmlnLCBGaXJlYmFzZUNvbmZpZywgVmFsdGVjaEZpcmViYXNlQ29uZmlnIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgdHlwZSB7IEFuYWx5dGljc0NvbmZpZyB9IGZyb20gJy4vYW5hbHl0aWNzLXR5cGVzJztcblxuLy8gUmUtZXhwb3J0IHR5cGVzIGZvciBjb252ZW5pZW5jZVxuZXhwb3J0IHR5cGUgeyBBcHBJZCB9IGZyb20gJy4vdHlwZXMnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBTVE9SQUdFIFBBVEggQlVJTERFUlNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBHZW5lcmEgcGF0aHMgZGUgU3RvcmFnZSBjb24gbmFtZXNwYWNlIHBvciBhcHAuXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFBhdGggZXNwZWPDrWZpY28gZGUgbGEgYXBwXG4gKiBzdG9yYWdlUGF0aHMuZm9yQXBwKCdzaG93Y2FzZScsICd1cGxvYWRzJywgJ2ltYWdlLmpwZycpXG4gKiAvLyA9PiAnc2hvd2Nhc2UvdXBsb2Fkcy9pbWFnZS5qcGcnXG4gKlxuICogLy8gUGF0aCBjb21wYXJ0aWRvXG4gKiBzdG9yYWdlUGF0aHMuc2hhcmVkLnByb2ZpbGVQaG90bygndXNlcjEyMycsICdhdmF0YXIuanBnJylcbiAqIC8vID0+ICdwcm9maWxlLXBob3Rvcy91c2VyMTIzL2F2YXRhci5qcGcnXG4gKi9cbmV4cG9ydCBjb25zdCBzdG9yYWdlUGF0aHMgPSB7XG4gIC8qKiBDYXJwZXRhIGVzcGVjw61maWNhIGRlIGxhIGFwcDoge2FwcElkfS97Li4ucGF0aHN9ICovXG4gIGZvckFwcDogKGFwcElkOiBBcHBJZCwgLi4ucGF0aHM6IHN0cmluZ1tdKTogc3RyaW5nID0+IFthcHBJZCwgLi4ucGF0aHNdLmpvaW4oJy8nKSxcblxuICAvKiogQ2FycGV0YXMgY29tcGFydGlkYXMgKHNpbiBuYW1lc3BhY2UpICovXG4gIHNoYXJlZDoge1xuICAgIC8qKiBGb3RvIGRlIHBlcmZpbCBkZSB1c3VhcmlvICovXG4gICAgcHJvZmlsZVBob3RvOiAodXNlcklkOiBzdHJpbmcsIGZpbGVOYW1lOiBzdHJpbmcpOiBzdHJpbmcgPT5cbiAgICAgIGBwcm9maWxlLXBob3Rvcy8ke3VzZXJJZH0vJHtmaWxlTmFtZX1gLFxuXG4gICAgLyoqIEFyY2hpdm9zIHDDumJsaWNvcyBhY2Nlc2libGVzIHNpbiBhdXRlbnRpY2FjacOzbiAqL1xuICAgIHB1YmxpYzogKC4uLnBhdGhzOiBzdHJpbmdbXSk6IHN0cmluZyA9PiBgcHVibGljLyR7cGF0aHMuam9pbignLycpfWAsXG4gIH0sXG59O1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBGSVJFU1RPUkUgQ09MTEVDVElPTiBCVUlMREVSU1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIEdlbmVyYSBwYXRocyBkZSBjb2xlY2Npb25lcyBjb24gbmFtZXNwYWNlIHBvciBhcHAuXG4gKlxuICogSU1QT1JUQU5URTogTGEgZXN0cnVjdHVyYSBlcyAvYXBwcy97YXBwSWR9L3tjb2xsZWN0aW9ufS97ZG9jSWR9XG4gKiBGaXJlc3RvcmUgcmVxdWllcmUgbsO6bWVybyBpbXBhciBkZSBzZWdtZW50b3MgcGFyYSBwYXRocyBkZSBjb2xlY2Npw7NuLlxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBDb2xlY2Npw7NuIGVzcGVjw61maWNhIGRlIGxhIGFwcFxuICogY29sbGVjdGlvbnMuZm9yQXBwKCdzaG93Y2FzZScsICdpdGVtcycpXG4gKiAvLyA9PiAnYXBwcy9zaG93Y2FzZS9pdGVtcydcbiAqXG4gKiAvLyBDb2xlY2Npw7NuIGNvbXBhcnRpZGFcbiAqIGNvbGxlY3Rpb25zLnNoYXJlZC51c2Vyc1xuICogLy8gPT4gJ3VzZXJzJ1xuICovXG5leHBvcnQgY29uc3QgY29sbGVjdGlvbnMgPSB7XG4gIC8qKiBDb2xlY2Npw7NuIGVzcGVjw61maWNhIGRlIGxhIGFwcDogYXBwcy97YXBwSWR9L3tjb2xsZWN0aW9ufSAqL1xuICBmb3JBcHA6IChhcHBJZDogQXBwSWQsIGNvbGxlY3Rpb25OYW1lOiBzdHJpbmcpOiBzdHJpbmcgPT4gYGFwcHMvJHthcHBJZH0vJHtjb2xsZWN0aW9uTmFtZX1gLFxuXG4gIC8qKiBDb2xlY2Npb25lcyBjb21wYXJ0aWRhcyAoc2luIG5hbWVzcGFjZSwgbml2ZWwgcmHDrXopICovXG4gIHNoYXJlZDoge1xuICAgIC8qKiBVc3VhcmlvcyBkZWwgc2lzdGVtYSAqL1xuICAgIHVzZXJzOiAndXNlcnMnLFxuICAgIC8qKiBQZXJmaWxlcyBww7pibGljb3MgKi9cbiAgICBwcm9maWxlczogJ3Byb2ZpbGVzJyxcbiAgICAvKiogTm90aWZpY2FjaW9uZXMgZGUgdXN1YXJpb3MgKi9cbiAgICBub3RpZmljYXRpb25zOiAnbm90aWZpY2F0aW9ucycsXG4gIH0sXG59O1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBIRUxQRVI6IENyZWF0ZSBGaXJlYmFzZSBDb25maWcgZnJvbSBFbnZpcm9ubWVudFxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIE9wY2lvbmVzIHBhcmEgY3JlYXIgbGEgY29uZmlndXJhY2nDs24gZGUgRmlyZWJhc2VcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDcmVhdGVGaXJlYmFzZUNvbmZpZ09wdGlvbnMge1xuICAvKipcbiAgICogQ29uZmlndXJhY2nDs24gZGUgZW11bGFkb3JlcyAocGFyYSBkZXNhcnJvbGxvIGxvY2FsKS5cbiAgICogUGFzYSB0dSBwcm9waWEgY29uZmlndXJhY2nDs24gY29uIGhvc3RzIHkgcHVlcnRvcy5cbiAgICovXG4gIGVtdWxhdG9yPzogRW11bGF0b3JDb25maWc7XG4gIC8qKiBIYWJpbGl0YXIgcGVyc2lzdGVuY2lhIG9mZmxpbmUgZGUgRmlyZXN0b3JlICovXG4gIHBlcnNpc3RlbmNlPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIElEIGRlIGxhIGFwbGljYWNpw7NuIHBhcmEgbmFtZXNwYWNpbmcgYXV0b23DoXRpY28uXG4gICAqIEN1YW5kbyBzZSBjb25maWd1cmEsIEZpcmVzdG9yZVNlcnZpY2UgeSBTdG9yYWdlU2VydmljZSBwcmVmaWphbiBhdXRvbcOhdGljYW1lbnRlIGxvcyBwYXRocy5cbiAgICovXG4gIGFwcElkPzogc3RyaW5nO1xuICAvKipcbiAgICogSGFiaWxpdGFyIEZpcmViYXNlIEFuYWx5dGljcyAvIEdBNC5cbiAgICogUmVxdWllcmUgbWVhc3VyZW1lbnRJZCBlbiBmaXJlYmFzZSBjb25maWcuXG4gICAqL1xuICBlbmFibGVBbmFseXRpY3M/OiBib29sZWFuO1xuICAvKipcbiAgICogQ29uZmlndXJhY2nDs24gZGV0YWxsYWRhIGRlIEFuYWx5dGljcy5cbiAgICogU29sbyBhcGxpY2Egc2kgZW5hYmxlQW5hbHl0aWNzIGVzIHRydWUuXG4gICAqL1xuICBhbmFseXRpY3NDb25maWc/OiBBbmFseXRpY3NDb25maWc7XG59XG5cbi8qKlxuICogQ3JlYSBsYSBjb25maWd1cmFjacOzbiBjb21wbGV0YSBkZSBGaXJlYmFzZSBkZXNkZSB2YXJpYWJsZXMgZGUgZW50b3Juby5cbiAqIFVzYSBlc3RvIGVuIGVsIGVudmlyb25tZW50LnRzIGRlIGNhZGEgYXBwLlxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBlbnZpcm9ubWVudC50c1xuICogaW1wb3J0IHsgY3JlYXRlRmlyZWJhc2VDb25maWcgfSBmcm9tICd2YWx0ZWNoLWNvbXBvbmVudHMnO1xuICogaW1wb3J0IHsgQVBQX0lEUywgRU1VTEFUT1JfQ09ORklHLCBVU0VfRU1VTEFUT1JTIH0gZnJvbSAnLi4vY29uZmlnL2FwcC1jb25maWcnO1xuICogaW1wb3J0IGZpcmViYXNlQ29uZmlnIGZyb20gJy4uL2NvbmZpZy9maXJlYmFzZS5jb25maWcuanNvbic7XG4gKlxuICogZXhwb3J0IGNvbnN0IGVudmlyb25tZW50ID0ge1xuICogICB2YWx0ZWNoRmlyZWJhc2U6IGNyZWF0ZUZpcmViYXNlQ29uZmlnKFxuICogICAgIHtcbiAqICAgICAgIC4uLmZpcmViYXNlQ29uZmlnLFxuICogICAgICAgZW5hYmxlTWVzc2FnaW5nOiB0cnVlLFxuICogICAgICAgbWVzc2FnaW5nVmFwaWRLZXk6ICdCSEx4Li4uJyxcbiAqICAgICB9LFxuICogICAgIHtcbiAqICAgICAgIGVtdWxhdG9yOiBVU0VfRU1VTEFUT1JTID8gRU1VTEFUT1JfQ09ORklHIDogdW5kZWZpbmVkLFxuICogICAgICAgcGVyc2lzdGVuY2U6IHRydWUsXG4gKiAgICAgICBhcHBJZDogQVBQX0lEUy5NWV9BUFAsXG4gKiAgICAgfVxuICogICApLFxuICogfTtcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUZpcmViYXNlQ29uZmlnKFxuICBjb25maWc6IEZpcmViYXNlQ29uZmlnLFxuICBvcHRpb25zOiBDcmVhdGVGaXJlYmFzZUNvbmZpZ09wdGlvbnMgPSB7fVxuKTogVmFsdGVjaEZpcmViYXNlQ29uZmlnIHtcbiAgY29uc3QgeyBlbXVsYXRvciwgcGVyc2lzdGVuY2UgPSB0cnVlLCBhcHBJZCwgZW5hYmxlQW5hbHl0aWNzLCBhbmFseXRpY3NDb25maWcgfSA9IG9wdGlvbnM7XG5cbiAgLy8gRXh0cmFlciBjYW1wb3MgZGUgbWVzc2FnaW5nIGRlbCBjb25maWcgKG51ZXZvcyBjYW1wb3Mgb3BjaW9uYWxlcylcbiAgY29uc3QgeyBlbmFibGVNZXNzYWdpbmcgPSBmYWxzZSwgbWVzc2FnaW5nVmFwaWRLZXksIC4uLmZpcmViYXNlQ29yZSB9ID0gY29uZmlnO1xuXG4gIHJldHVybiB7XG4gICAgZmlyZWJhc2U6IGZpcmViYXNlQ29yZSBhcyBGaXJlYmFzZUNvbmZpZyxcbiAgICBwZXJzaXN0ZW5jZSxcbiAgICBlbmFibGVNZXNzYWdpbmcsXG4gICAgbWVzc2FnaW5nVmFwaWRLZXksXG4gICAgZW11bGF0b3IsXG4gICAgYXBwSWQsXG4gICAgZW5hYmxlQW5hbHl0aWNzLFxuICAgIGFuYWx5dGljc0NvbmZpZyxcbiAgfTtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gVVRJTElUWTogQ2hlY2sgaWYgcnVubmluZyBpbiBlbXVsYXRvciBtb2RlXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogVmVyaWZpY2Egc2kgbGEgY29uZmlndXJhY2nDs24gdGllbmUgZW11bGFkb3JlcyBoYWJpbGl0YWRvc1xuICovXG5leHBvcnQgZnVuY3Rpb24gaXNFbXVsYXRvck1vZGUoY29uZmlnOiBWYWx0ZWNoRmlyZWJhc2VDb25maWcpOiBib29sZWFuIHtcbiAgcmV0dXJuIGNvbmZpZy5lbXVsYXRvciAhPT0gdW5kZWZpbmVkO1xufVxuIl19
147
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hhcmVkLWNvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvc2VydmljZXMvZmlyZWJhc2Uvc2hhcmVkLWNvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFRSCwrRUFBK0U7QUFDL0Usd0JBQXdCO0FBQ3hCLCtFQUErRTtBQUUvRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBcUJHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHO0lBQzFCLDRDQUE0QztJQUM1QyxNQUFNLEVBQUUsQ0FBQyxLQUFZLEVBQUUsR0FBRyxLQUFlLEVBQVUsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFHLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7SUFFekYseUNBQXlDO0lBQ3pDLFVBQVUsRUFBRSxDQUFDLE1BQWMsRUFBVSxFQUFFLENBQUMsU0FBUyxNQUFNLGFBQWE7SUFFcEUsNENBQTRDO0lBQzVDLFNBQVMsRUFBRSxDQUFDLE1BQWMsRUFBVSxFQUFFLENBQUMsU0FBUyxNQUFNLFlBQVk7SUFFbEUsK0NBQStDO0lBQy9DLFFBQVEsRUFBRSxDQUFDLE1BQWMsRUFBRSxHQUFHLEtBQWUsRUFBVSxFQUFFLENBQ3ZELENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsR0FBRyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDO0lBRWhELDhCQUE4QjtJQUM5QixhQUFhLEVBQUUsQ0FBQyxLQUFZLEVBQUUsTUFBYyxFQUFVLEVBQUUsQ0FDdEQsUUFBUSxLQUFLLFVBQVUsTUFBTSxhQUFhO0lBRTVDLDRCQUE0QjtJQUM1QixXQUFXLEVBQUUsQ0FBQyxLQUFZLEVBQUUsTUFBYyxFQUFFLEdBQUcsS0FBZSxFQUFVLEVBQUUsQ0FDeEUsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQztJQUUvRCx3REFBd0Q7SUFDeEQsTUFBTSxFQUFFLENBQUMsR0FBRyxLQUFlLEVBQVUsRUFBRSxDQUFDLFVBQVUsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRTtDQUNwRSxDQUFDO0FBRUYsK0VBQStFO0FBQy9FLGdDQUFnQztBQUNoQywrRUFBK0U7QUFFL0U7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMEJHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHO0lBQ3pCLG9EQUFvRDtJQUNwRCxNQUFNLEVBQUUsQ0FBQyxLQUFZLEVBQUUsY0FBc0IsRUFBVSxFQUFFLENBQUMsUUFBUSxLQUFLLElBQUksY0FBYyxFQUFFO0lBRTNGLDhEQUE4RDtJQUM5RCxPQUFPLEVBQUUsQ0FBQyxLQUFZLEVBQUUsTUFBYyxFQUFFLGNBQXNCLEVBQVUsRUFBRSxDQUN4RSxRQUFRLEtBQUssVUFBVSxNQUFNLElBQUksY0FBYyxFQUFFO0lBRW5ELDhEQUE4RDtJQUM5RCxNQUFNLEVBQUUsQ0FBQyxLQUFZLEVBQUUsS0FBYSxFQUFFLGNBQXNCLEVBQVUsRUFBRSxDQUN0RSxRQUFRLEtBQUssU0FBUyxLQUFLLElBQUksY0FBYyxFQUFFO0lBRWpELG1FQUFtRTtJQUNuRSxVQUFVLEVBQUUsQ0FBQyxLQUFZLEVBQUUsTUFBYyxFQUFVLEVBQUUsQ0FBQyxRQUFRLEtBQUssYUFBYSxNQUFNLEVBQUU7SUFFeEYsa0RBQWtEO0lBQ2xELGlCQUFpQixFQUFFLENBQUMsTUFBYyxFQUFVLEVBQUUsQ0FBQyxTQUFTLE1BQU0sZ0JBQWdCO0lBRTlFLG1EQUFtRDtJQUNuRCxNQUFNLEVBQUU7UUFDTiwwQ0FBMEM7UUFDMUMsS0FBSyxFQUFFLE9BQU87UUFDZCxtREFBbUQ7UUFDbkQsUUFBUSxFQUFFLFVBQVU7S0FDckI7Q0FDRixDQUFDO0FBa0NGOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F3Qkc7QUFDSCxNQUFNLFVBQVUsb0JBQW9CLENBQ2xDLE1BQXNCLEVBQ3RCLFVBQXVDLEVBQUU7SUFFekMsTUFBTSxFQUFFLFFBQVEsRUFBRSxXQUFXLEdBQUcsSUFBSSxFQUFFLEtBQUssRUFBRSxlQUFlLEVBQUUsZUFBZSxFQUFFLEdBQUcsT0FBTyxDQUFDO0lBRTFGLG9FQUFvRTtJQUNwRSxNQUFNLEVBQUUsZUFBZSxHQUFHLEtBQUssRUFBRSxpQkFBaUIsRUFBRSxHQUFHLFlBQVksRUFBRSxHQUFHLE1BQU0sQ0FBQztJQUUvRSxPQUFPO1FBQ0wsUUFBUSxFQUFFLFlBQThCO1FBQ3hDLFdBQVc7UUFDWCxlQUFlO1FBQ2YsaUJBQWlCO1FBQ2pCLFFBQVE7UUFDUixLQUFLO1FBQ0wsZUFBZTtRQUNmLGVBQWU7S0FDaEIsQ0FBQztBQUNKLENBQUM7QUFFRCwrRUFBK0U7QUFDL0UsNkNBQTZDO0FBQzdDLCtFQUErRTtBQUUvRTs7R0FFRztBQUNILE1BQU0sVUFBVSxjQUFjLENBQUMsTUFBNkI7SUFDMUQsT0FBTyxNQUFNLENBQUMsUUFBUSxLQUFLLFNBQVMsQ0FBQztBQUN2QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBGaXJlYmFzZSBTaGFyZWQgQ29uZmlndXJhdGlvblxuICpcbiAqIFV0aWxpZGFkZXMgZ2Vuw6lyaWNhcyBwYXJhIGNvbmZpZ3VyYWNpw7NuIGRlIEZpcmViYXNlLlxuICogTGFzIGNvbnN0YW50ZXMgZXNwZWPDrWZpY2FzIGRlbCBwcm95ZWN0byAoQVBQX0lEUywgRklSRUJBU0VfUFJPSkVDVFMsIEVNVUxBVE9SX0NPTkZJRylcbiAqIGRlYmVuIGRlZmluaXJzZSBlbiBjYWRhIGFwcCBjb25zdW1pZG9yYS5cbiAqL1xuXG5pbXBvcnQgeyBBcHBJZCwgRW11bGF0b3JDb25maWcsIEZpcmViYXNlQ29uZmlnLCBWYWx0ZWNoRmlyZWJhc2VDb25maWcgfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB0eXBlIHsgQW5hbHl0aWNzQ29uZmlnIH0gZnJvbSAnLi9hbmFseXRpY3MtdHlwZXMnO1xuXG4vLyBSZS1leHBvcnQgdHlwZXMgZm9yIGNvbnZlbmllbmNlXG5leHBvcnQgdHlwZSB7IEFwcElkIH0gZnJvbSAnLi90eXBlcyc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFNUT1JBR0UgUEFUSCBCVUlMREVSU1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKipcbiAqIEdlbmVyYSBwYXRocyBkZSBTdG9yYWdlIGFsaW5lYWRvcyBjb24gc3RvcmFnZS5ydWxlcy5cbiAqXG4gKiBDb252ZW5jaW9uZXMgKHZlciBmcm9udGVuZC9maXJlYmFzZS9zdG9yYWdlLnJ1bGVzKTpcbiAqIC0gQXZhdGFyIGdsb2JhbCBkZWwgdXNlciAoY3Jvc3MtYXBwKTogL3VzZXJzL3t1aWR9L2F2YXRhci5qcGdcbiAqIC0gRmlsZXMgcHJpdmFkb3MgZGVsIHVzZXIgKGNyb3NzLWFwcCk6IC91c2Vycy97dWlkfS9maWxlcy97cGF0aH1cbiAqIC0gQXZhdGFyIHBlci1hcHAgZGVsIHVzZXI6IC9hcHBzL3thcHBJZH0vdXNlcnMve3VpZH0vYXZhdGFyLmpwZ1xuICogLSBGaWxlcyBwZXItYXBwIGRlbCB1c2VyOiAvYXBwcy97YXBwSWR9L3VzZXJzL3t1aWR9L2ZpbGVzL3twYXRofVxuICogLSBQdWJsaWMgcGVyLWFwcDogL2FwcHMve2FwcElkfS9wdWJsaWMve3BhdGh9XG4gKiAtIFNoYXJlZCBwZXItYXBwIChhdXRoLW9ubHkpOiAvYXBwcy97YXBwSWR9L3NoYXJlZC97cGF0aH1cbiAqIC0gUHVibGljIGdsb2JhbDogL3B1YmxpYy97cGF0aH1cbiAqXG4gKiBAZXhhbXBsZVxuICogc3RvcmFnZVBhdGhzLmZvckFwcCgnc2hvd2Nhc2UnLCAncHVibGljJywgJ2Jhbm5lci5qcGcnKVxuICogLy8gPT4gJ2FwcHMvc2hvd2Nhc2UvcHVibGljL2Jhbm5lci5qcGcnXG4gKlxuICogc3RvcmFnZVBhdGhzLnVzZXJBdmF0YXIoJ3VzZXIxMjMnKVxuICogLy8gPT4gJ3VzZXJzL3VzZXIxMjMvYXZhdGFyLmpwZydcbiAqXG4gKiBzdG9yYWdlUGF0aHMuYXBwVXNlckZpbGUoJ3Nob3djYXNlJywgJ3VzZXIxMjMnLCAnZG9jLnBkZicpXG4gKiAvLyA9PiAnYXBwcy9zaG93Y2FzZS91c2Vycy91c2VyMTIzL2ZpbGVzL2RvYy5wZGYnXG4gKi9cbmV4cG9ydCBjb25zdCBzdG9yYWdlUGF0aHMgPSB7XG4gIC8qKiBQYXRoIHBlci1hcHA6IGFwcHMve2FwcElkfS97Li4ucGF0aHN9ICovXG4gIGZvckFwcDogKGFwcElkOiBBcHBJZCwgLi4ucGF0aHM6IHN0cmluZ1tdKTogc3RyaW5nID0+IFsnYXBwcycsIGFwcElkLCAuLi5wYXRoc10uam9pbignLycpLFxuXG4gIC8qKiBBdmF0YXIgZ2xvYmFsIGRlbCB1c2VyIChjcm9zcy1hcHApICovXG4gIHVzZXJBdmF0YXI6ICh1c2VySWQ6IHN0cmluZyk6IHN0cmluZyA9PiBgdXNlcnMvJHt1c2VySWR9L2F2YXRhci5qcGdgLFxuXG4gIC8qKiBUaHVtYm5haWwgZ2xvYmFsIGRlbCB1c2VyIChjcm9zcy1hcHApICovXG4gIHVzZXJUaHVtYjogKHVzZXJJZDogc3RyaW5nKTogc3RyaW5nID0+IGB1c2Vycy8ke3VzZXJJZH0vdGh1bWIuanBnYCxcblxuICAvKiogRmlsZSBwcml2YWRvIGdsb2JhbCBkZWwgdXNlciAoY3Jvc3MtYXBwKSAqL1xuICB1c2VyRmlsZTogKHVzZXJJZDogc3RyaW5nLCAuLi5wYXRoczogc3RyaW5nW10pOiBzdHJpbmcgPT5cbiAgICBbJ3VzZXJzJywgdXNlcklkLCAnZmlsZXMnLCAuLi5wYXRoc10uam9pbignLycpLFxuXG4gIC8qKiBBdmF0YXIgcGVyLWFwcCBkZWwgdXNlciAqL1xuICBhcHBVc2VyQXZhdGFyOiAoYXBwSWQ6IEFwcElkLCB1c2VySWQ6IHN0cmluZyk6IHN0cmluZyA9PlxuICAgIGBhcHBzLyR7YXBwSWR9L3VzZXJzLyR7dXNlcklkfS9hdmF0YXIuanBnYCxcblxuICAvKiogRmlsZSBwZXItYXBwIGRlbCB1c2VyICovXG4gIGFwcFVzZXJGaWxlOiAoYXBwSWQ6IEFwcElkLCB1c2VySWQ6IHN0cmluZywgLi4ucGF0aHM6IHN0cmluZ1tdKTogc3RyaW5nID0+XG4gICAgWydhcHBzJywgYXBwSWQsICd1c2VycycsIHVzZXJJZCwgJ2ZpbGVzJywgLi4ucGF0aHNdLmpvaW4oJy8nKSxcblxuICAvKiogUHVibGljIGdsb2JhbCAoYWNjZXNvIHNpbiBhdXRoLCB3cml0ZSBhZG1pbi1vbmx5KSAqL1xuICBwdWJsaWM6ICguLi5wYXRoczogc3RyaW5nW10pOiBzdHJpbmcgPT4gYHB1YmxpYy8ke3BhdGhzLmpvaW4oJy8nKX1gLFxufTtcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gRklSRVNUT1JFIENPTExFQ1RJT04gQlVJTERFUlNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBHZW5lcmEgcGF0aHMgZGUgY29sZWNjaW9uZXMgYWxpbmVhZG9zIGNvbiBmaXJlc3RvcmUucnVsZXMuXG4gKlxuICogQ29udmVuY2lvbmVzICh2ZXIgZnJvbnRlbmQvZmlyZWJhc2UvZmlyZXN0b3JlLnJ1bGVzKTpcbiAqIC0gQ3Jvc3MtYXBwIHNoYXJlZDpcbiAqICAgL3VzZXJzL3t1aWR9IChwcml2YWRvKSwgL3Byb2ZpbGVzL3t1aWR9IChww7pibGljbyBnbG9iYWwpLFxuICogICAvdXNlcnMve3VpZH0vbm90aWZpY2F0aW9ucyAoSU5CT1ggR0xPQkFMIGNyb3NzLWFwcCBjcm9zcy1vcmcpXG4gKiAtIFBlci1hcHA6XG4gKiAgIC9hcHBzL3thcHBJZH0ve2NvbGxlY3Rpb259LCAvYXBwcy97YXBwSWR9L3Byb2ZpbGVzL3t1aWR9XG4gKiAtIFBlci1hcHAgcGVyLXVzZXIgKG5vdGlmaWNhdGlvbnMgTk8gdml2ZW4gYXF1w60pOlxuICogICAvYXBwcy97YXBwSWR9L3VzZXJzL3t1aWR9L3tjb2xsZWN0aW9ufVxuICogLSBQZXItYXBwIHBlci1vcmc6XG4gKiAgIC9hcHBzL3thcHBJZH0vb3Jncy97b3JnSWR9L3tjb2xsZWN0aW9ufVxuICpcbiAqIEBleGFtcGxlXG4gKiBjb2xsZWN0aW9ucy5mb3JBcHAoJ3Nob3djYXNlJywgJ2l0ZW1zJylcbiAqIC8vID0+ICdhcHBzL3Nob3djYXNlL2l0ZW1zJ1xuICpcbiAqIGNvbGxlY3Rpb25zLmFwcFVzZXIoJ3Nob3djYXNlJywgJ3VzZXIxMjMnLCAnZHJhZnRzJylcbiAqIC8vID0+ICdhcHBzL3Nob3djYXNlL3VzZXJzL3VzZXIxMjMvZHJhZnRzJ1xuICpcbiAqIGNvbGxlY3Rpb25zLmFwcE9yZygnc2hvd2Nhc2UnLCAnb3JnX2FiYycsICdwb3N0cycpXG4gKiAvLyA9PiAnYXBwcy9zaG93Y2FzZS9vcmdzL29yZ19hYmMvcG9zdHMnXG4gKlxuICogY29sbGVjdGlvbnMudXNlck5vdGlmaWNhdGlvbnMoJ3VzZXIxMjMnKVxuICogLy8gPT4gJ3VzZXJzL3VzZXIxMjMvbm90aWZpY2F0aW9ucydcbiAqL1xuZXhwb3J0IGNvbnN0IGNvbGxlY3Rpb25zID0ge1xuICAvKiogUGVyLWFwcCBjcm9zcy11c2VyOiBhcHBzL3thcHBJZH0ve2NvbGxlY3Rpb259ICovXG4gIGZvckFwcDogKGFwcElkOiBBcHBJZCwgY29sbGVjdGlvbk5hbWU6IHN0cmluZyk6IHN0cmluZyA9PiBgYXBwcy8ke2FwcElkfS8ke2NvbGxlY3Rpb25OYW1lfWAsXG5cbiAgLyoqIFBlci1hcHAgcGVyLXVzZXI6IGFwcHMve2FwcElkfS91c2Vycy97dWlkfS97Y29sbGVjdGlvbn0gKi9cbiAgYXBwVXNlcjogKGFwcElkOiBBcHBJZCwgdXNlcklkOiBzdHJpbmcsIGNvbGxlY3Rpb25OYW1lOiBzdHJpbmcpOiBzdHJpbmcgPT5cbiAgICBgYXBwcy8ke2FwcElkfS91c2Vycy8ke3VzZXJJZH0vJHtjb2xsZWN0aW9uTmFtZX1gLFxuXG4gIC8qKiBQZXItYXBwIHBlci1vcmc6IGFwcHMve2FwcElkfS9vcmdzL3tvcmdJZH0ve2NvbGxlY3Rpb259ICovXG4gIGFwcE9yZzogKGFwcElkOiBBcHBJZCwgb3JnSWQ6IHN0cmluZywgY29sbGVjdGlvbk5hbWU6IHN0cmluZyk6IHN0cmluZyA9PlxuICAgIGBhcHBzLyR7YXBwSWR9L29yZ3MvJHtvcmdJZH0vJHtjb2xsZWN0aW9uTmFtZX1gLFxuXG4gIC8qKiBQZXItYXBwIHBlcmZpbCBww7pibGljbyBkZWwgdXNlcjogYXBwcy97YXBwSWR9L3Byb2ZpbGVzL3t1aWR9ICovXG4gIGFwcFByb2ZpbGU6IChhcHBJZDogQXBwSWQsIHVzZXJJZDogc3RyaW5nKTogc3RyaW5nID0+IGBhcHBzLyR7YXBwSWR9L3Byb2ZpbGVzLyR7dXNlcklkfWAsXG5cbiAgLyoqIEluYm94IGdsb2JhbCBkZWwgdXNlciAoY3Jvc3MtYXBwIGNyb3NzLW9yZykgKi9cbiAgdXNlck5vdGlmaWNhdGlvbnM6ICh1c2VySWQ6IHN0cmluZyk6IHN0cmluZyA9PiBgdXNlcnMvJHt1c2VySWR9L25vdGlmaWNhdGlvbnNgLFxuXG4gIC8qKiBDcm9zcy1hcHAgc2hhcmVkIChzaW4gbmFtZXNwYWNlLCBuaXZlbCByYcOteikgKi9cbiAgc2hhcmVkOiB7XG4gICAgLyoqIERvYyBwcml2YWRvIGRlbCB1c2VyIOKAlCAvdXNlcnMve3VpZH0gKi9cbiAgICB1c2VyczogJ3VzZXJzJyxcbiAgICAvKiogUGVyZmlsZXMgcMO6YmxpY29zIGdsb2JhbGVzIOKAlCAvcHJvZmlsZXMve3VpZH0gKi9cbiAgICBwcm9maWxlczogJ3Byb2ZpbGVzJyxcbiAgfSxcbn07XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIEhFTFBFUjogQ3JlYXRlIEZpcmViYXNlIENvbmZpZyBmcm9tIEVudmlyb25tZW50XG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogT3BjaW9uZXMgcGFyYSBjcmVhciBsYSBjb25maWd1cmFjacOzbiBkZSBGaXJlYmFzZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIENyZWF0ZUZpcmViYXNlQ29uZmlnT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBDb25maWd1cmFjacOzbiBkZSBlbXVsYWRvcmVzIChwYXJhIGRlc2Fycm9sbG8gbG9jYWwpLlxuICAgKiBQYXNhIHR1IHByb3BpYSBjb25maWd1cmFjacOzbiBjb24gaG9zdHMgeSBwdWVydG9zLlxuICAgKi9cbiAgZW11bGF0b3I/OiBFbXVsYXRvckNvbmZpZztcbiAgLyoqIEhhYmlsaXRhciBwZXJzaXN0ZW5jaWEgb2ZmbGluZSBkZSBGaXJlc3RvcmUgKi9cbiAgcGVyc2lzdGVuY2U/OiBib29sZWFuO1xuICAvKipcbiAgICogSUQgZGUgbGEgYXBsaWNhY2nDs24gcGFyYSBuYW1lc3BhY2luZyBhdXRvbcOhdGljby5cbiAgICogQ3VhbmRvIHNlIGNvbmZpZ3VyYSwgRmlyZXN0b3JlU2VydmljZSB5IFN0b3JhZ2VTZXJ2aWNlIHByZWZpamFuIGF1dG9tw6F0aWNhbWVudGUgbG9zIHBhdGhzLlxuICAgKi9cbiAgYXBwSWQ/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBIYWJpbGl0YXIgRmlyZWJhc2UgQW5hbHl0aWNzIC8gR0E0LlxuICAgKiBSZXF1aWVyZSBtZWFzdXJlbWVudElkIGVuIGZpcmViYXNlIGNvbmZpZy5cbiAgICovXG4gIGVuYWJsZUFuYWx5dGljcz86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBDb25maWd1cmFjacOzbiBkZXRhbGxhZGEgZGUgQW5hbHl0aWNzLlxuICAgKiBTb2xvIGFwbGljYSBzaSBlbmFibGVBbmFseXRpY3MgZXMgdHJ1ZS5cbiAgICovXG4gIGFuYWx5dGljc0NvbmZpZz86IEFuYWx5dGljc0NvbmZpZztcbn1cblxuLyoqXG4gKiBDcmVhIGxhIGNvbmZpZ3VyYWNpw7NuIGNvbXBsZXRhIGRlIEZpcmViYXNlIGRlc2RlIHZhcmlhYmxlcyBkZSBlbnRvcm5vLlxuICogVXNhIGVzdG8gZW4gZWwgZW52aXJvbm1lbnQudHMgZGUgY2FkYSBhcHAuXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIGVudmlyb25tZW50LnRzXG4gKiBpbXBvcnQgeyBjcmVhdGVGaXJlYmFzZUNvbmZpZyB9IGZyb20gJ3ZhbHRlY2gtY29tcG9uZW50cyc7XG4gKiBpbXBvcnQgeyBBUFBfSURTLCBFTVVMQVRPUl9DT05GSUcsIFVTRV9FTVVMQVRPUlMgfSBmcm9tICcuLi9jb25maWcvYXBwLWNvbmZpZyc7XG4gKiBpbXBvcnQgZmlyZWJhc2VDb25maWcgZnJvbSAnLi4vY29uZmlnL2ZpcmViYXNlLmNvbmZpZy5qc29uJztcbiAqXG4gKiBleHBvcnQgY29uc3QgZW52aXJvbm1lbnQgPSB7XG4gKiAgIHZhbHRlY2hGaXJlYmFzZTogY3JlYXRlRmlyZWJhc2VDb25maWcoXG4gKiAgICAge1xuICogICAgICAgLi4uZmlyZWJhc2VDb25maWcsXG4gKiAgICAgICBlbmFibGVNZXNzYWdpbmc6IHRydWUsXG4gKiAgICAgICBtZXNzYWdpbmdWYXBpZEtleTogJ0JITHguLi4nLFxuICogICAgIH0sXG4gKiAgICAge1xuICogICAgICAgZW11bGF0b3I6IFVTRV9FTVVMQVRPUlMgPyBFTVVMQVRPUl9DT05GSUcgOiB1bmRlZmluZWQsXG4gKiAgICAgICBwZXJzaXN0ZW5jZTogdHJ1ZSxcbiAqICAgICAgIGFwcElkOiBBUFBfSURTLk1ZX0FQUCxcbiAqICAgICB9XG4gKiAgICksXG4gKiB9O1xuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRmlyZWJhc2VDb25maWcoXG4gIGNvbmZpZzogRmlyZWJhc2VDb25maWcsXG4gIG9wdGlvbnM6IENyZWF0ZUZpcmViYXNlQ29uZmlnT3B0aW9ucyA9IHt9XG4pOiBWYWx0ZWNoRmlyZWJhc2VDb25maWcge1xuICBjb25zdCB7IGVtdWxhdG9yLCBwZXJzaXN0ZW5jZSA9IHRydWUsIGFwcElkLCBlbmFibGVBbmFseXRpY3MsIGFuYWx5dGljc0NvbmZpZyB9ID0gb3B0aW9ucztcblxuICAvLyBFeHRyYWVyIGNhbXBvcyBkZSBtZXNzYWdpbmcgZGVsIGNvbmZpZyAobnVldm9zIGNhbXBvcyBvcGNpb25hbGVzKVxuICBjb25zdCB7IGVuYWJsZU1lc3NhZ2luZyA9IGZhbHNlLCBtZXNzYWdpbmdWYXBpZEtleSwgLi4uZmlyZWJhc2VDb3JlIH0gPSBjb25maWc7XG5cbiAgcmV0dXJuIHtcbiAgICBmaXJlYmFzZTogZmlyZWJhc2VDb3JlIGFzIEZpcmViYXNlQ29uZmlnLFxuICAgIHBlcnNpc3RlbmNlLFxuICAgIGVuYWJsZU1lc3NhZ2luZyxcbiAgICBtZXNzYWdpbmdWYXBpZEtleSxcbiAgICBlbXVsYXRvcixcbiAgICBhcHBJZCxcbiAgICBlbmFibGVBbmFseXRpY3MsXG4gICAgYW5hbHl0aWNzQ29uZmlnLFxuICB9O1xufVxuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBVVElMSVRZOiBDaGVjayBpZiBydW5uaW5nIGluIGVtdWxhdG9yIG1vZGVcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqXG4gKiBWZXJpZmljYSBzaSBsYSBjb25maWd1cmFjacOzbiB0aWVuZSBlbXVsYWRvcmVzIGhhYmlsaXRhZG9zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0VtdWxhdG9yTW9kZShjb25maWc6IFZhbHRlY2hGaXJlYmFzZUNvbmZpZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gY29uZmlnLmVtdWxhdG9yICE9PSB1bmRlZmluZWQ7XG59XG4iXX0=
@@ -2,5 +2,5 @@
2
2
  * Current version of valtech-components.
3
3
  * This is automatically updated during the publish process.
4
4
  */
5
- export const VERSION = '2.0.725';
6
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvdmVyc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDdXJyZW50IHZlcnNpb24gb2YgdmFsdGVjaC1jb21wb25lbnRzLlxuICogVGhpcyBpcyBhdXRvbWF0aWNhbGx5IHVwZGF0ZWQgZHVyaW5nIHRoZSBwdWJsaXNoIHByb2Nlc3MuXG4gKi9cbmV4cG9ydCBjb25zdCBWRVJTSU9OID0gJzIuMC43MjUnO1xuIl19
5
+ export const VERSION = '2.0.726';
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvdmVyc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDdXJyZW50IHZlcnNpb24gb2YgdmFsdGVjaC1jb21wb25lbnRzLlxuICogVGhpcyBpcyBhdXRvbWF0aWNhbGx5IHVwZGF0ZWQgZHVyaW5nIHRoZSBwdWJsaXNoIHByb2Nlc3MuXG4gKi9cbmV4cG9ydCBjb25zdCBWRVJTSU9OID0gJzIuMC43MjYnO1xuIl19