@coolon/angular-ui-powerups 0.0.96 → 0.0.97

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.
Files changed (93) hide show
  1. package/bundles/coolon-angular-ui-powerups.umd.js +3099 -2285
  2. package/bundles/coolon-angular-ui-powerups.umd.js.map +1 -1
  3. package/bundles/coolon-angular-ui-powerups.umd.min.js +1 -1
  4. package/bundles/coolon-angular-ui-powerups.umd.min.js.map +1 -1
  5. package/coolon-angular-ui-powerups.d.ts +17 -20
  6. package/coolon-angular-ui-powerups.metadata.json +1 -1
  7. package/esm2015/coolon-angular-ui-powerups.js +17 -20
  8. package/esm2015/index.js +2 -2
  9. package/esm2015/lib/interaction/components/activity-container/activity-container.component.js +15 -51
  10. package/esm2015/lib/interaction/components/inplace-interaction-context/inplace-interaction-context.component.js +15 -47
  11. package/esm2015/lib/interaction/index.js +4 -2
  12. package/esm2015/lib/interaction/interaction-context-base.js +158 -0
  13. package/esm2015/lib/interaction/interaction-context.js +58 -78
  14. package/esm2015/lib/interaction/interaction.module.js +1 -1
  15. package/esm2015/lib/interaction/services/dialog-interaction-context.js +163 -0
  16. package/esm2015/lib/interaction/services/dialog-interaction.service.js +68 -181
  17. package/esm2015/lib/interaction/services/modal-interaction.service.js +109 -0
  18. package/esm2015/lib/place/components/place-outlet/place-outlet.component.js +9 -43
  19. package/esm2015/lib/place/guards/abstract-place.guard.js +165 -0
  20. package/esm2015/lib/place/guards/consolidated-param-map.js +133 -0
  21. package/esm2015/lib/place/guards/interaction.guard.js +113 -0
  22. package/esm2015/lib/place/guards/navigation-session.js +590 -0
  23. package/esm2015/lib/place/guards/place-component-deactivation-handler.js +110 -0
  24. package/esm2015/lib/place/index.js +7 -5
  25. package/esm2015/lib/place/place-component.js +1 -1
  26. package/esm2015/lib/place/place-router.js +205 -236
  27. package/esm2015/lib/place/place.module.js +2 -4
  28. package/esm2015/lib/place/route/visit-sanitiser.js +2 -2
  29. package/esm2015/lib/place/url-snapshot.js +96 -0
  30. package/esm2015/public_api.js +3 -3
  31. package/esm5/coolon-angular-ui-powerups.js +17 -20
  32. package/esm5/index.js +2 -2
  33. package/esm5/lib/interaction/components/activity-container/activity-container.component.js +22 -73
  34. package/esm5/lib/interaction/components/inplace-interaction-context/inplace-interaction-context.component.js +25 -76
  35. package/esm5/lib/interaction/index.js +4 -2
  36. package/esm5/lib/interaction/interaction-context-base.js +211 -0
  37. package/esm5/lib/interaction/interaction-context.js +72 -94
  38. package/esm5/lib/interaction/interaction.module.js +1 -1
  39. package/esm5/lib/interaction/services/dialog-interaction-context.js +188 -0
  40. package/esm5/lib/interaction/services/dialog-interaction.service.js +83 -232
  41. package/esm5/lib/interaction/services/modal-interaction.service.js +153 -0
  42. package/esm5/lib/place/components/place-outlet/place-outlet.component.js +9 -43
  43. package/esm5/lib/place/guards/abstract-place.guard.js +212 -0
  44. package/esm5/lib/place/guards/consolidated-param-map.js +161 -0
  45. package/esm5/lib/place/guards/interaction.guard.js +125 -0
  46. package/esm5/lib/place/guards/navigation-session.js +741 -0
  47. package/esm5/lib/place/guards/place-component-deactivation-handler.js +138 -0
  48. package/esm5/lib/place/index.js +7 -5
  49. package/esm5/lib/place/place-component.js +1 -1
  50. package/esm5/lib/place/place-router.js +324 -295
  51. package/esm5/lib/place/place.module.js +2 -4
  52. package/esm5/lib/place/route/visit-sanitiser.js +2 -2
  53. package/esm5/lib/place/url-snapshot.js +120 -0
  54. package/esm5/public_api.js +3 -3
  55. package/fesm2015/coolon-angular-ui-powerups.js +2244 -1654
  56. package/fesm2015/coolon-angular-ui-powerups.js.map +1 -1
  57. package/fesm5/coolon-angular-ui-powerups.js +3220 -2407
  58. package/fesm5/coolon-angular-ui-powerups.js.map +1 -1
  59. package/lib/interaction/components/activity-container/activity-container.component.d.ts +5 -10
  60. package/lib/interaction/components/inplace-interaction-context/inplace-interaction-context.component.d.ts +4 -9
  61. package/lib/interaction/index.d.ts +3 -1
  62. package/lib/interaction/interaction-context-base.d.ts +27 -0
  63. package/lib/interaction/interaction-context.d.ts +18 -15
  64. package/lib/interaction/services/dialog-interaction-context.d.ts +18 -0
  65. package/lib/interaction/services/dialog-interaction.service.d.ts +14 -23
  66. package/lib/interaction/services/modal-interaction.service.d.ts +15 -0
  67. package/lib/place/components/place-outlet/place-outlet.component.d.ts +1 -4
  68. package/lib/place/guards/abstract-place.guard.d.ts +19 -0
  69. package/lib/place/guards/consolidated-param-map.d.ts +14 -0
  70. package/lib/{interaction/guards/interaction-guard.service.d.ts → place/guards/interaction.guard.d.ts} +8 -4
  71. package/lib/place/guards/navigation-session.d.ts +96 -0
  72. package/lib/place/guards/place-component-deactivation-handler.d.ts +14 -0
  73. package/lib/place/index.d.ts +6 -4
  74. package/lib/place/place-component.d.ts +1 -1
  75. package/lib/place/place-router.d.ts +23 -31
  76. package/lib/place/url-snapshot.d.ts +16 -0
  77. package/package.json +1 -1
  78. package/schematics/place-routes/place-def.js +2 -2
  79. package/schematics/place-routes/templates/place-routes.ts.template +9 -16
  80. package/esm2015/lib/interaction/guards/interaction-guard.service.js +0 -85
  81. package/esm2015/lib/place/guards/abstract-enter-place.guard.js +0 -315
  82. package/esm2015/lib/place/guards/leave-place.guard.js +0 -47
  83. package/esm2015/lib/place/navigation-session.js +0 -279
  84. package/esm2015/lib/place/places/noop-gateway-place.component.js +0 -58
  85. package/esm5/lib/interaction/guards/interaction-guard.service.js +0 -94
  86. package/esm5/lib/place/guards/abstract-enter-place.guard.js +0 -387
  87. package/esm5/lib/place/guards/leave-place.guard.js +0 -55
  88. package/esm5/lib/place/navigation-session.js +0 -353
  89. package/esm5/lib/place/places/noop-gateway-place.component.js +0 -61
  90. package/lib/place/guards/abstract-enter-place.guard.d.ts +0 -33
  91. package/lib/place/guards/leave-place.guard.d.ts +0 -8
  92. package/lib/place/navigation-session.d.ts +0 -43
  93. package/lib/place/places/noop-gateway-place.component.d.ts +0 -10
@@ -3,285 +3,140 @@
3
3
  * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
4
4
  */
5
5
  import * as tslib_1 from "tslib";
6
- import { Location } from '@angular/common';
7
6
  import { Inject, Injectable, InjectionToken, Optional } from '@angular/core';
8
7
  import { MatDialog } from '@angular/material';
9
8
  import { MAT_DIALOG_DEFAULT_OPTIONS, MatDialogConfig } from '@angular/material/dialog';
10
- import { Router } from '@angular/router';
11
- import { lang, MutableValueModel, ValueModel } from '@coolon/pectin';
9
+ import { Dsl, lang, MutableValueModel } from '@coolon/pectin';
12
10
  import { assert } from '@coolon/typescript-utilities';
13
- import { ActivityContainerComponent } from '../components/activity-container/activity-container.component';
14
- import { AlertDialogComponent } from '../components/alert-dialog/alert-dialog.component';
15
- import { ConfirmThenDialogComponent } from '../components/confirm-then-dialog/confirm-then-dialog.component';
16
- import { ConfirmationDialogComponent } from '../components/confirmation-dialog/confirmation-dialog.component';
17
- import { InteractionContext } from '../interaction-context';
11
+ import { DialogInteractionContext } from './dialog-interaction-context';
12
+ import { ModalInteractionService } from './modal-interaction.service';
18
13
  import * as i0 from "@angular/core";
