simpo-component-library 3.6.988 → 3.6.989

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.
@@ -122,15 +122,12 @@ export class StorageServiceService {
122
122
  this.dbReady = new Promise((resolve, reject) => {
123
123
  if (isPlatformBrowser(this.platformId) && window.indexedDB) {
124
124
  const request = window.indexedDB.open(this.databaseName, this.databaseVersion);
125
- this.eventService.showLoadingScreen.emit(true);
126
125
  request.onerror = () => {
127
126
  console.error('[IndexedDB] Failed to open database');
128
- this.eventService.showLoadingScreen.emit(false);
129
127
  resolve();
130
128
  };
131
129
  request.onblocked = () => {
132
130
  console.warn('[IndexedDB] Database upgrade blocked by open connection');
133
- this.eventService.showLoadingScreen.emit(false);
134
131
  resolve();
135
132
  };
136
133
  request.onsuccess = async (event) => {
@@ -138,7 +135,6 @@ export class StorageServiceService {
138
135
  this.database.onversionchange = () => {
139
136
  this.database.close();
140
137
  };
141
- this.eventService.showLoadingScreen.emit(false);
142
138
  this.calculateCartTotals();
143
139
  this.calculateWishlistTotals();
144
140
  this.calculateBookingCartTotals();
@@ -429,4 +425,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
429
425
  type: Inject,
430
426
  args: [PLATFORM_ID]
431
427
  }] }] });
