valtech-components 4.0.490 → 4.0.492
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.
- package/esm2022/lib/components/organisms/mini-games/chessimals-challenge-progress.service.mjs +45 -15
- package/esm2022/lib/components/organisms/mini-games/chessimals-game.component.mjs +19 -1
- package/esm2022/lib/components/organisms/mini-games/mini-games.i18n.mjs +65 -1
- package/esm2022/lib/version.mjs +2 -2
- package/fesm2022/valtech-components.mjs +127 -15
- package/fesm2022/valtech-components.mjs.map +1 -1
- package/lib/components/organisms/mini-games/chessimals-challenge-progress.service.d.ts +4 -0
- package/lib/components/organisms/mini-games/chessimals-game.component.d.ts +2 -1
- package/lib/version.d.ts +1 -1
- package/package.json +1 -1
package/esm2022/lib/components/organisms/mini-games/chessimals-challenge-progress.service.mjs
CHANGED
|
@@ -39,30 +39,33 @@ export class ChessimalsChallengeProgressService {
|
|
|
39
39
|
const uid = this.currentUid;
|
|
40
40
|
if (!uid)
|
|
41
41
|
return of(this.readLocalActiveRun());
|
|
42
|
-
const activeQuery = query(collection(this.firestore, this.runsPath(uid)), where('status', '==', 'active')
|
|
42
|
+
const activeQuery = query(collection(this.firestore, this.runsPath(uid)), where('status', '==', 'active'));
|
|
43
43
|
return new Observable((subscriber) => {
|
|
44
44
|
subscriber.next(this.readLocalActiveRun());
|
|
45
45
|
const unsubscribe = onSnapshot(activeQuery, (snapshot) => {
|
|
46
|
-
const
|
|
47
|
-
|
|
48
|
-
|
|
46
|
+
const remoteRun = snapshot.docs
|
|
47
|
+
.map((item) => item.data())
|
|
48
|
+
.reduce((best, run) => this.newestActiveRun(best, run), undefined);
|
|
49
|
+
const next = this.newestActiveRun(this.readLocalActiveRun(uid), remoteRun);
|
|
50
|
+
this.writeLocalActiveRun(next);
|
|
51
|
+
subscriber.next(next);
|
|
49
52
|
}, () => subscriber.next(this.readLocalActiveRun()));
|
|
50
53
|
return unsubscribe;
|
|
51
54
|
});
|
|
52
55
|
}
|
|
53
56
|
async saveRun(run) {
|
|
54
|
-
this.writeLocalActiveRun(run.status === 'active' ? run : undefined);
|
|
55
57
|
const uid = await this.ensureUser();
|
|
58
|
+
const ownedRun = { ...run, userId: uid };
|
|
59
|
+
this.writeLocalActiveRun(ownedRun.status === 'active' ? ownedRun : undefined, uid);
|
|
56
60
|
await setDoc(this.runRef(uid, run.id), this.withoutUndefined({
|
|
57
|
-
...
|
|
58
|
-
userId: uid,
|
|
61
|
+
...ownedRun,
|
|
59
62
|
updatedAt: new Date().toISOString(),
|
|
60
63
|
updatedAtServer: serverTimestamp(),
|
|
61
64
|
}), { merge: true });
|
|
62
65
|
}
|
|
63
66
|
async recordChallengeStarted(run) {
|
|
64
|
-
this.writeLocalActiveRun(run);
|
|
65
67
|
const uid = await this.ensureUser();
|
|
68
|
+
this.writeLocalActiveRun({ ...run, userId: uid }, uid);
|
|
66
69
|
const current = await this.readStats(uid);
|
|
67
70
|
await setDoc(this.statsRef(uid), {
|
|
68
71
|
...current,
|
|
@@ -208,30 +211,57 @@ export class ChessimalsChallengeProgressService {
|
|
|
208
211
|
runsPath(uid) {
|
|
209
212
|
return `users/${uid}/miniGames/chessimals/challengeRuns`;
|
|
210
213
|
}
|
|
211
|
-
readLocalActiveRun() {
|
|
214
|
+
readLocalActiveRun(uid = this.currentUid) {
|
|
215
|
+
if (!uid)
|
|
216
|
+
return undefined;
|
|
212
217
|
try {
|
|
213
|
-
const raw = localStorage.getItem(
|
|
218
|
+
const raw = localStorage.getItem(this.localActiveRunKey(uid));
|
|
214
219
|
if (!raw)
|
|
215
220
|
return undefined;
|
|
216
221
|
const run = JSON.parse(raw);
|
|
217
|
-
return run.status === 'active' ? run : undefined;
|
|
222
|
+
return run.status === 'active' && (!run.userId || run.userId === uid) ? run : undefined;
|
|
218
223
|
}
|
|
219
224
|
catch {
|
|
220
225
|
return undefined;
|
|
221
226
|
}
|
|
222
227
|
}
|
|
223
|
-
writeLocalActiveRun(run) {
|
|
228
|
+
writeLocalActiveRun(run, uid = this.currentUid) {
|
|
229
|
+
if (!uid)
|
|
230
|
+
return;
|
|
224
231
|
try {
|
|
225
232
|
if (run?.status === 'active') {
|
|
226
|
-
localStorage.setItem(
|
|
233
|
+
localStorage.setItem(this.localActiveRunKey(uid), JSON.stringify({ ...run, userId: uid }));
|
|
227
234
|
return;
|
|
228
235
|
}
|
|
229
|
-
localStorage.removeItem(
|
|
236
|
+
localStorage.removeItem(this.localActiveRunKey(uid));
|
|
230
237
|
}
|
|
231
238
|
catch {
|
|
232
239
|
// Local persistence is only a refresh fallback.
|
|
233
240
|
}
|
|
234
241
|
}
|
|
242
|
+
localActiveRunKey(uid) {
|
|
243
|
+
return `${LOCAL_ACTIVE_RUN_KEY}.${uid}`;
|
|
244
|
+
}
|
|
245
|
+
newestActiveRun(local, remote) {
|
|
246
|
+
if (local?.status !== 'active')
|
|
247
|
+
return remote?.status === 'active' ? remote : undefined;
|
|
248
|
+
if (remote?.status !== 'active')
|
|
249
|
+
return local;
|
|
250
|
+
if (local.id !== remote.id)
|
|
251
|
+
return this.runTime(local) >= this.runTime(remote) ? local : remote;
|
|
252
|
+
if (this.runProgressScore(local) > this.runProgressScore(remote))
|
|
253
|
+
return local;
|
|
254
|
+
if (this.runProgressScore(remote) > this.runProgressScore(local))
|
|
255
|
+
return remote;
|
|
256
|
+
return this.runTime(local) >= this.runTime(remote) ? local : remote;
|
|
257
|
+
}
|
|
258
|
+
runProgressScore(run) {
|
|
259
|
+
return run.currentRound * 100 + run.wins * 10 - run.losses;
|
|
260
|
+
}
|
|
261
|
+
runTime(run) {
|
|
262
|
+
const value = Date.parse(run.updatedAt);
|
|
263
|
+
return Number.isFinite(value) ? value : 0;
|
|
264
|
+
}
|
|
235
265
|
withoutUndefined(value) {
|
|
236
266
|
return Object.entries(value).reduce((acc, [key, entry]) => {
|
|
237
267
|
if (entry !== undefined)
|
|
@@ -246,4 +276,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
246
276
|
type: Injectable,
|
|
247
277
|
args: [{ providedIn: 'root' }]
|
|
248
278
|
}] });
|
|
249
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlc3NpbWFscy1jaGFsbGVuZ2UtcHJvZ3Jlc3Muc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9vcmdhbmlzbXMvbWluaS1nYW1lcy9jaGVzc2ltYWxzLWNoYWxsZW5nZS1wcm9ncmVzcy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUMxQyxPQUFPLEVBQ0wsU0FBUyxFQUNULFVBQVUsRUFDVixHQUFHLEVBQ0gsTUFBTSxFQUNOLEtBQUssRUFDTCxVQUFVLEVBQ1YsT0FBTyxFQUNQLEtBQUssRUFDTCxlQUFlLEVBQ2YsTUFBTSxFQUNOLEtBQUssR0FDTixNQUFNLHlCQUF5QixDQUFDO0FBQ2pDLE9BQU8sRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRXRDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQzs7QUFROUUsTUFBTSxZQUFZLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDakUsTUFBTSxpQkFBaUIsR0FBRyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDNUQsTUFBTSxvQkFBb0IsR0FBRyxnQ0FBZ0MsQ0FBQztBQUc5RCxNQUFNLE9BQU8sa0NBQWtDO0lBRC9DO1FBRW1CLGlCQUFZLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzVCLGNBQVMsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7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QyxjQURyQixNQUFNOzs0RkFDbkIsa0NBQWtDO2tCQUQ5QyxVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQXV0aCB9IGZyb20gJ0Bhbmd1bGFyL2ZpcmUvYXV0aCc7XG5pbXBvcnQge1xuICBGaXJlc3RvcmUsXG4gIGNvbGxlY3Rpb24sXG4gIGRvYyxcbiAgZ2V0RG9jLFxuICBsaW1pdCxcbiAgb25TbmFwc2hvdCxcbiAgb3JkZXJCeSxcbiAgcXVlcnksXG4gIHNlcnZlclRpbWVzdGFtcCxcbiAgc2V0RG9jLFxuICB3aGVyZSxcbn0gZnJvbSAnQGFuZ3VsYXIvZmlyZS9maXJlc3RvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgRmlyZWJhc2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvZmlyZWJhc2UvZmlyZWJhc2Uuc2VydmljZSc7XG5pbXBvcnQge1xuICBDaGVzc2ltYWxzQ2hhbGxlbmdlUm91bmRTdGF0cyxcbiAgQ2hlc3NpbWFsc0NoYWxsZW5nZVJ1bixcbiAgQ2hlc3NpbWFsc0NoYWxsZW5nZVN0YXRzLFxuICBDaGVzc2ltYWxzU3RhdHNNb2RlLFxufSBmcm9tICcuL3R5cGVzJztcblxuY29uc3QgRU1QVFlfUE9XRVJTID0geyBlYWdsZTogMCwgYnVsbDogMCwga2FuZ2Fyb286IDAsIGxpb246IDAgfTtcbmNvbnN0IEVNUFRZX01PREVfUkVDT1JEID0geyBwbGF5ZWQ6IDAsIHdpbnM6IDAsIGxvc3NlczogMCB9O1xuY29uc3QgTE9DQUxfQUNUSVZFX1JVTl9LRVkgPSAnY2hlc3NpbWFscy5jaGFsbGVuZ2UuYWN0aXZlUnVuJztcblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBDaGVzc2ltYWxzQ2hhbGxlbmdlUHJvZ3Jlc3NTZXJ2aWNlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBmaXJlYmFzZUF1dGggPSBpbmplY3QoQXV0aCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgZmlyZXN0b3JlID0gaW5qZWN0KEZpcmVzdG9yZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgZmlyZWJhc2UgPSBpbmplY3QoRmlyZWJhc2VTZXJ2aWNlKTtcblxuICBnZXQgY3VycmVudFVpZCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmZpcmViYXNlQXV0aC5jdXJyZW50VXNlcj8udWlkO1xuICB9XG5cbiAgd2F0Y2hTdGF0cygpOiBPYnNlcnZhYmxlPENoZXNzaW1hbHNDaGFsbGVuZ2VTdGF0cyB8IHVuZGVmaW5lZD4ge1xuICAgIGNvbnN0IHVpZCA9IHRoaXMuY3VycmVudFVpZDtcbiAgICBpZiAoIXVpZCkgcmV0dXJuIG9mKHVuZGVmaW5lZCk7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKChzdWJzY3JpYmVyKSA9PiB7XG4gICAgICBjb25zdCB1bnN1YnNjcmliZSA9IG9uU25hcHNob3QoXG4gICAgICAgIHRoaXMuc3RhdHNSZWYodWlkKSxcbiAgICAgICAgKHNuYXBzaG90KSA9PiBzdWJzY3JpYmVyLm5leHQoXG4gICAgICAgICAgc25hcHNob3QuZXhpc3RzKCkgPyB0aGlzLm5vcm1hbGl6ZVN0YXRzKHNuYXBzaG90LmRhdGEoKSBhcyBQYXJ0aWFsPENoZXNzaW1hbHNDaGFsbGVuZ2VTdGF0cz4pIDogdW5kZWZpbmVkLFxuICAgICAgICApLFxuICAgICAgICAoZXJyb3IpID0+IHN1YnNjcmliZXIuZXJyb3IoZXJyb3IpLFxuICAgICAgKTtcbiAgICAgIHJldHVybiB1bnN1YnNjcmliZTtcbiAgICB9KTtcbiAgfVxuXG4gIHdhdGNoUmVjZW50UnVucyhsaW1pdENvdW50ID0gNCk6IE9ic2VydmFibGU8Q2hlc3NpbWFsc0NoYWxsZW5nZVJ1bltdPiB7XG4gICAgY29uc3QgdWlkID0gdGhpcy5jdXJyZW50VWlkO1xuICAgIGlmICghdWlkKSByZXR1cm4gb2YoW10pO1xuICAgIGNvbnN0IHJ1bnNRdWVyeSA9IHF1ZXJ5KFxuICAgICAgY29sbGVjdGlvbih0aGlzLmZpcmVzdG9yZSwgdGhpcy5ydW5zUGF0aCh1aWQpKSxcbiAgICAgIG9yZGVyQnkoJ3VwZGF0ZWRBdCcsICdkZXNjJyksXG4gICAgICBsaW1pdChsaW1pdENvdW50KSxcbiAgICApO1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZSgoc3Vic2NyaWJlcikgPT4ge1xuICAgICAgY29uc3QgdW5zdWJzY3JpYmUgPSBvblNuYXBzaG90KFxuICAgICAgICBydW5zUXVlcnksXG4gICAgICAgIChzbmFwc2hvdCkgPT4gc3Vic2NyaWJlci5uZXh0KHNuYXBzaG90LmRvY3MubWFwKChpdGVtKSA9PiBpdGVtLmRhdGEoKSBhcyBDaGVzc2ltYWxzQ2hhbGxlbmdlUnVuKSksXG4gICAgICAgIChlcnJvcikgPT4gc3Vic2NyaWJlci5lcnJvcihlcnJvciksXG4gICAgICApO1xuICAgICAgcmV0dXJuIHVuc3Vic2NyaWJlO1xuICAgIH0pO1xuICB9XG5cbiAgd2F0Y2hBY3RpdmVSdW4oKTogT2JzZXJ2YWJsZTxDaGVzc2ltYWxzQ2hhbGxlbmdlUnVuIHwgdW5kZWZpbmVkPiB7XG4gICAgY29uc3QgdWlkID0gdGhpcy5jdXJyZW50VWlkO1xuICAgIGlmICghdWlkKSByZXR1cm4gb2YodGhpcy5yZWFkTG9jYWxBY3RpdmVSdW4oKSk7XG4gICAgY29uc3QgYWN0aXZlUXVlcnkgPSBxdWVyeShcbiAgICAgIGNvbGxlY3Rpb24odGhpcy5maXJlc3RvcmUsIHRoaXMucnVuc1BhdGgodWlkKSksXG4gICAgICB3aGVyZSgnc3RhdHVzJywgJz09JywgJ2FjdGl2ZScpLFxuICAgICAgbGltaXQoMSksXG4gICAgKTtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoKHN1YnNjcmliZXIpID0+IHtcbiAgICAgIHN1YnNjcmliZXIubmV4dCh0aGlzLnJlYWRMb2NhbEFjdGl2ZVJ1bigpKTtcbiAgICAgIGNvbnN0IHVuc3Vic2NyaWJlID0gb25TbmFwc2hvdChcbiAgICAgICAgYWN0aXZlUXVlcnksXG4gICAgICAgIChzbmFwc2hvdCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHJ1biA9IHNuYXBzaG90LmRvY3NbMF0/LmRhdGEoKSBhcyBDaGVzc2ltYWxzQ2hhbGxlbmdlUnVuIHwgdW5kZWZpbmVkO1xuICAgICAgICAgIHRoaXMud3JpdGVMb2NhbEFjdGl2ZVJ1bihydW4pO1xuICAgICAgICAgIHN1YnNjcmliZXIubmV4dChydW4pO1xuICAgICAgICB9LFxuICAgICAgICAoKSA9PiBzdWJzY3JpYmVyLm5leHQodGhpcy5yZWFkTG9jYWxBY3RpdmVSdW4oKSksXG4gICAgICApO1xuICAgICAgcmV0dXJuIHVuc3Vic2NyaWJlO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgc2F2ZVJ1bihydW46IENoZXNzaW1hbHNDaGFsbGVuZ2VSdW4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLndyaXRlTG9jYWxBY3RpdmVSdW4ocnVuLnN0YXR1cyA9PT0gJ2FjdGl2ZScgPyBydW4gOiB1bmRlZmluZWQpO1xuICAgIGNvbnN0IHVpZCA9IGF3YWl0IHRoaXMuZW5zdXJlVXNlcigpO1xuICAgIGF3YWl0IHNldERvYyh0aGlzLnJ1blJlZih1aWQsIHJ1bi5pZCksIHRoaXMud2l0aG91dFVuZGVmaW5lZCh7XG4gICAgICAuLi5ydW4sXG4gICAgICB1c2VySWQ6IHVpZCxcbiAgICAgIHVwZGF0ZWRBdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgdXBkYXRlZEF0U2VydmVyOiBzZXJ2ZXJUaW1lc3RhbXAoKSxcbiAgICB9KSwgeyBtZXJnZTogdHJ1ZSB9KTtcbiAgfVxuXG4gIGFzeW5jIHJlY29yZENoYWxsZW5nZVN0YXJ0ZWQocnVuOiBDaGVzc2ltYWxzQ2hhbGxlbmdlUnVuKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy53cml0ZUxvY2FsQWN0aXZlUnVuKHJ1bik7XG4gICAgY29uc3QgdWlkID0gYXdhaXQgdGhpcy5lbnN1cmVVc2VyKCk7XG4gICAgY29uc3QgY3VycmVudCA9IGF3YWl0IHRoaXMucmVhZFN0YXRzKHVpZCk7XG4gICAgYXdhaXQgc2V0RG9jKHRoaXMuc3RhdHNSZWYodWlkKSwge1xuICAgICAgLi4uY3VycmVudCxcbiAgICAgIHVzZXJJZDogdWlkLFxuICAgICAgY2hhbGxlbmdlc1BsYXllZDogY3VycmVudC5jaGFsbGVuZ2VzUGxheWVkICsgMSxcbiAgICAgIHVwZGF0ZWRBdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgdXBkYXRlZEF0U2VydmVyOiBzZXJ2ZXJUaW1lc3RhbXAoKSxcbiAgICB9LCB7IG1lcmdlOiB0cnVlIH0pO1xuICAgIGF3YWl0IHRoaXMuc2F2ZVJ1bihydW4pO1xuICB9XG5cbiAgYXN5bmMgYXBwbHlSb3VuZFJlc3VsdChhcmdzOiB7XG4gICAgcnVuOiBDaGVzc2ltYWxzQ2hhbGxlbmdlUnVuO1xuICAgIHJvdW5kUmVhY2hlZDogbnVtYmVyO1xuICAgIHdvbjogYm9vbGVhbjtcbiAgICBjb21wbGV0ZWQ6IGJvb2xlYW47XG4gICAgcm91bmRTdGF0czogQ2hlc3NpbWFsc0NoYWxsZW5nZVJvdW5kU3RhdHM7XG4gIH0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB1aWQgPSBhd2FpdCB0aGlzLmVuc3VyZVVzZXIoKTtcbiAgICBjb25zdCBjdXJyZW50ID0gYXdhaXQgdGhpcy5yZWFkU3RhdHModWlkKTtcbiAgICBjb25zdCBuZXh0OiBDaGVzc2ltYWxzQ2hhbGxlbmdlU3RhdHMgPSB7XG4gICAgICB1c2VySWQ6IHVpZCxcbiAgICAgIGNoYWxsZW5nZXNQbGF5ZWQ6IGN1cnJlbnQuY2hhbGxlbmdlc1BsYXllZCxcbiAgICAgIGNoYWxsZW5nZXNDb21wbGV0ZWQ6IGN1cnJlbnQuY2hhbGxlbmdlc0NvbXBsZXRlZCArIChhcmdzLmNvbXBsZXRlZCA/IDEgOiAwKSxcbiAgICAgIGJlc3RXaW5TdHJlYWs6IE1hdGgubWF4KGN1cnJlbnQuYmVzdFdpblN0cmVhaywgYXJncy5ydW4uYmVzdFN0cmVha0luUnVuKSxcbiAgICAgIGJlc3RSb3VuZFJlYWNoZWQ6IE1hdGgubWF4KGN1cnJlbnQuYmVzdFJvdW5kUmVhY2hlZCwgYXJncy5yb3VuZFJlYWNoZWQpLFxuICAgICAgdG90YWxXaW5zOiBjdXJyZW50LnRvdGFsV2lucyArIChhcmdzLndvbiA/IDEgOiAwKSxcbiAgICAgIHRvdGFsTG9zc2VzOiBjdXJyZW50LnRvdGFsTG9zc2VzICsgKGFyZ3Mud29uID8gMCA6IDEpLFxuICAgICAgYm90c0RlZmVhdGVkOiBjdXJyZW50LmJvdHNEZWZlYXRlZCArIChhcmdzLndvbiA/IDEgOiAwKSxcbiAgICAgIHBvd2Vyc1VzZWQ6IHtcbiAgICAgICAgZWFnbGU6IGN1cnJlbnQucG93ZXJzVXNlZC5lYWdsZSArIGFyZ3Mucm91bmRTdGF0cy5wb3dlcnNVc2VkLmVhZ2xlLFxuICAgICAgICBidWxsOiBjdXJyZW50LnBvd2Vyc1VzZWQuYnVsbCArIGFyZ3Mucm91bmRTdGF0cy5wb3dlcnNVc2VkLmJ1bGwsXG4gICAgICAgIGthbmdhcm9vOiBjdXJyZW50LnBvd2Vyc1VzZWQua2FuZ2Fyb28gKyBhcmdzLnJvdW5kU3RhdHMucG93ZXJzVXNlZC5rYW5nYXJvbyxcbiAgICAgICAgbGlvbjogY3VycmVudC5wb3dlcnNVc2VkLmxpb24gKyBhcmdzLnJvdW5kU3RhdHMucG93ZXJzVXNlZC5saW9uLFxuICAgICAgfSxcbiAgICAgIHBvd2VyQ2FwdHVyZXM6IGN1cnJlbnQucG93ZXJDYXB0dXJlcyArIGFyZ3Mucm91bmRTdGF0cy5wb3dlckNhcHR1cmVzLFxuICAgICAgcHJvbW90aW9uczogY3VycmVudC5wcm9tb3Rpb25zICsgYXJncy5yb3VuZFN0YXRzLnByb21vdGlvbnMsXG4gICAgICB0b3RhbFNjb3JlOiBjdXJyZW50LnRvdGFsU2NvcmUgKyBhcmdzLnJvdW5kU3RhdHMuc2NvcmUsXG4gICAgICBiZXN0Um91bmRTY29yZTogTWF0aC5tYXgoY3VycmVudC5iZXN0Um91bmRTY29yZSwgYXJncy5yb3VuZFN0YXRzLnNjb3JlKSxcbiAgICAgIGJlc3RNb3ZlU2NvcmU6IE1hdGgubWF4KGN1cnJlbnQuYmVzdE1vdmVTY29yZSwgYXJncy5yb3VuZFN0YXRzLmJlc3RNb3ZlU2NvcmUpLFxuICAgICAgYmVzdENvbWJvOiBNYXRoLm1heChjdXJyZW50LmJlc3RDb21ibywgYXJncy5yb3VuZFN0YXRzLmJlc3RDb21ibyksXG4gICAgICBtb2RlU3RhdHM6IHtcbiAgICAgICAgLi4uY3VycmVudC5tb2RlU3RhdHMsXG4gICAgICAgIGNoYWxsZW5nZTogdGhpcy5hZGRNb2RlUmVzdWx0KGN1cnJlbnQubW9kZVN0YXRzLmNoYWxsZW5nZSwgYXJncy53b24pLFxuICAgICAgfSxcbiAgICAgIHVwZGF0ZWRBdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgIH07XG4gICAgYXdhaXQgc2V0RG9jKHRoaXMuc3RhdHNSZWYodWlkKSwgeyAuLi5uZXh0LCB1cGRhdGVkQXRTZXJ2ZXI6IHNlcnZlclRpbWVzdGFtcCgpIH0sIHsgbWVyZ2U6IHRydWUgfSk7XG4gICAgYXdhaXQgdGhpcy5zYXZlUnVuKGFyZ3MucnVuKTtcbiAgfVxuXG4gIGFzeW5jIHJlY29yZE1vZGVSZXN1bHQobW9kZTogRXhjbHVkZTxDaGVzc2ltYWxzU3RhdHNNb2RlLCAnY2hhbGxlbmdlJz4sIHdvbjogYm9vbGVhbik6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHVpZCA9IGF3YWl0IHRoaXMuZW5zdXJlVXNlcigpO1xuICAgIGNvbnN0IGN1cnJlbnQgPSBhd2FpdCB0aGlzLnJlYWRTdGF0cyh1aWQpO1xuICAgIGF3YWl0IHNldERvYyh0aGlzLnN0YXRzUmVmKHVpZCksIHtcbiAgICAgIC4uLmN1cnJlbnQsXG4gICAgICB1c2VySWQ6IHVpZCxcbiAgICAgIG1vZGVTdGF0czoge1xuICAgICAgICAuLi5jdXJyZW50Lm1vZGVTdGF0cyxcbiAgICAgICAgW21vZGVdOiB0aGlzLmFkZE1vZGVSZXN1bHQoY3VycmVudC5tb2RlU3RhdHNbbW9kZV0sIHdvbiksXG4gICAgICB9LFxuICAgICAgdXBkYXRlZEF0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICB1cGRhdGVkQXRTZXJ2ZXI6IHNlcnZlclRpbWVzdGFtcCgpLFxuICAgIH0sIHsgbWVyZ2U6IHRydWUgfSk7XG4gIH1cblxuICBlbXB0eVN0YXRzKCk6IENoZXNzaW1hbHNDaGFsbGVuZ2VTdGF0cyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNoYWxsZW5nZXNQbGF5ZWQ6IDAsXG4gICAgICBjaGFsbGVuZ2VzQ29tcGxldGVkOiAwLFxuICAgICAgYmVzdFdpblN0cmVhazogMCxcbiAgICAgIGJlc3RSb3VuZFJlYWNoZWQ6IDAsXG4gICAgICB0b3RhbFdpbnM6IDAsXG4gICAgICB0b3RhbExvc3NlczogMCxcbiAgICAgIGJvdHNEZWZlYXRlZDogMCxcbiAgICAgIHBvd2Vyc1VzZWQ6IHsgLi4uRU1QVFlfUE9XRVJTIH0sXG4gICAgICBwb3dlckNhcHR1cmVzOiAwLFxuICAgICAgcHJvbW90aW9uczogMCxcbiAgICAgIHRvdGFsU2NvcmU6IDAsXG4gICAgICBiZXN0Um91bmRTY29yZTogMCxcbiAgICAgIGJlc3RNb3ZlU2NvcmU6IDAsXG4gICAgICBiZXN0Q29tYm86IDAsXG4gICAgICBtb2RlU3RhdHM6IHRoaXMuZW1wdHlNb2RlU3RhdHMoKSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyByZWFkU3RhdHModWlkOiBzdHJpbmcpOiBQcm9taXNlPENoZXNzaW1hbHNDaGFsbGVuZ2VTdGF0cz4ge1xuICAgIC8vIEZpcmVzdG9yZSdzIHdlYiBTREsgZG9lcyBub3QgbmVlZCBhIHRyYW5zYWN0aW9uIGZvciB0aGVzZSBjYXN1YWwgZ2FtZSBzdGF0cy5cbiAgICAvLyBMYXN0LXdyaXRlLXdpbnMgaXMgYWNjZXB0YWJsZSBmb3IgdGhpcyBmaXJzdCB2ZXJzaW9uIGJlY2F1c2Ugb25lIHJ1biBpcyBhY3RpdmUgcGVyIGJyb3dzZXIuXG4gICAgY29uc3Qgc25hcHNob3QgPSBhd2FpdCBnZXREb2ModGhpcy5zdGF0c1JlZih1aWQpKTtcbiAgICByZXR1cm4gc25hcHNob3QuZXhpc3RzKCkgPyB0aGlzLm5vcm1hbGl6ZVN0YXRzKHNuYXBzaG90LmRhdGEoKSBhcyBQYXJ0aWFsPENoZXNzaW1hbHNDaGFsbGVuZ2VTdGF0cz4pIDogdGhpcy5lbXB0eVN0YXRzKCk7XG4gIH1cblxuICBwcml2YXRlIG5vcm1hbGl6ZVN0YXRzKHZhbHVlOiBQYXJ0aWFsPENoZXNzaW1hbHNDaGFsbGVuZ2VTdGF0cz4pOiBDaGVzc2ltYWxzQ2hhbGxlbmdlU3RhdHMge1xuICAgIGNvbnN0IGVtcHR5ID0gdGhpcy5lbXB0eVN0YXRzKCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmVtcHR5LFxuICAgICAgLi4udmFsdWUsXG4gICAgICBwb3dlcnNVc2VkOiB7XG4gICAgICAgIC4uLkVNUFRZX1BPV0VSUyxcbiAgICAgICAgLi4uKHZhbHVlLnBvd2Vyc1VzZWQgPz8ge30pLFxuICAgICAgfSxcbiAgICAgIG1vZGVTdGF0czogdGhpcy5ub3JtYWxpemVNb2RlU3RhdHModmFsdWUpLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGFkZE1vZGVSZXN1bHQoY3VycmVudDogeyBwbGF5ZWQ6IG51bWJlcjsgd2luczogbnVtYmVyOyBsb3NzZXM6IG51bWJlciB9LCB3b246IGJvb2xlYW4pIHtcbiAgICByZXR1cm4ge1xuICAgICAgcGxheWVkOiBjdXJyZW50LnBsYXllZCArIDEsXG4gICAgICB3aW5zOiBjdXJyZW50LndpbnMgKyAod29uID8gMSA6IDApLFxuICAgICAgbG9zc2VzOiBjdXJyZW50Lmxvc3NlcyArICh3b24gPyAwIDogMSksXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgZW1wdHlNb2RlU3RhdHMoKTogQ2hlc3NpbWFsc0NoYWxsZW5nZVN0YXRzWydtb2RlU3RhdHMnXSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNoYWxsZW5nZTogeyAuLi5FTVBUWV9NT0RFX1JFQ09SRCB9LFxuICAgICAgYm90OiB7IC4uLkVNUFRZX01PREVfUkVDT1JEIH0sXG4gICAgICBvbmxpbmU6IHsgLi4uRU1QVFlfTU9ERV9SRUNPUkQgfSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBub3JtYWxpemVNb2RlU3RhdHModmFsdWU6IFBhcnRpYWw8Q2hlc3NpbWFsc0NoYWxsZW5nZVN0YXRzPik6IENoZXNzaW1hbHNDaGFsbGVuZ2VTdGF0c1snbW9kZVN0YXRzJ10ge1xuICAgIGNvbnN0IGVtcHR5ID0gdGhpcy5lbXB0eU1vZGVTdGF0cygpO1xuICAgIHJldHVybiB7XG4gICAgICBjaGFsbGVuZ2U6IHtcbiAgICAgICAgLi4uZW1wdHkuY2hhbGxlbmdlLFxuICAgICAgICBwbGF5ZWQ6IHZhbHVlLm1vZGVTdGF0cz8uY2hhbGxlbmdlPy5wbGF5ZWQgPz8gKCh2YWx1ZS50b3RhbFdpbnMgPz8gMCkgKyAodmFsdWUudG90YWxMb3NzZXMgPz8gMCkpLFxuICAgICAgICB3aW5zOiB2YWx1ZS5tb2RlU3RhdHM/LmNoYWxsZW5nZT8ud2lucyA/PyAodmFsdWUudG90YWxXaW5zID8/IDApLFxuICAgICAgICBsb3NzZXM6IHZhbHVlLm1vZGVTdGF0cz8uY2hhbGxlbmdlPy5sb3NzZXMgPz8gKHZhbHVlLnRvdGFsTG9zc2VzID8/IDApLFxuICAgICAgfSxcbiAgICAgIGJvdDoge1xuICAgICAgICAuLi5lbXB0eS5ib3QsXG4gICAgICAgIC4uLih2YWx1ZS5tb2RlU3RhdHM/LmJvdCA/PyB7fSksXG4gICAgICB9LFxuICAgICAgb25saW5lOiB7XG4gICAgICAgIC4uLmVtcHR5Lm9ubGluZSxcbiAgICAgICAgLi4uKHZhbHVlLm1vZGVTdGF0cz8ub25saW5lID8/IHt9KSxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZW5zdXJlVXNlcigpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGF3YWl0IHRoaXMuZmlyZWJhc2Uud2hlbkZpcmViYXNlQXV0aFJlYWR5KCk7XG4gICAgY29uc3QgdXNlciA9IHRoaXMuZmlyZWJhc2VBdXRoLmN1cnJlbnRVc2VyO1xuICAgIGlmICh1c2VyPy51aWQpIHtcbiAgICAgIGF3YWl0IHVzZXIuZ2V0SWRUb2tlbigpO1xuICAgICAgcmV0dXJuIHVzZXIudWlkO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NIRVNTSU1BTFNfQ0hBTExFTkdFX0xPR0lOX1JFUVVJUkVEJyk7XG4gIH1cblxuICBwcml2YXRlIHN0YXRzUmVmKHVpZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGRvYyh0aGlzLmZpcmVzdG9yZSwgYHVzZXJzLyR7dWlkfS9taW5pR2FtZXMvY2hlc3NpbWFscy9jaGFsbGVuZ2Uvc3RhdHNgKTtcbiAgfVxuXG4gIHByaXZhdGUgcnVuUmVmKHVpZDogc3RyaW5nLCBydW5JZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGRvYyh0aGlzLmZpcmVzdG9yZSwgYCR7dGhpcy5ydW5zUGF0aCh1aWQpfS8ke3J1bklkfWApO1xuICB9XG5cbiAgcHJpdmF0ZSBydW5zUGF0aCh1aWQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGB1c2Vycy8ke3VpZH0vbWluaUdhbWVzL2NoZXNzaW1hbHMvY2hhbGxlbmdlUnVuc2A7XG4gIH1cblxuICBwcml2YXRlIHJlYWRMb2NhbEFjdGl2ZVJ1bigpOiBDaGVzc2ltYWxzQ2hhbGxlbmdlUnVuIHwgdW5kZWZpbmVkIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmF3ID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oTE9DQUxfQUNUSVZFX1JVTl9LRVkpO1xuICAgICAgaWYgKCFyYXcpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICBjb25zdCBydW4gPSBKU09OLnBhcnNlKHJhdykgYXMgQ2hlc3NpbWFsc0NoYWxsZW5nZVJ1bjtcbiAgICAgIHJldHVybiBydW4uc3RhdHVzID09PSAnYWN0aXZlJyA/IHJ1biA6IHVuZGVmaW5lZDtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB3cml0ZUxvY2FsQWN0aXZlUnVuKHJ1bjogQ2hlc3NpbWFsc0NoYWxsZW5nZVJ1biB8IHVuZGVmaW5lZCk6IHZvaWQge1xuICAgIHRyeSB7XG4gICAgICBpZiAocnVuPy5zdGF0dXMgPT09ICdhY3RpdmUnKSB7XG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKExPQ0FMX0FDVElWRV9SVU5fS0VZLCBKU09OLnN0cmluZ2lmeShydW4pKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oTE9DQUxfQUNUSVZFX1JVTl9LRVkpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gTG9jYWwgcGVyc2lzdGVuY2UgaXMgb25seSBhIHJlZnJlc2ggZmFsbGJhY2suXG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB3aXRob3V0VW5kZWZpbmVkPFQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4odmFsdWU6IFQpOiBUIHtcbiAgICByZXR1cm4gT2JqZWN0LmVudHJpZXModmFsdWUpLnJlZHVjZSgoYWNjLCBba2V5LCBlbnRyeV0pID0+IHtcbiAgICAgIGlmIChlbnRyeSAhPT0gdW5kZWZpbmVkKSBhY2Nba2V5IGFzIGtleW9mIFRdID0gZW50cnkgYXMgVFtrZXlvZiBUXTtcbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwge30gYXMgVCk7XG4gIH1cbn1cbiJdfQ==
|
|
279
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlc3NpbWFscy1jaGFsbGVuZ2UtcHJvZ3Jlc3Muc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9vcmdhbmlzbXMvbWluaS1nYW1lcy9jaGVzc2ltYWxzLWNoYWxsZW5nZS1wcm9ncmVzcy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUMxQyxPQUFPLEVBQ0wsU0FBUyxFQUNULFVBQVUsRUFDVixHQUFHLEVBQ0gsTUFBTSxFQUNOLEtBQUssRUFDTCxVQUFVLEVBQ1YsT0FBTyxFQUNQLEtBQUssRUFDTCxlQUFlLEVBQ2YsTUFBTSxFQUNOLEtBQUssR0FDTixNQUFNLHlCQUF5QixDQUFDO0FBQ2pDLE9BQU8sRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRXRDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQzs7QUFROUUsTUFBTSxZQUFZLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDakUsTUFBTSxpQkFBaUIsR0FBRyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDNUQsTUFBTSxvQkFBb0IsR0FBRyxnQ0FBZ0MsQ0FBQztBQUc5RCxNQUFNLE9BQU8sa0NBQWtDO0lBRC9DO1FBRW1CLGlCQUFZLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzVCLGNBQVMsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7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WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEF1dGggfSBmcm9tICdAYW5ndWxhci9maXJlL2F1dGgnO1xuaW1wb3J0IHtcbiAgRmlyZXN0b3JlLFxuICBjb2xsZWN0aW9uLFxuICBkb2MsXG4gIGdldERvYyxcbiAgbGltaXQsXG4gIG9uU25hcHNob3QsXG4gIG9yZGVyQnksXG4gIHF1ZXJ5LFxuICBzZXJ2ZXJUaW1lc3RhbXAsXG4gIHNldERvYyxcbiAgd2hlcmUsXG59IGZyb20gJ0Bhbmd1bGFyL2ZpcmUvZmlyZXN0b3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IEZpcmViYXNlU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2ZpcmViYXNlL2ZpcmViYXNlLnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgQ2hlc3NpbWFsc0NoYWxsZW5nZVJvdW5kU3RhdHMsXG4gIENoZXNzaW1hbHNDaGFsbGVuZ2VSdW4sXG4gIENoZXNzaW1hbHNDaGFsbGVuZ2VTdGF0cyxcbiAgQ2hlc3NpbWFsc1N0YXRzTW9kZSxcbn0gZnJvbSAnLi90eXBlcyc7XG5cbmNvbnN0IEVNUFRZX1BPV0VSUyA9IHsgZWFnbGU6IDAsIGJ1bGw6IDAsIGthbmdhcm9vOiAwLCBsaW9uOiAwIH07XG5jb25zdCBFTVBUWV9NT0RFX1JFQ09SRCA9IHsgcGxheWVkOiAwLCB3aW5zOiAwLCBsb3NzZXM6IDAgfTtcbmNvbnN0IExPQ0FMX0FDVElWRV9SVU5fS0VZID0gJ2NoZXNzaW1hbHMuY2hhbGxlbmdlLmFjdGl2ZVJ1bic7XG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgQ2hlc3NpbWFsc0NoYWxsZW5nZVByb2dyZXNzU2VydmljZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgZmlyZWJhc2VBdXRoID0gaW5qZWN0KEF1dGgpO1xuICBwcml2YXRlIHJlYWRvbmx5IGZpcmVzdG9yZSA9IGluamVjdChGaXJlc3RvcmUpO1xuICBwcml2YXRlIHJlYWRvbmx5IGZpcmViYXNlID0gaW5qZWN0KEZpcmViYXNlU2VydmljZSk7XG5cbiAgZ2V0IGN1cnJlbnRVaWQoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5maXJlYmFzZUF1dGguY3VycmVudFVzZXI/LnVpZDtcbiAgfVxuXG4gIHdhdGNoU3RhdHMoKTogT2JzZXJ2YWJsZTxDaGVzc2ltYWxzQ2hhbGxlbmdlU3RhdHMgfCB1bmRlZmluZWQ+IHtcbiAgICBjb25zdCB1aWQgPSB0aGlzLmN1cnJlbnRVaWQ7XG4gICAgaWYgKCF1aWQpIHJldHVybiBvZih1bmRlZmluZWQpO1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZSgoc3Vic2NyaWJlcikgPT4ge1xuICAgICAgY29uc3QgdW5zdWJzY3JpYmUgPSBvblNuYXBzaG90KFxuICAgICAgICB0aGlzLnN0YXRzUmVmKHVpZCksXG4gICAgICAgIChzbmFwc2hvdCkgPT4gc3Vic2NyaWJlci5uZXh0KFxuICAgICAgICAgIHNuYXBzaG90LmV4aXN0cygpID8gdGhpcy5ub3JtYWxpemVTdGF0cyhzbmFwc2hvdC5kYXRhKCkgYXMgUGFydGlhbDxDaGVzc2ltYWxzQ2hhbGxlbmdlU3RhdHM+KSA6IHVuZGVmaW5lZCxcbiAgICAgICAgKSxcbiAgICAgICAgKGVycm9yKSA9PiBzdWJzY3JpYmVyLmVycm9yKGVycm9yKSxcbiAgICAgICk7XG4gICAgICByZXR1cm4gdW5zdWJzY3JpYmU7XG4gICAgfSk7XG4gIH1cblxuICB3YXRjaFJlY2VudFJ1bnMobGltaXRDb3VudCA9IDQpOiBPYnNlcnZhYmxlPENoZXNzaW1hbHNDaGFsbGVuZ2VSdW5bXT4ge1xuICAgIGNvbnN0IHVpZCA9IHRoaXMuY3VycmVudFVpZDtcbiAgICBpZiAoIXVpZCkgcmV0dXJuIG9mKFtdKTtcbiAgICBjb25zdCBydW5zUXVlcnkgPSBxdWVyeShcbiAgICAgIGNvbGxlY3Rpb24odGhpcy5maXJlc3RvcmUsIHRoaXMucnVuc1BhdGgodWlkKSksXG4gICAgICBvcmRlckJ5KCd1cGRhdGVkQXQnLCAnZGVzYycpLFxuICAgICAgbGltaXQobGltaXRDb3VudCksXG4gICAgKTtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoKHN1YnNjcmliZXIpID0+IHtcbiAgICAgIGNvbnN0IHVuc3Vic2NyaWJlID0gb25TbmFwc2hvdChcbiAgICAgICAgcnVuc1F1ZXJ5LFxuICAgICAgICAoc25hcHNob3QpID0+IHN1YnNjcmliZXIubmV4dChzbmFwc2hvdC5kb2NzLm1hcCgoaXRlbSkgPT4gaXRlbS5kYXRhKCkgYXMgQ2hlc3NpbWFsc0NoYWxsZW5nZVJ1bikpLFxuICAgICAgICAoZXJyb3IpID0+IHN1YnNjcmliZXIuZXJyb3IoZXJyb3IpLFxuICAgICAgKTtcbiAgICAgIHJldHVybiB1bnN1YnNjcmliZTtcbiAgICB9KTtcbiAgfVxuXG4gIHdhdGNoQWN0aXZlUnVuKCk6IE9ic2VydmFibGU8Q2hlc3NpbWFsc0NoYWxsZW5nZVJ1biB8IHVuZGVmaW5lZD4ge1xuICAgIGNvbnN0IHVpZCA9IHRoaXMuY3VycmVudFVpZDtcbiAgICBpZiAoIXVpZCkgcmV0dXJuIG9mKHRoaXMucmVhZExvY2FsQWN0aXZlUnVuKCkpO1xuICAgIGNvbnN0IGFjdGl2ZVF1ZXJ5ID0gcXVlcnkoXG4gICAgICBjb2xsZWN0aW9uKHRoaXMuZmlyZXN0b3JlLCB0aGlzLnJ1bnNQYXRoKHVpZCkpLFxuICAgICAgd2hlcmUoJ3N0YXR1cycsICc9PScsICdhY3RpdmUnKSxcbiAgICApO1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZSgoc3Vic2NyaWJlcikgPT4ge1xuICAgICAgc3Vic2NyaWJlci5uZXh0KHRoaXMucmVhZExvY2FsQWN0aXZlUnVuKCkpO1xuICAgICAgY29uc3QgdW5zdWJzY3JpYmUgPSBvblNuYXBzaG90KFxuICAgICAgICBhY3RpdmVRdWVyeSxcbiAgICAgICAgKHNuYXBzaG90KSA9PiB7XG4gICAgICAgICAgY29uc3QgcmVtb3RlUnVuID0gc25hcHNob3QuZG9jc1xuICAgICAgICAgICAgLm1hcCgoaXRlbSkgPT4gaXRlbS5kYXRhKCkgYXMgQ2hlc3NpbWFsc0NoYWxsZW5nZVJ1bilcbiAgICAgICAgICAgIC5yZWR1Y2U8Q2hlc3NpbWFsc0NoYWxsZW5nZVJ1biB8IHVuZGVmaW5lZD4oKGJlc3QsIHJ1bikgPT4gdGhpcy5uZXdlc3RBY3RpdmVSdW4oYmVzdCwgcnVuKSwgdW5kZWZpbmVkKTtcbiAgICAgICAgICBjb25zdCBuZXh0ID0gdGhpcy5uZXdlc3RBY3RpdmVSdW4odGhpcy5yZWFkTG9jYWxBY3RpdmVSdW4odWlkKSwgcmVtb3RlUnVuKTtcbiAgICAgICAgICB0aGlzLndyaXRlTG9jYWxBY3RpdmVSdW4obmV4dCk7XG4gICAgICAgICAgc3Vic2NyaWJlci5uZXh0KG5leHQpO1xuICAgICAgICB9LFxuICAgICAgICAoKSA9PiBzdWJzY3JpYmVyLm5leHQodGhpcy5yZWFkTG9jYWxBY3RpdmVSdW4oKSksXG4gICAgICApO1xuICAgICAgcmV0dXJuIHVuc3Vic2NyaWJlO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgc2F2ZVJ1bihydW46IENoZXNzaW1hbHNDaGFsbGVuZ2VSdW4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB1aWQgPSBhd2FpdCB0aGlzLmVuc3VyZVVzZXIoKTtcbiAgICBjb25zdCBvd25lZFJ1biA9IHsgLi4ucnVuLCB1c2VySWQ6IHVpZCB9O1xuICAgIHRoaXMud3JpdGVMb2NhbEFjdGl2ZVJ1bihvd25lZFJ1bi5zdGF0dXMgPT09ICdhY3RpdmUnID8gb3duZWRSdW4gOiB1bmRlZmluZWQsIHVpZCk7XG4gICAgYXdhaXQgc2V0RG9jKHRoaXMucnVuUmVmKHVpZCwgcnVuLmlkKSwgdGhpcy53aXRob3V0VW5kZWZpbmVkKHtcbiAgICAgIC4uLm93bmVkUnVuLFxuICAgICAgdXBkYXRlZEF0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICB1cGRhdGVkQXRTZXJ2ZXI6IHNlcnZlclRpbWVzdGFtcCgpLFxuICAgIH0pLCB7IG1lcmdlOiB0cnVlIH0pO1xuICB9XG5cbiAgYXN5bmMgcmVjb3JkQ2hhbGxlbmdlU3RhcnRlZChydW46IENoZXNzaW1hbHNDaGFsbGVuZ2VSdW4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB1aWQgPSBhd2FpdCB0aGlzLmVuc3VyZVVzZXIoKTtcbiAgICB0aGlzLndyaXRlTG9jYWxBY3RpdmVSdW4oeyAuLi5ydW4sIHVzZXJJZDogdWlkIH0sIHVpZCk7XG4gICAgY29uc3QgY3VycmVudCA9IGF3YWl0IHRoaXMucmVhZFN0YXRzKHVpZCk7XG4gICAgYXdhaXQgc2V0RG9jKHRoaXMuc3RhdHNSZWYodWlkKSwge1xuICAgICAgLi4uY3VycmVudCxcbiAgICAgIHVzZXJJZDogdWlkLFxuICAgICAgY2hhbGxlbmdlc1BsYXllZDogY3VycmVudC5jaGFsbGVuZ2VzUGxheWVkICsgMSxcbiAgICAgIHVwZGF0ZWRBdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgdXBkYXRlZEF0U2VydmVyOiBzZXJ2ZXJUaW1lc3RhbXAoKSxcbiAgICB9LCB7IG1lcmdlOiB0cnVlIH0pO1xuICAgIGF3YWl0IHRoaXMuc2F2ZVJ1bihydW4pO1xuICB9XG5cbiAgYXN5bmMgYXBwbHlSb3VuZFJlc3VsdChhcmdzOiB7XG4gICAgcnVuOiBDaGVzc2ltYWxzQ2hhbGxlbmdlUnVuO1xuICAgIHJvdW5kUmVhY2hlZDogbnVtYmVyO1xuICAgIHdvbjogYm9vbGVhbjtcbiAgICBjb21wbGV0ZWQ6IGJvb2xlYW47XG4gICAgcm91bmRTdGF0czogQ2hlc3NpbWFsc0NoYWxsZW5nZVJvdW5kU3RhdHM7XG4gIH0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB1aWQgPSBhd2FpdCB0aGlzLmVuc3VyZVVzZXIoKTtcbiAgICBjb25zdCBjdXJyZW50ID0gYXdhaXQgdGhpcy5yZWFkU3RhdHModWlkKTtcbiAgICBjb25zdCBuZXh0OiBDaGVzc2ltYWxzQ2hhbGxlbmdlU3RhdHMgPSB7XG4gICAgICB1c2VySWQ6IHVpZCxcbiAgICAgIGNoYWxsZW5nZXNQbGF5ZWQ6IGN1cnJlbnQuY2hhbGxlbmdlc1BsYXllZCxcbiAgICAgIGNoYWxsZW5nZXNDb21wbGV0ZWQ6IGN1cnJlbnQuY2hhbGxlbmdlc0NvbXBsZXRlZCArIChhcmdzLmNvbXBsZXRlZCA/IDEgOiAwKSxcbiAgICAgIGJlc3RXaW5TdHJlYWs6IE1hdGgubWF4KGN1cnJlbnQuYmVzdFdpblN0cmVhaywgYXJncy5ydW4uYmVzdFN0cmVha0luUnVuKSxcbiAgICAgIGJlc3RSb3VuZFJlYWNoZWQ6IE1hdGgubWF4KGN1cnJlbnQuYmVzdFJvdW5kUmVhY2hlZCwgYXJncy5yb3VuZFJlYWNoZWQpLFxuICAgICAgdG90YWxXaW5zOiBjdXJyZW50LnRvdGFsV2lucyArIChhcmdzLndvbiA/IDEgOiAwKSxcbiAgICAgIHRvdGFsTG9zc2VzOiBjdXJyZW50LnRvdGFsTG9zc2VzICsgKGFyZ3Mud29uID8gMCA6IDEpLFxuICAgICAgYm90c0RlZmVhdGVkOiBjdXJyZW50LmJvdHNEZWZlYXRlZCArIChhcmdzLndvbiA/IDEgOiAwKSxcbiAgICAgIHBvd2Vyc1VzZWQ6IHtcbiAgICAgICAgZWFnbGU6IGN1cnJlbnQucG93ZXJzVXNlZC5lYWdsZSArIGFyZ3Mucm91bmRTdGF0cy5wb3dlcnNVc2VkLmVhZ2xlLFxuICAgICAgICBidWxsOiBjdXJyZW50LnBvd2Vyc1VzZWQuYnVsbCArIGFyZ3Mucm91bmRTdGF0cy5wb3dlcnNVc2VkLmJ1bGwsXG4gICAgICAgIGthbmdhcm9vOiBjdXJyZW50LnBvd2Vyc1VzZWQua2FuZ2Fyb28gKyBhcmdzLnJvdW5kU3RhdHMucG93ZXJzVXNlZC5rYW5nYXJvbyxcbiAgICAgICAgbGlvbjogY3VycmVudC5wb3dlcnNVc2VkLmxpb24gKyBhcmdzLnJvdW5kU3RhdHMucG93ZXJzVXNlZC5saW9uLFxuICAgICAgfSxcbiAgICAgIHBvd2VyQ2FwdHVyZXM6IGN1cnJlbnQucG93ZXJDYXB0dXJlcyArIGFyZ3Mucm91bmRTdGF0cy5wb3dlckNhcHR1cmVzLFxuICAgICAgcHJvbW90aW9uczogY3VycmVudC5wcm9tb3Rpb25zICsgYXJncy5yb3VuZFN0YXRzLnByb21vdGlvbnMsXG4gICAgICB0b3RhbFNjb3JlOiBjdXJyZW50LnRvdGFsU2NvcmUgKyBhcmdzLnJvdW5kU3RhdHMuc2NvcmUsXG4gICAgICBiZXN0Um91bmRTY29yZTogTWF0aC5tYXgoY3VycmVudC5iZXN0Um91bmRTY29yZSwgYXJncy5yb3VuZFN0YXRzLnNjb3JlKSxcbiAgICAgIGJlc3RNb3ZlU2NvcmU6IE1hdGgubWF4KGN1cnJlbnQuYmVzdE1vdmVTY29yZSwgYXJncy5yb3VuZFN0YXRzLmJlc3RNb3ZlU2NvcmUpLFxuICAgICAgYmVzdENvbWJvOiBNYXRoLm1heChjdXJyZW50LmJlc3RDb21ibywgYXJncy5yb3VuZFN0YXRzLmJlc3RDb21ibyksXG4gICAgICBtb2RlU3RhdHM6IHtcbiAgICAgICAgLi4uY3VycmVudC5tb2RlU3RhdHMsXG4gICAgICAgIGNoYWxsZW5nZTogdGhpcy5hZGRNb2RlUmVzdWx0KGN1cnJlbnQubW9kZVN0YXRzLmNoYWxsZW5nZSwgYXJncy53b24pLFxuICAgICAgfSxcbiAgICAgIHVwZGF0ZWRBdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgIH07XG4gICAgYXdhaXQgc2V0RG9jKHRoaXMuc3RhdHNSZWYodWlkKSwgeyAuLi5uZXh0LCB1cGRhdGVkQXRTZXJ2ZXI6IHNlcnZlclRpbWVzdGFtcCgpIH0sIHsgbWVyZ2U6IHRydWUgfSk7XG4gICAgYXdhaXQgdGhpcy5zYXZlUnVuKGFyZ3MucnVuKTtcbiAgfVxuXG4gIGFzeW5jIHJlY29yZE1vZGVSZXN1bHQobW9kZTogRXhjbHVkZTxDaGVzc2ltYWxzU3RhdHNNb2RlLCAnY2hhbGxlbmdlJz4sIHdvbjogYm9vbGVhbik6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHVpZCA9IGF3YWl0IHRoaXMuZW5zdXJlVXNlcigpO1xuICAgIGNvbnN0IGN1cnJlbnQgPSBhd2FpdCB0aGlzLnJlYWRTdGF0cyh1aWQpO1xuICAgIGF3YWl0IHNldERvYyh0aGlzLnN0YXRzUmVmKHVpZCksIHtcbiAgICAgIC4uLmN1cnJlbnQsXG4gICAgICB1c2VySWQ6IHVpZCxcbiAgICAgIG1vZGVTdGF0czoge1xuICAgICAgICAuLi5jdXJyZW50Lm1vZGVTdGF0cyxcbiAgICAgICAgW21vZGVdOiB0aGlzLmFkZE1vZGVSZXN1bHQoY3VycmVudC5tb2RlU3RhdHNbbW9kZV0sIHdvbiksXG4gICAgICB9LFxuICAgICAgdXBkYXRlZEF0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICB1cGRhdGVkQXRTZXJ2ZXI6IHNlcnZlclRpbWVzdGFtcCgpLFxuICAgIH0sIHsgbWVyZ2U6IHRydWUgfSk7XG4gIH1cblxuICBlbXB0eVN0YXRzKCk6IENoZXNzaW1hbHNDaGFsbGVuZ2VTdGF0cyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNoYWxsZW5nZXNQbGF5ZWQ6IDAsXG4gICAgICBjaGFsbGVuZ2VzQ29tcGxldGVkOiAwLFxuICAgICAgYmVzdFdpblN0cmVhazogMCxcbiAgICAgIGJlc3RSb3VuZFJlYWNoZWQ6IDAsXG4gICAgICB0b3RhbFdpbnM6IDAsXG4gICAgICB0b3RhbExvc3NlczogMCxcbiAgICAgIGJvdHNEZWZlYXRlZDogMCxcbiAgICAgIHBvd2Vyc1VzZWQ6IHsgLi4uRU1QVFlfUE9XRVJTIH0sXG4gICAgICBwb3dlckNhcHR1cmVzOiAwLFxuICAgICAgcHJvbW90aW9uczogMCxcbiAgICAgIHRvdGFsU2NvcmU6IDAsXG4gICAgICBiZXN0Um91bmRTY29yZTogMCxcbiAgICAgIGJlc3RNb3ZlU2NvcmU6IDAsXG4gICAgICBiZXN0Q29tYm86IDAsXG4gICAgICBtb2RlU3RhdHM6IHRoaXMuZW1wdHlNb2RlU3RhdHMoKSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyByZWFkU3RhdHModWlkOiBzdHJpbmcpOiBQcm9taXNlPENoZXNzaW1hbHNDaGFsbGVuZ2VTdGF0cz4ge1xuICAgIC8vIEZpcmVzdG9yZSdzIHdlYiBTREsgZG9lcyBub3QgbmVlZCBhIHRyYW5zYWN0aW9uIGZvciB0aGVzZSBjYXN1YWwgZ2FtZSBzdGF0cy5cbiAgICAvLyBMYXN0LXdyaXRlLXdpbnMgaXMgYWNjZXB0YWJsZSBmb3IgdGhpcyBmaXJzdCB2ZXJzaW9uIGJlY2F1c2Ugb25lIHJ1biBpcyBhY3RpdmUgcGVyIGJyb3dzZXIuXG4gICAgY29uc3Qgc25hcHNob3QgPSBhd2FpdCBnZXREb2ModGhpcy5zdGF0c1JlZih1aWQpKTtcbiAgICByZXR1cm4gc25hcHNob3QuZXhpc3RzKCkgPyB0aGlzLm5vcm1hbGl6ZVN0YXRzKHNuYXBzaG90LmRhdGEoKSBhcyBQYXJ0aWFsPENoZXNzaW1hbHNDaGFsbGVuZ2VTdGF0cz4pIDogdGhpcy5lbXB0eVN0YXRzKCk7XG4gIH1cblxuICBwcml2YXRlIG5vcm1hbGl6ZVN0YXRzKHZhbHVlOiBQYXJ0aWFsPENoZXNzaW1hbHNDaGFsbGVuZ2VTdGF0cz4pOiBDaGVzc2ltYWxzQ2hhbGxlbmdlU3RhdHMge1xuICAgIGNvbnN0IGVtcHR5ID0gdGhpcy5lbXB0eVN0YXRzKCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmVtcHR5LFxuICAgICAgLi4udmFsdWUsXG4gICAgICBwb3dlcnNVc2VkOiB7XG4gICAgICAgIC4uLkVNUFRZX1BPV0VSUyxcbiAgICAgICAgLi4uKHZhbHVlLnBvd2Vyc1VzZWQgPz8ge30pLFxuICAgICAgfSxcbiAgICAgIG1vZGVTdGF0czogdGhpcy5ub3JtYWxpemVNb2RlU3RhdHModmFsdWUpLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGFkZE1vZGVSZXN1bHQoY3VycmVudDogeyBwbGF5ZWQ6IG51bWJlcjsgd2luczogbnVtYmVyOyBsb3NzZXM6IG51bWJlciB9LCB3b246IGJvb2xlYW4pIHtcbiAgICByZXR1cm4ge1xuICAgICAgcGxheWVkOiBjdXJyZW50LnBsYXllZCArIDEsXG4gICAgICB3aW5zOiBjdXJyZW50LndpbnMgKyAod29uID8gMSA6IDApLFxuICAgICAgbG9zc2VzOiBjdXJyZW50Lmxvc3NlcyArICh3b24gPyAwIDogMSksXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgZW1wdHlNb2RlU3RhdHMoKTogQ2hlc3NpbWFsc0NoYWxsZW5nZVN0YXRzWydtb2RlU3RhdHMnXSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNoYWxsZW5nZTogeyAuLi5FTVBUWV9NT0RFX1JFQ09SRCB9LFxuICAgICAgYm90OiB7IC4uLkVNUFRZX01PREVfUkVDT1JEIH0sXG4gICAgICBvbmxpbmU6IHsgLi4uRU1QVFlfTU9ERV9SRUNPUkQgfSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBub3JtYWxpemVNb2RlU3RhdHModmFsdWU6IFBhcnRpYWw8Q2hlc3NpbWFsc0NoYWxsZW5nZVN0YXRzPik6IENoZXNzaW1hbHNDaGFsbGVuZ2VTdGF0c1snbW9kZVN0YXRzJ10ge1xuICAgIGNvbnN0IGVtcHR5ID0gdGhpcy5lbXB0eU1vZGVTdGF0cygpO1xuICAgIHJldHVybiB7XG4gICAgICBjaGFsbGVuZ2U6IHtcbiAgICAgICAgLi4uZW1wdHkuY2hhbGxlbmdlLFxuICAgICAgICBwbGF5ZWQ6IHZhbHVlLm1vZGVTdGF0cz8uY2hhbGxlbmdlPy5wbGF5ZWQgPz8gKCh2YWx1ZS50b3RhbFdpbnMgPz8gMCkgKyAodmFsdWUudG90YWxMb3NzZXMgPz8gMCkpLFxuICAgICAgICB3aW5zOiB2YWx1ZS5tb2RlU3RhdHM/LmNoYWxsZW5nZT8ud2lucyA/PyAodmFsdWUudG90YWxXaW5zID8/IDApLFxuICAgICAgICBsb3NzZXM6IHZhbHVlLm1vZGVTdGF0cz8uY2hhbGxlbmdlPy5sb3NzZXMgPz8gKHZhbHVlLnRvdGFsTG9zc2VzID8/IDApLFxuICAgICAgfSxcbiAgICAgIGJvdDoge1xuICAgICAgICAuLi5lbXB0eS5ib3QsXG4gICAgICAgIC4uLih2YWx1ZS5tb2RlU3RhdHM/LmJvdCA/PyB7fSksXG4gICAgICB9LFxuICAgICAgb25saW5lOiB7XG4gICAgICAgIC4uLmVtcHR5Lm9ubGluZSxcbiAgICAgICAgLi4uKHZhbHVlLm1vZGVTdGF0cz8ub25saW5lID8/IHt9KSxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZW5zdXJlVXNlcigpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGF3YWl0IHRoaXMuZmlyZWJhc2Uud2hlbkZpcmViYXNlQXV0aFJlYWR5KCk7XG4gICAgY29uc3QgdXNlciA9IHRoaXMuZmlyZWJhc2VBdXRoLmN1cnJlbnRVc2VyO1xuICAgIGlmICh1c2VyPy51aWQpIHtcbiAgICAgIGF3YWl0IHVzZXIuZ2V0SWRUb2tlbigpO1xuICAgICAgcmV0dXJuIHVzZXIudWlkO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NIRVNTSU1BTFNfQ0hBTExFTkdFX0xPR0lOX1JFUVVJUkVEJyk7XG4gIH1cblxuICBwcml2YXRlIHN0YXRzUmVmKHVpZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGRvYyh0aGlzLmZpcmVzdG9yZSwgYHVzZXJzLyR7dWlkfS9taW5pR2FtZXMvY2hlc3NpbWFscy9jaGFsbGVuZ2Uvc3RhdHNgKTtcbiAgfVxuXG4gIHByaXZhdGUgcnVuUmVmKHVpZDogc3RyaW5nLCBydW5JZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGRvYyh0aGlzLmZpcmVzdG9yZSwgYCR7dGhpcy5ydW5zUGF0aCh1aWQpfS8ke3J1bklkfWApO1xuICB9XG5cbiAgcHJpdmF0ZSBydW5zUGF0aCh1aWQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGB1c2Vycy8ke3VpZH0vbWluaUdhbWVzL2NoZXNzaW1hbHMvY2hhbGxlbmdlUnVuc2A7XG4gIH1cblxuICBwcml2YXRlIHJlYWRMb2NhbEFjdGl2ZVJ1bih1aWQgPSB0aGlzLmN1cnJlbnRVaWQpOiBDaGVzc2ltYWxzQ2hhbGxlbmdlUnVuIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoIXVpZCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmF3ID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5sb2NhbEFjdGl2ZVJ1bktleSh1aWQpKTtcbiAgICAgIGlmICghcmF3KSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgY29uc3QgcnVuID0gSlNPTi5wYXJzZShyYXcpIGFzIENoZXNzaW1hbHNDaGFsbGVuZ2VSdW47XG4gICAgICByZXR1cm4gcnVuLnN0YXR1cyA9PT0gJ2FjdGl2ZScgJiYgKCFydW4udXNlcklkIHx8IHJ1bi51c2VySWQgPT09IHVpZCkgPyBydW4gOiB1bmRlZmluZWQ7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgd3JpdGVMb2NhbEFjdGl2ZVJ1bihydW46IENoZXNzaW1hbHNDaGFsbGVuZ2VSdW4gfCB1bmRlZmluZWQsIHVpZCA9IHRoaXMuY3VycmVudFVpZCk6IHZvaWQge1xuICAgIGlmICghdWlkKSByZXR1cm47XG4gICAgdHJ5IHtcbiAgICAgIGlmIChydW4/LnN0YXR1cyA9PT0gJ2FjdGl2ZScpIHtcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0odGhpcy5sb2NhbEFjdGl2ZVJ1bktleSh1aWQpLCBKU09OLnN0cmluZ2lmeSh7IC4uLnJ1biwgdXNlcklkOiB1aWQgfSkpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLmxvY2FsQWN0aXZlUnVuS2V5KHVpZCkpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gTG9jYWwgcGVyc2lzdGVuY2UgaXMgb25seSBhIHJlZnJlc2ggZmFsbGJhY2suXG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBsb2NhbEFjdGl2ZVJ1bktleSh1aWQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke0xPQ0FMX0FDVElWRV9SVU5fS0VZfS4ke3VpZH1gO1xuICB9XG5cbiAgcHJpdmF0ZSBuZXdlc3RBY3RpdmVSdW4oXG4gICAgbG9jYWw6IENoZXNzaW1hbHNDaGFsbGVuZ2VSdW4gfCB1bmRlZmluZWQsXG4gICAgcmVtb3RlOiBDaGVzc2ltYWxzQ2hhbGxlbmdlUnVuIHwgdW5kZWZpbmVkLFxuICApOiBDaGVzc2ltYWxzQ2hhbGxlbmdlUnVuIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAobG9jYWw/LnN0YXR1cyAhPT0gJ2FjdGl2ZScpIHJldHVybiByZW1vdGU/LnN0YXR1cyA9PT0gJ2FjdGl2ZScgPyByZW1vdGUgOiB1bmRlZmluZWQ7XG4gICAgaWYgKHJlbW90ZT8uc3RhdHVzICE9PSAnYWN0aXZlJykgcmV0dXJuIGxvY2FsO1xuICAgIGlmIChsb2NhbC5pZCAhPT0gcmVtb3RlLmlkKSByZXR1cm4gdGhpcy5ydW5UaW1lKGxvY2FsKSA+PSB0aGlzLnJ1blRpbWUocmVtb3RlKSA/IGxvY2FsIDogcmVtb3RlO1xuICAgIGlmICh0aGlzLnJ1blByb2dyZXNzU2NvcmUobG9jYWwpID4gdGhpcy5ydW5Qcm9ncmVzc1Njb3JlKHJlbW90ZSkpIHJldHVybiBsb2NhbDtcbiAgICBpZiAodGhpcy5ydW5Qcm9ncmVzc1Njb3JlKHJlbW90ZSkgPiB0aGlzLnJ1blByb2dyZXNzU2NvcmUobG9jYWwpKSByZXR1cm4gcmVtb3RlO1xuICAgIHJldHVybiB0aGlzLnJ1blRpbWUobG9jYWwpID49IHRoaXMucnVuVGltZShyZW1vdGUpID8gbG9jYWwgOiByZW1vdGU7XG4gIH1cblxuICBwcml2YXRlIHJ1blByb2dyZXNzU2NvcmUocnVuOiBDaGVzc2ltYWxzQ2hhbGxlbmdlUnVuKTogbnVtYmVyIHtcbiAgICByZXR1cm4gcnVuLmN1cnJlbnRSb3VuZCAqIDEwMCArIHJ1bi53aW5zICogMTAgLSBydW4ubG9zc2VzO1xuICB9XG5cbiAgcHJpdmF0ZSBydW5UaW1lKHJ1bjogQ2hlc3NpbWFsc0NoYWxsZW5nZVJ1bik6IG51bWJlciB7XG4gICAgY29uc3QgdmFsdWUgPSBEYXRlLnBhcnNlKHJ1bi51cGRhdGVkQXQpO1xuICAgIHJldHVybiBOdW1iZXIuaXNGaW5pdGUodmFsdWUpID8gdmFsdWUgOiAwO1xuICB9XG5cbiAgcHJpdmF0ZSB3aXRob3V0VW5kZWZpbmVkPFQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4odmFsdWU6IFQpOiBUIHtcbiAgICByZXR1cm4gT2JqZWN0LmVudHJpZXModmFsdWUpLnJlZHVjZSgoYWNjLCBba2V5LCBlbnRyeV0pID0+IHtcbiAgICAgIGlmIChlbnRyeSAhPT0gdW5kZWZpbmVkKSBhY2Nba2V5IGFzIGtleW9mIFRdID0gZW50cnkgYXMgVFtrZXlvZiBUXTtcbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwge30gYXMgVCk7XG4gIH1cbn1cbiJdfQ==
|