@vcd/sdk 15.0.1 → 15.0.2

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.
@@ -138,13 +138,13 @@ export class VcdApiClient {
138
138
  else {
139
139
  negotiatedVersion = this.http.get(`${this._baseUrl}/api/versions`).pipe(map(versions => this.negotiateVersion(versions)), tap(version => this.setVersion(version)));
140
140
  }
141
- this._negotiateVersion = negotiatedVersion.pipe(share({ connector: () => new ReplaySubject(1) }));
141
+ this._negotiateVersion = negotiatedVersion.pipe(share({ connector: () => new ReplaySubject(1), resetOnError: false, resetOnComplete: false, resetOnRefCountZero: false }));
142
142
  const tokenHolder = this.injector.get(AuthTokenHolderService, { token: '' });
143
143
  const token = tokenHolder.jwt ? `Bearer ${tokenHolder.jwt}` : tokenHolder.token;
144
144
  this._getSession = this.setAuthentication(token)
145
- .pipe(share({ connector: () => new ReplaySubject(1) }));
145
+ .pipe(share({ connector: () => new ReplaySubject(1), resetOnError: false, resetOnComplete: false, resetOnRefCountZero: false }));
146
146
  this._getCloudApiSession = this.setCloudApiAuthentication(token)
147
- .pipe(share({ connector: () => new ReplaySubject(1) }));
147
+ .pipe(share({ connector: () => new ReplaySubject(1), resetOnError: false, resetOnComplete: false, resetOnRefCountZero: false }));
148
148
  // This is not an explicit cloud api login
149
149
  this._isCloudApiLogin = false;
150
150
  }
@@ -563,7 +563,7 @@ export class VcdApiClient {
563
563
  switchMap((link) => link ? this.http.get(link.href) : of(null)),
564
564
  // Get the array with all locations (what if there are many pages)
565
565
  map((accessibleLocations) => accessibleLocations && accessibleLocations.values))
566
- .pipe(share({ connector: () => new ReplaySubject(1) }));
566
+ .pipe(share({ connector: () => new ReplaySubject(1), resetOnError: false, resetOnComplete: false, resetOnRefCountZero: false }));
567
567
  }
568
568
  return this._cloudApiAccessibleLocations;
569
569
  }),
@@ -599,4 +599,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.0", ngImpor
599
599
  }], ctorParameters: function () { return [{ type: i1.VcdHttpClient }, { type: i0.Injector }, { type: i2.VcdSdkConfig, decorators: [{
600
600
  type: Optional
601
601
  }] }]; } });
