valtech-components 4.0.570 → 4.0.572

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.
@@ -1,7 +1,7 @@
1
1
  import { Injectable, inject } from '@angular/core';
2
2
  import { Auth } from '@angular/fire/auth';
3
3
  import { Firestore, collection, doc, getDoc, limit, onSnapshot, orderBy, query, serverTimestamp, setDoc, writeBatch, } from '@angular/fire/firestore';
4
- import { Observable, of } from 'rxjs';
4
+ import { from, Observable, of, switchMap } from 'rxjs';
5
5
  import { FirebaseService } from '../../../services/firebase/firebase.service';
6
6
  import { chooseActiveChessimalsChallengeRun, normalizeChessimalsChallengeRun } from './chessimals-challenge-state';
7
7
  import * as i0 from "@angular/core";
@@ -19,40 +19,41 @@ export class ChessimalsChallengeProgressService {
19
19
  return this.firebaseAuth.currentUser?.uid;
20
20
  }
21
21
  watchStats() {
22
- const uid = this.currentUid;
23
- if (!uid)
24
- return of(undefined);
25
- return new Observable((subscriber) => {
22
+ return this.watchWhenFirebaseAuthReady(undefined, (uid) => new Observable((subscriber) => {
26
23
  const unsubscribe = onSnapshot(this.statsRef(uid), (snapshot) => subscriber.next(snapshot.exists() ? this.normalizeStats(snapshot.data()) : undefined), (error) => subscriber.error(error));
27
24
  return unsubscribe;
28
- });
25
+ }));
29
26
  }