19
14
  import * as i1 from "@angular/material/dialog";
20
- import * as i2 from "@angular/common";
21
- import * as i3 from "@angular/router";
22
15
  /** @type {?} */
23
16
  export var DIALOG_INTERACTION_SERVICE_DEFAULTS = new InjectionToken('DIALOG_INTERACTION_SERVICE_DEFAULTS');
24
- var Guard = /** @class */ (function (_super) {
25
- tslib_1.__extends(Guard, _super);
26
- function Guard() {
27
- return _super.call(this, { initialValue: false }) || this;
28
- }
29
- Object.defineProperty(Guard.prototype, "value", {
30
- get: /**
31
- * @return {?}
32
- */
33
- function () {
34
- return this.store.read();
35
- },
36
- enumerable: true,
37
- configurable: true
38
- });
39
- /**
40
- * @template R
41
- * @param {?} fun
42
- * @return {?}
43
- */
44
- Guard.prototype.whileTrue = /**
45
- * @template R
46
- * @param {?} fun
47
- * @return {?}
48
- */
49
- function (fun) {
50
- this.startTransaction().commit(true);
51
- try {
52
- return fun();
53
- }
54
- finally {
55
- this.startTransaction().commit(false);
56
- }
57
- };
58
- /**
59
- * @template R
60
- * @param {?} fun
61
- * @param {?=} defaultValue
62
- * @return {?}
63
- */
64
- Guard.prototype.runIfFalse = /**
65
- * @template R
66
- * @param {?} fun
67
- * @param {?=} defaultValue
68
- * @return {?}
69
- */
70
- function (fun, defaultValue) {
71
- if (defaultValue === void 0) { defaultValue = null; }
72
- return !this.value ? fun() : defaultValue;
73
- };
74
- return Guard;
75
- }(ValueModel));
76
17
  var DialogInteractionService = /** @class */ (function (_super) {
77
18
  tslib_1.__extends(DialogInteractionService, _super);
78
- function DialogInteractionService(dialogService, location, router, dialogServiceDefaults, matDialogDefaultConfig) {
19
+ function DialogInteractionService(dialogService, dialogServiceDefaults, matDialogDefaultConfig) {
79
20
  var _this = _super.call(this) || this;
80
21
  _this.dialogService = dialogService;
81
- _this.location = location;
82
- _this.router = router;
83
22
  _this.dialogServiceDefaults = dialogServiceDefaults;
84
23
  _this.matDialogDefaultConfig = matDialogDefaultConfig;
85
- _this.startingGuard = new Guard();
86
- _this._inActivityPromise = new MutableValueModel(false);
24
+ _this._activeInteractionContextModel = new MutableValueModel();
87
25
  assert.notNil(dialogService);
26
+ var _a = Dsl.disposeWith(_this), chain = _a.chain, valueOf = _a.valueOf, before = _a.before, when = _a.when, after = _a.after, observe = _a.observe, switchOn = _a.switchOn;
27
+ _this.active = chain(_this._activeInteractionContextModel).isNotNil();
88
28
  return _this;
89
29
  }
90
30
  /**
31
+ * @param {?} disposable
91
32
  * @return {?}
92
33
  */
93
- DialogInteractionService.prototype.isActive = /**
94
- * @return {?}
95
- */
96
- function () {
97
- return this._inActivityPromise.value;
98
- };
99
- Object.defineProperty(DialogInteractionService.prototype, "active", {
100
- get: /**
101
- * @return {?}
102
- */
103
- function () {
104
- return this._inActivityPromise.readonly;
105
- },
106
- enumerable: true,
107
- configurable: true
108
- });
109
- /**
110
- * @template D, R, E
111
- * @param {?} activityType
112
- * @param {?=} data
113
- * @return {?}
114
- */
115
- DialogInteractionService.prototype.startActivity = /**
116
- * @template D, R, E
117
- * @param {?} activityType
118
- * @param {?=} data
34
+ DialogInteractionService.prototype.createInteractionContextFor = /**
35
+ * @param {?} disposable
119
36
  * @return {?}
120
37
  */
121
- function (activityType, data) {
122
- return this._startActivity(activityType, data);
38
+ function (disposable) {
39
+ return disposable.registerDisposable(this._createInteractionContext());
123
40
  };
124
41
  /**
125
- * @private
126
- * @template D, R, E
127
- * @param {?} activityType
128
- * @param {?} data
129
- * @param {?=} disableClose
130
42
  * @return {?}
131
43
  */
132
- DialogInteractionService.prototype._startActivity = /**
133
- * @private
134
- * @template D, R, E
135
- * @param {?} activityType
136
- * @param {?} data
137
- * @param {?=} disableClose
44
+ DialogInteractionService.prototype._createInteractionContext = /**
138
45
  * @return {?}
139
46
  */
140
- function (activityType, data, disableClose) {
141
- var _this = this;
142
- if (disableClose === void 0) { disableClose = true; }
143
- if (this.isActive()) {
144
- lang.illegalState("Activity already in progress: " + this.activityList.value.map((/**
145
- * @param {?} a
146
- * @return {?}
147
- */
148
- function (a) { return a.constructor.name; })).join(', '));
149
- }
150
- return this.startingGuard.whileTrue((/**
151
- * @return {?}
152
- */
153
- function () {
154
- // console.log('###### STARTING');
155
- _this._inActivityPromise.value = true;
156
- // this.currentActivityId = uuid.v1();
157
- // this.location.go(this.router.routerState.snapshot.url, "aup");
158
- /** @type {?} */
159
- var self = _this;
160
- /** @type {?} */
161
- var config = tslib_1.__assign({ autoFocus: false, hasBackdrop: true, closeOnNavigation: false }, _this.matDialogDefaultConfig, _this.dialogServiceDefaults, {
162
- data: data,
163
- disableClose: disableClose,
164
- panelClass: 'dialog-interaction-service'
165
- });
166
- /** @type {?} */
167
- var matDialogRef = (/** @type {?} */ (_this.dialogService.open(ActivityContainerComponent, config)));
168
- return new Promise((/**
169
- * @param {?} resolve
170
- * @param {?} reject
47
+ function () {
48
+ /** @type {?} */
49
+ var config = tslib_1.__assign({ autoFocus: false, hasBackdrop: true, closeOnNavigation: false }, this.matDialogDefaultConfig, this.dialogServiceDefaults);
50
+ /** @type {?} */
51
+ var self = this;
52
+ /** @type {?} */
53
+ var dialogInteractionContext = new DialogInteractionContext(this.dialogService, config);
54
+ dialogInteractionContext.registerDisposable(dialogInteractionContext.addActivityListener({
55
+ onActivityStarted: /**
171
56
  * @return {?}
172
57
  */
173
- function (resolve, reject) {
174
- /** @type {?} */
175
- var activityContainer = matDialogRef.componentInstance;
176
- self.safelyUpdateActivityListDelegate(activityContainer.activityList);
177
- activityContainer.initialActivityOutletContext = {
178
- activityClass: activityType,
179
- activityData: data,
180
- onDone: /**
181
- * @param {?} result
182
- * @return {?}
183
- */
184
- function (result) {
185
- resolve(result);
186
- matDialogRef.close(true); // return true to let the after close listener know we've already handled it.
187
- },
188
- onCancel: /**
189
- * @param {?} error
190
- * @return {?}
191
- */
192
- function (error) {
193
- reject(error);
194
- matDialogRef.close(true); // return true to let the after close listener know we've already handled it.
195
- }
196
- };
197
- // we need to check if our onDone/onCancel methods above we called or if we were
198
- // closed by the user clicking the backdrop. If the later then we need to reject
199
- // our promise.
200
- matDialogRef.afterClosed().subscribe((/**
201
- * @param {?} promiseAlreadyFinished
202
- * @return {?}
203
- */
204
- function (promiseAlreadyFinished) {
205
- if (!promiseAlreadyFinished) {
206
- reject('auto-closed');
207
- }
208
- }));
209
- matDialogRef.updateSize();
210
- })).finally((/**
58
+ function () {
59
+ self.onActivityStarted(dialogInteractionContext);
60
+ },
61
+ onActivityFinished: /**
211
62
  * @return {?}
212
63
  */
213
64
  function () {
214
- _this._inActivityPromise.value = false;
215
- // console.log('###### FINISHED');
216
- // this.currentActivityId = null;
217
- self.safelyUpdateActivityListDelegate(null);
218
- }));
65
+ self.onActivityFinished(dialogInteractionContext);
66
+ }
219
67
  }));
68
+ return dialogInteractionContext;
220
69
  };
221
70
  /**
222
- * Updates teh delegate on the next tick to avoid modifying state during the current change detection cycle.
223
- * @param delegate
224
- */
225
- /**
226
- * Updates teh delegate on the next tick to avoid modifying state during the current change detection cycle.
227
- * @param {?} delegate
228
71
  * @return {?}
229
72
  */
230
- DialogInteractionService.prototype.safelyUpdateActivityListDelegate = /**
231
- * Updates teh delegate on the next tick to avoid modifying state during the current change detection cycle.
232
- * @param {?} delegate
73
+ DialogInteractionService.prototype.createExclusiveInteractionContext = /**
233
74
  * @return {?}
234
75
  */
235
- function (delegate) {
236
- var _this = this;
237
- setTimeout((/**
238
- * @return {?}
239
- */
240
- function () { return _this.setActivityList(delegate); }));
76
+ function () {
77
+ this.exclusiveContext = this._createInteractionContext();
78
+ /** @type {?} */
79
+ var self = this;
80
+ this.exclusiveContext.registerDisposable({
81
+ dispose: /**
82
+ * @return {?}
83
+ */
84
+ function () {
85
+ self.exclusiveContext = null;
86
+ }
87
+ });
88
+ return this.exclusiveContext;
241
89
  };
90
+ // @Trace()
91
+ // @Trace()
242
92
  /**
243
- * @param {?} alert
93
+ * @param {?} dialogInteractionContext
244
94
  * @return {?}
245
95
  */
246
- DialogInteractionService.prototype.alert = /**
247
- * @param {?} alert
96
+ DialogInteractionService.prototype.onActivityStarted =
97
+ // @Trace()
98
+ /**
99
+ * @param {?} dialogInteractionContext
248
100
  * @return {?}
249
101
  */
250
- function (alert) {
251
- // TODO: Test disableClose === false
252
- return this._startActivity(AlertDialogComponent, alert, false);
102
+ function (dialogInteractionContext) {
103
+ assert.isFalsey(this.isActive());
104
+ if (this.exclusiveContext && dialogInteractionContext !== this.exclusiveContext) {
105
+ lang.illegalState("Interaction started while exclusive lock active. This is usually because you using a different context during place.canDeactivate(interactionContext)");
106
+ }
107
+ this._activeInteractionContextModel.value = dialogInteractionContext;
108
+ this.notifyActivityStarted();
253
109
  };
110
+ // @Trace()
111
+ // @Trace()
254
112
  /**
255
- * @param {?} confirm
113
+ * @param {?} dialogInteractionContext
256
114
  * @return {?}
257
115
  */
258
- DialogInteractionService.prototype.confirmOrReject = /**
259
- * @param {?} confirm
116
+ DialogInteractionService.prototype.onActivityFinished =
117
+ // @Trace()
118
+ /**
119
+ * @param {?} dialogInteractionContext
260
120
  * @return {?}
261
121
  */
262
- function (confirm) {
263
- return this._startActivity(ConfirmationDialogComponent, confirm, true);
122
+ function (dialogInteractionContext) {
123
+ assert.isTruthy(this._activeInteractionContextModel.value === dialogInteractionContext);
124
+ this._activeInteractionContextModel.value = null;
125
+ this.notifyActivityFinished();
264
126
  };
265
127
  /**
266
- * @template D, R, E
267
- * @param {?} confirm
268
- * @param {?} activityType
269
- * @param {?=} data
270
128
  * @return {?}
271
129
  */
272
- DialogInteractionService.prototype.confirmThen = /**
273
- * @template D, R, E
274
- * @param {?} confirm
275
- * @param {?} activityType
276
- * @param {?=} data
130
+ DialogInteractionService.prototype.getCurrentActivity = /**
277
131
  * @return {?}
278
132
  */
279
- function (confirm, activityType, data) {
280
- return this._startActivity(ConfirmThenDialogComponent, {
281
- confirm: confirm,
282
- activityType: activityType,
283
- data: data
284
- }, true);
133
+ function () {
134
+ return tslib_1.__awaiter(this, void 0, void 0, function () {
135
+ return tslib_1.__generator(this, function (_a) {
136
+ assert.isTruthy(this.isActive());
137
+ return [2 /*return*/, this._activeInteractionContextModel.value.getCurrentActivity()];
138
+ });
139
+ });
285
140
  };
286
141
  DialogInteractionService.decorators = [
287
142
  { type: Injectable, args: [{
@@ -291,38 +146,34 @@ var DialogInteractionService = /** @class */ (function (_super) {
291
146
  /** @nocollapse */
292
147
  DialogInteractionService.ctorParameters = function () { return [
293
148
  { type: MatDialog },
294
- { type: Location },
295
- { type: Router },
296
149
  { type: MatDialogConfig, decorators: [{ type: Optional }, { type: Inject, args: [DIALOG_INTERACTION_SERVICE_DEFAULTS,] }] },
297
150
  { type: MatDialogConfig, decorators: [{ type: Optional }, { type: Inject, args: [MAT_DIALOG_DEFAULT_OPTIONS,] }] }
298
151
  ]; };
299
- /** @nocollapse */ DialogInteractionService.ngInjectableDef = i0.ɵɵdefineInjectable({ factory: function DialogInteractionService_Factory() { return new DialogInteractionService(i0.ɵɵinject(i1.MatDialog), i0.ɵɵinject(i2.Location), i0.ɵɵinject(i3.Router), i0.ɵɵinject(DIALOG_INTERACTION_SERVICE_DEFAULTS, 8), i0.ɵɵinject(i1.MAT_DIALOG_DEFAULT_OPTIONS, 8)); }, token: DialogInteractionService, providedIn: "root" });
152
+ /** @nocollapse */ DialogInteractionService.ngInjectableDef = i0.ɵɵdefineInjectable({ factory: function DialogInteractionService_Factory() { return new DialogInteractionService(i0.ɵɵinject(i1.MatDialog), i0.ɵɵinject(DIALOG_INTERACTION_SERVICE_DEFAULTS, 8), i0.ɵɵinject(i1.MAT_DIALOG_DEFAULT_OPTIONS, 8)); }, token: DialogInteractionService, providedIn: "root" });
300
153
  return DialogInteractionService;
301
- }(InteractionContext));
154
+ }(ModalInteractionService));
302
155
  export { DialogInteractionService };
303
156
  if (false) {
304
157
  /**
305
158
  * @type {?}
306
159
  * @private
307
160
  */
308
- DialogInteractionService.prototype.startingGuard;
161
+ DialogInteractionService.prototype._activeInteractionContextModel;
162
+ /** @type {?} */
163
+ DialogInteractionService.prototype.active;
309
164
  /**
310
165
  * @type {?}
311
166
  * @private
312
167
  */
313
- DialogInteractionService.prototype._inActivityPromise;
168
+ DialogInteractionService.prototype.exclusiveContext;
314
169
  /**
315
170
  * @type {?}
316
171
  * @private
317
172
  */
318
173
  DialogInteractionService.prototype.dialogService;
319
174
  /** @type {?} */
320
- DialogInteractionService.prototype.location;
321
- /** @type {?} */
322
- DialogInteractionService.prototype.router;
323
- /** @type {?} */
324
175
  DialogInteractionService.prototype.dialogServiceDefaults;
325
176
  /** @type {?} */
326
177
  DialogInteractionService.prototype.matDialogDefaultConfig;
327
178
  }
328
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhbG9nLWludGVyYWN0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AY29vbG9uL2FuZ3VsYXItdWktcG93ZXJ1cHMvIiwic291cmNlcyI6WyJsaWIvaW50ZXJhY3Rpb24vc2VydmljZXMvZGlhbG9nLWludGVyYWN0aW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3RSxPQUFPLEVBQUUsU0FBUyxFQUFnQixNQUFNLG1CQUFtQixDQUFDO0FBQzVELE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN2RixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekMsT0FBTyxFQUtMLElBQUksRUFFSixpQkFBaUIsRUFDakIsVUFBVSxFQUNYLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBR3RELE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLCtEQUErRCxDQUFDO0FBQzNHLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG1EQUFtRCxDQUFDO0FBQ3pGLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLGlFQUFpRSxDQUFDO0FBQzdHLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLGlFQUFpRSxDQUFDO0FBRTlHLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDOzs7Ozs7QUFFNUQsTUFBTSxLQUFPLG1DQUFtQyxHQUFHLElBQUksY0FBYyxDQUF1QixxQ0FBcUMsQ0FBQztBQUVsSTtJQUFvQixpQ0FBbUI7SUFFckM7ZUFDRSxrQkFBTSxFQUFFLFlBQVksRUFBRSxL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QWhIRCxDQUc4QyxrQkFBa0IsR0E2Ry9EO1NBN0dZLHdCQUF3Qjs7Ozs7O0lBRW5DLGlEQUFvQzs7Ozs7SUFDcEMsc0RBQTRFOzs7OztJQUVoRSxpREFBeUM7O0lBQ3pDLDRDQUEyQjs7SUFDM0IsMENBQXVCOztJQUN2Qix5REFBNkc7O0lBQzdHLDBEQUFxRyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IExvY2F0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSwgSW5qZWN0aW9uVG9rZW4sIE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNYXREaWFsb2csIE1hdERpYWxvZ1JlZiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsJztcbmltcG9ydCB7IE1BVF9ESUFMT0dfREVGQVVMVF9PUFRJT05TLCBNYXREaWFsb2dDb25maWcgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7XG4gIEJvb2xlYW5WYWx1ZU1vZGVsQ2hhaW4sXG4gIENvbnN0cnVjdGFibGUsXG4gIERlbGVnYXRpbmdMaXN0TW9kZWwsXG4gIERzbCxcbiAgbGFuZyxcbiAgTGlzdE1vZGVsLFxuICBNdXRhYmxlVmFsdWVNb2RlbCxcbiAgVmFsdWVNb2RlbFxufSBmcm9tICdAY29vbG9uL3BlY3Rpbic7XG5pbXBvcnQgeyBhc3NlcnQgfSBmcm9tICdAY29vbG9uL3R5cGVzY3JpcHQtdXRpbGl0aWVzJztcbmltcG9ydCB7IEFjdGl2aXR5IH0gZnJvbSAnLi4vYWN0aXZpdHknO1xuaW1wb3J0IHsgQWxlcnQgfSBmcm9tICcuLi9hbGVydCc7XG5pbXBvcnQgeyBBY3Rpdml0eUNvbnRhaW5lckNvbXBvbmVudCB9IGZyb20gJy4uL2NvbXBvbmVudHMvYWN0aXZpdHktY29udGFpbmVyL2FjdGl2aXR5LWNvbnRhaW5lci5jb21wb25lbnQnO1xuaW1wb3J0IHsgQWxlcnREaWFsb2dDb21wb25lbnQgfSBmcm9tICcuLi9jb21wb25lbnRzL2FsZXJ0LWRpYWxvZy9hbGVydC1kaWFsb2cuY29tcG9uZW50JztcbmltcG9ydCB7IENvbmZpcm1UaGVuRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi4vY29tcG9uZW50cy9jb25maXJtLXRoZW4tZGlhbG9nL2NvbmZpcm0tdGhlbi1kaWFsb2cuY29tcG9uZW50JztcbmltcG9ydCB7IENvbmZpcm1hdGlvbkRpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4uL2NvbXBvbmVudHMvY29uZmlybWF0aW9uLWRpYWxvZy9jb25maXJtYXRpb24tZGlhbG9nLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDb25maXJtIH0gZnJvbSAnLi4vY29uZmlybSc7XG5pbXBvcnQgeyBJbnRlcmFjdGlvbkNvbnRleHQgfSBmcm9tICcuLi9pbnRlcmFjdGlvbi1jb250ZXh0JztcblxuZXhwb3J0IGNvbnN0IERJQUxPR19JTlRFUkFDVElPTl9TRVJWSUNFX0RFRkFVTFRTID0gbmV3IEluamVjdGlvblRva2VuPE1hdERpYWxvZ0NvbmZpZzxhbnk+PignRElBTE9HX0lOVEVSQUNUSU9OX1NFUlZJQ0VfREVGQVVMVFMnKTtcblxuY2xhc3MgR3VhcmQgZXh0ZW5kcyBWYWx1ZU1vZGVsPGJvb2xlYW4+IHtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcih7IGluaXRpYWxWYWx1ZTogZmFsc2UgfSk7XG4gIH1cblxuICBnZXQgdmFsdWUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc3RvcmUucmVhZCgpO1xuICB9XG5cbiAgd2hpbGVUcnVlPFI+KGZ1bjogKCkgPT4gUik6IFIge1xuICAgIHRoaXMuc3RhcnRUcmFuc2FjdGlvbigpLmNvbW1pdCh0cnVlKTtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGZ1bigpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLnN0YXJ0VHJhbnNhY3Rpb24oKS5jb21taXQoZmFsc2UpO1xuICAgIH1cbiAgfVxuXG4gIHJ1bklmRmFsc2U8Uj4oZnVuOiAoKSA9PiBSLCBkZWZhdWx0VmFsdWU6IFIgPSBudWxsKTogUiB7XG4gICAgcmV0dXJuICF0aGlzLnZhbHVlID8gZnVuKCkgOiBkZWZhdWx0VmFsdWU7XG4gIH1cbn1cblxuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBEaWFsb2dJbnRlcmFjdGlvblNlcnZpY2UgZXh0ZW5kcyBJbnRlcmFjdGlvbkNvbnRleHQge1xuXG4gIHByaXZhdGUgc3RhcnRpbmdHdWFyZCA9IG5ldyBHdWFyZCgpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9pbkFjdGl2aXR5UHJvbWlzZSA9IG5ldyBNdXRhYmxlVmFsdWVNb2RlbDxib29sZWFuPihmYWxzZSk7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBkaWFsb2dTZXJ2aWNlOiBNYXREaWFsb2csXG4gICAgICAgICAgICAgIHJlYWRvbmx5IGxvY2F0aW9uOiBMb2NhdGlvbixcbiAgICAgICAgICAgICAgcmVhZG9ubHkgcm91dGVyOiBSb3V0ZXIsXG4gICAgICAgICAgICAgIEBPcHRpb25hbCgpIEBJbmplY3QoRElBTE9HX0lOVEVSQUNUSU9OX1NFUlZJQ0VfREVGQVVMVFMpIHJlYWRvbmx5IGRpYWxvZ1NlcnZpY2VEZWZhdWx0czogTWF0RGlhbG9nQ29uZmlnPGFueT4sXG4gICAgICAgICAgICAgIEBPcHRpb25hbCgpIEBJbmplY3QoTUFUX0RJQUxPR19ERUZBVUxUX09QVElPTlMpIHJlYWRvbmx5IG1hdERpYWxvZ0RlZmF1bHRDb25maWc6IE1hdERpYWxvZ0NvbmZpZzxhbnk+XG4gICkge1xuICAgIHN1cGVyKCk7XG4gICAgYXNzZXJ0Lm5vdE5pbChkaWFsb2dTZXJ2aWNlKTtcbiAgfVxuXG4gIGlzQWN0aXZlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9pbkFjdGl2aXR5UHJvbWlzZS52YWx1ZTtcbiAgfVxuXG4gIGdldCBhY3RpdmUoKTogVmFsdWVNb2RlbDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX2luQWN0aXZpdHlQcm9taXNlLnJlYWRvbmx5O1xuICB9XG5cbiAgc3RhcnRBY3Rpdml0eTxELCBSLCBFPihhY3Rpdml0eVR5cGU6IENvbnN0cnVjdGFibGU8QWN0aXZpdHk8RCwgUiwgRT4+LCBkYXRhPzogRCk6IFByb21pc2U8Uj4ge1xuICAgIHJldHVybiB0aGlzLl9zdGFydEFjdGl2aXR5KGFjdGl2aXR5VHlwZSwgZGF0YSk7XG4gIH1cblxuICBwcml2YXRlIF9zdGFydEFjdGl2aXR5PEQsIFIsIEU+KGFjdGl2aXR5VHlwZTogQ29uc3RydWN0YWJsZTxBY3Rpdml0eTxELCBSLCBFPj4sIGRhdGE6IEQsIGRpc2FibGVDbG9zZTogYm9vbGVhbiA9IHRydWUpIHtcbiAgICBpZiAodGhpcy5pc0FjdGl2ZSgpKSB7XG4gICAgICBsYW5nLmlsbGVnYWxTdGF0ZShgQWN0aXZpdHkgYWxyZWFkeSBpbiBwcm9ncmVzczogJHt0aGlzLmFjdGl2aXR5TGlzdC52YWx1ZS5tYXAoYSA9PiBhLmNvbnN0cnVjdG9yLm5hbWUpLmpvaW4oJywgJyl9YCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnN0YXJ0aW5nR3VhcmQud2hpbGVUcnVlKCgpID0+IHtcbiAgICAgIC8vIGNvbnNvbGUubG9nKCcjIyMjIyMgIFNUQVJUSU5HJyk7XG4gICAgICB0aGlzLl9pbkFjdGl2aXR5UHJvbWlzZS52YWx1ZSA9IHRydWU7XG4gICAgICAvLyB0aGlzLmN1cnJlbnRBY3Rpdml0eUlkID0gdXVpZC52MSgpO1xuICAgICAgLy8gdGhpcy5sb2NhdGlvbi5nbyh0aGlzLnJvdXRlci5yb3V0ZXJTdGF0ZS5zbmFwc2hvdC51cmwsIFwiYXVwXCIpO1xuXG4gICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgIGNvbnN0IGNvbmZpZzogTWF0RGlhbG9nQ29uZmlnID0ge1xuICAgICAgICBhdXRvRm9jdXM6IGZhbHNlLFxuICAgICAgICBoYXNCYWNrZHJvcDogdHJ1ZSxcbiAgICAgICAgY2xvc2VPbk5hdmlnYXRpb246IGZhbHNlLFxuICAgICAgICAuLi50aGlzLm1hdERpYWxvZ0RlZmF1bHRDb25maWcsXG4gICAgICAgIC4uLnRoaXMuZGlhbG9nU2VydmljZURlZmF1bHRzLFxuICAgICAgICAuLi57XG4gICAgICAgICAgZGF0YSxcbiAgICAgICAgICBkaXNhYmxlQ2xvc2UsXG4gICAgICAgICAgcGFuZWxDbGFzczogJ2RpYWxvZy1pbnRlcmFjdGlvbi1zZXJ2aWNlJ1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgY29uc3QgbWF0RGlhbG9nUmVmID0gdGhpcy5kaWFsb2dTZXJ2aWNlLm9wZW4oQWN0aXZpdHlDb250YWluZXJDb21wb25lbnQsIGNvbmZpZykgYXMgTWF0RGlhbG9nUmVmPEFjdGl2aXR5Q29udGFpbmVyQ29tcG9uZW50PEQsIFIsIEU+PjtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZTxSPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGNvbnN0IGFjdGl2aXR5Q29udGFpbmVyID0gbWF0RGlhbG9nUmVmLmNvbXBvbmVudEluc3RhbmNlO1xuICAgICAgICBzZWxmLnNhZmVseVVwZGF0ZUFjdGl2aXR5TGlzdERlbGVnYXRlKGFjdGl2aXR5Q29udGFpbmVyLmFjdGl2aXR5TGlzdCk7XG5cbiAgICAgICAgYWN0aXZpdHlDb250YWluZXIuaW5pdGlhbEFjdGl2aXR5T3V0bGV0Q29udGV4dCA9IHtcbiAgICAgICAgICBhY3Rpdml0eUNsYXNzOiBhY3Rpdml0eVR5cGUsXG4gICAgICAgICAgYWN0aXZpdHlEYXRhOiBkYXRhLFxuICAgICAgICAgIG9uRG9uZShyZXN1bHQpIHtcbiAgICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgICAgIG1hdERpYWxvZ1JlZi5jbG9zZSh0cnVlKTsgLy8gcmV0dXJuIHRydWUgdG8gbGV0IHRoZSBhZnRlciBjbG9zZSBsaXN0ZW5lciBrbm93IHdlJ3ZlIGFscmVhZHkgaGFuZGxlZCBpdC5cbiAgICAgICAgICB9LFxuICAgICAgICAgIG9uQ2FuY2VsKGVycm9yKSB7XG4gICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgbWF0RGlhbG9nUmVmLmNsb3NlKHRydWUpOyAvLyByZXR1cm4gdHJ1ZSB0byBsZXQgdGhlIGFmdGVyIGNsb3NlIGxpc3RlbmVyIGtub3cgd2UndmUgYWxyZWFkeSBoYW5kbGVkIGl0LlxuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgLy8gd2UgbmVlZCB0byBjaGVjayBpZiBvdXIgb25Eb25lL29uQ2FuY2VsIG1ldGhvZHMgYWJvdmUgd2UgY2FsbGVkIG9yIGlmIHdlIHdlcmVcbiAgICAgICAgLy8gY2xvc2VkIGJ5IHRoZSB1c2VyIGNsaWNraW5nIHRoZSBiYWNrZHJvcC4gIElmIHRoZSBsYXRlciB0aGVuIHdlIG5lZWQgdG8gcmVqZWN0XG4gICAgICAgIC8vIG91ciBwcm9taXNlLlxuICAgICAgICBtYXREaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUocHJvbWlzZUFscmVhZHlGaW5pc2hlZCA9PiB7XG4gICAgICAgICAgaWYgKCFwcm9taXNlQWxyZWFkeUZpbmlzaGVkKSB7XG4gICAgICAgICAgICByZWplY3QoJ2F1dG8tY2xvc2VkJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgbWF0RGlhbG9nUmVmLnVwZGF0ZVNpemUoKTtcbiAgICAgIH0pLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICB0aGlzLl9pbkFjdGl2aXR5UHJvbWlzZS52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAvLyBjb25zb2xlLmxvZygnIyMjIyMjICBGSU5JU0hFRCcpO1xuICAgICAgICAvLyB0aGlzLmN1cnJlbnRBY3Rpdml0eUlkID0gbnVsbDtcbiAgICAgICAgc2VsZi5zYWZlbHlVcGRhdGVBY3Rpdml0eUxpc3REZWxlZ2F0ZShudWxsKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGVoIGRlbGVnYXRlIG9uIHRoZSBuZXh0IHRpY2sgdG8gYXZvaWQgbW9kaWZ5aW5nIHN0YXRlIGR1cmluZyB0aGUgY3VycmVudCBjaGFuZ2UgZGV0ZWN0aW9uIGN5Y2xlLlxuICAgKiBAcGFyYW0gZGVsZWdhdGVcbiAgICovXG4gIHNhZmVseVVwZGF0ZUFjdGl2aXR5TGlzdERlbGVnYXRlKGRlbGVnYXRlOiBMaXN0TW9kZWw8QWN0aXZpdHk8YW55LCBhbnk+Pikge1xuICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5zZXRBY3Rpdml0eUxpc3QoZGVsZWdhdGUpKTtcbiAgfVxuXG4gIGFsZXJ0KGFsZXJ0OiBBbGVydCk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIFRPRE86IFRlc3QgZGlzYWJsZUNsb3NlID09PSBmYWxzZVxuICAgIHJldHVybiB0aGlzLl9zdGFydEFjdGl2aXR5KEFsZXJ0RGlhbG9nQ29tcG9uZW50LCBhbGVydCwgZmFsc2UpO1xuICB9XG5cbiAgY29uZmlybU9yUmVqZWN0KGNvbmZpcm06IENvbmZpcm0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5fc3RhcnRBY3Rpdml0eShDb25maXJtYXRpb25EaWFsb2dDb21wb25lbnQsIGNvbmZpcm0sIHRydWUpO1xuICB9XG5cbiAgY29uZmlybVRoZW48RCwgUiwgRT4oY29uZmlybTogQ29uZmlybSwgYWN0aXZpdHlUeXBlOiBDb25zdHJ1Y3RhYmxlPEFjdGl2aXR5PEQsIFIsIEU+PiwgZGF0YT86IEQpOiBQcm9taXNlPFI+IHtcbiAgICByZXR1cm4gdGhpcy5fc3RhcnRBY3Rpdml0eTxDb25maXJtVGhlbkRpYWxvZ0NvbXBvbmVudC5EYXRhPEQsIFIsIEU+LCBSLCBFPihDb25maXJtVGhlbkRpYWxvZ0NvbXBvbmVudCwge1xuICAgICAgY29uZmlybSxcbiAgICAgIGFjdGl2aXR5VHlwZTogYWN0aXZpdHlUeXBlLFxuICAgICAgZGF0YTogZGF0YVxuICAgIH0sIHRydWUpO1xuICB9XG59XG4iXX0=
179
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhbG9nLWludGVyYWN0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AY29vbG9uL2FuZ3VsYXItdWktcG93ZXJ1cHMvIiwic291cmNlcyI6WyJsaWIvaW50ZXJhY3Rpb24vc2VydmljZXMvZGlhbG9nLWludGVyYWN0aW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUM5QyxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDdkYsT0FBTyxFQUFzQyxHQUFHLEVBQUUsSUFBSSxFQUFFLGlCQUFpQixFQUFTLE1BQU0sZ0JBQWdCLENBQUM7QUFDekcsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBR3RELE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3hFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDOzs7O0FBRXRFLE1BQU0sS0FBTyxtQ0FBbUMsR0FBRyxJQUFJLGNBQWMsQ0FBdUIscUNBQXFDLENBQUM7QUFFbEk7SUFHOEMsb0RBQXVCO0lBTW5FLGtDQUE2QixhQUF3QixFQUN5QixxQkFBMkMsRUFDcEQsc0JBQTRDO1FBRmpILFlBSUUsaUJBQU8sU0FJUjtRQVI0QixtQkFBYSxHQUFiLGFBQWEsQ0FBVztRQUN5QiwyQkFBcUIsR0FBckIscUJBQXFCLENBQXNCO1FBQ3BELDRCQUFzQixHQUF0QixzQkFBc0IsQ0FBc0I7UUFOekcsb0NBQThCLEdBQUcsSUFBSSxpQkFBaUIsRUFBc0IsQ0FBQztRQVNuRixNQUFNLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3ZCLElBQUEsMkJBQWtG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dUJBb0JyQyxRQUFRLFlBQUksTUFBTSxTQUFDLG1DQUFtQztnQkFwQmhDLGVBQWUsdUJBcUJyQyxRQUFRLFlBQUksTUFBTSxTQUFDLDBCQUEwQjs7O21DQXZCNUQ7Q0E2RkMsQUFqRkQsQ0FHOEMsdUJBQXVCLEdBOEVwRTtTQTlFWSx3QkFBd0I7Ozs7OztJQUVuQyxrRUFBcUY7O0lBQ3JGLDBDQUF3Qzs7Ozs7SUFDeEMsb0RBQTZDOzs7OztJQUVqQyxpREFBeUM7O0lBQ3pDLHlEQUE2Rzs7SUFDN0csMERBQXFHIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlLCBJbmplY3Rpb25Ub2tlbiwgT3B0aW9uYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1hdERpYWxvZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsJztcbmltcG9ydCB7IE1BVF9ESUFMT0dfREVGQVVMVF9PUFRJT05TLCBNYXREaWFsb2dDb25maWcgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuaW1wb3J0IHsgQm9vbGVhblZhbHVlTW9kZWxDaGFpbiwgRGlzcG9zYWJsZSwgRHNsLCBsYW5nLCBNdXRhYmxlVmFsdWVNb2RlbCwgVHJhY2UgfSBmcm9tICdAY29vbG9uL3BlY3Rpbic7XG5pbXBvcnQgeyBhc3NlcnQgfSBmcm9tICdAY29vbG9uL3R5cGVzY3JpcHQtdXRpbGl0aWVzJztcbmltcG9ydCB7IEFjdGl2aXR5IH0gZnJvbSAnLi4vYWN0aXZpdHknO1xuaW1wb3J0IHsgSW50ZXJhY3Rpb25Db250ZXh0IH0gZnJvbSAnLi4vaW50ZXJhY3Rpb24tY29udGV4dCc7XG5pbXBvcnQgeyBEaWFsb2dJbnRlcmFjdGlvbkNvbnRleHQgfSBmcm9tICcuL2RpYWxvZy1pbnRlcmFjdGlvbi1jb250ZXh0JztcbmltcG9ydCB7IE1vZGFsSW50ZXJhY3Rpb25TZXJ2aWNlIH0gZnJvbSAnLi9tb2RhbC1pbnRlcmFjdGlvbi5zZXJ2aWNlJztcblxuZXhwb3J0IGNvbnN0IERJQUxPR19JTlRFUkFDVElPTl9TRVJWSUNFX0RFRkFVTFRTID0gbmV3IEluamVjdGlvblRva2VuPE1hdERpYWxvZ0NvbmZpZzxhbnk+PignRElBTE9HX0lOVEVSQUNUSU9OX1NFUlZJQ0VfREVGQVVMVFMnKTtcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgRGlhbG9nSW50ZXJhY3Rpb25TZXJ2aWNlIGV4dGVuZHMgTW9kYWxJbnRlcmFjdGlvblNlcnZpY2Uge1xuXG4gIHByaXZhdGUgX2FjdGl2ZUludGVyYWN0aW9uQ29udGV4dE1vZGVsID0gbmV3IE11dGFibGVWYWx1ZU1vZGVsPEludGVyYWN0aW9uQ29udGV4dD4oKTtcbiAgcmVhZG9ubHkgYWN0aXZlOiBCb29sZWFuVmFsdWVNb2RlbENoYWluO1xuICBwcml2YXRlIGV4Y2x1c2l2ZUNvbnRleHQ6IEludGVyYWN0aW9uQ29udGV4dDtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGRpYWxvZ1NlcnZpY2U6IE1hdERpYWxvZyxcbiAgICAgICAgICAgICAgQE9wdGlvbmFsKCkgQEluamVjdChESUFMT0dfSU5URVJBQ1RJT05fU0VSVklDRV9ERUZBVUxUUykgcmVhZG9ubHkgZGlhbG9nU2VydmljZURlZmF1bHRzOiBNYXREaWFsb2dDb25maWc8YW55PixcbiAgICAgICAgICAgICAgQE9wdGlvbmFsKCkgQEluamVjdChNQVRfRElBTE9HX0RFRkFVTFRfT1BUSU9OUykgcmVhZG9ubHkgbWF0RGlhbG9nRGVmYXVsdENvbmZpZzogTWF0RGlhbG9nQ29uZmlnPGFueT5cbiAgKSB7XG4gICAgc3VwZXIoKTtcbiAgICBhc3NlcnQubm90TmlsKGRpYWxvZ1NlcnZpY2UpO1xuICAgIGNvbnN0IHsgY2hhaW4sIHZhbHVlT2YsIGJlZm9yZSwgd2hlbiwgYWZ0ZXIsIG9ic2VydmUsIHN3aXRjaE9uIH0gPSBEc2wuZGlzcG9zZVdpdGgodGhpcyk7XG4gICAgdGhpcy5hY3RpdmUgPSBjaGFpbih0aGlzLl9hY3RpdmVJbnRlcmFjdGlvbkNvbnRleHRNb2RlbCkuaXNOb3ROaWwoKTtcbiAgfVxuXG4gIGNyZWF0ZUludGVyYWN0aW9uQ29udGV4dEZvcihkaXNwb3NhYmxlOiBEaXNwb3NhYmxlLkNvbGxlY3Rvcik6IEludGVyYWN0aW9uQ29udGV4dCB7XG4gICAgcmV0dXJuIGRpc3Bvc2FibGUucmVnaXN0ZXJEaXNwb3NhYmxlKHRoaXMuX2NyZWF0ZUludGVyYWN0aW9uQ29udGV4dCgpKVxuICB9XG5cbiAgX2NyZWF0ZUludGVyYWN0aW9uQ29udGV4dCgpOiBJbnRlcmFjdGlvbkNvbnRleHQge1xuICAgIGNvbnN0IGNvbmZpZzogTWF0RGlhbG9nQ29uZmlnID0ge1xuICAgICAgYXV0b0ZvY3VzOiBmYWxzZSxcbiAgICAgIGhhc0JhY2tkcm9wOiB0cnVlLFxuICAgICAgY2xvc2VPbk5hdmlnYXRpb246IGZhbHNlLFxuICAgICAgLi4udGhpcy5tYXREaWFsb2dEZWZhdWx0Q29uZmlnLFxuICAgICAgLi4udGhpcy5kaWFsb2dTZXJ2aWNlRGVmYXVsdHNcbiAgICB9O1xuXG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgY29uc3QgZGlhbG9nSW50ZXJhY3Rpb25Db250ZXh0ID0gbmV3IERpYWxvZ0ludGVyYWN0aW9uQ29udGV4dCh0aGlzLmRpYWxvZ1NlcnZpY2UsIGNvbmZpZyk7XG4gICAgZGlhbG9nSW50ZXJhY3Rpb25Db250ZXh0LnJlZ2lzdGVyRGlzcG9zYWJsZShkaWFsb2dJbnRlcmFjdGlvbkNvbnRleHQuYWRkQWN0aXZpdHlMaXN0ZW5lcih7XG4gICAgICBvbkFjdGl2aXR5U3RhcnRlZCgpOiB2b2lkIHtcbiAgICAgICAgc2VsZi5vbkFjdGl2aXR5U3RhcnRlZChkaWFsb2dJbnRlcmFjdGlvbkNvbnRleHQpO1xuICAgICAgfSxcbiAgICAgIG9uQWN0aXZpdHlGaW5pc2hlZCgpOiB2b2lkIHtcbiAgICAgICAgc2VsZi5vbkFjdGl2aXR5RmluaXNoZWQoZGlhbG9nSW50ZXJhY3Rpb25Db250ZXh0KTtcbiAgICAgIH1cbiAgICB9KSk7XG4gICAgcmV0dXJuIGRpYWxvZ0ludGVyYWN0aW9uQ29udGV4dDtcbiAgfVxuXG4gIGNyZWF0ZUV4Y2x1c2l2ZUludGVyYWN0aW9uQ29udGV4dCgpOiBJbnRlcmFjdGlvbkNvbnRleHQge1xuICAgIHRoaXMuZXhjbHVzaXZlQ29udGV4dCA9IHRoaXMuX2NyZWF0ZUludGVyYWN0aW9uQ29udGV4dCgpO1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgIHRoaXMuZXhjbHVzaXZlQ29udGV4dC5yZWdpc3RlckRpc3Bvc2FibGUoe1xuICAgICAgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICAgICAgc2VsZi5leGNsdXNpdmVDb250ZXh0ID0gbnVsbDtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5leGNsdXNpdmVDb250ZXh0O1xuICB9XG5cbiAgLy8gQFRyYWNlKClcbiAgb25BY3Rpdml0eVN0YXJ0ZWQoZGlhbG9nSW50ZXJhY3Rpb25Db250ZXh0OiBEaWFsb2dJbnRlcmFjdGlvbkNvbnRleHQpIHtcbiAgICBhc3NlcnQuaXNGYWxzZXkodGhpcy5pc0FjdGl2ZSgpKTtcbiAgICBpZiAodGhpcy5leGNsdXNpdmVDb250ZXh0ICYmIGRpYWxvZ0ludGVyYWN0aW9uQ29udGV4dCAhPT0gdGhpcy5leGNsdXNpdmVDb250ZXh0KSB7XG4gICAgICBsYW5nLmlsbGVnYWxTdGF0ZShcIkludGVyYWN0aW9uIHN0YXJ0ZWQgd2hpbGUgZXhjbHVzaXZlIGxvY2sgYWN0aXZlLiAgVGhpcyBpcyB1c3VhbGx5IGJlY2F1c2UgeW91IHVzaW5nIGEgZGlmZmVyZW50IGNvbnRleHQgZHVyaW5nIHBsYWNlLmNhbkRlYWN0aXZhdGUoaW50ZXJhY3Rpb25Db250ZXh0KVwiKTtcbiAgICB9XG4gICAgdGhpcy5fYWN0aXZlSW50ZXJhY3Rpb25Db250ZXh0TW9kZWwudmFsdWUgPSBkaWFsb2dJbnRlcmFjdGlvbkNvbnRleHQ7XG4gICAgdGhpcy5ub3RpZnlBY3Rpdml0eVN0YXJ0ZWQoKTtcbiAgfVxuXG4gIC8vIEBUcmFjZSgpXG4gIG9uQWN0aXZpdHlGaW5pc2hlZChkaWFsb2dJbnRlcmFjdGlvbkNvbnRleHQ6IERpYWxvZ0ludGVyYWN0aW9uQ29udGV4dCkge1xuICAgIGFzc2VydC5pc1RydXRoeSh0aGlzLl9hY3RpdmVJbnRlcmFjdGlvbkNvbnRleHRNb2RlbC52YWx1ZSA9PT0gZGlhbG9nSW50ZXJhY3Rpb25Db250ZXh0KTtcbiAgICB0aGlzLl9hY3RpdmVJbnRlcmFjdGlvbkNvbnRleHRNb2RlbC52YWx1ZSA9IG51bGw7XG4gICAgdGhpcy5ub3RpZnlBY3Rpdml0eUZpbmlzaGVkKCk7XG4gIH1cblxuICBhc3luYyBnZXRDdXJyZW50QWN0aXZpdHkoKTogUHJvbWlzZTxBY3Rpdml0eTxhbnksIGFueSwgYW55Pj4ge1xuICAgIGFzc2VydC5pc1RydXRoeSh0aGlzLmlzQWN0aXZlKCkpO1xuICAgIHJldHVybiB0aGlzLl9hY3RpdmVJbnRlcmFjdGlvbkNvbnRleHRNb2RlbC52YWx1ZS5nZXRDdXJyZW50QWN0aXZpdHkoKTtcbiAgfVxuXG5cblxuXG59XG4iXX0=
@@ -0,0 +1,153 @@
1
+ /**
2
+ * @fileoverview added by tsickle
3
+ * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
4
+ */
5
+ import * as tslib_1 from "tslib";
6
+ import { EventListenerList, GarbageCollector, ValueModel } from '@coolon/pectin';
7
+ var Guard = /** @class */ (function (_super) {
8
+ tslib_1.__extends(Guard, _super);
9
+ function Guard() {
10
+ return _super.call(this, { initialValue: false }) || this;
11
+ }
12
+ Object.defineProperty(Guard.prototype, "value", {
13
+ get: /**
14
+ * @return {?}
15
+ */
16
+ function () {
17
+ return this.store.read();
18
+ },
19
+ enumerable: true,
20
+ configurable: true
21
+ });
22
+ /**
23
+ * @template R
24
+ * @param {?} fun
25
+ * @return {?}
26
+ */
27
+ Guard.prototype.whileTrue = /**
28
+ * @template R
29
+ * @param {?} fun
30
+ * @return {?}
31
+ */
32
+ function (fun) {
33
+ this.startTransaction().commit(true);
34
+ try {
35
+ return fun();
36
+ }
37
+ finally {
38
+ this.startTransaction().commit(false);
39
+ }
40
+ };
41
+ /**
42
+ * @template R
43
+ * @param {?} fun
44
+ * @param {?=} defaultValue
45
+ * @return {?}
46
+ */
47
+ Guard.prototype.runIfFalse = /**
48
+ * @template R
49
+ * @param {?} fun
50
+ * @param {?=} defaultValue
51
+ * @return {?}
52
+ */
53
+ function (fun, defaultValue) {
54
+ if (defaultValue === void 0) { defaultValue = null; }
55
+ return !this.value ? fun() : defaultValue;
56
+ };
57
+ return Guard;
58
+ }(ValueModel));
59
+ /**
60
+ * @abstract
61
+ */
62
+ var /**
63
+ * @abstract
64
+ */
65
+ ModalInteractionService = /** @class */ (function (_super) {
66
+ tslib_1.__extends(ModalInteractionService, _super);
67
+ function ModalInteractionService() {
68
+ var _this = _super.call(this) || this;
69
+ _this._activityListeners = new EventListenerList();
70
+ return _this;
71
+ }
72
+ /**
73
+ * @return {?}
74
+ */
75
+ ModalInteractionService.prototype.isActive = /**
76
+ * @return {?}
77
+ */
78
+ function () {
79
+ return this.active.value;
80
+ };
81
+ /**
82
+ * @param {?} listener
83
+ * @return {?}
84
+ */
85
+ ModalInteractionService.prototype.addActivityListener = /**
86
+ * @param {?} listener
87
+ * @return {?}
88
+ */
89
+ function (listener) {
90
+ return this._activityListeners.add(listener);
91
+ };
92
+ /**
93
+ * @protected
94
+ * @return {?}
95
+ */
96
+ ModalInteractionService.prototype.notifyActivityStarted = /**
97
+ * @protected
98
+ * @return {?}
99
+ */
100
+ function () {
101
+ this._activityListeners.fire((/**
102
+ * @param {?} l
103
+ * @return {?}
104
+ */
105
+ function (l) { return l.onActivityStarted(); }));
106
+ };
107
+ /**
108
+ * @protected
109
+ * @return {?}
110
+ */
111
+ ModalInteractionService.prototype.notifyActivityFinished = /**
112
+ * @protected
113
+ * @return {?}
114
+ */
115
+ function () {
116
+ this._activityListeners.fire((/**
117
+ * @param {?} l
118
+ * @return {?}
119
+ */
120
+ function (l) { return l.onActivityFinished(); }));
121
+ };
122
+ return ModalInteractionService;
123
+ }(GarbageCollector));
124
+ /**
125
+ * @abstract
126
+ */
127
+ export { ModalInteractionService };
128
+ if (false) {
129
+ /**
130
+ * @type {?}
131
+ * @private
132
+ */
133
+ ModalInteractionService.prototype._activityListeners;
134
+ /** @type {?} */
135
+ ModalInteractionService.prototype.active;
136
+ /**
137
+ * @abstract
138
+ * @param {?} disposable
139
+ * @return {?}
140
+ */
141
+ ModalInteractionService.prototype.createInteractionContextFor = function (disposable) { };
142
+ /**
143
+ * @abstract
144
+ * @return {?}
145
+ */
146
+ ModalInteractionService.prototype.createExclusiveInteractionContext = function () { };
147
+ /**
148
+ * @abstract
149
+ * @return {?}
150
+ */
151
+ ModalInteractionService.prototype.getCurrentActivity = function () { };
152
+ }
153
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwtaW50ZXJhY3Rpb24uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0Bjb29sb24vYW5ndWxhci11aS1wb3dlcnVwcy8iLCJzb3VyY2VzIjpbImxpYi9pbnRlcmFjdGlvbi9zZXJ2aWNlcy9tb2RhbC1pbnRlcmFjdGlvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUFjLGlCQUFpQixFQUFFLGdCQUFnQixFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBSTdGO0lBQW9CLGlDQUFtQjtJQUVyQztlQUNFLGtCQUFNLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxDQUFDO0lBQ2hDLENBQUM7SUFFRCxzQkFBSSx3QkFBSzs7OztRQUFUO1lBQ0UsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzNCLENBQUM7OztPQUFBOzs7Ozs7SUFFRCx5QkFBUzs7Ozs7SUFBVCxVQUFhLEdBQVk7UUFDdkIsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3JDLElBQUk7WUFDRixPQUFPLEdBQUcsRUFBRSxDQUFDO1NBQ2Q7Z0JBQVM7WUFDUixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDdkM7SUFDSCxDQUFDOzs7Ozs7O0lBRUQsMEJBQVU7Ozs7OztJQUFWLFVBQWMsR0FBWSxFQUFFLFlBQXNCO1FBQXRCLDZCQUFBLEVBQUEsbUJBQXNCO1FBQ2hELE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDO0lBQzVDLENBQUM7SUFDSCxZQUFDO0FBQUQsQ0FBQyxBQXRCRCxDQUFvQixVQUFVLEdBc0I3Qjs7OztBQUVEOzs7O0lBQXNELG1EQUFnQjtJQUlwRTtRQUFBLFlBQ0UsaUJBQU8sU0FDUjtRQUpnQix3QkFBa0IsR0FBRyxJQUFJLGlCQUFpQixFQUErQixDQUFDOztJQUkzRixDQUFDOzs7O0lBSUQsMENBQVE7OztJQUFSO1FBQ0UsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztJQUMzQixDQUFDOzs7OztJQU1ELHFEQUFtQjs7OztJQUFuQixVQUFvQixRQUFxQztRQUN2RCxPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDL0MsQ0FBQzs7Ozs7SUFFUyx1REFBcUI7Ozs7SUFBL0I7UUFDRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSTs7OztRQUFDLFVBQUEsQ0FBQyxJQUFJLE9BQUEsQ0FBQyxDQUFDLGlCQUFpQixFQUFFLEVBQXJCLENBQXFCLEVBQUMsQ0FBQztJQUMzRCxDQUFDOzs7OztJQUVTLHdEQUFzQjs7OztJQUFoQztRQUNFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJOzs7O1FBQUMsVUFBQSxDQUFDLElBQUksT0FBQSxDQUFDLENBQUMsa0JBQWtCLEVBQUUsRUFBdEIsQ0FBc0IsRUFBQyxDQUFDO0lBQzVELENBQUM7SUFDSCw4QkFBQztBQUFELENBQUMsQUE3QkQsQ0FBc0QsZ0JBQWdCLEdBNkJyRTs7Ozs7Ozs7OztJQTNCQyxxREFBMkY7O0lBTTNGLHlDQUE4Qzs7Ozs7O0lBTTlDLDBGQUEyRjs7Ozs7SUFDM0Ysc0ZBQWlFOzs7OztJQUNqRSx1RUFBc0UiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXNwb3NhYmxlLCBFdmVudExpc3RlbmVyTGlzdCwgR2FyYmFnZUNvbGxlY3RvciwgVmFsdWVNb2RlbCB9IGZyb20gJ0Bjb29sb24vcGVjdGluJztcbmltcG9ydCB7IEFjdGl2aXR5IH0gZnJvbSAnLi4vYWN0aXZpdHknO1xuaW1wb3J0IHsgSW50ZXJhY3Rpb25Db250ZXh0IH0gZnJvbSAnLi4vaW50ZXJhY3Rpb24tY29udGV4dCc7XG5cbmNsYXNzIEd1YXJkIGV4dGVuZHMgVmFsdWVNb2RlbDxib29sZWFuPiB7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoeyBpbml0aWFsVmFsdWU6IGZhbHNlIH0pO1xuICB9XG5cbiAgZ2V0IHZhbHVlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnN0b3JlLnJlYWQoKTtcbiAgfVxuXG4gIHdoaWxlVHJ1ZTxSPihmdW46ICgpID0+IFIpOiBSIHtcbiAgICB0aGlzLnN0YXJ0VHJhbnNhY3Rpb24oKS5jb21taXQodHJ1ZSk7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBmdW4oKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5zdGFydFRyYW5zYWN0aW9uKCkuY29tbWl0KGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICBydW5JZkZhbHNlPFI+KGZ1bjogKCkgPT4gUiwgZGVmYXVsdFZhbHVlOiBSID0gbnVsbCk6IFIge1xuICAgIHJldHVybiAhdGhpcy52YWx1ZSA/IGZ1bigpIDogZGVmYXVsdFZhbHVlO1xuICB9XG59XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBNb2RhbEludGVyYWN0aW9uU2VydmljZSBleHRlbmRzIEdhcmJhZ2VDb2xsZWN0b3Ige1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2FjdGl2aXR5TGlzdGVuZXJzID0gbmV3IEV2ZW50TGlzdGVuZXJMaXN0PEludGVyYWN0aW9uQ29udGV4dC5MaXN0ZW5lcj4oKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgYWJzdHJhY3QgcmVhZG9ubHkgYWN0aXZlOiBWYWx1ZU1vZGVsPGJvb2xlYW4+O1xuXG4gIGlzQWN0aXZlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmFjdGl2ZS52YWx1ZTtcbiAgfVxuXG4gIGFic3RyYWN0IGNyZWF0ZUludGVyYWN0aW9uQ29udGV4dEZvcihkaXNwb3NhYmxlOiBEaXNwb3NhYmxlLkNvbGxlY3Rvcik6IEludGVyYWN0aW9uQ29udGV4dDtcbiAgYWJzdHJhY3QgY3JlYXRlRXhjbHVzaXZlSW50ZXJhY3Rpb25Db250ZXh0KCk6IEludGVyYWN0aW9uQ29udGV4dDtcbiAgYWJzdHJhY3QgYXN5bmMgZ2V0Q3VycmVudEFjdGl2aXR5KCk6IFByb21pc2U8QWN0aXZpdHk8YW55LCBhbnksIGFueT4+O1xuXG4gIGFkZEFjdGl2aXR5TGlzdGVuZXIobGlzdGVuZXI6IEludGVyYWN0aW9uQ29udGV4dC5MaXN0ZW5lcik6IERpc3Bvc2FibGUge1xuICAgIHJldHVybiB0aGlzLl9hY3Rpdml0eUxpc3RlbmVycy5hZGQobGlzdGVuZXIpO1xuICB9XG5cbiAgcHJvdGVjdGVkIG5vdGlmeUFjdGl2aXR5U3RhcnRlZCgpIHtcbiAgICB0aGlzLl9hY3Rpdml0eUxpc3RlbmVycy5maXJlKGwgPT4gbC5vbkFjdGl2aXR5U3RhcnRlZCgpKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBub3RpZnlBY3Rpdml0eUZpbmlzaGVkKCkge1xuICAgIHRoaXMuX2FjdGl2aXR5TGlzdGVuZXJzLmZpcmUobCA9PiBsLm9uQWN0aXZpdHlGaW5pc2hlZCgpKTtcbiAgfVxufVxuIl19