432
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmFnZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2ltcG8tdWkvc3JjL2xpYi9zZXJ2aWNlcy9zdG9yYWdlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUtuRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRWhDLE9BQU8sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFFbEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDcEQsT0FBTyxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFcEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlDQUFpQyxDQUFDOzs7Ozs7QUFPaEUsTUFBTSxPQUFPLHFCQUFxQjtJQUtoQyxZQUNtQixZQUEyQixFQUMzQixhQUE0QixFQUM1QixXQUF3QixFQUNWLE9BQW9CLEVBQzNDLE1BQWMsRUFDTyxVQUFrQjtRQUw5QixpQkFBWSxHQUFaLFlBQVksQ0FBZTtRQUMzQixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1QixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUNWLFlBQU8sR0FBUCxPQUFPLENBQWE7UUFDM0MsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNPLGVBQVUsR0FBVixVQUFVLENBQVE7UUFXekMsbUJBQWMsR0FBVyxDQUFDLENBQUM7UUFDbkMsdUJBQWtCLEdBQVcsQ0FBQyxDQUFDO1FBUXZCLHVCQUFrQixHQUFXLENBQUMsQ0FBQztRQU92Qyw4RkFBOEY7UUFDdEYsc0JBQWlCLEdBQVcsQ0FBQyxDQUFDO1FBdUR0QyxpQkFBWSxHQUFXLE1BQU0sQ0FBQztRQUM5Qiw0RkFBNEY7UUFDNUYsNEZBQTRGO1FBQzVGLG9GQUFvRjtRQUNwRixvQkFBZSxH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QzsrR0FsY1UscUJBQXFCLHVHQVN0QixhQUFhLG1DQUViLFdBQVc7bUhBWFYscUJBQXFCLGNBRnBCLE1BQU07OzRGQUVQLHFCQUFxQjtrQkFIakMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkI7OzBCQVVJLE1BQU07MkJBQUMsYUFBYTs7MEJBRXBCLE1BQU07MkJBQUMsV0FBVyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT3JkZXJlZEl0ZW1zIH0gZnJvbSAnLi4vZWNvbW1lcmNlL3N0eWxlcy9PcmRlcmVkSXRlbXMubW9kYWwnO1xuaW1wb3J0IHsgVXNlciB9IGZyb20gJy4uL2Vjb21tZXJjZS9zdHlsZXMvdXNlci5tb2RhbCc7XG5pbXBvcnQgeyBFdmVudHNTZXJ2aWNlIH0gZnJvbSAnLi9ldmVudHMuc2VydmljZSc7XG5pbXBvcnQgeyBDb29raWVTZXJ2aWNlIH0gZnJvbSAnbmd4LWNvb2tpZS1zZXJ2aWNlJztcbmltcG9ydCB7IGZvcmtKb2luIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBSZXN0U2VydmljZSB9IGZyb20gJy4vcmVzdC5zZXJ2aWNlJztcbmltcG9ydCB7IENhcnQsIGNhcnRUeXBlIH0gZnJvbSAnLi8uLi9lY29tbWVyY2Uvc3R5bGVzL2NhcnQubW9kYWwnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBpc1BsYXRmb3JtQnJvd3NlciB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBJbmplY3QsIFBMQVRGT1JNX0lEIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdG9yYWdlTGlrZSB9IGZyb20gJy4uL3NlcnZpY2VzL3N0b3JhZ2UtbGlrZSc7XG5pbXBvcnQgeyBMT0NBTF9TVE9SQUdFIH0gZnJvbSAnLi4vc2VydmljZXMvbG9jYWwtc3RvcmFnZS50b2tlbic7XG5cblxuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBTdG9yYWdlU2VydmljZVNlcnZpY2Uge1xuXG5cbiAgcHJpdmF0ZSBkYlJlYWR5ITogUHJvbWlzZTx2b2lkPjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGV2ZW50U2VydmljZTogRXZlbnRzU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvb2tpZVNlcnZpY2U6IENvb2tpZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSByZXN0U2VydmljZTogUmVzdFNlcnZpY2UsXG4gICAgQEluamVjdChMT0NBTF9TVE9SQUdFKSBwcml2YXRlIHN0b3JhZ2U6IFN0b3JhZ2VMaWtlLFxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgQEluamVjdChQTEFURk9STV9JRCkgcHJpdmF0ZSBwbGF0Zm9ybUlkOiBPYmplY3RcbiAgKSB7XG4gICAgdGhpcy5jcmVhdGVEYXRhQmFzZSgpO1xuICAgIGNvbnN0IHVzZXJEZXRhaWxzID0gdGhpcy5nZXRVc2VyKCk7XG4gICAgaWYgKCEhdXNlckRldGFpbHMpIHtcbiAgICAgIHRoaXMucmVzdFNlcnZpY2UuZ2V0VXNlckluZm8odXNlckRldGFpbHMudXNlcklkKS5zdWJzY3JpYmUoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5zZXRVc2VyKHJlc3BvbnNlLmRhdGEpO1xuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHRvdGFsQ2FydEl0ZW1zOiBudW1iZXIgPSAwO1xuICBnZXRDYXJ0VG90YWxBbW91bnQ6IG51bWJlciA9IDA7XG4gIGdldCBnZXRUb3RhbENhcnRJdGVtcygpIHtcbiAgICBpZiAodGhpcy50b3RhbENhcnRJdGVtcyA8IDApXG4gICAgICB0aGlzLnRvdGFsQ2FydEl0ZW1zID0gMDtcbiAgICAvLyB0aGlzLmV2ZW50U2VydmljZS5zaG93QmFnSWNvbi5lbWl0KHRoaXMudG90YWxDYXJ0SXRlbXMgPiAwKTtcbiAgICByZXR1cm4gdGhpcy50b3RhbENhcnRJdGVtcztcbiAgfVxuXG4gIHByaXZhdGUgdG90YWxXaXNobGlzdEl0ZW1zOiBudW1iZXIgPSAwO1xuICBnZXQgZ2V0VG90YWxXaXNobGlzdEl0ZW1zKCkge1xuICAgIGlmICh0aGlzLnRvdGFsV2lzaGxpc3RJdGVtcyA8IDApXG4gICAgICB0aGlzLnRvdGFsV2lzaGxpc3RJdGVtcyA9IDA7XG4gICAgcmV0dXJuIHRoaXMudG90YWxXaXNobGlzdEl0ZW1zO1xuICB9XG5cbiAgLyoqIENvbWJpbmVkIGNvdW50IGFjcm9zcyBIT01FX1ZJU0lUX0NBUlQgKyBWSURFT19DQUxMX0NBUlQsIGZvciB0aGUgaGVhZGVyIEJvb2tpbmdzIGJhZGdlLiAqL1xuICBwcml2YXRlIHRvdGFsQm9va2luZ0l0ZW1zOiBudW1iZXIgPSAwO1xuICBnZXQgZ2V0VG90YWxCb29raW5nSXRlbXMoKSB7XG4gICAgaWYgKHRoaXMudG90YWxCb29raW5nSXRlbXMgPCAwKVxuICAgICAgdGhpcy50b3RhbEJvb2tpbmdJdGVtcyA9IDA7XG4gICAgcmV0dXJuIHRoaXMudG90YWxCb29raW5nSXRlbXM7XG4gIH1cblxuICBjYWxjdWxhdGVCb29raW5nQ2FydFRvdGFscygpIHtcbiAgICBpZiAoIXRoaXMuZGF0YWJhc2UpIHJldHVybjtcbiAgICB0cnkge1xuICAgICAgY29uc3QgbW9kZXM6ICgnSE9NRV9WSVNJVCcgfCAnVklERU9fQ0FMTCcpW10gPSBbJ0hPTUVfVklTSVQnLCAnVklERU9fQ0FMTCddO1xuICAgICAgY29uc3QgY291bnRzOiBudW1iZXJbXSA9IFswLCAwXTtcbiAgICAgIG1vZGVzLmZvckVhY2goKG1vZGUsIGkpID0+IHtcbiAgICAgICAgY29uc3Qgc3RvcmVOYW1lID0gdGhpcy5ib29raW5nQ2FydFN0b3JlTmFtZShtb2RlKTtcbiAgICAgICAgY29uc3QgdHJhbnNhY3Rpb24gPSB0aGlzLmRhdGFiYXNlLnRyYW5zYWN0aW9uKHN0b3JlTmFtZSwgXCJyZWFkb25seVwiKTtcbiAgICAgICAgY29uc3QgcmVxdWVzdCA9IHRyYW5zYWN0aW9uLm9iamVjdFN0b3JlKHN0b3JlTmFtZSkuZ2V0QWxsKCk7XG4gICAgICAgIHJlcXVlc3Qub25zdWNjZXNzID0gKGV2ZW50OiBhbnkpID0+IHtcbiAgICAgICAgICBjb3VudHNbaV0gPSAoZXZlbnQudGFyZ2V0LnJlc3VsdCB8fCBbXSkubGVuZ3RoO1xuICAgICAgICAgIHRoaXMudG90YWxCb29raW5nSXRlbXMgPSBjb3VudHMucmVkdWNlKChhLCBiKSA9PiBhICsgYiwgMCk7XG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLndhcm4oXCJFcnJvciBjYWxjdWxhdGluZyBib29raW5nIGNhcnQgdG90YWxzOlwiLCBlKTtcbiAgICB9XG4gIH1cblxuICBjYWxjdWxhdGVDYXJ0VG90YWxzKCkge1xuICAgIGlmICghdGhpcy5kYXRhYmFzZSkgcmV0dXJuO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBjYXJ0VHJhbnNhY3Rpb24gPSB0aGlzLmRhdGFiYXNlLnRyYW5zYWN0aW9uKHRoaXMuY2FydENvbGxlY3Rpb25OYW1lLCBcInJlYWRvbmx5XCIpO1xuICAgICAgY29uc3QgY2FydFJlcXVlc3QgPSBjYXJ0VHJhbnNhY3Rpb24ub2JqZWN0U3RvcmUodGhpcy5jYXJ0Q29sbGVjdGlvbk5hbWUpLmdldEFsbCgpO1xuICAgICAgY2FydFJlcXVlc3Qub25zdWNjZXNzID0gKGV2ZW50OiBhbnkpID0+IHtcbiAgICAgICAgY29uc3QgaXRlbXMgPSBldmVudC50YXJnZXQucmVzdWx0IHx8IFtdO1xuICAgICAgICB0aGlzLnRvdGFsQ2FydEl0ZW1zID0gaXRlbXMubGVuZ3RoO1xuICAgICAgICB0aGlzLmdldENhcnRUb3RhbEFtb3VudCA9IGl0ZW1zLnJlZHVjZSgoYWNjOiBudW1iZXIsIGl0ZW06IGFueSkgPT4gYWNjICsgKChpdGVtLnNlbGxpbmdQcmljZSB8fCAwKSAqIChpdGVtLnF1YW50aXR5IHx8IDEpKSwgMCk7XG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUud2FybihcIkVycm9yIGNhbGN1bGF0aW5nIGNhcnQgdG90YWxzOlwiLCBlKTtcbiAgICB9XG4gIH1cblxuICBjYWxjdWxhdGVXaXNobGlzdFRvdGFscygpIHtcbiAgICBpZiAoIXRoaXMuZGF0YWJhc2UpIHJldHVybjtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgd2lzaGxpc3RUcmFuc2FjdGlvbiA9IHRoaXMuZGF0YWJhc2UudHJhbnNhY3Rpb24odGhpcy5mYXZvdXJpdGVDb2xsZWN0aW9uTmFtZSwgXCJyZWFkb25seVwiKTtcbiAgICAgIGNvbnN0IHdpc2hsaXN0UmVxdWVzdCA9IHdpc2hsaXN0VHJhbnNhY3Rpb24ub2JqZWN0U3RvcmUodGhpcy5mYXZvdXJpdGVDb2xsZWN0aW9uTmFtZSkuZ2V0QWxsKCk7XG4gICAgICB3aXNobGlzdFJlcXVlc3Qub25zdWNjZXNzID0gKGV2ZW50OiBhbnkpID0+IHtcbiAgICAgICAgY29uc3QgaXRlbXMgPSBldmVudC50YXJnZXQucmVzdWx0IHx8IFtdO1xuICAgICAgICB0aGlzLnRvdGFsV2lzaGxpc3RJdGVtcyA9IGl0ZW1zLmxlbmd0aDtcbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS53YXJuKFwiRXJyb3IgY2FsY3VsYXRpbmcgd2lzaGxpc3QgdG90YWxzOlwiLCBlKTtcbiAgICB9XG4gIH1cblxuICBkYXRhYmFzZU5hbWU6IHN0cmluZyA9IFwiVVNFUlwiO1xuICAvLyBCdW1wZWQgMSAtPiAyIHRvIGFkZCB0aGUgdHdvIGJvb2tpbmctY2FydCBzdG9yZXMgYmVsb3cuIEluZGV4ZWREQiBvbmx5IGNyZWF0ZXMgbmV3IG9iamVjdFxuICAvLyBzdG9yZXMgaW5zaWRlIG9udXBncmFkZW5lZWRlZCwgd2hpY2ggb25seSBmaXJlcyBvbiBhIHZlcnNpb24gYnVtcCAtIHdpdGhvdXQgdGhpcywgdGhlIG5ld1xuICAvLyBzdG9yZXMgd291bGQgc2lsZW50bHkgbmV2ZXIgZ2V0IGNyZWF0ZWQgZm9yIGFueW9uZSB3aG8gYWxyZWFkeSBoYXMgYSB2MSBkYXRhYmFzZS5cbiAgZGF0YWJhc2VWZXJzaW9uOiBudW1iZXIgPSAyO1xuICBjYXJ0Q29sbGVjdGlvbk5hbWU6IHN0cmluZyA9IFwiVVNFUl9DQVJUXCI7XG4gIGZhdm91cml0ZUNvbGxlY3Rpb25OYW1lOiBzdHJpbmcgPSBcIlVTRVJfRkFWT1VSSVRFXCI7XG4gIHRyaWFsQ2FydENvbGxlY3Rpb25OYW1lOiBzdHJpbmcgPSAnVFJJQUxfQ0FSVCdcbiAgdXNlckNvbGxlY3Rpb25OYW1lOiBzdHJpbmcgPSBcIlVTRVJcIjtcbiAgLyoqXG4gICAqIE9uZSBidWNrZXQgcGVyIGJvb2tpbmcgbW9kZSAoSG9tZSBWaXNpdCAvIFZpZGVvIENhbGwpLCBsb2NhbC1vbmx5LCBubyBzZXJ2ZXIgc3luYyAtIHVubGlrZVxuICAgKiBUUklBTF9DQVJULCB0aGUgbmV3IGdyb3VwL2NhcnQgYm9va2luZyBBUEkgdGFrZXMgcHJvZHVjdCBsaW5lcyBkaXJlY3RseSBpbiB0aGUgaG9sZCByZXF1ZXN0LFxuICAgKiBzbyB0aGVyZSdzIG5vIHNlcnZlci1zaWRlIGNhcnQgdG8ga2VlcCB0aGVzZSBpbiBzeW5jIHdpdGguIEtlcHQgc2VwYXJhdGUgZnJvbSBlYWNoIG90aGVyIHNvXG4gICAqIGEgY3VzdG9tZXIgY2FuIGhvbGQgYSBwZW5kaW5nIGNhcnQgZm9yIGVhY2ggbW9kZSBhdCBvbmNlLlxuICAgKi9cbiAgaG9tZVZpc2l0Q2FydENvbGxlY3Rpb25OYW1lOiBzdHJpbmcgPSAnSE9NRV9WSVNJVF9DQVJUJztcbiAgdmlkZW9DYWxsQ2FydENvbGxlY3Rpb25OYW1lOiBzdHJpbmcgPSAnVklERU9fQ0FMTF9DQVJUJztcbiAgZGF0YWJhc2UhOiBJREJEYXRhYmFzZTtcblxuICBjYXJ0Q29sbGVjdGlvblJlZjogSURCT2JqZWN0U3RvcmUgfCBudWxsID0gbnVsbDtcbiAgZmF2b3VyaXRlQ29sbGVjdGlvblJlZjogSURCT2JqZWN0U3RvcmUgfCBudWxsID0gbnVsbDtcbiAgdXNlckNvbGxlY3Rpb25SZWY6IElEQk9iamVjdFN0b3JlIHwgbnVsbCA9IG51bGw7XG4gIHRyaWFsQ2FydENvbGxlY3Rpb25SZWY6IElEQk9iamVjdFN0b3JlIHwgbnVsbCA9IG51bGw7XG5cbiAgY3JlYXRlRGF0YUJhc2UoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5kYlJlYWR5ID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXG4gICAgICBpZiAoaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSAmJiB3aW5kb3cuaW5kZXhlZERCKSB7XG4gICAgICAgIGNvbnN0IHJlcXVlc3Q6IElEQk9wZW5EQlJlcXVlc3QgPSB3aW5kb3cuaW5kZXhlZERCLm9wZW4odGhpcy5kYXRhYmFzZU5hbWUsIHRoaXMuZGF0YWJhc2VWZXJzaW9uKTtcblxuICAgICAgICB0aGlzLmV2ZW50U2VydmljZS5zaG93TG9hZGluZ1NjcmVlbi5lbWl0KHRydWUpO1xuXG4gICAgICAgIHJlcXVlc3Qub25lcnJvciA9ICgpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdbSW5kZXhlZERCXSBGYWlsZWQgdG8gb3BlbiBkYXRhYmFzZScpO1xuICAgICAgICAgIHRoaXMuZXZlbnRTZXJ2aWNlLnNob3dMb2FkaW5nU2NyZWVuLmVtaXQoZmFsc2UpO1xuICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgfTtcblxuICAgICAgICByZXF1ZXN0Lm9uYmxvY2tlZCA9ICgpID0+IHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oJ1tJbmRleGVkREJdIERhdGFiYXNlIHVwZ3JhZGUgYmxvY2tlZCBieSBvcGVuIGNvbm5lY3Rpb24nKTtcbiAgICAgICAgICB0aGlzLmV2ZW50U2VydmljZS5zaG93TG9hZGluZ1NjcmVlbi5lbWl0KGZhbHNlKTtcbiAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgIH07XG5cbiAgICAgICAgcmVxdWVzdC5vbnN1Y2Nlc3MgPSBhc3luYyAoZXZlbnQpID0+IHtcbiAgICAgICAgICB0aGlzLmRhdGFiYXNlID0gKGV2ZW50LnRhcmdldCBhcyBJREJPcGVuREJSZXF1ZXN0KS5yZXN1bHQ7XG4gICAgICAgICAgdGhpcy5kYXRhYmFzZS5vbnZlcnNpb25jaGFuZ2UgPSAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmRhdGFiYXNlLmNsb3NlKCk7XG4gICAgICAgICAgfTtcbiAgICAgICAgICB0aGlzLmV2ZW50U2VydmljZS5zaG93TG9hZGluZ1NjcmVlbi5lbWl0KGZhbHNlKTtcbiAgICAgICAgICB0aGlzLmNhbGN1bGF0ZUNhcnRUb3RhbHMoKTtcbiAgICAgICAgICB0aGlzLmNhbGN1bGF0ZVdpc2hsaXN0VG90YWxzKCk7XG4gICAgICAgICAgdGhpcy5jYWxjdWxhdGVCb29raW5nQ2FydFRvdGFscygpO1xuICAgICAgICAgIHJlc29sdmUoKTsgLy8g4pyFIFZFUlkgSU1QT1JUQU5UXG4gICAgICAgIH07XG5cbiAgICAgICAgcmVxdWVzdC5vbnVwZ3JhZGVuZWVkZWQgPSAoZXZlbnQpID0+IHtcbiAgICAgICAgICB0aGlzLmRhdGFiYXNlID0gKGV2ZW50LnRhcmdldCBhcyBJREJPcGVuREJSZXF1ZXN0KS5yZXN1bHQ7XG5cbiAgICAgICAgICBpZiAoIXRoaXMuZGF0YWJhc2Uub2JqZWN0U3RvcmVOYW1lcy5jb250YWlucyh0aGlzLmNhcnRDb2xsZWN0aW9uTmFtZSkpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YWJhc2UuY3JlYXRlT2JqZWN0U3RvcmUodGhpcy5jYXJ0Q29sbGVjdGlvbk5hbWUsIHsga2V5UGF0aDogXCJ2YXJpZW50SWRcIiB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCF0aGlzLmRhdGFiYXNlLm9iamVjdFN0b3JlTmFtZXMuY29udGFpbnModGhpcy50cmlhbENhcnRDb2xsZWN0aW9uTmFtZSkpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YWJhc2UuY3JlYXRlT2JqZWN0U3RvcmUodGhpcy50cmlhbENhcnRDb2xsZWN0aW9uTmFtZSwgeyBrZXlQYXRoOiBcInZhcmllbnRJZFwiIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoIXRoaXMuZGF0YWJhc2Uub2JqZWN0U3RvcmVOYW1lcy5jb250YWlucyh0aGlzLmZhdm91cml0ZUNvbGxlY3Rpb25OYW1lKSkge1xuICAgICAgICAgICAgdGhpcy5kYXRhYmFzZS5jcmVhdGVPYmplY3RTdG9yZSh0aGlzLmZhdm91cml0ZUNvbGxlY3Rpb25OYW1lLCB7IGtleVBhdGg6IFwidmFyaWVudElkXCIgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghdGhpcy5kYXRhYmFzZS5vYmplY3RTdG9yZU5hbWVzLmNvbnRhaW5zKHRoaXMudXNlckNvbGxlY3Rpb25OYW1lKSkge1xuICAgICAgICAgICAgdGhpcy5kYXRhYmFzZS5jcmVhdGVPYmplY3RTdG9yZSh0aGlzLnVzZXJDb2xsZWN0aW9uTmFtZSwgeyBrZXlQYXRoOiBcInVzZXJJZFwiIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoIXRoaXMuZGF0YWJhc2Uub2JqZWN0U3RvcmVOYW1lcy5jb250YWlucyh0aGlzLmhvbWVWaXNpdENhcnRDb2xsZWN0aW9uTmFtZSkpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YWJhc2UuY3JlYXRlT2JqZWN0U3RvcmUodGhpcy5ob21lVmlzaXRDYXJ0Q29sbGVjdGlvbk5hbWUsIHsga2V5UGF0aDogXCJ2YXJpZW50SWRcIiB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCF0aGlzLmRhdGFiYXNlLm9iamVjdFN0b3JlTmFtZXMuY29udGFpbnModGhpcy52aWRlb0NhbGxDYXJ0Q29sbGVjdGlvbk5hbWUpKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGFiYXNlLmNyZWF0ZU9iamVjdFN0b3JlKHRoaXMudmlkZW9DYWxsQ2FydENvbGxlY3Rpb25OYW1lLCB7IGtleVBhdGg6IFwidmFyaWVudElkXCIgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLndhcm4oJ1tTU1JdIEluZGV4ZWREQiBub3QgYXZhaWxhYmxlJyk7XG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgIH1cblxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRoaXMuZGJSZWFkeTtcbiAgfVxuXG4gIHNldFRva2VuKHRva2VuOiBhbnkpIHtcbiAgICB0aGlzLmNvb2tpZVNlcnZpY2Uuc2V0KFwicGFzc0Jvb2tUb2tlblwiLCB0b2tlbilcbiAgICAvLyBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShcInBhc3NCb29rVG9rZW5cIiwgdG9rZW4pO1xuICAgIHRoaXMuc3RvcmFnZS5zZXRJdGVtKFwicGFzc0Jvb2tUb2tlblwiLCB0b2tlbik7XG4gIH1cblxuICBnZXRUb2tlbigpIHtcbiAgICBsZXQgdG9rZW46IGFueSA9IHRoaXMuY29va2llU2VydmljZS5nZXQoJ3Bhc3NCb29rVG9rZW4nKVxuICAgIGlmICghdG9rZW4pXG4gICAgICB0b2tlbiA9IHRoaXMuc3RvcmFnZS5nZXRJdGVtKCdwYXNzQm9va1Rva2VuJykgfHwgXCJcIlxuICAgIHJldHVybiB0b2tlbjtcbiAgfVxuXG5cbiAgc2V0UmVmZXJyYWxEZXRhaWxzKGRldGFpbHM6IGFueSkge1xuICAgIHRoaXMuY29va2llU2VydmljZS5zZXQoXCJyZWZlcnJhbERldGFpbHNcIiwgSlNPTi5zdHJpbmdpZnkoZGV0YWlscykpXG4gICAgdGhpcy5zdG9yYWdlLnNldEl0ZW0oXCJyZWZlcnJhbERldGFpbHNcIiwgSlNPTi5zdHJpbmdpZnkoZGV0YWlscykpO1xuICB9XG5cbiAgZ2V0UmVmZXJyYWxEZXRhaWxzKCkge1xuICAgIGxldCByZWZlcnJhbERldGFpbHM6IGFueSA9IHRoaXMuY29va2llU2VydmljZS5nZXQoJ3JlZmVycmFsRGV0YWlscycpXG4gICAgaWYgKCFyZWZlcnJhbERldGFpbHMpIHtcbiAgICAgIHJlZmVycmFsRGV0YWlscyA9IHRoaXMuc3RvcmFnZS5nZXRJdGVtKFwicmVmZXJyYWxEZXRhaWxzXCIpO1xuICAgIH1cbiAgICByZXR1cm4gcmVmZXJyYWxEZXRhaWxzO1xuICB9XG5cbiAgdXBkYXRlQWxsRGF0YSgpIHtcbiAgICBpZiAodGhpcy5yb3V0ZXIudXJsLmluY2x1ZGVzKCdjYXJ0JykpXG4gICAgICByZXR1cm47XG5cbiAgICBjb25zdCB1c2VyRGV0YWlscyA9IHRoaXMuZ2V0VXNlcigpO1xuICAgIGlmICghIXVzZXJEZXRhaWxzKSB7XG4gICAgICB0aGlzLmV2ZW50U2VydmljZS5zaG93TG9hZGluZ1NjcmVlbi5lbWl0KHRydWUpO1xuICAgICAgY29uc3QgcmVxdWVzdCA9IGZvcmtKb2luKFtcbiAgICAgICAgdGhpcy5yZXN0U2VydmljZS5nZXRVc2VySXRlbXModXNlckRldGFpbHMudXNlcklkLCBcIkNBUlRcIiksXG4gICAgICAgIHRoaXMucmVzdFNlcnZpY2UuZ2V0VXNlckl0ZW1zKHVzZXJEZXRhaWxzLnVzZXJJZCwgXCJXSVNITElTVFwiKVxuICAgICAgXSk7XG4gICAgICByZXF1ZXN0LnN1YnNjcmliZSgoY2FydFJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgY29uc3QgdXNlckRldGFpbHMgPSB0aGlzLmdldFVzZXIoKSBhcyBVc2VyO1xuICAgICAgICBjb25zdCB1c2VyQ2FydDogQ2FydCA9IGNhcnRSZXNwb25zZT8uWzBdLmRhdGFbMF0gPyBjYXJ0UmVzcG9uc2U/LlswXS5kYXRhWzBdIGFzIENhcnQgOiBuZXcgQ2FydCh7ICdjYXJ0VHlwZSc6IGNhcnRUeXBlLkNBUlQsICd1c2VyRGV0YWlscyc6IHVzZXJEZXRhaWxzLCAncGxhdGZvcm0nOiAnV0VCJyB9KTtcblxuICAgICAgICBpZiAodXNlckNhcnQ/LmNhcnRJZClcbiAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShcImNhcnRJZFwiLCB1c2VyQ2FydD8uY2FydElkKTtcbiAgICAgICAgdGhpcy5nZXRVc2VyQ2FydCgpLnRoZW4oKHVzZXJDYXJ0UmVzcG9uc2UpID0+IHtcbiAgICAgICAgICB1c2VyQ2FydFJlc3BvbnNlLm9uc3VjY2VzcyA9ICh1c2VyQ2FydEluZGV4REI6IGFueSkgPT4ge1xuICAgICAgICAgICAgdXNlckNhcnQub3JkZXJlZEl0ZW1zID0gdGhpcy5tZXJnZUFsbEl0ZW1zKHVzZXJDYXJ0SW5kZXhEQi50YXJnZXQucmVzdWx0ID8/IFtdLCB1c2VyQ2FydD8ub3JkZXJlZEl0ZW1zID8/IFtdKTtcblxuICAgICAgICAgICAgdGhpcy5hZGRBbGxQcm9kdWN0c1RvQ2FydCh1c2VyQ2FydC5vcmRlcmVkSXRlbXMpO1xuICAgICAgICAgICAgLy8gdGhpcy5yZXN0U2VydmljZS5hZGRJdGVtVG9EQih1c2VyQ2FydCkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAgICAgLy8gICBpZihyZXM/LmRhdGE/LmNhcnRJZCAmJiAhbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2NhcnRJZCcpKVxuICAgICAgICAgICAgLy8gICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdjYXJ0SWQnLCByZXMuZGF0YS5jYXJ0SWQpO1xuICAgICAgICAgICAgLy8gfSlcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG5cbiAgICAgICAgY29uc3QgdXNlcldpc2hsaXN0OiBDYXJ0ID0gY2FydFJlc3BvbnNlPy5bMV0uZGF0YSBhcyBDYXJ0O1xuICAgICAgICBpZiAodXNlcldpc2hsaXN0LmNhcnRJZClcbiAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShcIndpc2hsaXN0SWRcIiwgdXNlcldpc2hsaXN0LmNhcnRJZCk7XG4gICAgICAgIHRoaXMuZ2V0VXNlcldoaXNobGlzdCgpLnRoZW4oKHVzZXJXaXNobGlzdFJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgdXNlcldpc2hsaXN0UmVzcG9uc2Uub25zdWNjZXNzID0gKHVzZXJXaXNobGlzdEluZGV4REI6IGFueSkgPT4ge1xuICAgICAgICAgICAgdXNlcldpc2hsaXN0Lm9yZGVyZWRJdGVtcyA9IFsuLi4odXNlcldpc2hsaXN0SW5kZXhEQi50YXJnZXQucmVzdWx0ID8/IFtdKSwgLi4uKHVzZXJXaXNobGlzdC5vcmRlcmVkSXRlbXMgPz8gW10pXTtcbiAgICAgICAgICAgIHRoaXMuYWRkQWxsUHJvZHVjdFRvV2lzaGxpc3QodXNlcldpc2hsaXN0Lm9yZGVyZWRJdGVtcyk7XG4gICAgICAgICAgICB0aGlzLnJlc3RTZXJ2aWNlLmFkZEl0ZW1Ub0RCKHVzZXJXaXNobGlzdCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuXG4gICAgICAgIHRoaXMuZXZlbnRTZXJ2aWNlLnNob3dMb2FkaW5nU2NyZWVuLmVtaXQoZmFsc2UpO1xuICAgICAgfSlcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gdGhpcy5zdG9yZURhdGFUb0pTT04oKTtcbiAgICB9XG4gIH1cblxuICBtZXJnZUFsbEl0ZW1zKHVuU3luY2VkSXRlbTogYW55W10sIHN5bmNlZEl0ZW06IGFueVtdKSB7XG4gICAgZm9yIChsZXQgcHJvZHVjdCBvZiBzeW5jZWRJdGVtKSB7XG4gICAgICBsZXQgaXRlbUZvdW5kID0gZmFsc2U7XG4gICAgICBmb3IgKGxldCBjYXJ0SXRlbSBvZiB1blN5bmNlZEl0ZW0pIHtcbiAgICAgICAgaWYgKGNhcnRJdGVtLnZhcmllbnRJZCA9PT0gcHJvZHVjdC52YXJpZW50SWQpIHtcbiAgICAgICAgICBpdGVtRm91bmQgPSB0cnVlO1xuICAgICAgICAgIC8vIGNhcnRJdGVtLnF1YW50aXR5ID0gcHJvZHVjdC5xdWFudGl0eTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKCFpdGVtRm91bmQpIHtcbiAgICAgICAgdW5TeW5jZWRJdGVtLnB1c2gocHJvZHVjdCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB1blN5bmNlZEl0ZW07XG4gIH1cblxuICAvLyBDQVJUIFNFUlZJQ0VcbiAgYXN5bmMgZ2V0VXNlckNhcnQoKTogUHJvbWlzZTxJREJSZXF1ZXN0PE9yZGVyZWRJdGVtc1tdPj4ge1xuICAgIGF3YWl0IHRoaXMuZGJSZWFkeTtcblxuICAgIGNvbnN0IHRyYW5zYWN0aW9uID0gdGhpcy5kYXRhYmFzZT8udHJhbnNhY3Rpb24odGhpcy5jYXJ0Q29sbGVjdGlvbk5hbWUgPz8gXCJVU0VSX0NBUlRcIiwgXCJyZWFkd3JpdGVcIik7XG4gICAgcmV0dXJuIHRyYW5zYWN0aW9uLm9iamVjdFN0b3JlKHRoaXMuY2FydENvbGxlY3Rpb25OYW1lKS5nZXRBbGwoKTtcbiAgfVxuXG4gIGFkZFByb2R1Y3RUb0NhcnQocHJvZHVjdDogT3JkZXJlZEl0ZW1zKSB7XG4gICAgY29uc3QgdHJhbnNhY3Rpb24gPSB0aGlzLmRhdGFiYXNlPy50cmFuc2FjdGlvbih0aGlzLmNhcnRDb2xsZWN0aW9uTmFtZSA/PyBcIlVTRVJfQ0FSVFwiLCBcInJlYWR3cml0ZVwiKTtcbiAgICBjb25zdCByZXF1ZXN0ID0gdHJhbnNhY3Rpb24ub2JqZWN0U3RvcmUodGhpcy5jYXJ0Q29sbGVjdGlvbk5hbWUpLnB1dChwcm9kdWN0KTtcbiAgICB0cmFuc2FjdGlvbi5vbmNvbXBsZXRlID0gKCkgPT4ge1xuICAgICAgdGhpcy5jYWxjdWxhdGVDYXJ0VG90YWxzKCk7XG4gICAgfTtcbiAgICByZXR1cm4gcmVxdWVzdDtcbiAgfVxuXG4gIGFkZEFsbFByb2R1Y3RUb1dpc2hsaXN0KHByb2R1Y3RzOiBPcmRlcmVkSXRlbXNbXSk6IElEQlRyYW5zYWN0aW9uIHtcbiAgICBjb25zdCB0cmFuc2FjdGlvbiA9IHRoaXMuZGF0YWJhc2U/LnRyYW5zYWN0aW9uKHRoaXMuZmF2b3VyaXRlQ29sbGVjdGlvbk5hbWUgPz8gXCJVU0VSX0ZBVk9VUklURVwiLCBcInJlYWR3cml0ZVwiKTtcbiAgICBwcm9kdWN0cy5mb3JFYWNoKChwcm9kdWN0KSA9PiB7XG4gICAgICB0cmFuc2FjdGlvbi5vYmplY3RTdG9yZSh0aGlzLmZhdm91cml0ZUNvbGxlY3Rpb25OYW1lKS5wdXQocHJvZHVjdCk7XG4gICAgfSlcbiAgICB0cmFuc2FjdGlvbi5vbmNvbXBsZXRlID0gKCkgPT4ge1xuICAgICAgdGhpcy5jYWxjdWxhdGVXaXNobGlzdFRvdGFscygpO1xuICAgIH07XG4gICAgcmV0dXJuIHRyYW5zYWN0aW9uO1xuICB9XG4gIGFkZEFsbFByb2R1Y3RzVG9DYXJ0KHByb2R1Y3RzOiBPcmRlcmVkSXRlbXNbXSk6IElEQlRyYW5zYWN0aW9uIHtcbiAgICBjb25zdCB0cmFuc2FjdGlvbiA9IHRoaXMuZGF0YWJhc2U/LnRyYW5zYWN0aW9uKHRoaXMuY2FydENvbGxlY3Rpb25OYW1lID8/IFwiVVNFUl9DQVJUXCIsIFwicmVhZHdyaXRlXCIpO1xuICAgIHByb2R1Y3RzLmZvckVhY2goKHByb2R1Y3QpID0+IHtcbiAgICAgIHRyYW5zYWN0aW9uLm9iamVjdFN0b3JlKHRoaXMuY2FydENvbGxlY3Rpb25OYW1lKS5wdXQocHJvZHVjdCk7XG4gICAgfSlcbiAgICB0cmFuc2FjdGlvbi5vbmNvbXBsZXRlID0gKCkgPT4ge1xuICAgICAgdGhpcy5jYWxjdWxhdGVDYXJ0VG90YWxzKCk7XG4gICAgfTtcbiAgICByZXR1cm4gdHJhbnNhY3Rpb247XG4gIH1cbiAgcmVtb3ZlUHJvZHVjdEZyb21DYXJ0KHByb2R1Y3RJZDogc3RyaW5nKSB7XG4gICAgY29uc3QgdHJhbnNhY3Rpb24gPSB0aGlzLmRhdGFiYXNlPy50cmFuc2FjdGlvbih0aGlzLmNhcnRDb2xsZWN0aW9uTmFtZSA/PyBcIlVTRVJfQ0FSVFwiLCBcInJlYWR3cml0ZVwiKTtcbiAgICBjb25zdCByZXF1ZXN0ID0gdHJhbnNhY3Rpb24ub2JqZWN0U3RvcmUodGhpcy5jYXJ0Q29sbGVjdGlvbk5hbWUpLmRlbGV0ZShwcm9kdWN0SWQpO1xuICAgIHRyYW5zYWN0aW9uLm9uY29tcGxldGUgPSAoKSA9PiB7XG4gICAgICB0aGlzLmNhbGN1bGF0ZUNhcnRUb3RhbHMoKTtcbiAgICB9O1xuICAgIHJldHVybiByZXF1ZXN0O1xuICB9XG4gIGFzeW5jIGdldFByb2R1Y3RGcm9tQ2FydChwcm9kdWN0SWQ6IHN0cmluZykge1xuICAgIGNvbnN0IHRyYW5zYWN0aW9uID0gdGhpcy5kYXRhYmFzZT8udHJhbnNhY3Rpb24odGhpcy5jYXJ0Q29sbGVjdGlvbk5hbWUgPz8gXCJVU0VSX0NBUlRcIiwgXCJyZWFkd3JpdGVcIik7XG4gICAgcmV0dXJuIGF3YWl0IHRyYW5zYWN0aW9uLm9iamVjdFN0b3JlKHRoaXMuY2FydENvbGxlY3Rpb25OYW1lKS5nZXQocHJvZHVjdElkKTtcbiAgfVxuXG4gIC8vIFdJU0hMSVNUIFNFUlZJQ0VcbiAgYXN5bmMgZ2V0VXNlcldoaXNobGlzdCgpOiBQcm9taXNlPElEQlJlcXVlc3Q8T3JkZXJlZEl0ZW1zW10+PiB7XG5cbiAgICBjb25zdCB0cmFuc2FjdGlvbiA9IHRoaXMuZGF0YWJhc2UudHJhbnNhY3Rpb24odGhpcy5mYXZvdXJpdGVDb2xsZWN0aW9uTmFtZSwgXCJyZWFkd3JpdGVcIik7XG4gICAgcmV0dXJuIGF3YWl0IHRyYW5zYWN0aW9uLm9iamVjdFN0b3JlKHRoaXMuZmF2b3VyaXRlQ29sbGVjdGlvbk5hbWUpLmdldEFsbCgpO1xuICB9XG5cbiAgYXN5bmMgZ2V0VHJpYWxDYXJ0KCk6IFByb21pc2U8SURCUmVxdWVzdDxPcmRlcmVkSXRlbXNbXT4+IHtcblxuICAgIGNvbnN0IHRyYW5zYWN0aW9uID0gdGhpcy5kYXRhYmFzZS50cmFuc2FjdGlvbih0aGlzLnRyaWFsQ2FydENvbGxlY3Rpb25OYW1lLCBcInJlYWR3cml0ZVwiKTtcbiAgICByZXR1cm4gYXdhaXQgdHJhbnNhY3Rpb24ub2JqZWN0U3RvcmUodGhpcy50cmlhbENhcnRDb2xsZWN0aW9uTmFtZSkuZ2V0QWxsKCk7XG4gIH1cblxuICBhZGRQcm9kdWN0VG9XaXNobGlzdChwcm9kdWN0OiBPcmRlcmVkSXRlbXMpIHtcbiAgICBjb25zdCB0cmFuc2FjdGlvbiA9IHRoaXMuZGF0YWJhc2UudHJhbnNhY3Rpb24odGhpcy5mYXZvdXJpdGVDb2xsZWN0aW9uTmFtZSwgXCJyZWFkd3JpdGVcIik7XG4gICAgY29uc3QgcmVxdWVzdCA9IHRyYW5zYWN0aW9uLm9iamVjdFN0b3JlKHRoaXMuZmF2b3VyaXRlQ29sbGVjdGlvbk5hbWUpLnB1dChwcm9kdWN0KTtcbiAgICB0cmFuc2FjdGlvbi5vbmNvbXBsZXRlID0gKCkgPT4ge1xuICAgICAgdGhpcy5jYWxjdWxhdGVXaXNobGlzdFRvdGFscygpO1xuICAgIH07XG4gICAgcmV0dXJuIHJlcXVlc3Q7XG4gIH1cbiAgYWRkUHJvZHVjdFRvVHJpYWwocHJvZHVjdDogT3JkZXJlZEl0ZW1zKSB7XG4gICAgY29uc3QgdHJhbnNhY3Rpb24gPSB0aGlzLmRhdGFiYXNlLnRyYW5zYWN0aW9uKHRoaXMudHJpYWxDYXJ0Q29sbGVjdGlvbk5hbWUsIFwicmVhZHdyaXRlXCIpO1xuICAgIHJldHVybiB0cmFuc2FjdGlvbi5vYmplY3RTdG9yZSh0aGlzLnRyaWFsQ2FydENvbGxlY3Rpb25OYW1lKS5wdXQocHJvZHVjdCk7XG4gIH1cbiAgcmVtb3ZlUHJvZHVjdEZyb21XaXNobGlzdChwcm9kdWN0SWQ6IHN0cmluZykge1xuICAgIGNvbnN0IHRyYW5zYWN0aW9uID0gdGhpcy5kYXRhYmFzZS50cmFuc2FjdGlvbih0aGlzLmZhdm91cml0ZUNvbGxlY3Rpb25OYW1lLCBcInJlYWR3cml0ZVwiKTtcbiAgICBjb25zdCByZXF1ZXN0ID0gdHJhbnNhY3Rpb24ub2JqZWN0U3RvcmUodGhpcy5mYXZvdXJpdGVDb2xsZWN0aW9uTmFtZSkuZGVsZXRlKHByb2R1Y3RJZCk7XG4gICAgdHJhbnNhY3Rpb24ub25jb21wbGV0ZSA9ICgpID0+IHtcbiAgICAgIHRoaXMuY2FsY3VsYXRlV2lzaGxpc3RUb3RhbHMoKTtcbiAgICB9O1xuICAgIHJldHVybiByZXF1ZXN0O1xuICB9XG5cbiAgY2xlYXJVc2VyQ2FydCgpIHtcbiAgICBjb25zdCB0cmFuc2FjdGlvbiA9IHRoaXMuZGF0YWJhc2U/LnRyYW5zYWN0aW9uKHRoaXMuY2FydENvbGxlY3Rpb25OYW1lID8/IFwiVVNFUl9DQVJUXCIsIFwicmVhZHdyaXRlXCIpO1xuICAgIGNvbnN0IHJlcXVlc3QgPSB0cmFuc2FjdGlvbi5vYmplY3RTdG9yZSh0aGlzLmNhcnRDb2xsZWN0aW9uTmFtZSkuY2xlYXIoKTtcbiAgICB0cmFuc2FjdGlvbi5vbmNvbXBsZXRlID0gKCkgPT4ge1xuICAgICAgdGhpcy5jYWxjdWxhdGVDYXJ0VG90YWxzKCk7XG4gICAgfTtcbiAgICByZXR1cm4gcmVxdWVzdDtcbiAgfVxuXG4gIGNsZWFyVHJpYWxDYXJ0KCkge1xuICAgIHRoaXMudG90YWxDYXJ0SXRlbXMgPSAwO1xuICAgIGNvbnN0IHRyYW5zYWN0aW9uID0gdGhpcy5kYXRhYmFzZT8udHJhbnNhY3Rpb24odGhpcy50cmlhbENhcnRDb2xsZWN0aW9uTmFtZSwgXCJyZWFkd3JpdGVcIik7XG4gICAgcmV0dXJuIHRyYW5zYWN0aW9uLm9iamVjdFN0b3JlKHRoaXMudHJpYWxDYXJ0Q29sbGVjdGlvbk5hbWUpLmNsZWFyKCk7XG4gIH1cblxuICByZW1vdmVQcm9kdWN0RnJvbVRyaWFsQ2FydChwcm9kdWN0SWQ6IHN0cmluZykge1xuICAgIGNvbnN0IHRyYW5zYWN0aW9uID0gdGhpcy5kYXRhYmFzZS50cmFuc2FjdGlvbih0aGlzLnRyaWFsQ2FydENvbGxlY3Rpb25OYW1lLCBcInJlYWR3cml0ZVwiKTtcbiAgICByZXR1cm4gdHJhbnNhY3Rpb24ub2JqZWN0U3RvcmUodGhpcy50cmlhbENhcnRDb2xsZWN0aW9uTmFtZSkuZGVsZXRlKHByb2R1Y3RJZCk7XG4gIH1cblxuICAvLyBCT09LSU5HIFBST0RVQ1QgQ0FSVFMgKEhvbWUgVmlzaXQgLyBWaWRlbyBDYWxsKSDigJQgbG9jYWwtb25seSwgc2VlIGZpZWxkIGNvbW1lbnRzIGFib3ZlLlxuICBwcml2YXRlIGJvb2tpbmdDYXJ0U3RvcmVOYW1lKG1vZGU6ICdIT01FX1ZJU0lUJyB8ICdWSURFT19DQUxMJyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIG1vZGUgPT09ICdIT01FX1ZJU0lUJyA/IHRoaXMuaG9tZVZpc2l0Q2FydENvbGxlY3Rpb25OYW1lIDogdGhpcy52aWRlb0NhbGxDYXJ0Q29sbGVjdGlvbk5hbWU7XG4gIH1cblxuICBhc3luYyBnZXRCb29raW5nQ2FydChtb2RlOiAnSE9NRV9WSVNJVCcgfCAnVklERU9fQ0FMTCcpOiBQcm9taXNlPElEQlJlcXVlc3Q8T3JkZXJlZEl0ZW1zW10+PiB7XG4gICAgYXdhaXQgdGhpcy5kYlJlYWR5O1xuICAgIGNvbnN0IHN0b3JlTmFtZSA9IHRoaXMuYm9va2luZ0NhcnRTdG9yZU5hbWUobW9kZSk7XG4gICAgY29uc3QgdHJhbnNhY3Rpb24gPSB0aGlzLmRhdGFiYXNlLnRyYW5zYWN0aW9uKHN0b3JlTmFtZSwgXCJyZWFkd3JpdGVcIik7XG4gICAgcmV0dXJuIHRyYW5zYWN0aW9uLm9iamVjdFN0b3JlKHN0b3JlTmFtZSkuZ2V0QWxsKCk7XG4gIH1cblxuICBhc3luYyBhZGRQcm9kdWN0VG9Cb29raW5nQ2FydChtb2RlOiAnSE9NRV9WSVNJVCcgfCAnVklERU9fQ0FMTCcsIHByb2R1Y3Q6IE9yZGVyZWRJdGVtcykge1xuICAgIGF3YWl0IHRoaXMuZGJSZWFkeTtcbiAgICBjb25zdCBzdG9yZU5hbWUgPSB0aGlzLmJvb2tpbmdDYXJ0U3RvcmVOYW1lKG1vZGUpO1xuICAgIGNvbnN0IHRyYW5zYWN0aW9uID0gdGhpcy5kYXRhYmFzZS50cmFuc2FjdGlvbihzdG9yZU5hbWUsIFwicmVhZHdyaXRlXCIpO1xuICAgIHRyYW5zYWN0aW9uLm9uY29tcGxldGUgPSAoKSA9PiB0aGlzLmNhbGN1bGF0ZUJvb2tpbmdDYXJ0VG90YWxzKCk7XG4gICAgcmV0dXJuIHRyYW5zYWN0aW9uLm9iamVjdFN0b3JlKHN0b3JlTmFtZSkucHV0KHByb2R1Y3QpO1xuICB9XG5cbiAgYXN5bmMgcmVtb3ZlUHJvZHVjdEZyb21Cb29raW5nQ2FydChtb2RlOiAnSE9NRV9WSVNJVCcgfCAnVklERU9fQ0FMTCcsIHByb2R1Y3RJZDogc3RyaW5nKSB7XG4gICAgYXdhaXQgdGhpcy5kYlJlYWR5O1xuICAgIGNvbnN0IHN0b3JlTmFtZSA9IHRoaXMuYm9va2luZ0NhcnRTdG9yZU5hbWUobW9kZSk7XG4gICAgY29uc3QgdHJhbnNhY3Rpb24gPSB0aGlzLmRhdGFiYXNlLnRyYW5zYWN0aW9uKHN0b3JlTmFtZSwgXCJyZWFkd3JpdGVcIik7XG4gICAgdHJhbnNhY3Rpb24ub25jb21wbGV0ZSA9ICgpID0+IHRoaXMuY2FsY3VsYXRlQm9va2luZ0NhcnRUb3RhbHMoKTtcbiAgICByZXR1cm4gdHJhbnNhY3Rpb24ub2JqZWN0U3RvcmUoc3RvcmVOYW1lKS5kZWxldGUocHJvZHVjdElkKTtcbiAgfVxuXG4gIGFzeW5jIGNsZWFyQm9va2luZ0NhcnQobW9kZTogJ0hPTUVfVklTSVQnIHwgJ1ZJREVPX0NBTEwnKSB7XG4gICAgYXdhaXQgdGhpcy5kYlJlYWR5O1xuICAgIGNvbnN0IHN0b3JlTmFtZSA9IHRoaXMuYm9va2luZ0NhcnRTdG9yZU5hbWUobW9kZSk7XG4gICAgY29uc3QgdHJhbnNhY3Rpb24gPSB0aGlzLmRhdGFiYXNlLnRyYW5zYWN0aW9uKHN0b3JlTmFtZSwgXCJyZWFkd3JpdGVcIik7XG4gICAgdHJhbnNhY3Rpb24ub25jb21wbGV0ZSA9ICgpID0+IHRoaXMuY2FsY3VsYXRlQm9va2luZ0NhcnRUb3RhbHMoKTtcbiAgICByZXR1cm4gdHJhbnNhY3Rpb24ub2JqZWN0U3RvcmUoc3RvcmVOYW1lKS5jbGVhcigpO1xuICB9XG5cbiAgLy8gVVNFUiBTRVJWSUNFXG4gIHNldFVzZXIodXNlcjogVXNlcik6IFVzZXIge1xuICAgIHRoaXMuY29va2llU2VydmljZS5zZXQoXCJ1c2VyXCIsIEpTT04uc3RyaW5naWZ5KHVzZXIgPz8gXCJ7fVwiKSwgNyk7XG4gICAgLy8gbG9jYWxTdG9yYWdlLnNldEl0ZW0oXCJ1c2VyXCIsIEpTT04uc3RyaW5naWZ5KHVzZXIgPz8gXCJ7fVwiKSk7XG4gICAgdGhpcy5zdG9yYWdlLnNldEl0ZW0oXCJ1c2VyXCIsIEpTT04uc3RyaW5naWZ5KHVzZXIgPz8gXCJ7fVwiKSk7XG4gICAgcmV0dXJuIHVzZXI7XG4gIH1cbiAgZ2V0VXNlcigpOiBVc2VyIHwgbnVsbCB7XG4gICAgdHJ5IHtcbiAgICAgIGxldCB1c2VyU3RyID0gdGhpcy5jb29raWVTZXJ2aWNlLmdldChcInVzZXJcIik7XG4gICAgICBpZiAoIXVzZXJTdHIpIHtcbiAgICAgICAgdXNlclN0ciA9IHRoaXMuc3RvcmFnZS5nZXRJdGVtKFwidXNlclwiKSB8fCBcIlwiOyAvLyDinIUgZmFsbGJhY2tcbiAgICAgIH1cbiAgICAgIGlmICghdXNlclN0cikgcmV0dXJuIG51bGw7XG4gICAgICBjb25zdCB1c2VyOiBVc2VyID0gSlNPTi5wYXJzZSh1c2VyU3RyKTtcbiAgICAgIGlmICghdXNlcj8udXNlcklkKSByZXR1cm4gbnVsbDtcbiAgICAgIHRoaXMuc3RvcmFnZS5zZXRJdGVtKFwicGVySWRcIiwgdXNlci51c2VySWQpO1xuICAgICAgcmV0dXJuIHVzZXI7XG5cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU3RhYmxlIHBlci1icm93c2VyIGlkLCBwZXJzaXN0ZWQgcmVnYXJkbGVzcyBvZiBsb2dpbiBzdGF0ZSwgc28gYmVoYXZpb3IgY2FuIGJlIHRyYWNrZWRcbiAgICogYmVmb3JlIGEgdmlzaXRvciBsb2dzIGluLiBNaXJyb3JzIHNldFVzZXIoKSdzIGR1YWwgY29va2llK3N0b3JhZ2Ugd3JpdGUgc28gaXQgc3Vydml2ZXNcbiAgICogdGhlIHNhbWUgd2F5LiBNZXJnZWQgb250byB0aGUgcmVhbCB1c2VySWQgc2VydmVyLXNpZGUgb25jZSB0aGV5IGxvZyBpbiAoQW5hbHl0aWNzU2VydmljZS5tZXJnZUFub255bW91c1VzZXIpLlxuICAgKi9cbiAgZ2V0QW5vbnltb3VzSWQoKTogc3RyaW5nIHtcbiAgICBsZXQgYW5vbklkID0gdGhpcy5jb29raWVTZXJ2aWNlLmdldChcImFub25JZFwiKSB8fCB0aGlzLnN0b3JhZ2UuZ2V0SXRlbShcImFub25JZFwiKTtcbiAgICBpZiAoIWFub25JZCkge1xuICAgICAgYW5vbklkID0gY3J5cHRvLnJhbmRvbVVVSUQoKTtcbiAgICAgIHRoaXMuY29va2llU2VydmljZS5zZXQoXCJhbm9uSWRcIiwgYW5vbklkLCAzNjUpO1xuICAgICAgdGhpcy5zdG9yYWdlLnNldEl0ZW0oXCJhbm9uSWRcIiwgYW5vbklkKTtcbiAgICB9XG4gICAgcmV0dXJuIGFub25JZDtcbiAgfVxuXG59XG4iXX0=
428
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmFnZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2ltcG8tdWkvc3JjL2xpYi9zZXJ2aWNlcy9zdG9yYWdlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUtuRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRWhDLE9BQU8sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFFbEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDcEQsT0FBTyxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFcEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlDQUFpQyxDQUFDOzs7Ozs7QUFPaEUsTUFBTSxPQUFPLHFCQUFxQjtJQUtoQyxZQUNtQixZQUEyQixFQUMzQixhQUE0QixFQUM1QixXQUF3QixFQUNWLE9BQW9CLEVBQzNDLE1BQWMsRUFDTyxVQUFrQjtRQUw5QixpQkFBWSxHQUFaLFlBQVksQ0FBZTtRQUMzQixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1QixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUNWLFlBQU8sR0FBUCxPQUFPLENBQWE7UUFDM0MsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNPLGVBQVUsR0FBVixVQUFVLENBQVE7UUFXekMsbUJBQWMsR0FBVyxDQUFDLENBQUM7UUFDbkMsdUJBQWtCLEdBQVcsQ0FBQyxDQUFDO1FBUXZCLHVCQUFrQixHQUFXLENBQUMsQ0FBQztRQU92Qyw4RkFBOEY7UUFDdEYsc0JBQWlCLEdBQVcsQ0FBQyxDQUFDO1FBdUR0QyxpQkFBWSxHQUFXLE1BQU0sQ0FBQztRQUM5Qiw0RkFBNEY7UUFDNUYsNEZBQTRGO1FBQzVGLG9GQUFvRjtRQUNwRixvQkFBZSxHQUFXLENBQUMsQ0FBQztRQUM1Qix1QkFBa0IsR0FBVyxXQUFXLENBQUM7UUFDekMsNEJBQXVCLEdBQVcsZ0JBQWdCLENBQUM7UUFDbkQsNEJBQXVCLEdBQVcsWUFBWSxDQUFBO1FBQzlDLHVCQUFrQixHQUFXLE1BQU0sQ0FBQztRQUNwQzs7Ozs7V0FLRztRQUNILGdDQUEyQixHQUFXLGlCQUFpQixDQUFDO1FBQ3hELGdDQUEyQixHQUFXLGlCQUFpQixDQUFDO1FBR3hELHNCQUFpQixHQUEwQixJQUFJLENBQUM7UUFDaEQsMkJBQXNCLEdBQTBCLElBQUksQ0FBQztRQUNyRCxzQkFBaUIsR0FBMEIsSUFBSSxDQUFDO1FBQ2hELDJCQUFzQixHQUEwQixJQUFJLENBQUM7UUF2R25ELElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN0QixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDbkMsSUFBSSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDbEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFFBQWEsRUFBRSxFQUFFO2dCQUMzRSxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM5QixDQUFDLENBQUMsQ0FBQTtRQUNKLENBQUM7SUFDSCxDQUFDO0lBSUQsSUFBSSxpQkFBaUI7UUFDbkIsSUFBSSxJQUFJLENBQUMsY0FBYyxHQUFHLENBQUM7WUFDekIsSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDLENBQUM7UUFDMUIsK0RBQStEO1FBQy9ELE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQztJQUM3QixDQUFDO0lBR0QsSUFBSSxxQkFBcUI7UUFDdkIsSUFBSSxJQUFJLENBQUMsa0JBQWtCLEdBQUcsQ0FBQztZQUM3QixJQUFJLENBQUMsa0JBQWtCLEdBQUcsQ0FBQyxDQUFDO1FBQzlCLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDO0lBQ2pDLENBQUM7SUFJRCxJQUFJLG9CQUFvQjtRQUN0QixJQUFJLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxDQUFDO1lBQzVCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxDQUFDLENBQUM7UUFDN0IsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUM7SUFDaEMsQ0FBQztJQUVELDBCQUEwQjtRQUN4QixJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVE7WUFBRSxPQUFPO1FBQzNCLElBQUksQ0FBQztZQUNILE1BQU0sS0FBSyxHQUFvQyxDQUFDLFlBQVksRUFBRSxZQUFZLENBQUMsQ0FBQztZQUM1RSxNQUFNLE1BQU0sR0FBYSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNoQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUN4QixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ2xELE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsQ0FBQztnQkFDckUsTUFBTSxPQUFPLEdBQUcsV0FBVyxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDNUQsT0FBTyxDQUFDLFNBQVMsR0FBRyxDQUFDLEtBQVUsRUFBRSxFQUFFO29CQUNqQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUM7b0JBQy9DLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDN0QsQ0FBQyxDQUFDO1lBQ0osQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO1FBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNYLE9BQU8sQ0FBQyxJQUFJLENBQUMsd0NBQXdDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDNUQsQ0FBQztJQUNILENBQUM7SUFFRCxtQkFBbUI7UUFDakIsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRO1lBQUUsT0FBTztRQUMzQixJQUFJLENBQUM7WUFDSCxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsVUFBVSxDQUFDLENBQUM7WUFDdkYsTUFBTSxXQUFXLEdBQUcsZUFBZSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNsRixXQUFXLENBQUMsU0FBUyxHQUFHLENBQUMsS0FBVSxFQUFFLEVBQUU7Z0JBQ3JDLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQztnQkFDeEMsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDO2dCQUNuQyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQVcsRUFBRSxJQUFTLEVBQUUsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNqSSxDQUFDLENBQUM7UUFDSixDQUFDO1FBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNYLE9BQU8sQ0FBQyxJQUFJLENBQUMsZ0NBQWdDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDcEQsQ0FBQztJQUNILENBQUM7SUFFRCx1QkFBdUI7UUFDckIsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRO1lBQUUsT0FBTztRQUMzQixJQUFJLENBQUM7WUFDSCxNQUFNLG1CQUFtQixHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxVQUFVLENBQUMsQ0FBQztZQUNoRyxNQUFNLGVBQWUsR0FBRyxtQkFBbUIsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDL0YsZUFBZSxDQUFDLFNBQVMsR0FBRyxDQUFDLEtBQVUsRUFBRSxFQUFFO2dCQUN6QyxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUM7Z0JBQ3hDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDO1lBQ3pDLENBQUMsQ0FBQztRQUNKLENBQUM7UUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ1gsT0FBTyxDQUFDLElBQUksQ0FBQyxvQ0FBb0MsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN4RCxDQUFDO0lBQ0gsQ0FBQztJQTBCRCxjQUFjO1FBQ1osSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUU3QyxJQUFJLGlCQUFpQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUM7Z0JBQzNELE1BQU0sT0FBTyxHQUFxQixNQUFNLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztnQkFFakcsT0FBTyxDQUFDLE9BQU8sR0FBRyxHQUFHLEVBQUU7b0JBQ3JCLE9BQU8sQ0FBQyxLQUFLLENBQUMscUNBQXFDLENBQUMsQ0FBQztvQkFDckQsT0FBTyxFQUFFLENBQUM7Z0JBQ1osQ0FBQyxDQUFDO2dCQUVGLE9BQU8sQ0FBQyxTQUFTLEdBQUcsR0FBRyxFQUFFO29CQUN2QixPQUFPLENBQUMsSUFBSSxDQUFDLHlEQUF5RCxDQUFDLENBQUM7b0JBQ3hFLE9BQU8sRUFBRSxDQUFDO2dCQUNaLENBQUMsQ0FBQztnQkFFRixPQUFPLENBQUMsU0FBUyxHQUFHLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRTtvQkFDbEMsSUFBSSxDQUFDLFFBQVEsR0FBSSxLQUFLLENBQUMsTUFBMkIsQ0FBQyxNQUFNLENBQUM7b0JBQzFELElBQUksQ0FBQyxRQUFRLENBQUMsZUFBZSxHQUFHLEdBQUcsRUFBRTt3QkFDbkMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztvQkFDeEIsQ0FBQyxDQUFDO29CQUNGLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO29CQUMzQixJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztvQkFDL0IsSUFBSSxDQUFDLDBCQUEwQixFQUFFLENBQUM7b0JBQ2xDLE9BQU8sRUFBRSxDQUFDLENBQUMsbUJBQW1CO2dCQUNoQyxDQUFDLENBQUM7Z0JBRUYsT0FBTyxDQUFDLGVBQWUsR0FBRyxDQUFDLEtBQUssRUFBRSxFQUFFO29CQUNsQyxJQUFJLENBQUMsUUFBUSxHQUFJLEtBQUssQ0FBQyxNQUEyQixDQUFDLE1BQU0sQ0FBQztvQkFFMUQsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLENBQUM7d0JBQ3RFLElBQUksQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUM7b0JBQ3JGLENBQUM7b0JBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxFQUFFLENBQUM7d0JBQzNFLElBQUksQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLHVCQUF1QixFQUFFLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUM7b0JBQzFGLENBQUM7b0JBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxFQUFFLENBQUM7d0JBQzNFLElBQUksQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLHVCQUF1QixFQUFFLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUM7b0JBQzFGLENBQUM7b0JBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLENBQUM7d0JBQ3RFLElBQUksQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7b0JBQ2xGLENBQUM7b0JBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxFQUFFLENBQUM7d0JBQy9FLElBQUksQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLDJCQUEyQixFQUFFLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUM7b0JBQzlGLENBQUM7b0JBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxFQUFFLENBQUM7d0JBQy9FLElBQUksQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLDJCQUEyQixFQUFFLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUM7b0JBQzlGLENBQUM7Z0JBQ0gsQ0FBQyxDQUFDO1lBRUosQ0FBQztpQkFBTSxDQUFDO2dCQUNOLE9BQU8sQ0FBQyxJQUFJLENBQUMsK0JBQStCLENBQUMsQ0FBQztnQkFDOUMsT0FBTyxFQUFFLENBQUM7WUFDWixDQUFDO1FBRUgsQ0FBQyxDQUFDLENBQUM7UUFFSCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDdEIsQ0FBQztJQUVELFFBQVEsQ0FBQyxLQUFVO1FBQ2pCLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLGVBQWUsRUFBRSxLQUFLLENBQUMsQ0FBQTtRQUM5QyxnREFBZ0Q7UUFDaEQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsZUFBZSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxLQUFLLEdBQVEsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLENBQUE7UUFDeEQsSUFBSSxDQUFDLEtBQUs7WUFDUixLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxDQUFBO1FBQ3JELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUdELGtCQUFrQixDQUFDLE9BQVk7UUFDN0IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFBO1FBQ2xFLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLGlCQUFpQixFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUNuRSxDQUFDO0lBRUQsa0JBQWtCO1FBQ2hCLElBQUksZUFBZSxHQUFRLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFDLENBQUE7UUFDcEUsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3JCLGVBQWUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQzVELENBQUM7UUFDRCxPQUFPLGVBQWUsQ0FBQztJQUN6QixDQUFDO0lBRUQsYUFBYTtRQUNYLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQztZQUNsQyxPQUFPO1FBRVQsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ25DLElBQUksQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ2xCLElBQUksQ0FBQyxZQUFZLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQy9DLE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQztnQkFDdkIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUM7Z0JBQ3pELElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDO2FBQzlELENBQUMsQ0FBQztZQUNILE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxZQUFpQixFQUFFLEVBQUU7Z0JBQ3RDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQVUsQ0FBQztnQkFDM0MsTUFBTSxRQUFRLEdBQVMsWUFBWSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEVBQUUsVUFBVSxFQUFFLFFBQVEsQ0FBQyxJQUFJLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztnQkFFOUssSUFBSSxRQUFRLEVBQUUsTUFBTTtvQkFDbEIsWUFBWSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO2dCQUNuRCxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsZ0JBQWdCLEVBQUUsRUFBRTtvQkFDM0MsZ0JBQWdCLENBQUMsU0FBUyxHQUFHLENBQUMsZUFBb0IsRUFBRSxFQUFFO3dCQUNwRCxRQUFRLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxNQUFNLElBQUksRUFBRSxFQUFFLFFBQVEsRUFBRSxZQUFZLElBQUksRUFBRSxDQUFDLENBQUM7d0JBRTlHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUM7d0JBQ2pELG1FQUFtRTt3QkFDbkUsNkRBQTZEO3dCQUM3RCx1REFBdUQ7d0JBQ3ZELEtBQUs7b0JBQ1AsQ0FBQyxDQUFBO2dCQUNILENBQUMsQ0FBQyxDQUFBO2dCQUVGLE1BQU0sWUFBWSxHQUFTLFlBQVksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQVksQ0FBQztnQkFDMUQsSUFBSSxZQUFZLENBQUMsTUFBTTtvQkFDckIsWUFBWSxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUMxRCxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxvQkFBb0IsRUFBRSxFQUFFO29CQUNwRCxvQkFBb0IsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxtQkFBd0IsRUFBRSxFQUFFO3dCQUM1RCxZQUFZLENBQUMsWUFBWSxHQUFHLENBQUMsR0FBRyxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxNQUFNLElBQUksRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLFlBQVksQ0FBQyxZQUFZLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQzt3QkFDakgsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsQ0FBQzt3QkFDeEQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLENBQUM7b0JBQzdDLENBQUMsQ0FBQTtnQkFDSCxDQUFDLENBQUMsQ0FBQTtnQkFFRixJQUFJLENBQUMsWUFBWSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNsRCxDQUFDLENBQUMsQ0FBQTtRQUNKLENBQUM7YUFBTSxDQUFDO1lBQ04sMEJBQTBCO1FBQzVCLENBQUM7SUFDSCxDQUFDO0lBRUQsYUFBYSxDQUFDLFlBQW1CLEVBQUUsVUFBaUI7UUFDbEQsS0FBSyxJQUFJLE9BQU8sSUFBSSxVQUFVLEVBQUUsQ0FBQztZQUMvQixJQUFJLFNBQVMsR0FBRyxLQUFLLENBQUM7WUFDdEIsS0FBSyxJQUFJLFFBQVEsSUFBSSxZQUFZLEVBQUUsQ0FBQztnQkFDbEMsSUFBSSxRQUFRLENBQUMsU0FBUyxLQUFLLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQztvQkFDN0MsU0FBUyxHQUFHLElBQUksQ0FBQztvQkFDakIsd0NBQXdDO2dCQUMxQyxDQUFDO1lBQ0gsQ0FBQztZQUNELElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztnQkFDZixZQUFZLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzdCLENBQUM7UUFDSCxDQUFDO1FBQ0QsT0FBTyxZQUFZLENBQUM7SUFDdEIsQ0FBQztJQUVELGVBQWU7SUFDZixLQUFLLENBQUMsV0FBVztRQUNmLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQztRQUVuQixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLFdBQVcsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLElBQUksV0FBVyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQ3BHLE9BQU8sV0FBVyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUNuRSxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsT0FBcUI7UUFDcEMsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxXQUFXLENBQUMsSUFBSSxDQUFDLGtCQUFrQixJQUFJLFdBQVcsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUNwRyxNQUFNLE9BQU8sR0FBRyxXQUFXLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM5RSxXQUFXLENBQUMsVUFBVSxHQUFHLEdBQUcsRUFBRTtZQUM1QixJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUM3QixDQUFDLENBQUM7UUFDRixPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0lBRUQsdUJBQXVCLENBQUMsUUFBd0I7UUFDOUMsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxXQUFXLENBQUMsSUFBSSxDQUFDLHVCQUF1QixJQUFJLGdCQUFnQixFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQzlHLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUMzQixXQUFXLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNyRSxDQUFDLENBQUMsQ0FBQTtRQUNGLFdBQVcsQ0FBQyxVQUFVLEdBQUcsR0FBRyxFQUFFO1lBQzVCLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1FBQ2pDLENBQUMsQ0FBQztRQUNGLE9BQU8sV0FBVyxDQUFDO0lBQ3JCLENBQUM7SUFDRCxvQkFBb0IsQ0FBQyxRQUF3QjtRQUMzQyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLFdBQVcsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLElBQUksV0FBVyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQ3BHLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUMzQixXQUFXLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNoRSxDQUFDLENBQUMsQ0FBQTtRQUNGLFdBQVcsQ0FBQyxVQUFVLEdBQUcsR0FBRyxFQUFFO1lBQzVCLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBQzdCLENBQUMsQ0FBQztRQUNGLE9BQU8sV0FBVyxDQUFDO0lBQ3JCLENBQUM7SUFDRCxxQkFBcUIsQ0FBQyxTQUFpQjtRQUNyQyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLFdBQVcsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLElBQUksV0FBVyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQ3BHLE1BQU0sT0FBTyxHQUFHLFdBQVcsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ25GLFdBQVcsQ0FBQyxVQUFVLEdBQUcsR0FBRyxFQUFFO1lBQzVCLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBQzdCLENBQUMsQ0FBQztRQUNGLE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFDRCxLQUFLLENBQUMsa0JBQWtCLENBQUMsU0FBaUI7UUFDeEMsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxXQUFXLENBQUMsSUFBSSxDQUFDLGtCQUFrQixJQUFJLFdBQVcsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUNwRyxPQUFPLE1BQU0sV0FBVyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDL0UsQ0FBQztJQUVELG1CQUFtQjtJQUNuQixLQUFLLENBQUMsZ0JBQWdCO1FBRXBCLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUN6RixPQUFPLE1BQU0sV0FBVyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUM5RSxDQUFDO0lBRUQsS0FBSyxDQUFDLFlBQVk7UUFFaEIsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLHVCQUF1QixFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQ3pGLE9BQU8sTUFBTSxXQUFXLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQzlFLENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxPQUFxQjtRQUN4QyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsdUJBQXVCLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDekYsTUFBTSxPQUFPLEdBQUcsV0FBVyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDbkYsV0FBVyxDQUFDLFVBQVUsR0FBRyxHQUFHLEVBQUU7WUFDNUIsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7UUFDakMsQ0FBQyxDQUFDO1FBQ0YsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUNELGlCQUFpQixDQUFDLE9BQXFCO1FBQ3JDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUN6RixPQUFPLFdBQVcsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzVFLENBQUM7SUFDRCx5QkFBeUIsQ0FBQyxTQUFpQjtRQUN6QyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsdUJBQXVCLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDekYsTUFBTSxPQUFPLEdBQUcsV0FBVyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDeEYsV0FBVyxDQUFDLFVBQVUsR0FBRyxHQUFHLEVBQUU7WUFDNUIsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7UUFDakMsQ0FBQyxDQUFDO1FBQ0YsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVELGFBQWE7UUFDWCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLFdBQVcsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLElBQUksV0FBVyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQ3BHLE1BQU0sT0FBTyxHQUFHLFdBQVcsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDekUsV0FBVyxDQUFDLFVBQVUsR0FBRyxHQUFHLEVBQUU7WUFDNUIsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFDN0IsQ0FBQyxDQUFDO1FBQ0YsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVELGNBQWM7UUFDWixJQUFJLENBQUMsY0FBYyxHQUFHLENBQUMsQ0FBQztRQUN4QixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLFdBQVcsQ0FBQyxJQUFJLENBQUMsdUJBQXVCLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDMUYsT0FBTyxXQUFXLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3ZFLENBQUM7SUFFRCwwQkFBMEIsQ0FBQyxTQUFpQjtRQUMxQyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsdUJBQXVCLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDekYsT0FBTyxXQUFXLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNqRixDQUFDO0lBRUQsMEZBQTBGO0lBQ2xGLG9CQUFvQixDQUFDLElBQWlDO1FBQzVELE9BQU8sSUFBSSxLQUFLLFlBQVksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLDJCQUEyQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsMkJBQTJCLENBQUM7SUFDckcsQ0FBQztJQUVELEtBQUssQ0FBQyxjQUFjLENBQUMsSUFBaUM7UUFDcEQsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDO1FBQ25CLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNsRCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxTQUFTLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDdEUsT0FBTyxXQUFXLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQ3JELENBQUM7SUFFRCxLQUFLLENBQUMsdUJBQXVCLENBQUMsSUFBaUMsRUFBRSxPQUFxQjtRQUNwRixNQUFNLElBQUksQ0FBQyxPQUFPLENBQUM7UUFDbkIsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2xELE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLFNBQVMsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUN0RSxXQUFXLENBQUMsVUFBVSxHQUFHLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQywwQkFBMEIsRUFBRSxDQUFDO1FBQ2pFLE9BQU8sV0FBVyxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDekQsQ0FBQztJQUVELEtBQUssQ0FBQyw0QkFBNEIsQ0FBQyxJQUFpQyxFQUFFLFNBQWlCO1FBQ3JGLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQztRQUNuQixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbEQsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsU0FBUyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQ3RFLFdBQVcsQ0FBQyxVQUFVLEdBQUcsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLDBCQUEwQixFQUFFLENBQUM7UUFDakUsT0FBTyxXQUFXLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUM5RCxDQUFDO0lBRUQsS0FBSyxDQUFDLGdCQUFnQixDQUFDLElBQWlDO1FBQ3RELE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQztRQUNuQixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbEQsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsU0FBUyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQ3RFLFdBQVcsQ0FBQyxVQUFVLEdBQUcsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLDBCQUEwQixFQUFFLENBQUM7UUFDakUsT0FBTyxXQUFXLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3BELENBQUM7SUFFRCxlQUFlO0lBQ2YsT0FBTyxDQUFDLElBQVU7UUFDaEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ2hFLDhEQUE4RDtRQUM5RCxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQztRQUMzRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFDRCxPQUFPO1FBQ0wsSUFBSSxDQUFDO1lBQ0gsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDN0MsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUNiLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxhQUFhO1lBQzdELENBQUM7WUFDRCxJQUFJLENBQUMsT0FBTztnQkFBRSxPQUFPLElBQUksQ0FBQztZQUMxQixNQUFNLElBQUksR0FBUyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTTtnQkFBRSxPQUFPLElBQUksQ0FBQztZQUMvQixJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzNDLE9BQU8sSUFBSSxDQUFDO1FBRWQsQ0FBQztRQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDWCxPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7SUFDSCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILGNBQWM7UUFDWixJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNoRixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDWixNQUFNLEdBQUcsTUFBTSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQzdCLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDOUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3pDLENBQUM7UUFDRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDOytHQTdiVSxxQkFBcUIsdUdBU3RCLGFBQWEsbUNBRWIsV0FBVzttSEFYVixxQkFBcUIsY0FGcEIsTUFBTTs7NEZBRVAscUJBQXFCO2tCQUhqQyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQjs7MEJBVUksTUFBTTsyQkFBQyxhQUFhOzswQkFFcEIsTUFBTTsyQkFBQyxXQUFXIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPcmRlcmVkSXRlbXMgfSBmcm9tICcuLi9lY29tbWVyY2Uvc3R5bGVzL09yZGVyZWRJdGVtcy5tb2RhbCc7XG5pbXBvcnQgeyBVc2VyIH0gZnJvbSAnLi4vZWNvbW1lcmNlL3N0eWxlcy91c2VyLm1vZGFsJztcbmltcG9ydCB7IEV2ZW50c1NlcnZpY2UgfSBmcm9tICcuL2V2ZW50cy5zZXJ2aWNlJztcbmltcG9ydCB7IENvb2tpZVNlcnZpY2UgfSBmcm9tICduZ3gtY29va2llLXNlcnZpY2UnO1xuaW1wb3J0IHsgZm9ya0pvaW4gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFJlc3RTZXJ2aWNlIH0gZnJvbSAnLi9yZXN0LnNlcnZpY2UnO1xuaW1wb3J0IHsgQ2FydCwgY2FydFR5cGUgfSBmcm9tICcuLy4uL2Vjb21tZXJjZS9zdHlsZXMvY2FydC5tb2RhbCc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IGlzUGxhdGZvcm1Ccm93c2VyIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEluamVjdCwgUExBVEZPUk1fSUQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN0b3JhZ2VMaWtlIH0gZnJvbSAnLi4vc2VydmljZXMvc3RvcmFnZS1saWtlJztcbmltcG9ydCB7IExPQ0FMX1NUT1JBR0UgfSBmcm9tICcuLi9zZXJ2aWNlcy9sb2NhbC1zdG9yYWdlLnRva2VuJztcblxuXG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIFN0b3JhZ2VTZXJ2aWNlU2VydmljZSB7XG5cblxuICBwcml2YXRlIGRiUmVhZHkhOiBQcm9taXNlPHZvaWQ+O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZXZlbnRTZXJ2aWNlOiBFdmVudHNTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgY29va2llU2VydmljZTogQ29va2llU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJlc3RTZXJ2aWNlOiBSZXN0U2VydmljZSxcbiAgICBASW5qZWN0KExPQ0FMX1NUT1JBR0UpIHByaXZhdGUgc3RvcmFnZTogU3RvcmFnZUxpa2UsXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICBASW5qZWN0KFBMQVRGT1JNX0lEKSBwcml2YXRlIHBsYXRmb3JtSWQ6IE9iamVjdFxuICApIHtcbiAgICB0aGlzLmNyZWF0ZURhdGFCYXNlKCk7XG4gICAgY29uc3QgdXNlckRldGFpbHMgPSB0aGlzLmdldFVzZXIoKTtcbiAgICBpZiAoISF1c2VyRGV0YWlscykge1xuICAgICAgdGhpcy5yZXN0U2VydmljZS5nZXRVc2VySW5mbyh1c2VyRGV0YWlscy51c2VySWQpLnN1YnNjcmliZSgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLnNldFVzZXIocmVzcG9uc2UuZGF0YSk7XG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdG90YWxDYXJ0SXRlbXM6IG51bWJlciA9IDA7XG4gIGdldENhcnRUb3RhbEFtb3VudDogbnVtYmVyID0gMDtcbiAgZ2V0IGdldFRvdGFsQ2FydEl0ZW1zKCkge1xuICAgIGlmICh0aGlzLnRvdGFsQ2FydEl0ZW1zIDwgMClcbiAgICAgIHRoaXMudG90YWxDYXJ0SXRlbXMgPSAwO1xuICAgIC8vIHRoaXMuZXZlbnRTZXJ2aWNlLnNob3dCYWdJY29uLmVtaXQodGhpcy50b3RhbENhcnRJdGVtcyA+IDApO1xuICAgIHJldHVybiB0aGlzLnRvdGFsQ2FydEl0ZW1zO1xuICB9XG5cbiAgcHJpdmF0ZSB0b3RhbFdpc2hsaXN0SXRlbXM6IG51bWJlciA9IDA7XG4gIGdldCBnZXRUb3RhbFdpc2hsaXN0SXRlbXMoKSB7XG4gICAgaWYgKHRoaXMudG90YWxXaXNobGlzdEl0ZW1zIDwgMClcbiAgICAgIHRoaXMudG90YWxXaXNobGlzdEl0ZW1zID0gMDtcbiAgICByZXR1cm4gdGhpcy50b3RhbFdpc2hsaXN0SXRlbXM7XG4gIH1cblxuICAvKiogQ29tYmluZWQgY291bnQgYWNyb3NzIEhPTUVfVklTSVRfQ0FSVCArIFZJREVPX0NBTExfQ0FSVCwgZm9yIHRoZSBoZWFkZXIgQm9va2luZ3MgYmFkZ2UuICovXG4gIHByaXZhdGUgdG90YWxCb29raW5nSXRlbXM6IG51bWJlciA9IDA7XG4gIGdldCBnZXRUb3RhbEJvb2tpbmdJdGVtcygpIHtcbiAgICBpZiAodGhpcy50b3RhbEJvb2tpbmdJdGVtcyA8IDApXG4gICAgICB0aGlzLnRvdGFsQm9va2luZ0l0ZW1zID0gMDtcbiAgICByZXR1cm4gdGhpcy50b3RhbEJvb2tpbmdJdGVtcztcbiAgfVxuXG4gIGNhbGN1bGF0ZUJvb2tpbmdDYXJ0VG90YWxzKCkge1xuICAgIGlmICghdGhpcy5kYXRhYmFzZSkgcmV0dXJuO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBtb2RlczogKCdIT01FX1ZJU0lUJyB8ICdWSURFT19DQUxMJylbXSA9IFsnSE9NRV9WSVNJVCcsICdWSURFT19DQUxMJ107XG4gICAgICBjb25zdCBjb3VudHM6IG51bWJlcltdID0gWzAsIDBdO1xuICAgICAgbW9kZXMuZm9yRWFjaCgobW9kZSwgaSkgPT4ge1xuICAgICAgICBjb25zdCBzdG9yZU5hbWUgPSB0aGlzLmJvb2tpbmdDYXJ0U3RvcmVOYW1lKG1vZGUpO1xuICAgICAgICBjb25zdCB0cmFuc2FjdGlvbiA9IHRoaXMuZGF0YWJhc2UudHJhbnNhY3Rpb24oc3RvcmVOYW1lLCBcInJlYWRvbmx5XCIpO1xuICAgICAgICBjb25zdCByZXF1ZXN0ID0gdHJhbnNhY3Rpb24ub2JqZWN0U3RvcmUoc3RvcmVOYW1lKS5nZXRBbGwoKTtcbiAgICAgICAgcmVxdWVzdC5vbnN1Y2Nlc3MgPSAoZXZlbnQ6IGFueSkgPT4ge1xuICAgICAgICAgIGNvdW50c1tpXSA9IChldmVudC50YXJnZXQucmVzdWx0IHx8IFtdKS5sZW5ndGg7XG4gICAgICAgICAgdGhpcy50b3RhbEJvb2tpbmdJdGVtcyA9IGNvdW50cy5yZWR1Y2UoKGEsIGIpID0+IGEgKyBiLCAwKTtcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUud2FybihcIkVycm9yIGNhbGN1bGF0aW5nIGJvb2tpbmcgY2FydCB0b3RhbHM6XCIsIGUpO1xuICAgIH1cbiAgfVxuXG4gIGNhbGN1bGF0ZUNhcnRUb3RhbHMoKSB7XG4gICAgaWYgKCF0aGlzLmRhdGFiYXNlKSByZXR1cm47XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNhcnRUcmFuc2FjdGlvbiA9IHRoaXMuZGF0YWJhc2UudHJhbnNhY3Rpb24odGhpcy5jYXJ0Q29sbGVjdGlvbk5hbWUsIFwicmVhZG9ubHlcIik7XG4gICAgICBjb25zdCBjYXJ0UmVxdWVzdCA9IGNhcnRUcmFuc2FjdGlvbi5vYmplY3RTdG9yZSh0aGlzLmNhcnRDb2xsZWN0aW9uTmFtZSkuZ2V0QWxsKCk7XG4gICAgICBjYXJ0UmVxdWVzdC5vbnN1Y2Nlc3MgPSAoZXZlbnQ6IGFueSkgPT4ge1xuICAgICAgICBjb25zdCBpdGVtcyA9IGV2ZW50LnRhcmdldC5yZXN1bHQgfHwgW107XG4gICAgICAgIHRoaXMudG90YWxDYXJ0SXRlbXMgPSBpdGVtcy5sZW5ndGg7XG4gICAgICAgIHRoaXMuZ2V0Q2FydFRvdGFsQW1vdW50ID0gaXRlbXMucmVkdWNlKChhY2M6IG51bWJlciwgaXRlbTogYW55KSA9PiBhY2MgKyAoKGl0ZW0uc2VsbGluZ1ByaWNlIHx8IDApICogKGl0ZW0ucXVhbnRpdHkgfHwgMSkpLCAwKTtcbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS53YXJuKFwiRXJyb3IgY2FsY3VsYXRpbmcgY2FydCB0b3RhbHM6XCIsIGUpO1xuICAgIH1cbiAgfVxuXG4gIGNhbGN1bGF0ZVdpc2hsaXN0VG90YWxzKCkge1xuICAgIGlmICghdGhpcy5kYXRhYmFzZSkgcmV0dXJuO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB3aXNobGlzdFRyYW5zYWN0aW9uID0gdGhpcy5kYXRhYmFzZS50cmFuc2FjdGlvbih0aGlzLmZhdm91cml0ZUNvbGxlY3Rpb25OYW1lLCBcInJlYWRvbmx5XCIpO1xuICAgICAgY29uc3Qgd2lzaGxpc3RSZXF1ZXN0ID0gd2lzaGxpc3RUcmFuc2FjdGlvbi5vYmplY3RTdG9yZSh0aGlzLmZhdm91cml0ZUNvbGxlY3Rpb25OYW1lKS5nZXRBbGwoKTtcbiAgICAgIHdpc2hsaXN0UmVxdWVzdC5vbnN1Y2Nlc3MgPSAoZXZlbnQ6IGFueSkgPT4ge1xuICAgICAgICBjb25zdCBpdGVtcyA9IGV2ZW50LnRhcmdldC5yZXN1bHQgfHwgW107XG4gICAgICAgIHRoaXMudG90YWxXaXNobGlzdEl0ZW1zID0gaXRlbXMubGVuZ3RoO1xuICAgICAgfTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLndhcm4oXCJFcnJvciBjYWxjdWxhdGluZyB3aXNobGlzdCB0b3RhbHM6XCIsIGUpO1xuICAgIH1cbiAgfVxuXG4gIGRhdGFiYXNlTmFtZTogc3RyaW5nID0gXCJVU0VSXCI7XG4gIC8vIEJ1bXBlZCAxIC0+IDIgdG8gYWRkIHRoZSB0d28gYm9va2luZy1jYXJ0IHN0b3JlcyBiZWxvdy4gSW5kZXhlZERCIG9ubHkgY3JlYXRlcyBuZXcgb2JqZWN0XG4gIC8vIHN0b3JlcyBpbnNpZGUgb251cGdyYWRlbmVlZGVkLCB3aGljaCBvbmx5IGZpcmVzIG9uIGEgdmVyc2lvbiBidW1wIC0gd2l0aG91dCB0aGlzLCB0aGUgbmV3XG4gIC8vIHN0b3JlcyB3b3VsZCBzaWxlbnRseSBuZXZlciBnZXQgY3JlYXRlZCBmb3IgYW55b25lIHdobyBhbHJlYWR5IGhhcyBhIHYxIGRhdGFiYXNlLlxuICBkYXRhYmFzZVZlcnNpb246IG51bWJlciA9IDI7XG4gIGNhcnRDb2xsZWN0aW9uTmFtZTogc3RyaW5nID0gXCJVU0VSX0NBUlRcIjtcbiAgZmF2b3VyaXRlQ29sbGVjdGlvbk5hbWU6IHN0cmluZyA9IFwiVVNFUl9GQVZPVVJJVEVcIjtcbiAgdHJpYWxDYXJ0Q29sbGVjdGlvbk5hbWU6IHN0cmluZyA9ICdUUklBTF9DQVJUJ1xuICB1c2VyQ29sbGVjdGlvbk5hbWU6IHN0cmluZyA9IFwiVVNFUlwiO1xuICAvKipcbiAgICogT25lIGJ1Y2tldCBwZXIgYm9va2luZyBtb2RlIChIb21lIFZpc2l0IC8gVmlkZW8gQ2FsbCksIGxvY2FsLW9ubHksIG5vIHNlcnZlciBzeW5jIC0gdW5saWtlXG4gICAqIFRSSUFMX0NBUlQsIHRoZSBuZXcgZ3JvdXAvY2FydCBib29raW5nIEFQSSB0YWtlcyBwcm9kdWN0IGxpbmVzIGRpcmVjdGx5IGluIHRoZSBob2xkIHJlcXVlc3QsXG4gICAqIHNvIHRoZXJlJ3Mgbm8gc2VydmVyLXNpZGUgY2FydCB0byBrZWVwIHRoZXNlIGluIHN5bmMgd2l0aC4gS2VwdCBzZXBhcmF0ZSBmcm9tIGVhY2ggb3RoZXIgc29cbiAgICogYSBjdXN0b21lciBjYW4gaG9sZCBhIHBlbmRpbmcgY2FydCBmb3IgZWFjaCBtb2RlIGF0IG9uY2UuXG4gICAqL1xuICBob21lVmlzaXRDYXJ0Q29sbGVjdGlvbk5hbWU6IHN0cmluZyA9ICdIT01FX1ZJU0lUX0NBUlQnO1xuICB2aWRlb0NhbGxDYXJ0Q29sbGVjdGlvbk5hbWU6IHN0cmluZyA9ICdWSURFT19DQUxMX0NBUlQnO1xuICBkYXRhYmFzZSE6IElEQkRhdGFiYXNlO1xuXG4gIGNhcnRDb2xsZWN0aW9uUmVmOiBJREJPYmplY3RTdG9yZSB8IG51bGwgPSBudWxsO1xuICBmYXZvdXJpdGVDb2xsZWN0aW9uUmVmOiBJREJPYmplY3RTdG9yZSB8IG51bGwgPSBudWxsO1xuICB1c2VyQ29sbGVjdGlvblJlZjogSURCT2JqZWN0U3RvcmUgfCBudWxsID0gbnVsbDtcbiAgdHJpYWxDYXJ0Q29sbGVjdGlvblJlZjogSURCT2JqZWN0U3RvcmUgfCBudWxsID0gbnVsbDtcblxuICBjcmVhdGVEYXRhQmFzZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLmRiUmVhZHkgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cbiAgICAgIGlmIChpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpICYmIHdpbmRvdy5pbmRleGVkREIpIHtcbiAgICAgICAgY29uc3QgcmVxdWVzdDogSURCT3BlbkRCUmVxdWVzdCA9IHdpbmRvdy5pbmRleGVkREIub3Blbih0aGlzLmRhdGFiYXNlTmFtZSwgdGhpcy5kYXRhYmFzZVZlcnNpb24pO1xuXG4gICAgICAgIHJlcXVlc3Qub25lcnJvciA9ICgpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdbSW5kZXhlZERCXSBGYWlsZWQgdG8gb3BlbiBkYXRhYmFzZScpO1xuICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgfTtcblxuICAgICAgICByZXF1ZXN0Lm9uYmxvY2tlZCA9ICgpID0+IHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oJ1tJbmRleGVkREJdIERhdGFiYXNlIHVwZ3JhZGUgYmxvY2tlZCBieSBvcGVuIGNvbm5lY3Rpb24nKTtcbiAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgIH07XG5cbiAgICAgICAgcmVxdWVzdC5vbnN1Y2Nlc3MgPSBhc3luYyAoZXZlbnQpID0+IHtcbiAgICAgICAgICB0aGlzLmRhdGFiYXNlID0gKGV2ZW50LnRhcmdldCBhcyBJREJPcGVuREJSZXF1ZXN0KS5yZXN1bHQ7XG4gICAgICAgICAgdGhpcy5kYXRhYmFzZS5vbnZlcnNpb25jaGFuZ2UgPSAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmRhdGFiYXNlLmNsb3NlKCk7XG4gICAgICAgICAgfTtcbiAgICAgICAgICB0aGlzLmNhbGN1bGF0ZUNhcnRUb3RhbHMoKTtcbiAgICAgICAgICB0aGlzLmNhbGN1bGF0ZVdpc2hsaXN0VG90YWxzKCk7XG4gICAgICAgICAgdGhpcy5jYWxjdWxhdGVCb29raW5nQ2FydFRvdGFscygpO1xuICAgICAgICAgIHJlc29sdmUoKTsgLy8g4pyFIFZFUlkgSU1QT1JUQU5UXG4gICAgICAgIH07XG5cbiAgICAgICAgcmVxdWVzdC5vbnVwZ3JhZGVuZWVkZWQgPSAoZXZlbnQpID0+IHtcbiAgICAgICAgICB0aGlzLmRhdGFiYXNlID0gKGV2ZW50LnRhcmdldCBhcyBJREJPcGVuREJSZXF1ZXN0KS5yZXN1bHQ7XG5cbiAgICAgICAgICBpZiAoIXRoaXMuZGF0YWJhc2Uub2JqZWN0U3RvcmVOYW1lcy5jb250YWlucyh0aGlzLmNhcnRDb2xsZWN0aW9uTmFtZSkpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YWJhc2UuY3JlYXRlT2JqZWN0U3RvcmUodGhpcy5jYXJ0Q29sbGVjdGlvbk5hbWUsIHsga2V5UGF0aDogXCJ2YXJpZW50SWRcIiB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCF0aGlzLmRhdGFiYXNlLm9iamVjdFN0b3JlTmFtZXMuY29udGFpbnModGhpcy50cmlhbENhcnRDb2xsZWN0aW9uTmFtZSkpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YWJhc2UuY3JlYXRlT2JqZWN0U3RvcmUodGhpcy50cmlhbENhcnRDb2xsZWN0aW9uTmFtZSwgeyBrZXlQYXRoOiBcInZhcmllbnRJZFwiIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoIXRoaXMuZGF0YWJhc2Uub2JqZWN0U3RvcmVOYW1lcy5jb250YWlucyh0aGlzLmZhdm91cml0ZUNvbGxlY3Rpb25OYW1lKSkge1xuICAgICAgICAgICAgdGhpcy5kYXRhYmFzZS5jcmVhdGVPYmplY3RTdG9yZSh0aGlzLmZhdm91cml0ZUNvbGxlY3Rpb25OYW1lLCB7IGtleVBhdGg6IFwidmFyaWVudElkXCIgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghdGhpcy5kYXRhYmFzZS5vYmplY3RTdG9yZU5hbWVzLmNvbnRhaW5zKHRoaXMudXNlckNvbGxlY3Rpb25OYW1lKSkge1xuICAgICAgICAgICAgdGhpcy5kYXRhYmFzZS5jcmVhdGVPYmplY3RTdG9yZSh0aGlzLnVzZXJDb2xsZWN0aW9uTmFtZSwgeyBrZXlQYXRoOiBcInVzZXJJZFwiIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoIXRoaXMuZGF0YWJhc2Uub2JqZWN0U3RvcmVOYW1lcy5jb250YWlucyh0aGlzLmhvbWVWaXNpdENhcnRDb2xsZWN0aW9uTmFtZSkpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YWJhc2UuY3JlYXRlT2JqZWN0U3RvcmUodGhpcy5ob21lVmlzaXRDYXJ0Q29sbGVjdGlvbk5hbWUsIHsga2V5UGF0aDogXCJ2YXJpZW50SWRcIiB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCF0aGlzLmRhdGFiYXNlLm9iamVjdFN0b3JlTmFtZXMuY29udGFpbnModGhpcy52aWRlb0NhbGxDYXJ0Q29sbGVjdGlvbk5hbWUpKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGFiYXNlLmNyZWF0ZU9iamVjdFN0b3JlKHRoaXMudmlkZW9DYWxsQ2FydENvbGxlY3Rpb25OYW1lLCB7IGtleVBhdGg6IFwidmFyaWVudElkXCIgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLndhcm4oJ1tTU1JdIEluZGV4ZWREQiBub3QgYXZhaWxhYmxlJyk7XG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgIH1cblxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRoaXMuZGJSZWFkeTtcbiAgfVxuXG4gIHNldFRva2VuKHRva2VuOiBhbnkpIHtcbiAgICB0aGlzLmNvb2tpZVNlcnZpY2Uuc2V0KFwicGFzc0Jvb2tUb2tlblwiLCB0b2tlbilcbiAgICAvLyBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShcInBhc3NCb29rVG9rZW5cIiwgdG9rZW4pO1xuICAgIHRoaXMuc3RvcmFnZS5zZXRJdGVtKFwicGFzc0Jvb2tUb2tlblwiLCB0b2tlbik7XG4gIH1cblxuICBnZXRUb2tlbigpIHtcbiAgICBsZXQgdG9rZW46IGFueSA9IHRoaXMuY29va2llU2VydmljZS5nZXQoJ3Bhc3NCb29rVG9rZW4nKVxuICAgIGlmICghdG9rZW4pXG4gICAgICB0b2tlbiA9IHRoaXMuc3RvcmFnZS5nZXRJdGVtKCdwYXNzQm9va1Rva2VuJykgfHwgXCJcIlxuICAgIHJldHVybiB0b2tlbjtcbiAgfVxuXG5cbiAgc2V0UmVmZXJyYWxEZXRhaWxzKGRldGFpbHM6IGFueSkge1xuICAgIHRoaXMuY29va2llU2VydmljZS5zZXQoXCJyZWZlcnJhbERldGFpbHNcIiwgSlNPTi5zdHJpbmdpZnkoZGV0YWlscykpXG4gICAgdGhpcy5zdG9yYWdlLnNldEl0ZW0oXCJyZWZlcnJhbERldGFpbHNcIiwgSlNPTi5zdHJpbmdpZnkoZGV0YWlscykpO1xuICB9XG5cbiAgZ2V0UmVmZXJyYWxEZXRhaWxzKCkge1xuICAgIGxldCByZWZlcnJhbERldGFpbHM6IGFueSA9IHRoaXMuY29va2llU2VydmljZS5nZXQoJ3JlZmVycmFsRGV0YWlscycpXG4gICAgaWYgKCFyZWZlcnJhbERldGFpbHMpIHtcbiAgICAgIHJlZmVycmFsRGV0YWlscyA9IHRoaXMuc3RvcmFnZS5nZXRJdGVtKFwicmVmZXJyYWxEZXRhaWxzXCIpO1xuICAgIH1cbiAgICByZXR1cm4gcmVmZXJyYWxEZXRhaWxzO1xuICB9XG5cbiAgdXBkYXRlQWxsRGF0YSgpIHtcbiAgICBpZiAodGhpcy5yb3V0ZXIudXJsLmluY2x1ZGVzKCdjYXJ0JykpXG4gICAgICByZXR1cm47XG5cbiAgICBjb25zdCB1c2VyRGV0YWlscyA9IHRoaXMuZ2V0VXNlcigpO1xuICAgIGlmICghIXVzZXJEZXRhaWxzKSB7XG4gICAgICB0aGlzLmV2ZW50U2VydmljZS5zaG93TG9hZGluZ1NjcmVlbi5lbWl0KHRydWUpO1xuICAgICAgY29uc3QgcmVxdWVzdCA9IGZvcmtKb2luKFtcbiAgICAgICAgdGhpcy5yZXN0U2VydmljZS5nZXRVc2VySXRlbXModXNlckRldGFpbHMudXNlcklkLCBcIkNBUlRcIiksXG4gICAgICAgIHRoaXMucmVzdFNlcnZpY2UuZ2V0VXNlckl0ZW1zKHVzZXJEZXRhaWxzLnVzZXJJZCwgXCJXSVNITElTVFwiKVxuICAgICAgXSk7XG4gICAgICByZXF1ZXN0LnN1YnNjcmliZSgoY2FydFJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgY29uc3QgdXNlckRldGFpbHMgPSB0aGlzLmdldFVzZXIoKSBhcyBVc2VyO1xuICAgICAgICBjb25zdCB1c2VyQ2FydDogQ2FydCA9IGNhcnRSZXNwb25zZT8uWzBdLmRhdGFbMF0gPyBjYXJ0UmVzcG9uc2U/LlswXS5kYXRhWzBdIGFzIENhcnQgOiBuZXcgQ2FydCh7ICdjYXJ0VHlwZSc6IGNhcnRUeXBlLkNBUlQsICd1c2VyRGV0YWlscyc6IHVzZXJEZXRhaWxzLCAncGxhdGZvcm0nOiAnV0VCJyB9KTtcblxuICAgICAgICBpZiAodXNlckNhcnQ/LmNhcnRJZClcbiAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShcImNhcnRJZFwiLCB1c2VyQ2FydD8uY2FydElkKTtcbiAgICAgICAgdGhpcy5nZXRVc2VyQ2FydCgpLnRoZW4oKHVzZXJDYXJ0UmVzcG9uc2UpID0+IHtcbiAgICAgICAgICB1c2VyQ2FydFJlc3BvbnNlLm9uc3VjY2VzcyA9ICh1c2VyQ2FydEluZGV4REI6IGFueSkgPT4ge1xuICAgICAgICAgICAgdXNlckNhcnQub3JkZXJlZEl0ZW1zID0gdGhpcy5tZXJnZUFsbEl0ZW1zKHVzZXJDYXJ0SW5kZXhEQi50YXJnZXQucmVzdWx0ID8/IFtdLCB1c2VyQ2FydD8ub3JkZXJlZEl0ZW1zID8/IFtdKTtcblxuICAgICAgICAgICAgdGhpcy5hZGRBbGxQcm9kdWN0c1RvQ2FydCh1c2VyQ2FydC5vcmRlcmVkSXRlbXMpO1xuICAgICAgICAgICAgLy8gdGhpcy5yZXN0U2VydmljZS5hZGRJdGVtVG9EQih1c2VyQ2FydCkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAgICAgLy8gICBpZihyZXM/LmRhdGE/LmNhcnRJZCAmJiAhbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2NhcnRJZCcpKVxuICAgICAgICAgICAgLy8gICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdjYXJ0SWQnLCByZXMuZGF0YS5jYXJ0SWQpO1xuICAgICAgICAgICAgLy8gfSlcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG5cbiAgICAgICAgY29uc3QgdXNlcldpc2hsaXN0OiBDYXJ0ID0gY2FydFJlc3BvbnNlPy5bMV0uZGF0YSBhcyBDYXJ0O1xuICAgICAgICBpZiAodXNlcldpc2hsaXN0LmNhcnRJZClcbiAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShcIndpc2hsaXN0SWRcIiwgdXNlcldpc2hsaXN0LmNhcnRJZCk7XG4gICAgICAgIHRoaXMuZ2V0VXNlcldoaXNobGlzdCgpLnRoZW4oKHVzZXJXaXNobGlzdFJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgdXNlcldpc2hsaXN0UmVzcG9uc2Uub25zdWNjZXNzID0gKHVzZXJXaXNobGlzdEluZGV4REI6IGFueSkgPT4ge1xuICAgICAgICAgICAgdXNlcldpc2hsaXN0Lm9yZGVyZWRJdGVtcyA9IFsuLi4odXNlcldpc2hsaXN0SW5kZXhEQi50YXJnZXQucmVzdWx0ID8/IFtdKSwgLi4uKHVzZXJXaXNobGlzdC5vcmRlcmVkSXRlbXMgPz8gW10pXTtcbiAgICAgICAgICAgIHRoaXMuYWRkQWxsUHJvZHVjdFRvV2lzaGxpc3QodXNlcldpc2hsaXN0Lm9yZGVyZWRJdGVtcyk7XG4gICAgICAgICAgICB0aGlzLnJlc3RTZXJ2aWNlLmFkZEl0ZW1Ub0RCKHVzZXJXaXNobGlzdCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuXG4gICAgICAgIHRoaXMuZXZlbnRTZXJ2aWNlLnNob3dMb2FkaW5nU2NyZWVuLmVtaXQoZmFsc2UpO1xuICAgICAgfSlcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gdGhpcy5zdG9yZURhdGFUb0pTT04oKTtcbiAgICB9XG4gIH1cblxuICBtZXJnZUFsbEl0ZW1zKHVuU3luY2VkSXRlbTogYW55W10sIHN5bmNlZEl0ZW06IGFueVtdKSB7XG4gICAgZm9yIChsZXQgcHJvZHVjdCBvZiBzeW5jZWRJdGVtKSB7XG4gICAgICBsZXQgaXRlbUZvdW5kID0gZmFsc2U7XG4gICAgICBmb3IgKGxldCBjYXJ0SXRlbSBvZiB1blN5bmNlZEl0ZW0pIHtcbiAgICAgICAgaWYgKGNhcnRJdGVtLnZhcmllbnRJZCA9PT0gcHJvZHVjdC52YXJpZW50SWQpIHtcbiAgICAgICAgICBpdGVtRm91bmQgPSB0cnVlO1xuICAgICAgICAgIC8vIGNhcnRJdGVtLnF1YW50aXR5ID0gcHJvZHVjdC5xdWFudGl0eTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKCFpdGVtRm91bmQpIHtcbiAgICAgICAgdW5TeW5jZWRJdGVtLnB1c2gocHJvZHVjdCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB1blN5bmNlZEl0ZW07XG4gIH1cblxuICAvLyBDQVJUIFNFUlZJQ0VcbiAgYXN5bmMgZ2V0VXNlckNhcnQoKTogUHJvbWlzZTxJREJSZXF1ZXN0PE9yZGVyZWRJdGVtc1tdPj4ge1xuICAgIGF3YWl0IHRoaXMuZGJSZWFkeTtcblxuICAgIGNvbnN0IHRyYW5zYWN0aW9uID0gdGhpcy5kYXRhYmFzZT8udHJhbnNhY3Rpb24odGhpcy5jYXJ0Q29sbGVjdGlvbk5hbWUgPz8gXCJVU0VSX0NBUlRcIiwgXCJyZWFkd3JpdGVcIik7XG4gICAgcmV0dXJuIHRyYW5zYWN0aW9uLm9iamVjdFN0b3JlKHRoaXMuY2FydENvbGxlY3Rpb25OYW1lKS5nZXRBbGwoKTtcbiAgfVxuXG4gIGFkZFByb2R1Y3RUb0NhcnQocHJvZHVjdDogT3JkZXJlZEl0ZW1zKSB7XG4gICAgY29uc3QgdHJhbnNhY3Rpb24gPSB0aGlzLmRhdGFiYXNlPy50cmFuc2FjdGlvbih0aGlzLmNhcnRDb2xsZWN0aW9uTmFtZSA/PyBcIlVTRVJfQ0FSVFwiLCBcInJlYWR3cml0ZVwiKTtcbiAgICBjb25zdCByZXF1ZXN0ID0gdHJhbnNhY3Rpb24ub2JqZWN0U3RvcmUodGhpcy5jYXJ0Q29sbGVjdGlvbk5hbWUpLnB1dChwcm9kdWN0KTtcbiAgICB0cmFuc2FjdGlvbi5vbmNvbXBsZXRlID0gKCkgPT4ge1xuICAgICAgdGhpcy5jYWxjdWxhdGVDYXJ0VG90YWxzKCk7XG4gICAgfTtcbiAgICByZXR1cm4gcmVxdWVzdDtcbiAgfVxuXG4gIGFkZEFsbFByb2R1Y3RUb1dpc2hsaXN0KHByb2R1Y3RzOiBPcmRlcmVkSXRlbXNbXSk6IElEQlRyYW5zYWN0aW9uIHtcbiAgICBjb25zdCB0cmFuc2FjdGlvbiA9IHRoaXMuZGF0YWJhc2U/LnRyYW5zYWN0aW9uKHRoaXMuZmF2b3VyaXRlQ29sbGVjdGlvbk5hbWUgPz8gXCJVU0VSX0ZBVk9VUklURVwiLCBcInJlYWR3cml0ZVwiKTtcbiAgICBwcm9kdWN0cy5mb3JFYWNoKChwcm9kdWN0KSA9PiB7XG4gICAgICB0cmFuc2FjdGlvbi5vYmplY3RTdG9yZSh0aGlzLmZhdm91cml0ZUNvbGxlY3Rpb25OYW1lKS5wdXQocHJvZHVjdCk7XG4gICAgfSlcbiAgICB0cmFuc2FjdGlvbi5vbmNvbXBsZXRlID0gKCkgPT4ge1xuICAgICAgdGhpcy5jYWxjdWxhdGVXaXNobGlzdFRvdGFscygpO1xuICAgIH07XG4gICAgcmV0dXJuIHRyYW5zYWN0aW9uO1xuICB9XG4gIGFkZEFsbFByb2R1Y3RzVG9DYXJ0KHByb2R1Y3RzOiBPcmRlcmVkSXRlbXNbXSk6IElEQlRyYW5zYWN0aW9uIHtcbiAgICBjb25zdCB0cmFuc2FjdGlvbiA9IHRoaXMuZGF0YWJhc2U/LnRyYW5zYWN0aW9uKHRoaXMuY2FydENvbGxlY3Rpb25OYW1lID8/IFwiVVNFUl9DQVJUXCIsIFwicmVhZHdyaXRlXCIpO1xuICAgIHByb2R1Y3RzLmZvckVhY2goKHByb2R1Y3QpID0+IHtcbiAgICAgIHRyYW5zYWN0aW9uLm9iamVjdFN0b3JlKHRoaXMuY2FydENvbGxlY3Rpb25OYW1lKS5wdXQocHJvZHVjdCk7XG4gICAgfSlcbiAgICB0cmFuc2FjdGlvbi5vbmNvbXBsZXRlID0gKCkgPT4ge1xuICAgICAgdGhpcy5jYWxjdWxhdGVDYXJ0VG90YWxzKCk7XG4gICAgfTtcbiAgICByZXR1cm4gdHJhbnNhY3Rpb247XG4gIH1cbiAgcmVtb3ZlUHJvZHVjdEZyb21DYXJ0KHByb2R1Y3RJZDogc3RyaW5nKSB7XG4gICAgY29uc3QgdHJhbnNhY3Rpb24gPSB0aGlzLmRhdGFiYXNlPy50cmFuc2FjdGlvbih0aGlzLmNhcnRDb2xsZWN0aW9uTmFtZSA/PyBcIlVTRVJfQ0FSVFwiLCBcInJlYWR3cml0ZVwiKTtcbiAgICBjb25zdCByZXF1ZXN0ID0gdHJhbnNhY3Rpb24ub2JqZWN0U3RvcmUodGhpcy5jYXJ0Q29sbGVjdGlvbk5hbWUpLmRlbGV0ZShwcm9kdWN0SWQpO1xuICAgIHRyYW5zYWN0aW9uLm9uY29tcGxldGUgPSAoKSA9PiB7XG4gICAgICB0aGlzLmNhbGN1bGF0ZUNhcnRUb3RhbHMoKTtcbiAgICB9O1xuICAgIHJldHVybiByZXF1ZXN0O1xuICB9XG4gIGFzeW5jIGdldFByb2R1Y3RGcm9tQ2FydChwcm9kdWN0SWQ6IHN0cmluZykge1xuICAgIGNvbnN0IHRyYW5zYWN0aW9uID0gdGhpcy5kYXRhYmFzZT8udHJhbnNhY3Rpb24odGhpcy5jYXJ0Q29sbGVjdGlvbk5hbWUgPz8gXCJVU0VSX0NBUlRcIiwgXCJyZWFkd3JpdGVcIik7XG4gICAgcmV0dXJuIGF3YWl0IHRyYW5zYWN0aW9uLm9iamVjdFN0b3JlKHRoaXMuY2FydENvbGxlY3Rpb25OYW1lKS5nZXQocHJvZHVjdElkKTtcbiAgfVxuXG4gIC8vIFdJU0hMSVNUIFNFUlZJQ0VcbiAgYXN5bmMgZ2V0VXNlcldoaXNobGlzdCgpOiBQcm9taXNlPElEQlJlcXVlc3Q8T3JkZXJlZEl0ZW1zW10+PiB7XG5cbiAgICBjb25zdCB0cmFuc2FjdGlvbiA9IHRoaXMuZGF0YWJhc2UudHJhbnNhY3Rpb24odGhpcy5mYXZvdXJpdGVDb2xsZWN0aW9uTmFtZSwgXCJyZWFkd3JpdGVcIik7XG4gICAgcmV0dXJuIGF3YWl0IHRyYW5zYWN0aW9uLm9iamVjdFN0b3JlKHRoaXMuZmF2b3VyaXRlQ29sbGVjdGlvbk5hbWUpLmdldEFsbCgpO1xuICB9XG5cbiAgYXN5bmMgZ2V0VHJpYWxDYXJ0KCk6IFByb21pc2U8SURCUmVxdWVzdDxPcmRlcmVkSXRlbXNbXT4+IHtcblxuICAgIGNvbnN0IHRyYW5zYWN0aW9uID0gdGhpcy5kYXRhYmFzZS50cmFuc2FjdGlvbih0aGlzLnRyaWFsQ2FydENvbGxlY3Rpb25OYW1lLCBcInJlYWR3cml0ZVwiKTtcbiAgICByZXR1cm4gYXdhaXQgdHJhbnNhY3Rpb24ub2JqZWN0U3RvcmUodGhpcy50cmlhbENhcnRDb2xsZWN0aW9uTmFtZSkuZ2V0QWxsKCk7XG4gIH1cblxuICBhZGRQcm9kdWN0VG9XaXNobGlzdChwcm9kdWN0OiBPcmRlcmVkSXRlbXMpIHtcbiAgICBjb25zdCB0cmFuc2FjdGlvbiA9IHRoaXMuZGF0YWJhc2UudHJhbnNhY3Rpb24odGhpcy5mYXZvdXJpdGVDb2xsZWN0aW9uTmFtZSwgXCJyZWFkd3JpdGVcIik7XG4gICAgY29uc3QgcmVxdWVzdCA9IHRyYW5zYWN0aW9uLm9iamVjdFN0b3JlKHRoaXMuZmF2b3VyaXRlQ29sbGVjdGlvbk5hbWUpLnB1dChwcm9kdWN0KTtcbiAgICB0cmFuc2FjdGlvbi5vbmNvbXBsZXRlID0gKCkgPT4ge1xuICAgICAgdGhpcy5jYWxjdWxhdGVXaXNobGlzdFRvdGFscygpO1xuICAgIH07XG4gICAgcmV0dXJuIHJlcXVlc3Q7XG4gIH1cbiAgYWRkUHJvZHVjdFRvVHJpYWwocHJvZHVjdDogT3JkZXJlZEl0ZW1zKSB7XG4gICAgY29uc3QgdHJhbnNhY3Rpb24gPSB0aGlzLmRhdGFiYXNlLnRyYW5zYWN0aW9uKHRoaXMudHJpYWxDYXJ0Q29sbGVjdGlvbk5hbWUsIFwicmVhZHdyaXRlXCIpO1xuICAgIHJldHVybiB0cmFuc2FjdGlvbi5vYmplY3RTdG9yZSh0aGlzLnRyaWFsQ2FydENvbGxlY3Rpb25OYW1lKS5wdXQocHJvZHVjdCk7XG4gIH1cbiAgcmVtb3ZlUHJvZHVjdEZyb21XaXNobGlzdChwcm9kdWN0SWQ6IHN0cmluZykge1xuICAgIGNvbnN0IHRyYW5zYWN0aW9uID0gdGhpcy5kYXRhYmFzZS50cmFuc2FjdGlvbih0aGlzLmZhdm91cml0ZUNvbGxlY3Rpb25OYW1lLCBcInJlYWR3cml0ZVwiKTtcbiAgICBjb25zdCByZXF1ZXN0ID0gdHJhbnNhY3Rpb24ub2JqZWN0U3RvcmUodGhpcy5mYXZvdXJpdGVDb2xsZWN0aW9uTmFtZSkuZGVsZXRlKHByb2R1Y3RJZCk7XG4gICAgdHJhbnNhY3Rpb24ub25jb21wbGV0ZSA9ICgpID0+IHtcbiAgICAgIHRoaXMuY2FsY3VsYXRlV2lzaGxpc3RUb3RhbHMoKTtcbiAgICB9O1xuICAgIHJldHVybiByZXF1ZXN0O1xuICB9XG5cbiAgY2xlYXJVc2VyQ2FydCgpIHtcbiAgICBjb25zdCB0cmFuc2FjdGlvbiA9IHRoaXMuZGF0YWJhc2U/LnRyYW5zYWN0aW9uKHRoaXMuY2FydENvbGxlY3Rpb25OYW1lID8/IFwiVVNFUl9DQVJUXCIsIFwicmVhZHdyaXRlXCIpO1xuICAgIGNvbnN0IHJlcXVlc3QgPSB0cmFuc2FjdGlvbi5vYmplY3RTdG9yZSh0aGlzLmNhcnRDb2xsZWN0aW9uTmFtZSkuY2xlYXIoKTtcbiAgICB0cmFuc2FjdGlvbi5vbmNvbXBsZXRlID0gKCkgPT4ge1xuICAgICAgdGhpcy5jYWxjdWxhdGVDYXJ0VG90YWxzKCk7XG4gICAgfTtcbiAgICByZXR1cm4gcmVxdWVzdDtcbiAgfVxuXG4gIGNsZWFyVHJpYWxDYXJ0KCkge1xuICAgIHRoaXMudG90YWxDYXJ0SXRlbXMgPSAwO1xuICAgIGNvbnN0IHRyYW5zYWN0aW9uID0gdGhpcy5kYXRhYmFzZT8udHJhbnNhY3Rpb24odGhpcy50cmlhbENhcnRDb2xsZWN0aW9uTmFtZSwgXCJyZWFkd3JpdGVcIik7XG4gICAgcmV0dXJuIHRyYW5zYWN0aW9uLm9iamVjdFN0b3JlKHRoaXMudHJpYWxDYXJ0Q29sbGVjdGlvbk5hbWUpLmNsZWFyKCk7XG4gIH1cblxuICByZW1vdmVQcm9kdWN0RnJvbVRyaWFsQ2FydChwcm9kdWN0SWQ6IHN0cmluZykge1xuICAgIGNvbnN0IHRyYW5zYWN0aW9uID0gdGhpcy5kYXRhYmFzZS50cmFuc2FjdGlvbih0aGlzLnRyaWFsQ2FydENvbGxlY3Rpb25OYW1lLCBcInJlYWR3cml0ZVwiKTtcbiAgICByZXR1cm4gdHJhbnNhY3Rpb24ub2JqZWN0U3RvcmUodGhpcy50cmlhbENhcnRDb2xsZWN0aW9uTmFtZSkuZGVsZXRlKHByb2R1Y3RJZCk7XG4gIH1cblxuICAvLyBCT09LSU5HIFBST0RVQ1QgQ0FSVFMgKEhvbWUgVmlzaXQgLyBWaWRlbyBDYWxsKSDigJQgbG9jYWwtb25seSwgc2VlIGZpZWxkIGNvbW1lbnRzIGFib3ZlLlxuICBwcml2YXRlIGJvb2tpbmdDYXJ0U3RvcmVOYW1lKG1vZGU6ICdIT01FX1ZJU0lUJyB8ICdWSURFT19DQUxMJyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIG1vZGUgPT09ICdIT01FX1ZJU0lUJyA/IHRoaXMuaG9tZVZpc2l0Q2FydENvbGxlY3Rpb25OYW1lIDogdGhpcy52aWRlb0NhbGxDYXJ0Q29sbGVjdGlvbk5hbWU7XG4gIH1cblxuICBhc3luYyBnZXRCb29raW5nQ2FydChtb2RlOiAnSE9NRV9WSVNJVCcgfCAnVklERU9fQ0FMTCcpOiBQcm9taXNlPElEQlJlcXVlc3Q8T3JkZXJlZEl0ZW1zW10+PiB7XG4gICAgYXdhaXQgdGhpcy5kYlJlYWR5O1xuICAgIGNvbnN0IHN0b3JlTmFtZSA9IHRoaXMuYm9va2luZ0NhcnRTdG9yZU5hbWUobW9kZSk7XG4gICAgY29uc3QgdHJhbnNhY3Rpb24gPSB0aGlzLmRhdGFiYXNlLnRyYW5zYWN0aW9uKHN0b3JlTmFtZSwgXCJyZWFkd3JpdGVcIik7XG4gICAgcmV0dXJuIHRyYW5zYWN0aW9uLm9iamVjdFN0b3JlKHN0b3JlTmFtZSkuZ2V0QWxsKCk7XG4gIH1cblxuICBhc3luYyBhZGRQcm9kdWN0VG9Cb29raW5nQ2FydChtb2RlOiAnSE9NRV9WSVNJVCcgfCAnVklERU9fQ0FMTCcsIHByb2R1Y3Q6IE9yZGVyZWRJdGVtcykge1xuICAgIGF3YWl0IHRoaXMuZGJSZWFkeTtcbiAgICBjb25zdCBzdG9yZU5hbWUgPSB0aGlzLmJvb2tpbmdDYXJ0U3RvcmVOYW1lKG1vZGUpO1xuICAgIGNvbnN0IHRyYW5zYWN0aW9uID0gdGhpcy5kYXRhYmFzZS50cmFuc2FjdGlvbihzdG9yZU5hbWUsIFwicmVhZHdyaXRlXCIpO1xuICAgIHRyYW5zYWN0aW9uLm9uY29tcGxldGUgPSAoKSA9PiB0aGlzLmNhbGN1bGF0ZUJvb2tpbmdDYXJ0VG90YWxzKCk7XG4gICAgcmV0dXJuIHRyYW5zYWN0aW9uLm9iamVjdFN0b3JlKHN0b3JlTmFtZSkucHV0KHByb2R1Y3QpO1xuICB9XG5cbiAgYXN5bmMgcmVtb3ZlUHJvZHVjdEZyb21Cb29raW5nQ2FydChtb2RlOiAnSE9NRV9WSVNJVCcgfCAnVklERU9fQ0FMTCcsIHByb2R1Y3RJZDogc3RyaW5nKSB7XG4gICAgYXdhaXQgdGhpcy5kYlJlYWR5O1xuICAgIGNvbnN0IHN0b3JlTmFtZSA9IHRoaXMuYm9va2luZ0NhcnRTdG9yZU5hbWUobW9kZSk7XG4gICAgY29uc3QgdHJhbnNhY3Rpb24gPSB0aGlzLmRhdGFiYXNlLnRyYW5zYWN0aW9uKHN0b3JlTmFtZSwgXCJyZWFkd3JpdGVcIik7XG4gICAgdHJhbnNhY3Rpb24ub25jb21wbGV0ZSA9ICgpID0+IHRoaXMuY2FsY3VsYXRlQm9va2luZ0NhcnRUb3RhbHMoKTtcbiAgICByZXR1cm4gdHJhbnNhY3Rpb24ub2JqZWN0U3RvcmUoc3RvcmVOYW1lKS5kZWxldGUocHJvZHVjdElkKTtcbiAgfVxuXG4gIGFzeW5jIGNsZWFyQm9va2luZ0NhcnQobW9kZTogJ0hPTUVfVklTSVQnIHwgJ1ZJREVPX0NBTEwnKSB7XG4gICAgYXdhaXQgdGhpcy5kYlJlYWR5O1xuICAgIGNvbnN0IHN0b3JlTmFtZSA9IHRoaXMuYm9va2luZ0NhcnRTdG9yZU5hbWUobW9kZSk7XG4gICAgY29uc3QgdHJhbnNhY3Rpb24gPSB0aGlzLmRhdGFiYXNlLnRyYW5zYWN0aW9uKHN0b3JlTmFtZSwgXCJyZWFkd3JpdGVcIik7XG4gICAgdHJhbnNhY3Rpb24ub25jb21wbGV0ZSA9ICgpID0+IHRoaXMuY2FsY3VsYXRlQm9va2luZ0NhcnRUb3RhbHMoKTtcbiAgICByZXR1cm4gdHJhbnNhY3Rpb24ub2JqZWN0U3RvcmUoc3RvcmVOYW1lKS5jbGVhcigpO1xuICB9XG5cbiAgLy8gVVNFUiBTRVJWSUNFXG4gIHNldFVzZXIodXNlcjogVXNlcik6IFVzZXIge1xuICAgIHRoaXMuY29va2llU2VydmljZS5zZXQoXCJ1c2VyXCIsIEpTT04uc3RyaW5naWZ5KHVzZXIgPz8gXCJ7fVwiKSwgNyk7XG4gICAgLy8gbG9jYWxTdG9yYWdlLnNldEl0ZW0oXCJ1c2VyXCIsIEpTT04uc3RyaW5naWZ5KHVzZXIgPz8gXCJ7fVwiKSk7XG4gICAgdGhpcy5zdG9yYWdlLnNldEl0ZW0oXCJ1c2VyXCIsIEpTT04uc3RyaW5naWZ5KHVzZXIgPz8gXCJ7fVwiKSk7XG4gICAgcmV0dXJuIHVzZXI7XG4gIH1cbiAgZ2V0VXNlcigpOiBVc2VyIHwgbnVsbCB7XG4gICAgdHJ5IHtcbiAgICAgIGxldCB1c2VyU3RyID0gdGhpcy5jb29raWVTZXJ2aWNlLmdldChcInVzZXJcIik7XG4gICAgICBpZiAoIXVzZXJTdHIpIHtcbiAgICAgICAgdXNlclN0ciA9IHRoaXMuc3RvcmFnZS5nZXRJdGVtKFwidXNlclwiKSB8fCBcIlwiOyAvLyDinIUgZmFsbGJhY2tcbiAgICAgIH1cbiAgICAgIGlmICghdXNlclN0cikgcmV0dXJuIG51bGw7XG4gICAgICBjb25zdCB1c2VyOiBVc2VyID0gSlNPTi5wYXJzZSh1c2VyU3RyKTtcbiAgICAgIGlmICghdXNlcj8udXNlcklkKSByZXR1cm4gbnVsbDtcbiAgICAgIHRoaXMuc3RvcmFnZS5zZXRJdGVtKFwicGVySWRcIiwgdXNlci51c2VySWQpO1xuICAgICAgcmV0dXJuIHVzZXI7XG5cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU3RhYmxlIHBlci1icm93c2VyIGlkLCBwZXJzaXN0ZWQgcmVnYXJkbGVzcyBvZiBsb2dpbiBzdGF0ZSwgc28gYmVoYXZpb3IgY2FuIGJlIHRyYWNrZWRcbiAgICogYmVmb3JlIGEgdmlzaXRvciBsb2dzIGluLiBNaXJyb3JzIHNldFVzZXIoKSdzIGR1YWwgY29va2llK3N0b3JhZ2Ugd3JpdGUgc28gaXQgc3Vydml2ZXNcbiAgICogdGhlIHNhbWUgd2F5LiBNZXJnZWQgb250byB0aGUgcmVhbCB1c2VySWQgc2VydmVyLXNpZGUgb25jZSB0aGV5IGxvZyBpbiAoQW5hbHl0aWNzU2VydmljZS5tZXJnZUFub255bW91c1VzZXIpLlxuICAgKi9cbiAgZ2V0QW5vbnltb3VzSWQoKTogc3RyaW5nIHtcbiAgICBsZXQgYW5vbklkID0gdGhpcy5jb29raWVTZXJ2aWNlLmdldChcImFub25JZFwiKSB8fCB0aGlzLnN0b3JhZ2UuZ2V0SXRlbShcImFub25JZFwiKTtcbiAgICBpZiAoIWFub25JZCkge1xuICAgICAgYW5vbklkID0gY3J5cHRvLnJhbmRvbVVVSUQoKTtcbiAgICAgIHRoaXMuY29va2llU2VydmljZS5zZXQoXCJhbm9uSWRcIiwgYW5vbklkLCAzNjUpO1xuICAgICAgdGhpcy5zdG9yYWdlLnNldEl0ZW0oXCJhbm9uSWRcIiwgYW5vbklkKTtcbiAgICB9XG4gICAgcmV0dXJuIGFub25JZDtcbiAgfVxuXG59XG4iXX0=
@@ -7780,15 +7780,12 @@ class StorageServiceService {
7780
7780
  this.dbReady = new Promise((resolve, reject) => {
7781
7781
  if (isPlatformBrowser(this.platformId) && window.indexedDB) {
7782
7782
  const request = window.indexedDB.open(this.databaseName, this.databaseVersion);
7783
- this.eventService.showLoadingScreen.emit(true);
7784
7783
  request.onerror = () => {
7785
7784
  console.error('[IndexedDB] Failed to open database');
7786
- this.eventService.showLoadingScreen.emit(false);
7787
7785
  resolve();
7788
7786
  };
7789
7787
  request.onblocked = () => {
7790
7788
  console.warn('[IndexedDB] Database upgrade blocked by open connection');
7791
- this.eventService.showLoadingScreen.emit(false);
7792
7789
  resolve();
7793
7790
  };
7794
7791
  request.onsuccess = async (event) => {
@@ -7796,7 +7793,6 @@ class StorageServiceService {
7796
7793
  this.database.onversionchange = () => {
7797
7794
  this.database.close();
7798
7795
  };
7799
- this.eventService.showLoadingScreen.emit(false);
7800
7796
  this.calculateCartTotals();
7801
7797
  this.calculateWishlistTotals();
7802
7798
  this.calculateBookingCartTotals();