30
27
  watchRecentRuns(limitCount = 4) {
31
- const uid = this.currentUid;
32
- if (!uid)
33
- return of([]);
34
- const runsQuery = query(collection(this.firestore, this.runsPath(uid)), orderBy('updatedAt', 'desc'), limit(limitCount));
35
- return new Observable((subscriber) => {
36
- const unsubscribe = onSnapshot(runsQuery, (snapshot) => subscriber.next(snapshot.docs.map((item) => this.normalizeRun(item.data()))), (error) => subscriber.error(error));
37
- return unsubscribe;
28
+ return this.watchWhenFirebaseAuthReady([], (uid) => {
29
+ const runsQuery = query(collection(this.firestore, this.runsPath(uid)), orderBy('updatedAt', 'desc'), limit(limitCount));
30
+ return new Observable((subscriber) => {
31
+ const unsubscribe = onSnapshot(runsQuery, (snapshot) => subscriber.next(snapshot.docs.map((item) => this.normalizeRun(item.data()))), (error) => subscriber.error(error));
32
+ return unsubscribe;
33
+ });
38
34
  });
39
35
  }
40
36
  watchActiveRun() {
41
- const uid = this.currentUid;
42
- if (!uid)
43
- return of(undefined);
44
- const activeQuery = query(collection(this.firestore, this.runsPath(uid)), orderBy('updatedAt', 'desc'), limit(ACTIVE_RUN_QUERY_LIMIT));
45
- return new Observable((subscriber) => {
46
- subscriber.next(this.readLocalActiveRun(uid));
47
- const unsubscribe = onSnapshot(activeQuery, (snapshot) => {
48
- const remoteRun = chooseActiveChessimalsChallengeRun(snapshot.docs.map((item) => item.data()), uid);
49
- const next = this.newestActiveRun(this.readLocalActiveRun(uid), remoteRun);
50
- this.writeLocalActiveRun(uid, next);
51
- subscriber.next(next);
52
- }, () => subscriber.next(this.readLocalActiveRun(uid)));
53
- return unsubscribe;
37
+ return this.watchWhenFirebaseAuthReady(undefined, (uid) => {
38
+ const activeQuery = query(collection(this.firestore, this.runsPath(uid)), orderBy('updatedAt', 'desc'), limit(ACTIVE_RUN_QUERY_LIMIT));
39
+ return new Observable((subscriber) => {
40
+ subscriber.next(this.readLocalActiveRun(uid));
41
+ const unsubscribe = onSnapshot(activeQuery, (snapshot) => {
42
+ const remoteRun = chooseActiveChessimalsChallengeRun(snapshot.docs.map((item) => item.data()), uid);
43
+ const next = this.newestActiveRun(this.readLocalActiveRun(uid), remoteRun);
44
+ this.writeLocalActiveRun(uid, next);
45
+ subscriber.next(next);
46
+ }, () => subscriber.next(this.readLocalActiveRun(uid)));
47
+ return unsubscribe;
48
+ });
54
49
  });
55
50
  }
51
+ watchWhenFirebaseAuthReady(fallback, createWatcher) {
52
+ return from(this.firebase.whenFirebaseAuthReady()).pipe(switchMap(() => {
53
+ const uid = this.currentUid;
54
+ return uid ? createWatcher(uid) : of(fallback);
55
+ }));
56
+ }
56
57
  async saveRun(run) {
57
58
  const uid = await this.ensureUser();
58
59
  const normalizedRun = this.normalizeRun(run, uid);
@@ -318,4 +319,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
318
319
  type: Injectable,
319
320
  args: [{ providedIn: 'root' }]
320
321
  }] });
321
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlc3NpbWFscy1jaGFsbGVuZ2UtcHJvZ3Jlc3Muc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9vcmdhbmlzbXMvbWluaS1nYW1lcy9jaGVzc2ltYWxzLWNoYWxsZW5nZS1wcm9ncmVzcy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUMxQyxPQUFPLEVBQ0wsU0FBUyxFQUNULFVBQVUsRUFDVixHQUFHLEVBQ0gsTUFBTSxFQUNOLEtBQUssRUFDTCxVQUFVLEVBQ1YsT0FBTyxFQUNQLEtBQUssRUFDTCxlQUFlLEVBQ2YsTUFBTSxFQUNOLFVBQVUsR0FDWCxNQUFNLHlCQUF5QixDQUFDO0FBQ2pDLE9BQU8sRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRXRDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUM5RSxPQUFPLEVBQUUsa0NBQWtDLEVBQUUsK0JBQStCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQzs7QUFRbkgsTUFBTSxZQUFZLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDakUsTUFBTSxpQkFBaUIsR0FBRyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDNUQsTUFBTSxvQkFBb0IsR0FBRyxnQ0FBZ0MsQ0FBQztBQUM5RCxNQUFNLHNCQUFzQixHQUFHLEVBQUUsQ0FBQztBQUdsQyxNQUFNLE9BQU8sa0NBQWtD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O1lBQ3hELElBQUksS0FBSyxLQUFLLFNBQVM7Z0JBQUUsR0FBRyxDQUFDLEdBQWMsQ0FBQyxHQUFHLEtBQW1CLENBQUM7WUFDbkUsT0FBTyxHQUFHLENBQUM7UUFDYixDQUFDLEVBQUUsRUFBTyxDQUFDLENBQUM7SUFDZCxDQUFDOytHQTlWVSxrQ0FBa0M7bUhBQWxDLGtDQUFrQyxjQURyQixNQUFNOzs0RkFDbkIsa0NBQWtDO2tCQUQ5QyxVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQXV0aCB9IGZyb20gJ0Bhbmd1bGFyL2ZpcmUvYXV0aCc7XG5pbXBvcnQge1xuICBGaXJlc3RvcmUsXG4gIGNvbGxlY3Rpb24sXG4gIGRvYyxcbiAgZ2V0RG9jLFxuICBsaW1pdCxcbiAgb25TbmFwc2hvdCxcbiAgb3JkZXJCeSxcbiAgcXVlcnksXG4gIHNlcnZlclRpbWVzdGFtcCxcbiAgc2V0RG9jLFxuICB3cml0ZUJhdGNoLFxufSBmcm9tICdAYW5ndWxhci9maXJlL2ZpcmVzdG9yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBvZiB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBGaXJlYmFzZVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9maXJlYmFzZS9maXJlYmFzZS5zZXJ2aWNlJztcbmltcG9ydCB7IGNob29zZUFjdGl2ZUNoZXNzaW1hbHNDaGFsbGVuZ2VSdW4sIG5vcm1hbGl6ZUNoZXNzaW1hbHNDaGFsbGVuZ2VSdW4gfSBmcm9tICcuL2NoZXNzaW1hbHMtY2hhbGxlbmdlLXN0YXRlJztcbmltcG9ydCB7XG4gIENoZXNzaW1hbHNDaGFsbGVuZ2VSb3VuZFN0YXRzLFxuICBDaGVzc2ltYWxzQ2hhbGxlbmdlUnVuLFxuICBDaGVzc2ltYWxzQ2hhbGxlbmdlU3RhdHMsXG4gIENoZXNzaW1hbHNTdGF0c01vZGUsXG59IGZyb20gJy4vdHlwZXMnO1xuXG5jb25zdCBFTVBUWV9QT1dFUlMgPSB7IGVhZ2xlOiAwLCBidWxsOiAwLCBrYW5nYXJvbzogMCwgbGlvbjogMCB9O1xuY29uc3QgRU1QVFlfTU9ERV9SRUNPUkQgPSB7IHBsYXllZDogMCwgd2luczogMCwgbG9zc2VzOiAwIH07XG5jb25zdCBMT0NBTF9BQ1RJVkVfUlVOX0tFWSA9ICdjaGVzc2ltYWxzLmNoYWxsZW5nZS5hY3RpdmVSdW4nO1xuY29uc3QgQUNUSVZFX1JVTl9RVUVSWV9MSU1JVCA9IDEyO1xuXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIENoZXNzaW1hbHNDaGFsbGVuZ2VQcm9ncmVzc1NlcnZpY2Uge1xuICBwcml2YXRlIHJlYWRvbmx5IGZpcmViYXNlQXV0aCA9IGluamVjdChBdXRoKTtcbiAgcHJpdmF0ZSByZWFkb25seSBmaXJlc3RvcmUgPSBpbmplY3QoRmlyZXN0b3JlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBmaXJlYmFzZSA9IGluamVjdChGaXJlYmFzZVNlcnZpY2UpO1xuXG4gIGdldCBjdXJyZW50VWlkKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuZmlyZWJhc2VBdXRoLmN1cnJlbnRVc2VyPy51aWQ7XG4gIH1cblxuICB3YXRjaFN0YXRzKCk6IE9ic2VydmFibGU8Q2hlc3NpbWFsc0NoYWxsZW5nZVN0YXRzIHwgdW5kZWZpbmVkPiB7XG4gICAgY29uc3QgdWlkID0gdGhpcy5jdXJyZW50VWlkO1xuICAgIGlmICghdWlkKSByZXR1cm4gb2YodW5kZWZpbmVkKTtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoKHN1YnNjcmliZXIpID0+IHtcbiAgICAgIGNvbnN0IHVuc3Vic2NyaWJlID0gb25TbmFwc2hvdChcbiAgICAgICAgdGhpcy5zdGF0c1JlZih1aWQpLFxuICAgICAgICAoc25hcHNob3QpID0+IHN1YnNjcmliZXIubmV4dChcbiAgICAgICAgICBzbmFwc2hvdC5leGlzdHMoKSA/IHRoaXMubm9ybWFsaXplU3RhdHMoc25hcHNob3QuZGF0YSgpIGFzIFBhcnRpYWw8Q2hlc3NpbWFsc0NoYWxsZW5nZVN0YXRzPikgOiB1bmRlZmluZWQsXG4gICAgICAgICksXG4gICAgICAgIChlcnJvcikgPT4gc3Vic2NyaWJlci5lcnJvcihlcnJvciksXG4gICAgICApO1xuICAgICAgcmV0dXJuIHVuc3Vic2NyaWJlO1xuICAgIH0pO1xuICB9XG5cbiAgd2F0Y2hSZWNlbnRSdW5zKGxpbWl0Q291bnQgPSA0KTogT2JzZXJ2YWJsZTxDaGVzc2ltYWxzQ2hhbGxlbmdlUnVuW10+IHtcbiAgICBjb25zdCB1aWQgPSB0aGlzLmN1cnJlbnRVaWQ7XG4gICAgaWYgKCF1aWQpIHJldHVybiBvZihbXSk7XG4gICAgY29uc3QgcnVuc1F1ZXJ5ID0gcXVlcnkoXG4gICAgICBjb2xsZWN0aW9uKHRoaXMuZmlyZXN0b3JlLCB0aGlzLnJ1bnNQYXRoKHVpZCkpLFxuICAgICAgb3JkZXJCeSgndXBkYXRlZEF0JywgJ2Rlc2MnKSxcbiAgICAgIGxpbWl0KGxpbWl0Q291bnQpLFxuICAgICk7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKChzdWJzY3JpYmVyKSA9PiB7XG4gICAgICBjb25zdCB1bnN1YnNjcmliZSA9IG9uU25hcHNob3QoXG4gICAgICAgIHJ1bnNRdWVyeSxcbiAgICAgICAgKHNuYXBzaG90KSA9PiBzdWJzY3JpYmVyLm5leHQoXG4gICAgICAgICAgc25hcHNob3QuZG9jcy5tYXAoKGl0ZW0pID0+IHRoaXMubm9ybWFsaXplUnVuKGl0ZW0uZGF0YSgpIGFzIFBhcnRpYWw8Q2hlc3NpbWFsc0NoYWxsZW5nZVJ1bj4pKSxcbiAgICAgICAgKSxcbiAgICAgICAgKGVycm9yKSA9PiBzdWJzY3JpYmVyLmVycm9yKGVycm9yKSxcbiAgICAgICk7XG4gICAgICByZXR1cm4gdW5zdWJzY3JpYmU7XG4gICAgfSk7XG4gIH1cblxuICB3YXRjaEFjdGl2ZVJ1bigpOiBPYnNlcnZhYmxlPENoZXNzaW1hbHNDaGFsbGVuZ2VSdW4gfCB1bmRlZmluZWQ+IHtcbiAgICBjb25zdCB1aWQgPSB0aGlzLmN1cnJlbnRVaWQ7XG4gICAgaWYgKCF1aWQpIHJldHVybiBvZih1bmRlZmluZWQpO1xuICAgIGNvbnN0IGFjdGl2ZVF1ZXJ5ID0gcXVlcnkoXG4gICAgICBjb2xsZWN0aW9uKHRoaXMuZmlyZXN0b3JlLCB0aGlzLnJ1bnNQYXRoKHVpZCkpLFxuICAgICAgb3JkZXJCeSgndXBkYXRlZEF0JywgJ2Rlc2MnKSxcbiAgICAgIGxpbWl0KEFDVElWRV9SVU5fUVVFUllfTElNSVQpLFxuICAgICk7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKChzdWJzY3JpYmVyKSA9PiB7XG4gICAgICBzdWJzY3JpYmVyLm5leHQodGhpcy5yZWFkTG9jYWxBY3RpdmVSdW4odWlkKSk7XG4gICAgICBjb25zdCB1bnN1YnNjcmliZSA9IG9uU25hcHNob3QoXG4gICAgICAgIGFjdGl2ZVF1ZXJ5LFxuICAgICAgICAoc25hcHNob3QpID0+IHtcbiAgICAgICAgICBjb25zdCByZW1vdGVSdW4gPSBjaG9vc2VBY3RpdmVDaGVzc2ltYWxzQ2hhbGxlbmdlUnVuKFxuICAgICAgICAgICAgc25hcHNob3QuZG9jcy5tYXAoKGl0ZW0pID0+IGl0ZW0uZGF0YSgpIGFzIFBhcnRpYWw8Q2hlc3NpbWFsc0NoYWxsZW5nZVJ1bj4pLFxuICAgICAgICAgICAgdWlkLFxuICAgICAgICAgICk7XG4gICAgICAgICAgY29uc3QgbmV4dCA9IHRoaXMubmV3ZXN0QWN0aXZlUnVuKHRoaXMucmVhZExvY2FsQWN0aXZlUnVuKHVpZCksIHJlbW90ZVJ1bik7XG4gICAgICAgICAgdGhpcy53cml0ZUxvY2FsQWN0aXZlUnVuKHVpZCwgbmV4dCk7XG4gICAgICAgICAgc3Vic2NyaWJlci5uZXh0KG5leHQpO1xuICAgICAgICB9LFxuICAgICAgICAoKSA9PiBzdWJzY3JpYmVyLm5leHQodGhpcy5yZWFkTG9jYWxBY3RpdmVSdW4odWlkKSksXG4gICAgICApO1xuICAgICAgcmV0dXJuIHVuc3Vic2NyaWJlO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgc2F2ZVJ1bihydW46IENoZXNzaW1hbHNDaGFsbGVuZ2VSdW4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB1aWQgPSBhd2FpdCB0aGlzLmVuc3VyZVVzZXIoKTtcbiAgICBjb25zdCBub3JtYWxpemVkUnVuID0gdGhpcy5ub3JtYWxpemVSdW4ocnVuLCB1aWQpO1xuICAgIGlmIChub3JtYWxpemVkUnVuLnN0YXR1cyA9PT0gJ2FjdGl2ZScpIHRoaXMud3JpdGVMb2NhbEFjdGl2ZVJ1bih1aWQsIG5vcm1hbGl6ZWRSdW4pO1xuICAgIGVsc2UgdGhpcy5jbGVhckxvY2FsQWN0aXZlUnVuKG5vcm1hbGl6ZWRSdW4uaWQsIHVpZCk7XG4gICAgYXdhaXQgc2V0RG9jKHRoaXMucnVuUmVmKHVpZCwgbm9ybWFsaXplZFJ1bi5pZCksIHRoaXMud2l0aG91dFVuZGVmaW5lZCh7XG4gICAgICAuLi5ub3JtYWxpemVkUnVuLFxuICAgICAgdXNlcklkOiB1aWQsXG4gICAgICB1cGRhdGVkQXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgIHVwZGF0ZWRBdFNlcnZlcjogc2VydmVyVGltZXN0YW1wKCksXG4gICAgfSksIHsgbWVyZ2U6IHRydWUgfSk7XG4gIH1cblxuICBhc3luYyByZWNvcmRDaGFsbGVuZ2VTdGFydGVkKHJ1bjogQ2hlc3NpbWFsc0NoYWxsZW5nZVJ1bik6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHVpZCA9IGF3YWl0IHRoaXMuZW5zdXJlVXNlcigpO1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRSdW4gPSB0aGlzLm5vcm1hbGl6ZVJ1bihydW4sIHVpZCk7XG4gICAgdGhpcy53cml0ZUxvY2FsQWN0aXZlUnVuKHVpZCwgbm9ybWFsaXplZFJ1bik7XG4gICAgY29uc3QgY3VycmVudCA9IGF3YWl0IHRoaXMucmVhZFN0YXRzKHVpZCk7XG4gICAgYXdhaXQgc2V0RG9jKHRoaXMuc3RhdHNSZWYodWlkKSwge1xuICAgICAgLi4uY3VycmVudCxcbiAgICAgIHVzZXJJZDogdWlkLFxuICAgICAgY2hhbGxlbmdlc1BsYXllZDogY3VycmVudC5jaGFsbGVuZ2VzUGxheWVkICsgMSxcbiAgICAgIHVwZGF0ZWRBdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgdXBkYXRlZEF0U2VydmVyOiBzZXJ2ZXJUaW1lc3RhbXAoKSxcbiAgICB9LCB7IG1lcmdlOiB0cnVlIH0pO1xuICAgIGF3YWl0IHRoaXMuc2F2ZVJ1bihub3JtYWxpemVkUnVuKTtcbiAgfVxuXG4gIGFzeW5jIGFwcGx5Um91bmRSZXN1bHQoYXJnczoge1xuICAgIHJ1bjogQ2hlc3NpbWFsc0NoYWxsZW5nZVJ1bjtcbiAgICByb3VuZFJlYWNoZWQ6IG51bWJlcjtcbiAgICB3b246IGJvb2xlYW47XG4gICAgY29tcGxldGVkOiBib29sZWFuO1xuICAgIHJvdW5kU3RhdHM6IENoZXNzaW1hbHNDaGFsbGVuZ2VSb3VuZFN0YXRzO1xuICB9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgdWlkID0gYXdhaXQgdGhpcy5lbnN1cmVVc2VyKCk7XG4gICAgY29uc3QgY3VycmVudCA9IGF3YWl0IHRoaXMucmVhZFN0YXRzKHVpZCk7XG4gICAgY29uc3Qgbm9ybWFsaXplZFJ1biA9IHRoaXMubm9ybWFsaXplUnVuKGFyZ3MucnVuLCB1aWQpO1xuICAgIGNvbnN0IG5leHQ6IENoZXNzaW1hbHNDaGFsbGVuZ2VTdGF0cyA9IHtcbiAgICAgIHVzZXJJZDogdWlkLFxuICAgICAgY2hhbGxlbmdlc1BsYXllZDogY3VycmVudC5jaGFsbGVuZ2VzUGxheWVkLFxuICAgICAgY2hhbGxlbmdlc0NvbXBsZXRlZDogY3VycmVudC5jaGFsbGVuZ2VzQ29tcGxldGVkICsgKGFyZ3MuY29tcGxldGVkID8gMSA6IDApLFxuICAgICAgYmVzdFdpblN0cmVhazogTWF0aC5tYXgoY3VycmVudC5iZXN0V2luU3RyZWFrLCBub3JtYWxpemVkUnVuLmJlc3RTdHJlYWtJblJ1biksXG4gICAgICBiZXN0Um91bmRSZWFjaGVkOiBNYXRoLm1heChjdXJyZW50LmJlc3RSb3VuZFJlYWNoZWQsIGFyZ3Mucm91bmRSZWFjaGVkKSxcbiAgICAgIHRvdGFsV2luczogY3VycmVudC50b3RhbFdpbnMgKyAoYXJncy53b24gPyAxIDogMCksXG4gICAgICB0b3RhbExvc3NlczogY3VycmVudC50b3RhbExvc3NlcyArIChhcmdzLndvbiA/IDAgOiAxKSxcbiAgICAgIGJvdHNEZWZlYXRlZDogY3VycmVudC5ib3RzRGVmZWF0ZWQgKyAoYXJncy53b24gPyAxIDogMCksXG4gICAgICBwb3dlcnNVc2VkOiB7XG4gICAgICAgIGVhZ2xlOiBjdXJyZW50LnBvd2Vyc1VzZWQuZWFnbGUgKyBhcmdzLnJvdW5kU3RhdHMucG93ZXJzVXNlZC5lYWdsZSxcbiAgICAgICAgYnVsbDogY3VycmVudC5wb3dlcnNVc2VkLmJ1bGwgKyBhcmdzLnJvdW5kU3RhdHMucG93ZXJzVXNlZC5idWxsLFxuICAgICAgICBrYW5nYXJvbzogY3VycmVudC5wb3dlcnNVc2VkLmthbmdhcm9vICsgYXJncy5yb3VuZFN0YXRzLnBvd2Vyc1VzZWQua2FuZ2Fyb28sXG4gICAgICAgIGxpb246IGN1cnJlbnQucG93ZXJzVXNlZC5saW9uICsgYXJncy5yb3VuZFN0YXRzLnBvd2Vyc1VzZWQubGlvbixcbiAgICAgIH0sXG4gICAgICBwb3dlckNhcHR1cmVzOiBjdXJyZW50LnBvd2VyQ2FwdHVyZXMgKyBhcmdzLnJvdW5kU3RhdHMucG93ZXJDYXB0dXJlcyxcbiAgICAgIHByb21vdGlvbnM6IGN1cnJlbnQucHJvbW90aW9ucyArIGFyZ3Mucm91bmRTdGF0cy5wcm9tb3Rpb25zLFxuICAgICAgdG90YWxTY29yZTogY3VycmVudC50b3RhbFNjb3JlICsgYXJncy5yb3VuZFN0YXRzLnNjb3JlLFxuICAgICAgYmVzdFJvdW5kU2NvcmU6IE1hdGgubWF4KGN1cnJlbnQuYmVzdFJvdW5kU2NvcmUsIGFyZ3Mucm91bmRTdGF0cy5zY29yZSksXG4gICAgICBiZXN0TW92ZVNjb3JlOiBNYXRoLm1heChjdXJyZW50LmJlc3RNb3ZlU2NvcmUsIGFyZ3Mucm91bmRTdGF0cy5iZXN0TW92ZVNjb3JlKSxcbiAgICAgIGJlc3RDb21ibzogTWF0aC5tYXgoY3VycmVudC5iZXN0Q29tYm8sIGFyZ3Mucm91bmRTdGF0cy5iZXN0Q29tYm8pLFxuICAgICAgbW9kZVN0YXRzOiB7XG4gICAgICAgIC4uLmN1cnJlbnQubW9kZVN0YXRzLFxuICAgICAgICBjaGFsbGVuZ2U6IHRoaXMuYWRkTW9kZVJlc3VsdChjdXJyZW50Lm1vZGVTdGF0cy5jaGFsbGVuZ2UsIGFyZ3Mud29uKSxcbiAgICAgIH0sXG4gICAgICB1cGRhdGVkQXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICB9O1xuICAgIGNvbnN0IGJhdGNoID0gd3JpdGVCYXRjaCh0aGlzLmZpcmVzdG9yZSk7XG4gICAgYmF0Y2guc2V0KHRoaXMuc3RhdHNSZWYodWlkKSwgeyAuLi5uZXh0LCB1cGRhdGVkQXRTZXJ2ZXI6IHNlcnZlclRpbWVzdGFtcCgpIH0sIHsgbWVyZ2U6IHRydWUgfSk7XG4gICAgYmF0Y2guc2V0KHRoaXMucnVuUmVmKHVpZCwgbm9ybWFsaXplZFJ1bi5pZCksIHRoaXMud2l0aG91dFVuZGVmaW5lZCh7XG4gICAgICAuLi5ub3JtYWxpemVkUnVuLFxuICAgICAgdXNlcklkOiB1aWQsXG4gICAgICB1cGRhdGVkQXRTZXJ2ZXI6IHNlcnZlclRpbWVzdGFtcCgpLFxuICAgIH0pLCB7IG1lcmdlOiB0cnVlIH0pO1xuICAgIGF3YWl0IGJhdGNoLmNvbW1pdCgpO1xuICAgIHRoaXMud3JpdGVMb2NhbEFjdGl2ZVJ1bih1aWQsIG5vcm1hbGl6ZWRSdW4uc3RhdHVzID09PSAnYWN0aXZlJyA/IG5vcm1hbGl6ZWRSdW4gOiB1bmRlZmluZWQpO1xuICB9XG5cbiAgYXN5bmMgcmVjb3JkTW9kZVJlc3VsdChcbiAgICBtb2RlOiBFeGNsdWRlPENoZXNzaW1hbHNTdGF0c01vZGUsICdjaGFsbGVuZ2UnPixcbiAgICB3b246IGJvb2xlYW4sXG4gICAgcm91bmRTdGF0cz86IENoZXNzaW1hbHNDaGFsbGVuZ2VSb3VuZFN0YXRzLFxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB1aWQgPSBhd2FpdCB0aGlzLmVuc3VyZVVzZXIoKTtcbiAgICBjb25zdCBjdXJyZW50ID0gYXdhaXQgdGhpcy5yZWFkU3RhdHModWlkKTtcbiAgICBhd2FpdCBzZXREb2ModGhpcy5zdGF0c1JlZih1aWQpLCB7XG4gICAgICAuLi5jdXJyZW50LFxuICAgICAgdXNlcklkOiB1aWQsXG4gICAgICBwb3dlcnNVc2VkOiByb3VuZFN0YXRzXG4gICAgICAgID8ge1xuICAgICAgICAgIGVhZ2xlOiBjdXJyZW50LnBvd2Vyc1VzZWQuZWFnbGUgKyByb3VuZFN0YXRzLnBvd2Vyc1VzZWQuZWFnbGUsXG4gICAgICAgICAgYnVsbDogY3VycmVudC5wb3dlcnNVc2VkLmJ1bGwgKyByb3VuZFN0YXRzLnBvd2Vyc1VzZWQuYnVsbCxcbiAgICAgICAgICBrYW5nYXJvbzogY3VycmVudC5wb3dlcnNVc2VkLmthbmdhcm9vICsgcm91bmRTdGF0cy5wb3dlcnNVc2VkLmthbmdhcm9vLFxuICAgICAgICAgIGxpb246IGN1cnJlbnQucG93ZXJzVXNlZC5saW9uICsgcm91bmRTdGF0cy5wb3dlcnNVc2VkLmxpb24sXG4gICAgICAgIH1cbiAgICAgICAgOiBjdXJyZW50LnBvd2Vyc1VzZWQsXG4gICAgICBwb3dlckNhcHR1cmVzOiBjdXJyZW50LnBvd2VyQ2FwdHVyZXMgKyAocm91bmRTdGF0cz8ucG93ZXJDYXB0dXJlcyA/PyAwKSxcbiAgICAgIHByb21vdGlvbnM6IGN1cnJlbnQucHJvbW90aW9ucyArIChyb3VuZFN0YXRzPy5wcm9tb3Rpb25zID8/IDApLFxuICAgICAgdG90YWxTY29yZTogY3VycmVudC50b3RhbFNjb3JlICsgKHJvdW5kU3RhdHM/LnNjb3JlID8/IDApLFxuICAgICAgYmVzdFJvdW5kU2NvcmU6IE1hdGgubWF4KGN1cnJlbnQuYmVzdFJvdW5kU2NvcmUsIHJvdW5kU3RhdHM/LnNjb3JlID8/IDApLFxuICAgICAgYmVzdE1vdmVTY29yZTogTWF0aC5tYXgoY3VycmVudC5iZXN0TW92ZVNjb3JlLCByb3VuZFN0YXRzPy5iZXN0TW92ZVNjb3JlID8/IDApLFxuICAgICAgYmVzdENvbWJvOiBNYXRoLm1heChjdXJyZW50LmJlc3RDb21ibywgcm91bmRTdGF0cz8uYmVzdENvbWJvID8/IDApLFxuICAgICAgbW9kZVN0YXRzOiB7XG4gICAgICAgIC4uLmN1cnJlbnQubW9kZVN0YXRzLFxuICAgICAgICBbbW9kZV06IHRoaXMuYWRkTW9kZVJlc3VsdChjdXJyZW50Lm1vZGVTdGF0c1ttb2RlXSwgd29uKSxcbiAgICAgIH0sXG4gICAgICB1cGRhdGVkQXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgIHVwZGF0ZWRBdFNlcnZlcjogc2VydmVyVGltZXN0YW1wKCksXG4gICAgfSwgeyBtZXJnZTogdHJ1ZSB9KTtcbiAgfVxuXG4gIGVtcHR5U3RhdHMoKTogQ2hlc3NpbWFsc0NoYWxsZW5nZVN0YXRzIHtcbiAgICByZXR1cm4ge1xuICAgICAgY2hhbGxlbmdlc1BsYXllZDogMCxcbiAgICAgIGNoYWxsZW5nZXNDb21wbGV0ZWQ6IDAsXG4gICAgICBiZXN0V2luU3RyZWFrOiAwLFxuICAgICAgYmVzdFJvdW5kUmVhY2hlZDogMCxcbiAgICAgIHRvdGFsV2luczogMCxcbiAgICAgIHRvdGFsTG9zc2VzOiAwLFxuICAgICAgYm90c0RlZmVhdGVkOiAwLFxuICAgICAgcG93ZXJzVXNlZDogeyAuLi5FTVBUWV9QT1dFUlMgfSxcbiAgICAgIHBvd2VyQ2FwdHVyZXM6IDAsXG4gICAgICBwcm9tb3Rpb25zOiAwLFxuICAgICAgdG90YWxTY29yZTogMCxcbiAgICAgIGJlc3RSb3VuZFNjb3JlOiAwLFxuICAgICAgYmVzdE1vdmVTY29yZTogMCxcbiAgICAgIGJlc3RDb21ibzogMCxcbiAgICAgIG1vZGVTdGF0czogdGhpcy5lbXB0eU1vZGVTdGF0cygpLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHJlYWRTdGF0cyh1aWQ6IHN0cmluZyk6IFByb21pc2U8Q2hlc3NpbWFsc0NoYWxsZW5nZVN0YXRzPiB7XG4gICAgLy8gRmlyZXN0b3JlJ3Mgd2ViIFNESyBkb2VzIG5vdCBuZWVkIGEgdHJhbnNhY3Rpb24gZm9yIHRoZXNlIGNhc3VhbCBnYW1lIHN0YXRzLlxuICAgIC8vIExhc3Qtd3JpdGUtd2lucyBpcyBhY2NlcHRhYmxlIGZvciB0aGlzIGZpcnN0IHZlcnNpb24gYmVjYXVzZSBvbmUgcnVuIGlzIGFjdGl2ZSBwZXIgYnJvd3Nlci5cbiAgICBjb25zdCBzbmFwc2hvdCA9IGF3YWl0IGdldERvYyh0aGlzLnN0YXRzUmVmKHVpZCkpO1xuICAgIHJldHVybiBzbmFwc2hvdC5leGlzdHMoKSA/IHRoaXMubm9ybWFsaXplU3RhdHMoc25hcHNob3QuZGF0YSgpIGFzIFBhcnRpYWw8Q2hlc3NpbWFsc0NoYWxsZW5nZVN0YXRzPikgOiB0aGlzLmVtcHR5U3RhdHMoKTtcbiAgfVxuXG4gIHByaXZhdGUgbm9ybWFsaXplU3RhdHModmFsdWU6IFBhcnRpYWw8Q2hlc3NpbWFsc0NoYWxsZW5nZVN0YXRzPik6IENoZXNzaW1hbHNDaGFsbGVuZ2VTdGF0cyB7XG4gICAgY29uc3QgZW1wdHkgPSB0aGlzLmVtcHR5U3RhdHMoKTtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uZW1wdHksXG4gICAgICAuLi52YWx1ZSxcbiAgICAgIHBvd2Vyc1VzZWQ6IHtcbiAgICAgICAgLi4uRU1QVFlfUE9XRVJTLFxuICAgICAgICAuLi4odmFsdWUucG93ZXJzVXNlZCA/PyB7fSksXG4gICAgICB9LFxuICAgICAgbW9kZVN0YXRzOiB0aGlzLm5vcm1hbGl6ZU1vZGVTdGF0cyh2YWx1ZSksXG4gICAgfTtcbiAgfVxuXG4gIG5vcm1hbGl6ZVJ1bih2YWx1ZTogUGFydGlhbDxDaGVzc2ltYWxzQ2hhbGxlbmdlUnVuPiwgdWlkID0gdmFsdWUudXNlcklkKTogQ2hlc3NpbWFsc0NoYWxsZW5nZVJ1biB7XG4gICAgcmV0dXJuIG5vcm1hbGl6ZUNoZXNzaW1hbHNDaGFsbGVuZ2VSdW4odmFsdWUsIHVpZCk7XG4gIH1cblxuICBwcml2YXRlIGFkZE1vZGVSZXN1bHQoY3VycmVudDogeyBwbGF5ZWQ6IG51bWJlcjsgd2luczogbnVtYmVyOyBsb3NzZXM6IG51bWJlciB9LCB3b246IGJvb2xlYW4pIHtcbiAgICByZXR1cm4ge1xuICAgICAgcGxheWVkOiBjdXJyZW50LnBsYXllZCArIDEsXG4gICAgICB3aW5zOiBjdXJyZW50LndpbnMgKyAod29uID8gMSA6IDApLFxuICAgICAgbG9zc2VzOiBjdXJyZW50Lmxvc3NlcyArICh3b24gPyAwIDogMSksXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgZW1wdHlNb2RlU3RhdHMoKTogQ2hlc3NpbWFsc0NoYWxsZW5nZVN0YXRzWydtb2RlU3RhdHMnXSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNoYWxsZW5nZTogeyAuLi5FTVBUWV9NT0RFX1JFQ09SRCB9LFxuICAgICAgYm90OiB7IC4uLkVNUFRZX01PREVfUkVDT1JEIH0sXG4gICAgICBvbmxpbmU6IHsgLi4uRU1QVFlfTU9ERV9SRUNPUkQgfSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBub3JtYWxpemVNb2RlU3RhdHModmFsdWU6IFBhcnRpYWw8Q2hlc3NpbWFsc0NoYWxsZW5nZVN0YXRzPik6IENoZXNzaW1hbHNDaGFsbGVuZ2VTdGF0c1snbW9kZVN0YXRzJ10ge1xuICAgIGNvbnN0IGVtcHR5ID0gdGhpcy5lbXB0eU1vZGVTdGF0cygpO1xuICAgIHJldHVybiB7XG4gICAgICBjaGFsbGVuZ2U6IHtcbiAgICAgICAgLi4uZW1wdHkuY2hhbGxlbmdlLFxuICAgICAgICBwbGF5ZWQ6IHZhbHVlLm1vZGVTdGF0cz8uY2hhbGxlbmdlPy5wbGF5ZWQgPz8gKCh2YWx1ZS50b3RhbFdpbnMgPz8gMCkgKyAodmFsdWUudG90YWxMb3NzZXMgPz8gMCkpLFxuICAgICAgICB3aW5zOiB2YWx1ZS5tb2RlU3RhdHM/LmNoYWxsZW5nZT8ud2lucyA/PyAodmFsdWUudG90YWxXaW5zID8/IDApLFxuICAgICAgICBsb3NzZXM6IHZhbHVlLm1vZGVTdGF0cz8uY2hhbGxlbmdlPy5sb3NzZXMgPz8gKHZhbHVlLnRvdGFsTG9zc2VzID8/IDApLFxuICAgICAgfSxcbiAgICAgIGJvdDoge1xuICAgICAgICAuLi5lbXB0eS5ib3QsXG4gICAgICAgIC4uLih2YWx1ZS5tb2RlU3RhdHM/LmJvdCA/PyB7fSksXG4gICAgICB9LFxuICAgICAgb25saW5lOiB7XG4gICAgICAgIC4uLmVtcHR5Lm9ubGluZSxcbiAgICAgICAgLi4uKHZhbHVlLm1vZGVTdGF0cz8ub25saW5lID8/IHt9KSxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZW5zdXJlVXNlcigpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGF3YWl0IHRoaXMuZmlyZWJhc2Uud2hlbkZpcmViYXNlQXV0aFJlYWR5KCk7XG4gICAgY29uc3QgdXNlciA9IHRoaXMuZmlyZWJhc2VBdXRoLmN1cnJlbnRVc2VyO1xuICAgIGlmICh1c2VyPy51aWQpIHtcbiAgICAgIGF3YWl0IHVzZXIuZ2V0SWRUb2tlbigpO1xuICAgICAgcmV0dXJuIHVzZXIudWlkO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NIRVNTSU1BTFNfQ0hBTExFTkdFX0xPR0lOX1JFUVVJUkVEJyk7XG4gIH1cblxuICBwcml2YXRlIHN0YXRzUmVmKHVpZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGRvYyh0aGlzLmZpcmVzdG9yZSwgYHVzZXJzLyR7dWlkfS9taW5pR2FtZXMvY2hlc3NpbWFscy9jaGFsbGVuZ2Uvc3RhdHNgKTtcbiAgfVxuXG4gIHByaXZhdGUgcnVuUmVmKHVpZDogc3RyaW5nLCBydW5JZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGRvYyh0aGlzLmZpcmVzdG9yZSwgYCR7dGhpcy5ydW5zUGF0aCh1aWQpfS8ke3J1bklkfWApO1xuICB9XG5cbiAgcHJpdmF0ZSBydW5zUGF0aCh1aWQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGB1c2Vycy8ke3VpZH0vbWluaUdhbWVzL2NoZXNzaW1hbHMvY2hhbGxlbmdlUnVuc2A7XG4gIH1cblxuICBwcml2YXRlIHJlYWRMb2NhbEFjdGl2ZVJ1bih1aWQ6IHN0cmluZyk6IENoZXNzaW1hbHNDaGFsbGVuZ2VSdW4gfCB1bmRlZmluZWQge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByYXcgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLmxvY2FsQWN0aXZlUnVuS2V5KHVpZCkpO1xuICAgICAgaWYgKCFyYXcpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICBjb25zdCBydW4gPSB0aGlzLm5vcm1hbGl6ZVJ1bihKU09OLnBhcnNlKHJhdykgYXMgUGFydGlhbDxDaGVzc2ltYWxzQ2hhbGxlbmdlUnVuPiwgdWlkKTtcbiAgICAgIHJldHVybiBydW4uc3RhdHVzID09PSAnYWN0aXZlJyAmJiAoIXJ1bi51c2VySWQgfHwgcnVuLnVzZXJJZCA9PT0gdWlkKSA/IHJ1biA6IHVuZGVmaW5lZDtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB3cml0ZUxvY2FsQWN0aXZlUnVuKHVpZDogc3RyaW5nLCBydW46IENoZXNzaW1hbHNDaGFsbGVuZ2VSdW4gfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgICB0cnkge1xuICAgICAgaWYgKHJ1bj8uc3RhdHVzID09PSAnYWN0aXZlJykge1xuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLmxvY2FsQWN0aXZlUnVuS2V5KHVpZCksIEpTT04uc3RyaW5naWZ5KHRoaXMubm9ybWFsaXplUnVuKHJ1biwgdWlkKSkpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLmxvY2FsQWN0aXZlUnVuS2V5KHVpZCkpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gTG9jYWwgcGVyc2lzdGVuY2UgaXMgb25seSBhIHJlZnJlc2ggZmFsbGJhY2suXG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjbGVhckxvY2FsQWN0aXZlUnVuKHJ1bklkOiBzdHJpbmcsIHVpZCA9IHRoaXMuY3VycmVudFVpZCk6IHZvaWQge1xuICAgIGlmICghdWlkKSByZXR1cm47XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGN1cnJlbnQgPSB0aGlzLnJlYWRMb2NhbEFjdGl2ZVJ1bih1aWQpO1xuICAgICAgaWYgKCFjdXJyZW50IHx8IGN1cnJlbnQuaWQgPT09IHJ1bklkKSB7XG4gICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKHRoaXMubG9jYWxBY3RpdmVSdW5LZXkodWlkKSk7XG4gICAgICB9XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBMb2NhbCBwZXJzaXN0ZW5jZSBpcyBvbmx5IGEgcmVmcmVzaCBmYWxsYmFjay5cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGxvY2FsQWN0aXZlUnVuS2V5KHVpZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBob3N0ID0gdHlwZW9mIGxvY2F0aW9uID09PSAndW5kZWZpbmVkJyA/ICdsb2NhbCcgOiBsb2NhdGlvbi5ob3N0IHx8ICdsb2NhbCc7XG4gICAgcmV0dXJuIGAke0xPQ0FMX0FDVElWRV9SVU5fS0VZfS4ke2hvc3R9LiR7dWlkfWA7XG4gIH1cblxuICBwcml2YXRlIG5ld2VzdEFjdGl2ZVJ1bihcbiAgICBsb2NhbDogQ2hlc3NpbWFsc0NoYWxsZW5nZVJ1biB8IHVuZGVmaW5lZCxcbiAgICByZW1vdGU6IENoZXNzaW1hbHNDaGFsbGVuZ2VSdW4gfCB1bmRlZmluZWQsXG4gICk6IENoZXNzaW1hbHNDaGFsbGVuZ2VSdW4gfCB1bmRlZmluZWQge1xuICAgIGlmIChsb2NhbD8uc3RhdHVzICE9PSAnYWN0aXZlJykgcmV0dXJuIHJlbW90ZT8uc3RhdHVzID09PSAnYWN0aXZlJyA/IHJlbW90ZSA6IHVuZGVmaW5lZDtcbiAgICBpZiAocmVtb3RlPy5zdGF0dXMgIT09ICdhY3RpdmUnKSByZXR1cm4gbG9jYWw7XG4gICAgaWYgKGxvY2FsLmlkICE9PSByZW1vdGUuaWQpIHJldHVybiB0aGlzLnJ1blRpbWUobG9jYWwpID49IHRoaXMucnVuVGltZShyZW1vdGUpID8gbG9jYWwgOiByZW1vdGU7XG4gICAgaWYgKHRoaXMucnVuUHJvZ3Jlc3NTY29yZShsb2NhbCkgPiB0aGlzLnJ1blByb2dyZXNzU2NvcmUocmVtb3RlKSkgcmV0dXJuIGxvY2FsO1xuICAgIGlmICh0aGlzLnJ1blByb2dyZXNzU2NvcmUocmVtb3RlKSA+IHRoaXMucnVuUHJvZ3Jlc3NTY29yZShsb2NhbCkpIHJldHVybiByZW1vdGU7XG4gICAgcmV0dXJuIHRoaXMucnVuVGltZShsb2NhbCkgPj0gdGhpcy5ydW5UaW1lKHJlbW90ZSkgPyBsb2NhbCA6IHJlbW90ZTtcbiAgfVxuXG4gIHByaXZhdGUgcnVuUHJvZ3Jlc3NTY29yZShydW46IENoZXNzaW1hbHNDaGFsbGVuZ2VSdW4pOiBudW1iZXIge1xuICAgIGNvbnN0IHJvdW5kID0gcnVuLnJvdW5kSW5kZXggPz8gcnVuLmN1cnJlbnRSb3VuZDtcbiAgICBjb25zdCB3aW5zID0gcnVuLnJvdW5kc1dvbiA/PyBydW4ud2lucztcbiAgICByZXR1cm4gcm91bmQgKiAxMDAgKyB3aW5zICogMTAgLSBydW4ubG9zc2VzO1xuICB9XG5cbiAgcHJpdmF0ZSBydW5UaW1lKHJ1bjogQ2hlc3NpbWFsc0NoYWxsZW5nZVJ1bik6IG51bWJlciB7XG4gICAgY29uc3QgdmFsdWUgPSBEYXRlLnBhcnNlKHJ1bi51cGRhdGVkQXQpO1xuICAgIHJldHVybiBOdW1iZXIuaXNGaW5pdGUodmFsdWUpID8gdmFsdWUgOiAwO1xuICB9XG5cbiAgcHJpdmF0ZSB3aXRob3V0VW5kZWZpbmVkPFQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4odmFsdWU6IFQpOiBUIHtcbiAgICByZXR1cm4gT2JqZWN0LmVudHJpZXModmFsdWUpLnJlZHVjZSgoYWNjLCBba2V5LCBlbnRyeV0pID0+IHtcbiAgICAgIGlmIChlbnRyeSAhPT0gdW5kZWZpbmVkKSBhY2Nba2V5IGFzIGtleW9mIFRdID0gZW50cnkgYXMgVFtrZXlvZiBUXTtcbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwge30gYXMgVCk7XG4gIH1cbn1cbiJdfQ==
322
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlc3NpbWFscy1jaGFsbGVuZ2UtcHJvZ3Jlc3Muc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9vcmdhbmlzbXMvbWluaS1nYW1lcy9jaGVzc2ltYWxzLWNoYWxsZW5nZS1wcm9ncmVzcy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUMxQyxPQUFPLEVBQ0wsU0FBUyxFQUNULFVBQVUsRUFDVixHQUFHLEVBQ0gsTUFBTSxFQUNOLEtBQUssRUFDTCxVQUFVLEVBQ1YsT0FBTyxFQUNQLEtBQUssRUFDTCxlQUFlLEVBQ2YsTUFBTSxFQUNOLFVBQVUsR0FDWCxNQUFNLHlCQUF5QixDQUFDO0FBQ2pDLE9BQU8sRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFdkQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxrQ0FBa0MsRUFBRSwrQkFBK0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDOztBQVFuSCxNQUFNLFlBQVksR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNqRSxNQUFNLGlCQUFpQixHQUFHLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUM1RCxNQUFNLG9CQUFvQixHQUFHLGdDQUFnQyxDQUFDO0FBQzlELE1BQU0sc0JBQXNCLEdBQUcsRUFBRSxDQUFDO0FB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SyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN4QyxPQUFPLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFFTyxnQkFBZ0IsQ0FBb0MsS0FBUTtRQUNsRSxPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUU7WUFDeEQsSUFBSSxLQUFLLEtBQUssU0FBUztnQkFBRSxHQUFHLENBQUMsR0FBYyxDQUFDLEdBQUcsS0FBbUIsQ0FBQztZQUNuRSxPQUFPLEdBQUcsQ0FBQztRQUNiLENBQUMsRUFBRSxFQUFPLENBQUMsQ0FBQztJQUNkLENBQUM7K0dBcldVLGtDQUFrQzttSEFBbEMsa0NBQWtDLGNBRHJCLE1BQU07OzRGQUNuQixrQ0FBa0M7a0JBRDlDLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBdXRoIH0gZnJvbSAnQGFuZ3VsYXIvZmlyZS9hdXRoJztcbmltcG9ydCB7XG4gIEZpcmVzdG9yZSxcbiAgY29sbGVjdGlvbixcbiAgZG9jLFxuICBnZXREb2MsXG4gIGxpbWl0LFxuICBvblNuYXBzaG90LFxuICBvcmRlckJ5LFxuICBxdWVyeSxcbiAgc2VydmVyVGltZXN0YW1wLFxuICBzZXREb2MsXG4gIHdyaXRlQmF0Y2gsXG59IGZyb20gJ0Bhbmd1bGFyL2ZpcmUvZmlyZXN0b3JlJztcbmltcG9ydCB7IGZyb20sIE9ic2VydmFibGUsIG9mLCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgRmlyZWJhc2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvZmlyZWJhc2UvZmlyZWJhc2Uuc2VydmljZSc7XG5pbXBvcnQgeyBjaG9vc2VBY3RpdmVDaGVzc2ltYWxzQ2hhbGxlbmdlUnVuLCBub3JtYWxpemVDaGVzc2ltYWxzQ2hhbGxlbmdlUnVuIH0gZnJvbSAnLi9jaGVzc2ltYWxzLWNoYWxsZW5nZS1zdGF0ZSc7XG5pbXBvcnQge1xuICBDaGVzc2ltYWxzQ2hhbGxlbmdlUm91bmRTdGF0cyxcbiAgQ2hlc3NpbWFsc0NoYWxsZW5nZVJ1bixcbiAgQ2hlc3NpbWFsc0NoYWxsZW5nZVN0YXRzLFxuICBDaGVzc2ltYWxzU3RhdHNNb2RlLFxufSBmcm9tICcuL3R5cGVzJztcblxuY29uc3QgRU1QVFlfUE9XRVJTID0geyBlYWdsZTogMCwgYnVsbDogMCwga2FuZ2Fyb286IDAsIGxpb246IDAgfTtcbmNvbnN0IEVNUFRZX01PREVfUkVDT1JEID0geyBwbGF5ZWQ6IDAsIHdpbnM6IDAsIGxvc3NlczogMCB9O1xuY29uc3QgTE9DQUxfQUNUSVZFX1JVTl9LRVkgPSAnY2hlc3NpbWFscy5jaGFsbGVuZ2UuYWN0aXZlUnVuJztcbmNvbnN0IEFDVElWRV9SVU5fUVVFUllfTElNSVQgPSAxMjtcblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBDaGVzc2ltYWxzQ2hhbGxlbmdlUHJvZ3Jlc3NTZXJ2aWNlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBmaXJlYmFzZUF1dGggPSBpbmplY3QoQXV0aCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgZmlyZXN0b3JlID0gaW5qZWN0KEZpcmVzdG9yZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgZmlyZWJhc2UgPSBpbmplY3QoRmlyZWJhc2VTZXJ2aWNlKTtcblxuICBnZXQgY3VycmVudFVpZCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmZpcmViYXNlQXV0aC5jdXJyZW50VXNlcj8udWlkO1xuICB9XG5cbiAgd2F0Y2hTdGF0cygpOiBPYnNlcnZhYmxlPENoZXNzaW1hbHNDaGFsbGVuZ2VTdGF0cyB8IHVuZGVmaW5lZD4ge1xuICAgIHJldHVybiB0aGlzLndhdGNoV2hlbkZpcmViYXNlQXV0aFJlYWR5KHVuZGVmaW5lZCwgKHVpZCkgPT4gbmV3IE9ic2VydmFibGUoKHN1YnNjcmliZXIpID0+IHtcbiAgICAgIGNvbnN0IHVuc3Vic2NyaWJlID0gb25TbmFwc2hvdChcbiAgICAgICAgdGhpcy5zdGF0c1JlZih1aWQpLFxuICAgICAgICAoc25hcHNob3QpID0+IHN1YnNjcmliZXIubmV4dChcbiAgICAgICAgICBzbmFwc2hvdC5leGlzdHMoKSA/IHRoaXMubm9ybWFsaXplU3RhdHMoc25hcHNob3QuZGF0YSgpIGFzIFBhcnRpYWw8Q2hlc3NpbWFsc0NoYWxsZW5nZVN0YXRzPikgOiB1bmRlZmluZWQsXG4gICAgICAgICksXG4gICAgICAgIChlcnJvcikgPT4gc3Vic2NyaWJlci5lcnJvcihlcnJvciksXG4gICAgICApO1xuICAgICAgcmV0dXJuIHVuc3Vic2NyaWJlO1xuICAgIH0pKTtcbiAgfVxuXG4gIHdhdGNoUmVjZW50UnVucyhsaW1pdENvdW50ID0gNCk6IE9ic2VydmFibGU8Q2hlc3NpbWFsc0NoYWxsZW5nZVJ1bltdPiB7XG4gICAgcmV0dXJuIHRoaXMud2F0Y2hXaGVuRmlyZWJhc2VBdXRoUmVhZHkoW10sICh1aWQpID0+IHtcbiAgICAgIGNvbnN0IHJ1bnNRdWVyeSA9IHF1ZXJ5KFxuICAgICAgICBjb2xsZWN0aW9uKHRoaXMuZmlyZXN0b3JlLCB0aGlzLnJ1bnNQYXRoKHVpZCkpLFxuICAgICAgICBvcmRlckJ5KCd1cGRhdGVkQXQnLCAnZGVzYycpLFxuICAgICAgICBsaW1pdChsaW1pdENvdW50KSxcbiAgICAgICk7XG4gICAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoKHN1YnNjcmliZXIpID0+IHtcbiAgICAgICAgY29uc3QgdW5zdWJzY3JpYmUgPSBvblNuYXBzaG90KFxuICAgICAgICAgIHJ1bnNRdWVyeSxcbiAgICAgICAgICAoc25hcHNob3QpID0+IHN1YnNjcmliZXIubmV4dChcbiAgICAgICAgICAgIHNuYXBzaG90LmRvY3MubWFwKChpdGVtKSA9PiB0aGlzLm5vcm1hbGl6ZVJ1bihpdGVtLmRhdGEoKSBhcyBQYXJ0aWFsPENoZXNzaW1hbHNDaGFsbGVuZ2VSdW4+KSksXG4gICAgICAgICAgKSxcbiAgICAgICAgICAoZXJyb3IpID0+IHN1YnNjcmliZXIuZXJyb3IoZXJyb3IpLFxuICAgICAgICApO1xuICAgICAgICByZXR1cm4gdW5zdWJzY3JpYmU7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHdhdGNoQWN0aXZlUnVuKCk6IE9ic2VydmFibGU8Q2hlc3NpbWFsc0NoYWxsZW5nZVJ1biB8IHVuZGVmaW5lZD4ge1xuICAgIHJldHVybiB0aGlzLndhdGNoV2hlbkZpcmViYXNlQXV0aFJlYWR5KHVuZGVmaW5lZCwgKHVpZCkgPT4ge1xuICAgICAgY29uc3QgYWN0aXZlUXVlcnkgPSBxdWVyeShcbiAgICAgICAgY29sbGVjdGlvbih0aGlzLmZpcmVzdG9yZSwgdGhpcy5ydW5zUGF0aCh1aWQpKSxcbiAgICAgICAgb3JkZXJCeSgndXBkYXRlZEF0JywgJ2Rlc2MnKSxcbiAgICAgICAgbGltaXQoQUNUSVZFX1JVTl9RVUVSWV9MSU1JVCksXG4gICAgICApO1xuICAgICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKChzdWJzY3JpYmVyKSA9PiB7XG4gICAgICAgIHN1YnNjcmliZXIubmV4dCh0aGlzLnJlYWRMb2NhbEFjdGl2ZVJ1bih1aWQpKTtcbiAgICAgICAgY29uc3QgdW5zdWJzY3JpYmUgPSBvblNuYXBzaG90KFxuICAgICAgICAgIGFjdGl2ZVF1ZXJ5LFxuICAgICAgICAgIChzbmFwc2hvdCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVtb3RlUnVuID0gY2hvb3NlQWN0aXZlQ2hlc3NpbWFsc0NoYWxsZW5nZVJ1bihcbiAgICAgICAgICAgICAgc25hcHNob3QuZG9jcy5tYXAoKGl0ZW0pID0+IGl0ZW0uZGF0YSgpIGFzIFBhcnRpYWw8Q2hlc3NpbWFsc0NoYWxsZW5nZVJ1bj4pLFxuICAgICAgICAgICAgICB1aWQsXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgY29uc3QgbmV4dCA9IHRoaXMubmV3ZXN0QWN0aXZlUnVuKHRoaXMucmVhZExvY2FsQWN0aXZlUnVuKHVpZCksIHJlbW90ZVJ1bik7XG4gICAgICAgICAgICB0aGlzLndyaXRlTG9jYWxBY3RpdmVSdW4odWlkLCBuZXh0KTtcbiAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dChuZXh0KTtcbiAgICAgICAgICB9LFxuICAgICAgICAgICgpID0+IHN1YnNjcmliZXIubmV4dCh0aGlzLnJlYWRMb2NhbEFjdGl2ZVJ1bih1aWQpKSxcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIHVuc3Vic2NyaWJlO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHdhdGNoV2hlbkZpcmViYXNlQXV0aFJlYWR5PFQ+KGZhbGxiYWNrOiBULCBjcmVhdGVXYXRjaGVyOiAodWlkOiBzdHJpbmcpID0+IE9ic2VydmFibGU8VD4pOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICByZXR1cm4gZnJvbSh0aGlzLmZpcmViYXNlLndoZW5GaXJlYmFzZUF1dGhSZWFkeSgpKS5waXBlKFxuICAgICAgc3dpdGNoTWFwKCgpID0+IHtcbiAgICAgICAgY29uc3QgdWlkID0gdGhpcy5jdXJyZW50VWlkO1xuICAgICAgICByZXR1cm4gdWlkID8gY3JlYXRlV2F0Y2hlcih1aWQpIDogb2YoZmFsbGJhY2spO1xuICAgICAgfSksXG4gICAgKTtcbiAgfVxuXG4gIGFzeW5jIHNhdmVSdW4ocnVuOiBDaGVzc2ltYWxzQ2hhbGxlbmdlUnVuKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgdWlkID0gYXdhaXQgdGhpcy5lbnN1cmVVc2VyKCk7XG4gICAgY29uc3Qgbm9ybWFsaXplZFJ1biA9IHRoaXMubm9ybWFsaXplUnVuKHJ1biwgdWlkKTtcbiAgICBpZiAobm9ybWFsaXplZFJ1bi5zdGF0dXMgPT09ICdhY3RpdmUnKSB0aGlzLndyaXRlTG9jYWxBY3RpdmVSdW4odWlkLCBub3JtYWxpemVkUnVuKTtcbiAgICBlbHNlIHRoaXMuY2xlYXJMb2NhbEFjdGl2ZVJ1bihub3JtYWxpemVkUnVuLmlkLCB1aWQpO1xuICAgIGF3YWl0IHNldERvYyh0aGlzLnJ1blJlZih1aWQsIG5vcm1hbGl6ZWRSdW4uaWQpLCB0aGlzLndpdGhvdXRVbmRlZmluZWQoe1xuICAgICAgLi4ubm9ybWFsaXplZFJ1bixcbiAgICAgIHVzZXJJZDogdWlkLFxuICAgICAgdXBkYXRlZEF0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICB1cGRhdGVkQXRTZXJ2ZXI6IHNlcnZlclRpbWVzdGFtcCgpLFxuICAgIH0pLCB7IG1lcmdlOiB0cnVlIH0pO1xuICB9XG5cbiAgYXN5bmMgcmVjb3JkQ2hhbGxlbmdlU3RhcnRlZChydW46IENoZXNzaW1hbHNDaGFsbGVuZ2VSdW4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB1aWQgPSBhd2FpdCB0aGlzLmVuc3VyZVVzZXIoKTtcbiAgICBjb25zdCBub3JtYWxpemVkUnVuID0gdGhpcy5ub3JtYWxpemVSdW4ocnVuLCB1aWQpO1xuICAgIHRoaXMud3JpdGVMb2NhbEFjdGl2ZVJ1bih1aWQsIG5vcm1hbGl6ZWRSdW4pO1xuICAgIGNvbnN0IGN1cnJlbnQgPSBhd2FpdCB0aGlzLnJlYWRTdGF0cyh1aWQpO1xuICAgIGF3YWl0IHNldERvYyh0aGlzLnN0YXRzUmVmKHVpZCksIHtcbiAgICAgIC4uLmN1cnJlbnQsXG4gICAgICB1c2VySWQ6IHVpZCxcbiAgICAgIGNoYWxsZW5nZXNQbGF5ZWQ6IGN1cnJlbnQuY2hhbGxlbmdlc1BsYXllZCArIDEsXG4gICAgICB1cGRhdGVkQXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgIHVwZGF0ZWRBdFNlcnZlcjogc2VydmVyVGltZXN0YW1wKCksXG4gICAgfSwgeyBtZXJnZTogdHJ1ZSB9KTtcbiAgICBhd2FpdCB0aGlzLnNhdmVSdW4obm9ybWFsaXplZFJ1bik7XG4gIH1cblxuICBhc3luYyBhcHBseVJvdW5kUmVzdWx0KGFyZ3M6IHtcbiAgICBydW46IENoZXNzaW1hbHNDaGFsbGVuZ2VSdW47XG4gICAgcm91bmRSZWFjaGVkOiBudW1iZXI7XG4gICAgd29uOiBib29sZWFuO1xuICAgIGNvbXBsZXRlZDogYm9vbGVhbjtcbiAgICByb3VuZFN0YXRzOiBDaGVzc2ltYWxzQ2hhbGxlbmdlUm91bmRTdGF0cztcbiAgfSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHVpZCA9IGF3YWl0IHRoaXMuZW5zdXJlVXNlcigpO1xuICAgIGNvbnN0IGN1cnJlbnQgPSBhd2FpdCB0aGlzLnJlYWRTdGF0cyh1aWQpO1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRSdW4gPSB0aGlzLm5vcm1hbGl6ZVJ1bihhcmdzLnJ1biwgdWlkKTtcbiAgICBjb25zdCBuZXh0OiBDaGVzc2ltYWxzQ2hhbGxlbmdlU3RhdHMgPSB7XG4gICAgICB1c2VySWQ6IHVpZCxcbiAgICAgIGNoYWxsZW5nZXNQbGF5ZWQ6IGN1cnJlbnQuY2hhbGxlbmdlc1BsYXllZCxcbiAgICAgIGNoYWxsZW5nZXNDb21wbGV0ZWQ6IGN1cnJlbnQuY2hhbGxlbmdlc0NvbXBsZXRlZCArIChhcmdzLmNvbXBsZXRlZCA/IDEgOiAwKSxcbiAgICAgIGJlc3RXaW5TdHJlYWs6IE1hdGgubWF4KGN1cnJlbnQuYmVzdFdpblN0cmVhaywgbm9ybWFsaXplZFJ1bi5iZXN0U3RyZWFrSW5SdW4pLFxuICAgICAgYmVzdFJvdW5kUmVhY2hlZDogTWF0aC5tYXgoY3VycmVudC5iZXN0Um91bmRSZWFjaGVkLCBhcmdzLnJvdW5kUmVhY2hlZCksXG4gICAgICB0b3RhbFdpbnM6IGN1cnJlbnQudG90YWxXaW5zICsgKGFyZ3Mud29uID8gMSA6IDApLFxuICAgICAgdG90YWxMb3NzZXM6IGN1cnJlbnQudG90YWxMb3NzZXMgKyAoYXJncy53b24gPyAwIDogMSksXG4gICAgICBib3RzRGVmZWF0ZWQ6IGN1cnJlbnQuYm90c0RlZmVhdGVkICsgKGFyZ3Mud29uID8gMSA6IDApLFxuICAgICAgcG93ZXJzVXNlZDoge1xuICAgICAgICBlYWdsZTogY3VycmVudC5wb3dlcnNVc2VkLmVhZ2xlICsgYXJncy5yb3VuZFN0YXRzLnBvd2Vyc1VzZWQuZWFnbGUsXG4gICAgICAgIGJ1bGw6IGN1cnJlbnQucG93ZXJzVXNlZC5idWxsICsgYXJncy5yb3VuZFN0YXRzLnBvd2Vyc1VzZWQuYnVsbCxcbiAgICAgICAga2FuZ2Fyb286IGN1cnJlbnQucG93ZXJzVXNlZC5rYW5nYXJvbyArIGFyZ3Mucm91bmRTdGF0cy5wb3dlcnNVc2VkLmthbmdhcm9vLFxuICAgICAgICBsaW9uOiBjdXJyZW50LnBvd2Vyc1VzZWQubGlvbiArIGFyZ3Mucm91bmRTdGF0cy5wb3dlcnNVc2VkLmxpb24sXG4gICAgICB9LFxuICAgICAgcG93ZXJDYXB0dXJlczogY3VycmVudC5wb3dlckNhcHR1cmVzICsgYXJncy5yb3VuZFN0YXRzLnBvd2VyQ2FwdHVyZXMsXG4gICAgICBwcm9tb3Rpb25zOiBjdXJyZW50LnByb21vdGlvbnMgKyBhcmdzLnJvdW5kU3RhdHMucHJvbW90aW9ucyxcbiAgICAgIHRvdGFsU2NvcmU6IGN1cnJlbnQudG90YWxTY29yZSArIGFyZ3Mucm91bmRTdGF0cy5zY29yZSxcbiAgICAgIGJlc3RSb3VuZFNjb3JlOiBNYXRoLm1heChjdXJyZW50LmJlc3RSb3VuZFNjb3JlLCBhcmdzLnJvdW5kU3RhdHMuc2NvcmUpLFxuICAgICAgYmVzdE1vdmVTY29yZTogTWF0aC5tYXgoY3VycmVudC5iZXN0TW92ZVNjb3JlLCBhcmdzLnJvdW5kU3RhdHMuYmVzdE1vdmVTY29yZSksXG4gICAgICBiZXN0Q29tYm86IE1hdGgubWF4KGN1cnJlbnQuYmVzdENvbWJvLCBhcmdzLnJvdW5kU3RhdHMuYmVzdENvbWJvKSxcbiAgICAgIG1vZGVTdGF0czoge1xuICAgICAgICAuLi5jdXJyZW50Lm1vZGVTdGF0cyxcbiAgICAgICAgY2hhbGxlbmdlOiB0aGlzLmFkZE1vZGVSZXN1bHQoY3VycmVudC5tb2RlU3RhdHMuY2hhbGxlbmdlLCBhcmdzLndvbiksXG4gICAgICB9LFxuICAgICAgdXBkYXRlZEF0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgfTtcbiAgICBjb25zdCBiYXRjaCA9IHdyaXRlQmF0Y2godGhpcy5maXJlc3RvcmUpO1xuICAgIGJhdGNoLnNldCh0aGlzLnN0YXRzUmVmKHVpZCksIHsgLi4ubmV4dCwgdXBkYXRlZEF0U2VydmVyOiBzZXJ2ZXJUaW1lc3RhbXAoKSB9LCB7IG1lcmdlOiB0cnVlIH0pO1xuICAgIGJhdGNoLnNldCh0aGlzLnJ1blJlZih1aWQsIG5vcm1hbGl6ZWRSdW4uaWQpLCB0aGlzLndpdGhvdXRVbmRlZmluZWQoe1xuICAgICAgLi4ubm9ybWFsaXplZFJ1bixcbiAgICAgIHVzZXJJZDogdWlkLFxuICAgICAgdXBkYXRlZEF0U2VydmVyOiBzZXJ2ZXJUaW1lc3RhbXAoKSxcbiAgICB9KSwgeyBtZXJnZTogdHJ1ZSB9KTtcbiAgICBhd2FpdCBiYXRjaC5jb21taXQoKTtcbiAgICB0aGlzLndyaXRlTG9jYWxBY3RpdmVSdW4odWlkLCBub3JtYWxpemVkUnVuLnN0YXR1cyA9PT0gJ2FjdGl2ZScgPyBub3JtYWxpemVkUnVuIDogdW5kZWZpbmVkKTtcbiAgfVxuXG4gIGFzeW5jIHJlY29yZE1vZGVSZXN1bHQoXG4gICAgbW9kZTogRXhjbHVkZTxDaGVzc2ltYWxzU3RhdHNNb2RlLCAnY2hhbGxlbmdlJz4sXG4gICAgd29uOiBib29sZWFuLFxuICAgIHJvdW5kU3RhdHM/OiBDaGVzc2ltYWxzQ2hhbGxlbmdlUm91bmRTdGF0cyxcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgdWlkID0gYXdhaXQgdGhpcy5lbnN1cmVVc2VyKCk7XG4gICAgY29uc3QgY3VycmVudCA9IGF3YWl0IHRoaXMucmVhZFN0YXRzKHVpZCk7XG4gICAgYXdhaXQgc2V0RG9jKHRoaXMuc3RhdHNSZWYodWlkKSwge1xuICAgICAgLi4uY3VycmVudCxcbiAgICAgIHVzZXJJZDogdWlkLFxuICAgICAgcG93ZXJzVXNlZDogcm91bmRTdGF0c1xuICAgICAgICA/IHtcbiAgICAgICAgICBlYWdsZTogY3VycmVudC5wb3dlcnNVc2VkLmVhZ2xlICsgcm91bmRTdGF0cy5wb3dlcnNVc2VkLmVhZ2xlLFxuICAgICAgICAgIGJ1bGw6IGN1cnJlbnQucG93ZXJzVXNlZC5idWxsICsgcm91bmRTdGF0cy5wb3dlcnNVc2VkLmJ1bGwsXG4gICAgICAgICAga2FuZ2Fyb286IGN1cnJlbnQucG93ZXJzVXNlZC5rYW5nYXJvbyArIHJvdW5kU3RhdHMucG93ZXJzVXNlZC5rYW5nYXJvbyxcbiAgICAgICAgICBsaW9uOiBjdXJyZW50LnBvd2Vyc1VzZWQubGlvbiArIHJvdW5kU3RhdHMucG93ZXJzVXNlZC5saW9uLFxuICAgICAgICB9XG4gICAgICAgIDogY3VycmVudC5wb3dlcnNVc2VkLFxuICAgICAgcG93ZXJDYXB0dXJlczogY3VycmVudC5wb3dlckNhcHR1cmVzICsgKHJvdW5kU3RhdHM/LnBvd2VyQ2FwdHVyZXMgPz8gMCksXG4gICAgICBwcm9tb3Rpb25zOiBjdXJyZW50LnByb21vdGlvbnMgKyAocm91bmRTdGF0cz8ucHJvbW90aW9ucyA/PyAwKSxcbiAgICAgIHRvdGFsU2NvcmU6IGN1cnJlbnQudG90YWxTY29yZSArIChyb3VuZFN0YXRzPy5zY29yZSA/PyAwKSxcbiAgICAgIGJlc3RSb3VuZFNjb3JlOiBNYXRoLm1heChjdXJyZW50LmJlc3RSb3VuZFNjb3JlLCByb3VuZFN0YXRzPy5zY29yZSA/PyAwKSxcbiAgICAgIGJlc3RNb3ZlU2NvcmU6IE1hdGgubWF4KGN1cnJlbnQuYmVzdE1vdmVTY29yZSwgcm91bmRTdGF0cz8uYmVzdE1vdmVTY29yZSA/PyAwKSxcbiAgICAgIGJlc3RDb21ibzogTWF0aC5tYXgoY3VycmVudC5iZXN0Q29tYm8sIHJvdW5kU3RhdHM/LmJlc3RDb21ibyA/PyAwKSxcbiAgICAgIG1vZGVTdGF0czoge1xuICAgICAgICAuLi5jdXJyZW50Lm1vZGVTdGF0cyxcbiAgICAgICAgW21vZGVdOiB0aGlzLmFkZE1vZGVSZXN1bHQoY3VycmVudC5tb2RlU3RhdHNbbW9kZV0sIHdvbiksXG4gICAgICB9LFxuICAgICAgdXBkYXRlZEF0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICB1cGRhdGVkQXRTZXJ2ZXI6IHNlcnZlclRpbWVzdGFtcCgpLFxuICAgIH0sIHsgbWVyZ2U6IHRydWUgfSk7XG4gIH1cblxuICBlbXB0eVN0YXRzKCk6IENoZXNzaW1hbHNDaGFsbGVuZ2VTdGF0cyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNoYWxsZW5nZXNQbGF5ZWQ6IDAsXG4gICAgICBjaGFsbGVuZ2VzQ29tcGxldGVkOiAwLFxuICAgICAgYmVzdFdpblN0cmVhazogMCxcbiAgICAgIGJlc3RSb3VuZFJlYWNoZWQ6IDAsXG4gICAgICB0b3RhbFdpbnM6IDAsXG4gICAgICB0b3RhbExvc3NlczogMCxcbiAgICAgIGJvdHNEZWZlYXRlZDogMCxcbiAgICAgIHBvd2Vyc1VzZWQ6IHsgLi4uRU1QVFlfUE9XRVJTIH0sXG4gICAgICBwb3dlckNhcHR1cmVzOiAwLFxuICAgICAgcHJvbW90aW9uczogMCxcbiAgICAgIHRvdGFsU2NvcmU6IDAsXG4gICAgICBiZXN0Um91bmRTY29yZTogMCxcbiAgICAgIGJlc3RNb3ZlU2NvcmU6IDAsXG4gICAgICBiZXN0Q29tYm86IDAsXG4gICAgICBtb2RlU3RhdHM6IHRoaXMuZW1wdHlNb2RlU3RhdHMoKSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyByZWFkU3RhdHModWlkOiBzdHJpbmcpOiBQcm9taXNlPENoZXNzaW1hbHNDaGFsbGVuZ2VTdGF0cz4ge1xuICAgIC8vIEZpcmVzdG9yZSdzIHdlYiBTREsgZG9lcyBub3QgbmVlZCBhIHRyYW5zYWN0aW9uIGZvciB0aGVzZSBjYXN1YWwgZ2FtZSBzdGF0cy5cbiAgICAvLyBMYXN0LXdyaXRlLXdpbnMgaXMgYWNjZXB0YWJsZSBmb3IgdGhpcyBmaXJzdCB2ZXJzaW9uIGJlY2F1c2Ugb25lIHJ1biBpcyBhY3RpdmUgcGVyIGJyb3dzZXIuXG4gICAgY29uc3Qgc25hcHNob3QgPSBhd2FpdCBnZXREb2ModGhpcy5zdGF0c1JlZih1aWQpKTtcbiAgICByZXR1cm4gc25hcHNob3QuZXhpc3RzKCkgPyB0aGlzLm5vcm1hbGl6ZVN0YXRzKHNuYXBzaG90LmRhdGEoKSBhcyBQYXJ0aWFsPENoZXNzaW1hbHNDaGFsbGVuZ2VTdGF0cz4pIDogdGhpcy5lbXB0eVN0YXRzKCk7XG4gIH1cblxuICBwcml2YXRlIG5vcm1hbGl6ZVN0YXRzKHZhbHVlOiBQYXJ0aWFsPENoZXNzaW1hbHNDaGFsbGVuZ2VTdGF0cz4pOiBDaGVzc2ltYWxzQ2hhbGxlbmdlU3RhdHMge1xuICAgIGNvbnN0IGVtcHR5ID0gdGhpcy5lbXB0eVN0YXRzKCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmVtcHR5LFxuICAgICAgLi4udmFsdWUsXG4gICAgICBwb3dlcnNVc2VkOiB7XG4gICAgICAgIC4uLkVNUFRZX1BPV0VSUyxcbiAgICAgICAgLi4uKHZhbHVlLnBvd2Vyc1VzZWQgPz8ge30pLFxuICAgICAgfSxcbiAgICAgIG1vZGVTdGF0czogdGhpcy5ub3JtYWxpemVNb2RlU3RhdHModmFsdWUpLFxuICAgIH07XG4gIH1cblxuICBub3JtYWxpemVSdW4odmFsdWU6IFBhcnRpYWw8Q2hlc3NpbWFsc0NoYWxsZW5nZVJ1bj4sIHVpZCA9IHZhbHVlLnVzZXJJZCk6IENoZXNzaW1hbHNDaGFsbGVuZ2VSdW4ge1xuICAgIHJldHVybiBub3JtYWxpemVDaGVzc2ltYWxzQ2hhbGxlbmdlUnVuKHZhbHVlLCB1aWQpO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRNb2RlUmVzdWx0KGN1cnJlbnQ6IHsgcGxheWVkOiBudW1iZXI7IHdpbnM6IG51bWJlcjsgbG9zc2VzOiBudW1iZXIgfSwgd29uOiBib29sZWFuKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBsYXllZDogY3VycmVudC5wbGF5ZWQgKyAxLFxuICAgICAgd2luczogY3VycmVudC53aW5zICsgKHdvbiA/IDEgOiAwKSxcbiAgICAgIGxvc3NlczogY3VycmVudC5sb3NzZXMgKyAod29uID8gMCA6IDEpLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGVtcHR5TW9kZVN0YXRzKCk6IENoZXNzaW1hbHNDaGFsbGVuZ2VTdGF0c1snbW9kZVN0YXRzJ10ge1xuICAgIHJldHVybiB7XG4gICAgICBjaGFsbGVuZ2U6IHsgLi4uRU1QVFlfTU9ERV9SRUNPUkQgfSxcbiAgICAgIGJvdDogeyAuLi5FTVBUWV9NT0RFX1JFQ09SRCB9LFxuICAgICAgb25saW5lOiB7IC4uLkVNUFRZX01PREVfUkVDT1JEIH0sXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgbm9ybWFsaXplTW9kZVN0YXRzKHZhbHVlOiBQYXJ0aWFsPENoZXNzaW1hbHNDaGFsbGVuZ2VTdGF0cz4pOiBDaGVzc2ltYWxzQ2hhbGxlbmdlU3RhdHNbJ21vZGVTdGF0cyddIHtcbiAgICBjb25zdCBlbXB0eSA9IHRoaXMuZW1wdHlNb2RlU3RhdHMoKTtcbiAgICByZXR1cm4ge1xuICAgICAgY2hhbGxlbmdlOiB7XG4gICAgICAgIC4uLmVtcHR5LmNoYWxsZW5nZSxcbiAgICAgICAgcGxheWVkOiB2YWx1ZS5tb2RlU3RhdHM/LmNoYWxsZW5nZT8ucGxheWVkID8/ICgodmFsdWUudG90YWxXaW5zID8/IDApICsgKHZhbHVlLnRvdGFsTG9zc2VzID8/IDApKSxcbiAgICAgICAgd2luczogdmFsdWUubW9kZVN0YXRzPy5jaGFsbGVuZ2U/LndpbnMgPz8gKHZhbHVlLnRvdGFsV2lucyA/PyAwKSxcbiAgICAgICAgbG9zc2VzOiB2YWx1ZS5tb2RlU3RhdHM/LmNoYWxsZW5nZT8ubG9zc2VzID8/ICh2YWx1ZS50b3RhbExvc3NlcyA/PyAwKSxcbiAgICAgIH0sXG4gICAgICBib3Q6IHtcbiAgICAgICAgLi4uZW1wdHkuYm90LFxuICAgICAgICAuLi4odmFsdWUubW9kZVN0YXRzPy5ib3QgPz8ge30pLFxuICAgICAgfSxcbiAgICAgIG9ubGluZToge1xuICAgICAgICAuLi5lbXB0eS5vbmxpbmUsXG4gICAgICAgIC4uLih2YWx1ZS5tb2RlU3RhdHM/Lm9ubGluZSA/PyB7fSksXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGVuc3VyZVVzZXIoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBhd2FpdCB0aGlzLmZpcmViYXNlLndoZW5GaXJlYmFzZUF1dGhSZWFkeSgpO1xuICAgIGNvbnN0IHVzZXIgPSB0aGlzLmZpcmViYXNlQXV0aC5jdXJyZW50VXNlcjtcbiAgICBpZiAodXNlcj8udWlkKSB7XG4gICAgICBhd2FpdCB1c2VyLmdldElkVG9rZW4oKTtcbiAgICAgIHJldHVybiB1c2VyLnVpZDtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKCdDSEVTU0lNQUxTX0NIQUxMRU5HRV9MT0dJTl9SRVFVSVJFRCcpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0c1JlZih1aWQ6IHN0cmluZykge1xuICAgIHJldHVybiBkb2ModGhpcy5maXJlc3RvcmUsIGB1c2Vycy8ke3VpZH0vbWluaUdhbWVzL2NoZXNzaW1hbHMvY2hhbGxlbmdlL3N0YXRzYCk7XG4gIH1cblxuICBwcml2YXRlIHJ1blJlZih1aWQ6IHN0cmluZywgcnVuSWQ6IHN0cmluZykge1xuICAgIHJldHVybiBkb2ModGhpcy5maXJlc3RvcmUsIGAke3RoaXMucnVuc1BhdGgodWlkKX0vJHtydW5JZH1gKTtcbiAgfVxuXG4gIHByaXZhdGUgcnVuc1BhdGgodWlkOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBgdXNlcnMvJHt1aWR9L21pbmlHYW1lcy9jaGVzc2ltYWxzL2NoYWxsZW5nZVJ1bnNgO1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkTG9jYWxBY3RpdmVSdW4odWlkOiBzdHJpbmcpOiBDaGVzc2ltYWxzQ2hhbGxlbmdlUnVuIHwgdW5kZWZpbmVkIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmF3ID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5sb2NhbEFjdGl2ZVJ1bktleSh1aWQpKTtcbiAgICAgIGlmICghcmF3KSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgY29uc3QgcnVuID0gdGhpcy5ub3JtYWxpemVSdW4oSlNPTi5wYXJzZShyYXcpIGFzIFBhcnRpYWw8Q2hlc3NpbWFsc0NoYWxsZW5nZVJ1bj4sIHVpZCk7XG4gICAgICByZXR1cm4gcnVuLnN0YXR1cyA9PT0gJ2FjdGl2ZScgJiYgKCFydW4udXNlcklkIHx8IHJ1bi51c2VySWQgPT09IHVpZCkgPyBydW4gOiB1bmRlZmluZWQ7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgd3JpdGVMb2NhbEFjdGl2ZVJ1bih1aWQ6IHN0cmluZywgcnVuOiBDaGVzc2ltYWxzQ2hhbGxlbmdlUnVuIHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gICAgdHJ5IHtcbiAgICAgIGlmIChydW4/LnN0YXR1cyA9PT0gJ2FjdGl2ZScpIHtcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0odGhpcy5sb2NhbEFjdGl2ZVJ1bktleSh1aWQpLCBKU09OLnN0cmluZ2lmeSh0aGlzLm5vcm1hbGl6ZVJ1bihydW4sIHVpZCkpKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0odGhpcy5sb2NhbEFjdGl2ZVJ1bktleSh1aWQpKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIExvY2FsIHBlcnNpc3RlbmNlIGlzIG9ubHkgYSByZWZyZXNoIGZhbGxiYWNrLlxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY2xlYXJMb2NhbEFjdGl2ZVJ1bihydW5JZDogc3RyaW5nLCB1aWQgPSB0aGlzLmN1cnJlbnRVaWQpOiB2b2lkIHtcbiAgICBpZiAoIXVpZCkgcmV0dXJuO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBjdXJyZW50ID0gdGhpcy5yZWFkTG9jYWxBY3RpdmVSdW4odWlkKTtcbiAgICAgIGlmICghY3VycmVudCB8fCBjdXJyZW50LmlkID09PSBydW5JZCkge1xuICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLmxvY2FsQWN0aXZlUnVuS2V5KHVpZCkpO1xuICAgICAgfVxuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gTG9jYWwgcGVyc2lzdGVuY2UgaXMgb25seSBhIHJlZnJlc2ggZmFsbGJhY2suXG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBsb2NhbEFjdGl2ZVJ1bktleSh1aWQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgaG9zdCA9IHR5cGVvZiBsb2NhdGlvbiA9PT0gJ3VuZGVmaW5lZCcgPyAnbG9jYWwnIDogbG9jYXRpb24uaG9zdCB8fCAnbG9jYWwnO1xuICAgIHJldHVybiBgJHtMT0NBTF9BQ1RJVkVfUlVOX0tFWX0uJHtob3N0fS4ke3VpZH1gO1xuICB9XG5cbiAgcHJpdmF0ZSBuZXdlc3RBY3RpdmVSdW4oXG4gICAgbG9jYWw6IENoZXNzaW1hbHNDaGFsbGVuZ2VSdW4gfCB1bmRlZmluZWQsXG4gICAgcmVtb3RlOiBDaGVzc2ltYWxzQ2hhbGxlbmdlUnVuIHwgdW5kZWZpbmVkLFxuICApOiBDaGVzc2ltYWxzQ2hhbGxlbmdlUnVuIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAobG9jYWw/LnN0YXR1cyAhPT0gJ2FjdGl2ZScpIHJldHVybiByZW1vdGU/LnN0YXR1cyA9PT0gJ2FjdGl2ZScgPyByZW1vdGUgOiB1bmRlZmluZWQ7XG4gICAgaWYgKHJlbW90ZT8uc3RhdHVzICE9PSAnYWN0aXZlJykgcmV0dXJuIGxvY2FsO1xuICAgIGlmIChsb2NhbC5pZCAhPT0gcmVtb3RlLmlkKSByZXR1cm4gdGhpcy5ydW5UaW1lKGxvY2FsKSA+PSB0aGlzLnJ1blRpbWUocmVtb3RlKSA/IGxvY2FsIDogcmVtb3RlO1xuICAgIGlmICh0aGlzLnJ1blByb2dyZXNzU2NvcmUobG9jYWwpID4gdGhpcy5ydW5Qcm9ncmVzc1Njb3JlKHJlbW90ZSkpIHJldHVybiBsb2NhbDtcbiAgICBpZiAodGhpcy5ydW5Qcm9ncmVzc1Njb3JlKHJlbW90ZSkgPiB0aGlzLnJ1blByb2dyZXNzU2NvcmUobG9jYWwpKSByZXR1cm4gcmVtb3RlO1xuICAgIHJldHVybiB0aGlzLnJ1blRpbWUobG9jYWwpID49IHRoaXMucnVuVGltZShyZW1vdGUpID8gbG9jYWwgOiByZW1vdGU7XG4gIH1cblxuICBwcml2YXRlIHJ1blByb2dyZXNzU2NvcmUocnVuOiBDaGVzc2ltYWxzQ2hhbGxlbmdlUnVuKTogbnVtYmVyIHtcbiAgICBjb25zdCByb3VuZCA9IHJ1bi5yb3VuZEluZGV4ID8/IHJ1bi5jdXJyZW50Um91bmQ7XG4gICAgY29uc3Qgd2lucyA9IHJ1bi5yb3VuZHNXb24gPz8gcnVuLndpbnM7XG4gICAgcmV0dXJuIHJvdW5kICogMTAwICsgd2lucyAqIDEwIC0gcnVuLmxvc3NlcztcbiAgfVxuXG4gIHByaXZhdGUgcnVuVGltZShydW46IENoZXNzaW1hbHNDaGFsbGVuZ2VSdW4pOiBudW1iZXIge1xuICAgIGNvbnN0IHZhbHVlID0gRGF0ZS5wYXJzZShydW4udXBkYXRlZEF0KTtcbiAgICByZXR1cm4gTnVtYmVyLmlzRmluaXRlKHZhbHVlKSA/IHZhbHVlIDogMDtcbiAgfVxuXG4gIHByaXZhdGUgd2l0aG91dFVuZGVmaW5lZDxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+KHZhbHVlOiBUKTogVCB7XG4gICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHZhbHVlKS5yZWR1Y2UoKGFjYywgW2tleSwgZW50cnldKSA9PiB7XG4gICAgICBpZiAoZW50cnkgIT09IHVuZGVmaW5lZCkgYWNjW2tleSBhcyBrZXlvZiBUXSA9IGVudHJ5IGFzIFRba2V5b2YgVF07XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIHt9IGFzIFQpO1xuICB9XG59XG4iXX0=