@wavemaker/app-ng-runtime 11.5.2-next.141092 → 11.5.2-next.141096

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wavemaker/app-ng-runtime",
3
- "version": "11.5.2-next.141092",
3
+ "version": "11.5.2-next.141096",
4
4
  "description": "All modules required for a wavemaker application.",
5
5
  "main": "index.js",
6
6
  "scripts": {
@@ -271,9 +271,21 @@
271
271
  * remove-toolbar has been assigned with a window name WM_PREVIEW_WINDOW, check if the iframe is our toolbar related and
272
272
  * safely change the location of the parent toolbar with current url.
273
273
  */
274
- if (window.self !== window.top && window.parent.name === PREVIEW_WINDOW_NAME) {
275
- window.parent.location.href = window.self.location.href;
276
- window.parent.name = '';
274
+ if (window.self !== window.top) {
275
+ try {
276
+ if (window.parent && window.location.origin === window.parent.origin) {
277
+ if (window.parent.name === PREVIEW_WINDOW_NAME) {
278
+ window.parent.location.href = window.self.location.href;
279
+ window.parent.name = "";
280
+ }
281
+ }
282
+ else {
283
+ window.location.href = ssoUrl;
284
+ }
285
+ }
286
+ catch (error) {
287
+ window.location.href = ssoUrl;
288
+ }
277
289
  }
278
290
  else {
279
291
  window.location.href = ssoUrl;
@@ -2530,15 +2542,15 @@
2530
2542
  return getHttpDependency.call(this);
2531
2543
  }
2532
2544
  let providerInstance = injectorMap[injToken] && this.inj.get(injectorMap[injToken]);
2533
- if (!providerInstance && this.inj['_providers']) {
2534
- _.forEach(this.inj['_providers'], val => {
2535
- if (_.isObject(val)) {
2536
- if (val.__proto__.constructor.SERVICE_NAME === injToken) {
2537
- providerInstance = val;
2538
- return false;
2539
- }
2545
+ if (!providerInstance && this.inj['records']?.values) {
2546
+ const values = this.inj['records'].values();
2547
+ let next = values?.next();
2548
+ while (next && !next.done) {
2549
+ if (next?.value?.value?.constructor?.SERVICE_NAME === injToken) {
2550
+ return next.value.value;
2540
2551
  }
2541
- });
2552
+ next = values.next();
2553
+ }
2542
2554
  }
2543
2555
  return providerInstance;
2544
2556
  }
@@ -223,9 +223,21 @@ export class AppManagerService {
223
223
  * remove-toolbar has been assigned with a window name WM_PREVIEW_WINDOW, check if the iframe is our toolbar related and
224
224
  * safely change the location of the parent toolbar with current url.
225
225
  */
226
- if (window.self !== window.top && window.parent.name === PREVIEW_WINDOW_NAME) {
227
- window.parent.location.href = window.self.location.href;
228
- window.parent.name = '';
226
+ if (window.self !== window.top) {
227
+ try {
228
+ if (window.parent && window.location.origin === window.parent.origin) {
229
+ if (window.parent.name === PREVIEW_WINDOW_NAME) {
230
+ window.parent.location.href = window.self.location.href;
231
+ window.parent.name = "";
232
+ }
233
+ }
234
+ else {
235
+ window.location.href = ssoUrl;
236
+ }
237
+ }
238
+ catch (error) {
239
+ window.location.href = ssoUrl;
240
+ }
229
241
  }
230
242
  else {
231
243
  window.location.href = ssoUrl;
@@ -469,4 +481,4 @@ export class AppManagerService {
469
481
  (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(AppManagerService, [{
470
482
  type: Injectable
471
483
  }], function () { return [{ type: i1.AbstractHttpService }, { type: i2.SecurityService }, { type: i1.AbstractDialogService }, { type: i3.Router }, { type: i1.App }, { type: i4.VariablesService }, { type: i4.MetadataService }, { type: i1.AbstractSpinnerService }, { type: i1.AbstractI18nService }, { type: i5.DatePipe }]; }, null); })();
472
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLm1hbmFnZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3J1bnRpbWUtYmFzZS9zcmMvc2VydmljZXMvYXBwLm1hbmFnZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFM0MsT0FBTyxFQUNILHFCQUFxQixFQUNyQixtQkFBbUIsRUFDbkIsbUJBQW1CLEVBQ25CLHNCQUFzQixFQUN0QixHQUFHLEVBQ0gsWUFBWSxFQUNaLFNBQVMsRUFDVCxTQUFTLEVBQ1QsVUFBVSxFQUNiLE1BQU0sVUFBVSxDQUFDO0FBQ2xCLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDL0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsYUFBYSxFQUFHLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7Ozs7OztBQUd6RyxJQUFLLGFBT0o7QUFQRCxXQUFLLGFBQWE7SUFDZCxzRUFBcUQsQ0FBQTtJQUNyRCxzRUFBcUQsQ0FBQTtJQUNyRCx5REFBaUQsQ0FBQTtJQUNqRCxvREFBNEMsQ0FBQTtJQUM1QyxpRUFBbUQsQ0FBQTtJQUNuRCxvQ0FBb0MsQ0FBQTtBQUN4QyxDQUFDLEVBUEksYUFBYSxLQUFiLGFBQWEsUUFPakI7QUFHRCxNQUFNLE9BQU8saUJBQWlCO2FBQ1YsaUJBQVksR0FBRyxtQkFBbUIsQ0FBQztJQVFuRCxZQUNZLEtBQTBCLEVBQzFCLFNBQTBCLEVBQzFCLE9BQThCLEVBQzlCLE9BQWUsRUFDZixJQUFTLEVBQ1QsVUFBNEIsRUFDNUIsU0FBMEIsRUFDMUIsUUFBZ0MsRUFDaEMsS0FBMEIsRUFDMUIsU0FBbUI7UUFUbkIsVUFBSyxHQUFMLEtBQUssQ0FBcUI7UUFDMUIsY0FBUyxHQUFULFNBQVMsQ0FBaUI7UUFDMUIsWUFBTyxHQUFQLE9BQU8sQ0FBdUI7UUFDOUIsWUFBTyxHQUFQLE9BQU8sQ0FBUTtRQUNmLFNBQUksR0FBSixJQUFJLENBQUs7UUFDVCxlQUFVLEdBQVYsVUFBVSxDQUFrQjtRQUM1QixjQUFTLEdBQVQsU0FBUyxDQUFpQjtRQUMxQixhQUFRLEdBQVIsUUFBUSxDQUF3QjtRQUNoQyxVQUFLLEdBQUwsS0FBSyxDQUFxQjtRQUMxQixjQUFTLEdBQVQsU0FBUyxDQUFVO1FBaEJ2Qix1QkFBa0IsR0FBRyxLQUFLLENBQUM7UUFDM0Isc0JBQWlCLEdBQUcsS0FBSyxDQUFDO1FBQzFCLGdCQUFXLEdBQUcsS0FBSyxDQUFDO1FBZ0J4QiwrQ0FBK0M7UUFDL0MsSUFBSSxDQUFDLEtBQUssQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBRS9ELElBQUksQ0FBQyxVQUFVLENBQUMsa0JBQWtCLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBRXZELElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLHVCQUF1QixFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDbEQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFDMUIsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7WUFDekIsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLENBQUMsRUFBRTtnQkFDN0MsSUFBSSxNQUFNLEVBQUU7b0JBQ1IsSUFBSSxhQUFhLENBQUM7b0JBQ2xCLHFHQUFxRztvQkFDckcsSUFBSSxRQUFRLENBQUMsVUFBVSxJQUFJLFFBQVEsQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFO3dCQUNuRCxDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRTs0QkFDcEMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssUUFBUSxDQUFDLEdBQUcsSUFBSyxJQUFJLENBQUMsUUFBZ0IsQ0FBQyxpQkFBaUIsSUFBSyxJQUFJLENBQUMsUUFBZ0IsQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDO2dDQUN0SyxDQUFDLFFBQVEsQ0FBQyxjQUFjLEtBQU0sSUFBSSxDQUFDLFFBQWdCLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxjQUFjLEtBQU0sSUFBSSxDQUFDLFFBQWdCLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUU7Z0NBQ3hOLGFBQWEsR0FBRyxJQUFJLENBQUM7Z0NBQ3JCLE9BQU87NkJBQ1Y7d0JBQ0wsQ0FBQyxDQUFDLENBQUM7cUJBQ047b0JBQ0QsSUFBSSxDQUFDLGFBQWEsRUFBRTt3QkFDaEIsUUFBUSxDQUFDLFVBQVUsR0FBRyxRQUFRLENBQUMsVUFBVSxJQUFJLEVBQUUsQ0FBQzt3QkFDaEQsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsRUFDeEQsUUFBUSxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUMvQixRQUFRLENBQUMsWUFBWSxFQUNyQixRQUFRLENBQUMsY0FBYyxDQUFDLENBQUM7d0JBQzdCLFFBQVEsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO3FCQUN2QztpQkFDSjtxQkFBTTtvQkFDSCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7aUJBQ25EO2FBQ0o7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLGNBQWMsRUFBRSxHQUFHLEVBQUU7WUFDckMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3RCLElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFO2dCQUN2QixJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRTtvQkFDOUIsSUFBRyxNQUFNLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLGdCQUFnQixFQUFFO3dCQUMzRCxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO3FCQUM5QjtnQkFDTCxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7YUFDWjtRQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsZUFBZSxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFO1lBQ3ZFLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDL0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNKLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUNsRixDQUFDO0lBRUQ7O09BRUc7SUFDSyxlQUFlO1FBQ25CLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ3BDLCtFQUErRTtRQUMvRSx1Q0FBdUM7UUFDdkMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUN2QywwRkFBMEY7UUFDMUYsb0NBQW9DO1FBQ3BDLFVBQVUsRUFBRSxDQUFDO0lBQ2pCLENBQUM7SUFFRCxTQUFTO0lBRVQsQ0FBQztJQUVELGNBQWM7SUFFZCxDQUFDO0lBRUQsa0JBQWtCLENBQUMsU0FBbUI7UUFDbEMsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUM3QyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUU7Z0JBQzVCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQzthQUN6QjtZQUNELE9BQU8sQ0FBQyxDQUFDO1FBQ2IsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsWUFBWTtRQUNSLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNqQyxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsU0FBZTtRQUM1QixJQUFJLElBQUksQ0FBQyxrQkFBa0IsRUFBRTtZQUN6QixPQUFPLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztTQUM1QjtRQUVELE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxFQUFFO1lBQ3BCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2xFLG9FQUFvRTtZQUNwRSxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUM5QyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUMxQyxJQUFJLENBQUMsMEJBQTBCLEVBQUUsQ0FBQztZQUNsQyxJQUFJLENBQUMsNkJBQTZCLEVBQUUsQ0FBQztZQUNyQyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDO1lBQy9CLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLENBQUM7UUFDbkMsQ0FBQyxDQUFDO1FBRUYsSUFBSSxTQUFTLENBQUMsU0FBUyxDQUFDLEVBQUU7WUFDdEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ2hCLE9BQU8sT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO1NBQzVCO1FBRUQsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO0lBQ25GLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxtQkFBbUIsQ0FBQyxPQUFpQjtRQUNqQyxJQUFJLFNBQVMsQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUNwQixJQUFJLENBQUMsaUJBQWlCLEdBQUcsT0FBTyxDQUFDO1NBQ3BDO1FBQ0QsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUM7SUFDbEMsQ0FBQztJQUVPLHlCQUF5QixDQUFDLFFBQVE7UUFDdEMsUUFBUSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7UUFDakMsUUFBUSxDQUFDLEtBQUssR0FBYSxFQUFFLENBQUM7UUFDOUIsUUFBUSxDQUFDLElBQUksR0FBYyxTQUFTLENBQUM7UUFDckMsUUFBUSxDQUFDLEVBQUUsR0FBZ0IsU0FBUyxDQUFDO1FBQ3JDLFFBQVEsQ0FBQyxRQUFRLEdBQVUsU0FBUyxDQUFDO0lBQ3pDLENBQUM7SUFFTywwQkFBMEI7UUFDOUIsTUFBTSxZQUFZLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLGdDQUFnQyxDQUFDLENBQUM7UUFFeEUsZUFBZTtRQUNmLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDZixPQUFPO1NBQ1Y7UUFDRCxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUNuQyxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQzVDLElBQUksY0FBYyxJQUFJLGNBQWMsQ0FBQyxlQUFlLElBQUksY0FBYyxDQUFDLGFBQWEsRUFBRTtnQkFDbEYsWUFBWSxDQUFDLGVBQWUsR0FBRyxjQUFjLENBQUMsYUFBYSxDQUFDO2dCQUM1RCxZQUFZLENBQUMsS0FBSyxHQUFhLGNBQWMsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDO2dCQUNqRSxZQUFZLENBQUMsSUFBSSxHQUFjLGNBQWMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDO2dCQUNoRSxZQUFZLENBQUMsRUFBRSxHQUFnQixjQUFjLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQztnQkFDOUQsWUFBWSxDQUFDLFFBQVEsR0FBVSxjQUFjLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQztnQkFDaEUsWUFBWSxDQUFDLGNBQWMsR0FBSSxjQUFjLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxDQUFDLG9EQUFvRDthQUM5SDtpQkFBTTtnQkFDSCxJQUFJLENBQUMseUJBQXlCLENBQUMsWUFBWSxDQUFDLENBQUM7Z0JBQzdDLFlBQVksQ0FBQyxpQkFBaUIsR0FBRyxjQUFjLElBQUksY0FBYyxDQUFDLGVBQWUsQ0FBQztnQkFDbEYsTUFBTSxJQUFJLENBQUM7YUFDZDtZQUNELE9BQU8sY0FBYyxDQUFDO1FBQzFCLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUNYLFlBQVksQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDO1lBQ3JDLFlBQVksQ0FBQyxLQUFLLEdBQWEsRUFBRSxDQUFDO1lBQ2xDLFlBQVksQ0FBQyxJQUFJLEdBQWMsU0FBUyxDQUFDO1lBQ3pDLFlBQVksQ0FBQyxFQUFFLEdBQWdCLFNBQVMsQ0FBQztZQUN6QyxZQUFZLENBQUMsUUFBUSxHQUFVLFNBQVMsQ0FBQztZQUN6QyxZQUFZLENBQUMsY0FBYyxHQUFJLEVBQUUsQ0FBQztRQUN0QyxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0gsNkJBQTZCO1FBQ3pCLE1BQU0sa0JBQWtCLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLDJCQUEyQixDQUFDLENBQUM7SUFDN0UsQ0FBQztJQUVELGNBQWMsQ0FBQyxNQUFNO1FBQ2pCLE1BQU0sT0FBTyxHQUFHLDRCQUE0QixFQUN4QyxtQkFBbUIsR0FBRyxtQkFBbUIsQ0FBQztRQUM5QyxJQUFJLElBQUksRUFDSixVQUFVLENBQUM7UUFFZixvRUFBb0U7UUFDcEUsOENBQThDO1FBQzlDLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUU5QyxJQUFJLFNBQVMsQ0FBQyxVQUFVLEVBQUU7WUFDdEIsNENBQTRDO1lBQzVDLE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxFQUFFLG1CQUFtQixDQUFDLENBQUM7WUFDOUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLEVBQUU7aUJBQ3pCLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7aUJBQ2hDLElBQUksQ0FBQyxHQUFHLEVBQUU7Z0JBQ1AsTUFBTSx1QkFBdUIsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztnQkFDakYsSUFBSSx1QkFBdUIsSUFBSSx1QkFBdUIsS0FBSyxvQkFBb0IsRUFBRTtvQkFDN0UsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7aUJBQ2xDO3FCQUFNO29CQUNILGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO2lCQUNqQztZQUNMLENBQUMsQ0FBQyxDQUFDO1NBQ1Y7YUFBTTtZQUNILElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixHQUFHLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDL0QsVUFBVSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsNkJBQTZCLEVBQUUsQ0FBQyxDQUFDO1lBQzNGLFVBQVUsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNoRCxnQ0FBZ0M7WUFDaEMsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLEVBQUUsQ0FBQywyQkFBMkIsQ0FBQyxDQUFDLElBQUksNkJBQTZCLENBQUM7WUFDdkgsNkNBQTZDO1lBQzdDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxjQUFjLEVBQUUsR0FBRyxPQUFPLEdBQUcsSUFBSSxHQUFHLFVBQVUsQ0FBQztZQUNuRTs7Ozs7ZUFLRztZQUNILElBQUksTUFBTSxDQUFDLElBQUksS0FBSyxNQUFNLENBQUMsR0FBRyxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxLQUFLLG1CQUFtQixFQUFFO2dCQUMxRSxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDO2dCQUN4RCxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUM7YUFDM0I7aUJBQU07Z0JBQ0gsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDO2FBQ2pDO1NBQ0o7SUFDTCxDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDSCxTQUFTLENBQUMsSUFBSyxFQUFFLE9BQVE7UUFDckIsSUFBSSxvQkFBb0IsRUFDcEIsb0JBQW9CLEVBQ3BCLFdBQVcsRUFDWCxXQUFXLENBQUM7UUFDaEIsTUFBTSxZQUFZLEdBQUc7WUFDYixRQUFRLEVBQUcsUUFBUTtZQUNuQixNQUFNLEVBQUssTUFBTTtZQUNqQixLQUFLLEVBQU0sS0FBSztTQUNuQixDQUFDO1FBRU4sTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUNwQyxJQUFJLGNBQWMsR0FBRyxFQUFFLENBQUM7UUFDeEIsV0FBVyxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUM7UUFDakMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLE1BQU0sQ0FBQyxRQUFRLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUM7UUFDbEUsbURBQW1EO1FBQ25ELElBQUksTUFBTSxDQUFDLFFBQVEsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRTtZQUM3QyxNQUFNLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztZQUM3QixvQkFBb0IsR0FBRyxXQUFXLENBQUMsY0FBYyxJQUFJLEVBQUMsTUFBTSxFQUFFLFlBQVksQ0FBQyxNQUFNLEVBQUMsQ0FBQztZQUNuRixvQkFBb0IsR0FBRyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDL0QsUUFBUSxvQkFBb0IsRUFBRTtnQkFDMUIsS0FBSyxZQUFZLENBQUMsTUFBTTtvQkFDcEIsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO29CQUN2QixNQUFNO2dCQUNWLEtBQUssWUFBWSxDQUFDLElBQUk7b0JBQ2xCLElBQUksQ0FBQyxJQUFJLEVBQUU7d0JBQ1AsSUFBSSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztxQkFDL0M7b0JBQ0QsY0FBYyxDQUFDLFlBQVksQ0FBQyxHQUFHLElBQUksQ0FBQztvQkFDcEMsMkVBQTJFO29CQUMzRSxjQUFjLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyw2QkFBNkIsRUFBRSxDQUFDLENBQUM7b0JBQ3pGLHFFQUFxRTtvQkFDckUsSUFBSyxJQUFJLEtBQUssb0JBQW9CLENBQUMsUUFBUSxFQUFFO3dCQUN6QyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUMsV0FBVyxFQUFFLGNBQWMsRUFBQyxDQUFDLENBQUM7cUJBQ3pGO29CQUNELE1BQU07Z0JBQ1YsS0FBSyxZQUFZLENBQUMsR0FBRztvQkFDakIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFDNUIsTUFBTTthQUNiO1lBQ0QsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1NBQ3pCO2FBQU07WUFDSCx3REFBd0Q7WUFDeEQsV0FBVyxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDN0MsUUFBUSxXQUFXLEVBQUU7Z0JBQ2pCLEtBQUssWUFBWSxDQUFDLE1BQU07b0JBQ3BCLHdJQUF3STtvQkFDeEksNkhBQTZIO29CQUM3SCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUN0QixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7b0JBQ3ZCLE1BQU07Z0JBQ1YsS0FBSyxZQUFZLENBQUMsSUFBSTtvQkFDbEIsb0VBQW9FO29CQUNwRSw4Q0FBOEM7b0JBQzlDLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLGVBQWUsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7b0JBQ3BELGNBQWMsQ0FBQyxZQUFZLENBQUMsR0FBRyxJQUFJLENBQUM7b0JBQ3BDLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxPQUFPLElBQUksT0FBTyxDQUFDLFdBQVcsQ0FBQyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsNkJBQTZCLEVBQUUsQ0FBQztvQkFDNUcsY0FBYyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsY0FBYyxFQUFFLGdCQUFnQixDQUFDLENBQUM7b0JBQzNELElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUMsV0FBVyxFQUFFLGNBQWMsRUFBQyxDQUFDLENBQUM7b0JBQzdFLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxHQUFHLFdBQVcsQ0FBQyxRQUFRLENBQUM7b0JBQ2pELE1BQU07Z0JBQ1YsS0FBSyxZQUFZLENBQUMsR0FBRztvQkFDakIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFDNUIsTUFBTTthQUNiO1NBQ0o7SUFDTCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxhQUFhO1FBQ1QsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUMzQyxPQUFPLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFO2dCQUNqQyxPQUFPLElBQUksQ0FBQywwQkFBMEIsRUFBRSxDQUFDO1lBQzdDLENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsVUFBVSxDQUFDLEtBQWU7UUFDdEIsSUFBSSxDQUFDLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ3RCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztTQUMzQjtRQUVELElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO1FBQ3pCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUM1QixDQUFDO0lBRUQ7O09BRUc7SUFDSCw2QkFBNkI7UUFDekIsSUFBSSxDQUFDLEtBQUssQ0FBQyw2QkFBNkIsRUFBRSxDQUFDO0lBQy9DLENBQUM7SUFFRCw0QkFBNEIsQ0FBQyxRQUFRO1FBQ2pDLElBQUksQ0FBQyxLQUFLLENBQUMseUJBQXlCLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUVNLGNBQWM7UUFDakIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDO0lBQzFGLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksa0JBQWtCO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUM7SUFDckMsQ0FBQztJQUVELE1BQU0sQ0FBQyxTQUFTLEVBQUUsSUFBSTtRQUNsQixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVELFNBQVMsQ0FBQyxTQUFTLEVBQUUsSUFBSTtRQUNyQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBRUQsYUFBYTtRQUNULE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUM7SUFDaEMsQ0FBQztJQUVELFlBQVk7UUFDUixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQy9CLENBQUM7SUFFRCxpQkFBaUI7UUFDYixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztJQUMxQyxDQUFDO0lBRUQsU0FBUyxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsS0FBTTtRQUM1QixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFRDs7O09BR0c7SUFDSCxzQkFBc0IsQ0FBQyxhQUFrQjtRQUNyQyxPQUFPLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLGFBQWEsQ0FBQyxDQUFDO0lBQ25FLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsbUJBQW1CLENBQUMsSUFBUyxFQUFFLE1BQVc7UUFDdEMsT0FBTyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDL0QsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxpQkFBaUIsQ0FBQyxJQUFTLEVBQUUsS0FBVztRQUNwQyxPQUFPLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUVEOztPQUVHO0lBQ0gsaUJBQWlCO1FBQ2IsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxjQUFjO1FBQ1YsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxPQUFPLENBQUMsSUFBSTtRQUNSLElBQUksSUFBSSxLQUFLLE1BQU0sRUFBRTtZQUNqQixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7U0FDekI7SUFDTCxDQUFDO0lBRU8sY0FBYztRQUNsQixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsR0FBWSxDQUFDLENBQUMsQ0FBQztJQUNwRyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsWUFBWTtRQUNSLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUM7SUFDbEMsQ0FBQztJQUVEOzs7T0FHRztJQUNILG9CQUFvQjtRQUNoQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUM7SUFDMUMsQ0FBQztJQUVELFdBQVcsQ0FBQyxPQUFPO1FBQ2YsTUFBTSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFFRCxZQUFZLENBQUMsR0FBRztRQUNaLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDckMsbUNBQW1DO1FBQ25DLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUNELHNCQUFzQjtRQUVsQixNQUFNLENBQUMsU0FBUyxHQUFHLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDdkIsTUFBTSxPQUFPLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQztZQUV6QixJQUFJLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRTtnQkFDdEIsT0FBTzthQUNWO1lBRUQsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQztZQUV4QixRQUFRLEdBQUcsRUFBRTtnQkFDVCxLQUFLLGFBQWEsQ0FBQyx3QkFBd0I7b0JBQ3ZDLDZCQUE2QjtvQkFDN0IsTUFBTTtnQkFDVixLQUFLLGFBQWEsQ0FBQyxlQUFlO29CQUM5QixJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQztvQkFDekMsTUFBTTthQUNiO1FBQ0wsQ0FBQyxDQUFDO1FBRUYsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNaLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBQyxHQUFHLEVBQUUsYUFBYSxDQUFDLE9BQU8sRUFBQyxDQUFDLENBQUM7UUFDbkQsQ0FBQyxDQUFDLENBQUM7UUFFSCxPQUFPLFlBQVksQ0FBQyxNQUFNLEVBQUUsZUFBZSxFQUFFLElBQUksRUFBRSxRQUFRLENBQUMsRUFBRTtZQUMxRCxJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztZQUNwQixJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRTtnQkFDakIsSUFBSSxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUMsU0FBUyxDQUFDO2dCQUNwQyxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUMsS0FBSyxFQUFFLGFBQWEsQ0FBQyxxQkFBcUIsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFDLENBQUMsQ0FBQzthQUN0RjtRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELGVBQWU7UUFDWCxJQUFJLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxFQUFFO1lBQzdCLE9BQU8sSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7U0FDeEM7SUFDTCxDQUFDO2tGQXpmUSxpQkFBaUI7dUVBQWpCLGlCQUFpQixXQUFqQixpQkFBaUI7O3VGQUFqQixpQkFBaUI7Y0FEN0IsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBEYXRlUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5cbmltcG9ydCB7XG4gICAgQWJzdHJhY3REaWFsb2dTZXJ2aWNlLFxuICAgIEFic3RyYWN0SHR0cFNlcnZpY2UsXG4gICAgQWJzdHJhY3RJMThuU2VydmljZSxcbiAgICBBYnN0cmFjdFNwaW5uZXJTZXJ2aWNlLFxuICAgIEFwcCxcbiAgICBmZXRjaENvbnRlbnQsXG4gICAgaXNEZWZpbmVkLFxuICAgIHRyaWdnZXJGbixcbiAgICAkYXBwRGlnZXN0XG59IGZyb20gJ0B3bS9jb3JlJztcbmltcG9ydCB7IFNlY3VyaXR5U2VydmljZSB9IGZyb20gJ0B3bS9zZWN1cml0eSc7XG5pbXBvcnQgeyBDT05TVEFOVFMsICRyb290U2NvcGUsIHJvdXRlclNlcnZpY2UsICBNZXRhZGF0YVNlcnZpY2UsIFZhcmlhYmxlc1NlcnZpY2UgfSBmcm9tICdAd20vdmFyaWFibGVzJztcbmRlY2xhcmUgY29uc3QgXztcblxuZW51bSBQT1NUX01FU1NBR0VTIHtcbiAgICBISURFX1RFTVBMQVRFU19TSE9XX0NBU0UgPSAnaGlkZS10ZW1wbGF0ZXMtc2hvdy1jYXNlJyxcbiAgICBTSE9XX1RFTVBMQVRFU19TSE9XX0NBU0UgPSAnc2hvdy10ZW1wbGF0ZXMtc2hvdy1jYXNlJyxcbiAgICBVUERBVEVfTE9DQVRJT04gICAgICAgICAgPSAndXBkYXRlLWxvY2F0aW9uLXBhdGgnLFxuICAgIFNFTEVDVF9URU1QTEFURSAgICAgICAgICA9ICdzZWxlY3QtdGVtcGxhdGUnLFxuICAgIFRFTVBMQVRFQlVORExFX0NPTkZJRyAgICA9ICd0ZW1wbGF0ZS1idW5kbGUtY29uZmlnJyxcbiAgICBPTl9MT0FEICAgICAgICAgICAgICAgICAgPSAnb24tbG9hZCdcbn1cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEFwcE1hbmFnZXJTZXJ2aWNlIHtcbiAgICBzdGF0aWMgcmVhZG9ubHkgU0VSVklDRV9OQU1FID0gJ0FwcE1hbmFnZXJTZXJ2aWNlJztcblxuICAgIHByaXZhdGUgYXBwVmFyaWFibGVzTG9hZGVkID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBhcHBWYXJpYWJsZXNGaXJlZCA9IGZhbHNlO1xuICAgIHByaXZhdGUgX25vUmVkaXJlY3QgPSBmYWxzZTtcbiAgICBwcml2YXRlIHRlbXBsYXRlczogQXJyYXk8YW55PjtcbiAgICBwcml2YXRlIGxhc3RMb2dnZWRVc2VySWQ7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSAkaHR0cDogQWJzdHJhY3RIdHRwU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSAkc2VjdXJpdHk6IFNlY3VyaXR5U2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSAkZGlhbG9nOiBBYnN0cmFjdERpYWxvZ1NlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgJHJvdXRlcjogUm91dGVyLFxuICAgICAgICBwcml2YXRlICRhcHA6IEFwcCxcbiAgICAgICAgcHJpdmF0ZSAkdmFyaWFibGVzOiBWYXJpYWJsZXNTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlICRtZXRhZGF0YTogTWV0YWRhdGFTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlICRzcGlubmVyOiBBYnN0cmFjdFNwaW5uZXJTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlICRpMThuOiBBYnN0cmFjdEkxOG5TZXJ2aWNlLFxuICAgICAgICBwcml2YXRlICRkYXRlUGlwZTogRGF0ZVBpcGUsXG4gICAgKSB7XG4gICAgICAgIC8vIHJlZ2lzdGVyIG1ldGhvZCB0byBpbnZva2Ugb24gc2Vzc2lvbiB0aW1lb3V0XG4gICAgICAgIHRoaXMuJGh0dHAucmVnaXN0ZXJPblNlc3Npb25UaW1lb3V0KHRoaXMuaGFuZGxlNDAxLmJpbmQodGhpcykpO1xuXG4gICAgICAgIHRoaXMuJHZhcmlhYmxlcy5yZWdpc3RlckRlcGVuZGVuY3koJ2FwcE1hbmFnZXInLCB0aGlzKTtcblxuICAgICAgICB0aGlzLiRhcHAuc3Vic2NyaWJlKCd0b2dnbGUtdmFyaWFibGUtc3RhdGUnLCAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmFyaWFibGUgPSBkYXRhLnZhcmlhYmxlLFxuICAgICAgICAgICAgICAgIGFjdGl2ZSA9IGRhdGEuYWN0aXZlO1xuICAgICAgICAgICAgaWYgKCFfLmlzRW1wdHkoXy50cmltKHZhcmlhYmxlLnNwaW5uZXJDb250ZXh0KSkpIHtcbiAgICAgICAgICAgICAgICBpZiAoYWN0aXZlKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBzcGlubmVyRXhpc3RzO1xuICAgICAgICAgICAgICAgICAgICAvLyBXTVMtMjExMTcgOiBEbyBub3QgdHJpZ2dlciBzcGlubmVyLCBpZiB0aGUgY3VycmVudCB2YXJpYWJsZSBpcyBzYW1lIGFzIHNwaW5uZXIgd2hpY2ggaXMgaW4gY29udGV4dFxuICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFibGUuX3NwaW5uZXJJZCAmJiB2YXJpYWJsZS5fc3Bpbm5lcklkLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgXy5mb3JFYWNoKHZhcmlhYmxlLl9zcGlubmVySWQsIChpdGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0uc2xpY2UoMCwgaXRlbS5sYXN0SW5kZXhPZignXycpKSA9PT0gdmFyaWFibGUuX2lkICYmICh0aGlzLiRzcGlubmVyIGFzIGFueSkubWVzc2FnZXNCeUNvbnRleHQgJiYgKHRoaXMuJHNwaW5uZXIgYXMgYW55KS5tZXNzYWdlc0J5Q29udGV4dFt2YXJpYWJsZS5zcGlubmVyQ29udGV4dF0gJiYgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2YXJpYWJsZS5zcGlubmVyTWVzc2FnZSA9PT0gKHRoaXMuJHNwaW5uZXIgYXMgYW55KS5tZXNzYWdlc0J5Q29udGV4dFt2YXJpYWJsZS5zcGlubmVyQ29udGV4dF1bXCJmaW5hbE1lc3NhZ2VcIl0gfHwgdmFyaWFibGUuc3Bpbm5lck1lc3NhZ2UgPT09ICh0aGlzLiRzcGlubmVyIGFzIGFueSkubWVzc2FnZXNCeUNvbnRleHRbdmFyaWFibGUuc3Bpbm5lckNvbnRleHRdW2l0ZW1dKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGlubmVyRXhpc3RzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICghc3Bpbm5lckV4aXN0cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUuX3NwaW5uZXJJZCA9IHZhcmlhYmxlLl9zcGlubmVySWQgfHwgW107XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzcGlubmVySWQgPSB0aGlzLiRzcGlubmVyLnNob3codmFyaWFibGUuc3Bpbm5lck1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUuX2lkICsgJ18nICsgRGF0ZS5ub3coKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS5zcGlubmVyY2xhc3MsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUuc3Bpbm5lckNvbnRleHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUuX3NwaW5uZXJJZC5wdXNoKHNwaW5uZXJJZCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLiRzcGlubmVyLmhpZGUodmFyaWFibGUuX3NwaW5uZXJJZC5zaGlmdCgpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLiRhcHAuc3Vic2NyaWJlKCd1c2VyTG9nZ2VkSW4nLCAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNldExhbmRpbmdQYWdlKCk7XG4gICAgICAgICAgICBpZiAodGhpcy5sYXN0TG9nZ2VkVXNlcklkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy4kc2VjdXJpdHkuZ2V0Q29uZmlnKGNvbmZpZyA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmKGNvbmZpZyAmJiBjb25maWcudXNlckluZm8udXNlcklkICE9PSB0aGlzLmxhc3RMb2dnZWRVc2VySWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJGFwcC5jbGVhclBhZ2VDYWNoZSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSwgbnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLiRhcHAuc3Vic2NyaWJlKCd1c2VyTG9nZ2VkT3V0JywgKCkgPT4gdGhpcy5zZXRMYW5kaW5nUGFnZSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy4kYXBwLmNsZWFyUGFnZUNhY2hlKCk7ICAgICAgICAgICAgXG4gICAgICAgIH0pKTtcbiAgICAgICAgdGhpcy4kYXBwLnN1YnNjcmliZSgnaHR0cDQwMScsIChkID0ge30pID0+IHRoaXMuaGFuZGxlNDAxKGQucGFnZSwgZC5vcHRpb25zKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogT24gc2Vzc2lvbiB0aW1lb3V0LCBpZiB0aGUgc2Vzc2lvbiB0aW1lb3V0IGNvbmZpZyBpcyBzZXQgdG8gYSBkaWFsb2csIHRoZW4gb3BlbiBsb2dpbiBkaWFsb2dcbiAgICAgKi9cbiAgICBwcml2YXRlIHNob3dMb2dpbkRpYWxvZygpIHtcbiAgICAgICAgdGhpcy4kc3Bpbm5lci5oaWRlKCdnbG9iYWxTcGlubmVyJyk7XG4gICAgICAgIC8vIFJlbW92aW5nIHRoZSBjbG9zZSBhbGwgZGlhbG9ncyBjYWxsLCBzbyB0aGUgZXhpc3RpbmcgZGlhbG9ncyByZW1haW4gb3BlbiBhbmRcbiAgICAgICAgLy8gdGhlIGxvZ2luIGRpYWxvZyBjb21lcyBvbiB0b3Agb2YgaXQuXG4gICAgICAgIHRoaXMuJGRpYWxvZy5vcGVuKCdDb21tb25Mb2dpbkRpYWxvZycpO1xuICAgICAgICAvLyBTaW5jZSB0aGUgbG9naW4gZGlhbG9nIGlzIGNsb3NlZCBhbmQgb3BlbmVkIGl0cyB1cGRhdGVkIHByb3BlcnR5IGlzbid0IHJlYWQgYnkgYW5ndWxhci5cbiAgICAgICAgLy8gSGVuY2Ugd2UgdHJpZ2dlciB0aGUgZGlnZXN0IGN5Y2xlXG4gICAgICAgICRhcHBEaWdlc3QoKTtcbiAgICB9XG5cbiAgICBsb2FkQXBwSlMoKSB7XG5cbiAgICB9XG5cbiAgICBsb2FkQ29tbW9uUGFnZSgpIHtcblxuICAgIH1cblxuICAgIGxvYWRTZWN1cml0eUNvbmZpZyhmb3JjZUZsYWc/OiBib29sZWFuKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiRzZWN1cml0eS5sb2FkKGZvcmNlRmxhZykudGhlbigocikgPT4ge1xuICAgICAgICAgICAgaWYgKCF0aGlzLiRhcHAubGFuZGluZ1BhZ2VOYW1lKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRMYW5kaW5nUGFnZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHI7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGxvYWRNZXRhZGF0YSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJG1ldGFkYXRhLmxvYWQoKTtcbiAgICB9XG5cbiAgICBsb2FkQXBwVmFyaWFibGVzKHZhcmlhYmxlcz86IGFueSkge1xuICAgICAgICBpZiAodGhpcy5hcHBWYXJpYWJsZXNMb2FkZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGluaXQgPSByZXNwb25zZSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkYXRhID0gdGhpcy4kdmFyaWFibGVzLnJlZ2lzdGVyKCdhcHAnLCByZXNwb25zZSwgdGhpcy4kYXBwKTtcbiAgICAgICAgICAgIC8vIG5vdCBhc3NpZ25pbmcgZGlyZWN0bHkgdG8gdGhpcy4kYXBwIHRvIGtlZXAgdGhlIHJlZmVyZW5jZSBpbiB0YWN0XG4gICAgICAgICAgICBfLmV4dGVuZCh0aGlzLiRhcHAuVmFyaWFibGVzLCBkYXRhLlZhcmlhYmxlcyk7XG4gICAgICAgICAgICBfLmV4dGVuZCh0aGlzLiRhcHAuQWN0aW9ucywgZGF0YS5BY3Rpb25zKTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlTG9nZ2VkSW5Vc2VyVmFyaWFibGUoKTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlU3VwcG9ydGVkTG9jYWxlVmFyaWFibGUoKTtcbiAgICAgICAgICAgIHRoaXMuYXBwVmFyaWFibGVzTG9hZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuYXBwVmFyaWFibGVzRmlyZWQgPSBmYWxzZTtcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAoaXNEZWZpbmVkKHZhcmlhYmxlcykpIHtcbiAgICAgICAgICAgIGluaXQodmFyaWFibGVzKTtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLiRodHRwLmdldCgnLi9hcHAudmFyaWFibGVzLmpzb24nKS50aGVuKHJlc3BvbnNlID0+IGluaXQocmVzcG9uc2UpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBnZXR0ZXIgYW5kIHNldHRlciBmb3IgdGhlIHByb3BlcnR5IGFwcFZhcmlhYmxlc0ZpcmVkXG4gICAgICogdGhpcyBmbGFnIGRldGVybWluZXMgaWYgdGhlIGFwcCB2YXJpYWJsZXMod2l0aCBzdGFydFVwZGF0ZTp0cnVlKSBoYXZlIGJlZW4gZmlyZWRcbiAgICAgKiB0aGV5IHNob3VsZCBnZXQgZmlyZWQgb25seSBvbmNlIHRocm91Z2ggYXBwIGxpZmVjeWNsZVxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNGaXJlZFxuICAgICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgICAqL1xuICAgIGlzQXBwVmFyaWFibGVzRmlyZWQoaXNGaXJlZD86IGJvb2xlYW4pIHtcbiAgICAgICAgaWYgKGlzRGVmaW5lZChpc0ZpcmVkKSkge1xuICAgICAgICAgICAgdGhpcy5hcHBWYXJpYWJsZXNGaXJlZCA9IGlzRmlyZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuYXBwVmFyaWFibGVzRmlyZWQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjbGVhckxvZ2dlZEluVXNlclZhcmlhYmxlKHZhcmlhYmxlKSB7XG4gICAgICAgIHZhcmlhYmxlLmlzQXV0aGVudGljYXRlZCA9IGZhbHNlO1xuICAgICAgICB2YXJpYWJsZS5yb2xlcyAgICAgICAgICAgPSBbXTtcbiAgICAgICAgdmFyaWFibGUubmFtZSAgICAgICAgICAgID0gdW5kZWZpbmVkO1xuICAgICAgICB2YXJpYWJsZS5pZCAgICAgICAgICAgICAgPSB1bmRlZmluZWQ7XG4gICAgICAgIHZhcmlhYmxlLnRlbmFudElkICAgICAgICA9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZUxvZ2dlZEluVXNlclZhcmlhYmxlKCkge1xuICAgICAgICBjb25zdCBsb2dnZWRJblVzZXIgPSBfLmdldCh0aGlzLiRhcHAsICdWYXJpYWJsZXMubG9nZ2VkSW5Vc2VyLmRhdGFTZXQnKTtcblxuICAgICAgICAvLyBzYW5pdHkgY2hlY2tcbiAgICAgICAgaWYgKCFsb2dnZWRJblVzZXIpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy4kc2VjdXJpdHkubG9hZCgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc2VjdXJpdHlDb25maWcgPSB0aGlzLiRzZWN1cml0eS5nZXQoKTtcbiAgICAgICAgICAgIGlmIChzZWN1cml0eUNvbmZpZyAmJiBzZWN1cml0eUNvbmZpZy5zZWN1cml0eUVuYWJsZWQgJiYgc2VjdXJpdHlDb25maWcuYXV0aGVudGljYXRlZCkge1xuICAgICAgICAgICAgICAgIGxvZ2dlZEluVXNlci5pc0F1dGhlbnRpY2F0ZWQgPSBzZWN1cml0eUNvbmZpZy5hdXRoZW50aWNhdGVkO1xuICAgICAgICAgICAgICAgIGxvZ2dlZEluVXNlci5yb2xlcyAgICAgICAgICAgPSBzZWN1cml0eUNvbmZpZy51c2VySW5mby51c2VyUm9sZXM7XG4gICAgICAgICAgICAgICAgbG9nZ2VkSW5Vc2VyLm5hbWUgICAgICAgICAgICA9IHNlY3VyaXR5Q29uZmlnLnVzZXJJbmZvLnVzZXJOYW1lO1xuICAgICAgICAgICAgICAgIGxvZ2dlZEluVXNlci5pZCAgICAgICAgICAgICAgPSBzZWN1cml0eUNvbmZpZy51c2VySW5mby51c2VySWQ7XG4gICAgICAgICAgICAgICAgbG9nZ2VkSW5Vc2VyLnRlbmFudElkICAgICAgICA9IHNlY3VyaXR5Q29uZmlnLnVzZXJJbmZvLnRlbmFudElkO1xuICAgICAgICAgICAgICAgIGxvZ2dlZEluVXNlci51c2VyQXR0cmlidXRlcyAgPSBzZWN1cml0eUNvbmZpZy51c2VySW5mby51c2VyQXR0cmlidXRlczsgLy8gYXNzaWduIHRoZSBleHRyYSB1c2VyQXR0cmlidXRlcyBmb3IgY3VzdG9tIHVzYWdlLlxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNsZWFyTG9nZ2VkSW5Vc2VyVmFyaWFibGUobG9nZ2VkSW5Vc2VyKTtcbiAgICAgICAgICAgICAgICBsb2dnZWRJblVzZXIuaXNTZWN1cml0eUVuYWJsZWQgPSBzZWN1cml0eUNvbmZpZyAmJiBzZWN1cml0eUNvbmZpZy5zZWN1cml0eUVuYWJsZWQ7XG4gICAgICAgICAgICAgICAgdGhyb3cgbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBzZWN1cml0eUNvbmZpZztcbiAgICAgICAgfSkuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgICAgIGxvZ2dlZEluVXNlci5pc0F1dGhlbnRpY2F0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIGxvZ2dlZEluVXNlci5yb2xlcyAgICAgICAgICAgPSBbXTtcbiAgICAgICAgICAgIGxvZ2dlZEluVXNlci5uYW1lICAgICAgICAgICAgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICBsb2dnZWRJblVzZXIuaWQgICAgICAgICAgICAgID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgbG9nZ2VkSW5Vc2VyLnRlbmFudElkICAgICAgICA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGxvZ2dlZEluVXNlci51c2VyQXR0cmlidXRlcyAgPSB7fTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogT3ZlcnJpZGluZyB0aGUgYXBwIHZhcmlhYmxlIHN1cHBvcnRlZCBsb2NhbGUgd2l0aCB0aGUgd21Qcm9wZXJ0aWVzIGkxOG4gRGF0YVZhbHVlc1xuICAgICAqXG4gICAgICogVE9ET1tWaWJodV06XG4gICAgICogQ2FuIHdyaXRlIGEgc2ltcGxlIG1pZ3JhdGlvbiB0byBzeW5jIHRoZSBzdXBwb3J0ZWRMb2NhbGUgdmFyaWFibGUgd2l0aCAnX1dNX0FQUF9QUk9QRVJUSUVTLnN1cHBvcnRlZExhbmd1YWdlcydcbiAgICAgKiBIZW5jZSwgdGhpcyBtYXkgbm90IGJlIHJlcXVpcmVkXG4gICAgICpcbiAgICAgKi9cbiAgICB1cGRhdGVTdXBwb3J0ZWRMb2NhbGVWYXJpYWJsZSgpIHtcbiAgICAgICAgY29uc3Qgc3VwcG9ydGVkTG9jYWxlVmFyID0gXy5nZXQodGhpcy4kYXBwLCAnVmFyaWFibGVzLnN1cHBvcnRlZExvY2FsZScpO1xuICAgIH1cblxuICAgIGhhbmRsZVNTT0xvZ2luKGNvbmZpZykge1xuICAgICAgICBjb25zdCBTU09fVVJMID0gJ3NlcnZpY2VzL3NlY3VyaXR5L3Nzb2xvZ2luJyxcbiAgICAgICAgICAgIFBSRVZJRVdfV0lORE9XX05BTUUgPSAnV01fUFJFVklFV19XSU5ET1cnO1xuICAgICAgICBsZXQgcGFnZSxcbiAgICAgICAgICAgIHBhZ2VQYXJhbXM7XG5cbiAgICAgICAgLy8gZG8gbm90IHByb3ZpZGUgcmVkaXJlY3RUbyBwYWdlIGlmIGZldGNoaW5nIEhPTUUgcGFnZSByZXN1bHRlZCA0MDFcbiAgICAgICAgLy8gb24gYXBwIGxvYWQsIGJ5IGRlZmF1bHQgSG9tZSBwYWdlIGlzIGxvYWRlZFxuICAgICAgICBwYWdlID0gdGhpcy4kc2VjdXJpdHkuZ2V0UmVkaXJlY3RQYWdlKGNvbmZpZyk7XG5cbiAgICAgICAgaWYgKENPTlNUQU5UUy5oYXNDb3Jkb3ZhKSB7XG4gICAgICAgICAgICAvLyBnZXQgcHJldmlvdXNseSBsb2dnZWRJblVzZXIgbmFtZSAoaWYgYW55KVxuICAgICAgICAgICAgY29uc3QgbGFzdExvZ2dlZEluVXNlcm5hbWUgPSBfLmdldCh0aGlzLiRzZWN1cml0eS5nZXQoKSwgJ3VzZXJJbmZvLnVzZXJOYW1lJyk7XG4gICAgICAgICAgICB0aGlzLiRzZWN1cml0eS5hdXRoSW5Ccm93c2VyKClcbiAgICAgICAgICAgICAgICAudGhlbigoKSA9PiB0aGlzLnJlbG9hZEFwcERhdGEoKSlcbiAgICAgICAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHByZXNlbnRMb2dnZWRJblVzZXJuYW1lID0gXy5nZXQodGhpcy4kc2VjdXJpdHkuZ2V0KCksICd1c2VySW5mby51c2VyTmFtZScpO1xuICAgICAgICAgICAgICAgICAgICBpZiAocHJlc2VudExvZ2dlZEluVXNlcm5hbWUgJiYgcHJlc2VudExvZ2dlZEluVXNlcm5hbWUgPT09IGxhc3RMb2dnZWRJblVzZXJuYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByb3V0ZXJTZXJ2aWNlLm5hdmlnYXRlKFtwYWdlXSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByb3V0ZXJTZXJ2aWNlLm5hdmlnYXRlKFtgL2BdKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGFnZSA9IHBhZ2UgPyAnP3JlZGlyZWN0UGFnZT0nICsgZW5jb2RlVVJJQ29tcG9uZW50KHBhZ2UpIDogJyc7XG4gICAgICAgICAgICBwYWdlUGFyYW1zID0gdGhpcy4kc2VjdXJpdHkuZ2V0UXVlcnlTdHJpbmcodGhpcy4kc2VjdXJpdHkuZ2V0UmVkaXJlY3RlZFJvdXRlUXVlcnlQYXJhbXMoKSk7XG4gICAgICAgICAgICBwYWdlUGFyYW1zID0gcGFnZVBhcmFtcyA/ICc/JyArIHBhZ2VQYXJhbXMgOiAnJztcbiAgICAgICAgICAgIC8vIHNob3dpbmcgYSByZWRpcmVjdGluZyBtZXNzYWdlXG4gICAgICAgICAgICBkb2N1bWVudC5ib2R5LnRleHRDb250ZW50ID0gXy5nZXQodGhpcy5nZXRBcHBMb2NhbGUoKSwgWydNRVNTQUdFX0xPR0lOX1JFRElSRUNUSU9OJ10pIHx8ICdSZWRpcmVjdGluZyB0byBzc28gbG9naW4uLi4nO1xuICAgICAgICAgICAgLy8gYXBwZW5kaW5nIHJlZGlyZWN0IHRvIHBhZ2UgYW5kIHBhZ2UgcGFyYW1zXG4gICAgICAgICAgICBjb25zdCBzc29VcmwgPSB0aGlzLmdldERlcGxveWVkVVJMKCkgKyBTU09fVVJMICsgcGFnZSArIHBhZ2VQYXJhbXM7XG4gICAgICAgICAgICAvKlxuICAgICAgICAgICAgICogcmVtb3ZlIGlGcmFtZSB3aGVuIHJlZGlyZWN0ZWQgdG8gSWRQIGxvZ2luIHBhZ2UuXG4gICAgICAgICAgICAgKiB0aGlzIGlzIGJlaW5nIGRvbmUgYXMgSURQcyBkbyBub3QgYWxsb3cgdG8gZ2V0IHRoZW1zZWx2ZXMgbG9hZGVkIGludG8gaUZyYW1lcy5cbiAgICAgICAgICAgICAqIHJlbW92ZS10b29sYmFyIGhhcyBiZWVuIGFzc2lnbmVkIHdpdGggYSB3aW5kb3cgbmFtZSBXTV9QUkVWSUVXX1dJTkRPVywgY2hlY2sgaWYgdGhlIGlmcmFtZSBpcyBvdXIgdG9vbGJhciByZWxhdGVkIGFuZFxuICAgICAgICAgICAgICogc2FmZWx5IGNoYW5nZSB0aGUgbG9jYXRpb24gb2YgdGhlIHBhcmVudCB0b29sYmFyIHdpdGggY3VycmVudCB1cmwuXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGlmICh3aW5kb3cuc2VsZiAhPT0gd2luZG93LnRvcCAmJiB3aW5kb3cucGFyZW50Lm5hbWUgPT09IFBSRVZJRVdfV0lORE9XX05BTUUpIHtcbiAgICAgICAgICAgICAgICB3aW5kb3cucGFyZW50LmxvY2F0aW9uLmhyZWYgPSB3aW5kb3cuc2VsZi5sb2NhdGlvbi5ocmVmO1xuICAgICAgICAgICAgICAgIHdpbmRvdy5wYXJlbnQubmFtZSA9ICcnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IHNzb1VybDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEhhbmRsZXMgdGhlIGFwcCB3aGVuIGEgWEhSIHJlcXVlc3QgcmV0dXJucyA0MDEgcmVzcG9uc2VcbiAgICAgKiBJZiBubyB1c2VyIHdhcyBsb2dnZWQgaW4gYmVmb3JlIDQwMSBvY2N1cnJlZCwgRmlyc3QgdGltZSBMb2dpbiBpcyBzaW11bGF0ZWRcbiAgICAgKiBFbHNlLCBhIHNlc3Npb24gdGltZW91dCBoYXMgb2NjdXJyZWQgYW5kIHRoZSBzYW1lIGlzIHNpbXVsYXRlZFxuICAgICAqIEBwYXJhbSBwYWdlICBpZiBwcm92aWRlZCwgcmVwcmVzZW50cyB0aGUgcGFnZSBuYW1lIGZvciB3aGljaCBYSFIgcmVxdWVzdCByZXR1cm5lZCA0MDEsIG9uIHJlLWxvZ2luXG4gICAgICogICAgICAgICAgICAgIGlmIG5vdCBwcm92aWRlZCwgYSBzZXJ2aWNlIHJlcXVlc3QgcmV0dXJuZWQgNDAxXG4gICAgICogQHBhcmFtIG9uU3VjY2VzcyBzdWNjZXNzIGhhbmRsZXJcbiAgICAgKiBAcGFyYW0gb25FcnJvciBlcnJvciBoYW5kbGVyXG4gICAgICovXG4gICAgaGFuZGxlNDAxKHBhZ2U/LCBvcHRpb25zPykge1xuICAgICAgICBsZXQgc2Vzc2lvblRpbWVvdXRDb25maWcsXG4gICAgICAgICAgICBzZXNzaW9uVGltZW91dE1ldGhvZCxcbiAgICAgICAgICAgIGxvZ2luQ29uZmlnLFxuICAgICAgICAgICAgbG9naW5NZXRob2Q7XG4gICAgICAgIGNvbnN0IExPR0lOX01FVEhPRCA9IHtcbiAgICAgICAgICAgICAgICAnRElBTE9HJyA6ICdESUFMT0cnLFxuICAgICAgICAgICAgICAgICdQQUdFJyAgIDogJ1BBR0UnLFxuICAgICAgICAgICAgICAgICdTU08nICAgIDogJ1NTTydcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgY29uZmlnID0gdGhpcy4kc2VjdXJpdHkuZ2V0KCk7XG4gICAgICAgIGxldCBxdWVyeVBhcmFtc09iaiA9IHt9O1xuICAgICAgICBsb2dpbkNvbmZpZyA9IGNvbmZpZy5sb2dpbkNvbmZpZztcbiAgICAgICAgdGhpcy5sYXN0TG9nZ2VkVXNlcklkID0gY29uZmlnLnVzZXJJbmZvICYmIGNvbmZpZy51c2VySW5mby51c2VySWQ7XG4gICAgICAgIC8vIGlmIHVzZXIgZm91bmQsIDQwMSB3YXMgdGhyb3duIGFmdGVyIHNlc3Npb24gdGltZVxuICAgICAgICBpZiAoY29uZmlnLnVzZXJJbmZvICYmIGNvbmZpZy51c2VySW5mby51c2VyTmFtZSkge1xuICAgICAgICAgICAgY29uZmlnLmF1dGhlbnRpY2F0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIHNlc3Npb25UaW1lb3V0Q29uZmlnID0gbG9naW5Db25maWcuc2Vzc2lvblRpbWVvdXQgfHwgeyd0eXBlJzogTE9HSU5fTUVUSE9ELkRJQUxPR307XG4gICAgICAgICAgICBzZXNzaW9uVGltZW91dE1ldGhvZCA9IHNlc3Npb25UaW1lb3V0Q29uZmlnLnR5cGUudG9VcHBlckNhc2UoKTtcbiAgICAgICAgICAgIHN3aXRjaCAoc2Vzc2lvblRpbWVvdXRNZXRob2QpIHtcbiAgICAgICAgICAgICAgICBjYXNlIExPR0lOX01FVEhPRC5ESUFMT0c6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd0xvZ2luRGlhbG9nKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgTE9HSU5fTUVUSE9ELlBBR0U6XG4gICAgICAgICAgICAgICAgICAgIGlmICghcGFnZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFnZSA9IHRoaXMuJHNlY3VyaXR5LmdldEN1cnJlbnRSb3V0ZVBhZ2UoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBxdWVyeVBhcmFtc09ialsncmVkaXJlY3RUbyddID0gcGFnZTtcbiAgICAgICAgICAgICAgICAgICAgLy8gQWRkaW5nIHF1ZXJ5IHBhcmFtcyhwYWdlIHBhcmFtcyBvZiBwYWdlIGJlaW5nIHJlZGlyZWN0ZWQgdG8pIHRvIHRoZSBVUkwuXG4gICAgICAgICAgICAgICAgICAgIHF1ZXJ5UGFyYW1zT2JqID0gXy5tZXJnZShxdWVyeVBhcmFtc09iaiwgdGhpcy4kc2VjdXJpdHkuZ2V0UmVkaXJlY3RlZFJvdXRlUXVlcnlQYXJhbXMoKSk7XG4gICAgICAgICAgICAgICAgICAgIC8vIHRoZSByZWRpcmVjdCBwYWdlIHNob3VsZCBub3QgYmUgc2FtZSBhcyBzZXNzaW9uIHRpbWVvdXQgbG9naW4gcGFnZVxuICAgICAgICAgICAgICAgICAgICBpZiAoIHBhZ2UgIT09IHNlc3Npb25UaW1lb3V0Q29uZmlnLnBhZ2VOYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiRyb3V0ZXIubmF2aWdhdGUoW3Nlc3Npb25UaW1lb3V0Q29uZmlnLnBhZ2VOYW1lXSwge3F1ZXJ5UGFyYW1zOiBxdWVyeVBhcmFtc09ian0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgTE9HSU5fTUVUSE9ELlNTTzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVTU09Mb2dpbihjb25maWcpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc2V0TGFuZGluZ1BhZ2UoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIGlmIG5vIHVzZXIgZm91bmQsIDQwMSB3YXMgdGhyb3duIGZvciBmaXJzdCB0aW1lIGxvZ2luXG4gICAgICAgICAgICBsb2dpbk1ldGhvZCA9IGxvZ2luQ29uZmlnLnR5cGUudG9VcHBlckNhc2UoKTtcbiAgICAgICAgICAgIHN3aXRjaCAobG9naW5NZXRob2QpIHtcbiAgICAgICAgICAgICAgICBjYXNlIExPR0lOX01FVEhPRC5ESUFMT0c6XG4gICAgICAgICAgICAgICAgICAgIC8vIFRocm91Z2ggbG9naW5EaWFsb2csIHVzZXIgd2lsbCByZW1haW4gaW4gdGhlIGN1cnJlbnQgc3RhdGUgYW5kIGZhaWxlZCBjYWxscyB3aWxsIGJlIGV4ZWN1dGVkIHBvc3QgbG9naW4gdGhyb3VnaCBMb2dpblZhcmlhYmxlU2VydmljZS5cbiAgICAgICAgICAgICAgICAgICAgLy8gTk9URTogdXNlciB3aWxsIGJlIHJlZGlyZWN0ZWQgdG8gcmVzcGVjdGl2ZSBsYW5kaW5nIHBhZ2Ugb25seSBpZiBkaWFsb2cgaXMgb3BlbmVkIG1hbnVhbGx5KG5vdCB0aHJvdWdoIGEgZmFpbGVkIDQwMSBjYWxsKS5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ub1JlZGlyZWN0KHRydWUpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dMb2dpbkRpYWxvZygpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIExPR0lOX01FVEhPRC5QQUdFOlxuICAgICAgICAgICAgICAgICAgICAvLyBkbyBub3QgcHJvdmlkZSByZWRpcmVjdFRvIHBhZ2UgaWYgZmV0Y2hpbmcgSE9NRSBwYWdlIHJlc3VsdGVkIDQwMVxuICAgICAgICAgICAgICAgICAgICAvLyBvbiBhcHAgbG9hZCwgYnkgZGVmYXVsdCBIb21lIHBhZ2UgaXMgbG9hZGVkXG4gICAgICAgICAgICAgICAgICAgIHBhZ2UgPSB0aGlzLiRzZWN1cml0eS5nZXRSZWRpcmVjdFBhZ2UoY29uZmlnLCBwYWdlKTtcbiAgICAgICAgICAgICAgICAgICAgcXVlcnlQYXJhbXNPYmpbJ3JlZGlyZWN0VG8nXSA9IHBhZ2U7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGV4dHJhUXVlcnlQYXJhbXMgPSAob3B0aW9ucyAmJiBvcHRpb25zLnF1ZXJ5UGFyYW1zKSB8fCB0aGlzLiRzZWN1cml0eS5nZXRSZWRpcmVjdGVkUm91dGVRdWVyeVBhcmFtcygpO1xuICAgICAgICAgICAgICAgICAgICBxdWVyeVBhcmFtc09iaiA9IF8ubWVyZ2UocXVlcnlQYXJhbXNPYmosIGV4dHJhUXVlcnlQYXJhbXMpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLiRyb3V0ZXIubmF2aWdhdGUoW2xvZ2luQ29uZmlnLnBhZ2VOYW1lXSwge3F1ZXJ5UGFyYW1zOiBxdWVyeVBhcmFtc09ian0pO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLiRhcHAubGFuZGluZ1BhZ2VOYW1lID0gbG9naW5Db25maWcucGFnZU5hbWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgTE9HSU5fTUVUSE9ELlNTTzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVTU09Mb2dpbihjb25maWcpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFVwZGF0ZXMgZGF0YSBkZXBlbmRlbnQgb24gbG9nZ2VkIGluIHVzZXJcbiAgICAgKiBSZWxvYWRzIHNlY3VyaXR5IGNvbmZpZywgbWV0YWRhdGFcbiAgICAgKiBVcGRhdGVzIHRoZSBsb2dnZWRJblVzZXJWYXJpYWJsZVxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fVxuICAgICAqL1xuICAgIHJlbG9hZEFwcERhdGEoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxvYWRTZWN1cml0eUNvbmZpZyh0cnVlKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxvYWRNZXRhZGF0YSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnVwZGF0ZUxvZ2dlZEluVXNlclZhcmlhYmxlKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbm9SZWRpcmVjdCh2YWx1ZT86IGJvb2xlYW4pIHtcbiAgICAgICAgaWYgKF8uaXNVbmRlZmluZWQodmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbm9SZWRpcmVjdDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX25vUmVkaXJlY3QgPSB2YWx1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX25vUmVkaXJlY3Q7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogaW52b2tlcyBzZXNzaW9uIGZhaWx1cmUgcmVxdWVzdHNcbiAgICAgKi9cbiAgICBleGVjdXRlU2Vzc2lvbkZhaWx1cmVSZXF1ZXN0cygpIHtcbiAgICAgICAgdGhpcy4kaHR0cC5leGVjdXRlU2Vzc2lvbkZhaWx1cmVSZXF1ZXN0cygpO1xuICAgIH1cblxuICAgIHB1c2hUb1Nlc3Npb25GYWlsdXJlUmVxdWVzdHMoY2FsbGJhY2spIHtcbiAgICAgICAgdGhpcy4kaHR0cC5wdXNoVG9TZXNzaW9uRmFpbHVyZVF1ZXVlKGNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0RGVwbG95ZWRVUkwoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiRhcHAuZGVwbG95ZWRVcmwgPyB0aGlzLiRhcHAuZGVwbG95ZWRVcmwgOiAkcm9vdFNjb3BlLnByb2plY3QuZGVwbG95ZWRVcmw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRmV0Y2hlcyB0aGUgY3VzdG9tdXJsc2NoZW1lIGZvciBhIG1vYmlsZSBhcHBcbiAgICAgKiB3aGljaCBpcyB1c2VkIGZvciByZWRpcmVjdGlvbiBiYWNrIHRvIHRoZSBhcHAgZnJvbSBicm93c2VyIGluIGltcGxpY2l0IG9BdXRoIGZsb3dcbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRDdXN0b21VcmxTY2hlbWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiRhcHAuY3VzdG9tVXJsU2NoZW1lO1xuICAgIH1cblxuICAgIG5vdGlmeShldmVudE5hbWUsIGRhdGEpIHtcbiAgICAgICAgdGhpcy4kYXBwLm5vdGlmeShldmVudE5hbWUsIGRhdGEpO1xuICAgIH1cblxuICAgIHN1YnNjcmliZShldmVudE5hbWUsIGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJGFwcC5zdWJzY3JpYmUoZXZlbnROYW1lLCBkYXRhKTtcbiAgICB9XG5cbiAgICBnZXRBY3RpdmVQYWdlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4kYXBwLmFjdGl2ZVBhZ2U7XG4gICAgfVxuXG4gICAgZ2V0QXBwTG9jYWxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4kYXBwLmFwcExvY2FsZTtcbiAgICB9XG5cbiAgICBnZXRTZWxlY3RlZExvY2FsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJGkxOG4uZ2V0U2VsZWN0ZWRMb2NhbGUoKTtcbiAgICB9XG5cbiAgICBub3RpZnlBcHAodGVtcGxhdGUsIHR5cGUsIHRpdGxlPykge1xuICAgICAgICB0aGlzLiRhcHAubm90aWZ5QXBwKHRlbXBsYXRlLCB0eXBlLCB0aXRsZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVHJpZ2dlcnMgdGhlIG9uQmVmb3JlU2VydmljZSBtZXRob2QgZGVmaW5lZCBpbiBhcHAuanMgb2YgdGhlIGFwcFxuICAgICAqIEBwYXJhbSByZXF1ZXN0UGFyYW1zXG4gICAgICovXG4gICAgYXBwT25CZWZvcmVTZXJ2aWNlQ2FsbChyZXF1ZXN0UGFyYW1zOiBhbnkpIHtcbiAgICAgICAgcmV0dXJuIHRyaWdnZXJGbih0aGlzLiRhcHAub25CZWZvcmVTZXJ2aWNlQ2FsbCwgcmVxdWVzdFBhcmFtcyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVHJpZ2dlcnMgdGhlIG9uU2VydmljZVN1Y2Nlc3MgbWV0aG9kIGRlZmluZWQgaW4gYXBwLmpzIG9mIHRoZSBhcHBcbiAgICAgKiBAcGFyYW0gZGF0YVxuICAgICAqIEBwYXJhbSB4aHJPYmpcbiAgICAgKi9cbiAgICBhcHBPblNlcnZpY2VTdWNjZXNzKGRhdGE6IGFueSwgeGhyT2JqOiBhbnkpIHtcbiAgICAgICAgcmV0dXJuIHRyaWdnZXJGbih0aGlzLiRhcHAub25TZXJ2aWNlU3VjY2VzcywgZGF0YSwgeGhyT2JqKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VycyB0aGUgb25TZXJ2aWNlRXJyb3IgbWV0aG9kIGRlZmluZWQgaW4gYXBwLmpzIG9mIHRoZSBhcHBcbiAgICAgKiBAcGFyYW0gZGF0YVxuICAgICAqIEBwYXJhbSB4aHJPYlxuICAgICAqL1xuICAgIGFwcE9uU2VydmljZUVycm9yKGRhdGE6IGFueSwgeGhyT2I/OiBhbnkpIHtcbiAgICAgICAgcmV0dXJuIHRyaWdnZXJGbih0aGlzLiRhcHAub25TZXJ2aWNlRXJyb3IsIGRhdGEsIHhock9iKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VycyB0aGUgYXBwVmFyaWFibGVzUmVhZHkgbWV0aG9kIGRlZmluZWQgaW4gYXBwLmpzIG9mIHRoZSBhcHBcbiAgICAgKi9cbiAgICBhcHBWYXJpYWJsZXNSZWFkeSgpIHtcbiAgICAgICAgdHJpZ2dlckZuKHRoaXMuJGFwcC5vbkFwcFZhcmlhYmxlc1JlYWR5KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VycyB0aGUgb25CZWZvcmVBcHBSZWFkeSBtZXRob2QgZGVmaW5lZCBpbiBhcHAuanMgb2YgdGhlIGFwcFxuICAgICAqL1xuICAgIGJlZm9yZUFwcFJlYWR5KCkge1xuICAgICAgICB0cmlnZ2VyRm4odGhpcy4kYXBwLm9uQmVmb3JlQXBwUmVhZHkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIHBpcGUgYmFzZWQgb24gdGhlIGlucHV0XG4gICAgICovXG4gICAgZ2V0UGlwZShwaXBlKSB7XG4gICAgICAgIGlmIChwaXBlID09PSAnZGF0ZScpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLiRkYXRlUGlwZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc2V0TGFuZGluZ1BhZ2UoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiRzZWN1cml0eS5nZXRQYWdlQnlMb2dnZWRJblVzZXIoKS50aGVuKHAgPT4gdGhpcy4kYXBwLmxhbmRpbmdQYWdlTmFtZSA9IDxzdHJpbmc+IHApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIHJldHVybiB0cnVlIGlmIHByZWZhYiB0eXBlIGFwcFxuICAgICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgICAqL1xuICAgIGlzUHJlZmFiVHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJGFwcC5pc1ByZWZhYlR5cGU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogcmV0dXJuIHRydWUgaWYgdGVtcGxhdGUgYnVuZGxlIHR5cGUgYXBwXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAgICovXG4gICAgaXNUZW1wbGF0ZUJ1bmRsZVR5cGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiRhcHAuaXNUZW1wbGF0ZUJ1bmRsZVR5cGU7XG4gICAgfVxuXG4gICAgcG9zdE1lc3NhZ2UoY29udGVudCkge1xuICAgICAgICB3aW5kb3cudG9wLnBvc3RNZXNzYWdlKGNvbnRlbnQsICcqJyk7XG4gICAgfVxuXG4gICAgc2hvd1RlbXBsYXRlKGlkeCkge1xuICAgICAgICBjb25zdCB0ZW1wbGF0ZSA9IHRoaXMudGVtcGxhdGVzW2lkeF07XG4gICAgICAgIC8vIHNjb3BlLmFjdGl2ZVRlbXBsYXRlSW5kZXggPSBpZHg7XG4gICAgICAgIHRoaXMuJHJvdXRlci5uYXZpZ2F0ZShbdGVtcGxhdGUuaWRdKTtcbiAgICB9XG4gICAgcG9zdFRlbXBsYXRlQnVuZGxlSW5mbygpIHtcblxuICAgICAgICB3aW5kb3cub25tZXNzYWdlID0gKGV2dCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbXNnRGF0YSA9IGV2dC5kYXRhO1xuXG4gICAgICAgICAgICBpZiAoIV8uaXNPYmplY3QobXNnRGF0YSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGtleSA9IG1zZ0RhdGEua2V5O1xuXG4gICAgICAgICAgICBzd2l0Y2ggKGtleSkge1xuICAgICAgICAgICAgICAgIGNhc2UgUE9TVF9NRVNTQUdFUy5ISURFX1RFTVBMQVRFU19TSE9XX0NBU0U6XG4gICAgICAgICAgICAgICAgICAgIC8vIHNjb3BlLmhpZGVTaG93Q2FzZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgUE9TVF9NRVNTQUdFUy5TRUxFQ1RfVEVNUExBVEU6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd1RlbXBsYXRlKG1zZ0RhdGEudGVtcGxhdGVJbmRleCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5wb3N0TWVzc2FnZSh7a2V5OiBQT1NUX01FU1NBR0VTLk9OX0xPQUR9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGZldGNoQ29udGVudCgnanNvbicsICcuL2NvbmZpZy5qc29uJywgdHJ1ZSwgcmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgdGhpcy50ZW1wbGF0ZXMgPSBbXTtcbiAgICAgICAgICAgIGlmICghcmVzcG9uc2UuZXJyb3IpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRlbXBsYXRlcyA9IHJlc3BvbnNlLnRlbXBsYXRlcztcbiAgICAgICAgICAgICAgICB0aGlzLnBvc3RNZXNzYWdlKHsna2V5JzogUE9TVF9NRVNTQUdFUy5URU1QTEFURUJVTkRMRV9DT05GSUcsICdjb25maWcnOiByZXNwb25zZX0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwb3N0QXBwVHlwZUluZm8oKSB7XG4gICAgICAgIGlmICh0aGlzLmlzVGVtcGxhdGVCdW5kbGVUeXBlKCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBvc3RUZW1wbGF0ZUJ1bmRsZUluZm8oKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==
484
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLm1hbmFnZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3J1bnRpbWUtYmFzZS9zcmMvc2VydmljZXMvYXBwLm1hbmFnZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFM0MsT0FBTyxFQUNILHFCQUFxQixFQUNyQixtQkFBbUIsRUFDbkIsbUJBQW1CLEVBQ25CLHNCQUFzQixFQUN0QixHQUFHLEVBQ0gsWUFBWSxFQUNaLFNBQVMsRUFDVCxTQUFTLEVBQ1QsVUFBVSxFQUNiLE1BQU0sVUFBVSxDQUFDO0FBQ2xCLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDL0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsYUFBYSxFQUFHLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7Ozs7OztBQUd6RyxJQUFLLGFBT0o7QUFQRCxXQUFLLGFBQWE7SUFDZCxzRUFBcUQsQ0FBQTtJQUNyRCxzRUFBcUQsQ0FBQTtJQUNyRCx5REFBaUQsQ0FBQTtJQUNqRCxvREFBNEMsQ0FBQTtJQUM1QyxpRUFBbUQsQ0FBQTtJQUNuRCxvQ0FBb0MsQ0FBQTtBQUN4QyxDQUFDLEVBUEksYUFBYSxLQUFiLGFBQWEsUUFPakI7QUFHRCxNQUFNLE9BQU8saUJBQWlCO2FBQ1YsaUJBQVksR0FBRyxtQkFBbUIsQ0FBQztJQVFuRCxZQUNZLEtBQTBCLEVBQzFCLFNBQTBCLEVBQzFCLE9BQThCLEVBQzlCLE9BQWUsRUFDZixJQUFTLEVBQ1QsVUFBNEIsRUFDNUIsU0FBMEIsRUFDMUIsUUFBZ0MsRUFDaEMsS0FBMEIsRUFDMUIs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S0FBSyxFQUFFO2dCQUNqQixJQUFJLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQyxTQUFTLENBQUM7Z0JBQ3BDLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBQyxLQUFLLEVBQUUsYUFBYSxDQUFDLHFCQUFxQixFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUMsQ0FBQyxDQUFDO2FBQ3RGO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsZUFBZTtRQUNYLElBQUksSUFBSSxDQUFDLG9CQUFvQixFQUFFLEVBQUU7WUFDN0IsT0FBTyxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztTQUN4QztJQUNMLENBQUM7a0ZBbmdCUSxpQkFBaUI7dUVBQWpCLGlCQUFpQixXQUFqQixpQkFBaUI7O3VGQUFqQixpQkFBaUI7Y0FEN0IsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBEYXRlUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5cbmltcG9ydCB7XG4gICAgQWJzdHJhY3REaWFsb2dTZXJ2aWNlLFxuICAgIEFic3RyYWN0SHR0cFNlcnZpY2UsXG4gICAgQWJzdHJhY3RJMThuU2VydmljZSxcbiAgICBBYnN0cmFjdFNwaW5uZXJTZXJ2aWNlLFxuICAgIEFwcCxcbiAgICBmZXRjaENvbnRlbnQsXG4gICAgaXNEZWZpbmVkLFxuICAgIHRyaWdnZXJGbixcbiAgICAkYXBwRGlnZXN0XG59IGZyb20gJ0B3bS9jb3JlJztcbmltcG9ydCB7IFNlY3VyaXR5U2VydmljZSB9IGZyb20gJ0B3bS9zZWN1cml0eSc7XG5pbXBvcnQgeyBDT05TVEFOVFMsICRyb290U2NvcGUsIHJvdXRlclNlcnZpY2UsICBNZXRhZGF0YVNlcnZpY2UsIFZhcmlhYmxlc1NlcnZpY2UgfSBmcm9tICdAd20vdmFyaWFibGVzJztcbmRlY2xhcmUgY29uc3QgXztcblxuZW51bSBQT1NUX01FU1NBR0VTIHtcbiAgICBISURFX1RFTVBMQVRFU19TSE9XX0NBU0UgPSAnaGlkZS10ZW1wbGF0ZXMtc2hvdy1jYXNlJyxcbiAgICBTSE9XX1RFTVBMQVRFU19TSE9XX0NBU0UgPSAnc2hvdy10ZW1wbGF0ZXMtc2hvdy1jYXNlJyxcbiAgICBVUERBVEVfTE9DQVRJT04gICAgICAgICAgPSAndXBkYXRlLWxvY2F0aW9uLXBhdGgnLFxuICAgIFNFTEVDVF9URU1QTEFURSAgICAgICAgICA9ICdzZWxlY3QtdGVtcGxhdGUnLFxuICAgIFRFTVBMQVRFQlVORExFX0NPTkZJRyAgICA9ICd0ZW1wbGF0ZS1idW5kbGUtY29uZmlnJyxcbiAgICBPTl9MT0FEICAgICAgICAgICAgICAgICAgPSAnb24tbG9hZCdcbn1cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEFwcE1hbmFnZXJTZXJ2aWNlIHtcbiAgICBzdGF0aWMgcmVhZG9ubHkgU0VSVklDRV9OQU1FID0gJ0FwcE1hbmFnZXJTZXJ2aWNlJztcblxuICAgIHByaXZhdGUgYXBwVmFyaWFibGVzTG9hZGVkID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBhcHBWYXJpYWJsZXNGaXJlZCA9IGZhbHNlO1xuICAgIHByaXZhdGUgX25vUmVkaXJlY3QgPSBmYWxzZTtcbiAgICBwcml2YXRlIHRlbXBsYXRlczogQXJyYXk8YW55PjtcbiAgICBwcml2YXRlIGxhc3RMb2dnZWRVc2VySWQ7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSAkaHR0cDogQWJzdHJhY3RIdHRwU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSAkc2VjdXJpdHk6IFNlY3VyaXR5U2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSAkZGlhbG9nOiBBYnN0cmFjdERpYWxvZ1NlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgJHJvdXRlcjogUm91dGVyLFxuICAgICAgICBwcml2YXRlICRhcHA6IEFwcCxcbiAgICAgICAgcHJpdmF0ZSAkdmFyaWFibGVzOiBWYXJpYWJsZXNTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlICRtZXRhZGF0YTogTWV0YWRhdGFTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlICRzcGlubmVyOiBBYnN0cmFjdFNwaW5uZXJTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlICRpMThuOiBBYnN0cmFjdEkxOG5TZXJ2aWNlLFxuICAgICAgICBwcml2YXRlICRkYXRlUGlwZTogRGF0ZVBpcGUsXG4gICAgKSB7XG4gICAgICAgIC8vIHJlZ2lzdGVyIG1ldGhvZCB0byBpbnZva2Ugb24gc2Vzc2lvbiB0aW1lb3V0XG4gICAgICAgIHRoaXMuJGh0dHAucmVnaXN0ZXJPblNlc3Npb25UaW1lb3V0KHRoaXMuaGFuZGxlNDAxLmJpbmQodGhpcykpO1xuXG4gICAgICAgIHRoaXMuJHZhcmlhYmxlcy5yZWdpc3RlckRlcGVuZGVuY3koJ2FwcE1hbmFnZXInLCB0aGlzKTtcblxuICAgICAgICB0aGlzLiRhcHAuc3Vic2NyaWJlKCd0b2dnbGUtdmFyaWFibGUtc3RhdGUnLCAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmFyaWFibGUgPSBkYXRhLnZhcmlhYmxlLFxuICAgICAgICAgICAgICAgIGFjdGl2ZSA9IGRhdGEuYWN0aXZlO1xuICAgICAgICAgICAgaWYgKCFfLmlzRW1wdHkoXy50cmltKHZhcmlhYmxlLnNwaW5uZXJDb250ZXh0KSkpIHtcbiAgICAgICAgICAgICAgICBpZiAoYWN0aXZlKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBzcGlubmVyRXhpc3RzO1xuICAgICAgICAgICAgICAgICAgICAvLyBXTVMtMjExMTcgOiBEbyBub3QgdHJpZ2dlciBzcGlubmVyLCBpZiB0aGUgY3VycmVudCB2YXJpYWJsZSBpcyBzYW1lIGFzIHNwaW5uZXIgd2hpY2ggaXMgaW4gY29udGV4dFxuICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFibGUuX3NwaW5uZXJJZCAmJiB2YXJpYWJsZS5fc3Bpbm5lcklkLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgXy5mb3JFYWNoKHZhcmlhYmxlLl9zcGlubmVySWQsIChpdGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0uc2xpY2UoMCwgaXRlbS5sYXN0SW5kZXhPZignXycpKSA9PT0gdmFyaWFibGUuX2lkICYmICh0aGlzLiRzcGlubmVyIGFzIGFueSkubWVzc2FnZXNCeUNvbnRleHQgJiYgKHRoaXMuJHNwaW5uZXIgYXMgYW55KS5tZXNzYWdlc0J5Q29udGV4dFt2YXJpYWJsZS5zcGlubmVyQ29udGV4dF0gJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZhcmlhYmxlLnNwaW5uZXJNZXNzYWdlID09PSAodGhpcy4kc3Bpbm5lciBhcyBhbnkpLm1lc3NhZ2VzQnlDb250ZXh0W3ZhcmlhYmxlLnNwaW5uZXJDb250ZXh0XVtcImZpbmFsTWVzc2FnZVwiXSB8fCB2YXJpYWJsZS5zcGlubmVyTWVzc2FnZSA9PT0gKHRoaXMuJHNwaW5uZXIgYXMgYW55KS5tZXNzYWdlc0J5Q29udGV4dFt2YXJpYWJsZS5zcGlubmVyQ29udGV4dF1baXRlbV0pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwaW5uZXJFeGlzdHMgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKCFzcGlubmVyRXhpc3RzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS5fc3Bpbm5lcklkID0gdmFyaWFibGUuX3NwaW5uZXJJZCB8fCBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNwaW5uZXJJZCA9IHRoaXMuJHNwaW5uZXIuc2hvdyh2YXJpYWJsZS5zcGlubmVyTWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS5faWQgKyAnXycgKyBEYXRlLm5vdygpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLnNwaW5uZXJjbGFzcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS5zcGlubmVyQ29udGV4dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS5fc3Bpbm5lcklkLnB1c2goc3Bpbm5lcklkKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJHNwaW5uZXIuaGlkZSh2YXJpYWJsZS5fc3Bpbm5lcklkLnNoaWZ0KCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuJGFwcC5zdWJzY3JpYmUoJ3VzZXJMb2dnZWRJbicsICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2V0TGFuZGluZ1BhZ2UoKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmxhc3RMb2dnZWRVc2VySWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLiRzZWN1cml0eS5nZXRDb25maWcoY29uZmlnID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYoY29uZmlnICYmIGNvbmZpZy51c2VySW5mby51c2VySWQgIT09IHRoaXMubGFzdExvZ2dlZFVzZXJJZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kYXBwLmNsZWFyUGFnZUNhY2hlKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LCBudWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuJGFwcC5zdWJzY3JpYmUoJ3VzZXJMb2dnZWRPdXQnLCAoKSA9PiB0aGlzLnNldExhbmRpbmdQYWdlKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLiRhcHAuY2xlYXJQYWdlQ2FjaGUoKTtcbiAgICAgICAgfSkpO1xuICAgICAgICB0aGlzLiRhcHAuc3Vic2NyaWJlKCdodHRwNDAxJywgKGQgPSB7fSkgPT4gdGhpcy5oYW5kbGU0MDEoZC5wYWdlLCBkLm9wdGlvbnMpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBPbiBzZXNzaW9uIHRpbWVvdXQsIGlmIHRoZSBzZXNzaW9uIHRpbWVvdXQgY29uZmlnIGlzIHNldCB0byBhIGRpYWxvZywgdGhlbiBvcGVuIGxvZ2luIGRpYWxvZ1xuICAgICAqL1xuICAgIHByaXZhdGUgc2hvd0xvZ2luRGlhbG9nKCkge1xuICAgICAgICB0aGlzLiRzcGlubmVyLmhpZGUoJ2dsb2JhbFNwaW5uZXInKTtcbiAgICAgICAgLy8gUmVtb3ZpbmcgdGhlIGNsb3NlIGFsbCBkaWFsb2dzIGNhbGwsIHNvIHRoZSBleGlzdGluZyBkaWFsb2dzIHJlbWFpbiBvcGVuIGFuZFxuICAgICAgICAvLyB0aGUgbG9naW4gZGlhbG9nIGNvbWVzIG9uIHRvcCBvZiBpdC5cbiAgICAgICAgdGhpcy4kZGlhbG9nLm9wZW4oJ0NvbW1vbkxvZ2luRGlhbG9nJyk7XG4gICAgICAgIC8vIFNpbmNlIHRoZSBsb2dpbiBkaWFsb2cgaXMgY2xvc2VkIGFuZCBvcGVuZWQgaXRzIHVwZGF0ZWQgcHJvcGVydHkgaXNuJ3QgcmVhZCBieSBhbmd1bGFyLlxuICAgICAgICAvLyBIZW5jZSB3ZSB0cmlnZ2VyIHRoZSBkaWdlc3QgY3ljbGVcbiAgICAgICAgJGFwcERpZ2VzdCgpO1xuICAgIH1cblxuICAgIGxvYWRBcHBKUygpIHtcblxuICAgIH1cblxuICAgIGxvYWRDb21tb25QYWdlKCkge1xuXG4gICAgfVxuXG4gICAgbG9hZFNlY3VyaXR5Q29uZmlnKGZvcmNlRmxhZz86IGJvb2xlYW4pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJHNlY3VyaXR5LmxvYWQoZm9yY2VGbGFnKS50aGVuKChyKSA9PiB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuJGFwcC5sYW5kaW5nUGFnZU5hbWUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldExhbmRpbmdQYWdlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcjtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbG9hZE1ldGFkYXRhKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4kbWV0YWRhdGEubG9hZCgpO1xuICAgIH1cblxuICAgIGxvYWRBcHBWYXJpYWJsZXModmFyaWFibGVzPzogYW55KSB7XG4gICAgICAgIGlmICh0aGlzLmFwcFZhcmlhYmxlc0xvYWRlZCkge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaW5pdCA9IHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLiR2YXJpYWJsZXMucmVnaXN0ZXIoJ2FwcCcsIHJlc3BvbnNlLCB0aGlzLiRhcHApO1xuICAgICAgICAgICAgLy8gbm90IGFzc2lnbmluZyBkaXJlY3RseSB0byB0aGlzLiRhcHAgdG8ga2VlcCB0aGUgcmVmZXJlbmNlIGluIHRhY3RcbiAgICAgICAgICAgIF8uZXh0ZW5kKHRoaXMuJGFwcC5WYXJpYWJsZXMsIGRhdGEuVmFyaWFibGVzKTtcbiAgICAgICAgICAgIF8uZXh0ZW5kKHRoaXMuJGFwcC5BY3Rpb25zLCBkYXRhLkFjdGlvbnMpO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVMb2dnZWRJblVzZXJWYXJpYWJsZSgpO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVTdXBwb3J0ZWRMb2NhbGVWYXJpYWJsZSgpO1xuICAgICAgICAgICAgdGhpcy5hcHBWYXJpYWJsZXNMb2FkZWQgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5hcHBWYXJpYWJsZXNGaXJlZCA9IGZhbHNlO1xuICAgICAgICB9O1xuXG4gICAgICAgIGlmIChpc0RlZmluZWQodmFyaWFibGVzKSkge1xuICAgICAgICAgICAgaW5pdCh2YXJpYWJsZXMpO1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuJGh0dHAuZ2V0KCcuL2FwcC52YXJpYWJsZXMuanNvbicpLnRoZW4ocmVzcG9uc2UgPT4gaW5pdChyZXNwb25zZSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGdldHRlciBhbmQgc2V0dGVyIGZvciB0aGUgcHJvcGVydHkgYXBwVmFyaWFibGVzRmlyZWRcbiAgICAgKiB0aGlzIGZsYWcgZGV0ZXJtaW5lcyBpZiB0aGUgYXBwIHZhcmlhYmxlcyh3aXRoIHN0YXJ0VXBkYXRlOnRydWUpIGhhdmUgYmVlbiBmaXJlZFxuICAgICAqIHRoZXkgc2hvdWxkIGdldCBmaXJlZCBvbmx5IG9uY2UgdGhyb3VnaCBhcHAgbGlmZWN5Y2xlXG4gICAgICogQHBhcmFtIHtib29sZWFufSBpc0ZpcmVkXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAgICovXG4gICAgaXNBcHBWYXJpYWJsZXNGaXJlZChpc0ZpcmVkPzogYm9vbGVhbikge1xuICAgICAgICBpZiAoaXNEZWZpbmVkKGlzRmlyZWQpKSB7XG4gICAgICAgICAgICB0aGlzLmFwcFZhcmlhYmxlc0ZpcmVkID0gaXNGaXJlZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5hcHBWYXJpYWJsZXNGaXJlZDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNsZWFyTG9nZ2VkSW5Vc2VyVmFyaWFibGUodmFyaWFibGUpIHtcbiAgICAgICAgdmFyaWFibGUuaXNBdXRoZW50aWNhdGVkID0gZmFsc2U7XG4gICAgICAgIHZhcmlhYmxlLnJvbGVzICAgICAgICAgICA9IFtdO1xuICAgICAgICB2YXJpYWJsZS5uYW1lICAgICAgICAgICAgPSB1bmRlZmluZWQ7XG4gICAgICAgIHZhcmlhYmxlLmlkICAgICAgICAgICAgICA9IHVuZGVmaW5lZDtcbiAgICAgICAgdmFyaWFibGUudGVuYW50SWQgICAgICAgID0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlTG9nZ2VkSW5Vc2VyVmFyaWFibGUoKSB7XG4gICAgICAgIGNvbnN0IGxvZ2dlZEluVXNlciA9IF8uZ2V0KHRoaXMuJGFwcCwgJ1ZhcmlhYmxlcy5sb2dnZWRJblVzZXIuZGF0YVNldCcpO1xuXG4gICAgICAgIC8vIHNhbml0eSBjaGVja1xuICAgICAgICBpZiAoIWxvZ2dlZEluVXNlcikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLiRzZWN1cml0eS5sb2FkKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzZWN1cml0eUNvbmZpZyA9IHRoaXMuJHNlY3VyaXR5LmdldCgpO1xuICAgICAgICAgICAgaWYgKHNlY3VyaXR5Q29uZmlnICYmIHNlY3VyaXR5Q29uZmlnLnNlY3VyaXR5RW5hYmxlZCAmJiBzZWN1cml0eUNvbmZpZy5hdXRoZW50aWNhdGVkKSB7XG4gICAgICAgICAgICAgICAgbG9nZ2VkSW5Vc2VyLmlzQXV0aGVudGljYXRlZCA9IHNlY3VyaXR5Q29uZmlnLmF1dGhlbnRpY2F0ZWQ7XG4gICAgICAgICAgICAgICAgbG9nZ2VkSW5Vc2VyLnJvbGVzICAgICAgICAgICA9IHNlY3VyaXR5Q29uZmlnLnVzZXJJbmZvLnVzZXJSb2xlcztcbiAgICAgICAgICAgICAgICBsb2dnZWRJblVzZXIubmFtZSAgICAgICAgICAgID0gc2VjdXJpdHlDb25maWcudXNlckluZm8udXNlck5hbWU7XG4gICAgICAgICAgICAgICAgbG9nZ2VkSW5Vc2VyLmlkICAgICAgICAgICAgICA9IHNlY3VyaXR5Q29uZmlnLnVzZXJJbmZvLnVzZXJJZDtcbiAgICAgICAgICAgICAgICBsb2dnZWRJblVzZXIudGVuYW50SWQgICAgICAgID0gc2VjdXJpdHlDb25maWcudXNlckluZm8udGVuYW50SWQ7XG4gICAgICAgICAgICAgICAgbG9nZ2VkSW5Vc2VyLnVzZXJBdHRyaWJ1dGVzICA9IHNlY3VyaXR5Q29uZmlnLnVzZXJJbmZvLnVzZXJBdHRyaWJ1dGVzOyAvLyBhc3NpZ24gdGhlIGV4dHJhIHVzZXJBdHRyaWJ1dGVzIGZvciBjdXN0b20gdXNhZ2UuXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuY2xlYXJMb2dnZWRJblVzZXJWYXJpYWJsZShsb2dnZWRJblVzZXIpO1xuICAgICAgICAgICAgICAgIGxvZ2dlZEluVXNlci5pc1NlY3VyaXR5RW5hYmxlZCA9IHNlY3VyaXR5Q29uZmlnICYmIHNlY3VyaXR5Q29uZmlnLnNlY3VyaXR5RW5hYmxlZDtcbiAgICAgICAgICAgICAgICB0aHJvdyBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHNlY3VyaXR5Q29uZmlnO1xuICAgICAgICB9KS5jYXRjaChlcnIgPT4ge1xuICAgICAgICAgICAgbG9nZ2VkSW5Vc2VyLmlzQXV0aGVudGljYXRlZCA9IGZhbHNlO1xuICAgICAgICAgICAgbG9nZ2VkSW5Vc2VyLnJvbGVzICAgICAgICAgICA9IFtdO1xuICAgICAgICAgICAgbG9nZ2VkSW5Vc2VyLm5hbWUgICAgICAgICAgICA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGxvZ2dlZEluVXNlci5pZCAgICAgICAgICAgICAgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICBsb2dnZWRJblVzZXIudGVuYW50SWQgICAgICAgID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgbG9nZ2VkSW5Vc2VyLnVzZXJBdHRyaWJ1dGVzICA9IHt9O1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBPdmVycmlkaW5nIHRoZSBhcHAgdmFyaWFibGUgc3VwcG9ydGVkIGxvY2FsZSB3aXRoIHRoZSB3bVByb3BlcnRpZXMgaTE4biBEYXRhVmFsdWVzXG4gICAgICpcbiAgICAgKiBUT0RPW1ZpYmh1XTpcbiAgICAgKiBDYW4gd3JpdGUgYSBzaW1wbGUgbWlncmF0aW9uIHRvIHN5bmMgdGhlIHN1cHBvcnRlZExvY2FsZSB2YXJpYWJsZSB3aXRoICdfV01fQVBQX1BST1BFUlRJRVMuc3VwcG9ydGVkTGFuZ3VhZ2VzJ1xuICAgICAqIEhlbmNlLCB0aGlzIG1heSBub3QgYmUgcmVxdWlyZWRcbiAgICAgKlxuICAgICAqL1xuICAgIHVwZGF0ZVN1cHBvcnRlZExvY2FsZVZhcmlhYmxlKCkge1xuICAgICAgICBjb25zdCBzdXBwb3J0ZWRMb2NhbGVWYXIgPSBfLmdldCh0aGlzLiRhcHAsICdWYXJpYWJsZXMuc3VwcG9ydGVkTG9jYWxlJyk7XG4gICAgfVxuXG4gICAgaGFuZGxlU1NPTG9naW4oY29uZmlnKSB7XG4gICAgICAgIGNvbnN0IFNTT19VUkwgPSAnc2VydmljZXMvc2VjdXJpdHkvc3NvbG9naW4nLFxuICAgICAgICAgICAgUFJFVklFV19XSU5ET1dfTkFNRSA9ICdXTV9QUkVWSUVXX1dJTkRPVyc7XG4gICAgICAgIGxldCBwYWdlLFxuICAgICAgICAgICAgcGFnZVBhcmFtcztcblxuICAgICAgICAvLyBkbyBub3QgcHJvdmlkZSByZWRpcmVjdFRvIHBhZ2UgaWYgZmV0Y2hpbmcgSE9NRSBwYWdlIHJlc3VsdGVkIDQwMVxuICAgICAgICAvLyBvbiBhcHAgbG9hZCwgYnkgZGVmYXVsdCBIb21lIHBhZ2UgaXMgbG9hZGVkXG4gICAgICAgIHBhZ2UgPSB0aGlzLiRzZWN1cml0eS5nZXRSZWRpcmVjdFBhZ2UoY29uZmlnKTtcblxuICAgICAgICBpZiAoQ09OU1RBTlRTLmhhc0NvcmRvdmEpIHtcbiAgICAgICAgICAgIC8vIGdldCBwcmV2aW91c2x5IGxvZ2dlZEluVXNlciBuYW1lIChpZiBhbnkpXG4gICAgICAgICAgICBjb25zdCBsYXN0TG9nZ2VkSW5Vc2VybmFtZSA9IF8uZ2V0KHRoaXMuJHNlY3VyaXR5LmdldCgpLCAndXNlckluZm8udXNlck5hbWUnKTtcbiAgICAgICAgICAgIHRoaXMuJHNlY3VyaXR5LmF1dGhJbkJyb3dzZXIoKVxuICAgICAgICAgICAgICAgIC50aGVuKCgpID0+IHRoaXMucmVsb2FkQXBwRGF0YSgpKVxuICAgICAgICAgICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJlc2VudExvZ2dlZEluVXNlcm5hbWUgPSBfLmdldCh0aGlzLiRzZWN1cml0eS5nZXQoKSwgJ3VzZXJJbmZvLnVzZXJOYW1lJyk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwcmVzZW50TG9nZ2VkSW5Vc2VybmFtZSAmJiBwcmVzZW50TG9nZ2VkSW5Vc2VybmFtZSA9PT0gbGFzdExvZ2dlZEluVXNlcm5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvdXRlclNlcnZpY2UubmF2aWdhdGUoW3BhZ2VdKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvdXRlclNlcnZpY2UubmF2aWdhdGUoW2AvYF0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwYWdlID0gcGFnZSA/ICc/cmVkaXJlY3RQYWdlPScgKyBlbmNvZGVVUklDb21wb25lbnQocGFnZSkgOiAnJztcbiAgICAgICAgICAgIHBhZ2VQYXJhbXMgPSB0aGlzLiRzZWN1cml0eS5nZXRRdWVyeVN0cmluZyh0aGlzLiRzZWN1cml0eS5nZXRSZWRpcmVjdGVkUm91dGVRdWVyeVBhcmFtcygpKTtcbiAgICAgICAgICAgIHBhZ2VQYXJhbXMgPSBwYWdlUGFyYW1zID8gJz8nICsgcGFnZVBhcmFtcyA6ICcnO1xuICAgICAgICAgICAgLy8gc2hvd2luZyBhIHJlZGlyZWN0aW5nIG1lc3NhZ2VcbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkudGV4dENvbnRlbnQgPSBfLmdldCh0aGlzLmdldEFwcExvY2FsZSgpLCBbJ01FU1NBR0VfTE9HSU5fUkVESVJFQ1RJT04nXSkgfHwgJ1JlZGlyZWN0aW5nIHRvIHNzbyBsb2dpbi4uLic7XG4gICAgICAgICAgICAvLyBhcHBlbmRpbmcgcmVkaXJlY3QgdG8gcGFnZSBhbmQgcGFnZSBwYXJhbXNcbiAgICAgICAgICAgIGNvbnN0IHNzb1VybCA9IHRoaXMuZ2V0RGVwbG95ZWRVUkwoKSArIFNTT19VUkwgKyBwYWdlICsgcGFnZVBhcmFtcztcbiAgICAgICAgICAgIC8qXG4gICAgICAgICAgICAgKiByZW1vdmUgaUZyYW1lIHdoZW4gcmVkaXJlY3RlZCB0byBJZFAgbG9naW4gcGFnZS5cbiAgICAgICAgICAgICAqIHRoaXMgaXMgYmVpbmcgZG9uZSBhcyBJRFBzIGRvIG5vdCBhbGxvdyB0byBnZXQgdGhlbXNlbHZlcyBsb2FkZWQgaW50byBpRnJhbWVzLlxuICAgICAgICAgICAgICogcmVtb3ZlLXRvb2xiYXIgaGFzIGJlZW4gYXNzaWduZWQgd2l0aCBhIHdpbmRvdyBuYW1lIFdNX1BSRVZJRVdfV0lORE9XLCBjaGVjayBpZiB0aGUgaWZyYW1lIGlzIG91ciB0b29sYmFyIHJlbGF0ZWQgYW5kXG4gICAgICAgICAgICAgKiBzYWZlbHkgY2hhbmdlIHRoZSBsb2NhdGlvbiBvZiB0aGUgcGFyZW50IHRvb2xiYXIgd2l0aCBjdXJyZW50IHVybC5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgaWYgKHdpbmRvdy5zZWxmICE9PSB3aW5kb3cudG9wKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHdpbmRvdy5wYXJlbnQgJiYgd2luZG93LmxvY2F0aW9uLm9yaWdpbiA9PT0gd2luZG93LnBhcmVudC5vcmlnaW4pe1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYod2luZG93LnBhcmVudC5uYW1lID09PSBQUkVWSUVXX1dJTkRPV19OQU1FKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LnBhcmVudC5sb2NhdGlvbi5ocmVmID0gd2luZG93LnNlbGYubG9jYXRpb24uaHJlZjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cucGFyZW50Lm5hbWUgPSBcIlwiXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IHNzb1VybFxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSBzc29Vcmw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IHNzb1VybDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEhhbmRsZXMgdGhlIGFwcCB3aGVuIGEgWEhSIHJlcXVlc3QgcmV0dXJucyA0MDEgcmVzcG9uc2VcbiAgICAgKiBJZiBubyB1c2VyIHdhcyBsb2dnZWQgaW4gYmVmb3JlIDQwMSBvY2N1cnJlZCwgRmlyc3QgdGltZSBMb2dpbiBpcyBzaW11bGF0ZWRcbiAgICAgKiBFbHNlLCBhIHNlc3Npb24gdGltZW91dCBoYXMgb2NjdXJyZWQgYW5kIHRoZSBzYW1lIGlzIHNpbXVsYXRlZFxuICAgICAqIEBwYXJhbSBwYWdlICBpZiBwcm92aWRlZCwgcmVwcmVzZW50cyB0aGUgcGFnZSBuYW1lIGZvciB3aGljaCBYSFIgcmVxdWVzdCByZXR1cm5lZCA0MDEsIG9uIHJlLWxvZ2luXG4gICAgICogICAgICAgICAgICAgIGlmIG5vdCBwcm92aWRlZCwgYSBzZXJ2aWNlIHJlcXVlc3QgcmV0dXJuZWQgNDAxXG4gICAgICogQHBhcmFtIG9uU3VjY2VzcyBzdWNjZXNzIGhhbmRsZXJcbiAgICAgKiBAcGFyYW0gb25FcnJvciBlcnJvciBoYW5kbGVyXG4gICAgICovXG4gICAgaGFuZGxlNDAxKHBhZ2U/LCBvcHRpb25zPykge1xuICAgICAgICBsZXQgc2Vzc2lvblRpbWVvdXRDb25maWcsXG4gICAgICAgICAgICBzZXNzaW9uVGltZW91dE1ldGhvZCxcbiAgICAgICAgICAgIGxvZ2luQ29uZmlnLFxuICAgICAgICAgICAgbG9naW5NZXRob2Q7XG4gICAgICAgIGNvbnN0IExPR0lOX01FVEhPRCA9IHtcbiAgICAgICAgICAgICAgICAnRElBTE9HJyA6ICdESUFMT0cnLFxuICAgICAgICAgICAgICAgICdQQUdFJyAgIDogJ1BBR0UnLFxuICAgICAgICAgICAgICAgICdTU08nICAgIDogJ1NTTydcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgY29uc3QgY29uZmlnID0gdGhpcy4kc2VjdXJpdHkuZ2V0KCk7XG4gICAgICAgIGxldCBxdWVyeVBhcmFtc09iaiA9IHt9O1xuICAgICAgICBsb2dpbkNvbmZpZyA9IGNvbmZpZy5sb2dpbkNvbmZpZztcbiAgICAgICAgdGhpcy5sYXN0TG9nZ2VkVXNlcklkID0gY29uZmlnLnVzZXJJbmZvICYmIGNvbmZpZy51c2VySW5mby51c2VySWQ7XG4gICAgICAgIC8vIGlmIHVzZXIgZm91bmQsIDQwMSB3YXMgdGhyb3duIGFmdGVyIHNlc3Npb24gdGltZVxuICAgICAgICBpZiAoY29uZmlnLnVzZXJJbmZvICYmIGNvbmZpZy51c2VySW5mby51c2VyTmFtZSkge1xuICAgICAgICAgICAgY29uZmlnLmF1dGhlbnRpY2F0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIHNlc3Npb25UaW1lb3V0Q29uZmlnID0gbG9naW5Db25maWcuc2Vzc2lvblRpbWVvdXQgfHwgeyd0eXBlJzogTE9HSU5fTUVUSE9ELkRJQUxPR307XG4gICAgICAgICAgICBzZXNzaW9uVGltZW91dE1ldGhvZCA9IHNlc3Npb25UaW1lb3V0Q29uZmlnLnR5cGUudG9VcHBlckNhc2UoKTtcbiAgICAgICAgICAgIHN3aXRjaCAoc2Vzc2lvblRpbWVvdXRNZXRob2QpIHtcbiAgICAgICAgICAgICAgICBjYXNlIExPR0lOX01FVEhPRC5ESUFMT0c6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd0xvZ2luRGlhbG9nKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgTE9HSU5fTUVUSE9ELlBBR0U6XG4gICAgICAgICAgICAgICAgICAgIGlmICghcGFnZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFnZSA9IHRoaXMuJHNlY3VyaXR5LmdldEN1cnJlbnRSb3V0ZVBhZ2UoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBxdWVyeVBhcmFtc09ialsncmVkaXJlY3RUbyddID0gcGFnZTtcbiAgICAgICAgICAgICAgICAgICAgLy8gQWRkaW5nIHF1ZXJ5IHBhcmFtcyhwYWdlIHBhcmFtcyBvZiBwYWdlIGJlaW5nIHJlZGlyZWN0ZWQgdG8pIHRvIHRoZSBVUkwuXG4gICAgICAgICAgICAgICAgICAgIHF1ZXJ5UGFyYW1zT2JqID0gXy5tZXJnZShxdWVyeVBhcmFtc09iaiwgdGhpcy4kc2VjdXJpdHkuZ2V0UmVkaXJlY3RlZFJvdXRlUXVlcnlQYXJhbXMoKSk7XG4gICAgICAgICAgICAgICAgICAgIC8vIHRoZSByZWRpcmVjdCBwYWdlIHNob3VsZCBub3QgYmUgc2FtZSBhcyBzZXNzaW9uIHRpbWVvdXQgbG9naW4gcGFnZVxuICAgICAgICAgICAgICAgICAgICBpZiAoIHBhZ2UgIT09IHNlc3Npb25UaW1lb3V0Q29uZmlnLnBhZ2VOYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiRyb3V0ZXIubmF2aWdhdGUoW3Nlc3Npb25UaW1lb3V0Q29uZmlnLnBhZ2VOYW1lXSwge3F1ZXJ5UGFyYW1zOiBxdWVyeVBhcmFtc09ian0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgTE9HSU5fTUVUSE9ELlNTTzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVTU09Mb2dpbihjb25maWcpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc2V0TGFuZGluZ1BhZ2UoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIGlmIG5vIHVzZXIgZm91bmQsIDQwMSB3YXMgdGhyb3duIGZvciBmaXJzdCB0aW1lIGxvZ2luXG4gICAgICAgICAgICBsb2dpbk1ldGhvZCA9IGxvZ2luQ29uZmlnLnR5cGUudG9VcHBlckNhc2UoKTtcbiAgICAgICAgICAgIHN3aXRjaCAobG9naW5NZXRob2QpIHtcbiAgICAgICAgICAgICAgICBjYXNlIExPR0lOX01FVEhPRC5ESUFMT0c6XG4gICAgICAgICAgICAgICAgICAgIC8vIFRocm91Z2ggbG9naW5EaWFsb2csIHVzZXIgd2lsbCByZW1haW4gaW4gdGhlIGN1cnJlbnQgc3RhdGUgYW5kIGZhaWxlZCBjYWxscyB3aWxsIGJlIGV4ZWN1dGVkIHBvc3QgbG9naW4gdGhyb3VnaCBMb2dpblZhcmlhYmxlU2VydmljZS5cbiAgICAgICAgICAgICAgICAgICAgLy8gTk9URTogdXNlciB3aWxsIGJlIHJlZGlyZWN0ZWQgdG8gcmVzcGVjdGl2ZSBsYW5kaW5nIHBhZ2Ugb25seSBpZiBkaWFsb2cgaXMgb3BlbmVkIG1hbnVhbGx5KG5vdCB0aHJvdWdoIGEgZmFpbGVkIDQwMSBjYWxsKS5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ub1JlZGlyZWN0KHRydWUpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dMb2dpbkRpYWxvZygpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIExPR0lOX01FVEhPRC5QQUdFOlxuICAgICAgICAgICAgICAgICAgICAvLyBkbyBub3QgcHJvdmlkZSByZWRpcmVjdFRvIHBhZ2UgaWYgZmV0Y2hpbmcgSE9NRSBwYWdlIHJlc3VsdGVkIDQwMVxuICAgICAgICAgICAgICAgICAgICAvLyBvbiBhcHAgbG9hZCwgYnkgZGVmYXVsdCBIb21lIHBhZ2UgaXMgbG9hZGVkXG4gICAgICAgICAgICAgICAgICAgIHBhZ2UgPSB0aGlzLiRzZWN1cml0eS5nZXRSZWRpcmVjdFBhZ2UoY29uZmlnLCBwYWdlKTtcbiAgICAgICAgICAgICAgICAgICAgcXVlcnlQYXJhbXNPYmpbJ3JlZGlyZWN0VG8nXSA9IHBhZ2U7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGV4dHJhUXVlcnlQYXJhbXMgPSAob3B0aW9ucyAmJiBvcHRpb25zLnF1ZXJ5UGFyYW1zKSB8fCB0aGlzLiRzZWN1cml0eS5nZXRSZWRpcmVjdGVkUm91dGVRdWVyeVBhcmFtcygpO1xuICAgICAgICAgICAgICAgICAgICBxdWVyeVBhcmFtc09iaiA9IF8ubWVyZ2UocXVlcnlQYXJhbXNPYmosIGV4dHJhUXVlcnlQYXJhbXMpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLiRyb3V0ZXIubmF2aWdhdGUoW2xvZ2luQ29uZmlnLnBhZ2VOYW1lXSwge3F1ZXJ5UGFyYW1zOiBxdWVyeVBhcmFtc09ian0pO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLiRhcHAubGFuZGluZ1BhZ2VOYW1lID0gbG9naW5Db25maWcucGFnZU5hbWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgTE9HSU5fTUVUSE9ELlNTTzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVTU09Mb2dpbihjb25maWcpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFVwZGF0ZXMgZGF0YSBkZXBlbmRlbnQgb24gbG9nZ2VkIGluIHVzZXJcbiAgICAgKiBSZWxvYWRzIHNlY3VyaXR5IGNvbmZpZywgbWV0YWRhdGFcbiAgICAgKiBVcGRhdGVzIHRoZSBsb2dnZWRJblVzZXJWYXJpYWJsZVxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fVxuICAgICAqL1xuICAgIHJlbG9hZEFwcERhdGEoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxvYWRTZWN1cml0eUNvbmZpZyh0cnVlKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxvYWRNZXRhZGF0YSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnVwZGF0ZUxvZ2dlZEluVXNlclZhcmlhYmxlKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbm9SZWRpcmVjdCh2YWx1ZT86IGJvb2xlYW4pIHtcbiAgICAgICAgaWYgKF8uaXNVbmRlZmluZWQodmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbm9SZWRpcmVjdDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX25vUmVkaXJlY3QgPSB2YWx1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX25vUmVkaXJlY3Q7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogaW52b2tlcyBzZXNzaW9uIGZhaWx1cmUgcmVxdWVzdHNcbiAgICAgKi9cbiAgICBleGVjdXRlU2Vzc2lvbkZhaWx1cmVSZXF1ZXN0cygpIHtcbiAgICAgICAgdGhpcy4kaHR0cC5leGVjdXRlU2Vzc2lvbkZhaWx1cmVSZXF1ZXN0cygpO1xuICAgIH1cblxuICAgIHB1c2hUb1Nlc3Npb25GYWlsdXJlUmVxdWVzdHMoY2FsbGJhY2spIHtcbiAgICAgICAgdGhpcy4kaHR0cC5wdXNoVG9TZXNzaW9uRmFpbHVyZVF1ZXVlKGNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0RGVwbG95ZWRVUkwoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiRhcHAuZGVwbG95ZWRVcmwgPyB0aGlzLiRhcHAuZGVwbG95ZWRVcmwgOiAkcm9vdFNjb3BlLnByb2plY3QuZGVwbG95ZWRVcmw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRmV0Y2hlcyB0aGUgY3VzdG9tdXJsc2NoZW1lIGZvciBhIG1vYmlsZSBhcHBcbiAgICAgKiB3aGljaCBpcyB1c2VkIGZvciByZWRpcmVjdGlvbiBiYWNrIHRvIHRoZSBhcHAgZnJvbSBicm93c2VyIGluIGltcGxpY2l0IG9BdXRoIGZsb3dcbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRDdXN0b21VcmxTY2hlbWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiRhcHAuY3VzdG9tVXJsU2NoZW1lO1xuICAgIH1cblxuICAgIG5vdGlmeShldmVudE5hbWUsIGRhdGEpIHtcbiAgICAgICAgdGhpcy4kYXBwLm5vdGlmeShldmVudE5hbWUsIGRhdGEpO1xuICAgIH1cblxuICAgIHN1YnNjcmliZShldmVudE5hbWUsIGRhdGEpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJGFwcC5zdWJzY3JpYmUoZXZlbnROYW1lLCBkYXRhKTtcbiAgICB9XG5cbiAgICBnZXRBY3RpdmVQYWdlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4kYXBwLmFjdGl2ZVBhZ2U7XG4gICAgfVxuXG4gICAgZ2V0QXBwTG9jYWxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy4kYXBwLmFwcExvY2FsZTtcbiAgICB9XG5cbiAgICBnZXRTZWxlY3RlZExvY2FsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJGkxOG4uZ2V0U2VsZWN0ZWRMb2NhbGUoKTtcbiAgICB9XG5cbiAgICBub3RpZnlBcHAodGVtcGxhdGUsIHR5cGUsIHRpdGxlPykge1xuICAgICAgICB0aGlzLiRhcHAubm90aWZ5QXBwKHRlbXBsYXRlLCB0eXBlLCB0aXRsZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVHJpZ2dlcnMgdGhlIG9uQmVmb3JlU2VydmljZSBtZXRob2QgZGVmaW5lZCBpbiBhcHAuanMgb2YgdGhlIGFwcFxuICAgICAqIEBwYXJhbSByZXF1ZXN0UGFyYW1zXG4gICAgICovXG4gICAgYXBwT25CZWZvcmVTZXJ2aWNlQ2FsbChyZXF1ZXN0UGFyYW1zOiBhbnkpIHtcbiAgICAgICAgcmV0dXJuIHRyaWdnZXJGbih0aGlzLiRhcHAub25CZWZvcmVTZXJ2aWNlQ2FsbCwgcmVxdWVzdFBhcmFtcyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVHJpZ2dlcnMgdGhlIG9uU2VydmljZVN1Y2Nlc3MgbWV0aG9kIGRlZmluZWQgaW4gYXBwLmpzIG9mIHRoZSBhcHBcbiAgICAgKiBAcGFyYW0gZGF0YVxuICAgICAqIEBwYXJhbSB4aHJPYmpcbiAgICAgKi9cbiAgICBhcHBPblNlcnZpY2VTdWNjZXNzKGRhdGE6IGFueSwgeGhyT2JqOiBhbnkpIHtcbiAgICAgICAgcmV0dXJuIHRyaWdnZXJGbih0aGlzLiRhcHAub25TZXJ2aWNlU3VjY2VzcywgZGF0YSwgeGhyT2JqKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VycyB0aGUgb25TZXJ2aWNlRXJyb3IgbWV0aG9kIGRlZmluZWQgaW4gYXBwLmpzIG9mIHRoZSBhcHBcbiAgICAgKiBAcGFyYW0gZGF0YVxuICAgICAqIEBwYXJhbSB4aHJPYlxuICAgICAqL1xuICAgIGFwcE9uU2VydmljZUVycm9yKGRhdGE6IGFueSwgeGhyT2I/OiBhbnkpIHtcbiAgICAgICAgcmV0dXJuIHRyaWdnZXJGbih0aGlzLiRhcHAub25TZXJ2aWNlRXJyb3IsIGRhdGEsIHhock9iKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VycyB0aGUgYXBwVmFyaWFibGVzUmVhZHkgbWV0aG9kIGRlZmluZWQgaW4gYXBwLmpzIG9mIHRoZSBhcHBcbiAgICAgKi9cbiAgICBhcHBWYXJpYWJsZXNSZWFkeSgpIHtcbiAgICAgICAgdHJpZ2dlckZuKHRoaXMuJGFwcC5vbkFwcFZhcmlhYmxlc1JlYWR5KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VycyB0aGUgb25CZWZvcmVBcHBSZWFkeSBtZXRob2QgZGVmaW5lZCBpbiBhcHAuanMgb2YgdGhlIGFwcFxuICAgICAqL1xuICAgIGJlZm9yZUFwcFJlYWR5KCkge1xuICAgICAgICB0cmlnZ2VyRm4odGhpcy4kYXBwLm9uQmVmb3JlQXBwUmVhZHkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIHBpcGUgYmFzZWQgb24gdGhlIGlucHV0XG4gICAgICovXG4gICAgZ2V0UGlwZShwaXBlKSB7XG4gICAgICAgIGlmIChwaXBlID09PSAnZGF0ZScpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLiRkYXRlUGlwZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc2V0TGFuZGluZ1BhZ2UoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiRzZWN1cml0eS5nZXRQYWdlQnlMb2dnZWRJblVzZXIoKS50aGVuKHAgPT4gdGhpcy4kYXBwLmxhbmRpbmdQYWdlTmFtZSA9IDxzdHJpbmc+IHApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIHJldHVybiB0cnVlIGlmIHByZWZhYiB0eXBlIGFwcFxuICAgICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgICAqL1xuICAgIGlzUHJlZmFiVHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJGFwcC5pc1ByZWZhYlR5cGU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogcmV0dXJuIHRydWUgaWYgdGVtcGxhdGUgYnVuZGxlIHR5cGUgYXBwXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAgICovXG4gICAgaXNUZW1wbGF0ZUJ1bmRsZVR5cGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiRhcHAuaXNUZW1wbGF0ZUJ1bmRsZVR5cGU7XG4gICAgfVxuXG4gICAgcG9zdE1lc3NhZ2UoY29udGVudCkge1xuICAgICAgICB3aW5kb3cudG9wLnBvc3RNZXNzYWdlKGNvbnRlbnQsICcqJyk7XG4gICAgfVxuXG4gICAgc2hvd1RlbXBsYXRlKGlkeCkge1xuICAgICAgICBjb25zdCB0ZW1wbGF0ZSA9IHRoaXMudGVtcGxhdGVzW2lkeF07XG4gICAgICAgIC8vIHNjb3BlLmFjdGl2ZVRlbXBsYXRlSW5kZXggPSBpZHg7XG4gICAgICAgIHRoaXMuJHJvdXRlci5uYXZpZ2F0ZShbdGVtcGxhdGUuaWRdKTtcbiAgICB9XG4gICAgcG9zdFRlbXBsYXRlQnVuZGxlSW5mbygpIHtcblxuICAgICAgICB3aW5kb3cub25tZXNzYWdlID0gKGV2dCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbXNnRGF0YSA9IGV2dC5kYXRhO1xuXG4gICAgICAgICAgICBpZiAoIV8uaXNPYmplY3QobXNnRGF0YSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGtleSA9IG1zZ0RhdGEua2V5O1xuXG4gICAgICAgICAgICBzd2l0Y2ggKGtleSkge1xuICAgICAgICAgICAgICAgIGNhc2UgUE9TVF9NRVNTQUdFUy5ISURFX1RFTVBMQVRFU19TSE9XX0NBU0U6XG4gICAgICAgICAgICAgICAgICAgIC8vIHNjb3BlLmhpZGVTaG93Q2FzZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgUE9TVF9NRVNTQUdFUy5TRUxFQ1RfVEVNUExBVEU6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd1RlbXBsYXRlKG1zZ0RhdGEudGVtcGxhdGVJbmRleCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5wb3N0TWVzc2FnZSh7a2V5OiBQT1NUX01FU1NBR0VTLk9OX0xPQUR9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGZldGNoQ29udGVudCgnanNvbicsICcuL2NvbmZpZy5qc29uJywgdHJ1ZSwgcmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgdGhpcy50ZW1wbGF0ZXMgPSBbXTtcbiAgICAgICAgICAgIGlmICghcmVzcG9uc2UuZXJyb3IpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRlbXBsYXRlcyA9IHJlc3BvbnNlLnRlbXBsYXRlcztcbiAgICAgICAgICAgICAgICB0aGlzLnBvc3RNZXNzYWdlKHsna2V5JzogUE9TVF9NRVNTQUdFUy5URU1QTEFURUJVTkRMRV9DT05GSUcsICdjb25maWcnOiByZXNwb25zZX0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwb3N0QXBwVHlwZUluZm8oKSB7XG4gICAgICAgIGlmICh0aGlzLmlzVGVtcGxhdGVCdW5kbGVUeXBlKCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBvc3RUZW1wbGF0ZUJ1bmRsZUluZm8oKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==
@@ -89,15 +89,15 @@ export class AppRef {
89
89
  return getHttpDependency.call(this);
90
90
  }
91
91
  let providerInstance = injectorMap[injToken] && this.inj.get(injectorMap[injToken]);
92
- if (!providerInstance && this.inj['_providers']) {
93
- _.forEach(this.inj['_providers'], val => {
94
- if (_.isObject(val)) {
95
- if (val.__proto__.constructor.SERVICE_NAME === injToken) {
96
- providerInstance = val;
97
- return false;
98
- }
92
+ if (!providerInstance && this.inj['records']?.values) {
93
+ const values = this.inj['records'].values();
94
+ let next = values?.next();
95
+ while (next && !next.done) {
96
+ if (next?.value?.value?.constructor?.SERVICE_NAME === injToken) {
97
+ return next.value.value;
99
98
  }
100
- });
99
+ next = values.next();
100
+ }
101
101
  }
102
102
  return providerInstance;
103
103
  }
@@ -156,4 +156,4 @@ export class AppRef {
156
156
  (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(AppRef, [{
157
157
  type: Injectable
158
158
  }], function () { return [{ type: i0.Injector }, { type: i1.AbstractI18nService }, { type: i1.StatePersistence }, { type: i1.AbstractHttpService }, { type: i2.SecurityService }, { type: i3.RouteReuseStrategy }]; }, null); })();
159
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ydW50aW1lLWJhc2Uvc3JjL3NlcnZpY2VzL2FwcC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXJELE9BQU8sRUFDSCxxQkFBcUIsRUFDckIsbUJBQW1CLEVBQ25CLG1CQUFtQixFQUNuQixzQkFBc0IsRUFDdEIsc0JBQXNCLEVBQ3RCLGFBQWEsRUFDYixnQkFBZ0IsRUFDaEIsa0JBQWtCLEVBQ2xCLHNCQUFzQixFQUN0QixTQUFTLEVBQ1QsUUFBUSxFQUNSLGVBQWUsRUFDZixZQUFZLEVBQ1osMkJBQTJCLEVBQzNCLGdCQUFnQixFQUNoQixRQUFRLEVBQ1IsZ0JBQWdCLEVBQ25CLE1BQU0sVUFBVSxDQUFDO0FBQ2xCLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFL0MsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDOUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7OztBQUk3QyxNQUFNLFdBQVcsR0FBRztJQUNoQixhQUFhLEVBQUUscUJBQXFCO0lBQ3BDLFdBQVcsRUFBRSxtQkFBbUI7SUFDaEMsV0FBVyxFQUFFLFdBQVc7SUFDeEIsZ0JBQWdCLEVBQUUsZ0JBQWdCO0lBQ2xDLGNBQWMsRUFBRSxzQkFBc0I7SUFDdEMsdUJBQXVCLEVBQUUsZ0JBQWdCO0lBQ3pDLFFBQVEsRUFBRSxRQUFRO0lBQ2xCLGNBQWMsRUFBRSxzQkFBc0I7SUFDdEMsS0FBSyxFQUFFLFlBQVk7SUFDbkIsU0FBUyxFQUFFLGVBQWU7SUFDMUIsVUFBVSxFQUFFLGdCQUFnQjtJQUM1QixZQUFZLEVB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QyxXQUFXLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFDLEVBQUU7WUFDNUIsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN6QyxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7dUVBMUlRLE1BQU07dUVBQU4sTUFBTSxXQUFOLE1BQU07O3VGQUFOLE1BQU07Y0FEbEIsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIEluamVjdG9yIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSb3V0ZVJldXNlU3RyYXRlZ3kgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuXG5pbXBvcnQge1xuICAgIEFic3RyYWN0RGlhbG9nU2VydmljZSxcbiAgICBBYnN0cmFjdEh0dHBTZXJ2aWNlLFxuICAgIEFic3RyYWN0STE4blNlcnZpY2UsXG4gICAgQWJzdHJhY3RTcGlubmVyU2VydmljZSxcbiAgICBBYnN0cmFjdFRvYXN0ZXJTZXJ2aWNlLFxuICAgIEV2ZW50Tm90aWZpZXIsXG4gICAgRmllbGRUeXBlU2VydmljZSxcbiAgICBGaWVsZFdpZGdldFNlcnZpY2UsXG4gICAgZ2V0V21Qcm9qZWN0UHJvcGVydGllcyxcbiAgICBpc0RlZmluZWQsXG4gICAgaXNTdHJpbmcsXG4gICAgQ29uc3RhbnRTZXJ2aWNlLFxuICAgIFV0aWxzU2VydmljZSxcbiAgICBEeW5hbWljQ29tcG9uZW50UmVmUHJvdmlkZXIsXG4gICAgU3RhdGVQZXJzaXN0ZW5jZSxcbiAgICBWaWV3cG9ydCxcbiAgICByZWdpc3RlckZuQnlFeHByXG59IGZyb20gJ0B3bS9jb3JlJztcbmltcG9ydCB7IFNlY3VyaXR5U2VydmljZSB9IGZyb20gJ0B3bS9zZWN1cml0eSc7XG5cbmltcG9ydCB7IFdtRGVmYXVsdFJvdXRlUmV1c2VTdHJhdGVneSB9IGZyb20gJy4uL3V0aWwvd20tcm91dGUtcmV1c2Utc3RyYXRlZ3knO1xuaW1wb3J0IHsgUGlwZVNlcnZpY2UgfSBmcm9tIFwiLi9waXBlLnNlcnZpY2VcIjtcblxuZGVjbGFyZSBjb25zdCBfO1xuXG5jb25zdCBpbmplY3Rvck1hcCA9IHtcbiAgICBEaWFsb2dTZXJ2aWNlOiBBYnN0cmFjdERpYWxvZ1NlcnZpY2UsXG4gICAgaTE4blNlcnZpY2U6IEFic3RyYWN0STE4blNlcnZpY2UsXG4gICAgUGlwZVNlcnZpY2U6IFBpcGVTZXJ2aWNlLFxuICAgIHN0YXRlUGVyc2lzdGVuY2U6IFN0YXRlUGVyc2lzdGVuY2UsXG4gICAgU3Bpbm5lclNlcnZpY2U6IEFic3RyYWN0U3Bpbm5lclNlcnZpY2UsXG4gICAgU3RhdGVQZXJzaXN0ZW5jZVNlcnZpY2U6IFN0YXRlUGVyc2lzdGVuY2UsXG4gICAgVmlld3BvcnQ6IFZpZXdwb3J0LFxuICAgIFRvYXN0ZXJTZXJ2aWNlOiBBYnN0cmFjdFRvYXN0ZXJTZXJ2aWNlLFxuICAgIFV0aWxzOiBVdGlsc1NlcnZpY2UsXG4gICAgQ09OU1RBTlRTOiBDb25zdGFudFNlcnZpY2UsXG4gICAgRklFTERfVFlQRTogRmllbGRUeXBlU2VydmljZSxcbiAgICBGSUVMRF9XSURHRVQ6IEZpZWxkV2lkZ2V0U2VydmljZSxcbiAgICBEeW5hbWljQ29tcG9uZW50U2VydmljZTogRHluYW1pY0NvbXBvbmVudFJlZlByb3ZpZGVyXG59O1xuXG5jb25zdCBlbnVtIFBST0pFQ1RfVFlQRSB7XG4gICAgQVBQTElDQVRJT04gPSAnQVBQTElDQVRJT04nLFxuICAgIFBSRUZBQiA9ICdQUkVGQUInLFxuICAgIFRFTVBMQVRFX0JVTkRMRSA9ICdURU1QTEFURUJVTkRMRSdcbn1cblxuY29uc3Qgbm9vcCA9ICguLi5hcmdzKSA9PiB7fTtcblxuLy8gV3JhcHMgaHR0cFNlcnZpY2UgdG8gYmVoYXZlIGFzIGFuZ3VsYXIgMS54ICRodHRwIHNlcnZpY2UuXG5jb25zdCBnZXRIdHRwRGVwZW5kZW5jeSA9IGZ1bmN0aW9uKCkge1xuICAgIGNvbnN0IGh0dHBTZXJ2aWNlID0gdGhpcy5odHRwU2VydmljZTtcbiAgICBjb25zdCBmbiA9IGZ1bmN0aW9uIChrZXksIG9wdGlvbnM/KSB7XG4gICAgICAgIGNvbnN0IGFyZ3MgPSBBcnJheS5mcm9tKGFyZ3VtZW50cykuc2xpY2UoMSk7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoaHR0cFNlcnZpY2Vba2V5XS5hcHBseShodHRwU2VydmljZSwgYXJncykpO1xuICAgIH07XG4gICAgY29uc3QgJGh0dHAgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBmbi5hcHBseSh1bmRlZmluZWQsIFsnc2VuZCcsIC4uLkFycmF5LmZyb20oYXJndW1lbnRzKV0pO1xuICAgIH07XG4gICAgWydnZXQnLCAncG9zdCcsICdoZWFkJywgJ3B1dCcsICdkZWxldGUnLCAnanNvbnAnLCAncGF0Y2gnXS5mb3JFYWNoKGtleSA9PiAkaHR0cFtrZXldID0gZm4uYmluZCh1bmRlZmluZWQsIGtleSkpO1xuICAgIHJldHVybiAkaHR0cDtcbn07XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBBcHBSZWYge1xuICAgIFZhcmlhYmxlczogYW55ID0ge307XG4gICAgQWN0aW9uczogYW55ID0ge307XG4gICAgb25BcHBWYXJpYWJsZXNSZWFkeSA9IG5vb3A7XG4gICAgb25CZWZvcmVBcHBSZWFkeSA9IG5vb3A7XG4gICAgb25TZXNzaW9uVGltZW91dCA9IG5vb3A7XG4gICAgb25QYWdlUmVhZHkgPSBub29wO1xuICAgIG9uQmVmb3JlUGFnZUxlYXZlID0gbm9vcDtcbiAgICBvbkJlZm9yZVNlcnZpY2VDYWxsID0gIG5vb3A7XG4gICAgb25TZXJ2aWNlU3VjY2VzcyA9ICBub29wO1xuICAgIG9uU2VydmljZUVycm9yID0gIG5vb3A7XG4gICAgZHluYW1pY0NvbXBvbmVudENvbnRhaW5lclJlZiA9IHt9O1xuXG4gICAgcHJvamVjdE5hbWU6IHN0cmluZztcbiAgICBpc1ByZWZhYlR5cGU6IGJvb2xlYW47XG4gICAgaXNBcHBsaWNhdGlvblR5cGU6IGJvb2xlYW47XG4gICAgaXNUYWJsZXRBcHBsaWNhdGlvblR5cGU6IGJvb2xlYW47XG4gICAgaXNUZW1wbGF0ZUJ1bmRsZVR5cGU6IGJvb2xlYW47XG5cbiAgICB0YXJnZXRQbGF0Zm9ybTogc3RyaW5nO1xuXG4gICAgYXBwTG9jYWxlOiBhbnk7XG5cbiAgICBjaGFuZ2VMb2NhbGUgPSB0aGlzLmkxOG5TZXJ2aWNlLnNldFNlbGVjdGVkTG9jYWxlLmJpbmQodGhpcy5pMThuU2VydmljZSk7XG4gICAgZ2V0U2VsZWN0ZWRMb2NhbGUgPSB0aGlzLmkxOG5TZXJ2aWNlLmdldFNlbGVjdGVkTG9jYWxlLmJpbmQodGhpcy5pMThuU2VydmljZSk7XG4gICAgc2V0VGltZXpvbmUgPSB0aGlzLmkxOG5TZXJ2aWNlLnNldFRpbWV6b25lLmJpbmQodGhpcy5pMThuU2VydmljZSk7XG4gICAgc2V0d2lkZ2V0TG9jYWxlID0gdGhpcy5pMThuU2VydmljZS5zZXR3aWRnZXRMb2NhbGUuYmluZCh0aGlzLmkxOG5TZXJ2aWNlKTtcblxuICAgIHByaXZhdGUgX2V2ZW50Tm90aWZpZXIgPSBuZXcgRXZlbnROb3RpZmllcigpO1xuXG4gICAgbGFuZGluZ1BhZ2VOYW1lID0gZ2V0V21Qcm9qZWN0UHJvcGVydGllcygpLmhvbWVQYWdlO1xuXG4gICAgcmVsb2FkKCkge1xuICAgICAgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgaW5qOiBJbmplY3RvcixcbiAgICAgICAgcHJpdmF0ZSBpMThuU2VydmljZTogQWJzdHJhY3RJMThuU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBzdGF0ZVBlcnNpc3RlbmNlOiBTdGF0ZVBlcnNpc3RlbmNlLFxuICAgICAgICBwcml2YXRlIGh0dHBTZXJ2aWNlOiBBYnN0cmFjdEh0dHBTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHNlY3VyaXR5U2VydmljZTogU2VjdXJpdHlTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHJvdXRlUmV1c2VTdHJhdGVneTogUm91dGVSZXVzZVN0cmF0ZWd5XG4gICAgKSB7XG5cbiAgICAgICAgY29uc3Qgd21Qcm9qZWN0UHJvcGVydGllcyA9IGdldFdtUHJvamVjdFByb3BlcnRpZXMoKTtcblxuICAgICAgICB0aGlzLnByb2plY3ROYW1lID0gd21Qcm9qZWN0UHJvcGVydGllcy5uYW1lO1xuICAgICAgICB0aGlzLmlzUHJlZmFiVHlwZSA9IHdtUHJvamVjdFByb3BlcnRpZXMudHlwZSA9PT0gUFJPSkVDVF9UWVBFLlBSRUZBQjtcbiAgICAgICAgdGhpcy5pc0FwcGxpY2F0aW9uVHlwZSA9IHdtUHJvamVjdFByb3BlcnRpZXMudHlwZSA9PT0gUFJPSkVDVF9UWVBFLkFQUExJQ0FUSU9OO1xuICAgICAgICB0aGlzLmlzVGVtcGxhdGVCdW5kbGVUeXBlID0gd21Qcm9qZWN0UHJvcGVydGllcy50eXBlID09PSBQUk9KRUNUX1RZUEUuVEVNUExBVEVfQlVORExFO1xuICAgICAgICB0aGlzLnRhcmdldFBsYXRmb3JtID0gd21Qcm9qZWN0UHJvcGVydGllcy5wbGF0Zm9ybVR5cGU7XG5cbiAgICAgICAgdGhpcy5odHRwU2VydmljZS5yZWdpc3Rlck9uU2Vzc2lvblRpbWVvdXQodGhpcy5vbjQwMS5iaW5kKHRoaXMpKTtcblxuICAgICAgICB0aGlzLmFwcExvY2FsZSA9IHRoaXMuaTE4blNlcnZpY2UuZ2V0QXBwTG9jYWxlKCk7XG4gICAgICAgIHRoaXMuaHR0cFNlcnZpY2Uuc2V0TG9jYWxlKHRoaXMuYXBwTG9jYWxlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY2xlYXJQYWdlQ2FjaGUocGFnZU5hbWU/OiBzdHJpbmcpIHtcbiAgICAgICAgaWYodGhpcy5yb3V0ZVJldXNlU3RyYXRlZ3kgaW5zdGFuY2VvZiBXbURlZmF1bHRSb3V0ZVJldXNlU3RyYXRlZ3kpIHtcbiAgICAgICAgICAgICh0aGlzLnJvdXRlUmV1c2VTdHJhdGVneSBhcyBXbURlZmF1bHRSb3V0ZVJldXNlU3RyYXRlZ3kpLnJlc2V0KHBhZ2VOYW1lKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBub3RpZnkoZXZlbnROYW1lOiBzdHJpbmcsIC4uLmRhdGE6IEFycmF5PGFueT4pIHtcbiAgICAgICAgdGhpcy5fZXZlbnROb3RpZmllci5ub3RpZnkuYXBwbHkodGhpcy5fZXZlbnROb3RpZmllciwgYXJndW1lbnRzKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0RGVwZW5kZW5jeShpbmpUb2tlbikge1xuICAgICAgICBpZiAoaXNTdHJpbmcoaW5qVG9rZW4pKSB7XG4gICAgICAgICAgICBpZiAoaW5qVG9rZW4gPT09ICdIdHRwU2VydmljZScpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZ2V0SHR0cERlcGVuZGVuY3kuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBwcm92aWRlckluc3RhbmNlID0gaW5qZWN0b3JNYXBbaW5qVG9rZW5dICYmIHRoaXMuaW5qLmdldChpbmplY3Rvck1hcFtpbmpUb2tlbl0pO1xuICAgICAgICAgICAgaWYgKCFwcm92aWRlckluc3RhbmNlICYmIHRoaXMuaW5qWydfcHJvdmlkZXJzJ10pIHtcbiAgICAgICAgICAgICAgICBfLmZvckVhY2godGhpcy5pbmpbJ19wcm92aWRlcnMnXSwgdmFsID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKF8uaXNPYmplY3QodmFsKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbC5fX3Byb3RvX18uY29uc3RydWN0b3IuU0VSVklDRV9OQU1FID09PSBpbmpUb2tlbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3ZpZGVySW5zdGFuY2UgPSB2YWw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcHJvdmlkZXJJbnN0YW5jZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5pbmouZ2V0KGlualRva2VuKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiB0cmlnZ2VycyB0aGUgb25TZXNzaW9uVGltZW91dCBjYWxsYmFjayBpbiBhcHAuanNcbiAgICAgKi9cbiAgICBvbjQwMSgpIHtcbiAgICAgICAgY29uc3QgdXNlckluZm8gPSBfLmdldCh0aGlzLnNlY3VyaXR5U2VydmljZS5nZXQoKSwgJ3VzZXJJbmZvJyk7XG4gICAgICAgIC8vIGlmIGEgcHJldmlvdXMgdXNlciBleGlzdHMsIGEgc2Vzc2lvbiB0aW1lIG91dCB0cmlnZ2VyZWRcbiAgICAgICAgaWYgKCFfLmlzRW1wdHkodXNlckluZm8pKSB7XG4gICAgICAgICAgICB0aGlzLm9uU2Vzc2lvblRpbWVvdXQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBzdWJzY3JpYmUoZXZlbnROYW1lLCBjYWxsYmFjazogKGRhdGE6IGFueSkgPT4gdm9pZCk6ICgpID0+IHZvaWQge1xuICAgICAgICByZXR1cm4gdGhpcy5fZXZlbnROb3RpZmllci5zdWJzY3JpYmUoZXZlbnROYW1lLCBjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgcHVibGljIG5vdGlmeUFwcCh0ZW1wbGF0ZSwgdHlwZSwgdGl0bGUpIHtcbiAgICAgICAgY29uc3Qgbm90aWZpY2F0aW9uQWN0aW9uID0gXy5nZXQodGhpcywgJ0FjdGlvbnMuYXBwTm90aWZpY2F0aW9uJyk7XG4gICAgICAgIGNvbnN0IEVYQ0xVREVfTk9USUZJQ0FUSU9OX01FU1NBR0VTID0gWydQUk9DRVNTX1JFSkVDVEVEX0lOX1FVRVVFJ107XG4gICAgICAgIGNvbnN0IHNraXBEZWZhdWx0Tm90aWZpY2F0aW9uID0gRVhDTFVERV9OT1RJRklDQVRJT05fTUVTU0FHRVMuaW5kZXhPZih0ZW1wbGF0ZSkgIT09IC0xO1xuICAgICAgICBpZiAobm90aWZpY2F0aW9uQWN0aW9uKSB7XG4gICAgICAgICAgICAvLyBkbyBub3Qgbm90aWZ5IHRoZSBlcnJvciB0byB0aGUgYXBwLCBqdXN0IHRocm93IGl0IGluIGNvbnNvbGVcbiAgICAgICAgICAgIGlmIChza2lwRGVmYXVsdE5vdGlmaWNhdGlvbikge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignQXBwIEVycm9yJywgdGVtcGxhdGUpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHR5cGUgPSB0eXBlIHx8ICdzdWNjZXNzJztcbiAgICAgICAgICAgIHRlbXBsYXRlID0gbm90aWZpY2F0aW9uQWN0aW9uLmdldE1lc3NhZ2UoKSB8fCB0ZW1wbGF0ZTtcbiAgICAgICAgICAgIG5vdGlmaWNhdGlvbkFjdGlvbi5pbnZva2Uoe1xuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IHRlbXBsYXRlLFxuICAgICAgICAgICAgICAgIHRpdGxlOiBpc0RlZmluZWQodGl0bGUpID8gdGl0bGUgOiB0eXBlLnRvVXBwZXJDYXNlKCksXG4gICAgICAgICAgICAgICAgY2xhc3M6IHR5cGUsXG4gICAgICAgICAgICAgICAgLy8gSWYgdGhlIHR5cGUgaXMgZXJyb3IgZG8gbm90IGNsb3NlIHRoZSB0b2FzdHJcbiAgICAgICAgICAgICAgICBkdXJhdGlvbjogdHlwZS50b1VwcGVyQ2FzZSgpID09PSAnRVJST1InID8gMCA6IHVuZGVmaW5lZFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBkZWZhdWx0IEFjdGlvbiBcImFwcE5vdGlmaWNhdGlvblwiIGRvZXNuXFwndCBleGlzdCBpbiB0aGUgYXBwLiBBcHAgbm90aWZpZWQgZm9sbG93aW5nIGVycm9yOlxcbicsIHRlbXBsYXRlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGZ1bmN0aW9uIHRvIHJlZ2lzdGVyIGJpbmQgZXhwcmVzc2lvbnMgZnJvbSBhcHAgdmFyaWFibGVzXG4gICAgICogaXQgd2lsbCBiZSBjYWxsZWQgZnJvbSBhcHAuanMgaW4gZ2VuZXJhdGVkIGFuZ3VsYXIgYXBwXG4gICAgICogQHBhcmFtIGV4cHJlc3Npb25zLCBtYXAgb2YgYmluZCBleHByZXNzaW9uIHZzIGdlbmVyYXRlZCBmdW5jdGlvblxuICAgICAqL1xuICAgIHB1YmxpYyByZWdpc3RlckV4cHJlc3Npb25zKGV4cHJlc3Npb25zKSB7XG4gICAgICAgIF8uZWFjaChleHByZXNzaW9ucywgKGZuLCBleHByKT0+e1xuICAgICAgICAgICAgcmVnaXN0ZXJGbkJ5RXhwcihleHByLCBmblswXSwgZm5bMV0pO1xuICAgICAgICB9KTtcbiAgICB9XG59XG4iXX0=
159
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ydW50aW1lLWJhc2Uvc3JjL3NlcnZpY2VzL2FwcC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXJELE9BQU8sRUFDSCxxQkFBcUIsRUFDckIsbUJBQW1CLEVBQ25CLG1CQUFtQixFQUNuQixzQkFBc0IsRUFDdEIsc0JBQXNCLEVBQ3RCLGFBQWEsRUFDYixnQkFBZ0IsRUFDaEIsa0JBQWtCLEVBQ2xCLHNCQUFzQixFQUN0QixTQUFTLEVBQ1QsUUFBUSxFQUNSLGVBQWUsRUFDZixZQUFZLEVBQ1osMkJBQTJCLEVBQzNCLGdCQUFnQixFQUNoQixRQUFRLEVBQ1IsZ0JBQWdCLEVBQ25CLE1BQU0sVUFBVSxDQUFDO0FBQ2xCLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFL0MsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDOUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7OztBQUk3QyxNQUFNLFdBQVcsR0FBRztJQUNoQixhQUFhLEVBQUUscUJBQXFCO0lBQ3BDLFdBQVcsRUFBRSxtQkFBbUI7SUFDaEMsV0FBVyxFQUFFLFdBQVc7SUFDeEIsZ0JBQWdCLEVBQUUsZ0JBQWdCO0lBQ2xDLGNBQWMsRUFBRSxzQkFBc0I7SUFDdEMsdUJBQXVCLEVBQUUsZ0JBQWdCO0lBQ3pDLFFBQVEsRUFBRSxRQUFRO0lBQ2xCLGNBQWMsRUFBRSxzQkFBc0I7SUFDdEMsS0FBSyxFQUFFLFlBQVk7SUFDbkIsU0FBUyxFQUFFLGVBQWU7SUFDMUIsVUFBVSxFQUFFLGdCQUFnQjtJQUM1QixZQUFZLEVBQUUsa0JBQWtCO0lBQ2hDLHVCQUF1QixFQUFFLDJCQUEyQjtDQUN2RCxDQUFDO0FBUUYsTUFBTSxJQUFJLEdBQUcsQ0FBQyxHQUFHLElBQUksRUFBRSxFQUFFLEdBQUUsQ0FBQyxDQUFDO0FBRTdCLDREQUE0RDtBQUM1RCxNQUFNLGlCQUFpQixHQUFHO0lBQ3RCLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDckMsTUFBTSxFQUFFLEdBQUcsVUFBVSxHQUFHLEVBQUUsT0FBUTtRQUM5QixNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM1QyxPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUN0RSxDQUFDLENBQUM7SUFDRixNQUFNLEtBQUssR0FBRztRQUNWLE9BQU8sRUFBRSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsQ0FBQyxNQUFNLEVBQUUsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNuRSxDQUFDLENBQUM7SUFDRixDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ2hILE9BQU8sS0FBSyxDQUFDO0FBQ2pCLENBQUMsQ0FBQztBQUdGLE1BQU0sT0FBTyxNQUFNO0lBZ0NmLE1BQU07UUFDRixNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFRCxZQUNZLEdBQWEsRUFDYixXQUFnQyxFQUNoQyxnQkFBa0MsRUFDbEMsV0FBZ0MsRUFDaEMsZUFBZ0MsRUFDaEMsa0JBQXNDO1FBTHRDLFFBQUcsR0FBSCxHQUFHLENBQVU7UUFDYixnQkFBVyxHQUFYLFdBQVcsQ0FBcUI7UUFDaEMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNsQyxnQkFBVyxHQUFYLFdBQVcsQ0FBcUI7UUFDaEMsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBQ2hDLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUF6Q2xELGNBQVMsR0FBUSxFQUFFLENBQUM7UUFDcEIsWUFBTyxHQUFRLEVBQUUsQ0FBQztRQUNsQix3QkFBbUIsR0FBRyxJQUFJLENBQUM7UUFDM0IscUJBQWdCLEdBQUcsSUFBSSxDQUFDO1FBQ3hCLHFCQUFnQixHQUFHLElBQUksQ0FBQztRQUN4QixnQkFBVyxHQUFHLElBQUksQ0FBQztRQUNuQixzQkFBaUIsR0FBRyxJQUFJLENBQUM7UUFDekIsd0JBQW1CLEdBQUksSUFBSSxDQUFDO1FBQzVCLHFCQUFnQixHQUFJLElBQUksQ0FBQztRQUN6QixtQkFBYyxHQUFJLElBQUksQ0FBQztRQUN2QixpQ0FBNEIsR0FBRyxFQUFFLENBQUM7UUFZbEMsaUJBQVksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDekUsc0JBQWlCLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzlFLGdCQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNsRSxvQkFBZSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFFbEUsbUJBQWMsR0FBRyxJQUFJLGFBQWEsRUFBRSxDQUFDO1FBRTdDLG9CQUFlLEdBQUcsc0JBQXNCLEVBQUUsQ0FBQyxRQUFRLENBQUM7UUFlaEQsTUFBTSxtQkFBbUIsR0FBRyxzQkFBc0IsRUFBRSxDQUFDO1FBRXJELElBQUksQ0FBQyxXQUFXLEdBQUcsbUJBQW1CLENBQUMsSUFBSSxDQUFDO1FBQzVDLElBQUksQ0FBQyxZQUFZLEdBQUcsbUJBQW1CLENBQUMsSUFBSSx1Q0FBd0IsQ0FBQztRQUNyRSxJQUFJLENBQUMsaUJBQWlCLEdBQUcsbUJBQW1CLENBQUMsSUFBSSxpREFBNkIsQ0FBQztRQUMvRSxJQUFJLENBQUMsb0JBQW9CLEdBQUcsbUJBQW1CLENBQUMsSUFBSSx3REFBaUMsQ0FBQztRQUN0RixJQUFJLENBQUMsY0FBYyxHQUFHLG1CQUFtQixDQUFDLFlBQVksQ0FBQztRQUV2RCxJQUFJLENBQUMsV0FBVyxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFFakUsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ2pELElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBRU0sY0FBYyxDQUFDLFFBQWlCO1FBQ25DLElBQUcsSUFBSSxDQUFDLGtCQUFrQixZQUFZLDJCQUEyQixFQUFFO1lBQzlELElBQUksQ0FBQyxrQkFBa0QsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDNUU7SUFDTCxDQUFDO0lBRU0sTUFBTSxDQUFDLFNBQWlCLEVBQUUsR0FBRyxJQUFnQjtRQUNoRCxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUNyRSxDQUFDO0lBRU0sYUFBYSxDQUFDLFFBQVE7UUFDekIsSUFBSSxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDcEIsSUFBSSxRQUFRLEtBQUssYUFBYSxFQUFFO2dCQUM1QixPQUFPLGlCQUFpQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUN2QztZQUNELElBQUksZ0JBQWdCLEdBQUcsV0FBVyxDQUFDLFFBQVEsQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1lBQ3BGLElBQUksQ0FBQyxnQkFBZ0IsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxFQUFFLE1BQU0sRUFBRTtnQkFDbEQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDNUMsSUFBSSxJQUFJLEdBQUcsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDO2dCQUMxQixPQUFPLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUU7b0JBQ3ZCLElBQUksSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLFlBQVksS0FBSyxRQUFRLEVBQUU7d0JBQzVELE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUM7cUJBQzNCO29CQUNELElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7aUJBQ3hCO2FBQ0o7WUFDRCxPQUFPLGdCQUFnQixDQUFDO1NBQzNCO1FBQ0QsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLO1FBQ0QsTUFBTSxRQUFRLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsRUFBRSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQy9ELDBEQUEwRDtRQUMxRCxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUN0QixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztTQUMzQjtJQUNMLENBQUM7SUFFTSxTQUFTLENBQUMsU0FBUyxFQUFFLFFBQTZCO1FBQ3JELE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQzlELENBQUM7SUFFTSxTQUFTLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxLQUFLO1FBQ2xDLE1BQU0sa0JBQWtCLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUseUJBQXlCLENBQUMsQ0FBQztRQUNsRSxNQUFNLDZCQUE2QixHQUFHLENBQUMsMkJBQTJCLENBQUMsQ0FBQztRQUNwRSxNQUFNLHVCQUF1QixHQUFHLDZCQUE2QixDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUN2RixJQUFJLGtCQUFrQixFQUFFO1lBQ3BCLCtEQUErRDtZQUMvRCxJQUFJLHVCQUF1QixFQUFFO2dCQUN6QixPQUFPLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxRQUFRLENBQUMsQ0FBQztnQkFDcEMsT0FBTzthQUNWO1lBQ0QsSUFBSSxHQUFHLElBQUksSUFBSSxTQUFTLENBQUM7WUFDekIsUUFBUSxHQUFHLGtCQUFrQixDQUFDLFVBQVUsRUFBRSxJQUFJLFFBQVEsQ0FBQztZQUN2RCxrQkFBa0IsQ0FBQyxNQUFNLENBQUM7Z0JBQ3RCLE9BQU8sRUFBRSxRQUFRO2dCQUNqQixLQUFLLEVBQUUsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUU7Z0JBQ3BELEtBQUssRUFBRSxJQUFJO2dCQUNYLCtDQUErQztnQkFDL0MsUUFBUSxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUzthQUMzRCxDQUFDLENBQUM7U0FDTjthQUFNO1lBQ0gsT0FBTyxDQUFDLElBQUksQ0FBQyxpR0FBaUcsRUFBRSxRQUFRLENBQUMsQ0FBQztTQUM3SDtJQUNMLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksbUJBQW1CLENBQUMsV0FBVztRQUNsQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUMsRUFBRTtZQUM1QixnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3pDLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQzt1RUExSVEsTUFBTTt1RUFBTixNQUFNLFdBQU4sTUFBTTs7dUZBQU4sTUFBTTtjQURsQixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0b3IgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJvdXRlUmV1c2VTdHJhdGVneSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5cbmltcG9ydCB7XG4gICAgQWJzdHJhY3REaWFsb2dTZXJ2aWNlLFxuICAgIEFic3RyYWN0SHR0cFNlcnZpY2UsXG4gICAgQWJzdHJhY3RJMThuU2VydmljZSxcbiAgICBBYnN0cmFjdFNwaW5uZXJTZXJ2aWNlLFxuICAgIEFic3RyYWN0VG9hc3RlclNlcnZpY2UsXG4gICAgRXZlbnROb3RpZmllcixcbiAgICBGaWVsZFR5cGVTZXJ2aWNlLFxuICAgIEZpZWxkV2lkZ2V0U2VydmljZSxcbiAgICBnZXRXbVByb2plY3RQcm9wZXJ0aWVzLFxuICAgIGlzRGVmaW5lZCxcbiAgICBpc1N0cmluZyxcbiAgICBDb25zdGFudFNlcnZpY2UsXG4gICAgVXRpbHNTZXJ2aWNlLFxuICAgIER5bmFtaWNDb21wb25lbnRSZWZQcm92aWRlcixcbiAgICBTdGF0ZVBlcnNpc3RlbmNlLFxuICAgIFZpZXdwb3J0LFxuICAgIHJlZ2lzdGVyRm5CeUV4cHJcbn0gZnJvbSAnQHdtL2NvcmUnO1xuaW1wb3J0IHsgU2VjdXJpdHlTZXJ2aWNlIH0gZnJvbSAnQHdtL3NlY3VyaXR5JztcblxuaW1wb3J0IHsgV21EZWZhdWx0Um91dGVSZXVzZVN0cmF0ZWd5IH0gZnJvbSAnLi4vdXRpbC93bS1yb3V0ZS1yZXVzZS1zdHJhdGVneSc7XG5pbXBvcnQgeyBQaXBlU2VydmljZSB9IGZyb20gXCIuL3BpcGUuc2VydmljZVwiO1xuXG5kZWNsYXJlIGNvbnN0IF87XG5cbmNvbnN0IGluamVjdG9yTWFwID0ge1xuICAgIERpYWxvZ1NlcnZpY2U6IEFic3RyYWN0RGlhbG9nU2VydmljZSxcbiAgICBpMThuU2VydmljZTogQWJzdHJhY3RJMThuU2VydmljZSxcbiAgICBQaXBlU2VydmljZTogUGlwZVNlcnZpY2UsXG4gICAgc3RhdGVQZXJzaXN0ZW5jZTogU3RhdGVQZXJzaXN0ZW5jZSxcbiAgICBTcGlubmVyU2VydmljZTogQWJzdHJhY3RTcGlubmVyU2VydmljZSxcbiAgICBTdGF0ZVBlcnNpc3RlbmNlU2VydmljZTogU3RhdGVQZXJzaXN0ZW5jZSxcbiAgICBWaWV3cG9ydDogVmlld3BvcnQsXG4gICAgVG9hc3RlclNlcnZpY2U6IEFic3RyYWN0VG9hc3RlclNlcnZpY2UsXG4gICAgVXRpbHM6IFV0aWxzU2VydmljZSxcbiAgICBDT05TVEFOVFM6IENvbnN0YW50U2VydmljZSxcbiAgICBGSUVMRF9UWVBFOiBGaWVsZFR5cGVTZXJ2aWNlLFxuICAgIEZJRUxEX1dJREdFVDogRmllbGRXaWRnZXRTZXJ2aWNlLFxuICAgIER5bmFtaWNDb21wb25lbnRTZXJ2aWNlOiBEeW5hbWljQ29tcG9uZW50UmVmUHJvdmlkZXJcbn07XG5cbmNvbnN0IGVudW0gUFJPSkVDVF9UWVBFIHtcbiAgICBBUFBMSUNBVElPTiA9ICdBUFBMSUNBVElPTicsXG4gICAgUFJFRkFCID0gJ1BSRUZBQicsXG4gICAgVEVNUExBVEVfQlVORExFID0gJ1RFTVBMQVRFQlVORExFJ1xufVxuXG5jb25zdCBub29wID0gKC4uLmFyZ3MpID0+IHt9O1xuXG4vLyBXcmFwcyBodHRwU2VydmljZSB0byBiZWhhdmUgYXMgYW5ndWxhciAxLnggJGh0dHAgc2VydmljZS5cbmNvbnN0IGdldEh0dHBEZXBlbmRlbmN5ID0gZnVuY3Rpb24oKSB7XG4gICAgY29uc3QgaHR0cFNlcnZpY2UgPSB0aGlzLmh0dHBTZXJ2aWNlO1xuICAgIGNvbnN0IGZuID0gZnVuY3Rpb24gKGtleSwgb3B0aW9ucz8pIHtcbiAgICAgICAgY29uc3QgYXJncyA9IEFycmF5LmZyb20oYXJndW1lbnRzKS5zbGljZSgxKTtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShodHRwU2VydmljZVtrZXldLmFwcGx5KGh0dHBTZXJ2aWNlLCBhcmdzKSk7XG4gICAgfTtcbiAgICBjb25zdCAkaHR0cCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIGZuLmFwcGx5KHVuZGVmaW5lZCwgWydzZW5kJywgLi4uQXJyYXkuZnJvbShhcmd1bWVudHMpXSk7XG4gICAgfTtcbiAgICBbJ2dldCcsICdwb3N0JywgJ2hlYWQnLCAncHV0JywgJ2RlbGV0ZScsICdqc29ucCcsICdwYXRjaCddLmZvckVhY2goa2V5ID0+ICRodHRwW2tleV0gPSBmbi5iaW5kKHVuZGVmaW5lZCwga2V5KSk7XG4gICAgcmV0dXJuICRodHRwO1xufTtcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEFwcFJlZiB7XG4gICAgVmFyaWFibGVzOiBhbnkgPSB7fTtcbiAgICBBY3Rpb25zOiBhbnkgPSB7fTtcbiAgICBvbkFwcFZhcmlhYmxlc1JlYWR5ID0gbm9vcDtcbiAgICBvbkJlZm9yZUFwcFJlYWR5ID0gbm9vcDtcbiAgICBvblNlc3Npb25UaW1lb3V0ID0gbm9vcDtcbiAgICBvblBhZ2VSZWFkeSA9IG5vb3A7XG4gICAgb25CZWZvcmVQYWdlTGVhdmUgPSBub29wO1xuICAgIG9uQmVmb3JlU2VydmljZUNhbGwgPSAgbm9vcDtcbiAgICBvblNlcnZpY2VTdWNjZXNzID0gIG5vb3A7XG4gICAgb25TZXJ2aWNlRXJyb3IgPSAgbm9vcDtcbiAgICBkeW5hbWljQ29tcG9uZW50Q29udGFpbmVyUmVmID0ge307XG5cbiAgICBwcm9qZWN0TmFtZTogc3RyaW5nO1xuICAgIGlzUHJlZmFiVHlwZTogYm9vbGVhbjtcbiAgICBpc0FwcGxpY2F0aW9uVHlwZTogYm9vbGVhbjtcbiAgICBpc1RhYmxldEFwcGxpY2F0aW9uVHlwZTogYm9vbGVhbjtcbiAgICBpc1RlbXBsYXRlQnVuZGxlVHlwZTogYm9vbGVhbjtcblxuICAgIHRhcmdldFBsYXRmb3JtOiBzdHJpbmc7XG5cbiAgICBhcHBMb2NhbGU6IGFueTtcblxuICAgIGNoYW5nZUxvY2FsZSA9IHRoaXMuaTE4blNlcnZpY2Uuc2V0U2VsZWN0ZWRMb2NhbGUuYmluZCh0aGlzLmkxOG5TZXJ2aWNlKTtcbiAgICBnZXRTZWxlY3RlZExvY2FsZSA9IHRoaXMuaTE4blNlcnZpY2UuZ2V0U2VsZWN0ZWRMb2NhbGUuYmluZCh0aGlzLmkxOG5TZXJ2aWNlKTtcbiAgICBzZXRUaW1lem9uZSA9IHRoaXMuaTE4blNlcnZpY2Uuc2V0VGltZXpvbmUuYmluZCh0aGlzLmkxOG5TZXJ2aWNlKTtcbiAgICBzZXR3aWRnZXRMb2NhbGUgPSB0aGlzLmkxOG5TZXJ2aWNlLnNldHdpZGdldExvY2FsZS5iaW5kKHRoaXMuaTE4blNlcnZpY2UpO1xuXG4gICAgcHJpdmF0ZSBfZXZlbnROb3RpZmllciA9IG5ldyBFdmVudE5vdGlmaWVyKCk7XG5cbiAgICBsYW5kaW5nUGFnZU5hbWUgPSBnZXRXbVByb2plY3RQcm9wZXJ0aWVzKCkuaG9tZVBhZ2U7XG5cbiAgICByZWxvYWQoKSB7XG4gICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBpbmo6IEluamVjdG9yLFxuICAgICAgICBwcml2YXRlIGkxOG5TZXJ2aWNlOiBBYnN0cmFjdEkxOG5TZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHN0YXRlUGVyc2lzdGVuY2U6IFN0YXRlUGVyc2lzdGVuY2UsXG4gICAgICAgIHByaXZhdGUgaHR0cFNlcnZpY2U6IEFic3RyYWN0SHR0cFNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgc2VjdXJpdHlTZXJ2aWNlOiBTZWN1cml0eVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcm91dGVSZXVzZVN0cmF0ZWd5OiBSb3V0ZVJldXNlU3RyYXRlZ3lcbiAgICApIHtcblxuICAgICAgICBjb25zdCB3bVByb2plY3RQcm9wZXJ0aWVzID0gZ2V0V21Qcm9qZWN0UHJvcGVydGllcygpO1xuXG4gICAgICAgIHRoaXMucHJvamVjdE5hbWUgPSB3bVByb2plY3RQcm9wZXJ0aWVzLm5hbWU7XG4gICAgICAgIHRoaXMuaXNQcmVmYWJUeXBlID0gd21Qcm9qZWN0UHJvcGVydGllcy50eXBlID09PSBQUk9KRUNUX1RZUEUuUFJFRkFCO1xuICAgICAgICB0aGlzLmlzQXBwbGljYXRpb25UeXBlID0gd21Qcm9qZWN0UHJvcGVydGllcy50eXBlID09PSBQUk9KRUNUX1RZUEUuQVBQTElDQVRJT047XG4gICAgICAgIHRoaXMuaXNUZW1wbGF0ZUJ1bmRsZVR5cGUgPSB3bVByb2plY3RQcm9wZXJ0aWVzLnR5cGUgPT09IFBST0pFQ1RfVFlQRS5URU1QTEFURV9CVU5ETEU7XG4gICAgICAgIHRoaXMudGFyZ2V0UGxhdGZvcm0gPSB3bVByb2plY3RQcm9wZXJ0aWVzLnBsYXRmb3JtVHlwZTtcblxuICAgICAgICB0aGlzLmh0dHBTZXJ2aWNlLnJlZ2lzdGVyT25TZXNzaW9uVGltZW91dCh0aGlzLm9uNDAxLmJpbmQodGhpcykpO1xuXG4gICAgICAgIHRoaXMuYXBwTG9jYWxlID0gdGhpcy5pMThuU2VydmljZS5nZXRBcHBMb2NhbGUoKTtcbiAgICAgICAgdGhpcy5odHRwU2VydmljZS5zZXRMb2NhbGUodGhpcy5hcHBMb2NhbGUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjbGVhclBhZ2VDYWNoZShwYWdlTmFtZT86IHN0cmluZykge1xuICAgICAgICBpZih0aGlzLnJvdXRlUmV1c2VTdHJhdGVneSBpbnN0YW5jZW9mIFdtRGVmYXVsdFJvdXRlUmV1c2VTdHJhdGVneSkge1xuICAgICAgICAgICAgKHRoaXMucm91dGVSZXVzZVN0cmF0ZWd5IGFzIFdtRGVmYXVsdFJvdXRlUmV1c2VTdHJhdGVneSkucmVzZXQocGFnZU5hbWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG5vdGlmeShldmVudE5hbWU6IHN0cmluZywgLi4uZGF0YTogQXJyYXk8YW55Pikge1xuICAgICAgICB0aGlzLl9ldmVudE5vdGlmaWVyLm5vdGlmeS5hcHBseSh0aGlzLl9ldmVudE5vdGlmaWVyLCBhcmd1bWVudHMpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXREZXBlbmRlbmN5KGlualRva2VuKSB7XG4gICAgICAgIGlmIChpc1N0cmluZyhpbmpUb2tlbikpIHtcbiAgICAgICAgICAgIGlmIChpbmpUb2tlbiA9PT0gJ0h0dHBTZXJ2aWNlJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBnZXRIdHRwRGVwZW5kZW5jeS5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IHByb3ZpZGVySW5zdGFuY2UgPSBpbmplY3Rvck1hcFtpbmpUb2tlbl0gJiYgdGhpcy5pbmouZ2V0KGluamVjdG9yTWFwW2lualRva2VuXSk7XG4gICAgICAgICAgICBpZiAoIXByb3ZpZGVySW5zdGFuY2UgJiYgdGhpcy5pbmpbJ3JlY29yZHMnXT8udmFsdWVzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWVzID0gdGhpcy5pbmpbJ3JlY29yZHMnXS52YWx1ZXMoKTtcbiAgICAgICAgICAgICAgICBsZXQgbmV4dCA9IHZhbHVlcz8ubmV4dCgpO1xuICAgICAgICAgICAgICAgIHdoaWxlIChuZXh0ICYmICFuZXh0LmRvbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5leHQ/LnZhbHVlPy52YWx1ZT8uY29uc3RydWN0b3I/LlNFUlZJQ0VfTkFNRSA9PT0gaW5qVG9rZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXh0LnZhbHVlLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIG5leHQgPSB2YWx1ZXMubmV4dCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBwcm92aWRlckluc3RhbmNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmluai5nZXQoaW5qVG9rZW4pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIHRyaWdnZXJzIHRoZSBvblNlc3Npb25UaW1lb3V0IGNhbGxiYWNrIGluIGFwcC5qc1xuICAgICAqL1xuICAgIG9uNDAxKCkge1xuICAgICAgICBjb25zdCB1c2VySW5mbyA9IF8uZ2V0KHRoaXMuc2VjdXJpdHlTZXJ2aWNlLmdldCgpLCAndXNlckluZm8nKTtcbiAgICAgICAgLy8gaWYgYSBwcmV2aW91cyB1c2VyIGV4aXN0cywgYSBzZXNzaW9uIHRpbWUgb3V0IHRyaWdnZXJlZFxuICAgICAgICBpZiAoIV8uaXNFbXB0eSh1c2VySW5mbykpIHtcbiAgICAgICAgICAgIHRoaXMub25TZXNzaW9uVGltZW91dCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHN1YnNjcmliZShldmVudE5hbWUsIGNhbGxiYWNrOiAoZGF0YTogYW55KSA9PiB2b2lkKTogKCkgPT4gdm9pZCB7XG4gICAgICAgIHJldHVybiB0aGlzLl9ldmVudE5vdGlmaWVyLnN1YnNjcmliZShldmVudE5hbWUsIGNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbm90aWZ5QXBwKHRlbXBsYXRlLCB0eXBlLCB0aXRsZSkge1xuICAgICAgICBjb25zdCBub3RpZmljYXRpb25BY3Rpb24gPSBfLmdldCh0aGlzLCAnQWN0aW9ucy5hcHBOb3RpZmljYXRpb24nKTtcbiAgICAgICAgY29uc3QgRVhDTFVERV9OT1RJRklDQVRJT05fTUVTU0FHRVMgPSBbJ1BST0NFU1NfUkVKRUNURURfSU5fUVVFVUUnXTtcbiAgICAgICAgY29uc3Qgc2tpcERlZmF1bHROb3RpZmljYXRpb24gPSBFWENMVURFX05PVElGSUNBVElPTl9NRVNTQUdFUy5pbmRleE9mKHRlbXBsYXRlKSAhPT0gLTE7XG4gICAgICAgIGlmIChub3RpZmljYXRpb25BY3Rpb24pIHtcbiAgICAgICAgICAgIC8vIGRvIG5vdCBub3RpZnkgdGhlIGVycm9yIHRvIHRoZSBhcHAsIGp1c3QgdGhyb3cgaXQgaW4gY29uc29sZVxuICAgICAgICAgICAgaWYgKHNraXBEZWZhdWx0Tm90aWZpY2F0aW9uKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdBcHAgRXJyb3InLCB0ZW1wbGF0ZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdHlwZSA9IHR5cGUgfHwgJ3N1Y2Nlc3MnO1xuICAgICAgICAgICAgdGVtcGxhdGUgPSBub3RpZmljYXRpb25BY3Rpb24uZ2V0TWVzc2FnZSgpIHx8IHRlbXBsYXRlO1xuICAgICAgICAgICAgbm90aWZpY2F0aW9uQWN0aW9uLmludm9rZSh7XG4gICAgICAgICAgICAgICAgbWVzc2FnZTogdGVtcGxhdGUsXG4gICAgICAgICAgICAgICAgdGl0bGU6IGlzRGVmaW5lZCh0aXRsZSkgPyB0aXRsZSA6IHR5cGUudG9VcHBlckNhc2UoKSxcbiAgICAgICAgICAgICAgICBjbGFzczogdHlwZSxcbiAgICAgICAgICAgICAgICAvLyBJZiB0aGUgdHlwZSBpcyBlcnJvciBkbyBub3QgY2xvc2UgdGhlIHRvYXN0clxuICAgICAgICAgICAgICAgIGR1cmF0aW9uOiB0eXBlLnRvVXBwZXJDYXNlKCkgPT09ICdFUlJPUicgPyAwIDogdW5kZWZpbmVkXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIGRlZmF1bHQgQWN0aW9uIFwiYXBwTm90aWZpY2F0aW9uXCIgZG9lc25cXCd0IGV4aXN0IGluIHRoZSBhcHAuIEFwcCBub3RpZmllZCBmb2xsb3dpbmcgZXJyb3I6XFxuJywgdGVtcGxhdGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogZnVuY3Rpb24gdG8gcmVnaXN0ZXIgYmluZCBleHByZXNzaW9ucyBmcm9tIGFwcCB2YXJpYWJsZXNcbiAgICAgKiBpdCB3aWxsIGJlIGNhbGxlZCBmcm9tIGFwcC5qcyBpbiBnZW5lcmF0ZWQgYW5ndWxhciBhcHBcbiAgICAgKiBAcGFyYW0gZXhwcmVzc2lvbnMsIG1hcCBvZiBiaW5kIGV4cHJlc3Npb24gdnMgZ2VuZXJhdGVkIGZ1bmN0aW9uXG4gICAgICovXG4gICAgcHVibGljIHJlZ2lzdGVyRXhwcmVzc2lvbnMoZXhwcmVzc2lvbnMpIHtcbiAgICAgICAgXy5lYWNoKGV4cHJlc3Npb25zLCAoZm4sIGV4cHIpPT57XG4gICAgICAgICAgICByZWdpc3RlckZuQnlFeHByKGV4cHIsIGZuWzBdLCBmblsxXSk7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiJdfQ==
@@ -328,9 +328,21 @@ class AppManagerService {
328
328
  * remove-toolbar has been assigned with a window name WM_PREVIEW_WINDOW, check if the iframe is our toolbar related and
329
329
  * safely change the location of the parent toolbar with current url.
330
330
  */
331
- if (window.self !== window.top && window.parent.name === PREVIEW_WINDOW_NAME) {
332
- window.parent.location.href = window.self.location.href;
333
- window.parent.name = '';
331
+ if (window.self !== window.top) {
332
+ try {
333
+ if (window.parent && window.location.origin === window.parent.origin) {
334
+ if (window.parent.name === PREVIEW_WINDOW_NAME) {
335
+ window.parent.location.href = window.self.location.href;
336
+ window.parent.name = "";
337
+ }
338
+ }
339
+ else {
340
+ window.location.href = ssoUrl;
341
+ }
342
+ }
343
+ catch (error) {
344
+ window.location.href = ssoUrl;
345
+ }
334
346
  }
335
347
  else {
336
348
  window.location.href = ssoUrl;
@@ -2587,15 +2599,15 @@ class AppRef {
2587
2599
  return getHttpDependency.call(this);
2588
2600
  }
2589
2601
  let providerInstance = injectorMap[injToken] && this.inj.get(injectorMap[injToken]);
2590
- if (!providerInstance && this.inj['_providers']) {
2591
- _.forEach(this.inj['_providers'], val => {
2592
- if (_.isObject(val)) {
2593
- if (val.__proto__.constructor.SERVICE_NAME === injToken) {
2594
- providerInstance = val;
2595
- return false;
2596
- }
2602
+ if (!providerInstance && this.inj['records']?.values) {
2603
+ const values = this.inj['records'].values();
2604
+ let next = values?.next();
2605
+ while (next && !next.done) {
2606
+ if (next?.value?.value?.constructor?.SERVICE_NAME === injToken) {
2607
+ return next.value.value;
2597
2608
  }
2598
- });
2609
+ next = values.next();
2610
+ }
2599
2611
  }
2600
2612
  return providerInstance;
2601
2613
  }