602
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmNkLmFwaS5jbGllbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92Y2Qvc2RrL3NyYy9jbGllbnQvY2xpZW50L3ZjZC5hcGkuY2xpZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQVksUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9ELE9BQU8sRUFBRSxXQUFXLEVBQWdCLE1BQU0sc0JBQXNCLENBQUM7QUFDakUsT0FBTyxFQUFjLGVBQWUsRUFBRSxFQUFFLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDekYsT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLGNBQWMsRUFBRSxLQUFLLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5RyxPQUFPLEVBS0gsUUFBUSxFQUNYLE1BQU0sMkNBQTJDLENBQUM7QUFJbkQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsY0FBYyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFekcsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUMzQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7QUFHeEMsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsZ0JBQWdCLENBQUM7QUFHbEQsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLE1BQU0sQ0FBQztBQUVyQywrQkFBK0I7QUFFL0I7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSx1QkFBdUIsQ0FBQyxNQUFjO0lBQ2xELE1BQU0sT0FBTyxHQUFlLEVBQUUsQ0FBQztJQUUvQixJQUFJLENBQUMsTUFBTSxFQUFFO1FBQ1QsT0FBTyxPQUFPLENBQUM7S0FDbEI7SUFFRCxNQUFNLG1CQUFtQixHQUFvQztRQUN6RCxJQUFJLEVBQUUsTUFBTTtRQUNaLEtBQUssRUFBRSxNQUFNO1FBQ2IsS0FBSyxFQUFFLElBQUk7UUFDWCxHQUFHLEVBQUUsS0FBSztLQUNiLENBQUM7SUFDRixJQUFJLFVBQVUsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUVwQixTQUFTLElBQUksQ0FBQyxLQUFhO1FBQ3ZCLE9BQU8sTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsVUFBVSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFFRCxTQUFTLElBQUksQ0FBQyxLQUFhO1FBQ3ZCLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM5QixJQUFJLFNBQVMsS0FBSyxDQUFDLENBQUMsRUFBRTtZQUNsQixNQUFNLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBQyxDQUFDLENBQUMsQ0FBQztTQUNoRTtRQUNELFVBQVUsR0FBRyxTQUFTLENBQUM7UUFDdkIsT0FBTyxVQUFVLENBQUM7SUFDdEIsQ0FBQztJQUVELE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFO1FBQ25CLElBQUk7WUFDQSxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDNUIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzFCLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsU0FBUyxHQUFHLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztZQUN0RCxNQUFNLE1BQU0sR0FBYSxFQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxlQUFlLEVBQUUsRUFBRSxFQUFDLENBQUM7WUFDdEYsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3RCLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUMxQixPQUFPLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUMsSUFBSSxTQUFTLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLElBQUksS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQzVGLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDNUIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUMxQixNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLFNBQVMsR0FBRyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQzNFLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDN0IsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUMzQixNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLFVBQVUsR0FBRyxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUM7Z0JBQ3pELE1BQU0sVUFBVSxHQUFHLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUM3QyxJQUFJLFVBQVUsRUFBRTtvQkFDWixhQUFhO29CQUNiLE1BQU0sQ0FBQyxVQUFVLENBQUMsR0FBRyxrQkFBa0IsQ0FBQyxLQUFLLENBQVEsQ0FBQztpQkFDekQ7Z0JBQ0QsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDbEIsU0FBUyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQzthQUN6QjtZQUNELE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDeEI7UUFBQyxPQUFPLEtBQUssRUFBRSxFQUFHLDhCQUE4QjtZQUM3QyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ3RCO0tBQ0o7SUFFRCxPQUFPLE9BQU8sQ0FBQztBQUNuQixDQUFDO0FBRUQsTUFBTSxDQUFOLElBQVksV0FJWDtBQUpELFdBQVksV0FBVztJQUNuQiwwQkFBVyxDQUFBO0lBQ1gsZ0NBQWlCLENBQUE7SUFDakIsNEJBQWEsQ0FBQTtBQUNqQixDQUFDLEVBSlcsV0FBVyxLQUFYLFdBQVcsUUFJdEI7QUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1CRztBQUVILE1BQU0sT0FBTyxZQUFZO0lBQ3JCLElBQUksT0FBTyxDQUFDLFFBQWdCO1FBQ3hCLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO0lBQzdCLENBQUM7SUFFRCxJQUFJLE9BQU87UUFDUCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMseUJBQXlCLENBQUMsT0FBTyxDQUFDO0lBQ3ZELENBQUM7SUE4Q0QsWUFDZ0IsSUFBbUIsRUFDbkIsUUFBa0IsRUFDTixNQUFxQjtRQUZqQyxTQUFJLEdBQUosSUFBSSxDQUFlO1FBQ25CLGFBQVEsR0FBUixRQUFRLENBQVU7UUFDTixXQUFNLEdBQU4sTUFBTSxDQUFlO1FBNUNqRDs7V0FFRztRQUNLLGFBQVEsR0FBaUMsSUFBSSxlQUFlLENBQWMsSUFBSSxDQUFDLENBQUM7UUFDaEYsdUJBQWtCLEdBQTRCLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxFQUFFO2FBQzdFLElBQUksQ0FDRCxTQUFTLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUNqQyxDQUFDO1FBR047O1dBRUc7UUFDSyxxQkFBZ0IsR0FBNkIsSUFBSSxlQUFlLENBQVUsSUFBSSxDQUFDLENBQUM7UUFDaEYsK0JBQTBCLEdBQXdCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLEVBQUU7YUFDekYsSUFBSSxDQUNELFNBQVMsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQ2pDLENBQUM7UUFXRSwwQkFBcUIsR0FBZ0MsSUFBSSxlQUFlLENBQWEsRUFBRSxDQUFDLENBQUM7UUFPakc7OztXQUdHO1FBQ0sscUJBQWdCLEdBQUcsS0FBSyxDQUFDO1FBTzdCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUM7UUFFaEQsSUFBSSxpQkFBcUMsQ0FBQztRQUMxQyxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsVUFBVSxFQUFFO1lBQ3pCLGlCQUFpQixHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLElBQUksQ0FDL0MsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7Z0JBQ1osSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDekIsT0FBTyxPQUFPLENBQUM7WUFDbkIsQ0FBQyxDQUFDLENBQ0wsQ0FBQztTQUNMO2FBQU07WUFDSCxpQkFBaUIsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBd0IsR0FBRyxJQUFJLENBQUMsUUFBUSxlQUFlLENBQUMsQ0FBQyxJQUFJLENBQzFGLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUNoRCxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQzNDLENBQUM7U0FDTDtRQUNELElBQUksQ0FBQyxpQkFBaUIsR0FBRyxpQkFBaUIsQ0FBQyxJQUFJLENBQzNDLEtBQUssQ0FBQyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLGFBQWEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQ25ELENBQUM7UUFFRixNQUFNLFdBQVcsR0FBMkIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsc0JBQXNCLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNyRyxNQUFNLEtBQUssR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxVQUFVLFdBQVcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQztRQUNoRixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUM7YUFDM0MsSUFBSSxDQUNELEtBQUssQ0FBQyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLGFBQWEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQ25ELENBQUM7UUFFTixJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLHlCQUF5QixDQUFDLEtBQUssQ0FBQzthQUMzRCxJQUFJLENBQ0QsS0FBSyxDQUFDLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksYUFBYSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FDbkQsQ0FBQztRQUNOLDBDQUEwQztRQUMxQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDO0lBQ2xDLENBQUM7SUFFTyxnQkFBZ0IsQ0FBQyxjQUFxQztRQUMxRCxNQUFNLGlCQUFpQixHQUFhLGNBQWMsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRXZHLDhFQUE4RTtRQUM5RSxPQUFPLGlCQUFpQixDQUFDLGlCQUFpQixDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMzRCxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ssc0JBQXNCO1FBQzFCLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUM7YUFDNUQsSUFBSTtRQUNELGlGQUFpRjtRQUNqRixTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsRUFDcEUsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxtQkFBbUI7WUFDcEMsMkVBQTJFO1lBQzNFLHFFQUFxRTtZQUNyRSxtRUFBbUU7YUFDbEUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FDckMsRUFDRCxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQ2xCLENBQUM7SUFDTixDQUFDO0lBRUw7Ozs7T0FJRztJQUNLLGtDQUFrQztRQUN0QyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsSUFBSSxDQUNsRSxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQzVDLENBQUM7SUFDTixDQUFDO0lBRU0sVUFBVSxDQUFDLFFBQWdCO1FBQzlCLElBQUksQ0FBQyxJQUFJLENBQUMseUJBQXlCLENBQUMsT0FBTyxHQUFHLFFBQVEsQ0FBQztRQUN2RCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRUQ7Ozs7Ozs7Ozs7Ozs7T0FhRztJQUNJLEtBQUssQ0FBQyxRQUE2QixJQUFJO1FBQzFDLElBQUksQ0FBQyxJQUFJLENBQUMseUJBQXlCLENBQUMsS0FBSyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDckUsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVEOzs7Ozs7Ozs7OztPQVdHO0lBQ0ksaUJBQWlCLENBQUMsY0FBc0I7UUFDM0MsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7WUFDdkIsT0FBTyxVQUFVLENBQUMsMERBQTBELENBQUMsQ0FBQztTQUNqRjtRQUVELElBQUksQ0FBQyxJQUFJLENBQUMseUJBQXlCLENBQUMsY0FBYyxHQUFHLGNBQWMsQ0FBQztRQUNwRSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFjLEdBQUcsSUFBSSxDQUFDLFFBQVEsY0FBYyxDQUFDLENBQUMsSUFBSSxDQUM5RCxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDVix1REFBdUQ7WUFDdkQsSUFBSSxPQUFPLENBQUMsR0FBRyxLQUFLLFFBQVEsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsS0FBSyxRQUFRLEVBQUU7Z0JBQzNFLCtDQUErQztnQkFDL0MsSUFBSTtvQkFDQSxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxFQUFDLENBQUMsQ0FBQztpQkFDdkQ7Z0JBQUMsT0FBTyxDQUFDLEVBQUU7b0JBQ1IsT0FBTyxDQUFDLElBQUksQ0FBQyxrRUFBa0UsQ0FBQyxDQUFDO2lCQUNwRjthQUNKO1FBQ0wsQ0FBQyxDQUFDLEVBQ0YsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FDOUMsQ0FBQztJQUNWLENBQUM7SUFFRDs7Ozs7Ozs7OztPQVVHO0lBQ0kseUJBQXlCLENBQUMsY0FBc0I7UUFDbkQsSUFBSSxDQUFDLDhCQUE4QixFQUFFLENBQUM7UUFFdEMsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDO2FBQ1YsSUFBSTtRQUNELGtIQUFrSDtRQUNsSCxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxjQUFjLEdBQUcsY0FBYyxDQUFDLEVBQzlFLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBVSxHQUFHLElBQUksQ0FBQyxRQUFRLGtDQUFrQyxFQUFFLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FDdkg7YUFDQSxJQUFJLENBQ0QsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQ2xDLENBQUM7SUFDVixDQUFDO0lBRU0sYUFBYTtRQUNoQixJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFFNUMsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVEOzs7Ozs7Ozs7T0FTRztJQUNJLEtBQUssQ0FBQyxRQUFnQixFQUFFLE1BQWMsRUFBRSxRQUFnQjtRQUMzRCxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtZQUN2QixPQUFPLFVBQVUsQ0FBQywwREFBMEQsQ0FBQyxDQUFDO1NBQ2pGO1FBQ0QsTUFBTSxVQUFVLEdBQVcsSUFBSSxDQUFDLEdBQUcsUUFBUSxJQUFJLE1BQU0sSUFBSSxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBRXJFLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQ2pCLEdBQUcsSUFBSSxDQUFDLFFBQVEsZUFBZSxFQUMvQixJQUFJLEVBQ0o7WUFDSSxPQUFPLEVBQUUsVUFBVTtZQUNuQixPQUFPLEVBQUUsSUFBSSxXQUFXLENBQUMsRUFBRSxhQUFhLEVBQUUsU0FBUyxVQUFVLEVBQUUsRUFBQyxDQUFDO1NBQ3BFLENBQ0o7YUFDQSxJQUFJLENBQ0QsR0FBRyxDQUFDLENBQUMsUUFBMkIsRUFBRSxFQUFFO1FBQ2hDLDJDQUEyQztRQUMzQyxJQUFJLENBQUMsSUFBSSxDQUFDLHlCQUF5QixDQUFDLGNBQWMsR0FBRyxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLDRCQUE0QixDQUFDLElBQUksUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsOEJBQThCLENBQUMsRUFBRSxDQUN2SyxFQUNELEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFDOUIsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FDOUMsQ0FBQztJQUNOLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0ksYUFBYSxDQUFDLFFBQWdCLEVBQUUsTUFBYyxFQUFFLFFBQWdCO1FBQ25FLElBQUksQ0FBQyw4QkFBOEIsRUFBRSxDQUFDO1FBRXRDLE1BQU0sVUFBVSxHQUFXLElBQUksQ0FBQyxHQUFHLFFBQVEsSUFBSSxNQUFNLElBQUksUUFBUSxFQUFFLENBQUMsQ0FBQztRQUNyRSxJQUFJLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxRQUFRLDBCQUEwQixDQUFDO1FBQ3JELElBQUksTUFBTSxDQUFDLFdBQVcsRUFBRSxLQUFLLFFBQVEsRUFBRTtZQUNuQyxHQUFHLElBQUksV0FBVyxDQUFDO1NBQ3RCO1FBQ0QsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FDakIsR0FBRyxFQUNILElBQUksRUFDSjtZQUNJLE9BQU8sRUFBRSxVQUFVO1lBQ25CLE9BQU8sRUFBRSxJQUFJLFdBQVcsQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxFQUFFLFNBQVMsVUFBVSxFQUFFLEVBQUUsQ0FBQztTQUNwRixDQUNKLENBQUMsSUFBSSxDQUNGLEdBQUcsQ0FBQyxDQUFDLFFBQStCLEVBQUUsRUFBRTtZQUNwQywyQ0FBMkM7WUFDM0MsTUFBTSxLQUFLLEdBQUcsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyw0QkFBNEIsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLDhCQUE4QixDQUFDLEVBQUUsQ0FBQztZQUM5SCxJQUFJLENBQUMsSUFBSSxDQUFDLHlCQUF5QixDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUM7UUFDL0QsQ0FBQyxDQUFDLEVBQ0YsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQ2xDLENBQUM7SUFDTixDQUFDO0lBRUQ7OztPQUdHO0lBQ0ssOEJBQThCO1FBQ2xDLGlEQUFpRDtRQUNqRCxnR0FBZ0c7UUFDaEcsOEdBQThHO1FBQzlHLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7UUFDN0IsaURBQWlEO1FBQ2pELG1JQUFtSTtRQUNuSSxpRUFBaUU7UUFDakUsSUFBSSxDQUFDLG1CQUFtQixHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ssd0JBQXdCO1FBQzVCLE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQzFCLEdBQUcsQ0FBQyxDQUFDLElBQTJCLEVBQUUsRUFBRTtZQUNoQyxvQkFBb0I7WUFDcEIsSUFBSTtnQkFDQSxJQUFJLENBQUMsdUJBQXVCLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQzNGO1lBQUMsT0FBTyxDQUFDLEVBQUU7Z0JBQ1IsT0FBTyxDQUFDLEdBQUcsQ0FBQywyQ0FBMkMsRUFBRSxDQUFDLENBQUMsQ0FBQzthQUMvRDtRQUNMLENBQUMsQ0FBQyxFQUNGLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFDdEIsR0FBRyxDQUFDLENBQUMsT0FBZ0IsRUFBRSxFQUFFO1lBQ3JCLHVCQUF1QjtZQUN2QixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2pCLHVEQUF1RDtZQUN2RCxJQUFJLE9BQU8sQ0FBQyxHQUFHLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssUUFBUSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxLQUFLLFFBQVEsRUFBRTtnQkFDL0YsK0NBQStDO2dCQUMvQyxJQUFJO29CQUNBLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2lCQUN6RDtnQkFBQyxPQUFPLENBQUMsRUFBRTtvQkFDUixPQUFPLENBQUMsSUFBSSxDQUFDLGtFQUFrRSxDQUFDLENBQUM7aUJBQ3BGO2FBQ0o7UUFDTCxDQUFDLENBQUMsRUFDRixHQUFHLENBQUMsQ0FBQyxPQUFnQixFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQzlELFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQ2IsSUFBSSxDQUFDLDZCQUE2QixFQUFFLENBQUM7WUFDckMsT0FBTyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDekIsQ0FBQyxDQUFDLENBQ0wsQ0FBQztJQUNOLENBQUM7SUFFTyw2QkFBNkI7UUFDakMsc0ZBQXNGO1FBQ3RGLElBQUksQ0FBQyxJQUFJLENBQUMseUJBQXlCLENBQUMsY0FBYyxHQUFHLEVBQUUsQ0FBQztRQUN4RCwyR0FBMkc7UUFDM0cseUVBQXlFO1FBQ3pFLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDcEMsa0JBQWtCO1FBQ2xCLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDcEMsb0JBQW9CO1FBQ3BCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVPLHVCQUF1QixDQUFDLEtBQWlCO1FBQzdDLElBQUksQ0FBQyw0QkFBNEIsR0FBRyxJQUFJLENBQUM7UUFDekMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUVNLEdBQUcsQ0FBSSxRQUFnQixFQUFHLE9BQW1DO1FBQ2hFLE9BQU8sSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUMsSUFBSSxDQUNyQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUMsR0FBRyxPQUFPLEVBQUMsQ0FBQyxDQUFDLENBQ25GLENBQUM7SUFDTixDQUFDO0lBRU0sSUFBSSxDQUFJLFFBQWdCLEVBQUUsWUFBNEIsRUFBRSxTQUE4QyxFQUFFLE9BQW1DO1FBQzlJLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUUxQyxJQUFJLFlBQVksRUFBRTtZQUNkLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxZQUFZLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQztTQUMvQztRQUVELElBQUksU0FBUyxFQUFFO1lBQ1gsSUFBSSxDQUFDLE9BQU8sRUFBRTtnQkFDVixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFJLEdBQUcsRUFBRSxFQUFFLE9BQU8sRUFBRSxJQUFJLFdBQVcsQ0FBQyxFQUFFLFVBQVUsRUFBRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQzthQUNuSDtpQkFBTSxJQUFJLE9BQU8sRUFBRSxPQUFPLEVBQUU7Z0JBQ3pCLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztnQkFDMUUsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBSSxHQUFHLEVBQUUsRUFBRSxHQUFHLE9BQU8sRUFBRSxDQUFDLENBQUM7YUFDaEQ7U0FDSjtRQUVELE9BQU8sSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUMsSUFBSSxDQUNyQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUksR0FBRyxFQUFFLEVBQUUsR0FBRyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQ3pELENBQUM7SUFDTixDQUFDO0lBRU0sVUFBVSxDQUFJLFFBQWdCLEVBQUUsSUFBTyxFQUFFLE9BQW1DO1FBQy9FLE9BQU8sSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUMsSUFBSSxDQUNyQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQzFCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsRUFDL0IsSUFBSSxFQUNKLEVBQUMsR0FBRyxPQUFPLEVBQUMsQ0FDZixDQUFDLENBQ0wsQ0FBQztJQUNOLENBQUM7SUFFTSxXQUFXLENBQUksUUFBZ0IsRUFBRSxJQUFPLEVBQUUsT0FBbUM7UUFDaEYsT0FBTyxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQyxJQUFJLENBQ3JDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FDMUIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxFQUMvQixJQUFJLEVBQ0osRUFBRSxHQUFHLE9BQU8sRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLENBQ3RDLENBQUMsRUFDRixTQUFTLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQ2xFLENBQUM7SUFDTixDQUFDO0lBRU0sZUFBZSxDQUFJLFFBQWdCLEVBQUUsSUFBTyxFQUFFLGNBQXNCLGlCQUFpQjtRQUN4RixPQUFPLElBQUksQ0FBQyxJQUFJO2FBQ1gsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLENBQUM7YUFDcEUsSUFBSSxDQUNELEdBQUcsQ0FBQyxDQUFDLEdBQWdDLEVBQUUsRUFBRTtZQUNyQyxNQUFNLFdBQVcsR0FBZSxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUM7Z0JBQzNELENBQUMsQ0FBQyx1QkFBdUIsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQztnQkFDMUQsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNULE1BQU0sS0FBSyxHQUFlLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNoRSxNQUFNLElBQUksR0FBRyxDQUFDLEdBQUcsV0FBVyxFQUFFLEdBQUcsS0FBSyxDQUFDO2lCQUNsQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssV0FBVyxDQUFDLENBQUM7WUFDeEMsSUFBSSxDQUFDLElBQUksRUFBRTtnQkFDUCxNQUFNLElBQUksS0FBSyxDQUFDLGlCQUFpQixRQUFRLGtDQUFrQyxDQUFDLENBQUM7YUFDaEY7WUFDRCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDckIsQ0FBQyxDQUFDLENBQ0wsQ0FBQztJQUNWLENBQUM7SUFFTSxhQUFhLENBQUksUUFBZ0IsRUFBRSxJQUFPLEVBQUUsY0FBc0IsaUJBQWlCO1FBQ3RGLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLFdBQVcsQ0FBQzthQUNuRCxJQUFJLENBQ0QsR0FBRyxDQUFDLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxJQUFJLGlCQUFpQixDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FDdEUsQ0FBQztJQUNWLENBQUM7SUFFTSxVQUFVLENBQUksUUFBZ0IsRUFBRSxJQUFPLEVBQUUsT0FBbUM7UUFDL0UsT0FBTyxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQyxJQUFJLENBQ3JDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FDekIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxFQUMvQixJQUFJLEVBQ0osRUFBRSxHQUFHLE9BQU8sRUFBRSxDQUNqQixDQUFDLENBQ0wsQ0FBQztJQUNOLENBQUM7SUFFTSxXQUFXLENBQUksUUFBZ0IsRUFBRSxJQUFPLEVBQUUsT0FBbUM7UUFFaEYsT0FBTyxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQyxJQUFJLENBQ3JDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FDekIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxFQUMvQixJQUFJLEVBQ0osRUFBRSxHQUFHLE9BQU8sRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLENBQ3RDLENBQUMsRUFDRixTQUFTLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQ2pFLENBQUM7SUFDTixDQUFDO0lBRU0sVUFBVSxDQUFDLFFBQWdCLEVBQUUsT0FBbUM7UUFDbkUsT0FBTyxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQyxJQUFJLENBQ3JDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxHQUFHLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FDM0YsQ0FBQztJQUNOLENBQUM7SUFFTSxXQUFXLENBQUMsUUFBZ0IsRUFBRSxPQUFtQztRQUNwRSxPQUFPLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDLElBQUksQ0FDckMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLEdBQUcsT0FBTyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDLEVBQ3ZHLFNBQVMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FDcEUsQ0FBQztJQUNOLENBQUM7SUFFTyxpQkFBaUIsQ0FBQyxRQUEyQixFQUFFLFFBQWdCO1FBQ25FLElBQUksUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLElBQUksUUFBUSxDQUFDLE1BQU0sS0FBSyxHQUFHLEVBQUU7WUFDN0QsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBVyxRQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO1NBQ3BFO2FBQU0sSUFBSSxRQUFRLENBQUMsSUFBSSxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxxQ0FBcUMsQ0FBQyxFQUFFO1lBQzlGLE1BQU0sSUFBSSxHQUFhLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxRQUFRLEVBQUUsRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDcEUsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDbkI7UUFFRCxPQUFPLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLEtBQUssQ0FBQyx3Q0FBd0MsUUFBUSxJQUFJLFFBQVEsQ0FBQyxHQUFHLDZFQUE2RSxDQUFDLENBQUMsQ0FBQztJQUN0TCxDQUFDO0lBS00sU0FBUyxDQUFnQyxjQUE0QztRQUN4RixNQUFNLGNBQWMsR0FBMkIsT0FBTyxjQUFjLEtBQUssUUFBUSxDQUFDLENBQUM7WUFDL0UsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQWEsR0FBRyxJQUFJLENBQUMsUUFBUSxlQUFlLGNBQWMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUM1RSxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBYSxHQUFHLElBQUksQ0FBQyxRQUFRLDBCQUEwQixjQUFjLENBQUMsSUFBSSxJQUFJLGNBQWMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRXBILE9BQU8sSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUMsSUFBSSxDQUNyQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsY0FBYyxDQUFDLEVBQy9CLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQ2xFLENBQUM7SUFDTixDQUFDO0lBRU0sVUFBVSxDQUFDLElBQWMsRUFBRSxPQUFtQztRQUNqRSxPQUFPLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDLElBQUksQ0FDckMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFXLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxHQUFHLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FDdEUsQ0FBQztJQUNOLENBQUM7SUFFTSxjQUFjLENBQUMsSUFBYztRQUNoQyxPQUFPLENBQUMsU0FBUyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsU0FBUyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNqRixDQUFDO0lBRU0sVUFBVSxDQUFDLElBQWUsRUFBRSxPQUFtQztRQUNsRSxNQUFNLElBQUksR0FBYSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDM0QsSUFBSSxDQUFDLElBQUksRUFBRTtZQUNQLE9BQU8sVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksS0FBSyxDQUFDLDBDQUEwQyxDQUFDLENBQUMsQ0FBQztTQUNsRjtRQUVELE9BQU8sSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUMsSUFBSSxDQUNyQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQVcsSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFLEdBQUcsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUN6RSxDQUFDO0lBQ04sQ0FBQztJQW1CTSxLQUFLLENBQUksT0FBc0IsRUFBRSxTQUFlLEVBQUUsT0FBbUM7UUFDeEYsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsYUFBYSxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDL0YsQ0FBQztJQW1CTSxTQUFTLENBQUksTUFBUyxFQUFFLFNBQWUsRUFBRSxPQUFtQztRQUMvRSxNQUFNLElBQUksR0FBYSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxXQUFXLEVBQUcsTUFBdUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6RixJQUFJLENBQUMsSUFBSSxFQUFFO1lBQ1AsT0FBTyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxLQUFLLENBQUMsMENBQTBDLENBQUMsQ0FBQyxDQUFDO1NBQ2xGO1FBRUQsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFFTSxZQUFZLENBQUksTUFBUztRQUM1QixPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxXQUFXLEVBQUcsTUFBdUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMvRSxDQUFDO0lBbUJNLFlBQVksQ0FBSSxNQUFTLEVBQUUsU0FBZSxFQUFFLE9BQW1DO1FBQ2xGLE1BQU0sSUFBSSxHQUFhLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLGNBQWMsRUFBRyxNQUF1QixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzVGLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDUCxPQUFPLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLEtBQUssQ0FBQyw2Q0FBNkMsQ0FBQyxDQUFDLENBQUM7U0FDckY7UUFFRCxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUVNLGVBQWUsQ0FBSSxNQUFTO1FBQy9CLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLGNBQWMsRUFBRyxNQUF1QixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2xGLENBQUM7SUFtQk0sUUFBUSxDQUFJLE1BQVMsRUFBRSxTQUFlLEVBQUUsT0FBbUM7UUFDOUUsTUFBTSxJQUFJLEdBQWEsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsVUFBVSxFQUFHLE1BQXVCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDeEYsSUFBSSxDQUFDLElBQUksRUFBRTtZQUNQLE9BQU8sVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksS0FBSyxDQUFDLHlDQUF5QyxDQUFDLENBQUMsQ0FBQztTQUNqRjtRQUVELE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBSSxJQUFJLENBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUMvRCxDQUFDO0lBRU0sV0FBVyxDQUFJLE1BQVM7UUFDM0IsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsVUFBVSxFQUFHLE1BQXVCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDOUUsQ0FBQztJQW1CTSxRQUFRLENBQUksTUFBUyxFQUFFLFNBQWUsRUFBRSxPQUFtQztRQUM5RSxNQUFNLElBQUksR0FBYSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUcsTUFBdUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN4RixJQUFJLENBQUMsSUFBSSxFQUFFO1lBQ1AsT0FBTyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxLQUFLLENBQUMseUNBQXlDLENBQUMsQ0FBQyxDQUFDO1NBQ2pGO1FBRUQsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFFTSxXQUFXLENBQUksTUFBUztRQUMzQixPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUcsTUFBdUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM5RSxDQUFDO0lBRU8sWUFBWSxDQUFJLElBQVksRUFBRSxTQUFlLEVBQUUsT0FBbUM7UUFDdEYsSUFBSSxTQUFTLEVBQUU7WUFDWCxJQUFJLENBQUMsT0FBTyxFQUFFO2dCQUNWLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUksSUFBSSxFQUFFLEVBQUUsT0FBTyxFQUFFLElBQUksV0FBVyxDQUFDLEVBQUUsVUFBVSxFQUFFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFBO2FBQ25IO2lCQUFNLElBQUksT0FBTyxFQUFFLE9BQU8sRUFBRTtnQkFDekIsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO2dCQUMxRSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFJLElBQUksRUFBRSxFQUFFLEdBQUcsT0FBTyxFQUFFLENBQUMsQ0FBQTthQUNoRDtTQUNKO1FBRUQsT0FBTyxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQyxJQUFJLENBQ3JDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBSSxJQUFJLEVBQUUsRUFBRSxHQUFHLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FDMUQsQ0FBQztJQUNOLENBQUM7SUFFSDs7Ozs7T0FLRztJQUNNLGdCQUFnQixDQUFDLElBQWUsRUFBRSxXQUFpQyxFQUFFLGFBQXNCO1FBQzlGLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLFdBQVcsRUFBRSxhQUFhLENBQUMsQ0FBQztJQUM3RCxDQUFDO0lBRU8sUUFBUSxDQUFDLElBQWUsRUFBRSxHQUFXLEVBQUUsSUFBWTtRQUN2RCxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRTtZQUNyQixPQUFPLFNBQVMsQ0FBQztTQUNwQjtRQUVELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUMzQixJQUFJLElBQUksRUFBRTtnQkFDTixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDO2FBQ3ZEO1lBRUQsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNsQyxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFTyxtQkFBbUIsQ0FBQyxTQUE2QztRQUNyRSxPQUFPLE9BQU8sU0FBUyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2hJLENBQUM7SUFFRDs7T0FFRztJQUNILElBQVcsT0FBTztRQUNkLE9BQU8sSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUMsSUFBSSxDQUNyQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQzNDLENBQUM7SUFDTixDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFXLGVBQWU7UUFDdEIsT0FBTyxJQUFJLENBQUMsa0NBQWtDLEVBQUUsQ0FBQyxJQUFJLENBQ2pELFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsMEJBQTBCLENBQUMsQ0FDbkQsQ0FBQztJQUNOLENBQUM7SUFFRCxJQUFXLFFBQVE7UUFDZixPQUFPLEtBQUssQ0FDSixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FDckIsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxFQUNuQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxPQUFPLElBQUksT0FBTyxDQUFDLElBQUksSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUMvRCxFQUNELElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUNiLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxFQUNwQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxPQUFPLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxDQUMxQyxDQUNKLENBQUM7SUFDVixDQUFDO0lBRUQsSUFBVyxZQUFZO1FBQ25CLE9BQU8sS0FBSyxDQUNSLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUNyQixNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEVBQ25DLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLE9BQU8sSUFBSSxPQUFPLENBQUMsR0FBRyxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQzdELEVBQ0QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQ2IsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEVBQ3BDLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLE9BQU8sSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQ3pDLENBQ0osQ0FBQztJQUNOLENBQUM7SUFFRDs7T0FFRztJQUNILElBQVcsUUFBUTtRQUNmLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQ3BCLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLFVBQVUsS0FBSyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FDcEgsQ0FBQztJQUNOLENBQUM7SUFFRDs7T0FFRztJQUNILElBQVcsZ0JBQWdCO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQzVCLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDWCxJQUFJLENBQUMsSUFBSSxDQUFDLDRCQUE0QixFQUFFO2dCQUNwQyxpREFBaUQ7Z0JBQ2pELElBQUksQ0FBQyw0QkFBNEIsR0FBRyxJQUFJLENBQUMscUJBQXFCO3FCQUN6RCxJQUFJO2dCQUNELG1DQUFtQztnQkFDbkMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLE1BQU0sRUFBRSxxQkFBcUIsQ0FBQyxDQUFDO2dCQUM3RSw2Q0FBNkM7Z0JBQzdDLFNBQVMsQ0FBQyxDQUFDLElBQWMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBc0IsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQzlGLGtFQUFrRTtnQkFDbEUsR0FBRyxDQUFDLENBQUMsbUJBQXdDLEVBQUUsRUFBRSxDQUFDLG1CQUFtQixJQUFJLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxDQUN2RztxQkFDQSxJQUFJLENBQ0QsS0FBSyxDQUFDLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksYUFBYSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FDbkQsQ0FBQzthQUNUO1lBQ0QsT0FBTyxJQUFJLENBQUMsNEJBQTRCLENBQUM7UUFDN0MsQ0FBQyxDQUFDO1FBRUYsd0RBQXdEO1FBQ3hELGNBQWMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDO1FBQ3BDLHFEQUFxRDtRQUNyRCxHQUFHLENBQUMsQ0FBQyxDQUFDLG1CQUFtQixFQUFFLE9BQU8sQ0FBQyxFQUFFLEVBQUU7WUFDbkMsSUFBSSxDQUFDLG1CQUFtQixJQUFJLENBQUMsT0FBTyxFQUFFO2dCQUNsQyxPQUFPLElBQUksQ0FBQzthQUNmO1lBQ0QsTUFBTSxlQUFlLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQztZQUN6QyxJQUFJLENBQUMsZUFBZSxFQUFFO2dCQUNsQixPQUFPLElBQUksQ0FBQzthQUNmO1lBQ0QsT0FBTyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsVUFBVSxLQUFLLGVBQWUsQ0FBQyxDQUFDO1FBQ3pGLENBQUMsQ0FBQyxDQUNMLENBQUM7SUFDTixDQUFDO0lBRU0sV0FBVyxDQUFDLE9BQW9CO1FBQ25DLE9BQU8sT0FBTyxDQUFDLG1CQUFtQixDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsVUFBVSxLQUFLLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUM3RyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ssZ0JBQWdCLENBQUMsUUFBZ0I7UUFDckMsT0FBTyxRQUFRLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsSUFBSSxRQUFRLEVBQUUsQ0FBQztJQUNwRixDQUFDOzt5R0EveEJRLFlBQVk7NkdBQVosWUFBWTsyRkFBWixZQUFZO2tCQUR4QixVQUFVOzswQkF5REUsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIEluamVjdG9yLCBPcHRpb25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSHR0cEhlYWRlcnMsIEh0dHBSZXNwb25zZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IE9ic2VydmFibGUsIEJlaGF2aW9yU3ViamVjdCwgb2YsIHRocm93RXJyb3IsIG1lcmdlLCBSZXBsYXlTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCB0YXAsIG1hcCwgY29uY2F0TWFwLCBza2lwV2hpbGUsIHN3aXRjaE1hcCwgd2l0aExhdGVzdEZyb20sIHNoYXJlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgU2Vzc2lvblR5cGUsXG4gICAgQXV0aG9yaXplZExvY2F0aW9uVHlwZSxcbiAgICBSZXNvdXJjZVR5cGUsIExpbmtUeXBlLFxuICAgIEVudGl0eVJlZmVyZW5jZVR5cGUsXG4gICAgRW50aXR5VHlwZSxcbiAgICBUYXNrVHlwZVxufSBmcm9tICdAdmNkL2JpbmRpbmdzL3ZjbG91ZC9hcGkvcmVzdC9zY2hlbWFfdjFfNSc7XG5pbXBvcnQgeyBTdXBwb3J0ZWRWZXJzaW9uc1R5cGUgfSBmcm9tICdAdmNkL2JpbmRpbmdzL3ZjbG91ZC9hcGkvcmVzdC9zY2hlbWEvdmVyc2lvbmluZyc7XG5pbXBvcnQgeyBBY2Nlc3NpYmxlTG9jYXRpb24sIEFjY2Vzc2libGVMb2NhdGlvbnMsIFNlc3Npb24gfSBmcm9tICcuLi9vcGVuYXBpJztcbmltcG9ydCB7IFF1ZXJ5IH0gZnJvbSAnLi4vcXVlcnkvaW5kZXgnO1xuaW1wb3J0IHsgQXV0aFRva2VuSG9sZGVyU2VydmljZSwgQVBJX1JPT1RfVVJMLCBTRVNTSU9OX1NDT1BFLCBTRVNTSU9OX09SR19JRCB9IGZyb20gJy4uL2NvbnRhaW5lci1ob29rcyc7XG5pbXBvcnQgeyBWY2RIdHRwQ2xpZW50IH0gZnJvbSAnLi92Y2QuaHR0cC5jbGllbnQnO1xuaW1wb3J0IHsgVmNkVHJhbnNmZXJDbGllbnQgfSBmcm9tICcuL3ZjZC50cmFuc2Zlci5jbGllbnQnO1xuaW1wb3J0IHsgSFRUUF9IRUFERVJTIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgZmlsdGVyIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgVmNkU2RrQ29uZmlnIH0gZnJvbSBcIi4uLy4uL2NvcmUvcGx1Z2luLm1vZHVsZVwiO1xuXG5leHBvcnQgY29uc3QgVFJBTlNGRVJfTElOS19SRUwgPSAndXBsb2FkOmRlZmF1bHQnO1xuZXhwb3J0IHR5cGUgTmF2aWdhYmxlID0gUmVzb3VyY2VUeXBlIHwgeyBsaW5rPzogTGlua1R5cGVbXSB9O1xuXG5leHBvcnQgY29uc3QgSEFURU9BU19IRUFERVIgPSAnTGluayc7XG5cbi8vIHRzbGludDpkaXNhYmxlOnZhcmlhYmxlLW5hbWVcblxuLyoqXG4gKiBQYXJzZSBvdXQgTGluayBoZWFkZXJzIHVzaW5nIGEgdmVyeSBsYXppbHkgaW1wbGVtZW50ZWQgcHVsbCBwYXJzZXJcbiAqIEBwYXJhbSBoZWFkZXIgJzx1cmwxPjtuYW1lMT1cInZhbHVlMVwiLG5hbWUyPVwidmFsdWUyXCIsPHVybDI+O25hbWUzPVwidmFsdWUzLHZhbHVlNFwiJ1xuICogQHJldHVybnMgcGFyc2VkIGxpbmsgaGVhZGVyc1xuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VIZWFkZXJIYXRlb2FzTGlua3MoaGVhZGVyOiBzdHJpbmcpOiBMaW5rVHlwZVtdIHtcbiAgICBjb25zdCByZXN1bHRzOiBMaW5rVHlwZVtdID0gW107XG5cbiAgICBpZiAoIWhlYWRlcikge1xuICAgICAgICByZXR1cm4gcmVzdWx0cztcbiAgICB9XG5cbiAgICBjb25zdCBoZWFkZXJGaWVsZE1hcHBpbmdzOiB7W2tleTogc3RyaW5nXToga2V5b2YgTGlua1R5cGV9ID0ge1xuICAgICAgICBocmVmOiAnaHJlZicsXG4gICAgICAgIG1vZGVsOiAndHlwZScsXG4gICAgICAgIHRpdGxlOiAnaWQnLFxuICAgICAgICByZWw6ICdyZWwnXG4gICAgfTtcbiAgICBsZXQgdG9rZW5JbmRleCA9IC0xO1xuXG4gICAgZnVuY3Rpb24gcGVlayh0b2tlbjogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBoZWFkZXIuaW5kZXhPZih0b2tlbiwgdG9rZW5JbmRleCArIDEpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG5leHQodG9rZW46IHN0cmluZykge1xuICAgICAgICBjb25zdCBuZXh0SW5kZXggPSBwZWVrKHRva2VuKTtcbiAgICAgICAgaWYgKG5leHRJbmRleCA9PT0gLTEpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihKU09OLnN0cmluZ2lmeSh7aGVhZGVyLCB0b2tlbiwgdG9rZW5JbmRleH0pKTtcbiAgICAgICAgfVxuICAgICAgICB0b2tlbkluZGV4ID0gbmV4dEluZGV4O1xuICAgICAgICByZXR1cm4gdG9rZW5JbmRleDtcbiAgICB9XG5cbiAgICB3aGlsZSAocGVlaygnPCcpID4gLTEpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGhyZWZTdGFydCA9IG5leHQoJzwnKTtcbiAgICAgICAgICAgIGNvbnN0IGhyZWZFbmQgPSBuZXh0KCc+Jyk7XG4gICAgICAgICAgICBjb25zdCBocmVmID0gaGVhZGVyLnN1YnN0cmluZyhocmVmU3RhcnQgKyAxLCBocmVmRW5kKTtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdDogTGlua1R5cGUgPSB7aHJlZiwgdHlwZTogbnVsbCwgaWQ6IG51bGwsIHJlbDogbnVsbCwgdkNsb3VkRXh0ZW5zaW9uOiBbXX07XG4gICAgICAgICAgICBsZXQgY29tbWEgPSBwZWVrKCcsJyk7XG4gICAgICAgICAgICBsZXQgc2VtaWNvbG9uID0gcGVlaygnOycpO1xuICAgICAgICAgICAgd2hpbGUgKChzZW1pY29sb24gPiAtMSAmJiBjb21tYSA+IC0xICYmIHNlbWljb2xvbiA8IGNvbW1hKSB8fCAoc2VtaWNvbG9uID4gLTEgJiYgY29tbWEgPT09IC0xKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5hbWVTdGFydCA9IG5leHQoJzsnKTtcbiAgICAgICAgICAgICAgICBjb25zdCBuYW1lRW5kID0gbmV4dCgnPScpO1xuICAgICAgICAgICAgICAgIGNvbnN0IG5hbWUgPSBoZWFkZXIuc3Vic3RyaW5nKG5hbWVTdGFydCArIDEsIG5hbWVFbmQpLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlU3RhcnQgPSBuZXh0KCdcIicpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlRW5kID0gbmV4dCgnXCInKTtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGhlYWRlci5zdWJzdHJpbmcodmFsdWVTdGFydCArIDEsIHZhbHVlRW5kKTtcbiAgICAgICAgICAgICAgICBjb25zdCBtYXBwZWROYW1lID0gaGVhZGVyRmllbGRNYXBwaW5nc1tuYW1lXTtcbiAgICAgICAgICAgICAgICBpZiAobWFwcGVkTmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdFttYXBwZWROYW1lXSA9IGRlY29kZVVSSUNvbXBvbmVudCh2YWx1ZSkgYXMgYW55O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb21tYSA9IHBlZWsoJywnKTtcbiAgICAgICAgICAgICAgICBzZW1pY29sb24gPSBwZWVrKCc7Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXN1bHRzLnB1c2gocmVzdWx0KTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHsgIC8vIFdlIHdpbGwgdHJ5IHRoZSBuZXh0IG9uZS4uLlxuICAgICAgICAgICAgY29uc29sZS5sb2coZXJyb3IpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdHM7XG59XG5cbmV4cG9ydCBlbnVtIExpbmtSZWxUeXBlIHtcbiAgICBhZGQgPSAnYWRkJyxcbiAgICByZW1vdmUgPSAncmVtb3ZlJyxcbiAgICBlZGl0ID0gJ2VkaXQnLFxufVxuXG4vKipcbiAqIEEgYmFzaWMgY2xpZW50IGZvciBpbnRlcmFjdGluZyB3aXRoIHRoZSBWTXdhcmUgQ2xvdWQgRGlyZWN0b3IgQVBJcy5cbiAqXG4gKiBBIFZNd2FyZSBDbG91ZCBEaXJlY3RvciBwbHVnaW4gY2FuIGdldCBhIHJlZmVyZW5jZSB0byB0aGlzIGNsaWVudCBieSB1c2luZyBhbmd1bGFyIGluamVjdGlvbi5cbiAqIGBgYFxuICogICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgdmNkQXBpOiBWY2RBcGlDbGllbnQpIHt9XG4gKiBgYGBcbiAqXG4gKiBWY2RBcGlDbGllbnQgcmV1c2VzIHRoZSBhdXRoZW50aWNhdGlvbiBmcm9tIHRoZSBWQ0QgcGxhdGZvcm0gc28gaW4gZ2VuZXJhbCB0aGVyZSBpc1xuICogbm8gbmVlZCBvZiBhbiBleHBsaWNpdCBhdXRoZW50aWNhdGlvbi9sb2dpbi5cbiAqXG4gKiBXaGVuIGRlYWxpbmcgd2l0aCB0aGUgc2Vzc2lvbiBtYW5hZ2VtZW50IHRoZXJlIGFyZSB0d28gQVBJczpcbiAqIDEuIERlcHJlY2F0ZWQgbGVnYWN5IEFQSSB0aGF0IGlzIHVzaW5nIHRoZSBgYXBpL3Nlc3Npb25gIGVuZHBvaW50IGFuZCB0aGUgY29ycmVzcG9uZGluZyBtb2RlbHNcbiAqIDIuIE5ld2x5IGFkZGVkIEFQSSB0aGF0IGlzIHVzaW5nIHRoZSBgY2xvdWRhcGlgIGVuZHBvaW50IGFuZCB0aGUgY29ycmVzcG9uZGluZyBtb2RlbHNcbiAqXG4gKiBOb3RlIHRoYXQgaWYgYSBwbHVnaW4gcGVyZm9ybXMgYW4gZXhwbGljaXQgY2xvdWQgYXBpIGF1dGhlbnRpY2F0aW9uIGNhbGwgdGhyb3VnaFxuICoge0BsaW5rIFZjZEFwaUNsaWVudCNzZXRDbG91ZEFwaUF1dGhlbnRpY2F0aW9ufSBvciB7QGxpbmsgVmNkQXBpQ2xpZW50I2Nsb3VkQXBpTG9naW59XG4gKiBmcm9tIHRoYXQgbW9tZW50IG9uIHRoZSBWY2RBcGlDbGllbnQgdXNlcyBvbmx5IGNsb3VkIGFwaSBzZXNzaW9uIG1hbmFnZW1lbnQuXG4gKiBUaGlzIG1lYW5zIGNhbGxzIHRvIHtAbGluayBWY2RBcGlDbGllbnQjc2V0QXV0aGVudGljYXRpb259IG9yIHtAbGluayBWY2RBcGlDbGllbnQjbG9naW59IGhhdmUgbm8gZWZmZWN0LlxuICovXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgVmNkQXBpQ2xpZW50IHtcbiAgICBzZXQgYmFzZVVybChfYmFzZVVybDogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuX2Jhc2VVcmwgPSBfYmFzZVVybDtcbiAgICB9XG5cbiAgICBnZXQgdmVyc2lvbigpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnJlcXVlc3RIZWFkZXJzSW50ZXJjZXB0b3IudmVyc2lvbjtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9uZWdvdGlhdGVWZXJzaW9uOiBPYnNlcnZhYmxlPHN0cmluZz47XG4gICAgcHJpdmF0ZSBfYmFzZVVybDogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgVXNlIHtAbGluayBWY2RBcGlDbGllbnQjX2Nsb3VkQXBpU2Vzc2lvbn1cbiAgICAgKi9cbiAgICBwcml2YXRlIF9zZXNzaW9uOiBCZWhhdmlvclN1YmplY3Q8U2Vzc2lvblR5cGU+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxTZXNzaW9uVHlwZT4obnVsbCk7XG4gICAgcHJpdmF0ZSBfc2Vzc2lvbk9ic2VydmFibGU6IE9ic2VydmFibGU8U2Vzc2lvblR5cGU+ID0gdGhpcy5fc2Vzc2lvbi5hc09ic2VydmFibGUoKVxuICAgICAgICAucGlwZShcbiAgICAgICAgICAgIHNraXBXaGlsZShzZXNzaW9uID0+ICFzZXNzaW9uKVxuICAgICAgICApO1xuICAgIHByaXZhdGUgX2dldFNlc3Npb246IE9ic2VydmFibGU8U2Vzc2lvblR5cGU+O1xuXG4gICAgLyoqXG4gICAgICogQ2xvdWRBcGkgU2Vzc2lvblxuICAgICAqL1xuICAgIHByaXZhdGUgX2Nsb3VkQXBpU2Vzc2lvbjogQmVoYXZpb3JTdWJqZWN0PFNlc3Npb24+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxTZXNzaW9uPihudWxsKTtcbiAgICBwcml2YXRlIF9jbG91ZEFwaVNlc3Npb25PYnNlcnZhYmxlOiBPYnNlcnZhYmxlPFNlc3Npb24+ID0gdGhpcy5fY2xvdWRBcGlTZXNzaW9uLmFzT2JzZXJ2YWJsZSgpXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgICAgc2tpcFdoaWxlKHNlc3Npb24gPT4gIXNlc3Npb24pXG4gICAgICAgICk7XG4gICAgLyoqXG4gICAgICogVGhpcyBvYnNlcnZhYmxlIGhhcyBhIHNwZWNpYWwgcHVycG9zZSB3aGVuIGRvaW5nIGF1dG9tYXRpYyBsb2dpbiBkdXJpbmcgdGhlIGNvbnN0cnVjdG9yIGluaXRpYWxpemF0aW9uLlxuICAgICAqIEl0IGFsbG93cyBiYWNrZW5kIGNhbGwgb25seSBhZnRlciBhbiBBUEkgdmVyc2lvbiBpcyBzZXQuXG4gICAgICogSXQgYWxzbyBlbnN1cmVzIHRoYXQgYSBiYWNrZW5kIGNhbGwgdG8gZ2V0IHRoZSBjdXJyZW50IHNlc3Npb24gaXMgZG9uZSBvbmNlIHByaW9yIHRvIGFueSBvdGhlciBjYWxscy5cbiAgICAgKlxuICAgICAqIEluIGNhc2Ugb2YgYW4gZXhwbGljaXQgY2xvdWQgYXBpIGF1dGggcmVxdWVzdCB0aGVyZSBpcyBubyBuZWVkIG9mIHRoaXMgb2JzZXJ2YWJsZVxuICAgICAqIHNpbmNlIHRoaXMgYXV0aCByZXF1ZXN0IHdpbGwgcmV0cmlldmUgdGhlIHNlc3Npb24gaXRzZWxmXG4gICAgICovXG4gICAgcHJpdmF0ZSBfZ2V0Q2xvdWRBcGlTZXNzaW9uOiBPYnNlcnZhYmxlPFNlc3Npb24+O1xuXG4gICAgcHJpdmF0ZSBfY2xvdWRBcGlTZXNzaW9uTGlua3M6IEJlaGF2aW9yU3ViamVjdDxMaW5rVHlwZVtdPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8TGlua1R5cGVbXT4oW10pO1xuXG4gICAgLyoqXG4gICAgICogQ2FjaGVkLCBsYXp5IGxvYWRlZCBvYnNlcnZhYmxlIG9mIHRoZSBBY2Nlc3NpYmxlTG9jYXRpb24gYXJyYXlcbiAgICAgKi9cbiAgICBwcml2YXRlIF9jbG91ZEFwaUFjY2Vzc2libGVMb2NhdGlvbnM6IE9ic2VydmFibGU8QWNjZXNzaWJsZUxvY2F0aW9uW10+O1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBwcm9wZXJ0eSBkZXRlcm1pbmVzIGlmIGl0IGlzIGFuIGV4cGxpY2l0IGNsb3VkIGFwaSBsb2dpbi5cbiAgICAgKiBJbiB0aGlzIGNhc2UgdGhlIG9sZCBBUEkgKC9hcGkvc2Vzc2lvbikgc2hvdWxkIG5vdCBiZSB1c2VkIGF0IGFsbC5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9pc0Nsb3VkQXBpTG9naW4gPSBmYWxzZTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICAgICAgcHJpdmF0ZSBodHRwOiBWY2RIdHRwQ2xpZW50LFxuICAgICAgICAgICAgcHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgICAgICAgICBAT3B0aW9uYWwoKSBwcml2YXRlIGNvbmZpZz86IFZjZFNka0NvbmZpZyxcbiAgICApIHtcbiAgICAgICAgdGhpcy5fYmFzZVVybCA9IHRoaXMuaW5qZWN0b3IuZ2V0KEFQSV9ST09UX1VSTCk7XG4gICAgICAgIFxuICAgICAgICBsZXQgbmVnb3RpYXRlZFZlcnNpb246IE9ic2VydmFibGU8c3RyaW5nPjtcbiAgICAgICAgaWYgKHRoaXMuY29uZmlnPy5hcGlWZXJzaW9uKSB7XG4gICAgICAgICAgICBuZWdvdGlhdGVkVmVyc2lvbiA9IG9mKHRoaXMuY29uZmlnLmFwaVZlcnNpb24pLnBpcGUoXG4gICAgICAgICAgICAgICAgbWFwKCh2ZXJzaW9uKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0VmVyc2lvbih2ZXJzaW9uKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZlcnNpb247XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBuZWdvdGlhdGVkVmVyc2lvbiA9IHRoaXMuaHR0cC5nZXQ8U3VwcG9ydGVkVmVyc2lvbnNUeXBlPihgJHt0aGlzLl9iYXNlVXJsfS9hcGkvdmVyc2lvbnNgKS5waXBlKFxuICAgICAgICAgICAgICAgIG1hcCh2ZXJzaW9ucyA9PiB0aGlzLm5lZ290aWF0ZVZlcnNpb24odmVyc2lvbnMpKSxcbiAgICAgICAgICAgICAgICB0YXAodmVyc2lvbiA9PiB0aGlzLnNldFZlcnNpb24odmVyc2lvbikpXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX25lZ290aWF0ZVZlcnNpb24gPSBuZWdvdGlhdGVkVmVyc2lvbi5waXBlKFxuICAgICAgICAgICAgc2hhcmUoeyBjb25uZWN0b3I6ICgpID0+IG5ldyBSZXBsYXlTdWJqZWN0KDEpIH0pXG4gICAgICAgICk7XG5cbiAgICAgICAgY29uc3QgdG9rZW5Ib2xkZXI6IEF1dGhUb2tlbkhvbGRlclNlcnZpY2UgPSB0aGlzLmluamVjdG9yLmdldChBdXRoVG9rZW5Ib2xkZXJTZXJ2aWNlLCB7IHRva2VuOiAnJyB9KTtcbiAgICAgICAgY29uc3QgdG9rZW4gPSB0b2tlbkhvbGRlci5qd3QgPyBgQmVhcmVyICR7dG9rZW5Ib2xkZXIuand0fWAgOiB0b2tlbkhvbGRlci50b2tlbjtcbiAgICAgICAgdGhpcy5fZ2V0U2Vzc2lvbiA9IHRoaXMuc2V0QXV0aGVudGljYXRpb24odG9rZW4pXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBzaGFyZSh7IGNvbm5lY3RvcjogKCkgPT4gbmV3IFJlcGxheVN1YmplY3QoMSkgfSlcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5fZ2V0Q2xvdWRBcGlTZXNzaW9uID0gdGhpcy5zZXRDbG91ZEFwaUF1dGhlbnRpY2F0aW9uKHRva2VuKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgc2hhcmUoeyBjb25uZWN0b3I6ICgpID0+IG5ldyBSZXBsYXlTdWJqZWN0KDEpIH0pXG4gICAgICAgICAgICApO1xuICAgICAgICAvLyBUaGlzIGlzIG5vdCBhbiBleHBsaWNpdCBjbG91ZCBhcGkgbG9naW5cbiAgICAgICAgdGhpcy5faXNDbG91ZEFwaUxvZ2luID0gZmFsc2U7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBuZWdvdGlhdGVWZXJzaW9uKHNlcnZlclZlcnNpb25zOiBTdXBwb3J0ZWRWZXJzaW9uc1R5cGUpOiBzdHJpbmcge1xuICAgICAgICBjb25zdCBzdXBwb3J0ZWRWZXJzaW9uczogc3RyaW5nW10gPSBzZXJ2ZXJWZXJzaW9ucy52ZXJzaW9uSW5mby5tYXAodmVyc2lvbkluZm8gPT4gdmVyc2lvbkluZm8udmVyc2lvbik7XG5cbiAgICAgICAgLy8gRGVmYXVsdCBBUEkgVmVyc2lvbiB1c2VkIGlzIHRoZSBMYXRlc3QgQVBJIFZlcnNpb24gaW4gVk13YXJlIENsb3VkIERpcmVjdG9yXG4gICAgICAgIHJldHVybiBzdXBwb3J0ZWRWZXJzaW9uc1tzdXBwb3J0ZWRWZXJzaW9ucy5sZW5ndGggLSAxXTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcHVycG9zZSBvZiB0aGlzIGZ1bmN0aW9uIGlzIHRvIGVuc3VyZSB0aGF0IHByaW9yIHRvIHNlbmRpbmcgYW55IGNhbGwgdG8gdGhlIGJhY2tlbmRcbiAgICAgKiB0aGUgdmVyc2lvbiBoYXMgYmVlbiBzZXQgYW5kIHRoZSBjdXJyZW50IHNlc3Npb24gaGFzIGJlZW4gcmV0cmlldmVkLlxuICAgICAqIE5vdGUgdGhhdCB0aGlzIGlzIGltcG9ydGFudCBkdXJpbmcgdGhlIGF1dG9tYXRpYyBhdXRoZW50aWNhdGlvbiB0aGF0IGlzIGRvbmUgZHVyaW5nIHRoZVxuICAgICAqIGNvbnN0cnVjdG9yIGluaXRpYWxpemF0aW9uLCB3aGVuIHRoZSBwbHVnaW4gaXMgbm90IHJlcXVpcmVkIHRvIHBlcmZvcm0gaXRzIG93biBleHBsaWNpdCBhdXRoZW50aWNhdGlvblxuICAgICAqIGJ1dCByYXRoZXIgdGhlIG9uZXMgZnJvbSB0aGUgdW5kZXJseWluZyBmcmFtZXdvcmsgaXMgdXNlZC5cbiAgICAgKi9cbiAgICBwcml2YXRlIHZhbGlkYXRlUmVxdWVzdENvbnRleHQoKTogT2JzZXJ2YWJsZTx0cnVlPiB7XG4gICAgICAgIHJldHVybiAodGhpcy52ZXJzaW9uID8gb2YodGhpcy52ZXJzaW9uKSA6IHRoaXMuX25lZ290aWF0ZVZlcnNpb24pXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAvLyBJbiBjYXNlIG9mIGEgY2xvdWQgYXBpIGxvZ2luIHdlIGFyZSBub3QgaW50ZXJlc3RlZCBpbiB0aGUgL2FwaS9zZXNzaW9uIHNlc3Npb25cbiAgICAgICAgICAgICAgICBjb25jYXRNYXAoKCkgPT4gdGhpcy5faXNDbG91ZEFwaUxvZ2luID8gb2YobnVsbCkgOiB0aGlzLl9nZXRTZXNzaW9uKSxcbiAgICAgICAgICAgICAgICBjb25jYXRNYXAoKCkgPT4gdGhpcy5fZ2V0Q2xvdWRBcGlTZXNzaW9uXG4gICAgICAgICAgICAgICAgICAgIC8vIEluIGNhc2Ugb2YgY2xvdWQgYXBpIGZhaWx1cmUgd2UgZG8gbm90IHdhbnQgdG8gcHJldmVudCBmdXJ0aGVyIGV4ZWN1dGlvblxuICAgICAgICAgICAgICAgICAgICAvLyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBjb25zaWRlcmF0aW9ucyBzaW5jZSB0aGlzIG1heSBiZSBhIGNhc2VcbiAgICAgICAgICAgICAgICAgICAgLy8gd2hlbiBjbG91ZCBhcGkgaXMgbm90IHN1cHBvcnRlZCBhdCBhbGwgZm9yIHRoZSBzcGVjaWZpZWQgdmVyc2lvblxuICAgICAgICAgICAgICAgICAgICAucGlwZShjYXRjaEVycm9yKChlKSA9PiBvZih0cnVlKSkpXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBtYXAoKCkgPT4gdHJ1ZSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgIC8qKlxuICAgICAqXG4gICAgICogRm9yIHVzZSBjYXNlcyB3aWNoIHNvbGVseSBkZXBlbmRzIG9uIGNsb3VkYXBpIHdpdGhvdXQgYW55IGJhY2t3YXJkIGNvbXBhdGliaWxpdHlcbiAgICAgKiB0aGVyZSBzaG91bGQgYmUgbm8gZGVwZW5kZW5jZSBvbiB0aGUgb2xkIC9hcGkgZW5kcG9pbnQgYXQgYWxsXG4gICAgICovXG4gICAgcHJpdmF0ZSB2YWxpZGF0ZVJlcXVlc3RDb250ZXh0Q2xvdWRBcGlPbmx5KCk6IE9ic2VydmFibGU8U2Vzc2lvbj4ge1xuICAgICAgICByZXR1cm4gKHRoaXMudmVyc2lvbiA/IG9mKHRoaXMudmVyc2lvbikgOiB0aGlzLl9uZWdvdGlhdGVWZXJzaW9uKS5waXBlKFxuICAgICAgICAgICAgY29uY2F0TWFwKCgpID0+IHRoaXMuX2dldENsb3VkQXBpU2Vzc2lvbilcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0VmVyc2lvbihfdmVyc2lvbjogc3RyaW5nKTogVmNkQXBpQ2xpZW50IHtcbiAgICAgICAgdGhpcy5odHRwLnJlcXVlc3RIZWFkZXJzSW50ZXJjZXB0b3IudmVyc2lvbiA9IF92ZXJzaW9uO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHbG9iYWwgY29uZmlndXJhdGlvbiBmb3IgdGhlIHNlcnZpY2UsIHRoYXQgYWxsb3dzIGEgcHJvdmlkZXIgdXNlciB0byBleGVjdXRlIEFQSSByZXF1ZXN0c1xuICAgICAqIGluIHRoZSBzY29wZSBvZiBhIHNwZWNpZmljIHRlbmFudC5cbiAgICAgKiBcbiAgICAgKiBJZiB5b3Ugd2FudCB0byBleGVjdXRlIHNpbmdsZSBBUEkgcmVxdWVzdCBpbiBzY29wZSBvZiBzcGVjaWZpYyB0ZW5hbnQgeW91IGNhbiBkbyBpdFxuICAgICAqIGJ5IHBhc3NpbmcgXCJYLVZNV0FSRS1WQ0xPVUQtVEVOQU5ULUNPTlRFWFRcIiBoZWFkZXIgdG8gdGhlIHNwZWNpZmljIEFQSSBSZXF1ZXN0LlxuICAgICAqXG4gICAgICogVGhpcyBzY29waW5nIGlzIGF2YWlsYWJsZSB0byBxdWVyeS1iYXNlZCBBUEkgY2FsbHMgYW5kIHRvIGJ1bGsgR0VUIGNhbGxzIGluIHRoZVxuICAgICAqIC9jbG91ZGFwaSBzcGFjZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBhY3RBcyBhbiBlbnRpdHlSZWYgb2YgdGhlIHRlbmFudCAob3JnYW5pemF0aW9uKSB0byBzY29wZSBzdWJzZXF1ZW50IGNhbGxzIHRvIGluXG4gICAgICogIHRoZSBWY2RBcGlDbGllbnQsIG9yIG51bGwvbm8gcGFyYW1ldGVyIHRvIHJlbW92ZSB0ZW5hbnQtc3BlY2lmaWMgc2NvcGluZ1xuICAgICAqIEByZXR1cm5zIHRoZSBjdXJyZW50IFZjZEFwaUNsaWVudCBpbnN0YW5jZSAoZm9yIGNoYWluaW5nKVxuICAgICAqL1xuICAgIHB1YmxpYyBhY3RBcyhhY3RBczogRW50aXR5UmVmZXJlbmNlVHlwZSA9IG51bGwpOiBWY2RBcGlDbGllbnQge1xuICAgICAgICB0aGlzLmh0dHAucmVxdWVzdEhlYWRlcnNJbnRlcmNlcHRvci5hY3RBcyA9ICFhY3RBcyA/IG51bGwgOiBhY3RBcy5pZDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgVXNlIHtAbGluayBWY2RBcGlDbGllbnQjc2V0Q2xvdWRBcGlBdXRoZW50aWNhdGlvbn1cbiAgICAgKlxuICAgICAqIFNldHMgdGhlIGF1dGhlbnRpY2F0aW9uIHRva2VuIHRvIHVzZSBmb3IgdGhlIFZjZEFwaUNsaWVudC5cbiAgICAgKlxuICAgICAqIEFmdGVyIHNldHRpbmcgdGhlIHRva2VuLCB0aGUgY2xpZW50IHdpbGwgZ2V0IHRoZSBjdXJyZW50IHNlc3Npb25cbiAgICAgKiBpbmZvcm1hdGlvbiBhc3NvY2lhdGVkIHdpdGggdGhlIGF1dGhlbnRpY2F0ZWQgdG9rZW4uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gYXV0aGVudGljYXRpb24gdGhlIGF1dGhlbnRpY2F0aW9uIHN0cmluZyAodG8gYmUgdXNlZCBpbiBlaXRoZXIgdGhlICdBdXRob3JpemF0aW9uJ1xuICAgICAqICBvciAneC12Y2xvdWQtYXV0aG9yaXphdGlvbicgaGVhZGVyKVxuICAgICAqIEByZXR1cm5zIHRoZSBzZXNzaW9uIGFzc29jaWF0ZWQgd2l0aCB0aGUgYXV0aGVudGljYXRpb24gdG9rZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgc2V0QXV0aGVudGljYXRpb24oYXV0aGVudGljYXRpb246IHN0cmluZyk6IE9ic2VydmFibGU8U2Vzc2lvblR5cGU+IHtcbiAgICAgICAgaWYgKHRoaXMuX2lzQ2xvdWRBcGlMb2dpbikge1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoJ09ubHkgY2xvdWQgYXBpIGF1dGggaXMgYWxsb3dlZCBzaW5jZSBpdCB3YXMgYWxyZWFkeSB1c2VkJyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmh0dHAucmVxdWVzdEhlYWRlcnNJbnRlcmNlcHRvci5hdXRoZW50aWNhdGlvbiA9IGF1dGhlbnRpY2F0aW9uO1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxTZXNzaW9uVHlwZT4oYCR7dGhpcy5fYmFzZVVybH0vYXBpL3Nlc3Npb25gKS5waXBlKFxuICAgICAgICAgICAgICAgIHRhcChzZXNzaW9uID0+IHtcbiAgICAgICAgICAgICAgICAgICAgLy8gYXV0b21hdGljYWxseSBzZXQgYWN0QXMgZm9yIHByb3ZpZGVyIGluIHRlbmFudCBzY29wZVxuICAgICAgICAgICAgICAgICAgICBpZiAoc2Vzc2lvbi5vcmcgPT09ICdTeXN0ZW0nICYmIHRoaXMuaW5qZWN0b3IuZ2V0KFNFU1NJT05fU0NPUEUpID09PSAndGVuYW50Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQXV0b21hdGljIGFjdEFzIG9ubHkgd29ya3MgaW4gdmVyc2lvbnMgPj05LjVcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hY3RBcyh7aWQ6IHRoaXMuaW5qZWN0b3IuZ2V0KFNFU1NJT05fT1JHX0lEKX0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignTm8gU0VTU0lPTl9PUkdfSUQgc2V0IGluIGNvbnRhaW5lci4gQXV0b21hdGljIGFjdEFzIGlzIGRpc2FibGVkLicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgdGFwKHNlc3Npb24gPT4gdGhpcy5fc2Vzc2lvbi5uZXh0KHNlc3Npb24pKVxuICAgICAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBhdXRoZW50aWNhdGlvbiB0b2tlbiB0byB1c2UgZm9yIHRoZSBWY2RBcGlDbGllbnQuXG4gICAgICpcbiAgICAgKiBBZnRlciBzZXR0aW5nIHRoZSB0b2tlbiwgdGhlIGNsaWVudCB3aWxsIGdldCB0aGUgY3VycmVudCBzZXNzaW9uXG4gICAgICogaW5mb3JtYXRpb24gYXNzb2NpYXRlZCB3aXRoIHRoZSBhdXRoZW50aWNhdGVkIHRva2VuLlxuICAgICAqXG4gICAgICogQHBhcmFtIGF1dGhlbnRpY2F0aW9uIHRoZSBhdXRoZW50aWNhdGlvbiBzdHJpbmcgKHRvIGJlIHVzZWQgaW4gZWl0aGVyIHRoZSAnQXV0aG9yaXphdGlvbidcbiAgICAgKiAgb3IgJ3gtdmNsb3VkLWF1dGhvcml6YXRpb24nIGhlYWRlcilcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHNlc3Npb24gb2JzZXJ2YWJsZSBhc3NvY2lhdGVkIHdpdGggdGhlIGF1dGhlbnRpY2F0aW9uIHRva2VuXG4gICAgICovXG4gICAgcHVibGljIHNldENsb3VkQXBpQXV0aGVudGljYXRpb24oYXV0aGVudGljYXRpb246IHN0cmluZyk6IE9ic2VydmFibGU8U2Vzc2lvbj4ge1xuICAgICAgICB0aGlzLm9uQmVmb3JlQ2xvdWRBcGlBdXRoZW50aWNhdGlvbigpO1xuXG4gICAgICAgIHJldHVybiBvZih0cnVlKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgLy8gU2V0IHRoZSBhdXRoZW50aWNhdGlvbiBhcyBwYXJ0IG9mIHRoZSBvYnNlcnZhYmxlIGluIG9yZGVyIHRvIGVuc3VyZSB0aGUgY2FsbGVyIGhhcyBzdWJzY3JpYmVkIHRvIHRoZSBvYnNlcnZhYmxlXG4gICAgICAgICAgICAgICAgdGFwKCgpID0+IHRoaXMuaHR0cC5yZXF1ZXN0SGVhZGVyc0ludGVyY2VwdG9yLmF1dGhlbnRpY2F0aW9uID0gYXV0aGVudGljYXRpb24pLFxuICAgICAgICAgICAgICAgIHN3aXRjaE1hcCgoKSA9PiB0aGlzLmh0dHAuZ2V0PFNlc3Npb24+KGAke3RoaXMuX2Jhc2VVcmx9L2Nsb3VkYXBpLzEuMC4wL3Nlc3Npb25zL2N1cnJlbnRgLCB7IG9ic2VydmU6ICdyZXNwb25zZScgfSkpLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgdGhpcy5vbkNsb3VkQXBpQXV0aGVudGljYXRpb24oKVxuICAgICAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZW5hYmxlTG9nZ2luZygpOiBWY2RBcGlDbGllbnQge1xuICAgICAgICB0aGlzLmh0dHAubG9nZ2luZ0ludGVyY2VwdG9yLmVuYWJsZWQgPSB0cnVlO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkIFVzZSB7QGxpbmsgVmNkQXBpQ2xpZW50I2Nsb3VkQXBpTG9naW59XG4gICAgICpcbiAgICAgKiBDcmVhdGVzIGFuIGF1dGhlbnRpY2F0ZWQgc2Vzc2lvbiBmb3IgdGhlIHNwZWNpZmllZCBjcmVkZW50aWFsIGRhdGEuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdXNlcm5hbWUgdGhlIG5hbWUgb2YgdGhlIHVzZXIgdG8gYXV0aGVudGljYXRlXG4gICAgICogQHBhcmFtIHRlbmFudCB0aGUgb3JnYW5pemF0aW9uIHRoZSB1c2VyIGJlbG9uZ3MgdG9cbiAgICAgKiBAcGFyYW0gcGFzc3dvcmQgdGhlIHBhc3N3b3JkIGZvciB0aGUgdXNlclxuICAgICAqIEByZXR1cm5zIGFuIGF1dGhlbnRpY2F0ZWQgc2Vzc2lvbiBmb3IgdGhlIGdpdmVuIGNyZWRlbnRpYWxzXG4gICAgICovXG4gICAgcHVibGljIGxvZ2luKHVzZXJuYW1lOiBzdHJpbmcsIHRlbmFudDogc3RyaW5nLCBwYXNzd29yZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxTZXNzaW9uVHlwZT4ge1xuICAgICAgICBpZiAodGhpcy5faXNDbG91ZEFwaUxvZ2luKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcignT25seSBjbG91ZCBhcGkgYXV0aCBpcyBhbGxvd2VkIHNpbmNlIGl0IHdhcyBhbHJlYWR5IHVzZWQnKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhdXRoU3RyaW5nOiBzdHJpbmcgPSBidG9hKGAke3VzZXJuYW1lfUAke3RlbmFudH06JHtwYXNzd29yZH1gKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8U2Vzc2lvblR5cGU+KFxuICAgICAgICAgICAgYCR7dGhpcy5fYmFzZVVybH0vYXBpL3Nlc3Npb25zYCxcbiAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgb2JzZXJ2ZTogJ3Jlc3BvbnNlJyxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoeyBBdXRob3JpemF0aW9uOiBgQmFzaWMgJHthdXRoU3RyaW5nfWB9KVxuICAgICAgICAgICAgfVxuICAgICAgICApXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgICAgdGFwKChyZXNwb25zZTogSHR0cFJlc3BvbnNlPGFueT4pID0+XG4gICAgICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm1heC1saW5lLWxlbmd0aFxuICAgICAgICAgICAgICAgIHRoaXMuaHR0cC5yZXF1ZXN0SGVhZGVyc0ludGVyY2VwdG9yLmF1dGhlbnRpY2F0aW9uID0gYCR7cmVzcG9uc2UuaGVhZGVycy5nZXQoJ3gtdm13YXJlLXZjbG91ZC10b2tlbi10eXBlJyl9ICR7cmVzcG9uc2UuaGVhZGVycy5nZXQoJ3gtdm13YXJlLXZjbG91ZC1hY2Nlc3MtdG9rZW4nKX1gXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgbWFwKHJlc3BvbnNlID0+IHJlc3BvbnNlLmJvZHkpLFxuICAgICAgICAgICAgdGFwKHNlc3Npb24gPT4gdGhpcy5fc2Vzc2lvbi5uZXh0KHNlc3Npb24pKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gYXV0aGVudGljYXRlZCBzZXNzaW9uIGZvciB0aGUgc3BlY2lmaWVkIGNyZWRlbnRpYWwgZGF0YSB1c2luZyBjbG91ZCBhcGkgZW5kcG9pbnQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdXNlcm5hbWUgdGhlIG5hbWUgb2YgdGhlIHVzZXIgdG8gYXV0aGVudGljYXRlXG4gICAgICogQHBhcmFtIHRlbmFudCB0aGUgb3JnYW5pemF0aW9uIHRoZSB1c2VyIGJlbG9uZ3MgdG9cbiAgICAgKiBAcGFyYW0gcGFzc3dvcmQgdGhlIHBhc3N3b3JkIGZvciB0aGUgdXNlclxuICAgICAqIEByZXR1cm5zIGFuIGF1dGhlbnRpY2F0ZWQgc2Vzc2lvbiBmb3IgdGhlIGdpdmVuIGNyZWRlbnRpYWxzXG4gICAgICovXG4gICAgcHVibGljIGNsb3VkQXBpTG9naW4odXNlcm5hbWU6IHN0cmluZywgdGVuYW50OiBzdHJpbmcsIHBhc3N3b3JkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPFNlc3Npb24+IHtcbiAgICAgICAgdGhpcy5vbkJlZm9yZUNsb3VkQXBpQXV0aGVudGljYXRpb24oKTtcblxuICAgICAgICBjb25zdCBhdXRoU3RyaW5nOiBzdHJpbmcgPSBidG9hKGAke3VzZXJuYW1lfUAke3RlbmFudH06JHtwYXNzd29yZH1gKTtcbiAgICAgICAgbGV0IHVybCA9IGAke3RoaXMuX2Jhc2VVcmx9L2Nsb3VkYXBpLzEuMC4wL3Nlc3Npb25zYDtcbiAgICAgICAgaWYgKHRlbmFudC50b0xvd2VyQ2FzZSgpID09PSAnc3lzdGVtJykge1xuICAgICAgICAgICAgdXJsICs9ICcvcHJvdmlkZXInO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxTZXNzaW9uPihcbiAgICAgICAgICAgIHVybCxcbiAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgb2JzZXJ2ZTogJ3Jlc3BvbnNlJyxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoeyBbSFRUUF9IRUFERVJTLkF1dGhvcml6YXRpb25dOiBgQmFzaWMgJHthdXRoU3RyaW5nfWAgfSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgKS5waXBlKFxuICAgICAgICAgICAgdGFwKChyZXNwb25zZTogSHR0cFJlc3BvbnNlPFNlc3Npb24+KSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm1heC1saW5lLWxlbmd0aFxuICAgICAgICAgICAgICAgIGNvbnN0IHRva2VuID0gYCR7cmVzcG9uc2UuaGVhZGVycy5nZXQoJ3gtdm13YXJlLXZjbG91ZC10b2tlbi10eXBlJyl9ICR7cmVzcG9uc2UuaGVhZGVycy5nZXQoJ3gtdm13YXJlLXZjbG91ZC1hY2Nlc3MtdG9rZW4nKX1gO1xuICAgICAgICAgICAgICAgIHRoaXMuaHR0cC5yZXF1ZXN0SGVhZGVyc0ludGVyY2VwdG9yLmF1dGhlbnRpY2F0aW9uID0gdG9rZW47XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHRoaXMub25DbG91ZEFwaUF1dGhlbnRpY2F0aW9uKClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJdCBpcyBuZWNlc3NhcnkgdG8ga25vdyBpZiBhbiBleHBsaWNpdCBjbG91ZCBhcGkgYXV0aCByZXF1ZXN0IHdhcyBkb25lLlxuICAgICAqIFRoaXMgZnVuY3Rpb24gaGFuZGxlcyB0aGlzIGJ5IHNldHRpbmcgdGhlIGNvcnJlc3BvbmRpbmcgZmxhZ3MsIHByb3BlcnRpZXMgZXRjLlxuICAgICAqL1xuICAgIHByaXZhdGUgb25CZWZvcmVDbG91ZEFwaUF1dGhlbnRpY2F0aW9uKCkge1xuICAgICAgICAvLyBJbiBjYXNlIG9mIGFuIGV4cGxpY2l0IGNsb3VkIGFwaSBhdXRoIHJlcXVlc3Q6XG4gICAgICAgIC8vIFNldCB0aGUgZmxhZyBfaXNDbG91ZEFwaUxvZ2luIGluIG9yZGVyIHRvIGtub3cgdGhhdCBleHBsaWNpdCBjbG91ZCBhcGkgYXV0aGVudGljYXRpb24gaXMgZG9uZVxuICAgICAgICAvLyBUaGlzIHdpbGwgaGVscCB1cyBza2lwIGNvZGUgcmVsYXRlZCB0byB0aGUgb2xkIGFwaSwgaS5lLiB3ZSBzaG91bGQgbm90IGFsbG93IGV4cGxpY2l0IG1peCBvZiBib3RoIHRoZSBhcGktc1xuICAgICAgICB0aGlzLl9pc0Nsb3VkQXBpTG9naW4gPSB0cnVlO1xuICAgICAgICAvLyBJbiBjYXNlIG9mIGFuIGV4cGxpY2l0IGNsb3VkIGFwaSBhdXRoIHJlcXVlc3Q6XG4gICAgICAgIC8vIFRoZXJlIGlzIG5vIG5lZWQgb2YgX2dldENsb3VkQXBpU2Vzc2lvbiBvYnNlcnZhYmxlIHdoaWNoIGlzIG5lZWRlZCBpbiB0aGUgYXV0b21hdGljIGxvZ2luIGR1cmluZyB0aGUgY29uc3RydWN0b3IgaW5pdGlhbGl6YXRpb24uXG4gICAgICAgIC8vIFRoZSBleHBsaWNpdCBjbG91ZCBhcGkgYXV0aCByZXF1ZXN0IHdpbGwgcmV0cmlldmUgdGhlIHNlc3Npb24uXG4gICAgICAgIHRoaXMuX2dldENsb3VkQXBpU2Vzc2lvbiA9IG9mKG51bGwpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEhhbmRsZSBhdXRoZW50aWNhdGlvbi5cbiAgICAgKiBUaGlzIGluY2x1ZGVzIGdldHRpbmcgSEFURU9BUyBsaW5rcywgc2V0dGluZyB0aGUgc2Vzc2lvbiwgaGFuZGxpbmcgZXJyb3JzIGV0Yy5cbiAgICAgKi9cbiAgICBwcml2YXRlIG9uQ2xvdWRBcGlBdXRoZW50aWNhdGlvbigpOiAoc291cmNlOiBPYnNlcnZhYmxlPEh0dHBSZXNwb25zZTxTZXNzaW9uPj4pID0+IE9ic2VydmFibGU8U2Vzc2lvbj4ge1xuICAgICAgICByZXR1cm4gKHNvdXJjZSkgPT4gc291cmNlLnBpcGUoXG4gICAgICAgICAgICB0YXAoKHJlc3A6IEh0dHBSZXNwb25zZTxTZXNzaW9uPikgPT4ge1xuICAgICAgICAgICAgICAgIC8vIEdldCBIQVRFT0FTIGxpbmtzXG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRDbG91ZEFwaVNlc3Npb25MaW5rcyhwYXJzZUhlYWRlckhhdGVvYXNMaW5rcyhyZXNwLmhlYWRlcnMuZ2V0KEhBVEVPQVNfSEVBREVSKSkpO1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ0Vycm9yIHdoZW4gcGFyc2luZyBzZXNzaW9uIEhBVEVPQVMgbGlua3M6JywgZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBtYXAocmVzcCA9PiByZXNwLmJvZHkpLFxuICAgICAgICAgICAgdGFwKChzZXNzaW9uOiBTZXNzaW9uKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gQ2xlYXIgcHJldmlvdXMgYWN0QXNcbiAgICAgICAgICAgICAgICB0aGlzLmFjdEFzKG51bGwpO1xuICAgICAgICAgICAgICAgIC8vIGF1dG9tYXRpY2FsbHkgc2V0IGFjdEFzIGZvciBwcm92aWRlciBpbiB0ZW5hbnQgc2NvcGVcbiAgICAgICAgICAgICAgICBpZiAoc2Vzc2lvbi5vcmcgJiYgc2Vzc2lvbi5vcmcubmFtZSA9PT0gJ1N5c3RlbScgJiYgdGhpcy5pbmplY3Rvci5nZXQoU0VTU0lPTl9TQ09QRSkgPT09ICd0ZW5hbnQnKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEF1dG9tYXRpYyBhY3RBcyBvbmx5IHdvcmtzIGluIHZlcnNpb25zID49OS41XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFjdEFzKHsgaWQ6IHRoaXMuaW5qZWN0b3IuZ2V0KFNFU1NJT05fT1JHX0lEKSB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdObyBTRVNTSU9OX09SR19JRCBzZXQgaW4gY29udGFpbmVyLiBBdXRvbWF0aWMgYWN0QXMgaXMgZGlzYWJsZWQuJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHRhcCgoc2Vzc2lvbjogU2Vzc2lvbikgPT4gdGhpcy5fY2xvdWRBcGlTZXNzaW9uLm5leHQoc2Vzc2lvbikpLFxuICAgICAgICAgICAgY2F0Y2hFcnJvcigoZSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMub25DbG91ZEFwaUF1dGhlbnRpY2F0aW9uRXJyb3IoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihlKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvbkNsb3VkQXBpQXV0aGVudGljYXRpb25FcnJvcigpIHtcbiAgICAgICAgLy8gQ2xlYXIgdGhlIGF1dGhlbnRpY2F0aW9uIHNvIHRoYXQgYW55IHN1YnNlcXVlbnQgYmFja2VuZCBjYWxscyBhcmUgbm90IGF1dGhlbnRpY2F0ZWRcbiAgICAgICAgdGhpcy5odHRwLnJlcXVlc3RIZWFkZXJzSW50ZXJjZXB0b3IuYXV0aGVudGljYXRpb24gPSAnJztcbiAgICAgICAgLy8gX2dldENsb3VkQXBpU2Vzc2lvbiBpcyBpbiB0aGUgY2VudGVyIG9mIGFueSBiYWNrZW5kIGNhbGwsIG51bGxpZnkgaXQgaW4gb3JkZXIgbm90IHRvIHByZXZlbnQgdGhvc2UgY2FsbHNcbiAgICAgICAgLy8gc2luY2UgaXQgaXMgZWFzaWVyIHRvIHRyb3VibGVzaG9vdCBmYWlsaW5nIGJhY2tlbmQgcmF0aGVyIHRoYW4gbm8gY2FsbFxuICAgICAgICB0aGlzLl9nZXRDbG91ZEFwaVNlc3Npb24gPSBvZihudWxsKTtcbiAgICAgICAgLy8gQ2xlYXIgdGhlIGxpbmtzXG4gICAgICAgIHRoaXMuX2Nsb3VkQXBpU2Vzc2lvbkxpbmtzLm5leHQoW10pO1xuICAgICAgICAvLyBDbGVhciB0aGUgc2Vzc2lvblxuICAgICAgICB0aGlzLl9jbG91ZEFwaVNlc3Npb24ubmV4dChudWxsKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldENsb3VkQXBpU2Vzc2lvbkxpbmtzKGxpbmtzOiBMaW5rVHlwZVtdKSB7XG4gICAgICAgIHRoaXMuX2Nsb3VkQXBpQWNjZXNzaWJsZUxvY2F0aW9ucyA9IG51bGw7XG4gICAgICAgIHRoaXMuX2Nsb3VkQXBpU2Vzc2lvbkxpbmtzLm5leHQobGlua3MgfHwgW10pO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQ8VD4oZW5kcG9pbnQ6IHN0cmluZywgIG9wdGlvbnM/OiB7IGhlYWRlcnM/OiBIdHRwSGVhZGVycyB9KTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbGlkYXRlUmVxdWVzdENvbnRleHQoKS5waXBlKFxuICAgICAgICAgICAgY29uY2F0TWFwKCgpID0+IHRoaXMuaHR0cC5nZXQ8VD4odGhpcy5idWlsZEVuZHBvaW50VXJsKGVuZHBvaW50KSwgey4uLm9wdGlvbnN9KSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbGlzdDxUPihlbmRwb2ludDogc3RyaW5nLCBxdWVyeUJ1aWxkZXI/OiBRdWVyeS5CdWlsZGVyLCBtdWx0aXNpdGU/OiBib29sZWFuIHwgQXV0aG9yaXplZExvY2F0aW9uVHlwZVtdLCBvcHRpb25zPzogeyBoZWFkZXJzPzogSHR0cEhlYWRlcnMgfSkge1xuICAgICAgICBsZXQgdXJsID0gdGhpcy5idWlsZEVuZHBvaW50VXJsKGVuZHBvaW50KTtcblxuICAgICAgICBpZiAocXVlcnlCdWlsZGVyKSB7XG4gICAgICAgICAgICB1cmwgPSBgJHt1cmx9JHtxdWVyeUJ1aWxkZXIuZ2V0Q2xvdWRBUEkoKX1gO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG11bHRpc2l0ZSkge1xuICAgICAgICAgICAgaWYgKCFvcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8VD4odXJsLCB7IGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh7IF9tdWx0aXNpdGU6IHRoaXMucGFyc2VNdWx0aXNpdGVWYWx1ZShtdWx0aXNpdGUpIH0pIH0pO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChvcHRpb25zPy5oZWFkZXJzKSB7XG4gICAgICAgICAgICAgICAgb3B0aW9ucy5oZWFkZXJzLmFwcGVuZChcIl9tdWx0aXNpdGVcIiwgdGhpcy5wYXJzZU11bHRpc2l0ZVZhbHVlKG11bHRpc2l0ZSkpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PFQ+KHVybCwgeyAuLi5vcHRpb25zIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMudmFsaWRhdGVSZXF1ZXN0Q29udGV4dCgpLnBpcGUoXG4gICAgICAgICAgICBjb25jYXRNYXAoKCkgPT4gdGhpcy5odHRwLmdldDxUPih1cmwsIHsgLi4ub3B0aW9ucyB9KSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY3JlYXRlU3luYzxUPihlbmRwb2ludDogc3RyaW5nLCBpdGVtOiBULCBvcHRpb25zPzogeyBoZWFkZXJzPzogSHR0cEhlYWRlcnMgfSk6IE9ic2VydmFibGU8VD4ge1xuICAgICAgICByZXR1cm4gdGhpcy52YWxpZGF0ZVJlcXVlc3RDb250ZXh0KCkucGlwZShcbiAgICAgICAgICAgIGNvbmNhdE1hcCgoKSA9PiB0aGlzLmh0dHAucG9zdDxUPihcbiAgICAgICAgICAgICAgICB0aGlzLmJ1aWxkRW5kcG9pbnRVcmwoZW5kcG9pbnQpLFxuICAgICAgICAgICAgICAgIGl0ZW0sXG4gICAgICAgICAgICAgICAgey4uLm9wdGlvbnN9XG4gICAgICAgICAgICApKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHB1YmxpYyBjcmVhdGVBc3luYzxUPihlbmRwb2ludDogc3RyaW5nLCBpdGVtOiBULCBvcHRpb25zPzogeyBoZWFkZXJzPzogSHR0cEhlYWRlcnMgfSk6IE9ic2VydmFibGU8VGFza1R5cGU+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsaWRhdGVSZXF1ZXN0Q29udGV4dCgpLnBpcGUoXG4gICAgICAgICAgICBjb25jYXRNYXAoKCkgPT4gdGhpcy5odHRwLnBvc3QoXG4gICAgICAgICAgICAgICAgdGhpcy5idWlsZEVuZHBvaW50VXJsKGVuZHBvaW50KSxcbiAgICAgICAgICAgICAgICBpdGVtLFxuICAgICAgICAgICAgICAgIHsgLi4ub3B0aW9ucywgb2JzZXJ2ZTogJ3Jlc3BvbnNlJyB9XG4gICAgICAgICAgICApKSxcbiAgICAgICAgICAgIGNvbmNhdE1hcChyZXNwb25zZSA9PiB0aGlzLm1hcFJlc3BvbnNlVG9UYXNrKHJlc3BvbnNlLCAnUE9TVCcpKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRUcmFuc2Zlckxpbms8VD4oZW5kcG9pbnQ6IHN0cmluZywgaXRlbTogVCwgdHJhbnNmZXJSZWw6IHN0cmluZyA9IFRSQU5TRkVSX0xJTktfUkVMKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgICAgICAgLnBvc3QodGhpcy5idWlsZEVuZHBvaW50VXJsKGVuZHBvaW50KSwgaXRlbSwgeyBvYnNlcnZlOiAncmVzcG9uc2UnIH0pXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBtYXAoKHJlczogSHR0cFJlc3BvbnNlPFQgJiBOYXZpZ2FibGU+KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGhlYWRlckxpbmtzOiBMaW5rVHlwZVtdID0gcmVzLmhlYWRlcnMuaGFzKEhBVEVPQVNfSEVBREVSKVxuICAgICAgICAgICAgICAgICAgICAgICAgPyBwYXJzZUhlYWRlckhhdGVvYXNMaW5rcyhyZXMuaGVhZGVycy5nZXQoSEFURU9BU19IRUFERVIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBbXTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbGlua3M6IExpbmtUeXBlW10gPSByZXMuYm9keSA/IChyZXMuYm9keS5saW5rIHx8IFtdKSA6IFtdO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBsaW5rID0gWy4uLmhlYWRlckxpbmtzLCAuLi5saW5rc11cbiAgICAgICAgICAgICAgICAgICAgICAgIC5maW5kKChsKSA9PiBsLnJlbCA9PT0gdHJhbnNmZXJSZWwpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWxpbmspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgUmVzcG9uc2UgZnJvbSAke2VuZHBvaW50fSBkaWQgbm90IGNvbnRhaW4gYSB0cmFuc2ZlciBsaW5rYCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxpbmsuaHJlZjtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhcnRUcmFuc2ZlcjxUPihlbmRwb2ludDogc3RyaW5nLCBpdGVtOiBULCB0cmFuc2ZlclJlbDogc3RyaW5nID0gVFJBTlNGRVJfTElOS19SRUwpOiBPYnNlcnZhYmxlPFZjZFRyYW5zZmVyQ2xpZW50PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFRyYW5zZmVyTGluayhlbmRwb2ludCwgaXRlbSwgdHJhbnNmZXJSZWwpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBtYXAoKHRyYW5zZmVyVXJsKSA9PiBuZXcgVmNkVHJhbnNmZXJDbGllbnQodGhpcy5odHRwLCB0cmFuc2ZlclVybCkpXG4gICAgICAgICAgICApO1xuICAgIH1cblxuICAgIHB1YmxpYyB1cGRhdGVTeW5jPFQ+KGVuZHBvaW50OiBzdHJpbmcsIGl0ZW06IFQsIG9wdGlvbnM/OiB7IGhlYWRlcnM/OiBIdHRwSGVhZGVycyB9KTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbGlkYXRlUmVxdWVzdENvbnRleHQoKS5waXBlKFxuICAgICAgICAgICAgY29uY2F0TWFwKCgpID0+IHRoaXMuaHR0cC5wdXQ8VD4oXG4gICAgICAgICAgICAgICAgdGhpcy5idWlsZEVuZHBvaW50VXJsKGVuZHBvaW50KSxcbiAgICAgICAgICAgICAgICBpdGVtLFxuICAgICAgICAgICAgICAgIHsgLi4ub3B0aW9ucyB9XG4gICAgICAgICAgICApKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHB1YmxpYyB1cGRhdGVBc3luYzxUPihlbmRwb2ludDogc3RyaW5nLCBpdGVtOiBULCBvcHRpb25zPzogeyBoZWFkZXJzPzogSHR0cEhlYWRlcnMgfSk6IE9ic2VydmFibGU8VGFza1R5cGU+IHtcblxuICAgICAgICByZXR1cm4gdGhpcy52YWxpZGF0ZVJlcXVlc3RDb250ZXh0KCkucGlwZShcbiAgICAgICAgICAgIGNvbmNhdE1hcCgoKSA9PiB0aGlzLmh0dHAucHV0KFxuICAgICAgICAgICAgICAgIHRoaXMuYnVpbGRFbmRwb2ludFVybChlbmRwb2ludCksXG4gICAgICAgICAgICAgICAgaXRlbSxcbiAgICAgICAgICAgICAgICB7IC4uLm9wdGlvbnMsIG9ic2VydmU6ICdyZXNwb25zZScgfVxuICAgICAgICAgICAgKSksXG4gICAgICAgICAgICBjb25jYXRNYXAocmVzcG9uc2UgPT4gdGhpcy5tYXBSZXNwb25zZVRvVGFzayhyZXNwb25zZSwgJ1BVVCcpKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHB1YmxpYyBkZWxldGVTeW5jKGVuZHBvaW50OiBzdHJpbmcsIG9wdGlvbnM/OiB7IGhlYWRlcnM/OiBIdHRwSGVhZGVycyB9KTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbGlkYXRlUmVxdWVzdENvbnRleHQoKS5waXBlKFxuICAgICAgICAgICAgY29uY2F0TWFwKCgpID0+IHRoaXMuaHR0cC5kZWxldGU8dm9pZD4odGhpcy5idWlsZEVuZHBvaW50VXJsKGVuZHBvaW50KSwgeyAuLi5vcHRpb25zIH0pKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHB1YmxpYyBkZWxldGVBc3luYyhlbmRwb2ludDogc3RyaW5nLCBvcHRpb25zPzogeyBoZWFkZXJzPzogSHR0cEhlYWRlcnMgfSk6IE9ic2VydmFibGU8VGFza1R5cGU+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsaWRhdGVSZXF1ZXN0Q29udGV4dCgpLnBpcGUoXG4gICAgICAgICAgICBjb25jYXRNYXAoKCkgPT4gdGhpcy5odHRwLmRlbGV0ZSh0aGlzLmJ1aWxkRW5kcG9pbnRVcmwoZW5kcG9pbnQpLCB7IC4uLm9wdGlvbnMsIG9ic2VydmU6ICdyZXNwb25zZScgfSkpLFxuICAgICAgICAgICAgY29uY2F0TWFwKHJlc3BvbnNlID0+IHRoaXMubWFwUmVzcG9uc2VUb1Rhc2socmVzcG9uc2UsICdERUxFVEUnKSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG1hcFJlc3BvbnNlVG9UYXNrKHJlc3BvbnNlOiBIdHRwUmVzcG9uc2U8YW55PiwgaHR0cFZlcmI6IHN0cmluZyk6IE9ic2VydmFibGU8VGFza1R5cGU+IHtcbiAgICAgICAgaWYgKHJlc3BvbnNlLmhlYWRlcnMuaGFzKCdMb2NhdGlvbicpICYmIHJlc3BvbnNlLnN0YXR1cyA9PT0gMjAyKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxUYXNrVHlwZT4ocmVzcG9uc2UuaGVhZGVycy5nZXQoJ0xvY2F0aW9uJykpO1xuICAgICAgICB9IGVsc2UgaWYgKHJlc3BvbnNlLmJvZHkgJiYgcmVzcG9uc2UuYm9keS50eXBlLnN0YXJ0c1dpdGgoJ2FwcGxpY2F0aW9uL3ZuZC52bXdhcmUudmNsb3VkLnRhc2srJykpIHtcbiAgICAgICAgICAgIGNvbnN0IHRhc2s6IFRhc2tUeXBlID0gT2JqZWN0LmFzc2lnbihuZXcgVGFza1R5cGUoKSwgcmVzcG9uc2UuYm9keSk7XG4gICAgICAgICAgICByZXR1cm4gb2YodGFzayk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBuZXcgRXJyb3IoYEFuIGFzeW5jaHJvbm91cyByZXF1ZXN0IHdhcyBtYWRlIHRvIFske2h0dHBWZXJifSAke3Jlc3BvbnNlLnVybH1dLCBidXQgbm8gdGFzayB3YXMgcmV0dXJuZWQuICBUaGUgb3BlcmF0aW9uIG1heSBzdGlsbCBoYXZlIGJlZW4gc3VjY2Vzc2Z1bC5gKSk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEVudGl0eTxUIGV4dGVuZHMgRW50aXR5UmVmZXJlbmNlVHlwZT4oZW50aXR5UmVmOiBFbnRpdHlSZWZlcmVuY2VUeXBlKTogT2JzZXJ2YWJsZTxUPjtcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6dW5pZmllZC1zaWduYXR1cmVzXG4gICAgcHVibGljIGdldEVudGl0eTxUIGV4dGVuZHMgRW50aXR5UmVmZXJlbmNlVHlwZT4odXJuOiBzdHJpbmcpOiBPYnNlcnZhYmxlPFQ+O1xuICAgIHB1YmxpYyBnZXRFbnRpdHk8VCBleHRlbmRzIEVudGl0eVJlZmVyZW5jZVR5cGU+KGVudGl0eVJlZk9yVXJuOiBFbnRpdHlSZWZlcmVuY2VUeXBlIHwgc3RyaW5nKTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgICAgIGNvbnN0IGVudGl0eVJlc29sdmVyOiBPYnNlcnZhYmxlPEVudGl0eVR5cGU+ID0gdHlwZW9mIGVudGl0eVJlZk9yVXJuID09PSAnc3RyaW5nJyA/XG4gICAgICAgICAgICB0aGlzLmh0dHAuZ2V0PEVudGl0eVR5cGU+KGAke3RoaXMuX2Jhc2VVcmx9L2FwaS9lbnRpdHkvJHtlbnRpdHlSZWZPclVybn1gKSA6XG4gICAgICAgICAgICB0aGlzLmh0dHAuZ2V0PEVudGl0eVR5cGU+KGAke3RoaXMuX2Jhc2VVcmx9L2FwaS9lbnRpdHkvdXJuOnZjbG91ZDoke2VudGl0eVJlZk9yVXJuLnR5cGV9OiR7ZW50aXR5UmVmT3JVcm4uaWR9YCk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMudmFsaWRhdGVSZXF1ZXN0Q29udGV4dCgpLnBpcGUoXG4gICAgICAgICAgICBjb25jYXRNYXAoKCkgPT4gZW50aXR5UmVzb2x2ZXIpLFxuICAgICAgICAgICAgY29uY2F0TWFwKGVudGl0eSA9PiB0aGlzLmh0dHAuZ2V0PFQ+KGAke2VudGl0eS5saW5rWzBdLmhyZWZ9YCkpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIHVwZGF0ZVRhc2sodGFzazogVGFza1R5cGUsIG9wdGlvbnM/OiB7IGhlYWRlcnM/OiBIdHRwSGVhZGVycyB9KTogT2JzZXJ2YWJsZTxUYXNrVHlwZT4ge1xuICAgICAgICByZXR1cm4gdGhpcy52YWxpZGF0ZVJlcXVlc3RDb250ZXh0KCkucGlwZShcbiAgICAgICAgICAgIGNvbmNhdE1hcCgoKSA9PiB0aGlzLmh0dHAuZ2V0PFRhc2tUeXBlPih0YXNrLmhyZWYsIHsgLi4ub3B0aW9ucyB9KSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaXNUYXNrQ29tcGxldGUodGFzazogVGFza1R5cGUpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIFsnc3VjY2VzcycsICdlcnJvcicsICdjYW5jZWxlZCcsICdhYm9ydGVkJ10uaW5kZXhPZih0YXNrLnN0YXR1cykgPiAtMTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVtb3ZlSXRlbShpdGVtOiBOYXZpZ2FibGUsIG9wdGlvbnM/OiB7IGhlYWRlcnM/OiBIdHRwSGVhZGVycyB9KTogT2JzZXJ2YWJsZTxUYXNrVHlwZT4ge1xuICAgICAgICBjb25zdCBsaW5rOiBMaW5rVHlwZSA9IHRoaXMuZmluZExpbmsoaXRlbSwgJ3JlbW92ZScsIG51bGwpO1xuICAgICAgICBpZiAoIWxpbmspIHtcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IG5ldyBFcnJvcihgTm8gJ3JlbW92ZScgbGluayBmb3Igc3BlY2lmaWVkIHJlc291cmNlLmApKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLnZhbGlkYXRlUmVxdWVzdENvbnRleHQoKS5waXBlKFxuICAgICAgICAgICAgY29uY2F0TWFwKCgpID0+IHRoaXMuaHR0cC5kZWxldGU8VGFza1R5cGU+KGxpbmsuaHJlZiwgeyAuLi5vcHRpb25zIH0pKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFF1ZXJpZXMgdGhlIFZNd2FyZSBDbG91ZCBEaXJlY3RvciBBUEkgYmFzZWQgb24gdGhlIHNwZWNpZmllZCBRdWVyeS5CdWlsZGVyIGluc3RhbmNlLlxuICAgICAqXG4gICAgICogQHBhcmFtIGJ1aWxkZXIgQW4gZGVmaW5pdGlvbiBvZiB0aGUgcXVlcnkgdG8gY29uc3RydWN0ICh0eXBlLCBmaWx0ZXIsIHBhZ2Ugc2l6ZSwgZXRjLilcbiAgICAgKiBAcGFyYW0gbXVsdGlzaXRlIGEgZmxhZyBpbmRpY2F0aW5nIHdoZXRoZXIgb3Igbm90IHRvIGZhbiB0aGUgcXVlcnkgb3V0IHRvIGFsbCBhdmFpbGFibGUgc2l0ZXNcbiAgICAgKiBAcmV0dXJucyBhIHF1ZXJ5IHJlc3VsdCBmb3IgdGhlIHNwZWNpZmllZCBxdWVyeVxuICAgICAqL1xuICAgIHB1YmxpYyBxdWVyeTxUPihidWlsZGVyOiBRdWVyeS5CdWlsZGVyLCBtdWx0aXNpdGU/OiBib29sZWFuLCBvcHRpb25zPzogeyBoZWFkZXJzPzogSHR0cEhlYWRlcnMgfSk6IE9ic2VydmFibGU8VD47XG4gICAgLyoqXG4gICAgICogUXVlcmllcyB0aGUgVk13YXJlIENsb3VkIERpcmVjdG9yIEFQSSBiYXNlZCBvbiB0aGUgc3BlY2lmaWVkIFF1ZXJ5LkJ1aWxkZXIgaW5zdGFuY2UuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gYnVpbGRlciBBbiBkZWZpbml0aW9uIG9mIHRoZSBxdWVyeSB0byBjb25zdHJ1Y3QgKHR5cGUsIGZpbHRlciwgcGFnZSBzaXplLCBldGMuKVxuICAgICAqIEBwYXJhbSBtdWx0aXNpdGUgdGhlIHNldCBvZiBzaXRlIGxvY2F0aW9ucyB0byBpbmNsdWRlIGluIHRoZSBxdWVyeSBmYW5vdXRcbiAgICAgKiBAcmV0dXJucyBhIHF1ZXJ5IHJlc3VsdCBmb3IgdGhlIHNwZWNpZmllZCBxdWVyeVxuICAgICAqL1xuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTp1bmlmaWVkLXNpZ25hdHVyZXNcbiAgICBwdWJsaWMgcXVlcnk8VD4oYnVpbGRlcjogUXVlcnkuQnVpbGRlciwgbXVsdGlzaXRlPzogQXV0aG9yaXplZExvY2F0aW9uVHlwZVtdLCBvcHRpb25zPzogeyBoZWFkZXJzPzogSHR0cEhlYWRlcnMgfSk6IE9ic2VydmFibGU8VD47XG4gICAgcHVibGljIHF1ZXJ5PFQ+KGJ1aWxkZXI6IFF1ZXJ5LkJ1aWxkZXIsIG11bHRpc2l0ZT86IGFueSwgb3B0aW9ucz86IHsgaGVhZGVycz86IEh0dHBIZWFkZXJzIH0pOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UXVlcnlQYWdlKGAke3RoaXMuX2Jhc2VVcmx9L2FwaS9xdWVyeSR7YnVpbGRlci5nZXQoKX1gLCBtdWx0aXNpdGUsIG9wdGlvbnMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFF1ZXJpZXMgdGhlIFZNd2FyZSBDbG91ZCBEaXJlY3RvciBBUEkgZm9yIHRoZSBmaXJzdCBwYWdlIG9mIHRoZSBwcm92aWRlZCByZXN1bHQgc2V0LlxuICAgICAqXG4gICAgICogQHBhcmFtIHJlc3VsdCB0aGUgcmVzdWx0IHNldCB0byByZXRyaWV2ZSB0aGUgZmlyc3QgcGFnZSBvZiByZWNvcmRzIGZvclxuICAgICAqIEBwYXJhbSBtdWx0aXNpdGUgYSBmbGFnIGluZGljYXRpbmcgd2hldGhlciBvciBub3QgdG8gZmFuIHRoZSBxdWVyeSBvdXQgdG8gYWxsIGF2YWlsYWJsZSBzaXRlc1xuICAgICAqIEByZXR1cm5zIHRoZSByZWNvcmRzIGZvciB0aGUgZmlyc3QgcGFnZSBvZiB0aGUgcXVlcnlcbiAgICAgKi9cbiAgICBwdWJsaWMgZmlyc3RQYWdlPFQ+KHJlc3VsdDogVCwgbXVsdGlzaXRlPzogYm9vbGVhbiwgb3B0aW9ucz86IHsgaGVhZGVycz86IEh0dHBIZWFkZXJzIH0pOiBPYnNlcnZhYmxlPFQ+O1xuICAgIC8qKlxuICAgICAqIFF1ZXJpZXMgdGhlIFZNd2FyZSBDbG91ZCBEaXJlY3RvciBBUEkgZm9yIHRoZSBmaXJzdCBwYWdlIG9mIHRoZSBwcm92aWRlZCByZXN1bHQgc2V0LlxuICAgICAqXG4gICAgICogQHBhcmFtIHJlc3VsdCB0aGUgcmVzdWx0IHNldCB0byByZXRyaWV2ZSB0aGUgZmlyc3QgcGFnZSBvZiByZWNvcmRzIGZvclxuICAgICAqIEBwYXJhbSBtdWx0aXNpdGUgdGhlIHNldCBvZiBzaXRlIGxvY2F0aW9ucyB0byBpbmNsdWRlIGluIHRoZSBxdWVyeSBmYW5vdXRcbiAgICAgKiBAcmV0dXJucyB0aGUgcmVjb3JkcyBmb3IgdGhlIGZpcnN0IHBhZ2Ugb2YgdGhlIHF1ZXJ5XG4gICAgICovXG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnVuaWZpZWQtc2lnbmF0dXJlc1xuICAgIHB1YmxpYyBmaXJzdFBhZ2U8VD4ocmVzdWx0OiBULCBtdWx0aXNpdGU/OiBBdXRob3JpemVkTG9jYXRpb25UeXBlW10sIG9wdGlvbnM/OiB7IGhlYWRlcnM/OiBIdHRwSGVhZGVycyB9KTogT2JzZXJ2YWJsZTxUPjtcbiAgICBwdWJsaWMgZmlyc3RQYWdlPFQ+KHJlc3VsdDogVCwgbXVsdGlzaXRlPzogYW55LCBvcHRpb25zPzogeyBoZWFkZXJzPzogSHR0cEhlYWRlcnMgfSk6IE9ic2VydmFibGU8VD4ge1xuICAgICAgICBjb25zdCBsaW5rOiBMaW5rVHlwZSA9IHRoaXMuZmluZExpbmsocmVzdWx0LCAnZmlyc3RQYWdlJywgKHJlc3VsdCBhcyBSZXNvdXJjZVR5cGUpLnR5cGUpO1xuICAgICAgICBpZiAoIWxpbmspIHtcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IG5ldyBFcnJvcihgTm8gJ2ZpcnN0UGFnZScgbGluayBmb3Igc3BlY2lmaWVkIHF1ZXJ5LmApKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmdldFF1ZXJ5UGFnZShsaW5rLmhyZWYsIG11bHRpc2l0ZSwgb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgcHVibGljIGhhc0ZpcnN0UGFnZTxUPihyZXN1bHQ6IFQpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5maW5kTGluayhyZXN1bHQsICdmaXJzdFBhZ2UnLCAocmVzdWx0IGFzIFJlc291cmNlVHlwZSkudHlwZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUXVlcmllcyB0aGUgVk13YXJlIENsb3VkIERpcmVjdG9yIEFQSSBmb3IgdGhlIHByZXZpb3VzIHBhZ2Ugb2YgdGhlIHByb3ZpZGVkIHJlc3VsdCBzZXQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcmVzdWx0IHRoZSByZXN1bHQgc2V0IHRvIHJldHJpZXZlIHRoZSBwcmV2aW91cyBwYWdlIG9mIHJlY29yZHMgZm9yXG4gICAgICogQHBhcmFtIG11bHRpc2l0ZSBhIGZsYWcgaW5kaWNhdGluZyB3aGV0aGVyIG9yIG5vdCB0byBmYW4gdGhlIHF1ZXJ5IG91dCB0byBhbGwgYXZhaWxhYmxlIHNpdGVzXG4gICAgICogQHJldHVybnMgdGhlIHJlY29yZHMgZm9yIHRoZSBwcmV2aW91cyBwYWdlIG9mIHRoZSBxdWVyeVxuICAgICAqL1xuICAgIHB1YmxpYyBwcmV2aW91c1BhZ2U8VD4ocmVzdWx0OiBULCBtdWx0aXNpdGU/OiBib29sZWFuLCBvcHRpb25zPzogeyBoZWFkZXJzPzogSHR0cEhlYWRlcnMgfSk6IE9ic2VydmFibGU8VD47XG4gICAgLyoqXG4gICAgICogUXVlcmllcyB0aGUgVk13YXJlIENsb3VkIERpcmVjdG9yIEFQSSBmb3IgdGhlIHByZXZpb3VzIHBhZ2Ugb2YgdGhlIHByb3ZpZGVkIHJlc3VsdCBzZXQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcmVzdWx0IHRoZSByZXN1bHQgc2V0IHRvIHJldHJpZXZlIHRoZSBwcmV2aW91cyBwYWdlIG9mIHJlY29yZHMgZm9yXG4gICAgICogQHBhcmFtIG11bHRpc2l0ZSB0aGUgc2V0IG9mIHNpdGUgbG9jYXRpb25zIHRvIGluY2x1ZGUgaW4gdGhlIHF1ZXJ5IGZhbm91dFxuICAgICAqIEByZXR1cm5zIHRoZSByZWNvcmRzIGZvciB0aGUgcHJldmlvdXMgcGFnZSBvZiB0aGUgcXVlcnlcbiAgICAgKi9cbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6dW5pZmllZC1zaWduYXR1cmVzXG4gICAgcHVibGljIHByZXZpb3VzUGFnZTxUPihyZXN1bHQ6IFQsIG11bHRpc2l0ZT86IEF1dGhvcml6ZWRMb2NhdGlvblR5cGVbXSwgb3B0aW9ucz86IHsgaGVhZGVycz86IEh0dHBIZWFkZXJzIH0pOiBPYnNlcnZhYmxlPFQ+O1xuICAgIHB1YmxpYyBwcmV2aW91c1BhZ2U8VD4ocmVzdWx0OiBULCBtdWx0aXNpdGU/OiBhbnksIG9wdGlvbnM/OiB7IGhlYWRlcnM/OiBIdHRwSGVhZGVycyB9KTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgICAgIGNvbnN0IGxpbms6IExpbmtUeXBlID0gdGhpcy5maW5kTGluayhyZXN1bHQsICdwcmV2aW91c1BhZ2UnLCAocmVzdWx0IGFzIFJlc291cmNlVHlwZSkudHlwZSk7XG4gICAgICAgIGlmICghbGluaykge1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gbmV3IEVycm9yKGBObyAncHJldmlvdXNQYWdlJyBsaW5rIGZvciBzcGVjaWZpZWQgcXVlcnkuYCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UXVlcnlQYWdlKGxpbmsuaHJlZiwgbXVsdGlzaXRlLCBvcHRpb25zKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaGFzUHJldmlvdXNQYWdlPFQ+KHJlc3VsdDogVCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gISF0aGlzLmZpbmRMaW5rKHJlc3VsdCwgJ3ByZXZpb3VzUGFnZScsIChyZXN1bHQgYXMgUmVzb3VyY2VUeXBlKS50eXBlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBRdWVyaWVzIHRoZSBWTXdhcmUgQ2xvdWQgRGlyZWN0b3IgQVBJIGZvciB0aGUgbmV4dCBwYWdlIG9mIHRoZSBwcm92aWRlZCByZXN1bHQgc2V0LlxuICAgICAqXG4gICAgICogQHBhcmFtIHJlc3VsdCB0aGUgcmVzdWx0IHNldCB0byByZXRyaWV2ZSB0aGUgbmV4dCBwYWdlIG9mIHJlY29yZHMgZm9yXG4gICAgICogQHBhcmFtIG11bHRpc2l0ZSBhIGZsYWcgaW5kaWNhdGluZyB3aGV0aGVyIG9yIG5vdCB0byBmYW4gdGhlIHF1ZXJ5IG91dCB0byBhbGwgYXZhaWxhYmxlIHNpdGVzXG4gICAgICogQHJldHVybnMgdGhlIHJlY29yZHMgZm9yIHRoZSBuZXh0IHBhZ2Ugb2YgdGhlIHF1ZXJ5XG4gICAgICovXG4gICAgcHVibGljIG5leHRQYWdlPFQ+KHJlc3VsdDogVCwgbXVsdGlzaXRlPzogYm9vbGVhbiwgb3B0aW9ucz86IHsgaGVhZGVycz86IEh0dHBIZWFkZXJzIH0pOiBPYnNlcnZhYmxlPFQ+O1xuICAgIC8qKlxuICAgICAqIFF1ZXJpZXMgdGhlIFZNd2FyZSBDbG91ZCBEaXJlY3RvciBBUEkgZm9yIHRoZSBuZXh0IHBhZ2Ugb2YgdGhlIHByb3ZpZGVkIHJlc3VsdCBzZXQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcmVzdWx0IHRoZSByZXN1bHQgc2V0IHRvIHJldHJpZXZlIHRoZSBuZXh0IHBhZ2Ugb2YgcmVjb3JkcyBmb3JcbiAgICAgKiBAcGFyYW0gbXVsdGlzaXRlIHRoZSBzZXQgb2Ygc2l0ZSBsb2NhdGlvbnMgdG8gaW5jbHVkZSBpbiB0aGUgcXVlcnkgZmFub3V0XG4gICAgICogQHJldHVybnMgdGhlIHJlY29yZHMgZm9yIHRoZSBuZXh0IHBhZ2Ugb2YgdGhlIHF1ZXJ5XG4gICAgICovXG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnVuaWZpZWQtc2lnbmF0dXJlc1xuICAgIHB1YmxpYyBuZXh0UGFnZTxUPihyZXN1bHQ6IFQsIG11bHRpc2l0ZT86IEF1dGhvcml6ZWRMb2NhdGlvblR5cGVbXSwgb3B0aW9ucz86IHsgaGVhZGVycz86IEh0dHBIZWFkZXJzIH0pOiBPYnNlcnZhYmxlPFQ+O1xuICAgIHB1YmxpYyBuZXh0UGFnZTxUPihyZXN1bHQ6IFQsIG11bHRpc2l0ZT86IGFueSwgb3B0aW9ucz86IHsgaGVhZGVycz86IEh0dHBIZWFkZXJzIH0pOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICAgICAgY29uc3QgbGluazogTGlua1R5cGUgPSB0aGlzLmZpbmRMaW5rKHJlc3VsdCwgJ25leHRQYWdlJywgKHJlc3VsdCBhcyBSZXNvdXJjZVR5cGUpLnR5cGUpO1xuICAgICAgICBpZiAoIWxpbmspIHtcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IG5ldyBFcnJvcihgTm8gJ25leHRQYWdlJyBsaW5rIGZvciBzcGVjaWZpZWQgcXVlcnkuYCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UXVlcnlQYWdlPFQ+KGxpbmsuaHJlZiwgbXVsdGlzaXRlLCBvcHRpb25zKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaGFzTmV4dFBhZ2U8VD4ocmVzdWx0OiBUKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuZmluZExpbmsocmVzdWx0LCAnbmV4dFBhZ2UnLCAocmVzdWx0IGFzIFJlc291cmNlVHlwZSkudHlwZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUXVlcmllcyB0aGUgVk13YXJlIENsb3VkIERpcmVjdG9yIEFQSSBmb3IgdGhlIGxhc3QgcGFnZSBvZiB0aGUgcHJvdmlkZWQgcmVzdWx0IHNldC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSByZXN1bHQgdGhlIHJlc3VsdCBzZXQgdG8gcmV0cmlldmUgdGhlIGxhc3QgcGFnZSBvZiByZWNvcmRzIGZvclxuICAgICAqIEBwYXJhbSBtdWx0aXNpdGUgYSBmbGFnIGluZGljYXRpbmcgd2hldGhlciBvciBub3QgdG8gZmFuIHRoZSBxdWVyeSBvdXQgdG8gYWxsIGF2YWlsYWJsZSBzaXRlc1xuICAgICAqIEByZXR1cm5zIHRoZSByZWNvcmRzIGZvciB0aGUgbGFzdCBwYWdlIG9mIHRoZSBxdWVyeVxuICAgICAqL1xuICAgIHB1YmxpYyBsYXN0UGFnZTxUPihyZXN1bHQ6IFQsIG11bHRpc2l0ZT86IGJvb2xlYW4sIG9wdGlvbnM/OiB7IGhlYWRlcnM/OiBIdHRwSGVhZGVycyB9KTogT2JzZXJ2YWJsZTxUPjtcbiAgICAvKipcbiAgICAgKiBRdWVyaWVzIHRoZSBWTXdhcmUgQ2xvdWQgRGlyZWN0b3IgQVBJIGZvciB0aGUgbGFzdCBwYWdlIG9mIHRoZSBwcm92aWRlZCByZXN1bHQgc2V0LlxuICAgICAqXG4gICAgICogQHBhcmFtIHJlc3VsdCB0aGUgcmVzdWx0IHNldCB0byByZXRyaWV2ZSB0aGUgbGFzdCBwYWdlIG9mIHJlY29yZHMgZm9yXG4gICAgICogQHBhcmFtIG11bHRpc2l0ZSB0aGUgc2V0IG9mIHNpdGUgbG9jYXRpb25zIHRvIGluY2x1ZGUgaW4gdGhlIHF1ZXJ5IGZhbm91dFxuICAgICAqIEByZXR1cm5zIHRoZSByZWNvcmRzIGZvciB0aGUgbGFzdCBwYWdlIG9mIHRoZSBxdWVyeVxuICAgICAqL1xuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTp1bmlmaWVkLXNpZ25hdHVyZXNcbiAgICBwdWJsaWMgbGFzdFBhZ2U8VD4ocmVzdWx0OiBULCBtdWx0aXNpdGU/OiBBdXRob3JpemVkTG9jYXRpb25UeXBlW10sIG9wdGlvbnM/OiB7IGhlYWRlcnM/OiBIdHRwSGVhZGVycyB9KTogT2JzZXJ2YWJsZTxUPjtcbiAgICBwdWJsaWMgbGFzdFBhZ2U8VD4ocmVzdWx0OiBULCBtdWx0aXNpdGU/OiBhbnksIG9wdGlvbnM/OiB7IGhlYWRlcnM/OiBIdHRwSGVhZGVycyB9KTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgICAgIGNvbnN0IGxpbms6IExpbmtUeXBlID0gdGhpcy5maW5kTGluayhyZXN1bHQsICdsYXN0UGFnZScsIChyZXN1bHQgYXMgUmVzb3VyY2VUeXBlKS50eXBlKTtcbiAgICAgICAgaWYgKCFsaW5rKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBuZXcgRXJyb3IoYE5vICdsYXN0UGFnZScgbGluayBmb3Igc3BlY2lmaWVkIHF1ZXJ5LmApKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmdldFF1ZXJ5UGFnZShsaW5rLmhyZWYsIG11bHRpc2l0ZSwgb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgcHVibGljIGhhc0xhc3RQYWdlPFQ+KHJlc3VsdDogVCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gISF0aGlzLmZpbmRMaW5rKHJlc3VsdCwgJ2xhc3RQYWdlJywgKHJlc3VsdCBhcyBSZXNvdXJjZVR5cGUpLnR5cGUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0UXVlcnlQYWdlPFQ+KGhyZWY6IHN0cmluZywgbXVsdGlzaXRlPzogYW55LCBvcHRpb25zPzogeyBoZWFkZXJzPzogSHR0cEhlYWRlcnMgfSk6IE9ic2VydmFibGU8VD4ge1xuICAgICAgICBpZiAobXVsdGlzaXRlKSB7XG4gICAgICAgICAgICBpZiAoIW9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxUPihocmVmLCB7IGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh7IF9tdWx0aXNpdGU6IHRoaXMucGFyc2VNdWx0aXNpdGVWYWx1ZShtdWx0aXNpdGUpIH0pIH0pXG4gICAgICAgICAgICB9IGVsc2UgaWYgKG9wdGlvbnM/LmhlYWRlcnMpIHtcbiAgICAgICAgICAgICAgICBvcHRpb25zLmhlYWRlcnMuYXBwZW5kKFwiX211bHRpc2l0ZVwiLCB0aGlzLnBhcnNlTXVsdGlzaXRlVmFsdWUobXVsdGlzaXRlKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8VD4oaHJlZiwgeyAuLi5vcHRpb25zIH0pXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy52YWxpZGF0ZVJlcXVlc3RDb250ZXh0KCkucGlwZShcbiAgICAgICAgICAgIGNvbmNhdE1hcCgoKSA9PiB0aGlzLmh0dHAuZ2V0PFQ+KGhyZWYsIHsgLi4ub3B0aW9ucyB9KSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgLyoqXG4gICAqIFVzZSB0byBwZXJmb3JtIGFjdGlvbiBhdmFpbGFiaWxpdHkgY2hlY2sgYmVmb3JlIGNhbGxpbmcgdGhlIEFQSVxuICAgKiBAcGFyYW0gaXRlbSAtIHRoZSBuYXZpZ2FibGUgaXRlbSAoY29udGFpbmluZyBsaW5rIGNvbGxlY3Rpb24pXG4gICAqIEBwYXJhbSBsaW5rUmVsVHlwZSAtIHRoZSBsaW5rIHJlbCB0eXBlLCBwYXNzIGVpdGhlciBMaW5rUmVsVHlwZSBvciBzdHJpbmdcbiAgICogQHBhcmFtIGVudGl0eVJlZlR5cGUgLSB0aGUgZW50aXR5IHJlZmVyZW5jZSB0eXBlXG4gICAqL1xuICAgIHB1YmxpYyBjYW5QZXJmb3JtQWN0aW9uKGl0ZW06IE5hdmlnYWJsZSwgbGlua1JlbFR5cGU6IExpbmtSZWxUeXBlIHwgc3RyaW5nLCBlbnRpdHlSZWZUeXBlPzogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuZmluZExpbmsoaXRlbSwgbGlua1JlbFR5cGUsIGVudGl0eVJlZlR5cGUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZmluZExpbmsoaXRlbTogTmF2aWdhYmxlLCByZWw6IHN0cmluZywgdHlwZTogc3RyaW5nKTogTGlua1R5cGUge1xuICAgICAgICBpZiAoIWl0ZW0gfHwgIWl0ZW0ubGluaykge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBpdGVtLmxpbmsuZmluZCgobGluaykgPT4ge1xuICAgICAgICAgICAgaWYgKHR5cGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbGluay5yZWwuaW5jbHVkZXMocmVsKSAmJiBsaW5rLnR5cGUgPT09IHR5cGU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBsaW5rLnJlbC5pbmNsdWRlcyhyZWwpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHBhcnNlTXVsdGlzaXRlVmFsdWUobXVsdGlzaXRlOiBib29sZWFuIHwgQXV0aG9yaXplZExvY2F0aW9uVHlwZVtdKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiBtdWx0aXNpdGUgPT09ICdib29sZWFuJyA/IChtdWx0aXNpdGUgPyAnZ2xvYmFsJyA6ICdsb2NhbCcpIDogbXVsdGlzaXRlLm1hcChzaXRlID0+IHNpdGUubG9jYXRpb25JZCkuam9pbignLCcpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkIFVzZSBjbG91ZEFwaVNlc3Npb25cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IHNlc3Npb24oKTogT2JzZXJ2YWJsZTxTZXNzaW9uVHlwZT4ge1xuICAgICAgICByZXR1cm4gdGhpcy52YWxpZGF0ZVJlcXVlc3RDb250ZXh0KCkucGlwZShcbiAgICAgICAgICAgIGNvbmNhdE1hcCgoKSA9PiB0aGlzLl9zZXNzaW9uT2JzZXJ2YWJsZSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgU2Vzc2lvbiBvYnNlcnZhYmxlXG4gICAgICovXG4gICAgcHVibGljIGdldCBjbG91ZEFwaVNlc3Npb24oKTogT2JzZXJ2YWJsZTxTZXNzaW9uPiB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbGlkYXRlUmVxdWVzdENvbnRleHRDbG91ZEFwaU9ubHkoKS5waXBlKFxuICAgICAgICAgICAgY29uY2F0TWFwKCgpID0+IHRoaXMuX2Nsb3VkQXBpU2Vzc2lvbk9ic2VydmFibGUpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCB1c2VybmFtZSgpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgICAgICByZXR1cm4gbWVyZ2UoXG4gICAgICAgICAgICAgICAgdGhpcy5jbG91ZEFwaVNlc3Npb24ucGlwZShcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyKCgpID0+IHRoaXMuX2lzQ2xvdWRBcGlMb2dpbiksXG4gICAgICAgICAgICAgICAgICAgIG1hcChzZXNzaW9uID0+IHNlc3Npb24gJiYgc2Vzc2lvbi51c2VyICYmIHNlc3Npb24udXNlci5uYW1lKVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgdGhpcy5zZXNzaW9uLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgIGZpbHRlcigoKSA9PiAhdGhpcy5faXNDbG91ZEFwaUxvZ2luKSxcbiAgICAgICAgICAgICAgICAgICAgbWFwKHNlc3Npb24gPT4gc2Vzc2lvbiAmJiBzZXNzaW9uLnVzZXIpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IG9yZ2FuaXphdGlvbigpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgICAgICByZXR1cm4gbWVyZ2UoXG4gICAgICAgICAgICB0aGlzLmNsb3VkQXBpU2Vzc2lvbi5waXBlKFxuICAgICAgICAgICAgICAgIGZpbHRlcigoKSA9PiB0aGlzLl9pc0Nsb3VkQXBpTG9naW4pLFxuICAgICAgICAgICAgICAgIG1hcChzZXNzaW9uID0+IHNlc3Npb24gJiYgc2Vzc2lvbi5vcmcgJiYgc2Vzc2lvbi5vcmcubmFtZSlcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICB0aGlzLnNlc3Npb24ucGlwZShcbiAgICAgICAgICAgICAgICBmaWx0ZXIoKCkgPT4gIXRoaXMuX2lzQ2xvdWRBcGlMb2dpbiksXG4gICAgICAgICAgICAgICAgbWFwKHNlc3Npb24gPT4gc2Vzc2lvbiAmJiBzZXNzaW9uLm9yZylcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAZGVwcmVjYXRlZCBVc2UgY2xvdWRBcGlMb2NhdGlvblxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgbG9jYXRpb24oKTogT2JzZXJ2YWJsZTxBdXRob3JpemVkTG9jYXRpb25UeXBlPiB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlc3Npb24ucGlwZShcbiAgICAgICAgICAgIG1hcChzZXNzaW9uID0+IHNlc3Npb24uYXV0aG9yaXplZExvY2F0aW9ucy5sb2NhdGlvbi5maW5kKGxvY2F0aW9uID0+IGxvY2F0aW9uLmxvY2F0aW9uSWQgPT09IHNlc3Npb24ubG9jYXRpb25JZCkpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgbG9jYXRpb24gY29ycmVzcG9uZGluZyB0byB0aGUgY3VycmVudCBzZXNzaW9uXG4gICAgICovXG4gICAgcHVibGljIGdldCBjbG91ZEFwaUxvY2F0aW9uKCk6IE9ic2VydmFibGU8QWNjZXNzaWJsZUxvY2F0aW9uPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsb3VkQXBpU2Vzc2lvbi5waXBlKFxuICAgICAgICAgICAgc3dpdGNoTWFwKCgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX2Nsb3VkQXBpQWNjZXNzaWJsZUxvY2F0aW9ucykge1xuICAgICAgICAgICAgICAgICAgICAvLyBFbnN1cmUgY2FjaGluZyBmb3IgZ2V0dGluZyBBY2Nlc3NpYmxlTG9jYXRpb25zXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2Nsb3VkQXBpQWNjZXNzaWJsZUxvY2F0aW9ucyA9IHRoaXMuX2Nsb3VkQXBpU2Vzc2lvbkxpbmtzXG4gICAgICAgICAgICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBHZXQgdGhlIEFjY2Vzc2libGVMb2NhdGlvbnMgbGlua1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcCgobGlua3MpID0+IHRoaXMuZmluZExpbmsoeyBsaW5rOiBsaW5rcyB9LCAnZG93bicsICdBY2Nlc3NpYmxlTG9jYXRpb25zJykpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZldGNoIEFjY2Vzc2libGVMb2NhdGlvbnMgZnJvbSB0aGUgYmFja2VuZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaE1hcCgobGluazogTGlua1R5cGUpID0+IGxpbmsgPyB0aGlzLmh0dHAuZ2V0PEFjY2Vzc2libGVMb2NhdGlvbnM+KGxpbmsuaHJlZikgOiBvZihudWxsKSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gR2V0IHRoZSBhcnJheSB3aXRoIGFsbCBsb2NhdGlvbnMgKHdoYXQgaWYgdGhlcmUgYXJlIG1hbnkgcGFnZXMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwKChhY2Nlc3NpYmxlTG9jYXRpb25zOiBBY2Nlc3NpYmxlTG9jYXRpb25zKSA9PiBhY2Nlc3NpYmxlTG9jYXRpb25zICYmIGFjY2Vzc2libGVMb2NhdGlvbnMudmFsdWVzKVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hhcmUoeyBjb25uZWN0b3I6ICgpID0+IG5ldyBSZXBsYXlTdWJqZWN0KDEpIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fY2xvdWRBcGlBY2Nlc3NpYmxlTG9jYXRpb25zO1xuICAgICAgICAgICAgfSksXG5cbiAgICAgICAgICAgIC8vIE5lZWQgdG8gaGF2ZSB0aGUgc2Vzc2lvbiBpbiBvcmRlciB0byBnZXQgaXRzIGxvY2F0aW9uXG4gICAgICAgICAgICB3aXRoTGF0ZXN0RnJvbSh0aGlzLmNsb3VkQXBpU2Vzc2lvbiksXG4gICAgICAgICAgICAvLyBGaW5kIHRoZSBsb2NhdGlvbiB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoaXMgc2Vzc2lvblxuICAgICAgICAgICAgbWFwKChbYWNjZXNzaWJsZUxvY2F0aW9ucywgc2Vzc2lvbl0pID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIWFjY2Vzc2libGVMb2NhdGlvbnMgfHwgIXNlc3Npb24pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHNlc3Npb25Mb2NhdGlvbiA9IHNlc3Npb24ubG9jYXRpb247XG4gICAgICAgICAgICAgICAgaWYgKCFzZXNzaW9uTG9jYXRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBhY2Nlc3NpYmxlTG9jYXRpb25zLmZpbmQobG9jYXRpb24gPT4gbG9jYXRpb24ubG9jYXRpb25JZCA9PT0gc2Vzc2lvbkxvY2F0aW9uKTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICApO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRMb2NhdGlvbihzZXNzaW9uOiBTZXNzaW9uVHlwZSk6IEF1dGhvcml6ZWRMb2NhdGlvblR5cGUge1xuICAgICAgICByZXR1cm4gc2Vzc2lvbi5hdXRob3JpemVkTG9jYXRpb25zLmxvY2F0aW9uLmZpbmQobG9jYXRpb24gPT4gbG9jYXRpb24ubG9jYXRpb25JZCA9PT0gc2Vzc2lvbi5sb2NhdGlvbklkKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBCdWlsZCB0aGUgZW5kcG9pbnQgdXJsLiBJZiB0aGUgcHJvdmlkZWQgZW5kcG9pbnQgaXMgYWxyZWFkeSBhbiBhYnNvbHV0ZSBVUkwsIHRoZW4gcmV0dXJuIGl0IGFzIGl0IGlzIHdpdGhvdXRcbiAgICAgKiBhbnkgbW9kaWZpY2F0aW9ucywgb3RoZXJ3aXNlIGNvbnNpZGVyIGl0IGFzIGEgcmVsYXRpdmUgb25lIGFuZCBwcmVwZW5kIHRoZSBiYXNlVXJsIGFzIGRlZmluZWQgYnkgdGhlIGhvc3QgYXBwbGljYXRpb24uXG4gICAgICovXG4gICAgcHJpdmF0ZSBidWlsZEVuZHBvaW50VXJsKGVuZHBvaW50OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gZW5kcG9pbnQuaW5kZXhPZignOi8vJykgPiAtMSA/IGVuZHBvaW50IDogYCR7dGhpcy5fYmFzZVVybH0vJHtlbmRwb2ludH1gO1xuICAgIH1cblxufVxuIl19
602
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmNkLmFwaS5jbGllbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92Y2Qvc2RrL3NyYy9jbGllbnQvY2xpZW50L3ZjZC5hcGkuY2xpZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQVksUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9ELE9BQU8sRUFBRSxXQUFXLEVBQWdCLE1BQU0sc0JBQXNCLENBQUM7QUFDakUsT0FBTyxFQUFjLGVBQWUsRUFBRSxFQUFFLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDekYsT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLGNBQWMsRUFBRSxLQUFLLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5RyxPQUFPLEVBS0gsUUFBUSxFQUNYLE1BQU0sMkNBQTJDLENBQUM7QUFJbkQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsY0FBYyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFekcsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUMzQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7QUFHeEMsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsZ0JBQWdCLENBQUM7QUFHbEQsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLE1BQU0sQ0FBQztBQUVyQywrQkFBK0I7QUFFL0I7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSx1QkFBdUIsQ0FBQyxNQUFjO0lBQ2xELE1BQU0sT0FBTyxHQUFlLEVBQUUsQ0FBQztJQUUvQixJQUFJLENBQUMsTUFBTSxF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QUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxJQUFJLFFBQVEsRUFBRSxDQUFDO0lBQ3BGLENBQUM7O3lHQS94QlEsWUFBWTs2R0FBWixZQUFZOzJGQUFaLFlBQVk7a0JBRHhCLFVBQVU7OzBCQXlERSxRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0b3IsIE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBIdHRwSGVhZGVycywgSHR0cFJlc3BvbnNlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgQmVoYXZpb3JTdWJqZWN0LCBvZiwgdGhyb3dFcnJvciwgbWVyZ2UsIFJlcGxheVN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNhdGNoRXJyb3IsIHRhcCwgbWFwLCBjb25jYXRNYXAsIHNraXBXaGlsZSwgc3dpdGNoTWFwLCB3aXRoTGF0ZXN0RnJvbSwgc2hhcmUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBTZXNzaW9uVHlwZSxcbiAgICBBdXRob3JpemVkTG9jYXRpb25UeXBlLFxuICAgIFJlc291cmNlVHlwZSwgTGlua1R5cGUsXG4gICAgRW50aXR5UmVmZXJlbmNlVHlwZSxcbiAgICBFbnRpdHlUeXBlLFxuICAgIFRhc2tUeXBlXG59IGZyb20gJ0B2Y2QvYmluZGluZ3MvdmNsb3VkL2FwaS9yZXN0L3NjaGVtYV92MV81JztcbmltcG9ydCB7IFN1cHBvcnRlZFZlcnNpb25zVHlwZSB9IGZyb20gJ0B2Y2QvYmluZGluZ3MvdmNsb3VkL2FwaS9yZXN0L3NjaGVtYS92ZXJzaW9uaW5nJztcbmltcG9ydCB7IEFjY2Vzc2libGVMb2NhdGlvbiwgQWNjZXNzaWJsZUxvY2F0aW9ucywgU2Vzc2lvbiB9IGZyb20gJy4uL29wZW5hcGknO1xuaW1wb3J0IHsgUXVlcnkgfSBmcm9tICcuLi9xdWVyeS9pbmRleCc7XG5pbXBvcnQgeyBBdXRoVG9rZW5Ib2xkZXJTZXJ2aWNlLCBBUElfUk9PVF9VUkwsIFNFU1NJT05fU0NPUEUsIFNFU1NJT05fT1JHX0lEIH0gZnJvbSAnLi4vY29udGFpbmVyLWhvb2tzJztcbmltcG9ydCB7IFZjZEh0dHBDbGllbnQgfSBmcm9tICcuL3ZjZC5odHRwLmNsaWVudCc7XG5pbXBvcnQgeyBWY2RUcmFuc2ZlckNsaWVudCB9IGZyb20gJy4vdmNkLnRyYW5zZmVyLmNsaWVudCc7XG5pbXBvcnQgeyBIVFRQX0hFQURFUlMgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBmaWx0ZXIgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBWY2RTZGtDb25maWcgfSBmcm9tIFwiLi4vLi4vY29yZS9wbHVnaW4ubW9kdWxlXCI7XG5cbmV4cG9ydCBjb25zdCBUUkFOU0ZFUl9MSU5LX1JFTCA9ICd1cGxvYWQ6ZGVmYXVsdCc7XG5leHBvcnQgdHlwZSBOYXZpZ2FibGUgPSBSZXNvdXJjZVR5cGUgfCB7IGxpbms/OiBMaW5rVHlwZVtdIH07XG5cbmV4cG9ydCBjb25zdCBIQVRFT0FTX0hFQURFUiA9ICdMaW5rJztcblxuLy8gdHNsaW50OmRpc2FibGU6dmFyaWFibGUtbmFtZVxuXG4vKipcbiAqIFBhcnNlIG91dCBMaW5rIGhlYWRlcnMgdXNpbmcgYSB2ZXJ5IGxhemlseSBpbXBsZW1lbnRlZCBwdWxsIHBhcnNlclxuICogQHBhcmFtIGhlYWRlciAnPHVybDE+O25hbWUxPVwidmFsdWUxXCIsbmFtZTI9XCJ2YWx1ZTJcIiw8dXJsMj47bmFtZTM9XCJ2YWx1ZTMsdmFsdWU0XCInXG4gKiBAcmV0dXJucyBwYXJzZWQgbGluayBoZWFkZXJzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUhlYWRlckhhdGVvYXNMaW5rcyhoZWFkZXI6IHN0cmluZyk6IExpbmtUeXBlW10ge1xuICAgIGNvbnN0IHJlc3VsdHM6IExpbmtUeXBlW10gPSBbXTtcblxuICAgIGlmICghaGVhZGVyKSB7XG4gICAgICAgIHJldHVybiByZXN1bHRzO1xuICAgIH1cblxuICAgIGNvbnN0IGhlYWRlckZpZWxkTWFwcGluZ3M6IHtba2V5OiBzdHJpbmddOiBrZXlvZiBMaW5rVHlwZX0gPSB7XG4gICAgICAgIGhyZWY6ICdocmVmJyxcbiAgICAgICAgbW9kZWw6ICd0eXBlJyxcbiAgICAgICAgdGl0bGU6ICdpZCcsXG4gICAgICAgIHJlbDogJ3JlbCdcbiAgICB9O1xuICAgIGxldCB0b2tlbkluZGV4ID0gLTE7XG5cbiAgICBmdW5jdGlvbiBwZWVrKHRva2VuOiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIGhlYWRlci5pbmRleE9mKHRva2VuLCB0b2tlbkluZGV4ICsgMSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbmV4dCh0b2tlbjogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IG5leHRJbmRleCA9IHBlZWsodG9rZW4pO1xuICAgICAgICBpZiAobmV4dEluZGV4ID09PSAtMSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEpTT04uc3RyaW5naWZ5KHtoZWFkZXIsIHRva2VuLCB0b2tlbkluZGV4fSkpO1xuICAgICAgICB9XG4gICAgICAgIHRva2VuSW5kZXggPSBuZXh0SW5kZXg7XG4gICAgICAgIHJldHVybiB0b2tlbkluZGV4O1xuICAgIH1cblxuICAgIHdoaWxlIChwZWVrKCc8JykgPiAtMSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgaHJlZlN0YXJ0ID0gbmV4dCgnPCcpO1xuICAgICAgICAgICAgY29uc3QgaHJlZkVuZCA9IG5leHQoJz4nKTtcbiAgICAgICAgICAgIGNvbnN0IGhyZWYgPSBoZWFkZXIuc3Vic3RyaW5nKGhyZWZTdGFydCArIDEsIGhyZWZFbmQpO1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0OiBMaW5rVHlwZSA9IHtocmVmLCB0eXBlOiBudWxsLCBpZDogbnVsbCwgcmVsOiBudWxsLCB2Q2xvdWRFeHRlbnNpb246IFtdfTtcbiAgICAgICAgICAgIGxldCBjb21tYSA9IHBlZWsoJywnKTtcbiAgICAgICAgICAgIGxldCBzZW1pY29sb24gPSBwZWVrKCc7Jyk7XG4gICAgICAgICAgICB3aGlsZSAoKHNlbWljb2xvbiA+IC0xICYmIGNvbW1hID4gLTEgJiYgc2VtaWNvbG9uIDwgY29tbWEpIHx8IChzZW1pY29sb24gPiAtMSAmJiBjb21tYSA9PT0gLTEpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmFtZVN0YXJ0ID0gbmV4dCgnOycpO1xuICAgICAgICAgICAgICAgIGNvbnN0IG5hbWVFbmQgPSBuZXh0KCc9Jyk7XG4gICAgICAgICAgICAgICAgY29uc3QgbmFtZSA9IGhlYWRlci5zdWJzdHJpbmcobmFtZVN0YXJ0ICsgMSwgbmFtZUVuZCkudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWVTdGFydCA9IG5leHQoJ1wiJyk7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWVFbmQgPSBuZXh0KCdcIicpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gaGVhZGVyLnN1YnN0cmluZyh2YWx1ZVN0YXJ0ICsgMSwgdmFsdWVFbmQpO1xuICAgICAgICAgICAgICAgIGNvbnN0IG1hcHBlZE5hbWUgPSBoZWFkZXJGaWVsZE1hcHBpbmdzW25hbWVdO1xuICAgICAgICAgICAgICAgIGlmIChtYXBwZWROYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0W21hcHBlZE5hbWVdID0gZGVjb2RlVVJJQ29tcG9uZW50KHZhbHVlKSBhcyBhbnk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbW1hID0gcGVlaygnLCcpO1xuICAgICAgICAgICAgICAgIHNlbWljb2xvbiA9IHBlZWsoJzsnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc3VsdHMucHVzaChyZXN1bHQpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikgeyAgLy8gV2Ugd2lsbCB0cnkgdGhlIG5leHQgb25lLi4uXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhlcnJvcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0cztcbn1cblxuZXhwb3J0IGVudW0gTGlua1JlbFR5cGUge1xuICAgIGFkZCA9ICdhZGQnLFxuICAgIHJlbW92ZSA9ICdyZW1vdmUnLFxuICAgIGVkaXQgPSAnZWRpdCcsXG59XG5cbi8qKlxuICogQSBiYXNpYyBjbGllbnQgZm9yIGludGVyYWN0aW5nIHdpdGggdGhlIFZNd2FyZSBDbG91ZCBEaXJlY3RvciBBUElzLlxuICpcbiAqIEEgVk13YXJlIENsb3VkIERpcmVjdG9yIHBsdWdpbiBjYW4gZ2V0IGEgcmVmZXJlbmNlIHRvIHRoaXMgY2xpZW50IGJ5IHVzaW5nIGFuZ3VsYXIgaW5qZWN0aW9uLlxuICogYGBgXG4gKiAgICAgY29uc3RydWN0b3IocHJpdmF0ZSB2Y2RBcGk6IFZjZEFwaUNsaWVudCkge31cbiAqIGBgYFxuICpcbiAqIFZjZEFwaUNsaWVudCByZXVzZXMgdGhlIGF1dGhlbnRpY2F0aW9uIGZyb20gdGhlIFZDRCBwbGF0Zm9ybSBzbyBpbiBnZW5lcmFsIHRoZXJlIGlzXG4gKiBubyBuZWVkIG9mIGFuIGV4cGxpY2l0IGF1dGhlbnRpY2F0aW9uL2xvZ2luLlxuICpcbiAqIFdoZW4gZGVhbGluZyB3aXRoIHRoZSBzZXNzaW9uIG1hbmFnZW1lbnQgdGhlcmUgYXJlIHR3byBBUElzOlxuICogMS4gRGVwcmVjYXRlZCBsZWdhY3kgQVBJIHRoYXQgaXMgdXNpbmcgdGhlIGBhcGkvc2Vzc2lvbmAgZW5kcG9pbnQgYW5kIHRoZSBjb3JyZXNwb25kaW5nIG1vZGVsc1xuICogMi4gTmV3bHkgYWRkZWQgQVBJIHRoYXQgaXMgdXNpbmcgdGhlIGBjbG91ZGFwaWAgZW5kcG9pbnQgYW5kIHRoZSBjb3JyZXNwb25kaW5nIG1vZGVsc1xuICpcbiAqIE5vdGUgdGhhdCBpZiBhIHBsdWdpbiBwZXJmb3JtcyBhbiBleHBsaWNpdCBjbG91ZCBhcGkgYXV0aGVudGljYXRpb24gY2FsbCB0aHJvdWdoXG4gKiB7QGxpbmsgVmNkQXBpQ2xpZW50I3NldENsb3VkQXBpQXV0aGVudGljYXRpb259IG9yIHtAbGluayBWY2RBcGlDbGllbnQjY2xvdWRBcGlMb2dpbn1cbiAqIGZyb20gdGhhdCBtb21lbnQgb24gdGhlIFZjZEFwaUNsaWVudCB1c2VzIG9ubHkgY2xvdWQgYXBpIHNlc3Npb24gbWFuYWdlbWVudC5cbiAqIFRoaXMgbWVhbnMgY2FsbHMgdG8ge0BsaW5rIFZjZEFwaUNsaWVudCNzZXRBdXRoZW50aWNhdGlvbn0gb3Ige0BsaW5rIFZjZEFwaUNsaWVudCNsb2dpbn0gaGF2ZSBubyBlZmZlY3QuXG4gKi9cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBWY2RBcGlDbGllbnQge1xuICAgIHNldCBiYXNlVXJsKF9iYXNlVXJsOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5fYmFzZVVybCA9IF9iYXNlVXJsO1xuICAgIH1cblxuICAgIGdldCB2ZXJzaW9uKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucmVxdWVzdEhlYWRlcnNJbnRlcmNlcHRvci52ZXJzaW9uO1xuICAgIH1cblxuICAgIHByaXZhdGUgX25lZ290aWF0ZVZlcnNpb246IE9ic2VydmFibGU8c3RyaW5nPjtcbiAgICBwcml2YXRlIF9iYXNlVXJsOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBAZGVwcmVjYXRlZCBVc2Uge0BsaW5rIFZjZEFwaUNsaWVudCNfY2xvdWRBcGlTZXNzaW9ufVxuICAgICAqL1xuICAgIHByaXZhdGUgX3Nlc3Npb246IEJlaGF2aW9yU3ViamVjdDxTZXNzaW9uVHlwZT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFNlc3Npb25UeXBlPihudWxsKTtcbiAgICBwcml2YXRlIF9zZXNzaW9uT2JzZXJ2YWJsZTogT2JzZXJ2YWJsZTxTZXNzaW9uVHlwZT4gPSB0aGlzLl9zZXNzaW9uLmFzT2JzZXJ2YWJsZSgpXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgICAgc2tpcFdoaWxlKHNlc3Npb24gPT4gIXNlc3Npb24pXG4gICAgICAgICk7XG4gICAgcHJpdmF0ZSBfZ2V0U2Vzc2lvbjogT2JzZXJ2YWJsZTxTZXNzaW9uVHlwZT47XG5cbiAgICAvKipcbiAgICAgKiBDbG91ZEFwaSBTZXNzaW9uXG4gICAgICovXG4gICAgcHJpdmF0ZSBfY2xvdWRBcGlTZXNzaW9uOiBCZWhhdmlvclN1YmplY3Q8U2Vzc2lvbj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFNlc3Npb24+KG51bGwpO1xuICAgIHByaXZhdGUgX2Nsb3VkQXBpU2Vzc2lvbk9ic2VydmFibGU6IE9ic2VydmFibGU8U2Vzc2lvbj4gPSB0aGlzLl9jbG91ZEFwaVNlc3Npb24uYXNPYnNlcnZhYmxlKClcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICBza2lwV2hpbGUoc2Vzc2lvbiA9PiAhc2Vzc2lvbilcbiAgICAgICAgKTtcbiAgICAvKipcbiAgICAgKiBUaGlzIG9ic2VydmFibGUgaGFzIGEgc3BlY2lhbCBwdXJwb3NlIHdoZW4gZG9pbmcgYXV0b21hdGljIGxvZ2luIGR1cmluZyB0aGUgY29uc3RydWN0b3IgaW5pdGlhbGl6YXRpb24uXG4gICAgICogSXQgYWxsb3dzIGJhY2tlbmQgY2FsbCBvbmx5IGFmdGVyIGFuIEFQSSB2ZXJzaW9uIGlzIHNldC5cbiAgICAgKiBJdCBhbHNvIGVuc3VyZXMgdGhhdCBhIGJhY2tlbmQgY2FsbCB0byBnZXQgdGhlIGN1cnJlbnQgc2Vzc2lvbiBpcyBkb25lIG9uY2UgcHJpb3IgdG8gYW55IG90aGVyIGNhbGxzLlxuICAgICAqXG4gICAgICogSW4gY2FzZSBvZiBhbiBleHBsaWNpdCBjbG91ZCBhcGkgYXV0aCByZXF1ZXN0IHRoZXJlIGlzIG5vIG5lZWQgb2YgdGhpcyBvYnNlcnZhYmxlXG4gICAgICogc2luY2UgdGhpcyBhdXRoIHJlcXVlc3Qgd2lsbCByZXRyaWV2ZSB0aGUgc2Vzc2lvbiBpdHNlbGZcbiAgICAgKi9cbiAgICBwcml2YXRlIF9nZXRDbG91ZEFwaVNlc3Npb246IE9ic2VydmFibGU8U2Vzc2lvbj47XG5cbiAgICBwcml2YXRlIF9jbG91ZEFwaVNlc3Npb25MaW5rczogQmVoYXZpb3JTdWJqZWN0PExpbmtUeXBlW10+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxMaW5rVHlwZVtdPihbXSk7XG5cbiAgICAvKipcbiAgICAgKiBDYWNoZWQsIGxhenkgbG9hZGVkIG9ic2VydmFibGUgb2YgdGhlIEFjY2Vzc2libGVMb2NhdGlvbiBhcnJheVxuICAgICAqL1xuICAgIHByaXZhdGUgX2Nsb3VkQXBpQWNjZXNzaWJsZUxvY2F0aW9uczogT2JzZXJ2YWJsZTxBY2Nlc3NpYmxlTG9jYXRpb25bXT47XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIHByb3BlcnR5IGRldGVybWluZXMgaWYgaXQgaXMgYW4gZXhwbGljaXQgY2xvdWQgYXBpIGxvZ2luLlxuICAgICAqIEluIHRoaXMgY2FzZSB0aGUgb2xkIEFQSSAoL2FwaS9zZXNzaW9uKSBzaG91bGQgbm90IGJlIHVzZWQgYXQgYWxsLlxuICAgICAqL1xuICAgIHByaXZhdGUgX2lzQ2xvdWRBcGlMb2dpbiA9IGZhbHNlO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgICAgICBwcml2YXRlIGh0dHA6IFZjZEh0dHBDbGllbnQsXG4gICAgICAgICAgICBwcml2YXRlIGluamVjdG9yOiBJbmplY3RvcixcbiAgICAgICAgICAgIEBPcHRpb25hbCgpIHByaXZhdGUgY29uZmlnPzogVmNkU2RrQ29uZmlnLFxuICAgICkge1xuICAgICAgICB0aGlzLl9iYXNlVXJsID0gdGhpcy5pbmplY3Rvci5nZXQoQVBJX1JPT1RfVVJMKTtcbiAgICAgICAgXG4gICAgICAgIGxldCBuZWdvdGlhdGVkVmVyc2lvbjogT2JzZXJ2YWJsZTxzdHJpbmc+O1xuICAgICAgICBpZiAodGhpcy5jb25maWc/LmFwaVZlcnNpb24pIHtcbiAgICAgICAgICAgIG5lZ290aWF0ZWRWZXJzaW9uID0gb2YodGhpcy5jb25maWcuYXBpVmVyc2lvbikucGlwZShcbiAgICAgICAgICAgICAgICBtYXAoKHZlcnNpb24pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRWZXJzaW9uKHZlcnNpb24pO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmVyc2lvbjtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG5lZ290aWF0ZWRWZXJzaW9uID0gdGhpcy5odHRwLmdldDxTdXBwb3J0ZWRWZXJzaW9uc1R5cGU+KGAke3RoaXMuX2Jhc2VVcmx9L2FwaS92ZXJzaW9uc2ApLnBpcGUoXG4gICAgICAgICAgICAgICAgbWFwKHZlcnNpb25zID0+IHRoaXMubmVnb3RpYXRlVmVyc2lvbih2ZXJzaW9ucykpLFxuICAgICAgICAgICAgICAgIHRhcCh2ZXJzaW9uID0+IHRoaXMuc2V0VmVyc2lvbih2ZXJzaW9uKSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fbmVnb3RpYXRlVmVyc2lvbiA9IG5lZ290aWF0ZWRWZXJzaW9uLnBpcGUoXG4gICAgICAgICAgICBzaGFyZSh7IGNvbm5lY3RvcjogKCkgPT4gbmV3IFJlcGxheVN1YmplY3QoMSksIHJlc2V0T25FcnJvcjogZmFsc2UsIHJlc2V0T25Db21wbGV0ZTogZmFsc2UsIHJlc2V0T25SZWZDb3VudFplcm86IGZhbHNlIH0pXG4gICAgICAgICk7XG5cbiAgICAgICAgY29uc3QgdG9rZW5Ib2xkZXI6IEF1dGhUb2tlbkhvbGRlclNlcnZpY2UgPSB0aGlzLmluamVjdG9yLmdldChBdXRoVG9rZW5Ib2xkZXJTZXJ2aWNlLCB7IHRva2VuOiAnJyB9KTtcbiAgICAgICAgY29uc3QgdG9rZW4gPSB0b2tlbkhvbGRlci5qd3QgPyBgQmVhcmVyICR7dG9rZW5Ib2xkZXIuand0fWAgOiB0b2tlbkhvbGRlci50b2tlbjtcbiAgICAgICAgdGhpcy5fZ2V0U2Vzc2lvbiA9IHRoaXMuc2V0QXV0aGVudGljYXRpb24odG9rZW4pXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBzaGFyZSh7IGNvbm5lY3RvcjogKCkgPT4gbmV3IFJlcGxheVN1YmplY3QoMSksIHJlc2V0T25FcnJvcjogZmFsc2UsIHJlc2V0T25Db21wbGV0ZTogZmFsc2UsIHJlc2V0T25SZWZDb3VudFplcm86IGZhbHNlIH0pXG4gICAgICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuX2dldENsb3VkQXBpU2Vzc2lvbiA9IHRoaXMuc2V0Q2xvdWRBcGlBdXRoZW50aWNhdGlvbih0b2tlbilcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHNoYXJlKHsgY29ubmVjdG9yOiAoKSA9PiBuZXcgUmVwbGF5U3ViamVjdCgxKSwgcmVzZXRPbkVycm9yOiBmYWxzZSwgcmVzZXRPbkNvbXBsZXRlOiBmYWxzZSwgcmVzZXRPblJlZkNvdW50WmVybzogZmFsc2UgfSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIC8vIFRoaXMgaXMgbm90IGFuIGV4cGxpY2l0IGNsb3VkIGFwaSBsb2dpblxuICAgICAgICB0aGlzLl9pc0Nsb3VkQXBpTG9naW4gPSBmYWxzZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG5lZ290aWF0ZVZlcnNpb24oc2VydmVyVmVyc2lvbnM6IFN1cHBvcnRlZFZlcnNpb25zVHlwZSk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IHN1cHBvcnRlZFZlcnNpb25zOiBzdHJpbmdbXSA9IHNlcnZlclZlcnNpb25zLnZlcnNpb25JbmZvLm1hcCh2ZXJzaW9uSW5mbyA9PiB2ZXJzaW9uSW5mby52ZXJzaW9uKTtcblxuICAgICAgICAvLyBEZWZhdWx0IEFQSSBWZXJzaW9uIHVzZWQgaXMgdGhlIExhdGVzdCBBUEkgVmVyc2lvbiBpbiBWTXdhcmUgQ2xvdWQgRGlyZWN0b3JcbiAgICAgICAgcmV0dXJuIHN1cHBvcnRlZFZlcnNpb25zW3N1cHBvcnRlZFZlcnNpb25zLmxlbmd0aCAtIDFdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBwdXJwb3NlIG9mIHRoaXMgZnVuY3Rpb24gaXMgdG8gZW5zdXJlIHRoYXQgcHJpb3IgdG8gc2VuZGluZyBhbnkgY2FsbCB0byB0aGUgYmFja2VuZFxuICAgICAqIHRoZSB2ZXJzaW9uIGhhcyBiZWVuIHNldCBhbmQgdGhlIGN1cnJlbnQgc2Vzc2lvbiBoYXMgYmVlbiByZXRyaWV2ZWQuXG4gICAgICogTm90ZSB0aGF0IHRoaXMgaXMgaW1wb3J0YW50IGR1cmluZyB0aGUgYXV0b21hdGljIGF1dGhlbnRpY2F0aW9uIHRoYXQgaXMgZG9uZSBkdXJpbmcgdGhlXG4gICAgICogY29uc3RydWN0b3IgaW5pdGlhbGl6YXRpb24sIHdoZW4gdGhlIHBsdWdpbiBpcyBub3QgcmVxdWlyZWQgdG8gcGVyZm9ybSBpdHMgb3duIGV4cGxpY2l0IGF1dGhlbnRpY2F0aW9uXG4gICAgICogYnV0IHJhdGhlciB0aGUgb25lcyBmcm9tIHRoZSB1bmRlcmx5aW5nIGZyYW1ld29yayBpcyB1c2VkLlxuICAgICAqL1xuICAgIHByaXZhdGUgdmFsaWRhdGVSZXF1ZXN0Q29udGV4dCgpOiBPYnNlcnZhYmxlPHRydWU+IHtcbiAgICAgICAgcmV0dXJuICh0aGlzLnZlcnNpb24gPyBvZih0aGlzLnZlcnNpb24pIDogdGhpcy5fbmVnb3RpYXRlVmVyc2lvbilcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIC8vIEluIGNhc2Ugb2YgYSBjbG91ZCBhcGkgbG9naW4gd2UgYXJlIG5vdCBpbnRlcmVzdGVkIGluIHRoZSAvYXBpL3Nlc3Npb24gc2Vzc2lvblxuICAgICAgICAgICAgICAgIGNvbmNhdE1hcCgoKSA9PiB0aGlzLl9pc0Nsb3VkQXBpTG9naW4gPyBvZihudWxsKSA6IHRoaXMuX2dldFNlc3Npb24pLFxuICAgICAgICAgICAgICAgIGNvbmNhdE1hcCgoKSA9PiB0aGlzLl9nZXRDbG91ZEFwaVNlc3Npb25cbiAgICAgICAgICAgICAgICAgICAgLy8gSW4gY2FzZSBvZiBjbG91ZCBhcGkgZmFpbHVyZSB3ZSBkbyBub3Qgd2FudCB0byBwcmV2ZW50IGZ1cnRoZXIgZXhlY3V0aW9uXG4gICAgICAgICAgICAgICAgICAgIC8vIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IGNvbnNpZGVyYXRpb25zIHNpbmNlIHRoaXMgbWF5IGJlIGEgY2FzZVxuICAgICAgICAgICAgICAgICAgICAvLyB3aGVuIGNsb3VkIGFwaSBpcyBub3Qgc3VwcG9ydGVkIGF0IGFsbCBmb3IgdGhlIHNwZWNpZmllZCB2ZXJzaW9uXG4gICAgICAgICAgICAgICAgICAgIC5waXBlKGNhdGNoRXJyb3IoKGUpID0+IG9mKHRydWUpKSlcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIG1hcCgoKSA9PiB0cnVlKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgLyoqXG4gICAgICpcbiAgICAgKiBGb3IgdXNlIGNhc2VzIHdpY2ggc29sZWx5IGRlcGVuZHMgb24gY2xvdWRhcGkgd2l0aG91dCBhbnkgYmFja3dhcmQgY29tcGF0aWJpbGl0eVxuICAgICAqIHRoZXJlIHNob3VsZCBiZSBubyBkZXBlbmRlbmNlIG9uIHRoZSBvbGQgL2FwaSBlbmRwb2ludCBhdCBhbGxcbiAgICAgKi9cbiAgICBwcml2YXRlIHZhbGlkYXRlUmVxdWVzdENvbnRleHRDbG91ZEFwaU9ubHkoKTogT2JzZXJ2YWJsZTxTZXNzaW9uPiB7XG4gICAgICAgIHJldHVybiAodGhpcy52ZXJzaW9uID8gb2YodGhpcy52ZXJzaW9uKSA6IHRoaXMuX25lZ290aWF0ZVZlcnNpb24pLnBpcGUoXG4gICAgICAgICAgICBjb25jYXRNYXAoKCkgPT4gdGhpcy5fZ2V0Q2xvdWRBcGlTZXNzaW9uKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRWZXJzaW9uKF92ZXJzaW9uOiBzdHJpbmcpOiBWY2RBcGlDbGllbnQge1xuICAgICAgICB0aGlzLmh0dHAucmVxdWVzdEhlYWRlcnNJbnRlcmNlcHRvci52ZXJzaW9uID0gX3ZlcnNpb247XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdsb2JhbCBjb25maWd1cmF0aW9uIGZvciB0aGUgc2VydmljZSwgdGhhdCBhbGxvd3MgYSBwcm92aWRlciB1c2VyIHRvIGV4ZWN1dGUgQVBJIHJlcXVlc3RzXG4gICAgICogaW4gdGhlIHNjb3BlIG9mIGEgc3BlY2lmaWMgdGVuYW50LlxuICAgICAqIFxuICAgICAqIElmIHlvdSB3YW50IHRvIGV4ZWN1dGUgc2luZ2xlIEFQSSByZXF1ZXN0IGluIHNjb3BlIG9mIHNwZWNpZmljIHRlbmFudCB5b3UgY2FuIGRvIGl0XG4gICAgICogYnkgcGFzc2luZyBcIlgtVk1XQVJFLVZDTE9VRC1URU5BTlQtQ09OVEVYVFwiIGhlYWRlciB0byB0aGUgc3BlY2lmaWMgQVBJIFJlcXVlc3QuXG4gICAgICpcbiAgICAgKiBUaGlzIHNjb3BpbmcgaXMgYXZhaWxhYmxlIHRvIHF1ZXJ5LWJhc2VkIEFQSSBjYWxscyBhbmQgdG8gYnVsayBHRVQgY2FsbHMgaW4gdGhlXG4gICAgICogL2Nsb3VkYXBpIHNwYWNlLlxuICAgICAqXG4gICAgICogQHBhcmFtIGFjdEFzIGFuIGVudGl0eVJlZiBvZiB0aGUgdGVuYW50IChvcmdhbml6YXRpb24pIHRvIHNjb3BlIHN1YnNlcXVlbnQgY2FsbHMgdG8gaW5cbiAgICAgKiAgdGhlIFZjZEFwaUNsaWVudCwgb3IgbnVsbC9ubyBwYXJhbWV0ZXIgdG8gcmVtb3ZlIHRlbmFudC1zcGVjaWZpYyBzY29waW5nXG4gICAgICogQHJldHVybnMgdGhlIGN1cnJlbnQgVmNkQXBpQ2xpZW50IGluc3RhbmNlIChmb3IgY2hhaW5pbmcpXG4gICAgICovXG4gICAgcHVibGljIGFjdEFzKGFjdEFzOiBFbnRpdHlSZWZlcmVuY2VUeXBlID0gbnVsbCk6IFZjZEFwaUNsaWVudCB7XG4gICAgICAgIHRoaXMuaHR0cC5yZXF1ZXN0SGVhZGVyc0ludGVyY2VwdG9yLmFjdEFzID0gIWFjdEFzID8gbnVsbCA6IGFjdEFzLmlkO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAZGVwcmVjYXRlZCBVc2Uge0BsaW5rIFZjZEFwaUNsaWVudCNzZXRDbG91ZEFwaUF1dGhlbnRpY2F0aW9ufVxuICAgICAqXG4gICAgICogU2V0cyB0aGUgYXV0aGVudGljYXRpb24gdG9rZW4gdG8gdXNlIGZvciB0aGUgVmNkQXBpQ2xpZW50LlxuICAgICAqXG4gICAgICogQWZ0ZXIgc2V0dGluZyB0aGUgdG9rZW4sIHRoZSBjbGllbnQgd2lsbCBnZXQgdGhlIGN1cnJlbnQgc2Vzc2lvblxuICAgICAqIGluZm9ybWF0aW9uIGFzc29jaWF0ZWQgd2l0aCB0aGUgYXV0aGVudGljYXRlZCB0b2tlbi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBhdXRoZW50aWNhdGlvbiB0aGUgYXV0aGVudGljYXRpb24gc3RyaW5nICh0byBiZSB1c2VkIGluIGVpdGhlciB0aGUgJ0F1dGhvcml6YXRpb24nXG4gICAgICogIG9yICd4LXZjbG91ZC1hdXRob3JpemF0aW9uJyBoZWFkZXIpXG4gICAgICogQHJldHVybnMgdGhlIHNlc3Npb24gYXNzb2NpYXRlZCB3aXRoIHRoZSBhdXRoZW50aWNhdGlvbiB0b2tlblxuICAgICAqL1xuICAgIHB1YmxpYyBzZXRBdXRoZW50aWNhdGlvbihhdXRoZW50aWNhdGlvbjogc3RyaW5nKTogT2JzZXJ2YWJsZTxTZXNzaW9uVHlwZT4ge1xuICAgICAgICBpZiAodGhpcy5faXNDbG91ZEFwaUxvZ2luKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcignT25seSBjbG91ZCBhcGkgYXV0aCBpcyBhbGxvd2VkIHNpbmNlIGl0IHdhcyBhbHJlYWR5IHVzZWQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaHR0cC5yZXF1ZXN0SGVhZGVyc0ludGVyY2VwdG9yLmF1dGhlbnRpY2F0aW9uID0gYXV0aGVudGljYXRpb247XG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PFNlc3Npb25UeXBlPihgJHt0aGlzLl9iYXNlVXJsfS9hcGkvc2Vzc2lvbmApLnBpcGUoXG4gICAgICAgICAgICAgICAgdGFwKHNlc3Npb24gPT4ge1xuICAgICAgICAgICAgICAgICAgICAvLyBhdXRvbWF0aWNhbGx5IHNldCBhY3RBcyBmb3IgcHJvdmlkZXIgaW4gdGVuYW50IHNjb3BlXG4gICAgICAgICAgICAgICAgICAgIGlmIChzZXNzaW9uLm9yZyA9PT0gJ1N5c3RlbScgJiYgdGhpcy5pbmplY3Rvci5nZXQoU0VTU0lPTl9TQ09QRSkgPT09ICd0ZW5hbnQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBBdXRvbWF0aWMgYWN0QXMgb25seSB3b3JrcyBpbiB2ZXJzaW9ucyA+PTkuNVxuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFjdEFzKHtpZDogdGhpcy5pbmplY3Rvci5nZXQoU0VTU0lPTl9PUkdfSUQpfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdObyBTRVNTSU9OX09SR19JRCBzZXQgaW4gY29udGFpbmVyLiBBdXRvbWF0aWMgYWN0QXMgaXMgZGlzYWJsZWQuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICB0YXAoc2Vzc2lvbiA9PiB0aGlzLl9zZXNzaW9uLm5leHQoc2Vzc2lvbikpXG4gICAgICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGF1dGhlbnRpY2F0aW9uIHRva2VuIHRvIHVzZSBmb3IgdGhlIFZjZEFwaUNsaWVudC5cbiAgICAgKlxuICAgICAqIEFmdGVyIHNldHRpbmcgdGhlIHRva2VuLCB0aGUgY2xpZW50IHdpbGwgZ2V0IHRoZSBjdXJyZW50IHNlc3Npb25cbiAgICAgKiBpbmZvcm1hdGlvbiBhc3NvY2lhdGVkIHdpdGggdGhlIGF1dGhlbnRpY2F0ZWQgdG9rZW4uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gYXV0aGVudGljYXRpb24gdGhlIGF1dGhlbnRpY2F0aW9uIHN0cmluZyAodG8gYmUgdXNlZCBpbiBlaXRoZXIgdGhlICdBdXRob3JpemF0aW9uJ1xuICAgICAqICBvciAneC12Y2xvdWQtYXV0aG9yaXphdGlvbicgaGVhZGVyKVxuICAgICAqXG4gICAgICogQHJldHVybnMgc2Vzc2lvbiBvYnNlcnZhYmxlIGFzc29jaWF0ZWQgd2l0aCB0aGUgYXV0aGVudGljYXRpb24gdG9rZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgc2V0Q2xvdWRBcGlBdXRoZW50aWNhdGlvbihhdXRoZW50aWNhdGlvbjogc3RyaW5nKTogT2JzZXJ2YWJsZTxTZXNzaW9uPiB7XG4gICAgICAgIHRoaXMub25CZWZvcmVDbG91ZEFwaUF1dGhlbnRpY2F0aW9uKCk7XG5cbiAgICAgICAgcmV0dXJuIG9mKHRydWUpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAvLyBTZXQgdGhlIGF1dGhlbnRpY2F0aW9uIGFzIHBhcnQgb2YgdGhlIG9ic2VydmFibGUgaW4gb3JkZXIgdG8gZW5zdXJlIHRoZSBjYWxsZXIgaGFzIHN1YnNjcmliZWQgdG8gdGhlIG9ic2VydmFibGVcbiAgICAgICAgICAgICAgICB0YXAoKCkgPT4gdGhpcy5odHRwLnJlcXVlc3RIZWFkZXJzSW50ZXJjZXB0b3IuYXV0aGVudGljYXRpb24gPSBhdXRoZW50aWNhdGlvbiksXG4gICAgICAgICAgICAgICAgc3dpdGNoTWFwKCgpID0+IHRoaXMuaHR0cC5nZXQ8U2Vzc2lvbj4oYCR7dGhpcy5fYmFzZVVybH0vY2xvdWRhcGkvMS4wLjAvc2Vzc2lvbnMvY3VycmVudGAsIHsgb2JzZXJ2ZTogJ3Jlc3BvbnNlJyB9KSksXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICB0aGlzLm9uQ2xvdWRBcGlBdXRoZW50aWNhdGlvbigpXG4gICAgICAgICAgICApO1xuICAgIH1cblxuICAgIHB1YmxpYyBlbmFibGVMb2dnaW5nKCk6IFZjZEFwaUNsaWVudCB7XG4gICAgICAgIHRoaXMuaHR0cC5sb2dnaW5nSW50ZXJjZXB0b3IuZW5hYmxlZCA9IHRydWU7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgVXNlIHtAbGluayBWY2RBcGlDbGllbnQjY2xvdWRBcGlMb2dpbn1cbiAgICAgKlxuICAgICAqIENyZWF0ZXMgYW4gYXV0aGVudGljYXRlZCBzZXNzaW9uIGZvciB0aGUgc3BlY2lmaWVkIGNyZWRlbnRpYWwgZGF0YS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB1c2VybmFtZSB0aGUgbmFtZSBvZiB0aGUgdXNlciB0byBhdXRoZW50aWNhdGVcbiAgICAgKiBAcGFyYW0gdGVuYW50IHRoZSBvcmdhbml6YXRpb24gdGhlIHVzZXIgYmVsb25ncyB0b1xuICAgICAqIEBwYXJhbSBwYXNzd29yZCB0aGUgcGFzc3dvcmQgZm9yIHRoZSB1c2VyXG4gICAgICogQHJldHVybnMgYW4gYXV0aGVudGljYXRlZCBzZXNzaW9uIGZvciB0aGUgZ2l2ZW4gY3JlZGVudGlhbHNcbiAgICAgKi9cbiAgICBwdWJsaWMgbG9naW4odXNlcm5hbWU6IHN0cmluZywgdGVuYW50OiBzdHJpbmcsIHBhc3N3b3JkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPFNlc3Npb25UeXBlPiB7XG4gICAgICAgIGlmICh0aGlzLl9pc0Nsb3VkQXBpTG9naW4pIHtcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCdPbmx5IGNsb3VkIGFwaSBhdXRoIGlzIGFsbG93ZWQgc2luY2UgaXQgd2FzIGFscmVhZHkgdXNlZCcpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGF1dGhTdHJpbmc6IHN0cmluZyA9IGJ0b2EoYCR7dXNlcm5hbWV9QCR7dGVuYW50fToke3Bhc3N3b3JkfWApO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxTZXNzaW9uVHlwZT4oXG4gICAgICAgICAgICBgJHt0aGlzLl9iYXNlVXJsfS9hcGkvc2Vzc2lvbnNgLFxuICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBvYnNlcnZlOiAncmVzcG9uc2UnLFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh7IEF1dGhvcml6YXRpb246IGBCYXNpYyAke2F1dGhTdHJpbmd9YH0pXG4gICAgICAgICAgICB9XG4gICAgICAgIClcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICB0YXAoKHJlc3BvbnNlOiBIdHRwUmVzcG9uc2U8YW55PikgPT5cbiAgICAgICAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bWF4LWxpbmUtbGVuZ3RoXG4gICAgICAgICAgICAgICAgdGhpcy5odHRwLnJlcXVlc3RIZWFkZXJzSW50ZXJjZXB0b3IuYXV0aGVudGljYXRpb24gPSBgJHtyZXNwb25zZS5oZWFkZXJzLmdldCgneC12bXdhcmUtdmNsb3VkLXRva2VuLXR5cGUnKX0gJHtyZXNwb25zZS5oZWFkZXJzLmdldCgneC12bXdhcmUtdmNsb3VkLWFjY2Vzcy10b2tlbicpfWBcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBtYXAocmVzcG9uc2UgPT4gcmVzcG9uc2UuYm9keSksXG4gICAgICAgICAgICB0YXAoc2Vzc2lvbiA9PiB0aGlzLl9zZXNzaW9uLm5leHQoc2Vzc2lvbikpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhbiBhdXRoZW50aWNhdGVkIHNlc3Npb24gZm9yIHRoZSBzcGVjaWZpZWQgY3JlZGVudGlhbCBkYXRhIHVzaW5nIGNsb3VkIGFwaSBlbmRwb2ludC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB1c2VybmFtZSB0aGUgbmFtZSBvZiB0aGUgdXNlciB0byBhdXRoZW50aWNhdGVcbiAgICAgKiBAcGFyYW0gdGVuYW50IHRoZSBvcmdhbml6YXRpb24gdGhlIHVzZXIgYmVsb25ncyB0b1xuICAgICAqIEBwYXJhbSBwYXNzd29yZCB0aGUgcGFzc3dvcmQgZm9yIHRoZSB1c2VyXG4gICAgICogQHJldHVybnMgYW4gYXV0aGVudGljYXRlZCBzZXNzaW9uIGZvciB0aGUgZ2l2ZW4gY3JlZGVudGlhbHNcbiAgICAgKi9cbiAgICBwdWJsaWMgY2xvdWRBcGlMb2dpbih1c2VybmFtZTogc3RyaW5nLCB0ZW5hbnQ6IHN0cmluZywgcGFzc3dvcmQ6IHN0cmluZyk6IE9ic2VydmFibGU8U2Vzc2lvbj4ge1xuICAgICAgICB0aGlzLm9uQmVmb3JlQ2xvdWRBcGlBdXRoZW50aWNhdGlvbigpO1xuXG4gICAgICAgIGNvbnN0IGF1dGhTdHJpbmc6IHN0cmluZyA9IGJ0b2EoYCR7dXNlcm5hbWV9QCR7dGVuYW50fToke3Bhc3N3b3JkfWApO1xuICAgICAgICBsZXQgdXJsID0gYCR7dGhpcy5fYmFzZVVybH0vY2xvdWRhcGkvMS4wLjAvc2Vzc2lvbnNgO1xuICAgICAgICBpZiAodGVuYW50LnRvTG93ZXJDYXNlKCkgPT09ICdzeXN0ZW0nKSB7XG4gICAgICAgICAgICB1cmwgKz0gJy9wcm92aWRlcic7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PFNlc3Npb24+KFxuICAgICAgICAgICAgdXJsLFxuICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBvYnNlcnZlOiAncmVzcG9uc2UnLFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh7IFtIVFRQX0hFQURFUlMuQXV0aG9yaXphdGlvbl06IGBCYXNpYyAke2F1dGhTdHJpbmd9YCB9KVxuICAgICAgICAgICAgfVxuICAgICAgICApLnBpcGUoXG4gICAgICAgICAgICB0YXAoKHJlc3BvbnNlOiBIdHRwUmVzcG9uc2U8U2Vzc2lvbj4pID0+IHtcbiAgICAgICAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bWF4LWxpbmUtbGVuZ3RoXG4gICAgICAgICAgICAgICAgY29uc3QgdG9rZW4gPSBgJHtyZXNwb25zZS5oZWFkZXJzLmdldCgneC12bXdhcmUtdmNsb3VkLXRva2VuLXR5cGUnKX0gJHtyZXNwb25zZS5oZWFkZXJzLmdldCgneC12bXdhcmUtdmNsb3VkLWFjY2Vzcy10b2tlbicpfWA7XG4gICAgICAgICAgICAgICAgdGhpcy5odHRwLnJlcXVlc3RIZWFkZXJzSW50ZXJjZXB0b3IuYXV0aGVudGljYXRpb24gPSB0b2tlbjtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgdGhpcy5vbkNsb3VkQXBpQXV0aGVudGljYXRpb24oKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEl0IGlzIG5lY2Vzc2FyeSB0byBrbm93IGlmIGFuIGV4cGxpY2l0IGNsb3VkIGFwaSBhdXRoIHJlcXVlc3Qgd2FzIGRvbmUuXG4gICAgICogVGhpcyBmdW5jdGlvbiBoYW5kbGVzIHRoaXMgYnkgc2V0dGluZyB0aGUgY29ycmVzcG9uZGluZyBmbGFncywgcHJvcGVydGllcyBldGMuXG4gICAgICovXG4gICAgcHJpdmF0ZSBvbkJlZm9yZUNsb3VkQXBpQXV0aGVudGljYXRpb24oKSB7XG4gICAgICAgIC8vIEluIGNhc2Ugb2YgYW4gZXhwbGljaXQgY2xvdWQgYXBpIGF1dGggcmVxdWVzdDpcbiAgICAgICAgLy8gU2V0IHRoZSBmbGFnIF9pc0Nsb3VkQXBpTG9naW4gaW4gb3JkZXIgdG8ga25vdyB0aGF0IGV4cGxpY2l0IGNsb3VkIGFwaSBhdXRoZW50aWNhdGlvbiBpcyBkb25lXG4gICAgICAgIC8vIFRoaXMgd2lsbCBoZWxwIHVzIHNraXAgY29kZSByZWxhdGVkIHRvIHRoZSBvbGQgYXBpLCBpLmUuIHdlIHNob3VsZCBub3QgYWxsb3cgZXhwbGljaXQgbWl4IG9mIGJvdGggdGhlIGFwaS1zXG4gICAgICAgIHRoaXMuX2lzQ2xvdWRBcGlMb2dpbiA9IHRydWU7XG4gICAgICAgIC8vIEluIGNhc2Ugb2YgYW4gZXhwbGljaXQgY2xvdWQgYXBpIGF1dGggcmVxdWVzdDpcbiAgICAgICAgLy8gVGhlcmUgaXMgbm8gbmVlZCBvZiBfZ2V0Q2xvdWRBcGlTZXNzaW9uIG9ic2VydmFibGUgd2hpY2ggaXMgbmVlZGVkIGluIHRoZSBhdXRvbWF0aWMgbG9naW4gZHVyaW5nIHRoZSBjb25zdHJ1Y3RvciBpbml0aWFsaXphdGlvbi5cbiAgICAgICAgLy8gVGhlIGV4cGxpY2l0IGNsb3VkIGFwaSBhdXRoIHJlcXVlc3Qgd2lsbCByZXRyaWV2ZSB0aGUgc2Vzc2lvbi5cbiAgICAgICAgdGhpcy5fZ2V0Q2xvdWRBcGlTZXNzaW9uID0gb2YobnVsbCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSGFuZGxlIGF1dGhlbnRpY2F0aW9uLlxuICAgICAqIFRoaXMgaW5jbHVkZXMgZ2V0dGluZyBIQVRFT0FTIGxpbmtzLCBzZXR0aW5nIHRoZSBzZXNzaW9uLCBoYW5kbGluZyBlcnJvcnMgZXRjLlxuICAgICAqL1xuICAgIHByaXZhdGUgb25DbG91ZEFwaUF1dGhlbnRpY2F0aW9uKCk6IChzb3VyY2U6IE9ic2VydmFibGU8SHR0cFJlc3BvbnNlPFNlc3Npb24+PikgPT4gT2JzZXJ2YWJsZTxTZXNzaW9uPiB7XG4gICAgICAgIHJldHVybiAoc291cmNlKSA9PiBzb3VyY2UucGlwZShcbiAgICAgICAgICAgIHRhcCgocmVzcDogSHR0cFJlc3BvbnNlPFNlc3Npb24+KSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gR2V0IEhBVEVPQVMgbGlua3NcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldENsb3VkQXBpU2Vzc2lvbkxpbmtzKHBhcnNlSGVhZGVySGF0ZW9hc0xpbmtzKHJlc3AuaGVhZGVycy5nZXQoSEFURU9BU19IRUFERVIpKSk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnRXJyb3Igd2hlbiBwYXJzaW5nIHNlc3Npb24gSEFURU9BUyBsaW5rczonLCBlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG1hcChyZXNwID0+IHJlc3AuYm9keSksXG4gICAgICAgICAgICB0YXAoKHNlc3Npb246IFNlc3Npb24pID0+IHtcbiAgICAgICAgICAgICAgICAvLyBDbGVhciBwcmV2aW91cyBhY3RBc1xuICAgICAgICAgICAgICAgIHRoaXMuYWN0QXMobnVsbCk7XG4gICAgICAgICAgICAgICAgLy8gYXV0b21hdGljYWxseSBzZXQgYWN0QXMgZm9yIHByb3ZpZGVyIGluIHRlbmFudCBzY29wZVxuICAgICAgICAgICAgICAgIGlmIChzZXNzaW9uLm9yZyAmJiBzZXNzaW9uLm9yZy5uYW1lID09PSAnU3lzdGVtJyAmJiB0aGlzLmluamVjdG9yLmdldChTRVNTSU9OX1NDT1BFKSA9PT0gJ3RlbmFudCcpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gQXV0b21hdGljIGFjdEFzIG9ubHkgd29ya3MgaW4gdmVyc2lvbnMgPj05LjVcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWN0QXMoeyBpZDogdGhpcy5pbmplY3Rvci5nZXQoU0VTU0lPTl9PUkdfSUQpIH0pO1xuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ05vIFNFU1NJT05fT1JHX0lEIHNldCBpbiBjb250YWluZXIuIEF1dG9tYXRpYyBhY3RBcyBpcyBkaXNhYmxlZC4nKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgdGFwKChzZXNzaW9uOiBTZXNzaW9uKSA9PiB0aGlzLl9jbG91ZEFwaVNlc3Npb24ubmV4dChzZXNzaW9uKSksXG4gICAgICAgICAgICBjYXRjaEVycm9yKChlKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5vbkNsb3VkQXBpQXV0aGVudGljYXRpb25FcnJvcigpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGUpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG9uQ2xvdWRBcGlBdXRoZW50aWNhdGlvbkVycm9yKCkge1xuICAgICAgICAvLyBDbGVhciB0aGUgYXV0aGVudGljYXRpb24gc28gdGhhdCBhbnkgc3Vic2VxdWVudCBiYWNrZW5kIGNhbGxzIGFyZSBub3QgYXV0aGVudGljYXRlZFxuICAgICAgICB0aGlzLmh0dHAucmVxdWVzdEhlYWRlcnNJbnRlcmNlcHRvci5hdXRoZW50aWNhdGlvbiA9ICcnO1xuICAgICAgICAvLyBfZ2V0Q2xvdWRBcGlTZXNzaW9uIGlzIGluIHRoZSBjZW50ZXIgb2YgYW55IGJhY2tlbmQgY2FsbCwgbnVsbGlmeSBpdCBpbiBvcmRlciBub3QgdG8gcHJldmVudCB0aG9zZSBjYWxsc1xuICAgICAgICAvLyBzaW5jZSBpdCBpcyBlYXNpZXIgdG8gdHJvdWJsZXNob290IGZhaWxpbmcgYmFja2VuZCByYXRoZXIgdGhhbiBubyBjYWxsXG4gICAgICAgIHRoaXMuX2dldENsb3VkQXBpU2Vzc2lvbiA9IG9mKG51bGwpO1xuICAgICAgICAvLyBDbGVhciB0aGUgbGlua3NcbiAgICAgICAgdGhpcy5fY2xvdWRBcGlTZXNzaW9uTGlua3MubmV4dChbXSk7XG4gICAgICAgIC8vIENsZWFyIHRoZSBzZXNzaW9uXG4gICAgICAgIHRoaXMuX2Nsb3VkQXBpU2Vzc2lvbi5uZXh0KG51bGwpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0Q2xvdWRBcGlTZXNzaW9uTGlua3MobGlua3M6IExpbmtUeXBlW10pIHtcbiAgICAgICAgdGhpcy5fY2xvdWRBcGlBY2Nlc3NpYmxlTG9jYXRpb25zID0gbnVsbDtcbiAgICAgICAgdGhpcy5fY2xvdWRBcGlTZXNzaW9uTGlua3MubmV4dChsaW5rcyB8fCBbXSk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldDxUPihlbmRwb2ludDogc3RyaW5nLCAgb3B0aW9ucz86IHsgaGVhZGVycz86IEh0dHBIZWFkZXJzIH0pOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsaWRhdGVSZXF1ZXN0Q29udGV4dCgpLnBpcGUoXG4gICAgICAgICAgICBjb25jYXRNYXAoKCkgPT4gdGhpcy5odHRwLmdldDxUPih0aGlzLmJ1aWxkRW5kcG9pbnRVcmwoZW5kcG9pbnQpLCB7Li4ub3B0aW9uc30pKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHB1YmxpYyBsaXN0PFQ+KGVuZHBvaW50OiBzdHJpbmcsIHF1ZXJ5QnVpbGRlcj86IFF1ZXJ5LkJ1aWxkZXIsIG11bHRpc2l0ZT86IGJvb2xlYW4gfCBBdXRob3JpemVkTG9jYXRpb25UeXBlW10sIG9wdGlvbnM/OiB7IGhlYWRlcnM/OiBIdHRwSGVhZGVycyB9KSB7XG4gICAgICAgIGxldCB1cmwgPSB0aGlzLmJ1aWxkRW5kcG9pbnRVcmwoZW5kcG9pbnQpO1xuXG4gICAgICAgIGlmIChxdWVyeUJ1aWxkZXIpIHtcbiAgICAgICAgICAgIHVybCA9IGAke3VybH0ke3F1ZXJ5QnVpbGRlci5nZXRDbG91ZEFQSSgpfWA7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobXVsdGlzaXRlKSB7XG4gICAgICAgICAgICBpZiAoIW9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxUPih1cmwsIHsgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHsgX211bHRpc2l0ZTogdGhpcy5wYXJzZU11bHRpc2l0ZVZhbHVlKG11bHRpc2l0ZSkgfSkgfSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG9wdGlvbnM/LmhlYWRlcnMpIHtcbiAgICAgICAgICAgICAgICBvcHRpb25zLmhlYWRlcnMuYXBwZW5kKFwiX211bHRpc2l0ZVwiLCB0aGlzLnBhcnNlTXVsdGlzaXRlVmFsdWUobXVsdGlzaXRlKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8VD4odXJsLCB7IC4uLm9wdGlvbnMgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy52YWxpZGF0ZVJlcXVlc3RDb250ZXh0KCkucGlwZShcbiAgICAgICAgICAgIGNvbmNhdE1hcCgoKSA9PiB0aGlzLmh0dHAuZ2V0PFQ+KHVybCwgeyAuLi5vcHRpb25zIH0pKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHB1YmxpYyBjcmVhdGVTeW5jPFQ+KGVuZHBvaW50OiBzdHJpbmcsIGl0ZW06IFQsIG9wdGlvbnM/OiB7IGhlYWRlcnM/OiBIdHRwSGVhZGVycyB9KTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbGlkYXRlUmVxdWVzdENvbnRleHQoKS5waXBlKFxuICAgICAgICAgICAgY29uY2F0TWFwKCgpID0+IHRoaXMuaHR0cC5wb3N0PFQ+KFxuICAgICAgICAgICAgICAgIHRoaXMuYnVpbGRFbmRwb2ludFVybChlbmRwb2ludCksXG4gICAgICAgICAgICAgICAgaXRlbSxcbiAgICAgICAgICAgICAgICB7Li4ub3B0aW9uc31cbiAgICAgICAgICAgICkpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIGNyZWF0ZUFzeW5jPFQ+KGVuZHBvaW50OiBzdHJpbmcsIGl0ZW06IFQsIG9wdGlvbnM/OiB7IGhlYWRlcnM/OiBIdHRwSGVhZGVycyB9KTogT2JzZXJ2YWJsZTxUYXNrVHlwZT4ge1xuICAgICAgICByZXR1cm4gdGhpcy52YWxpZGF0ZVJlcXVlc3RDb250ZXh0KCkucGlwZShcbiAgICAgICAgICAgIGNvbmNhdE1hcCgoKSA9PiB0aGlzLmh0dHAucG9zdChcbiAgICAgICAgICAgICAgICB0aGlzLmJ1aWxkRW5kcG9pbnRVcmwoZW5kcG9pbnQpLFxuICAgICAgICAgICAgICAgIGl0ZW0sXG4gICAgICAgICAgICAgICAgeyAuLi5vcHRpb25zLCBvYnNlcnZlOiAncmVzcG9uc2UnIH1cbiAgICAgICAgICAgICkpLFxuICAgICAgICAgICAgY29uY2F0TWFwKHJlc3BvbnNlID0+IHRoaXMubWFwUmVzcG9uc2VUb1Rhc2socmVzcG9uc2UsICdQT1NUJykpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFRyYW5zZmVyTGluazxUPihlbmRwb2ludDogc3RyaW5nLCBpdGVtOiBULCB0cmFuc2ZlclJlbDogc3RyaW5nID0gVFJBTlNGRVJfTElOS19SRUwpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAgICAgICAucG9zdCh0aGlzLmJ1aWxkRW5kcG9pbnRVcmwoZW5kcG9pbnQpLCBpdGVtLCB7IG9ic2VydmU6ICdyZXNwb25zZScgfSlcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIG1hcCgocmVzOiBIdHRwUmVzcG9uc2U8VCAmIE5hdmlnYWJsZT4pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaGVhZGVyTGlua3M6IExpbmtUeXBlW10gPSByZXMuaGVhZGVycy5oYXMoSEFURU9BU19IRUFERVIpXG4gICAgICAgICAgICAgICAgICAgICAgICA/IHBhcnNlSGVhZGVySGF0ZW9hc0xpbmtzKHJlcy5oZWFkZXJzLmdldChIQVRFT0FTX0hFQURFUikpXG4gICAgICAgICAgICAgICAgICAgICAgICA6IFtdO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBsaW5rczogTGlua1R5cGVbXSA9IHJlcy5ib2R5ID8gKHJlcy5ib2R5LmxpbmsgfHwgW10pIDogW107XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGxpbmsgPSBbLi4uaGVhZGVyTGlua3MsIC4uLmxpbmtzXVxuICAgICAgICAgICAgICAgICAgICAgICAgLmZpbmQoKGwpID0+IGwucmVsID09PSB0cmFuc2ZlclJlbCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghbGluaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBSZXNwb25zZSBmcm9tICR7ZW5kcG9pbnR9IGRpZCBub3QgY29udGFpbiBhIHRyYW5zZmVyIGxpbmtgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbGluay5ocmVmO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGFydFRyYW5zZmVyPFQ+KGVuZHBvaW50OiBzdHJpbmcsIGl0ZW06IFQsIHRyYW5zZmVyUmVsOiBzdHJpbmcgPSBUUkFOU0ZFUl9MSU5LX1JFTCk6IE9ic2VydmFibGU8VmNkVHJhbnNmZXJDbGllbnQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VHJhbnNmZXJMaW5rKGVuZHBvaW50LCBpdGVtLCB0cmFuc2ZlclJlbClcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIG1hcCgodHJhbnNmZXJVcmwpID0+IG5ldyBWY2RUcmFuc2ZlckNsaWVudCh0aGlzLmh0dHAsIHRyYW5zZmVyVXJsKSlcbiAgICAgICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIHVwZGF0ZVN5bmM8VD4oZW5kcG9pbnQ6IHN0cmluZywgaXRlbTogVCwgb3B0aW9ucz86IHsgaGVhZGVycz86IEh0dHBIZWFkZXJzIH0pOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsaWRhdGVSZXF1ZXN0Q29udGV4dCgpLnBpcGUoXG4gICAgICAgICAgICBjb25jYXRNYXAoKCkgPT4gdGhpcy5odHRwLnB1dDxUPihcbiAgICAgICAgICAgICAgICB0aGlzLmJ1aWxkRW5kcG9pbnRVcmwoZW5kcG9pbnQpLFxuICAgICAgICAgICAgICAgIGl0ZW0sXG4gICAgICAgICAgICAgICAgeyAuLi5vcHRpb25zIH1cbiAgICAgICAgICAgICkpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIHVwZGF0ZUFzeW5jPFQ+KGVuZHBvaW50OiBzdHJpbmcsIGl0ZW06IFQsIG9wdGlvbnM/OiB7IGhlYWRlcnM/OiBIdHRwSGVhZGVycyB9KTogT2JzZXJ2YWJsZTxUYXNrVHlwZT4ge1xuXG4gICAgICAgIHJldHVybiB0aGlzLnZhbGlkYXRlUmVxdWVzdENvbnRleHQoKS5waXBlKFxuICAgICAgICAgICAgY29uY2F0TWFwKCgpID0+IHRoaXMuaHR0cC5wdXQoXG4gICAgICAgICAgICAgICAgdGhpcy5idWlsZEVuZHBvaW50VXJsKGVuZHBvaW50KSxcbiAgICAgICAgICAgICAgICBpdGVtLFxuICAgICAgICAgICAgICAgIHsgLi4ub3B0aW9ucywgb2JzZXJ2ZTogJ3Jlc3BvbnNlJyB9XG4gICAgICAgICAgICApKSxcbiAgICAgICAgICAgIGNvbmNhdE1hcChyZXNwb25zZSA9PiB0aGlzLm1hcFJlc3BvbnNlVG9UYXNrKHJlc3BvbnNlLCAnUFVUJykpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIGRlbGV0ZVN5bmMoZW5kcG9pbnQ6IHN0cmluZywgb3B0aW9ucz86IHsgaGVhZGVycz86IEh0dHBIZWFkZXJzIH0pOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsaWRhdGVSZXF1ZXN0Q29udGV4dCgpLnBpcGUoXG4gICAgICAgICAgICBjb25jYXRNYXAoKCkgPT4gdGhpcy5odHRwLmRlbGV0ZTx2b2lkPih0aGlzLmJ1aWxkRW5kcG9pbnRVcmwoZW5kcG9pbnQpLCB7IC4uLm9wdGlvbnMgfSkpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIGRlbGV0ZUFzeW5jKGVuZHBvaW50OiBzdHJpbmcsIG9wdGlvbnM/OiB7IGhlYWRlcnM/OiBIdHRwSGVhZGVycyB9KTogT2JzZXJ2YWJsZTxUYXNrVHlwZT4ge1xuICAgICAgICByZXR1cm4gdGhpcy52YWxpZGF0ZVJlcXVlc3RDb250ZXh0KCkucGlwZShcbiAgICAgICAgICAgIGNvbmNhdE1hcCgoKSA9PiB0aGlzLmh0dHAuZGVsZXRlKHRoaXMuYnVpbGRFbmRwb2ludFVybChlbmRwb2ludCksIHsgLi4ub3B0aW9ucywgb2JzZXJ2ZTogJ3Jlc3BvbnNlJyB9KSksXG4gICAgICAgICAgICBjb25jYXRNYXAocmVzcG9uc2UgPT4gdGhpcy5tYXBSZXNwb25zZVRvVGFzayhyZXNwb25zZSwgJ0RFTEVURScpKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgbWFwUmVzcG9uc2VUb1Rhc2socmVzcG9uc2U6IEh0dHBSZXNwb25zZTxhbnk+LCBodHRwVmVyYjogc3RyaW5nKTogT2JzZXJ2YWJsZTxUYXNrVHlwZT4ge1xuICAgICAgICBpZiAocmVzcG9uc2UuaGVhZGVycy5oYXMoJ0xvY2F0aW9uJykgJiYgcmVzcG9uc2Uuc3RhdHVzID09PSAyMDIpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PFRhc2tUeXBlPihyZXNwb25zZS5oZWFkZXJzLmdldCgnTG9jYXRpb24nKSk7XG4gICAgICAgIH0gZWxzZSBpZiAocmVzcG9uc2UuYm9keSAmJiByZXNwb25zZS5ib2R5LnR5cGUuc3RhcnRzV2l0aCgnYXBwbGljYXRpb24vdm5kLnZtd2FyZS52Y2xvdWQudGFzaysnKSkge1xuICAgICAgICAgICAgY29uc3QgdGFzazogVGFza1R5cGUgPSBPYmplY3QuYXNzaWduKG5ldyBUYXNrVHlwZSgpLCByZXNwb25zZS5ib2R5KTtcbiAgICAgICAgICAgIHJldHVybiBvZih0YXNrKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IG5ldyBFcnJvcihgQW4gYXN5bmNocm9ub3VzIHJlcXVlc3Qgd2FzIG1hZGUgdG8gWyR7aHR0cFZlcmJ9ICR7cmVzcG9uc2UudXJsfV0sIGJ1dCBubyB0YXNrIHdhcyByZXR1cm5lZC4gIFRoZSBvcGVyYXRpb24gbWF5IHN0aWxsIGhhdmUgYmVlbiBzdWNjZXNzZnVsLmApKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0RW50aXR5PFQgZXh0ZW5kcyBFbnRpdHlSZWZlcmVuY2VUeXBlPihlbnRpdHlSZWY6IEVudGl0eVJlZmVyZW5jZVR5cGUpOiBPYnNlcnZhYmxlPFQ+O1xuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTp1bmlmaWVkLXNpZ25hdHVyZXNcbiAgICBwdWJsaWMgZ2V0RW50aXR5PFQgZXh0ZW5kcyBFbnRpdHlSZWZlcmVuY2VUeXBlPih1cm46IHN0cmluZyk6IE9ic2VydmFibGU8VD47XG4gICAgcHVibGljIGdldEVudGl0eTxUIGV4dGVuZHMgRW50aXR5UmVmZXJlbmNlVHlwZT4oZW50aXR5UmVmT3JVcm46IEVudGl0eVJlZmVyZW5jZVR5cGUgfCBzdHJpbmcpOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICAgICAgY29uc3QgZW50aXR5UmVzb2x2ZXI6IE9ic2VydmFibGU8RW50aXR5VHlwZT4gPSB0eXBlb2YgZW50aXR5UmVmT3JVcm4gPT09ICdzdHJpbmcnID9cbiAgICAgICAgICAgIHRoaXMuaHR0cC5nZXQ8RW50aXR5VHlwZT4oYCR7dGhpcy5fYmFzZVVybH0vYXBpL2VudGl0eS8ke2VudGl0eVJlZk9yVXJufWApIDpcbiAgICAgICAgICAgIHRoaXMuaHR0cC5nZXQ8RW50aXR5VHlwZT4oYCR7dGhpcy5fYmFzZVVybH0vYXBpL2VudGl0eS91cm46dmNsb3VkOiR7ZW50aXR5UmVmT3JVcm4udHlwZX06JHtlbnRpdHlSZWZPclVybi5pZH1gKTtcblxuICAgICAgICByZXR1cm4gdGhpcy52YWxpZGF0ZVJlcXVlc3RDb250ZXh0KCkucGlwZShcbiAgICAgICAgICAgIGNvbmNhdE1hcCgoKSA9PiBlbnRpdHlSZXNvbHZlciksXG4gICAgICAgICAgICBjb25jYXRNYXAoZW50aXR5ID0+IHRoaXMuaHR0cC5nZXQ8VD4oYCR7ZW50aXR5LmxpbmtbMF0uaHJlZn1gKSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdXBkYXRlVGFzayh0YXNrOiBUYXNrVHlwZSwgb3B0aW9ucz86IHsgaGVhZGVycz86IEh0dHBIZWFkZXJzIH0pOiBPYnNlcnZhYmxlPFRhc2tUeXBlPiB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbGlkYXRlUmVxdWVzdENvbnRleHQoKS5waXBlKFxuICAgICAgICAgICAgY29uY2F0TWFwKCgpID0+IHRoaXMuaHR0cC5nZXQ8VGFza1R5cGU+KHRhc2suaHJlZiwgeyAuLi5vcHRpb25zIH0pKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHB1YmxpYyBpc1Rhc2tDb21wbGV0ZSh0YXNrOiBUYXNrVHlwZSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gWydzdWNjZXNzJywgJ2Vycm9yJywgJ2NhbmNlbGVkJywgJ2Fib3J0ZWQnXS5pbmRleE9mKHRhc2suc3RhdHVzKSA+IC0xO1xuICAgIH1cblxuICAgIHB1YmxpYyByZW1vdmVJdGVtKGl0ZW06IE5hdmlnYWJsZSwgb3B0aW9ucz86IHsgaGVhZGVycz86IEh0dHBIZWFkZXJzIH0pOiBPYnNlcnZhYmxlPFRhc2tUeXBlPiB7XG4gICAgICAgIGNvbnN0IGxpbms6IExpbmtUeXBlID0gdGhpcy5maW5kTGluayhpdGVtLCAncmVtb3ZlJywgbnVsbCk7XG4gICAgICAgIGlmICghbGluaykge1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gbmV3IEVycm9yKGBObyAncmVtb3ZlJyBsaW5rIGZvciBzcGVjaWZpZWQgcmVzb3VyY2UuYCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMudmFsaWRhdGVSZXF1ZXN0Q29udGV4dCgpLnBpcGUoXG4gICAgICAgICAgICBjb25jYXRNYXAoKCkgPT4gdGhpcy5odHRwLmRlbGV0ZTxUYXNrVHlwZT4obGluay5ocmVmLCB7IC4uLm9wdGlvbnMgfSkpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUXVlcmllcyB0aGUgVk13YXJlIENsb3VkIERpcmVjdG9yIEFQSSBiYXNlZCBvbiB0aGUgc3BlY2lmaWVkIFF1ZXJ5LkJ1aWxkZXIgaW5zdGFuY2UuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gYnVpbGRlciBBbiBkZWZpbml0aW9uIG9mIHRoZSBxdWVyeSB0byBjb25zdHJ1Y3QgKHR5cGUsIGZpbHRlciwgcGFnZSBzaXplLCBldGMuKVxuICAgICAqIEBwYXJhbSBtdWx0aXNpdGUgYSBmbGFnIGluZGljYXRpbmcgd2hldGhlciBvciBub3QgdG8gZmFuIHRoZSBxdWVyeSBvdXQgdG8gYWxsIGF2YWlsYWJsZSBzaXRlc1xuICAgICAqIEByZXR1cm5zIGEgcXVlcnkgcmVzdWx0IGZvciB0aGUgc3BlY2lmaWVkIHF1ZXJ5XG4gICAgICovXG4gICAgcHVibGljIHF1ZXJ5PFQ+KGJ1aWxkZXI6IFF1ZXJ5LkJ1aWxkZXIsIG11bHRpc2l0ZT86IGJvb2xlYW4sIG9wdGlvbnM/OiB7IGhlYWRlcnM/OiBIdHRwSGVhZGVycyB9KTogT2JzZXJ2YWJsZTxUPjtcbiAgICAvKipcbiAgICAgKiBRdWVyaWVzIHRoZSBWTXdhcmUgQ2xvdWQgRGlyZWN0b3IgQVBJIGJhc2VkIG9uIHRoZSBzcGVjaWZpZWQgUXVlcnkuQnVpbGRlciBpbnN0YW5jZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBidWlsZGVyIEFuIGRlZmluaXRpb24gb2YgdGhlIHF1ZXJ5IHRvIGNvbnN0cnVjdCAodHlwZSwgZmlsdGVyLCBwYWdlIHNpemUsIGV0Yy4pXG4gICAgICogQHBhcmFtIG11bHRpc2l0ZSB0aGUgc2V0IG9mIHNpdGUgbG9jYXRpb25zIHRvIGluY2x1ZGUgaW4gdGhlIHF1ZXJ5IGZhbm91dFxuICAgICAqIEByZXR1cm5zIGEgcXVlcnkgcmVzdWx0IGZvciB0aGUgc3BlY2lmaWVkIHF1ZXJ5XG4gICAgICovXG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnVuaWZpZWQtc2lnbmF0dXJlc1xuICAgIHB1YmxpYyBxdWVyeTxUPihidWlsZGVyOiBRdWVyeS5CdWlsZGVyLCBtdWx0aXNpdGU/OiBBdXRob3JpemVkTG9jYXRpb25UeXBlW10sIG9wdGlvbnM/OiB7IGhlYWRlcnM/OiBIdHRwSGVhZGVycyB9KTogT2JzZXJ2YWJsZTxUPjtcbiAgICBwdWJsaWMgcXVlcnk8VD4oYnVpbGRlcjogUXVlcnkuQnVpbGRlciwgbXVsdGlzaXRlPzogYW55LCBvcHRpb25zPzogeyBoZWFkZXJzPzogSHR0cEhlYWRlcnMgfSk6IE9ic2VydmFibGU8VD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRRdWVyeVBhZ2UoYCR7dGhpcy5fYmFzZVVybH0vYXBpL3F1ZXJ5JHtidWlsZGVyLmdldCgpfWAsIG11bHRpc2l0ZSwgb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUXVlcmllcyB0aGUgVk13YXJlIENsb3VkIERpcmVjdG9yIEFQSSBmb3IgdGhlIGZpcnN0IHBhZ2Ugb2YgdGhlIHByb3ZpZGVkIHJlc3VsdCBzZXQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcmVzdWx0IHRoZSByZXN1bHQgc2V0IHRvIHJldHJpZXZlIHRoZSBmaXJzdCBwYWdlIG9mIHJlY29yZHMgZm9yXG4gICAgICogQHBhcmFtIG11bHRpc2l0ZSBhIGZsYWcgaW5kaWNhdGluZyB3aGV0aGVyIG9yIG5vdCB0byBmYW4gdGhlIHF1ZXJ5IG91dCB0byBhbGwgYXZhaWxhYmxlIHNpdGVzXG4gICAgICogQHJldHVybnMgdGhlIHJlY29yZHMgZm9yIHRoZSBmaXJzdCBwYWdlIG9mIHRoZSBxdWVyeVxuICAgICAqL1xuICAgIHB1YmxpYyBmaXJzdFBhZ2U8VD4ocmVzdWx0OiBULCBtdWx0aXNpdGU/OiBib29sZWFuLCBvcHRpb25zPzogeyBoZWFkZXJzPzogSHR0cEhlYWRlcnMgfSk6IE9ic2VydmFibGU8VD47XG4gICAgLyoqXG4gICAgICogUXVlcmllcyB0aGUgVk13YXJlIENsb3VkIERpcmVjdG9yIEFQSSBmb3IgdGhlIGZpcnN0IHBhZ2Ugb2YgdGhlIHByb3ZpZGVkIHJlc3VsdCBzZXQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcmVzdWx0IHRoZSByZXN1bHQgc2V0IHRvIHJldHJpZXZlIHRoZSBmaXJzdCBwYWdlIG9mIHJlY29yZHMgZm9yXG4gICAgICogQHBhcmFtIG11bHRpc2l0ZSB0aGUgc2V0IG9mIHNpdGUgbG9jYXRpb25zIHRvIGluY2x1ZGUgaW4gdGhlIHF1ZXJ5IGZhbm91dFxuICAgICAqIEByZXR1cm5zIHRoZSByZWNvcmRzIGZvciB0aGUgZmlyc3QgcGFnZSBvZiB0aGUgcXVlcnlcbiAgICAgKi9cbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6dW5pZmllZC1zaWduYXR1cmVzXG4gICAgcHVibGljIGZpcnN0UGFnZTxUPihyZXN1bHQ6IFQsIG11bHRpc2l0ZT86IEF1dGhvcml6ZWRMb2NhdGlvblR5cGVbXSwgb3B0aW9ucz86IHsgaGVhZGVycz86IEh0dHBIZWFkZXJzIH0pOiBPYnNlcnZhYmxlPFQ+O1xuICAgIHB1YmxpYyBmaXJzdFBhZ2U8VD4ocmVzdWx0OiBULCBtdWx0aXNpdGU/OiBhbnksIG9wdGlvbnM/OiB7IGhlYWRlcnM/OiBIdHRwSGVhZGVycyB9KTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgICAgIGNvbnN0IGxpbms6IExpbmtUeXBlID0gdGhpcy5maW5kTGluayhyZXN1bHQsICdmaXJzdFBhZ2UnLCAocmVzdWx0IGFzIFJlc291cmNlVHlwZSkudHlwZSk7XG4gICAgICAgIGlmICghbGluaykge1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gbmV3IEVycm9yKGBObyAnZmlyc3RQYWdlJyBsaW5rIGZvciBzcGVjaWZpZWQgcXVlcnkuYCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UXVlcnlQYWdlKGxpbmsuaHJlZiwgbXVsdGlzaXRlLCBvcHRpb25zKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaGFzRmlyc3RQYWdlPFQ+KHJlc3VsdDogVCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gISF0aGlzLmZpbmRMaW5rKHJlc3VsdCwgJ2ZpcnN0UGFnZScsIChyZXN1bHQgYXMgUmVzb3VyY2VUeXBlKS50eXBlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBRdWVyaWVzIHRoZSBWTXdhcmUgQ2xvdWQgRGlyZWN0b3IgQVBJIGZvciB0aGUgcHJldmlvdXMgcGFnZSBvZiB0aGUgcHJvdmlkZWQgcmVzdWx0IHNldC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSByZXN1bHQgdGhlIHJlc3VsdCBzZXQgdG8gcmV0cmlldmUgdGhlIHByZXZpb3VzIHBhZ2Ugb2YgcmVjb3JkcyBmb3JcbiAgICAgKiBAcGFyYW0gbXVsdGlzaXRlIGEgZmxhZyBpbmRpY2F0aW5nIHdoZXRoZXIgb3Igbm90IHRvIGZhbiB0aGUgcXVlcnkgb3V0IHRvIGFsbCBhdmFpbGFibGUgc2l0ZXNcbiAgICAgKiBAcmV0dXJucyB0aGUgcmVjb3JkcyBmb3IgdGhlIHByZXZpb3VzIHBhZ2Ugb2YgdGhlIHF1ZXJ5XG4gICAgICovXG4gICAgcHVibGljIHByZXZpb3VzUGFnZTxUPihyZXN1bHQ6IFQsIG11bHRpc2l0ZT86IGJvb2xlYW4sIG9wdGlvbnM/OiB7IGhlYWRlcnM/OiBIdHRwSGVhZGVycyB9KTogT2JzZXJ2YWJsZTxUPjtcbiAgICAvKipcbiAgICAgKiBRdWVyaWVzIHRoZSBWTXdhcmUgQ2xvdWQgRGlyZWN0b3IgQVBJIGZvciB0aGUgcHJldmlvdXMgcGFnZSBvZiB0aGUgcHJvdmlkZWQgcmVzdWx0IHNldC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSByZXN1bHQgdGhlIHJlc3VsdCBzZXQgdG8gcmV0cmlldmUgdGhlIHByZXZpb3VzIHBhZ2Ugb2YgcmVjb3JkcyBmb3JcbiAgICAgKiBAcGFyYW0gbXVsdGlzaXRlIHRoZSBzZXQgb2Ygc2l0ZSBsb2NhdGlvbnMgdG8gaW5jbHVkZSBpbiB0aGUgcXVlcnkgZmFub3V0XG4gICAgICogQHJldHVybnMgdGhlIHJlY29yZHMgZm9yIHRoZSBwcmV2aW91cyBwYWdlIG9mIHRoZSBxdWVyeVxuICAgICAqL1xuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTp1bmlmaWVkLXNpZ25hdHVyZXNcbiAgICBwdWJsaWMgcHJldmlvdXNQYWdlPFQ+KHJlc3VsdDogVCwgbXVsdGlzaXRlPzogQXV0aG9yaXplZExvY2F0aW9uVHlwZVtdLCBvcHRpb25zPzogeyBoZWFkZXJzPzogSHR0cEhlYWRlcnMgfSk6IE9ic2VydmFibGU8VD47XG4gICAgcHVibGljIHByZXZpb3VzUGFnZTxUPihyZXN1bHQ6IFQsIG11bHRpc2l0ZT86IGFueSwgb3B0aW9ucz86IHsgaGVhZGVycz86IEh0dHBIZWFkZXJzIH0pOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICAgICAgY29uc3QgbGluazogTGlua1R5cGUgPSB0aGlzLmZpbmRMaW5rKHJlc3VsdCwgJ3ByZXZpb3VzUGFnZScsIChyZXN1bHQgYXMgUmVzb3VyY2VUeXBlKS50eXBlKTtcbiAgICAgICAgaWYgKCFsaW5rKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBuZXcgRXJyb3IoYE5vICdwcmV2aW91c1BhZ2UnIGxpbmsgZm9yIHNwZWNpZmllZCBxdWVyeS5gKSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5nZXRRdWVyeVBhZ2UobGluay5ocmVmLCBtdWx0aXNpdGUsIG9wdGlvbnMpO1xuICAgIH1cblxuICAgIHB1YmxpYyBoYXNQcmV2aW91c1BhZ2U8VD4ocmVzdWx0OiBUKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuZmluZExpbmsocmVzdWx0LCAncHJldmlvdXNQYWdlJywgKHJlc3VsdCBhcyBSZXNvdXJjZVR5cGUpLnR5cGUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFF1ZXJpZXMgdGhlIFZNd2FyZSBDbG91ZCBEaXJlY3RvciBBUEkgZm9yIHRoZSBuZXh0IHBhZ2Ugb2YgdGhlIHByb3ZpZGVkIHJlc3VsdCBzZXQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcmVzdWx0IHRoZSByZXN1bHQgc2V0IHRvIHJldHJpZXZlIHRoZSBuZXh0IHBhZ2Ugb2YgcmVjb3JkcyBmb3JcbiAgICAgKiBAcGFyYW0gbXVsdGlzaXRlIGEgZmxhZyBpbmRpY2F0aW5nIHdoZXRoZXIgb3Igbm90IHRvIGZhbiB0aGUgcXVlcnkgb3V0IHRvIGFsbCBhdmFpbGFibGUgc2l0ZXNcbiAgICAgKiBAcmV0dXJucyB0aGUgcmVjb3JkcyBmb3IgdGhlIG5leHQgcGFnZSBvZiB0aGUgcXVlcnlcbiAgICAgKi9cbiAgICBwdWJsaWMgbmV4dFBhZ2U8VD4ocmVzdWx0OiBULCBtdWx0aXNpdGU/OiBib29sZWFuLCBvcHRpb25zPzogeyBoZWFkZXJzPzogSHR0cEhlYWRlcnMgfSk6IE9ic2VydmFibGU8VD47XG4gICAgLyoqXG4gICAgICogUXVlcmllcyB0aGUgVk13YXJlIENsb3VkIERpcmVjdG9yIEFQSSBmb3IgdGhlIG5leHQgcGFnZSBvZiB0aGUgcHJvdmlkZWQgcmVzdWx0IHNldC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSByZXN1bHQgdGhlIHJlc3VsdCBzZXQgdG8gcmV0cmlldmUgdGhlIG5leHQgcGFnZSBvZiByZWNvcmRzIGZvclxuICAgICAqIEBwYXJhbSBtdWx0aXNpdGUgdGhlIHNldCBvZiBzaXRlIGxvY2F0aW9ucyB0byBpbmNsdWRlIGluIHRoZSBxdWVyeSBmYW5vdXRcbiAgICAgKiBAcmV0dXJucyB0aGUgcmVjb3JkcyBmb3IgdGhlIG5leHQgcGFnZSBvZiB0aGUgcXVlcnlcbiAgICAgKi9cbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6dW5pZmllZC1zaWduYXR1cmVzXG4gICAgcHVibGljIG5leHRQYWdlPFQ+KHJlc3VsdDogVCwgbXVsdGlzaXRlPzogQXV0aG9yaXplZExvY2F0aW9uVHlwZVtdLCBvcHRpb25zPzogeyBoZWFkZXJzPzogSHR0cEhlYWRlcnMgfSk6IE9ic2VydmFibGU8VD47XG4gICAgcHVibGljIG5leHRQYWdlPFQ+KHJlc3VsdDogVCwgbXVsdGlzaXRlPzogYW55LCBvcHRpb25zPzogeyBoZWFkZXJzPzogSHR0cEhlYWRlcnMgfSk6IE9ic2VydmFibGU8VD4ge1xuICAgICAgICBjb25zdCBsaW5rOiBMaW5rVHlwZSA9IHRoaXMuZmluZExpbmsocmVzdWx0LCAnbmV4dFBhZ2UnLCAocmVzdWx0IGFzIFJlc291cmNlVHlwZSkudHlwZSk7XG4gICAgICAgIGlmICghbGluaykge1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gbmV3IEVycm9yKGBObyAnbmV4dFBhZ2UnIGxpbmsgZm9yIHNwZWNpZmllZCBxdWVyeS5gKSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5nZXRRdWVyeVBhZ2U8VD4obGluay5ocmVmLCBtdWx0aXNpdGUsIG9wdGlvbnMpO1xuICAgIH1cblxuICAgIHB1YmxpYyBoYXNOZXh0UGFnZTxUPihyZXN1bHQ6IFQpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5maW5kTGluayhyZXN1bHQsICduZXh0UGFnZScsIChyZXN1bHQgYXMgUmVzb3VyY2VUeXBlKS50eXBlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBRdWVyaWVzIHRoZSBWTXdhcmUgQ2xvdWQgRGlyZWN0b3IgQVBJIGZvciB0aGUgbGFzdCBwYWdlIG9mIHRoZSBwcm92aWRlZCByZXN1bHQgc2V0LlxuICAgICAqXG4gICAgICogQHBhcmFtIHJlc3VsdCB0aGUgcmVzdWx0IHNldCB0byByZXRyaWV2ZSB0aGUgbGFzdCBwYWdlIG9mIHJlY29yZHMgZm9yXG4gICAgICogQHBhcmFtIG11bHRpc2l0ZSBhIGZsYWcgaW5kaWNhdGluZyB3aGV0aGVyIG9yIG5vdCB0byBmYW4gdGhlIHF1ZXJ5IG91dCB0byBhbGwgYXZhaWxhYmxlIHNpdGVzXG4gICAgICogQHJldHVybnMgdGhlIHJlY29yZHMgZm9yIHRoZSBsYXN0IHBhZ2Ugb2YgdGhlIHF1ZXJ5XG4gICAgICovXG4gICAgcHVibGljIGxhc3RQYWdlPFQ+KHJlc3VsdDogVCwgbXVsdGlzaXRlPzogYm9vbGVhbiwgb3B0aW9ucz86IHsgaGVhZGVycz86IEh0dHBIZWFkZXJzIH0pOiBPYnNlcnZhYmxlPFQ+O1xuICAgIC8qKlxuICAgICAqIFF1ZXJpZXMgdGhlIFZNd2FyZSBDbG91ZCBEaXJlY3RvciBBUEkgZm9yIHRoZSBsYXN0IHBhZ2Ugb2YgdGhlIHByb3ZpZGVkIHJlc3VsdCBzZXQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcmVzdWx0IHRoZSByZXN1bHQgc2V0IHRvIHJldHJpZXZlIHRoZSBsYXN0IHBhZ2Ugb2YgcmVjb3JkcyBmb3JcbiAgICAgKiBAcGFyYW0gbXVsdGlzaXRlIHRoZSBzZXQgb2Ygc2l0ZSBsb2NhdGlvbnMgdG8gaW5jbHVkZSBpbiB0aGUgcXVlcnkgZmFub3V0XG4gICAgICogQHJldHVybnMgdGhlIHJlY29yZHMgZm9yIHRoZSBsYXN0IHBhZ2Ugb2YgdGhlIHF1ZXJ5XG4gICAgICovXG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnVuaWZpZWQtc2lnbmF0dXJlc1xuICAgIHB1YmxpYyBsYXN0UGFnZTxUPihyZXN1bHQ6IFQsIG11bHRpc2l0ZT86IEF1dGhvcml6ZWRMb2NhdGlvblR5cGVbXSwgb3B0aW9ucz86IHsgaGVhZGVycz86IEh0dHBIZWFkZXJzIH0pOiBPYnNlcnZhYmxlPFQ+O1xuICAgIHB1YmxpYyBsYXN0UGFnZTxUPihyZXN1bHQ6IFQsIG11bHRpc2l0ZT86IGFueSwgb3B0aW9ucz86IHsgaGVhZGVycz86IEh0dHBIZWFkZXJzIH0pOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICAgICAgY29uc3QgbGluazogTGlua1R5cGUgPSB0aGlzLmZpbmRMaW5rKHJlc3VsdCwgJ2xhc3RQYWdlJywgKHJlc3VsdCBhcyBSZXNvdXJjZVR5cGUpLnR5cGUpO1xuICAgICAgICBpZiAoIWxpbmspIHtcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IG5ldyBFcnJvcihgTm8gJ2xhc3RQYWdlJyBsaW5rIGZvciBzcGVjaWZpZWQgcXVlcnkuYCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UXVlcnlQYWdlKGxpbmsuaHJlZiwgbXVsdGlzaXRlLCBvcHRpb25zKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaGFzTGFzdFBhZ2U8VD4ocmVzdWx0OiBUKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuZmluZExpbmsocmVzdWx0LCAnbGFzdFBhZ2UnLCAocmVzdWx0IGFzIFJlc291cmNlVHlwZSkudHlwZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRRdWVyeVBhZ2U8VD4oaHJlZjogc3RyaW5nLCBtdWx0aXNpdGU/OiBhbnksIG9wdGlvbnM/OiB7IGhlYWRlcnM/OiBIdHRwSGVhZGVycyB9KTogT2JzZXJ2YWJsZTxUPiB7XG4gICAgICAgIGlmIChtdWx0aXNpdGUpIHtcbiAgICAgICAgICAgIGlmICghb3B0aW9ucykge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PFQ+KGhyZWYsIHsgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHsgX211bHRpc2l0ZTogdGhpcy5wYXJzZU11bHRpc2l0ZVZhbHVlKG11bHRpc2l0ZSkgfSkgfSlcbiAgICAgICAgICAgIH0gZWxzZSBpZiAob3B0aW9ucz8uaGVhZGVycykge1xuICAgICAgICAgICAgICAgIG9wdGlvbnMuaGVhZGVycy5hcHBlbmQoXCJfbXVsdGlzaXRlXCIsIHRoaXMucGFyc2VNdWx0aXNpdGVWYWx1ZShtdWx0aXNpdGUpKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxUPihocmVmLCB7IC4uLm9wdGlvbnMgfSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLnZhbGlkYXRlUmVxdWVzdENvbnRleHQoKS5waXBlKFxuICAgICAgICAgICAgY29uY2F0TWFwKCgpID0+IHRoaXMuaHR0cC5nZXQ8VD4oaHJlZiwgeyAuLi5vcHRpb25zIH0pKVxuICAgICAgICApO1xuICAgIH1cblxuICAvKipcbiAgICogVXNlIHRvIHBlcmZvcm0gYWN0aW9uIGF2YWlsYWJpbGl0eSBjaGVjayBiZWZvcmUgY2FsbGluZyB0aGUgQVBJXG4gICAqIEBwYXJhbSBpdGVtIC0gdGhlIG5hdmlnYWJsZSBpdGVtIChjb250YWluaW5nIGxpbmsgY29sbGVjdGlvbilcbiAgICogQHBhcmFtIGxpbmtSZWxUeXBlIC0gdGhlIGxpbmsgcmVsIHR5cGUsIHBhc3MgZWl0aGVyIExpbmtSZWxUeXBlIG9yIHN0cmluZ1xuICAgKiBAcGFyYW0gZW50aXR5UmVmVHlwZSAtIHRoZSBlbnRpdHkgcmVmZXJlbmNlIHR5cGVcbiAgICovXG4gICAgcHVibGljIGNhblBlcmZvcm1BY3Rpb24oaXRlbTogTmF2aWdhYmxlLCBsaW5rUmVsVHlwZTogTGlua1JlbFR5cGUgfCBzdHJpbmcsIGVudGl0eVJlZlR5cGU/OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5maW5kTGluayhpdGVtLCBsaW5rUmVsVHlwZSwgZW50aXR5UmVmVHlwZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBmaW5kTGluayhpdGVtOiBOYXZpZ2FibGUsIHJlbDogc3RyaW5nLCB0eXBlOiBzdHJpbmcpOiBMaW5rVHlwZSB7XG4gICAgICAgIGlmICghaXRlbSB8fCAhaXRlbS5saW5rKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGl0ZW0ubGluay5maW5kKChsaW5rKSA9PiB7XG4gICAgICAgICAgICBpZiAodHlwZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBsaW5rLnJlbC5pbmNsdWRlcyhyZWwpICYmIGxpbmsudHlwZSA9PT0gdHlwZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGxpbmsucmVsLmluY2x1ZGVzKHJlbCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgcGFyc2VNdWx0aXNpdGVWYWx1ZShtdWx0aXNpdGU6IGJvb2xlYW4gfCBBdXRob3JpemVkTG9jYXRpb25UeXBlW10pOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdHlwZW9mIG11bHRpc2l0ZSA9PT0gJ2Jvb2xlYW4nID8gKG11bHRpc2l0ZSA/ICdnbG9iYWwnIDogJ2xvY2FsJykgOiBtdWx0aXNpdGUubWFwKHNpdGUgPT4gc2l0ZS5sb2NhdGlvbklkKS5qb2luKCcsJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgVXNlIGNsb3VkQXBpU2Vzc2lvblxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgc2Vzc2lvbigpOiBPYnNlcnZhYmxlPFNlc3Npb25UeXBlPiB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbGlkYXRlUmVxdWVzdENvbnRleHQoKS5waXBlKFxuICAgICAgICAgICAgY29uY2F0TWFwKCgpID0+IHRoaXMuX3Nlc3Npb25PYnNlcnZhYmxlKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCBTZXNzaW9uIG9ic2VydmFibGVcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGNsb3VkQXBpU2Vzc2lvbigpOiBPYnNlcnZhYmxlPFNlc3Npb24+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsaWRhdGVSZXF1ZXN0Q29udGV4dENsb3VkQXBpT25seSgpLnBpcGUoXG4gICAgICAgICAgICBjb25jYXRNYXAoKCkgPT4gdGhpcy5fY2xvdWRBcGlTZXNzaW9uT2JzZXJ2YWJsZSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHVzZXJuYW1lKCk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG4gICAgICAgIHJldHVybiBtZXJnZShcbiAgICAgICAgICAgICAgICB0aGlzLmNsb3VkQXBpU2Vzc2lvbi5waXBlKFxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXIoKCkgPT4gdGhpcy5faXNDbG91ZEFwaUxvZ2luKSxcbiAgICAgICAgICAgICAgICAgICAgbWFwKHNlc3Npb24gPT4gc2Vzc2lvbiAmJiBzZXNzaW9uLnVzZXIgJiYgc2Vzc2lvbi51c2VyLm5hbWUpXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICB0aGlzLnNlc3Npb24ucGlwZShcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyKCgpID0+ICF0aGlzLl9pc0Nsb3VkQXBpTG9naW4pLFxuICAgICAgICAgICAgICAgICAgICBtYXAoc2Vzc2lvbiA9PiBzZXNzaW9uICYmIHNlc3Npb24udXNlcilcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgb3JnYW5pemF0aW9uKCk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG4gICAgICAgIHJldHVybiBtZXJnZShcbiAgICAgICAgICAgIHRoaXMuY2xvdWRBcGlTZXNzaW9uLnBpcGUoXG4gICAgICAgICAgICAgICAgZmlsdGVyKCgpID0+IHRoaXMuX2lzQ2xvdWRBcGlMb2dpbiksXG4gICAgICAgICAgICAgICAgbWFwKHNlc3Npb24gPT4gc2Vzc2lvbiAmJiBzZXNzaW9uLm9yZyAmJiBzZXNzaW9uLm9yZy5uYW1lKVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5waXBlKFxuICAgICAgICAgICAgICAgIGZpbHRlcigoKSA9PiAhdGhpcy5faXNDbG91ZEFwaUxvZ2luKSxcbiAgICAgICAgICAgICAgICBtYXAoc2Vzc2lvbiA9PiBzZXNzaW9uICYmIHNlc3Npb24ub3JnKVxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBkZXByZWNhdGVkIFVzZSBjbG91ZEFwaUxvY2F0aW9uXG4gICAgICovXG4gICAgcHVibGljIGdldCBsb2NhdGlvbigpOiBPYnNlcnZhYmxlPEF1dGhvcml6ZWRMb2NhdGlvblR5cGU+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2Vzc2lvbi5waXBlKFxuICAgICAgICAgICAgbWFwKHNlc3Npb24gPT4gc2Vzc2lvbi5hdXRob3JpemVkTG9jYXRpb25zLmxvY2F0aW9uLmZpbmQobG9jYXRpb24gPT4gbG9jYXRpb24ubG9jYXRpb25JZCA9PT0gc2Vzc2lvbi5sb2NhdGlvbklkKSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBsb2NhdGlvbiBjb3JyZXNwb25kaW5nIHRvIHRoZSBjdXJyZW50IHNlc3Npb25cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGNsb3VkQXBpTG9jYXRpb24oKTogT2JzZXJ2YWJsZTxBY2Nlc3NpYmxlTG9jYXRpb24+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xvdWRBcGlTZXNzaW9uLnBpcGUoXG4gICAgICAgICAgICBzd2l0Y2hNYXAoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5fY2xvdWRBcGlBY2Nlc3NpYmxlTG9jYXRpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEVuc3VyZSBjYWNoaW5nIGZvciBnZXR0aW5nIEFjY2Vzc2libGVMb2NhdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2xvdWRBcGlBY2Nlc3NpYmxlTG9jYXRpb25zID0gdGhpcy5fY2xvdWRBcGlTZXNzaW9uTGlua3NcbiAgICAgICAgICAgICAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEdldCB0aGUgQWNjZXNzaWJsZUxvY2F0aW9ucyBsaW5rXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwKChsaW5rcykgPT4gdGhpcy5maW5kTGluayh7IGxpbms6IGxpbmtzIH0sICdkb3duJywgJ0FjY2Vzc2libGVMb2NhdGlvbnMnKSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRmV0Y2ggQWNjZXNzaWJsZUxvY2F0aW9ucyBmcm9tIHRoZSBiYWNrZW5kXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoTWFwKChsaW5rOiBMaW5rVHlwZSkgPT4gbGluayA/IHRoaXMuaHR0cC5nZXQ8QWNjZXNzaWJsZUxvY2F0aW9ucz4obGluay5ocmVmKSA6IG9mKG51bGwpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBHZXQgdGhlIGFycmF5IHdpdGggYWxsIGxvY2F0aW9ucyAod2hhdCBpZiB0aGVyZSBhcmUgbWFueSBwYWdlcylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXAoKGFjY2Vzc2libGVMb2NhdGlvbnM6IEFjY2Vzc2libGVMb2NhdGlvbnMpID0+IGFjY2Vzc2libGVMb2NhdGlvbnMgJiYgYWNjZXNzaWJsZUxvY2F0aW9ucy52YWx1ZXMpXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGFyZSh7IGNvbm5lY3RvcjogKCkgPT4gbmV3IFJlcGxheVN1YmplY3QoMSksIHJlc2V0T25FcnJvcjogZmFsc2UsIHJlc2V0T25Db21wbGV0ZTogZmFsc2UsIHJlc2V0T25SZWZDb3VudFplcm86IGZhbHNlIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fY2xvdWRBcGlBY2Nlc3NpYmxlTG9jYXRpb25zO1xuICAgICAgICAgICAgfSksXG5cbiAgICAgICAgICAgIC8vIE5lZWQgdG8gaGF2ZSB0aGUgc2Vzc2lvbiBpbiBvcmRlciB0byBnZXQgaXRzIGxvY2F0aW9uXG4gICAgICAgICAgICB3aXRoTGF0ZXN0RnJvbSh0aGlzLmNsb3VkQXBpU2Vzc2lvbiksXG4gICAgICAgICAgICAvLyBGaW5kIHRoZSBsb2NhdGlvbiB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoaXMgc2Vzc2lvblxuICAgICAgICAgICAgbWFwKChbYWNjZXNzaWJsZUxvY2F0aW9ucywgc2Vzc2lvbl0pID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIWFjY2Vzc2libGVMb2NhdGlvbnMgfHwgIXNlc3Npb24pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHNlc3Npb25Mb2NhdGlvbiA9IHNlc3Npb24ubG9jYXRpb247XG4gICAgICAgICAgICAgICAgaWYgKCFzZXNzaW9uTG9jYXRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBhY2Nlc3NpYmxlTG9jYXRpb25zLmZpbmQobG9jYXRpb24gPT4gbG9jYXRpb24ubG9jYXRpb25JZCA9PT0gc2Vzc2lvbkxvY2F0aW9uKTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICApO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRMb2NhdGlvbihzZXNzaW9uOiBTZXNzaW9uVHlwZSk6IEF1dGhvcml6ZWRMb2NhdGlvblR5cGUge1xuICAgICAgICByZXR1cm4gc2Vzc2lvbi5hdXRob3JpemVkTG9jYXRpb25zLmxvY2F0aW9uLmZpbmQobG9jYXRpb24gPT4gbG9jYXRpb24ubG9jYXRpb25JZCA9PT0gc2Vzc2lvbi5sb2NhdGlvbklkKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBCdWlsZCB0aGUgZW5kcG9pbnQgdXJsLiBJZiB0aGUgcHJvdmlkZWQgZW5kcG9pbnQgaXMgYWxyZWFkeSBhbiBhYnNvbHV0ZSBVUkwsIHRoZW4gcmV0dXJuIGl0IGFzIGl0IGlzIHdpdGhvdXRcbiAgICAgKiBhbnkgbW9kaWZpY2F0aW9ucywgb3RoZXJ3aXNlIGNvbnNpZGVyIGl0IGFzIGEgcmVsYXRpdmUgb25lIGFuZCBwcmVwZW5kIHRoZSBiYXNlVXJsIGFzIGRlZmluZWQgYnkgdGhlIGhvc3QgYXBwbGljYXRpb24uXG4gICAgICovXG4gICAgcHJpdmF0ZSBidWlsZEVuZHBvaW50VXJsKGVuZHBvaW50OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gZW5kcG9pbnQuaW5kZXhPZignOi8vJykgPiAtMSA/IGVuZHBvaW50IDogYCR7dGhpcy5fYmFzZVVybH0vJHtlbmRwb2ludH1gO1xuICAgIH1cblxufVxuIl19
@@ -998,13 +998,13 @@ class VcdApiClient {
998
998
  else {
999
999
  negotiatedVersion = this.http.get(`${this._baseUrl}/api/versions`).pipe(map(versions => this.negotiateVersion(versions)), tap(version => this.setVersion(version)));
1000
1000
  }
1001
- this._negotiateVersion = negotiatedVersion.pipe(share({ connector: () => new ReplaySubject(1) }));
1001
+ this._negotiateVersion = negotiatedVersion.pipe(share({ connector: () => new ReplaySubject(1), resetOnError: false, resetOnComplete: false, resetOnRefCountZero: false }));
1002
1002
  const tokenHolder = this.injector.get(AuthTokenHolderService$1, { token: '' });
1003
1003
  const token = tokenHolder.jwt ? `Bearer ${tokenHolder.jwt}` : tokenHolder.token;
1004
1004
  this._getSession = this.setAuthentication(token)
1005
- .pipe(share({ connector: () => new ReplaySubject(1) }));
1005
+ .pipe(share({ connector: () => new ReplaySubject(1), resetOnError: false, resetOnComplete: false, resetOnRefCountZero: false }));
1006
1006
  this._getCloudApiSession = this.setCloudApiAuthentication(token)
1007
- .pipe(share({ connector: () => new ReplaySubject(1) }));
1007
+ .pipe(share({ connector: () => new ReplaySubject(1), resetOnError: false, resetOnComplete: false, resetOnRefCountZero: false }));
1008
1008
  // This is not an explicit cloud api login
1009
1009
  this._isCloudApiLogin = false;
1010
1010
  }
@@ -1423,7 +1423,7 @@ class VcdApiClient {
1423
1423
  switchMap((link) => link ? this.http.get(link.href) : of(null)),
1424
1424
  // Get the array with all locations (what if there are many pages)
1425
1425
  map((accessibleLocations) => accessibleLocations && accessibleLocations.values))
1426
- .pipe(share({ connector: () => new ReplaySubject(1) }));
1426
+ .pipe(share({ connector: () => new ReplaySubject(1), resetOnError: false, resetOnComplete: false, resetOnRefCountZero: false }));
1427
1427
  }
1428
1428
  return this._cloudApiAccessibleLocations;
1429
1429
  }),