ngx-speculoos 8.0.1 → 9.0.0

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.
@@ -89,7 +89,6 @@ class ActivatedRouteSnapshotStub extends ActivatedRouteSnapshot {
89
89
  this._firstChild = null;
90
90
  this._children = [];
91
91
  this._pathFromRoot = [];
92
- this._routeConfig = null;
93
92
  this._root = this;
94
93
  }
95
94
  get parent() {
@@ -122,13 +121,11 @@ class ActivatedRouteSnapshotStub extends ActivatedRouteSnapshot {
122
121
  set pathFromRoot(value) {
123
122
  this._pathFromRoot = value;
124
123
  }
125
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
126
- // @ts-ignore
127
- get routeConfig() {
128
- return this._routeConfig;
124
+ get title() {
125
+ return this._title;
129
126
  }
130
- set routeConfig(route) {
131
- this._routeConfig = route;
127
+ set title(value) {
128
+ this._title = value;
132
129
  }
133
130
  get paramMap() {
134
131
  return convertToParamMap(this.params);
@@ -173,8 +170,10 @@ export class ActivatedRouteStub extends ActivatedRoute {
173
170
  snapshot.params = options?.params ?? {};
174
171
  snapshot.queryParams = options?.queryParams ?? {};
175
172
  snapshot.data = options?.data ?? {};
173
+ snapshot.title = options?.title;
176
174
  snapshot.fragment = options?.fragment ?? null;
177
175
  snapshot.url = options?.url ?? [];
176
+ // @ts-expect-error the routeConfig is readonly, but we need to overwrite it here
178
177
  snapshot.routeConfig = options?.routeConfig ?? null;
179
178
  snapshot.firstChild = this.firstChild?.snapshot ?? null;
180
179
  snapshot.children = this.children?.map(route => route.snapshot) ?? [];
@@ -184,6 +183,7 @@ export class ActivatedRouteStub extends ActivatedRoute {
184
183
  this.paramsSubject = new BehaviorSubject(this.snapshot.params);
185
184
  this.queryParamsSubject = new BehaviorSubject(this.snapshot.queryParams);
186
185
  this.dataSubject = new BehaviorSubject(this.snapshot.data);
186
+ this.titleSubject = new BehaviorSubject(this.snapshot.title);
187
187
  this.fragmentSubject = new BehaviorSubject(this.snapshot.fragment);
188
188
  this.urlSubject = new BehaviorSubject(this.snapshot.url);
189
189
  this.params = this.paramsSubject.asObservable();
@@ -191,6 +191,8 @@ export class ActivatedRouteStub extends ActivatedRoute {
191
191
  this.data = this.dataSubject.asObservable();
192
192
  this.fragment = this.fragmentSubject.asObservable();
193
193
  this.url = this.urlSubject.asObservable();
194
+ // @ts-expect-error the title is readonly, but we need to be able to initialize it here
195
+ this.title = this.titleSubject.asObservable();
194
196
  }
195
197
  get root() {
196
198
  return this._root;
@@ -211,7 +213,7 @@ export class ActivatedRouteStub extends ActivatedRoute {
211
213
  return this.snapshot.routeConfig;
212
214
  }
213
215
  /**
214
- * Triggers a navigation with the given new parameters. All the other parts (query params etc.) stay as the are.
216
+ * Triggers a navigation with the given new parameters. All the other parts (query params etc.) stay as they are.
215
217
  * This is a shortcut to `triggerNavigation` that can be used to only change the parameters.
216
218
  */
217
219
  setParams(params) {
@@ -219,7 +221,7 @@ export class ActivatedRouteStub extends ActivatedRoute {
219
221
  }
220
222
  /**
221
223
  * Triggers a navigation with the given new parameter. The other parameters, as well as all the other parts (query params etc.)
222
- * stay as the are.
224
+ * stay as they are.
223
225
  * This is a shortcut to `triggerNavigation` that can be used to only change one parameter.
224
226
  */
225
227
  setParam(name, value) {
@@ -256,6 +258,14 @@ export class ActivatedRouteStub extends ActivatedRoute {
256
258
  setDataItem(name, value) {
257
259
  this.setData({ ...this.snapshot.data, [name]: value });
258
260
  }
261
+ /**
262
+ * Triggers a navigation with the given new title. The other parameters, as well as all the other parts (params etc.)
263
+ * stay as the are.
264
+ * This is a shortcut to `triggerNavigation` that can be used to only change the title.
265
+ */
266
+ setTitle(title) {
267
+ this.triggerNavigation({ title: { value: title } });
268
+ }
259
269
  /**
260
270
  * Triggers a navigation with the given new fragment. The other parts (params etc.) stay as the are.
261
271
  * This is a shortcut to `triggerNavigation` that can be used to only change the fragment.
@@ -279,6 +289,13 @@ export class ActivatedRouteStub extends ActivatedRoute {
279
289
  *
280
290
  * So, setting params and query params will make the params and queryParams observables emit, but not the fragment, data and
281
291
  * url observables for example. This is consistent to how the router behaves.
292
+ *
293
+ * Note: since the title of a route can become undefined, in order to be able to distinguish between a navigation which leaves the title
294
+ * as it is and a navigation that sets the title to undefined, a wrapper object is used for the title. So
295
+ *
296
+ * - `triggerNavigation({ params:... })` leaves the title as is because it's undefined in the options
297
+ * - `triggerNavigation({ title: { value: 'test' } })` sets the title to 'test'
298
+ * - `triggerNavigation({ title: { value: undefined } })` sets the title to undefined
282
299
  */
283
300
  triggerNavigation(options) {
284
301
  // set the snapshot first
@@ -294,6 +311,10 @@ export class ActivatedRouteStub extends ActivatedRoute {
294
311
  if (options.data) {
295
312
  this.snapshot.data = options.data;
296
313
  }
314
+ if (options.title) {
315
+ // @ts-expect-error the title is readonly, but we need to be able to overwrite it here
316
+ this.snapshot.title = options.title.value;
317
+ }
297
318
  if (options.url) {
298
319
  this.snapshot.url = options.url;
299
320
  }
@@ -310,6 +331,9 @@ export class ActivatedRouteStub extends ActivatedRoute {
310
331
  if (options.data) {
311
332
  this.dataSubject.next(this.snapshot.data);
312
333
  }
334
+ if (options.title) {
335
+ this.titleSubject.next(this.snapshot.title);
336
+ }
313
337
  if (options.url) {
314
338
  this.urlSubject.next(this.snapshot.url);
315
339
  }
@@ -324,4 +348,4 @@ export class ActivatedRouteStub extends ActivatedRoute {
324
348
  export function stubRoute(options) {
325
349
  return new ActivatedRouteStub(options);
326
350
  }
327
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc3BlY3Vsb29zL3NyYy9saWIvcm91dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxzQkFBc0IsRUFBRSxpQkFBaUIsRUFBNkMsTUFBTSxpQkFBaUIsQ0FBQztBQUN2SSxPQUFPLEVBQUUsZUFBZSxFQUFFLEdBQUcsRUFBYyxNQUFNLE1BQU0sQ0FBQztBQUd4RDs7Ozs7Ozs7Ozs7Ozs7OztHQWdCRztBQUNILE1BQU0sVUFBVSxTQUFTLENBQUMsT0E0QnpCO0lBQ0MsTUFBTSxNQUFNLEdBQUc7UUFDYixHQUFHLEVBQUUsT0FBTyxDQUFDLEdBQUc7UUFDaEIsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNO1FBQ3RCLFFBQVEsRUFBRSxPQUFPLENBQUMsTUFBTSxJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDekYsV0FBVyxFQUFFLE9BQU8sQ0FBQyxXQUFXO1FBQ2hDLGFBQWEsRUFBRSxPQUFPLENBQUMsV0FBVyxJQUFJLE9BQU8sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDeEcsUUFBUSxFQUFFLE9BQU8sQ0FBQyxRQUFRO1FBQzFCLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSTtRQUNsQixNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU07UUFDdEIsU0FBUyxFQUFFLE9BQU8sQ0FBQyxTQUFTO1FBQzVCLFFBQVEsRUFBRSxPQUFPLENBQUMsUUFBUTtRQUMxQixXQUFXLEVBQUUsT0FBTyxDQUFDLFdBQVc7UUFDaEMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJO1FB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QUFTLENBQUMsT0FBbUM7SUFDM0QsT0FBTyxJQUFJLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ3pDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgQWN0aXZhdGVkUm91dGVTbmFwc2hvdCwgY29udmVydFRvUGFyYW1NYXAsIERhdGEsIFBhcmFtTWFwLCBQYXJhbXMsIFJvdXRlLCBVcmxTZWdtZW50IH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgbWFwLCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBUeXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZha2UgcGFydGlhbCBBY3RpdmF0ZWRSb3V0ZSBmb3IgdGVzdHMuXG4gKlxuICogSWYgeW91IHBhc3MgcGFyYW1zLCB0aGVuIHRoZSBjcmVhdGVkIHJvdXRlJ3MgcGFyYW1NYXAgd2lsbCBjb250YWluIHRoZSBzYW1lIHZhbHVlcy5cbiAqIFRoZSBzYW1lIGdvZXMgZm9yIHF1ZXJ5UGFyYW1zIGFuZCBxdWVyeVBhcmFtTWFwLlxuICpcbiAqIElmIHlvdSBwYXNzIGEgcGFyZW50IHJvdXRlIGFuZCBhIHNuYXBzaG90LCBhbmQgdGhlIHBhc3NlZCBzbmFwc2hvdCBkb2Vzbid0IGhhdmUgYSBwYXJlbnQsIHRoZW4gdGhlIHNuYXBzaG90J3NcbiAqIHBhcmVudCB3aWxsIGJlIHNldCB0byB0aGUgcGFyZW50IHJvdXRlIHNuYXBzaG90LiBUaGlzIGFsbG93cyB0aGUgY29kZSB1bmRlciB0ZXN0IHRvIHVzZVxuICogYHJvdXRlLnBhcmVudC5zbmFwc2hvdGAgb3IgYHJvdXRlLnNuYXBzaG90LnBhcmVudGAuXG4gKlxuICogSWYgeW91IHBhc3MgYSBzbmFwc2hvdCB3aXRoIGEgcGFyZW50LCBidXQgZG9uJ3QgcGFzcyBhIHBhcmVudCBvciBwYXNzIGEgcGFyZW50IHdpdGhvdXQgc25hcHNob3QsIHRoZW4gdGhlIHJvdXRlJ3NcbiAqIHBhcmVudCBzbmFwc2hvdCB3aWxsIGJlIHNldCB0byB0aGUgZ2l2ZW4gc25hcHNob3QncyBwYXJlbnQuIFRoaXMgYWxsb3dzIHRoZSBjb2RlIHVuZGVyIHRlc3QgdG8gdXNlXG4gKiBgcm91dGUucGFyZW50LnNuYXBzaG90YCBvciBgcm91dGUuc25hcHNob3QucGFyZW50YC5cbiAqXG4gKiBAcmV0dXJucyBhIHBhcnRpYWxseSBwb3B1bGF0ZWQsIGZha2UgQWN0aXZhdGVkUm91dGUsIGRlcGVuZGluZyBvbiB3aGF0IHlvdSBwYXNzZWQgaW5cbiAqIEBkZXByZWNhdGVkIGZhdm9yIHN0dWJSb3V0ZSwgd2hpY2ggY3JlYXRlcyBhbiBlYXNpZXIgdG8gdXNlIGFuZCBtb3JlIGxvZ2ljYWwgc3R1YlxuICovXG5leHBvcnQgZnVuY3Rpb24gZmFrZVJvdXRlKG9wdGlvbnM6IHtcbiAgdXJsPzogT2JzZXJ2YWJsZTxVcmxTZWdtZW50W10+O1xuICAvKiogQW4gb2JzZXJ2YWJsZSBvZiB0aGUgbWF0cml4IHBhcmFtZXRlcnMgc2NvcGVkIHRvIHRoaXMgcm91dGUgKi9cbiAgcGFyYW1zPzogT2JzZXJ2YWJsZTxQYXJhbXM+O1xuICAvKiogQW4gb2JzZXJ2YWJsZSBvZiB0aGUgcXVlcnkgcGFyYW1ldGVycyBzaGFyZWQgYnkgYWxsIHRoZSByb3V0ZXMgKi9cbiAgcXVlcnlQYXJhbXM/OiBPYnNlcnZhYmxlPFBhcmFtcz47XG4gIC8qKiBBbiBvYnNlcnZhYmxlIG9mIHRoZSBVUkwgZnJhZ21lbnQgc2hhcmVkIGJ5IGFsbCB0aGUgcm91dGVzICovXG4gIGZyYWdtZW50PzogT2JzZXJ2YWJsZTxzdHJpbmc+O1xuICAvKiogQW4gb2JzZXJ2YWJsZSBvZiB0aGUgc3RhdGljIGFuZCByZXNvbHZlZCBkYXRhIG9mIHRoaXMgcm91dGUuICovXG4gIGRhdGE/OiBPYnNlcnZhYmxlPERhdGE+O1xuICAvKiogVGhlIG91dGxldCBuYW1lIG9mIHRoZSByb3V0ZS4gSXQncyBhIGNvbnN0YW50ICovXG4gIG91dGxldD86IHN0cmluZztcbiAgLyoqIFRoZSBjb21wb25lbnQgb2YgdGhlIHJvdXRlLiBJdCdzIGEgY29uc3RhbnQgKi9cbiAgY29tcG9uZW50PzogVHlwZTx1bmtub3duPiB8IHN0cmluZyB8IG51bGw7XG4gIC8qKiBUaGUgY3VycmVudCBzbmFwc2hvdCBvZiB0aGlzIHJvdXRlICovXG4gIHNuYXBzaG90PzogQWN0aXZhdGVkUm91dGVTbmFwc2hvdDtcbiAgLyoqIFRoZSBjb25maWd1cmF0aW9uIHVzZWQgdG8gbWF0Y2ggdGhpcyByb3V0ZSAqL1xuICByb3V0ZUNvbmZpZz86IFJvdXRlIHwgbnVsbDtcbiAgLyoqIFRoZSByb290IG9mIHRoZSByb3V0ZXIgc3RhdGUgKi9cbiAgcm9vdD86IEFjdGl2YXRlZFJvdXRlO1xuICAvKiogVGhlIHBhcmVudCBvZiB0aGlzIHJvdXRlIGluIHRoZSByb3V0ZXIgc3RhdGUgdHJlZSAqL1xuICBwYXJlbnQ/OiBBY3RpdmF0ZWRSb3V0ZSB8IG51bGw7XG4gIC8qKiBUaGUgZmlyc3QgY2hpbGQgb2YgdGhpcyByb3V0ZSBpbiB0aGUgcm91dGVyIHN0YXRlIHRyZWUgKi9cbiAgZmlyc3RDaGlsZD86IEFjdGl2YXRlZFJvdXRlO1xuICAvKiogVGhlIGNoaWxkcmVuIG9mIHRoaXMgcm91dGUgaW4gdGhlIHJvdXRlciBzdGF0ZSB0cmVlICovXG4gIGNoaWxkcmVuPzogQWN0aXZhdGVkUm91dGVbXTtcbiAgLyoqIFRoZSBwYXRoIGZyb20gdGhlIHJvb3Qgb2YgdGhlIHJvdXRlciBzdGF0ZSB0cmVlIHRvIHRoaXMgcm91dGUgKi9cbiAgcGF0aEZyb21Sb290PzogQWN0aXZhdGVkUm91dGVbXTtcbn0pOiBBY3RpdmF0ZWRSb3V0ZSB7XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICB1cmw6IG9wdGlvbnMudXJsLFxuICAgIHBhcmFtczogb3B0aW9ucy5wYXJhbXMsXG4gICAgcGFyYW1NYXA6IG9wdGlvbnMucGFyYW1zICYmIG9wdGlvbnMucGFyYW1zLnBpcGUobWFwKHBhcmFtcyA9PiBjb252ZXJ0VG9QYXJhbU1hcChwYXJhbXMpKSksXG4gICAgcXVlcnlQYXJhbXM6IG9wdGlvbnMucXVlcnlQYXJhbXMsXG4gICAgcXVlcnlQYXJhbU1hcDogb3B0aW9ucy5xdWVyeVBhcmFtcyAmJiBvcHRpb25zLnF1ZXJ5UGFyYW1zLnBpcGUobWFwKHBhcmFtcyA9PiBjb252ZXJ0VG9QYXJhbU1hcChwYXJhbXMpKSksXG4gICAgZnJhZ21lbnQ6IG9wdGlvbnMuZnJhZ21lbnQsXG4gICAgZGF0YTogb3B0aW9ucy5kYXRhLFxuICAgIG91dGxldDogb3B0aW9ucy5vdXRsZXQsXG4gICAgY29tcG9uZW50OiBvcHRpb25zLmNvbXBvbmVudCxcbiAgICBzbmFwc2hvdDogb3B0aW9ucy5zbmFwc2hvdCxcbiAgICByb3V0ZUNvbmZpZzogb3B0aW9ucy5yb3V0ZUNvbmZpZyxcbiAgICByb290OiBvcHRpb25zLnJvb3QsXG4gICAgcGFyZW50OiBvcHRpb25zLnBhcmVudCxcbiAgICBmaXJzdENoaWxkOiBvcHRpb25zLmZpcnN0Q2hpbGQsXG4gICAgY2hpbGRyZW46IG9wdGlvbnMuY2hpbGRyZW4sXG4gICAgcGF0aEZyb21Sb290OiBvcHRpb25zLnBhdGhGcm9tUm9vdFxuICB9IGFzIEFjdGl2YXRlZFJvdXRlO1xuXG4gIGZvciAobGV0IHJvdXRlOiBudWxsIHwgQWN0aXZhdGVkUm91dGUgPSByZXN1bHQ7IHJvdXRlOyByb3V0ZSA9IHJvdXRlLnBhcmVudCkge1xuICAgIGlmIChyb3V0ZS5wYXJlbnQgJiYgcm91dGUucGFyZW50LnNuYXBzaG90ICYmICFyb3V0ZS5zbmFwc2hvdCkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG4gICAgICByb3V0ZS5zbmFwc2hvdCA9IGZha2VTbmFwc2hvdCh7fSk7XG4gICAgfVxuICAgIGlmIChyb3V0ZS5wYXJlbnQgJiYgcm91dGUucGFyZW50LnNuYXBzaG90ICYmICFyb3V0ZS5zbmFwc2hvdC5wYXJlbnQpIHtcbiAgICAgIChyb3V0ZS5zbmFwc2hvdCBhcyBPbWl0PEFjdGl2YXRlZFJvdXRlU25hcHNob3QsICdwYXJlbnQnPiAmIHsgcGFyZW50OiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90IH0pLnBhcmVudCA9IHJvdXRlLnBhcmVudC5zbmFwc2hvdDtcbiAgICB9XG5cbiAgICBpZiAocm91dGUuc25hcHNob3QgJiYgcm91dGUuc25hcHNob3QucGFyZW50ICYmICFyb3V0ZS5wYXJlbnQpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuICAgICAgKHJvdXRlIGFzIE9taXQ8QWN0aXZhdGVkUm91dGUsICdwYXJlbnQnPiAmIHsgcGFyZW50OiBBY3RpdmF0ZWRSb3V0ZSB9KS5wYXJlbnQgPSBmYWtlUm91dGUoe30pO1xuICAgIH1cbiAgICBpZiAocm91dGUuc25hcHNob3QgJiYgcm91dGUuc25hcHNob3QucGFyZW50ICYmIHJvdXRlLnBhcmVudCAmJiAhcm91dGUucGFyZW50LnNuYXBzaG90KSB7XG4gICAgICByb3V0ZS5wYXJlbnQuc25hcHNob3QgPSByb3V0ZS5zbmFwc2hvdC5wYXJlbnQ7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgZmFrZSBwYXJ0aWFsIEFjdGl2YXRlZFJvdXRlU25hcHNob3QgZm9yIHRlc3RzLlxuICpcbiAqIElmIHlvdSBwYXNzIHBhcmFtcywgdGhlbiB0aGUgY3JlYXRlZCBzbmFwc2hvdCdzIHBhcmFtTWFwIHdpbGwgY29udGFpbiB0aGUgc2FtZSB2YWx1ZXMuXG4gKiBUaGUgc2FtZSBnb2VzIGZvciBxdWVyeVBhcmFtcyBhbmQgcXVlcnlQYXJhbU1hcC5cbiAqXG4gKiBAcmV0dXJucyBhIHBhcnRpYWxseSBwb3B1bGF0ZWQsIGZha2UgQWN0aXZhdGVkUm91dGUsIGRlcGVuZGluZyBvbiB3aGF0IHlvdSBwYXNzZWQgaW5cbiAqIEBkZXByZWNhdGVkIGZhdm9yIHN0dWJSb3V0ZSwgd2hpY2ggY3JlYXRlcyBhbiBlYXNpZXIgdG8gdXNlIGFuZCBtb3JlIGxvZ2ljYWwgc3R1YiBmb3IgYm90aCB0aGUgcm91dGUgYW5kIGl0cyBzbmFwc2hvdFxuICovXG5leHBvcnQgZnVuY3Rpb24gZmFrZVNuYXBzaG90KG9wdGlvbnM6IHtcbiAgdXJsPzogVXJsU2VnbWVudFtdO1xuICAvKiogVGhlIG1hdHJpeCBwYXJhbWV0ZXJzIHNjb3BlZCB0byB0aGlzIHJvdXRlICovXG4gIHBhcmFtcz86IFBhcmFtcztcbiAgLyoqIFRoZSBxdWVyeSBwYXJhbWV0ZXJzIHNoYXJlZCBieSBhbGwgdGhlIHJvdXRlcyAqL1xuICBxdWVyeVBhcmFtcz86IFBhcmFtcztcbiAgLyoqIFRoZSBVUkwgZnJhZ21lbnQgc2hhcmVkIGJ5IGFsbCB0aGUgcm91dGVzICovXG4gIGZyYWdtZW50Pzogc3RyaW5nO1xuICAvKiogVGhlIHN0YXRpYyBhbmQgcmVzb2x2ZWQgZGF0YSBvZiB0aGlzIHJvdXRlICovXG4gIGRhdGE/OiBEYXRhO1xuICAvKiogVGhlIG91dGxldCBuYW1lIG9mIHRoZSByb3V0ZSAqL1xuICBvdXRsZXQ/OiBzdHJpbmc7XG4gIC8qKiBUaGUgY29tcG9uZW50IG9mIHRoZSByb3V0ZSAqL1xuICBjb21wb25lbnQ/OiBUeXBlPHVua25vd24+IHwgc3RyaW5nIHwgbnVsbDtcbiAgLyoqIFRoZSBjb25maWd1cmF0aW9uIHVzZWQgdG8gbWF0Y2ggdGhpcyByb3V0ZSAqL1xuICByb3V0ZUNvbmZpZz86IFJvdXRlO1xuICAvKiogVGhlIHJvb3Qgb2YgdGhlIHJvdXRlciBzdGF0ZSAqL1xuICByb290PzogQWN0aXZhdGVkUm91dGVTbmFwc2hvdDtcbiAgLyoqIFRoZSBwYXJlbnQgb2YgdGhpcyByb3V0ZSBpbiB0aGUgcm91dGVyIHN0YXRlIHRyZWUgKi9cbiAgcGFyZW50PzogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCB8IG51bGw7XG4gIC8qKiBUaGUgZmlyc3QgY2hpbGQgb2YgdGhpcyByb3V0ZSBpbiB0aGUgcm91dGVyIHN0YXRlIHRyZWUgKi9cbiAgZmlyc3RDaGlsZD86IEFjdGl2YXRlZFJvdXRlU25hcHNob3QgfCBudWxsO1xuICAvKiogVGhlIGNoaWxkcmVuIG9mIHRoaXMgcm91dGUgaW4gdGhlIHJvdXRlciBzdGF0ZSB0cmVlICovXG4gIGNoaWxkcmVuPzogQWN0aXZhdGVkUm91dGVTbmFwc2hvdFtdO1xuICAvKiogVGhlIHBhdGggZnJvbSB0aGUgcm9vdCBvZiB0aGUgcm91dGVyIHN0YXRlIHRyZWUgdG8gdGhpcyByb3V0ZSAqL1xuICBwYXRoRnJvbVJvb3Q/OiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90W107XG59KTogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCB7XG4gIHJldHVybiB7XG4gICAgdXJsOiBvcHRpb25zLnVybCxcbiAgICBwYXJhbXM6IG9wdGlvbnMucGFyYW1zLFxuICAgIHBhcmFtTWFwOiBvcHRpb25zLnBhcmFtcyAmJiBjb252ZXJ0VG9QYXJhbU1hcChvcHRpb25zLnBhcmFtcyksXG4gICAgcXVlcnlQYXJhbXM6IG9wdGlvbnMucXVlcnlQYXJhbXMsXG4gICAgcXVlcnlQYXJhbU1hcDogb3B0aW9ucy5xdWVyeVBhcmFtcyAmJiBjb252ZXJ0VG9QYXJhbU1hcChvcHRpb25zLnF1ZXJ5UGFyYW1zKSxcbiAgICBmcmFnbWVudDogb3B0aW9ucy5mcmFnbWVudCxcbiAgICBkYXRhOiBvcHRpb25zLmRhdGEsXG4gICAgb3V0bGV0OiBvcHRpb25zLm91dGxldCxcbiAgICBjb21wb25lbnQ6IG9wdGlvbnMuY29tcG9uZW50LFxuICAgIHJvdXRlQ29uZmlnOiBvcHRpb25zLnJvdXRlQ29uZmlnLFxuICAgIHJvb3Q6IG9wdGlvbnMucm9vdCxcbiAgICBwYXJlbnQ6IG9wdGlvbnMucGFyZW50LFxuICAgIGZpcnN0Q2hpbGQ6IG9wdGlvbnMuZmlyc3RDaGlsZCxcbiAgICBjaGlsZHJlbjogb3B0aW9ucy5jaGlsZHJlbixcbiAgICBwYXRoRnJvbVJvb3Q6IG9wdGlvbnMucGF0aEZyb21Sb290XG4gIH0gYXMgQWN0aXZhdGVkUm91dGVTbmFwc2hvdDtcbn1cblxuLyoqXG4gKiBUaGUgb3B0aW9ucyB0aGF0IGFyZSBwYXNzZWQgd2hlbiBjcmVhdGluZyBhbiBBY3RpdmF0ZWRSb3V0ZVN0dWIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQWN0aXZhdGVkUm91dGVTdHViT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgaW5pdGlhbCB2YWx1ZXMgb2YgdGhlIHBhcmFtZXRlcnMgb2YgdGhlIHJvdXRlXG4gICAqL1xuICBwYXJhbXM/OiBQYXJhbXM7XG4gIC8qKlxuICAgKiBUaGUgaW5pdGlhbCB2YWx1ZXMgb2YgdGhlIHF1ZXJ5IHBhcmFtZXRlcnMgb2YgdGhlIHJvdXRlXG4gICAqL1xuICBxdWVyeVBhcmFtcz86IFBhcmFtcztcbiAgLyoqXG4gICAqIFRoZSBpbml0aWFsIHZhbHVlcyBvZiB0aGUgZGF0YSBvZiB0aGUgcm91dGVcbiAgICovXG4gIGRhdGE/OiBEYXRhO1xuICAvKipcbiAgICogVGhlIGluaXRpYWwgZnJhZ21lbnQgb2YgdGhlIHJvdXRlXG4gICAqL1xuICBmcmFnbWVudD86IHN0cmluZyB8IG51bGw7XG4gIC8qKlxuICAgKiBUaGUgaW5pdGlhbCB1cmwgb2YgdGhlIHJvdXRlXG4gICAqL1xuICB1cmw/OiBVcmxTZWdtZW50W107XG4gIC8qKlxuICAgKiBUaGUgcGFyZW50IG9mIHRoZSByb3V0ZVxuICAgKi9cbiAgcGFyZW50PzogQWN0aXZhdGVkUm91dGVTdHViIHwgbnVsbDtcbiAgLyoqXG4gICAqIFRoZSBmaXJzdCBjaGlsZCBvZiB0aGUgcm91dGVcbiAgICovXG4gIGZpcnN0Q2hpbGQ/OiBBY3RpdmF0ZWRSb3V0ZVN0dWIgfCBudWxsO1xuICAvKipcbiAgICogVGhlIGNoaWxkcmVuIG9mIHRoZSByb3V0ZVxuICAgKi9cbiAgY2hpbGRyZW4/OiBBY3RpdmF0ZWRSb3V0ZVN0dWJbXSB8IG51bGw7XG4gIC8qKlxuICAgKiBUaGUgY29uZmlndXJhdGlvbiBvZiB0aGUgcm91dGVcbiAgICovXG4gIHJvdXRlQ29uZmlnPzogUm91dGUgfCBudWxsO1xufVxuXG5jbGFzcyBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90U3R1YiBleHRlbmRzIEFjdGl2YXRlZFJvdXRlU25hcHNob3Qge1xuICBwcml2YXRlIF9wYXJlbnQ6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBfcm9vdDogQWN0aXZhdGVkUm91dGVTbmFwc2hvdDtcbiAgcHJpdmF0ZSBfZmlyc3RDaGlsZDogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIF9jaGlsZHJlbjogQXJyYXk8QWN0aXZhdGVkUm91dGVTbmFwc2hvdD4gPSBbXTtcbiAgcHJpdmF0ZSBfcGF0aEZyb21Sb290OiBBcnJheTxBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90PiA9IFtdO1xuICBwcml2YXRlIF9yb3V0ZUNvbmZpZzogUm91dGUgfCBudWxsID0gbnVsbDtcblxuICBnZXQgcGFyZW50KCk6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fcGFyZW50O1xuICB9XG5cbiAgc2V0IHBhcmVudCh2YWx1ZTogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCB8IG51bGwpIHtcbiAgICB0aGlzLl9wYXJlbnQgPSB2YWx1ZTtcbiAgfVxuXG4gIGdldCByb290KCk6IEFjdGl2YXRlZFJvdXRlU25hcHNob3Qge1xuICAgIHJldHVybiB0aGlzLl9yb290O1xuICB9XG5cbiAgc2V0IHJvb3QodmFsdWU6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QpIHtcbiAgICB0aGlzLl9yb290ID0gdmFsdWU7XG4gIH1cblxuICBnZXQgZmlyc3RDaGlsZCgpOiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90IHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX2ZpcnN0Q2hpbGQ7XG4gIH1cblxuICBzZXQgZmlyc3RDaGlsZCh2YWx1ZTogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCB8IG51bGwpIHtcbiAgICB0aGlzLl9maXJzdENoaWxkID0gdmFsdWU7XG4gIH1cblxuICBnZXQgY2hpbGRyZW4oKTogQXJyYXk8QWN0aXZhdGVkUm91dGVTbmFwc2hvdD4ge1xuICAgIHJldHVybiB0aGlzLl9jaGlsZHJlbjtcbiAgfVxuXG4gIHNldCBjaGlsZHJlbih2YWx1ZTogQXJyYXk8QWN0aXZhdGVkUm91dGVTbmFwc2hvdD4pIHtcbiAgICB0aGlzLl9jaGlsZHJlbiA9IHZhbHVlO1xuICB9XG5cbiAgZ2V0IHBhdGhGcm9tUm9vdCgpOiBBcnJheTxBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90PiB7XG4gICAgcmV0dXJuIHRoaXMuX3BhdGhGcm9tUm9vdDtcbiAgfVxuXG4gIHNldCBwYXRoRnJvbVJvb3QodmFsdWU6IEFycmF5PEFjdGl2YXRlZFJvdXRlU25hcHNob3Q+KSB7XG4gICAgdGhpcy5fcGF0aEZyb21Sb290ID0gdmFsdWU7XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4gIC8vIEB0cy1pZ25vcmVcbiAgZ2V0IHJvdXRlQ29uZmlnKCk6IFJvdXRlIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX3JvdXRlQ29uZmlnO1xuICB9XG5cbiAgc2V0IHJvdXRlQ29uZmlnKHJvdXRlOiBSb3V0ZSB8IG51bGwpIHtcbiAgICB0aGlzLl9yb3V0ZUNvbmZpZyA9IHJvdXRlO1xuICB9XG5cbiAgZ2V0IHBhcmFtTWFwKCk6IFBhcmFtTWFwIHtcbiAgICByZXR1cm4gY29udmVydFRvUGFyYW1NYXAodGhpcy5wYXJhbXMpO1xuICB9XG5cbiAgZ2V0IHF1ZXJ5UGFyYW1NYXAoKTogUGFyYW1NYXAge1xuICAgIHJldHVybiBjb252ZXJ0VG9QYXJhbU1hcCh0aGlzLnF1ZXJ5UGFyYW1zKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5fcm9vdCA9IHRoaXM7XG4gIH1cbn1cblxuLyoqXG4gKiBBIHN0dWIgZm9yIEFjdGl2YXRlZFJvdXRlLiBJdCBiZWhhdmVzIGFsbW9zdCB0aGUgc2FtZSB3YXkgYXMgdGhlIGFjdHVhbCBBY3RpdmF0ZWRSb3V0ZSwgZXhwb3NpbmcgYSBzbmFwc2hvdFxuICogYW5kIG9ic2VydmFibGVzIGZvciB0aGUgcGFyYW1zLCBxdWVyeSBwYXJhbXMgZXRjLiwgd2hpY2ggYXJlIGtlcHQgaW4gc3luYy5cbiAqXG4gKiBJbiBhZGRpdGlvbiwgdGhpcyBzdHViIGFsbG93cyBzaW11bGF0aW5nIGEgbmF2aWdhdGlvbiBieSBjaGFuZ2luZyB0aGUgcGFyYW1zLCB0aGUgcXVlcnkgcGFyYW1zLCB0aGUgZnJhZ21lbnQsIGV0Yy5cbiAqIFdoZW4gdGhhdCBoYXBwZW5zLCB0aGUgc25hcHNob3QgaXMgbW9kaWZpZWQsIHRoZW4gdGhlIHJlbGV2YW50IG9ic2VydmFibGVzIGVtaXQgdGhlIG5ldyB2YWx1ZXMuXG4gKlxuICogVGhlcmUgYXJlIHNvbWUgdGhpbmdzIHRoYXQgZG9uJ3QgcmVhbGx5IHdvcmsgdGhlIHNhbWUgd2F5IGFzIHRoZSByZWFsIEFjdGl2YXRlZFJvdXRlIHRob3VnaDpcbiAqIC0gdGhlIGhhbmRsaW5nIG9mIHRoZSBmaXJzdENoaWxkIGFuZCBvZiB0aGUgY2hpbGRyZW4gaXMgZW50aXJlbHkgdW5kZXIgdGhlIHRlc3RlcidzIHJlc3BvbnNpYmlsaXR5LiBTZXR0aW5nIHRoZSBwYXJlbnRcbiAqICAgb2YgYSByb3V0ZSBzdHViIGRvZXMgbm90IGFkZCB0aGlzIHJvdXRlIHRvIHRoZSBjaGlsZHJlbiBvZiBpdHMgcGFyZW50LCBmb3IgZXhhbXBsZS5cbiAqIC0gd2hlbiBjaGFuZ2luZyB0aGUgcGFyYW1zLCBxdWVyeSBwYXJhbXMsIGZyYWdtZW50LCBldGMuLCB0aGVpciBhc3NvY2lhdGVkIG9ic2VydmFibGUgZW1pdHMgdW5jb25kaXRpb25hbGx5LCBpbnN0ZWFkIG9mXG4gKiAgIGZpcnN0IGNoZWNraW5nIGlmIHRoZSB2YWx1ZSBpcyBhY3R1YWxseSBkaWZmZXJlbnQgZnJvbSBiZWZvcmUuIEl0J3MgdGh1cyB0aGUgcmVzcG9uc2liaWxpdHkgb2YgdGhlIHRlc3RlciB0byBub3RcbiAqICAgY2hhbmdlIHRoZSB2YWx1ZXMgaWYgdGhleSdyZSB0aGUgc2FtZSBhcyBiZWZvcmUuXG4gKiAtIHRoZSBwYXJhbXMsIHBhcmFtTWFwLCBxdWVyeVBhcmFtcyBhbmQgcXVlcnlQYXJhbU1hcCBvYmplY3RzIG9mIHRoZSByb3V0ZSBzbmFwc2hvdCBjaGFuZ2Ugd2hlbiBwYXJhbXMgb3IgcXVlcnkgcGFyYW1zIGFyZSBzZXRcbiAqICAgb24gdGhlIHN0dWIgcm91dGUuIFNvIGlmIHRoZSBjb2RlIGtlZXBzIGEgcmVmZXJlbmNlIHRvIHBhcmFtcyBvciBwYXJhbU1hcHMsIGl0IHdvbid0IHNlZSB0aGUgY2hhbmdlcy5cbiAqL1xuZXhwb3J0IGNsYXNzIEFjdGl2YXRlZFJvdXRlU3R1YiBleHRlbmRzIEFjdGl2YXRlZFJvdXRlIHtcbiAgcHJpdmF0ZSBfZmlyc3RDaGlsZDogQWN0aXZhdGVkUm91dGVTdHViIHwgbnVsbDtcbiAgcHJpdmF0ZSBfY2hpbGRyZW46IEFycmF5PEFjdGl2YXRlZFJvdXRlU3R1Yj47XG5cbiAgcHJpdmF0ZSByZWFkb25seSBwYXJhbXNTdWJqZWN0OiBCZWhhdmlvclN1YmplY3Q8UGFyYW1zPjtcbiAgcHJpdmF0ZSByZWFkb25seSBxdWVyeVBhcmFtc1N1YmplY3Q6IEJlaGF2aW9yU3ViamVjdDxQYXJhbXM+O1xuICBwcml2YXRlIHJlYWRvbmx5IGRhdGFTdWJqZWN0OiBCZWhhdmlvclN1YmplY3Q8RGF0YT47XG4gIHByaXZhdGUgcmVhZG9ubHkgZnJhZ21lbnRTdWJqZWN0OiBCZWhhdmlvclN1YmplY3Q8c3RyaW5nIHwgbnVsbD47XG4gIHByaXZhdGUgcmVhZG9ubHkgdXJsU3ViamVjdDogQmVoYXZpb3JTdWJqZWN0PEFycmF5PFVybFNlZ21lbnQ+PjtcblxuICBwcml2YXRlIF9wYXJlbnQ6IEFjdGl2YXRlZFJvdXRlU3R1YiB8IG51bGw7XG4gIHByaXZhdGUgX3Jvb3Q6IEFjdGl2YXRlZFJvdXRlU3R1YjtcbiAgcHJpdmF0ZSBfcGF0aEZyb21Sb290OiBBcnJheTxBY3RpdmF0ZWRSb3V0ZVN0dWI+O1xuXG4gIC8qKlxuICAgKiBDb25zdHJ1Y3RzIGEgbmV3IGluc3RhbmNlLCBiYXNlZCBvbiB0aGUgZ2l2ZW4gb3B0aW9ucy5cbiAgICogSWYgYW4gb3B0aW9uIGlzIG5vdCBwcm92aWRlZCAob3IgaWYgbm8gb3B0aW9uIGlzIHByb3ZpZGVkIGF0IGFsbCksIHRoZW4gdGhlIHJvdXRlIGhhcyBhIGRlZmF1bHQgdmFsdWUgZm9yIHRoaXMgb3B0aW9uXG4gICAqIChlbXB0eSBwYXJhbWV0ZXJzIGZvciBleGFtcGxlLCBudWxsIGZyYWdtZW50LCBldGMuKVxuICAgKiBJZiBubyBwYXJlbnQgaXMgcGFzc2VkLCB0aGVuIHRoaXMgcm91dGUgaGFzIG5vIHBhcmVudCBhbmQgaXMgdGh1cyBzZXQgYXMgdGhlIHJvb3QuIE90aGVyd2lzZSwgdGhlIHJvb3QgYW5kIHRoZSBwYXRoXG4gICAqIGZyb20gcm9vdCBhcmUgY3JlYXRlZCBiYXNlZCBvbiB0aGUgcm9vdCBhbmQgcGF0aCBmcm9tIHJvb3Qgb2YgdGhlIGdpdmVuIHBhcmVudCByb3V0ZS5cbiAgICovXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM/OiBBY3RpdmF0ZWRSb3V0ZVN0dWJPcHRpb25zKSB7XG4gICAgc3VwZXIoKTtcblxuICAgIGNvbnN0IHNuYXBzaG90ID0gbmV3IEFjdGl2YXRlZFJvdXRlU25hcHNob3RTdHViKCk7XG4gICAgdGhpcy5zbmFwc2hvdCA9IHNuYXBzaG90O1xuXG4gICAgdGhpcy5fZmlyc3RDaGlsZCA9IG9wdGlvbnM/LmZpcnN0Q2hpbGQgPz8gbnVsbDtcbiAgICB0aGlzLl9jaGlsZHJlbiA9IG9wdGlvbnM/LmNoaWxkcmVuID8/IFtdO1xuICAgIHRoaXMuX3BhcmVudCA9IG9wdGlvbnM/LnBhcmVudCA/PyBudWxsO1xuICAgIHRoaXMuX3Jvb3QgPSB0aGlzLnBhcmVudD8ucm9vdCA/PyB0aGlzO1xuICAgIHRoaXMuX3BhdGhGcm9tUm9vdCA9IHRoaXMucGFyZW50ID8gWy4uLnRoaXMucGFyZW50LnBhdGhGcm9tUm9vdCwgdGhpc10gOiBbdGhpc107XG5cbiAgICBzbmFwc2hvdC5wYXJhbXMgPSBvcHRpb25zPy5wYXJhbXMgPz8ge307XG4gICAgc25hcHNob3QucXVlcnlQYXJhbXMgPSBvcHRpb25zPy5xdWVyeVBhcmFtcyA/PyB7fTtcbiAgICBzbmFwc2hvdC5kYXRhID0gb3B0aW9ucz8uZGF0YSA/PyB7fTtcbiAgICBzbmFwc2hvdC5mcmFnbWVudCA9IG9wdGlvbnM/LmZyYWdtZW50ID8/IG51bGw7XG4gICAgc25hcHNob3QudXJsID0gb3B0aW9ucz8udXJsID8/IFtdO1xuICAgIHNuYXBzaG90LnJvdXRlQ29uZmlnID0gb3B0aW9ucz8ucm91dGVDb25maWcgPz8gbnVsbDtcblxuICAgIHNuYXBzaG90LmZpcnN0Q2hpbGQgPSB0aGlzLmZpcnN0Q2hpbGQ/LnNuYXBzaG90ID8/IG51bGw7XG4gICAgc25hcHNob3QuY2hpbGRyZW4gPSB0aGlzLmNoaWxkcmVuPy5tYXAocm91dGUgPT4gcm91dGUuc25hcHNob3QpID8/IFtdO1xuICAgIHNuYXBzaG90LnBhcmVudCA9IHRoaXMucGFyZW50Py5zbmFwc2hvdCA/PyBudWxsO1xuICAgIHNuYXBzaG90LnJvb3QgPSB0aGlzLnJvb3Quc25hcHNob3Q7XG4gICAgc25hcHNob3QucGF0aEZyb21Sb290ID0gdGhpcy5wYXRoRnJvbVJvb3QubWFwKHJvdXRlID0+IHJvdXRlLnNuYXBzaG90KTtcblxuICAgIHRoaXMucGFyYW1zU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8UGFyYW1zPih0aGlzLnNuYXBzaG90LnBhcmFtcyk7XG4gICAgdGhpcy5xdWVyeVBhcmFtc1N1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFBhcmFtcz4odGhpcy5zbmFwc2hvdC5xdWVyeVBhcmFtcyk7XG4gICAgdGhpcy5kYXRhU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8RGF0YT4odGhpcy5zbmFwc2hvdC5kYXRhKTtcbiAgICB0aGlzLmZyYWdtZW50U3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nIHwgbnVsbD4odGhpcy5zbmFwc2hvdC5mcmFnbWVudCk7XG4gICAgdGhpcy51cmxTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxBcnJheTxVcmxTZWdtZW50Pj4odGhpcy5zbmFwc2hvdC51cmwpO1xuXG4gICAgdGhpcy5wYXJhbXMgPSB0aGlzLnBhcmFtc1N1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gICAgdGhpcy5xdWVyeVBhcmFtcyA9IHRoaXMucXVlcnlQYXJhbXNTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICAgIHRoaXMuZGF0YSA9IHRoaXMuZGF0YVN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gICAgdGhpcy5mcmFnbWVudCA9IHRoaXMuZnJhZ21lbnRTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICAgIHRoaXMudXJsID0gdGhpcy51cmxTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgZ2V0IHJvb3QoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3Jvb3Q7XG4gIH1cblxuICBnZXQgcGFyZW50KCk6IEFjdGl2YXRlZFJvdXRlU3R1YiB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9wYXJlbnQ7XG4gIH1cblxuICBnZXQgcGF0aEZyb21Sb290KCk6IEFycmF5PEFjdGl2YXRlZFJvdXRlU3R1Yj4ge1xuICAgIHJldHVybiB0aGlzLl9wYXRoRnJvbVJvb3Q7XG4gIH1cblxuICBnZXQgZmlyc3RDaGlsZCgpOiBBY3RpdmF0ZWRSb3V0ZVN0dWIgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fZmlyc3RDaGlsZDtcbiAgfVxuXG4gIGdldCBjaGlsZHJlbigpOiBBcnJheTxBY3RpdmF0ZWRSb3V0ZVN0dWI+IHtcbiAgICByZXR1cm4gdGhpcy5fY2hpbGRyZW47XG4gIH1cblxuICBnZXQgcm91dGVDb25maWcoKTogUm91dGUgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5zbmFwc2hvdC5yb3V0ZUNvbmZpZztcbiAgfVxuXG4gIC8qKlxuICAgKiBUcmlnZ2VycyBhIG5hdmlnYXRpb24gd2l0aCB0aGUgZ2l2ZW4gbmV3IHBhcmFtZXRlcnMuIEFsbCB0aGUgb3RoZXIgcGFydHMgKHF1ZXJ5IHBhcmFtcyBldGMuKSBzdGF5IGFzIHRoZSBhcmUuXG4gICAqIFRoaXMgaXMgYSBzaG9ydGN1dCB0byBgdHJpZ2dlck5hdmlnYXRpb25gIHRoYXQgY2FuIGJlIHVzZWQgdG8gb25seSBjaGFuZ2UgdGhlIHBhcmFtZXRlcnMuXG4gICAqL1xuICBwdWJsaWMgc2V0UGFyYW1zKHBhcmFtczogUGFyYW1zKTogdm9pZCB7XG4gICAgdGhpcy50cmlnZ2VyTmF2aWdhdGlvbih7IHBhcmFtcyB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUcmlnZ2VycyBhIG5hdmlnYXRpb24gd2l0aCB0aGUgZ2l2ZW4gbmV3IHBhcmFtZXRlci4gVGhlIG90aGVyIHBhcmFtZXRlcnMsIGFzIHdlbGwgYXMgYWxsIHRoZSBvdGhlciBwYXJ0cyAocXVlcnkgcGFyYW1zIGV0Yy4pXG4gICAqIHN0YXkgYXMgdGhlIGFyZS5cbiAgICogVGhpcyBpcyBhIHNob3J0Y3V0IHRvIGB0cmlnZ2VyTmF2aWdhdGlvbmAgdGhhdCBjYW4gYmUgdXNlZCB0byBvbmx5IGNoYW5nZSBvbmUgcGFyYW1ldGVyLlxuICAgKi9cbiAgcHVibGljIHNldFBhcmFtKG5hbWU6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuc2V0UGFyYW1zKHsgLi4udGhpcy5zbmFwc2hvdC5wYXJhbXMsIFtuYW1lXTogdmFsdWUgfSk7XG4gIH1cblxuICAvKipcbiAgICogVHJpZ2dlcnMgYSBuYXZpZ2F0aW9uIHdpdGggdGhlIGdpdmVuIG5ldyBxdWVyeSBwYXJhbWV0ZXJzLiBBbGwgdGhlIG90aGVyIHBhcnRzIChwYXJhbXMgZXRjLikgc3RheSBhcyB0aGUgYXJlLlxuICAgKiBUaGlzIGlzIGEgc2hvcnRjdXQgdG8gYHRyaWdnZXJOYXZpZ2F0aW9uYCB0aGF0IGNhbiBiZSB1c2VkIHRvIG9ubHkgY2hhbmdlIHRoZSBxdWVyeSBwYXJhbWV0ZXJzLlxuICAgKi9cbiAgcHVibGljIHNldFF1ZXJ5UGFyYW1zKHF1ZXJ5UGFyYW1zOiBQYXJhbXMpOiB2b2lkIHtcbiAgICB0aGlzLnRyaWdnZXJOYXZpZ2F0aW9uKHsgcXVlcnlQYXJhbXMgfSk7XG4gIH1cblxuICAvKipcbiAgICogVHJpZ2dlcnMgYSBuYXZpZ2F0aW9uIHdpdGggdGhlIGdpdmVuIG5ldyBwYXJhbWV0ZXIuIFRoZSBvdGhlciBxdWVyeSBwYXJhbWV0ZXJzLCBhcyB3ZWxsIGFzIGFsbCB0aGUgb3RoZXIgcGFydHMgKHBhcmFtcyBldGMuKVxuICAgKiBzdGF5IGFzIHRoZSBhcmUuXG4gICAqIFRoaXMgaXMgYSBzaG9ydGN1dCB0byBgdHJpZ2dlck5hdmlnYXRpb25gIHRoYXQgY2FuIGJlIHVzZWQgdG8gb25seSBjaGFuZ2Ugb25lIHF1ZXJ5IHBhcmFtZXRlci5cbiAgICovXG4gIHB1YmxpYyBzZXRRdWVyeVBhcmFtKG5hbWU6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuc2V0UXVlcnlQYXJhbXMoeyAuLi50aGlzLnNuYXBzaG90LnF1ZXJ5UGFyYW1zLCBbbmFtZV06IHZhbHVlIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFRyaWdnZXJzIGEgbmF2aWdhdGlvbiB3aXRoIHRoZSBnaXZlbiBuZXcgZGF0YS4gVGhlIG90aGVyIHBhcmFtZXRlcnMsIGFzIHdlbGwgYXMgYWxsIHRoZSBvdGhlciBwYXJ0cyAocGFyYW1zIGV0Yy4pXG4gICAqIHN0YXkgYXMgdGhlIGFyZS5cbiAgICogVGhpcyBpcyBhIHNob3J0Y3V0IHRvIGB0cmlnZ2VyTmF2aWdhdGlvbmAgdGhhdCBjYW4gYmUgdXNlZCB0byBvbmx5IGNoYW5nZSB0aGUgZGF0YS5cbiAgICovXG4gIHB1YmxpYyBzZXREYXRhKGRhdGE6IERhdGEpOiB2b2lkIHtcbiAgICB0aGlzLnRyaWdnZXJOYXZpZ2F0aW9uKHsgZGF0YSB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUcmlnZ2VycyBhIG5hdmlnYXRpb24gd2l0aCB0aGUgZ2l2ZW4gbmV3IGRhdGEgaXRlbS4gVGhlIG90aGVyIGRhdGEsIGFzIHdlbGwgYXMgYWxsIHRoZSBvdGhlciBwYXJ0cyAocGFyYW1zIGV0Yy4pXG4gICAqIHN0YXkgYXMgdGhlIGFyZS5cbiAgICogVGhpcyBpcyBhIHNob3J0Y3V0IHRvIGB0cmlnZ2VyTmF2aWdhdGlvbmAgdGhhdCBjYW4gYmUgdXNlZCB0byBvbmx5IGNoYW5nZSBvbmUgZGF0YSBpdGVtLlxuICAgKi9cbiAgcHVibGljIHNldERhdGFJdGVtKG5hbWU6IHN0cmluZywgdmFsdWU6IHVua25vd24pOiB2b2lkIHtcbiAgICB0aGlzLnNldERhdGEoeyAuLi50aGlzLnNuYXBzaG90LmRhdGEsIFtuYW1lXTogdmFsdWUgfSk7XG4gIH1cblxuICAvKipcbiAgICogVHJpZ2dlcnMgYSBuYXZpZ2F0aW9uIHdpdGggdGhlIGdpdmVuIG5ldyBmcmFnbWVudC4gVGhlIG90aGVyIHBhcnRzIChwYXJhbXMgZXRjLikgIHN0YXkgYXMgdGhlIGFyZS5cbiAgICogVGhpcyBpcyBhIHNob3J0Y3V0IHRvIGB0cmlnZ2VyTmF2aWdhdGlvbmAgdGhhdCBjYW4gYmUgdXNlZCB0byBvbmx5IGNoYW5nZSB0aGUgZnJhZ21lbnQuXG4gICAqL1xuICBwdWJsaWMgc2V0RnJhZ21lbnQoZnJhZ21lbnQ6IHN0cmluZyB8IG51bGwpOiB2b2lkIHtcbiAgICB0aGlzLnRyaWdnZXJOYXZpZ2F0aW9uKHsgZnJhZ21lbnQgfSk7XG4gIH1cblxuICAvKipcbiAgICogVHJpZ2dlcnMgYSBuYXZpZ2F0aW9uIHdpdGggdGhlIGdpdmVuIG5ldyB1cmwuIFRoZSBvdGhlciBwYXJ0cyAocGFyYW1zIGV0Yy4pICBzdGF5IGFzIHRoZSBhcmUuXG4gICAqIFRoaXMgaXMgYSBzaG9ydGN1dCB0byBgdHJpZ2dlck5hdmlnYXRpb25gIHRoYXQgY2FuIGJlIHVzZWQgdG8gb25seSBjaGFuZ2UgdGhlIHVybC5cbiAgICovXG4gIHB1YmxpYyBzZXRVcmwodXJsOiBBcnJheTxVcmxTZWdtZW50Pik6IHZvaWQge1xuICAgIHRoaXMudHJpZ2dlck5hdmlnYXRpb24oeyB1cmwgfSk7XG4gIH1cblxuICAvKipcbiAgICogVHJpZ2dlcnMgYSBuYXZpZ2F0aW9uIGJhc2VkIG9uIHRoZSBnaXZlbiBvcHRpb25zLiBJZiBhbiBvcHRpb24gaXMgdW5kZWZpbmVkIG9yIG51bGwsIGl0J3MgaWdub3JlZC4gRXhjZXB0IGZvciBmcmFnbWVudCwgd2hpY2ggaXMgb25seVxuICAgKiBpZ25vcmVkIGlmIGl0J3MgdW5kZWZpbmVkLCBiZWNhdXNlIG51bGwgaXMgYSB2YWxpZCB2YWx1ZSBmb3IgYSBmcmFnbWVudC5cbiAgICpcbiAgICogVGhlIG5vbi1pZ25vcmVkIHZhbHVlcyBhcmUgdXNlZCB0byBjaGFuZ2UgdGhlIHNuYXBzaG90IG9mIHRoZSByb3V0ZS4gT25jZSB0aGUgc25hcHNob3QgaGFzIGJlZW4gbW9kaWZpZWQsXG4gICAqIHRoZSBvYnNlcnZhYmxlcyBjb3JyZXNwb25kaW5nIHRvIHRoZSB1cGRhdGVkIHBhcnRzIGVtaXQgdGhlIG5ldyB2YWx1ZS5cbiAgICpcbiAgICogU28sIHNldHRpbmcgcGFyYW1zIGFuZCBxdWVyeSBwYXJhbXMgd2lsbCBtYWtlIHRoZSBwYXJhbXMgYW5kIHF1ZXJ5UGFyYW1zIG9ic2VydmFibGVzIGVtaXQsIGJ1dCBub3QgdGhlIGZyYWdtZW50LCBkYXRhIGFuZFxuICAgKiB1cmwgb2JzZXJ2YWJsZXMgZm9yIGV4YW1wbGUuIFRoaXMgaXMgY29uc2lzdGVudCB0byBob3cgdGhlIHJvdXRlciBiZWhhdmVzLlxuICAgKi9cbiAgcHVibGljIHRyaWdnZXJOYXZpZ2F0aW9uKG9wdGlvbnM6IHtcbiAgICBwYXJhbXM/OiBQYXJhbXM7XG4gICAgcXVlcnlQYXJhbXM/OiBQYXJhbXM7XG4gICAgZnJhZ21lbnQ/OiBzdHJpbmcgfCBudWxsO1xuICAgIGRhdGE/OiBEYXRhIHwgbnVsbDtcbiAgICB1cmw/OiBBcnJheTxVcmxTZWdtZW50PiB8IG51bGw7XG4gIH0pOiB2b2lkIHtcbiAgICAvLyBzZXQgdGhlIHNuYXBzaG90IGZpcnN0XG4gICAgaWYgKG9wdGlvbnMucGFyYW1zKSB7XG4gICAgICB0aGlzLnNuYXBzaG90LnBhcmFtcyA9IG9wdGlvbnMucGFyYW1zO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy5xdWVyeVBhcmFtcykge1xuICAgICAgdGhpcy5zbmFwc2hvdC5xdWVyeVBhcmFtcyA9IG9wdGlvbnMucXVlcnlQYXJhbXM7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLmZyYWdtZW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuc25hcHNob3QuZnJhZ21lbnQgPSBvcHRpb25zLmZyYWdtZW50O1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy5kYXRhKSB7XG4gICAgICB0aGlzLnNuYXBzaG90LmRhdGEgPSBvcHRpb25zLmRhdGE7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLnVybCkge1xuICAgICAgdGhpcy5zbmFwc2hvdC51cmwgPSBvcHRpb25zLnVybDtcbiAgICB9XG5cbiAgICAvLyB0aGVuIGVtaXQgZXZlcnl0aGluZyB0aGF0IGhhcyBjaGFuZ2VkXG4gICAgaWYgKG9wdGlvbnMucGFyYW1zKSB7XG4gICAgICB0aGlzLnBhcmFtc1N1YmplY3QubmV4dCh0aGlzLnNuYXBzaG90LnBhcmFtcyk7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLnF1ZXJ5UGFyYW1zKSB7XG4gICAgICB0aGlzLnF1ZXJ5UGFyYW1zU3ViamVjdC5uZXh0KHRoaXMuc25hcHNob3QucXVlcnlQYXJhbXMpO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy5mcmFnbWVudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmZyYWdtZW50U3ViamVjdC5uZXh0KHRoaXMuc25hcHNob3QuZnJhZ21lbnQpO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy5kYXRhKSB7XG4gICAgICB0aGlzLmRhdGFTdWJqZWN0Lm5leHQodGhpcy5zbmFwc2hvdC5kYXRhKTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMudXJsKSB7XG4gICAgICB0aGlzLnVybFN1YmplY3QubmV4dCh0aGlzLnNuYXBzaG90LnVybCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICdBY3RpdmF0ZWRSb3V0ZVN0dWInO1xuICB9XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBBY3RpdmF0ZWRSb3V0ZVN0dWIsIGJ5IGNhbGxpbmcgaXRzIGNvbnN0cnVjdG9yLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc3R1YlJvdXRlKG9wdGlvbnM/OiBBY3RpdmF0ZWRSb3V0ZVN0dWJPcHRpb25zKTogQWN0aXZhdGVkUm91dGVTdHViIHtcbiAgcmV0dXJuIG5ldyBBY3RpdmF0ZWRSb3V0ZVN0dWIob3B0aW9ucyk7XG59XG4iXX0=
351
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc3BlY3Vsb29zL3NyYy9saWIvcm91dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxzQkFBc0IsRUFBRSxpQkFBaUIsRUFBNkMsTUFBTSxpQkFBaUIsQ0FBQztBQUN2SSxPQUFPLEVBQUUsZUFBZSxFQUFFLEdBQUcsRUFBYyxNQUFNLE1BQU0sQ0FBQztBQUd4RDs7Ozs7Ozs7Ozs7Ozs7OztHQWdCRztBQUNILE1BQU0sVUFBVSxTQUFTLENBQUMsT0E0QnpCO0lBQ0MsTUFBTSxNQUFNLEdBQUc7UUFDYixHQUFHLEVBQUUsT0FBTyxDQUFDLEdBQUc7UUFDaEIsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNO1FBQ3RCLFFBQVEsRUFBRSxPQUFPLENBQUMsTUFBTSxJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDekYsV0FBVyxFQUFFLE9BQU8sQ0FBQyxXQUFXO1FBQ2hDLGFBQWEsRUFBRSxPQUFPLENBQUMsV0FBVyxJQUFJLE9BQU8sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDeEcsUUFBUSxFQUFFLE9BQU8sQ0FBQyxRQUFRO1FBQzFCLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSTtRQUNsQixNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU07UUFDdEIsU0FBUyxFQUFFLE9BQU8sQ0FBQyxTQUFTO1FBQzVCLFFBQVEsRUFBRSxPQUFPLENBQUMsUUFBUTtRQUMxQixXQUFXLEVBQUUsT0FBTyxDQUFDLFdBQVc7UUFDaEMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJO1FB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SUFBSSxPQUFPLENBQUMsUUFBUSxLQUFLLFNBQVMsRUFBRTtZQUNsQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQ25EO1FBQ0QsSUFBSSxPQUFPLENBQUMsSUFBSSxFQUFFO1lBQ2hCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDM0M7UUFDRCxJQUFJLE9BQU8sQ0FBQyxLQUFLLEVBQUU7WUFDakIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUM3QztRQUNELElBQUksT0FBTyxDQUFDLEdBQUcsRUFBRTtZQUNmLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDekM7SUFDSCxDQUFDO0lBRU0sUUFBUTtRQUNiLE9BQU8sb0JBQW9CLENBQUM7SUFDOUIsQ0FBQztDQUNGO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsU0FBUyxDQUFDLE9BQW1DO0lBQzNELE9BQU8sSUFBSSxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUN6QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIEFjdGl2YXRlZFJvdXRlU25hcHNob3QsIGNvbnZlcnRUb1BhcmFtTWFwLCBEYXRhLCBQYXJhbU1hcCwgUGFyYW1zLCBSb3V0ZSwgVXJsU2VnbWVudCB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIG1hcCwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgVHlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBmYWtlIHBhcnRpYWwgQWN0aXZhdGVkUm91dGUgZm9yIHRlc3RzLlxuICpcbiAqIElmIHlvdSBwYXNzIHBhcmFtcywgdGhlbiB0aGUgY3JlYXRlZCByb3V0ZSdzIHBhcmFtTWFwIHdpbGwgY29udGFpbiB0aGUgc2FtZSB2YWx1ZXMuXG4gKiBUaGUgc2FtZSBnb2VzIGZvciBxdWVyeVBhcmFtcyBhbmQgcXVlcnlQYXJhbU1hcC5cbiAqXG4gKiBJZiB5b3UgcGFzcyBhIHBhcmVudCByb3V0ZSBhbmQgYSBzbmFwc2hvdCwgYW5kIHRoZSBwYXNzZWQgc25hcHNob3QgZG9lc24ndCBoYXZlIGEgcGFyZW50LCB0aGVuIHRoZSBzbmFwc2hvdCdzXG4gKiBwYXJlbnQgd2lsbCBiZSBzZXQgdG8gdGhlIHBhcmVudCByb3V0ZSBzbmFwc2hvdC4gVGhpcyBhbGxvd3MgdGhlIGNvZGUgdW5kZXIgdGVzdCB0byB1c2VcbiAqIGByb3V0ZS5wYXJlbnQuc25hcHNob3RgIG9yIGByb3V0ZS5zbmFwc2hvdC5wYXJlbnRgLlxuICpcbiAqIElmIHlvdSBwYXNzIGEgc25hcHNob3Qgd2l0aCBhIHBhcmVudCwgYnV0IGRvbid0IHBhc3MgYSBwYXJlbnQgb3IgcGFzcyBhIHBhcmVudCB3aXRob3V0IHNuYXBzaG90LCB0aGVuIHRoZSByb3V0ZSdzXG4gKiBwYXJlbnQgc25hcHNob3Qgd2lsbCBiZSBzZXQgdG8gdGhlIGdpdmVuIHNuYXBzaG90J3MgcGFyZW50LiBUaGlzIGFsbG93cyB0aGUgY29kZSB1bmRlciB0ZXN0IHRvIHVzZVxuICogYHJvdXRlLnBhcmVudC5zbmFwc2hvdGAgb3IgYHJvdXRlLnNuYXBzaG90LnBhcmVudGAuXG4gKlxuICogQHJldHVybnMgYSBwYXJ0aWFsbHkgcG9wdWxhdGVkLCBmYWtlIEFjdGl2YXRlZFJvdXRlLCBkZXBlbmRpbmcgb24gd2hhdCB5b3UgcGFzc2VkIGluXG4gKiBAZGVwcmVjYXRlZCBmYXZvciBzdHViUm91dGUsIHdoaWNoIGNyZWF0ZXMgYW4gZWFzaWVyIHRvIHVzZSBhbmQgbW9yZSBsb2dpY2FsIHN0dWJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZha2VSb3V0ZShvcHRpb25zOiB7XG4gIHVybD86IE9ic2VydmFibGU8VXJsU2VnbWVudFtdPjtcbiAgLyoqIEFuIG9ic2VydmFibGUgb2YgdGhlIG1hdHJpeCBwYXJhbWV0ZXJzIHNjb3BlZCB0byB0aGlzIHJvdXRlICovXG4gIHBhcmFtcz86IE9ic2VydmFibGU8UGFyYW1zPjtcbiAgLyoqIEFuIG9ic2VydmFibGUgb2YgdGhlIHF1ZXJ5IHBhcmFtZXRlcnMgc2hhcmVkIGJ5IGFsbCB0aGUgcm91dGVzICovXG4gIHF1ZXJ5UGFyYW1zPzogT2JzZXJ2YWJsZTxQYXJhbXM+O1xuICAvKiogQW4gb2JzZXJ2YWJsZSBvZiB0aGUgVVJMIGZyYWdtZW50IHNoYXJlZCBieSBhbGwgdGhlIHJvdXRlcyAqL1xuICBmcmFnbWVudD86IE9ic2VydmFibGU8c3RyaW5nPjtcbiAgLyoqIEFuIG9ic2VydmFibGUgb2YgdGhlIHN0YXRpYyBhbmQgcmVzb2x2ZWQgZGF0YSBvZiB0aGlzIHJvdXRlLiAqL1xuICBkYXRhPzogT2JzZXJ2YWJsZTxEYXRhPjtcbiAgLyoqIFRoZSBvdXRsZXQgbmFtZSBvZiB0aGUgcm91dGUuIEl0J3MgYSBjb25zdGFudCAqL1xuICBvdXRsZXQ/OiBzdHJpbmc7XG4gIC8qKiBUaGUgY29tcG9uZW50IG9mIHRoZSByb3V0ZS4gSXQncyBhIGNvbnN0YW50ICovXG4gIGNvbXBvbmVudD86IFR5cGU8dW5rbm93bj4gfCBzdHJpbmcgfCBudWxsO1xuICAvKiogVGhlIGN1cnJlbnQgc25hcHNob3Qgb2YgdGhpcyByb3V0ZSAqL1xuICBzbmFwc2hvdD86IEFjdGl2YXRlZFJvdXRlU25hcHNob3Q7XG4gIC8qKiBUaGUgY29uZmlndXJhdGlvbiB1c2VkIHRvIG1hdGNoIHRoaXMgcm91dGUgKi9cbiAgcm91dGVDb25maWc/OiBSb3V0ZSB8IG51bGw7XG4gIC8qKiBUaGUgcm9vdCBvZiB0aGUgcm91dGVyIHN0YXRlICovXG4gIHJvb3Q/OiBBY3RpdmF0ZWRSb3V0ZTtcbiAgLyoqIFRoZSBwYXJlbnQgb2YgdGhpcyByb3V0ZSBpbiB0aGUgcm91dGVyIHN0YXRlIHRyZWUgKi9cbiAgcGFyZW50PzogQWN0aXZhdGVkUm91dGUgfCBudWxsO1xuICAvKiogVGhlIGZpcnN0IGNoaWxkIG9mIHRoaXMgcm91dGUgaW4gdGhlIHJvdXRlciBzdGF0ZSB0cmVlICovXG4gIGZpcnN0Q2hpbGQ/OiBBY3RpdmF0ZWRSb3V0ZTtcbiAgLyoqIFRoZSBjaGlsZHJlbiBvZiB0aGlzIHJvdXRlIGluIHRoZSByb3V0ZXIgc3RhdGUgdHJlZSAqL1xuICBjaGlsZHJlbj86IEFjdGl2YXRlZFJvdXRlW107XG4gIC8qKiBUaGUgcGF0aCBmcm9tIHRoZSByb290IG9mIHRoZSByb3V0ZXIgc3RhdGUgdHJlZSB0byB0aGlzIHJvdXRlICovXG4gIHBhdGhGcm9tUm9vdD86IEFjdGl2YXRlZFJvdXRlW107XG59KTogQWN0aXZhdGVkUm91dGUge1xuICBjb25zdCByZXN1bHQgPSB7XG4gICAgdXJsOiBvcHRpb25zLnVybCxcbiAgICBwYXJhbXM6IG9wdGlvbnMucGFyYW1zLFxuICAgIHBhcmFtTWFwOiBvcHRpb25zLnBhcmFtcyAmJiBvcHRpb25zLnBhcmFtcy5waXBlKG1hcChwYXJhbXMgPT4gY29udmVydFRvUGFyYW1NYXAocGFyYW1zKSkpLFxuICAgIHF1ZXJ5UGFyYW1zOiBvcHRpb25zLnF1ZXJ5UGFyYW1zLFxuICAgIHF1ZXJ5UGFyYW1NYXA6IG9wdGlvbnMucXVlcnlQYXJhbXMgJiYgb3B0aW9ucy5xdWVyeVBhcmFtcy5waXBlKG1hcChwYXJhbXMgPT4gY29udmVydFRvUGFyYW1NYXAocGFyYW1zKSkpLFxuICAgIGZyYWdtZW50OiBvcHRpb25zLmZyYWdtZW50LFxuICAgIGRhdGE6IG9wdGlvbnMuZGF0YSxcbiAgICBvdXRsZXQ6IG9wdGlvbnMub3V0bGV0LFxuICAgIGNvbXBvbmVudDogb3B0aW9ucy5jb21wb25lbnQsXG4gICAgc25hcHNob3Q6IG9wdGlvbnMuc25hcHNob3QsXG4gICAgcm91dGVDb25maWc6IG9wdGlvbnMucm91dGVDb25maWcsXG4gICAgcm9vdDogb3B0aW9ucy5yb290LFxuICAgIHBhcmVudDogb3B0aW9ucy5wYXJlbnQsXG4gICAgZmlyc3RDaGlsZDogb3B0aW9ucy5maXJzdENoaWxkLFxuICAgIGNoaWxkcmVuOiBvcHRpb25zLmNoaWxkcmVuLFxuICAgIHBhdGhGcm9tUm9vdDogb3B0aW9ucy5wYXRoRnJvbVJvb3RcbiAgfSBhcyBBY3RpdmF0ZWRSb3V0ZTtcblxuICBmb3IgKGxldCByb3V0ZTogbnVsbCB8IEFjdGl2YXRlZFJvdXRlID0gcmVzdWx0OyByb3V0ZTsgcm91dGUgPSByb3V0ZS5wYXJlbnQpIHtcbiAgICBpZiAocm91dGUucGFyZW50ICYmIHJvdXRlLnBhcmVudC5zbmFwc2hvdCAmJiAhcm91dGUuc25hcHNob3QpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuICAgICAgcm91dGUuc25hcHNob3QgPSBmYWtlU25hcHNob3Qoe30pO1xuICAgIH1cbiAgICBpZiAocm91dGUucGFyZW50ICYmIHJvdXRlLnBhcmVudC5zbmFwc2hvdCAmJiAhcm91dGUuc25hcHNob3QucGFyZW50KSB7XG4gICAgICAocm91dGUuc25hcHNob3QgYXMgT21pdDxBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LCAncGFyZW50Jz4gJiB7IHBhcmVudDogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCB9KS5wYXJlbnQgPSByb3V0ZS5wYXJlbnQuc25hcHNob3Q7XG4gICAgfVxuXG4gICAgaWYgKHJvdXRlLnNuYXBzaG90ICYmIHJvdXRlLnNuYXBzaG90LnBhcmVudCAmJiAhcm91dGUucGFyZW50KSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbiAgICAgIChyb3V0ZSBhcyBPbWl0PEFjdGl2YXRlZFJvdXRlLCAncGFyZW50Jz4gJiB7IHBhcmVudDogQWN0aXZhdGVkUm91dGUgfSkucGFyZW50ID0gZmFrZVJvdXRlKHt9KTtcbiAgICB9XG4gICAgaWYgKHJvdXRlLnNuYXBzaG90ICYmIHJvdXRlLnNuYXBzaG90LnBhcmVudCAmJiByb3V0ZS5wYXJlbnQgJiYgIXJvdXRlLnBhcmVudC5zbmFwc2hvdCkge1xuICAgICAgcm91dGUucGFyZW50LnNuYXBzaG90ID0gcm91dGUuc25hcHNob3QucGFyZW50O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZha2UgcGFydGlhbCBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90IGZvciB0ZXN0cy5cbiAqXG4gKiBJZiB5b3UgcGFzcyBwYXJhbXMsIHRoZW4gdGhlIGNyZWF0ZWQgc25hcHNob3QncyBwYXJhbU1hcCB3aWxsIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWVzLlxuICogVGhlIHNhbWUgZ29lcyBmb3IgcXVlcnlQYXJhbXMgYW5kIHF1ZXJ5UGFyYW1NYXAuXG4gKlxuICogQHJldHVybnMgYSBwYXJ0aWFsbHkgcG9wdWxhdGVkLCBmYWtlIEFjdGl2YXRlZFJvdXRlLCBkZXBlbmRpbmcgb24gd2hhdCB5b3UgcGFzc2VkIGluXG4gKiBAZGVwcmVjYXRlZCBmYXZvciBzdHViUm91dGUsIHdoaWNoIGNyZWF0ZXMgYW4gZWFzaWVyIHRvIHVzZSBhbmQgbW9yZSBsb2dpY2FsIHN0dWIgZm9yIGJvdGggdGhlIHJvdXRlIGFuZCBpdHMgc25hcHNob3RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZha2VTbmFwc2hvdChvcHRpb25zOiB7XG4gIHVybD86IFVybFNlZ21lbnRbXTtcbiAgLyoqIFRoZSBtYXRyaXggcGFyYW1ldGVycyBzY29wZWQgdG8gdGhpcyByb3V0ZSAqL1xuICBwYXJhbXM/OiBQYXJhbXM7XG4gIC8qKiBUaGUgcXVlcnkgcGFyYW1ldGVycyBzaGFyZWQgYnkgYWxsIHRoZSByb3V0ZXMgKi9cbiAgcXVlcnlQYXJhbXM/OiBQYXJhbXM7XG4gIC8qKiBUaGUgVVJMIGZyYWdtZW50IHNoYXJlZCBieSBhbGwgdGhlIHJvdXRlcyAqL1xuICBmcmFnbWVudD86IHN0cmluZztcbiAgLyoqIFRoZSBzdGF0aWMgYW5kIHJlc29sdmVkIGRhdGEgb2YgdGhpcyByb3V0ZSAqL1xuICBkYXRhPzogRGF0YTtcbiAgLyoqIFRoZSBvdXRsZXQgbmFtZSBvZiB0aGUgcm91dGUgKi9cbiAgb3V0bGV0Pzogc3RyaW5nO1xuICAvKiogVGhlIGNvbXBvbmVudCBvZiB0aGUgcm91dGUgKi9cbiAgY29tcG9uZW50PzogVHlwZTx1bmtub3duPiB8IHN0cmluZyB8IG51bGw7XG4gIC8qKiBUaGUgY29uZmlndXJhdGlvbiB1c2VkIHRvIG1hdGNoIHRoaXMgcm91dGUgKi9cbiAgcm91dGVDb25maWc/OiBSb3V0ZTtcbiAgLyoqIFRoZSByb290IG9mIHRoZSByb3V0ZXIgc3RhdGUgKi9cbiAgcm9vdD86IEFjdGl2YXRlZFJvdXRlU25hcHNob3Q7XG4gIC8qKiBUaGUgcGFyZW50IG9mIHRoaXMgcm91dGUgaW4gdGhlIHJvdXRlciBzdGF0ZSB0cmVlICovXG4gIHBhcmVudD86IEFjdGl2YXRlZFJvdXRlU25hcHNob3QgfCBudWxsO1xuICAvKiogVGhlIGZpcnN0IGNoaWxkIG9mIHRoaXMgcm91dGUgaW4gdGhlIHJvdXRlciBzdGF0ZSB0cmVlICovXG4gIGZpcnN0Q2hpbGQ/OiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90IHwgbnVsbDtcbiAgLyoqIFRoZSBjaGlsZHJlbiBvZiB0aGlzIHJvdXRlIGluIHRoZSByb3V0ZXIgc3RhdGUgdHJlZSAqL1xuICBjaGlsZHJlbj86IEFjdGl2YXRlZFJvdXRlU25hcHNob3RbXTtcbiAgLyoqIFRoZSBwYXRoIGZyb20gdGhlIHJvb3Qgb2YgdGhlIHJvdXRlciBzdGF0ZSB0cmVlIHRvIHRoaXMgcm91dGUgKi9cbiAgcGF0aEZyb21Sb290PzogQWN0aXZhdGVkUm91dGVTbmFwc2hvdFtdO1xufSk6IEFjdGl2YXRlZFJvdXRlU25hcHNob3Qge1xuICByZXR1cm4ge1xuICAgIHVybDogb3B0aW9ucy51cmwsXG4gICAgcGFyYW1zOiBvcHRpb25zLnBhcmFtcyxcbiAgICBwYXJhbU1hcDogb3B0aW9ucy5wYXJhbXMgJiYgY29udmVydFRvUGFyYW1NYXAob3B0aW9ucy5wYXJhbXMpLFxuICAgIHF1ZXJ5UGFyYW1zOiBvcHRpb25zLnF1ZXJ5UGFyYW1zLFxuICAgIHF1ZXJ5UGFyYW1NYXA6IG9wdGlvbnMucXVlcnlQYXJhbXMgJiYgY29udmVydFRvUGFyYW1NYXAob3B0aW9ucy5xdWVyeVBhcmFtcyksXG4gICAgZnJhZ21lbnQ6IG9wdGlvbnMuZnJhZ21lbnQsXG4gICAgZGF0YTogb3B0aW9ucy5kYXRhLFxuICAgIG91dGxldDogb3B0aW9ucy5vdXRsZXQsXG4gICAgY29tcG9uZW50OiBvcHRpb25zLmNvbXBvbmVudCxcbiAgICByb3V0ZUNvbmZpZzogb3B0aW9ucy5yb3V0ZUNvbmZpZyxcbiAgICByb290OiBvcHRpb25zLnJvb3QsXG4gICAgcGFyZW50OiBvcHRpb25zLnBhcmVudCxcbiAgICBmaXJzdENoaWxkOiBvcHRpb25zLmZpcnN0Q2hpbGQsXG4gICAgY2hpbGRyZW46IG9wdGlvbnMuY2hpbGRyZW4sXG4gICAgcGF0aEZyb21Sb290OiBvcHRpb25zLnBhdGhGcm9tUm9vdFxuICB9IGFzIEFjdGl2YXRlZFJvdXRlU25hcHNob3Q7XG59XG5cbi8qKlxuICogVGhlIG9wdGlvbnMgdGhhdCBhcmUgcGFzc2VkIHdoZW4gY3JlYXRpbmcgYW4gQWN0aXZhdGVkUm91dGVTdHViLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFjdGl2YXRlZFJvdXRlU3R1Yk9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIGluaXRpYWwgdmFsdWVzIG9mIHRoZSBwYXJhbWV0ZXJzIG9mIHRoZSByb3V0ZVxuICAgKi9cbiAgcGFyYW1zPzogUGFyYW1zO1xuICAvKipcbiAgICogVGhlIGluaXRpYWwgdmFsdWVzIG9mIHRoZSBxdWVyeSBwYXJhbWV0ZXJzIG9mIHRoZSByb3V0ZVxuICAgKi9cbiAgcXVlcnlQYXJhbXM/OiBQYXJhbXM7XG4gIC8qKlxuICAgKiBUaGUgaW5pdGlhbCB2YWx1ZXMgb2YgdGhlIGRhdGEgb2YgdGhlIHJvdXRlXG4gICAqL1xuICBkYXRhPzogRGF0YTtcbiAgLyoqXG4gICAqIFRoZSBpbml0aWFsIHZhbHVlcyBvZiB0aGUgdGl0bGUgb2YgdGhlIHJvdXRlXG4gICAqL1xuICB0aXRsZT86IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBpbml0aWFsIGZyYWdtZW50IG9mIHRoZSByb3V0ZVxuICAgKi9cbiAgZnJhZ21lbnQ/OiBzdHJpbmcgfCBudWxsO1xuICAvKipcbiAgICogVGhlIGluaXRpYWwgdXJsIG9mIHRoZSByb3V0ZVxuICAgKi9cbiAgdXJsPzogVXJsU2VnbWVudFtdO1xuICAvKipcbiAgICogVGhlIHBhcmVudCBvZiB0aGUgcm91dGVcbiAgICovXG4gIHBhcmVudD86IEFjdGl2YXRlZFJvdXRlU3R1YiB8IG51bGw7XG4gIC8qKlxuICAgKiBUaGUgZmlyc3QgY2hpbGQgb2YgdGhlIHJvdXRlXG4gICAqL1xuICBmaXJzdENoaWxkPzogQWN0aXZhdGVkUm91dGVTdHViIHwgbnVsbDtcbiAgLyoqXG4gICAqIFRoZSBjaGlsZHJlbiBvZiB0aGUgcm91dGVcbiAgICovXG4gIGNoaWxkcmVuPzogQWN0aXZhdGVkUm91dGVTdHViW10gfCBudWxsO1xuICAvKipcbiAgICogVGhlIGNvbmZpZ3VyYXRpb24gb2YgdGhlIHJvdXRlXG4gICAqL1xuICByb3V0ZUNvbmZpZz86IFJvdXRlIHwgbnVsbDtcbn1cblxuY2xhc3MgQWN0aXZhdGVkUm91dGVTbmFwc2hvdFN0dWIgZXh0ZW5kcyBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90IHtcbiAgcHJpdmF0ZSBfcGFyZW50OiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90IHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgX3Jvb3Q6IEFjdGl2YXRlZFJvdXRlU25hcHNob3Q7XG4gIHByaXZhdGUgX2ZpcnN0Q2hpbGQ6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBfY2hpbGRyZW46IEFycmF5PEFjdGl2YXRlZFJvdXRlU25hcHNob3Q+ID0gW107XG4gIHByaXZhdGUgX3BhdGhGcm9tUm9vdDogQXJyYXk8QWN0aXZhdGVkUm91dGVTbmFwc2hvdD4gPSBbXTtcbiAgcHJpdmF0ZSBfdGl0bGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICBnZXQgcGFyZW50KCk6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fcGFyZW50O1xuICB9XG5cbiAgc2V0IHBhcmVudCh2YWx1ZTogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCB8IG51bGwpIHtcbiAgICB0aGlzLl9wYXJlbnQgPSB2YWx1ZTtcbiAgfVxuXG4gIGdldCByb290KCk6IEFjdGl2YXRlZFJvdXRlU25hcHNob3Qge1xuICAgIHJldHVybiB0aGlzLl9yb290O1xuICB9XG5cbiAgc2V0IHJvb3QodmFsdWU6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QpIHtcbiAgICB0aGlzLl9yb290ID0gdmFsdWU7XG4gIH1cblxuICBnZXQgZmlyc3RDaGlsZCgpOiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90IHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX2ZpcnN0Q2hpbGQ7XG4gIH1cblxuICBzZXQgZmlyc3RDaGlsZCh2YWx1ZTogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCB8IG51bGwpIHtcbiAgICB0aGlzLl9maXJzdENoaWxkID0gdmFsdWU7XG4gIH1cblxuICBnZXQgY2hpbGRyZW4oKTogQXJyYXk8QWN0aXZhdGVkUm91dGVTbmFwc2hvdD4ge1xuICAgIHJldHVybiB0aGlzLl9jaGlsZHJlbjtcbiAgfVxuXG4gIHNldCBjaGlsZHJlbih2YWx1ZTogQXJyYXk8QWN0aXZhdGVkUm91dGVTbmFwc2hvdD4pIHtcbiAgICB0aGlzLl9jaGlsZHJlbiA9IHZhbHVlO1xuICB9XG5cbiAgZ2V0IHBhdGhGcm9tUm9vdCgpOiBBcnJheTxBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90PiB7XG4gICAgcmV0dXJuIHRoaXMuX3BhdGhGcm9tUm9vdDtcbiAgfVxuXG4gIHNldCBwYXRoRnJvbVJvb3QodmFsdWU6IEFycmF5PEFjdGl2YXRlZFJvdXRlU25hcHNob3Q+KSB7XG4gICAgdGhpcy5fcGF0aEZyb21Sb290ID0gdmFsdWU7XG4gIH1cblxuICBnZXQgdGl0bGUoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fdGl0bGU7XG4gIH1cblxuICBzZXQgdGl0bGUodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX3RpdGxlID0gdmFsdWU7XG4gIH1cblxuICBnZXQgcGFyYW1NYXAoKTogUGFyYW1NYXAge1xuICAgIHJldHVybiBjb252ZXJ0VG9QYXJhbU1hcCh0aGlzLnBhcmFtcyk7XG4gIH1cblxuICBnZXQgcXVlcnlQYXJhbU1hcCgpOiBQYXJhbU1hcCB7XG4gICAgcmV0dXJuIGNvbnZlcnRUb1BhcmFtTWFwKHRoaXMucXVlcnlQYXJhbXMpO1xuICB9XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLl9yb290ID0gdGhpcztcbiAgfVxufVxuXG4vKipcbiAqIEEgc3R1YiBmb3IgQWN0aXZhdGVkUm91dGUuIEl0IGJlaGF2ZXMgYWxtb3N0IHRoZSBzYW1lIHdheSBhcyB0aGUgYWN0dWFsIEFjdGl2YXRlZFJvdXRlLCBleHBvc2luZyBhIHNuYXBzaG90XG4gKiBhbmQgb2JzZXJ2YWJsZXMgZm9yIHRoZSBwYXJhbXMsIHF1ZXJ5IHBhcmFtcyBldGMuLCB3aGljaCBhcmUga2VwdCBpbiBzeW5jLlxuICpcbiAqIEluIGFkZGl0aW9uLCB0aGlzIHN0dWIgYWxsb3dzIHNpbXVsYXRpbmcgYSBuYXZpZ2F0aW9uIGJ5IGNoYW5naW5nIHRoZSBwYXJhbXMsIHRoZSBxdWVyeSBwYXJhbXMsIHRoZSBmcmFnbWVudCwgZXRjLlxuICogV2hlbiB0aGF0IGhhcHBlbnMsIHRoZSBzbmFwc2hvdCBpcyBtb2RpZmllZCwgdGhlbiB0aGUgcmVsZXZhbnQgb2JzZXJ2YWJsZXMgZW1pdCB0aGUgbmV3IHZhbHVlcy5cbiAqXG4gKiBUaGVyZSBhcmUgc29tZSB0aGluZ3MgdGhhdCBkb24ndCByZWFsbHkgd29yayB0aGUgc2FtZSB3YXkgYXMgdGhlIHJlYWwgQWN0aXZhdGVkUm91dGUgdGhvdWdoOlxuICogLSB0aGUgaGFuZGxpbmcgb2YgdGhlIGZpcnN0Q2hpbGQgYW5kIG9mIHRoZSBjaGlsZHJlbiBpcyBlbnRpcmVseSB1bmRlciB0aGUgdGVzdGVyJ3MgcmVzcG9uc2liaWxpdHkuIFNldHRpbmcgdGhlIHBhcmVudFxuICogICBvZiBhIHJvdXRlIHN0dWIgZG9lcyBub3QgYWRkIHRoaXMgcm91dGUgdG8gdGhlIGNoaWxkcmVuIG9mIGl0cyBwYXJlbnQsIGZvciBleGFtcGxlLlxuICogLSB3aGVuIGNoYW5naW5nIHRoZSBwYXJhbXMsIHF1ZXJ5IHBhcmFtcywgZnJhZ21lbnQsIGV0Yy4sIHRoZWlyIGFzc29jaWF0ZWQgb2JzZXJ2YWJsZSBlbWl0cyB1bmNvbmRpdGlvbmFsbHksIGluc3RlYWQgb2ZcbiAqICAgZmlyc3QgY2hlY2tpbmcgaWYgdGhlIHZhbHVlIGlzIGFjdHVhbGx5IGRpZmZlcmVudCBmcm9tIGJlZm9yZS4gSXQncyB0aHVzIHRoZSByZXNwb25zaWJpbGl0eSBvZiB0aGUgdGVzdGVyIHRvIG5vdFxuICogICBjaGFuZ2UgdGhlIHZhbHVlcyBpZiB0aGV5J3JlIHRoZSBzYW1lIGFzIGJlZm9yZS5cbiAqIC0gdGhlIHBhcmFtcywgcGFyYW1NYXAsIHF1ZXJ5UGFyYW1zIGFuZCBxdWVyeVBhcmFtTWFwIG9iamVjdHMgb2YgdGhlIHJvdXRlIHNuYXBzaG90IGNoYW5nZSB3aGVuIHBhcmFtcyBvciBxdWVyeSBwYXJhbXMgYXJlIHNldFxuICogICBvbiB0aGUgc3R1YiByb3V0ZS4gU28gaWYgdGhlIGNvZGUga2VlcHMgYSByZWZlcmVuY2UgdG8gcGFyYW1zIG9yIHBhcmFtTWFwcywgaXQgd29uJ3Qgc2VlIHRoZSBjaGFuZ2VzLlxuICovXG5leHBvcnQgY2xhc3MgQWN0aXZhdGVkUm91dGVTdHViIGV4dGVuZHMgQWN0aXZhdGVkUm91dGUge1xuICBwcml2YXRlIF9maXJzdENoaWxkOiBBY3RpdmF0ZWRSb3V0ZVN0dWIgfCBudWxsO1xuICBwcml2YXRlIF9jaGlsZHJlbjogQXJyYXk8QWN0aXZhdGVkUm91dGVTdHViPjtcblxuICBwcml2YXRlIHJlYWRvbmx5IHBhcmFtc1N1YmplY3Q6IEJlaGF2aW9yU3ViamVjdDxQYXJhbXM+O1xuICBwcml2YXRlIHJlYWRvbmx5IHF1ZXJ5UGFyYW1zU3ViamVjdDogQmVoYXZpb3JTdWJqZWN0PFBhcmFtcz47XG4gIHByaXZhdGUgcmVhZG9ubHkgZGF0YVN1YmplY3Q6IEJlaGF2aW9yU3ViamVjdDxEYXRhPjtcbiAgcHJpdmF0ZSByZWFkb25seSBmcmFnbWVudFN1YmplY3Q6IEJlaGF2aW9yU3ViamVjdDxzdHJpbmcgfCBudWxsPjtcbiAgcHJpdmF0ZSByZWFkb25seSB1cmxTdWJqZWN0OiBCZWhhdmlvclN1YmplY3Q8QXJyYXk8VXJsU2VnbWVudD4+O1xuICBwcml2YXRlIHJlYWRvbmx5IHRpdGxlU3ViamVjdDogQmVoYXZpb3JTdWJqZWN0PHN0cmluZyB8IHVuZGVmaW5lZD47XG5cbiAgcHJpdmF0ZSBfcGFyZW50OiBBY3RpdmF0ZWRSb3V0ZVN0dWIgfCBudWxsO1xuICBwcml2YXRlIF9yb290OiBBY3RpdmF0ZWRSb3V0ZVN0dWI7XG4gIHByaXZhdGUgX3BhdGhGcm9tUm9vdDogQXJyYXk8QWN0aXZhdGVkUm91dGVTdHViPjtcblxuICAvKipcbiAgICogQ29uc3RydWN0cyBhIG5ldyBpbnN0YW5jZSwgYmFzZWQgb24gdGhlIGdpdmVuIG9wdGlvbnMuXG4gICAqIElmIGFuIG9wdGlvbiBpcyBub3QgcHJvdmlkZWQgKG9yIGlmIG5vIG9wdGlvbiBpcyBwcm92aWRlZCBhdCBhbGwpLCB0aGVuIHRoZSByb3V0ZSBoYXMgYSBkZWZhdWx0IHZhbHVlIGZvciB0aGlzIG9wdGlvblxuICAgKiAoZW1wdHkgcGFyYW1ldGVycyBmb3IgZXhhbXBsZSwgbnVsbCBmcmFnbWVudCwgZXRjLilcbiAgICogSWYgbm8gcGFyZW50IGlzIHBhc3NlZCwgdGhlbiB0aGlzIHJvdXRlIGhhcyBubyBwYXJlbnQgYW5kIGlzIHRodXMgc2V0IGFzIHRoZSByb290LiBPdGhlcndpc2UsIHRoZSByb290IGFuZCB0aGUgcGF0aFxuICAgKiBmcm9tIHJvb3QgYXJlIGNyZWF0ZWQgYmFzZWQgb24gdGhlIHJvb3QgYW5kIHBhdGggZnJvbSByb290IG9mIHRoZSBnaXZlbiBwYXJlbnQgcm91dGUuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihvcHRpb25zPzogQWN0aXZhdGVkUm91dGVTdHViT3B0aW9ucykge1xuICAgIHN1cGVyKCk7XG5cbiAgICBjb25zdCBzbmFwc2hvdCA9IG5ldyBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90U3R1YigpO1xuICAgIHRoaXMuc25hcHNob3QgPSBzbmFwc2hvdDtcblxuICAgIHRoaXMuX2ZpcnN0Q2hpbGQgPSBvcHRpb25zPy5maXJzdENoaWxkID8/IG51bGw7XG4gICAgdGhpcy5fY2hpbGRyZW4gPSBvcHRpb25zPy5jaGlsZHJlbiA/PyBbXTtcbiAgICB0aGlzLl9wYXJlbnQgPSBvcHRpb25zPy5wYXJlbnQgPz8gbnVsbDtcbiAgICB0aGlzLl9yb290ID0gdGhpcy5wYXJlbnQ/LnJvb3QgPz8gdGhpcztcbiAgICB0aGlzLl9wYXRoRnJvbVJvb3QgPSB0aGlzLnBhcmVudCA/IFsuLi50aGlzLnBhcmVudC5wYXRoRnJvbVJvb3QsIHRoaXNdIDogW3RoaXNdO1xuXG4gICAgc25hcHNob3QucGFyYW1zID0gb3B0aW9ucz8ucGFyYW1zID8/IHt9O1xuICAgIHNuYXBzaG90LnF1ZXJ5UGFyYW1zID0gb3B0aW9ucz8ucXVlcnlQYXJhbXMgPz8ge307XG4gICAgc25hcHNob3QuZGF0YSA9IG9wdGlvbnM/LmRhdGEgPz8ge307XG4gICAgc25hcHNob3QudGl0bGUgPSBvcHRpb25zPy50aXRsZTtcbiAgICBzbmFwc2hvdC5mcmFnbWVudCA9IG9wdGlvbnM/LmZyYWdtZW50ID8/IG51bGw7XG4gICAgc25hcHNob3QudXJsID0gb3B0aW9ucz8udXJsID8/IFtdO1xuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgdGhlIHJvdXRlQ29uZmlnIGlzIHJlYWRvbmx5LCBidXQgd2UgbmVlZCB0byBvdmVyd3JpdGUgaXQgaGVyZVxuICAgIHNuYXBzaG90LnJvdXRlQ29uZmlnID0gb3B0aW9ucz8ucm91dGVDb25maWcgPz8gbnVsbDtcblxuICAgIHNuYXBzaG90LmZpcnN0Q2hpbGQgPSB0aGlzLmZpcnN0Q2hpbGQ/LnNuYXBzaG90ID8/IG51bGw7XG4gICAgc25hcHNob3QuY2hpbGRyZW4gPSB0aGlzLmNoaWxkcmVuPy5tYXAocm91dGUgPT4gcm91dGUuc25hcHNob3QpID8/IFtdO1xuICAgIHNuYXBzaG90LnBhcmVudCA9IHRoaXMucGFyZW50Py5zbmFwc2hvdCA/PyBudWxsO1xuICAgIHNuYXBzaG90LnJvb3QgPSB0aGlzLnJvb3Quc25hcHNob3Q7XG4gICAgc25hcHNob3QucGF0aEZyb21Sb290ID0gdGhpcy5wYXRoRnJvbVJvb3QubWFwKHJvdXRlID0+IHJvdXRlLnNuYXBzaG90KTtcblxuICAgIHRoaXMucGFyYW1zU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8UGFyYW1zPih0aGlzLnNuYXBzaG90LnBhcmFtcyk7XG4gICAgdGhpcy5xdWVyeVBhcmFtc1N1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFBhcmFtcz4odGhpcy5zbmFwc2hvdC5xdWVyeVBhcmFtcyk7XG4gICAgdGhpcy5kYXRhU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8RGF0YT4odGhpcy5zbmFwc2hvdC5kYXRhKTtcbiAgICB0aGlzLnRpdGxlU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nIHwgdW5kZWZpbmVkPih0aGlzLnNuYXBzaG90LnRpdGxlKTtcbiAgICB0aGlzLmZyYWdtZW50U3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nIHwgbnVsbD4odGhpcy5zbmFwc2hvdC5mcmFnbWVudCk7XG4gICAgdGhpcy51cmxTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxBcnJheTxVcmxTZWdtZW50Pj4odGhpcy5zbmFwc2hvdC51cmwpO1xuXG4gICAgdGhpcy5wYXJhbXMgPSB0aGlzLnBhcmFtc1N1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gICAgdGhpcy5xdWVyeVBhcmFtcyA9IHRoaXMucXVlcnlQYXJhbXNTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICAgIHRoaXMuZGF0YSA9IHRoaXMuZGF0YVN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gICAgdGhpcy5mcmFnbWVudCA9IHRoaXMuZnJhZ21lbnRTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICAgIHRoaXMudXJsID0gdGhpcy51cmxTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgdGhlIHRpdGxlIGlzIHJlYWRvbmx5LCBidXQgd2UgbmVlZCB0byBiZSBhYmxlIHRvIGluaXRpYWxpemUgaXQgIGhlcmVcbiAgICB0aGlzLnRpdGxlID0gdGhpcy50aXRsZVN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBnZXQgcm9vdCgpIHtcbiAgICByZXR1cm4gdGhpcy5fcm9vdDtcbiAgfVxuXG4gIGdldCBwYXJlbnQoKTogQWN0aXZhdGVkUm91dGVTdHViIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX3BhcmVudDtcbiAgfVxuXG4gIGdldCBwYXRoRnJvbVJvb3QoKTogQXJyYXk8QWN0aXZhdGVkUm91dGVTdHViPiB7XG4gICAgcmV0dXJuIHRoaXMuX3BhdGhGcm9tUm9vdDtcbiAgfVxuXG4gIGdldCBmaXJzdENoaWxkKCk6IEFjdGl2YXRlZFJvdXRlU3R1YiB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9maXJzdENoaWxkO1xuICB9XG5cbiAgZ2V0IGNoaWxkcmVuKCk6IEFycmF5PEFjdGl2YXRlZFJvdXRlU3R1Yj4ge1xuICAgIHJldHVybiB0aGlzLl9jaGlsZHJlbjtcbiAgfVxuXG4gIGdldCByb3V0ZUNvbmZpZygpOiBSb3V0ZSB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLnNuYXBzaG90LnJvdXRlQ29uZmlnO1xuICB9XG5cbiAgLyoqXG4gICAqIFRyaWdnZXJzIGEgbmF2aWdhdGlvbiB3aXRoIHRoZSBnaXZlbiBuZXcgcGFyYW1ldGVycy4gQWxsIHRoZSBvdGhlciBwYXJ0cyAocXVlcnkgcGFyYW1zIGV0Yy4pIHN0YXkgYXMgdGhleSBhcmUuXG4gICAqIFRoaXMgaXMgYSBzaG9ydGN1dCB0byBgdHJpZ2dlck5hdmlnYXRpb25gIHRoYXQgY2FuIGJlIHVzZWQgdG8gb25seSBjaGFuZ2UgdGhlIHBhcmFtZXRlcnMuXG4gICAqL1xuICBwdWJsaWMgc2V0UGFyYW1zKHBhcmFtczogUGFyYW1zKTogdm9pZCB7XG4gICAgdGhpcy50cmlnZ2VyTmF2aWdhdGlvbih7IHBhcmFtcyB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUcmlnZ2VycyBhIG5hdmlnYXRpb24gd2l0aCB0aGUgZ2l2ZW4gbmV3IHBhcmFtZXRlci4gVGhlIG90aGVyIHBhcmFtZXRlcnMsIGFzIHdlbGwgYXMgYWxsIHRoZSBvdGhlciBwYXJ0cyAocXVlcnkgcGFyYW1zIGV0Yy4pXG4gICAqIHN0YXkgYXMgdGhleSBhcmUuXG4gICAqIFRoaXMgaXMgYSBzaG9ydGN1dCB0byBgdHJpZ2dlck5hdmlnYXRpb25gIHRoYXQgY2FuIGJlIHVzZWQgdG8gb25seSBjaGFuZ2Ugb25lIHBhcmFtZXRlci5cbiAgICovXG4gIHB1YmxpYyBzZXRQYXJhbShuYW1lOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnNldFBhcmFtcyh7IC4uLnRoaXMuc25hcHNob3QucGFyYW1zLCBbbmFtZV06IHZhbHVlIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFRyaWdnZXJzIGEgbmF2aWdhdGlvbiB3aXRoIHRoZSBnaXZlbiBuZXcgcXVlcnkgcGFyYW1ldGVycy4gQWxsIHRoZSBvdGhlciBwYXJ0cyAocGFyYW1zIGV0Yy4pIHN0YXkgYXMgdGhlIGFyZS5cbiAgICogVGhpcyBpcyBhIHNob3J0Y3V0IHRvIGB0cmlnZ2VyTmF2aWdhdGlvbmAgdGhhdCBjYW4gYmUgdXNlZCB0byBvbmx5IGNoYW5nZSB0aGUgcXVlcnkgcGFyYW1ldGVycy5cbiAgICovXG4gIHB1YmxpYyBzZXRRdWVyeVBhcmFtcyhxdWVyeVBhcmFtczogUGFyYW1zKTogdm9pZCB7XG4gICAgdGhpcy50cmlnZ2VyTmF2aWdhdGlvbih7IHF1ZXJ5UGFyYW1zIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFRyaWdnZXJzIGEgbmF2aWdhdGlvbiB3aXRoIHRoZSBnaXZlbiBuZXcgcGFyYW1ldGVyLiBUaGUgb3RoZXIgcXVlcnkgcGFyYW1ldGVycywgYXMgd2VsbCBhcyBhbGwgdGhlIG90aGVyIHBhcnRzIChwYXJhbXMgZXRjLilcbiAgICogc3RheSBhcyB0aGUgYXJlLlxuICAgKiBUaGlzIGlzIGEgc2hvcnRjdXQgdG8gYHRyaWdnZXJOYXZpZ2F0aW9uYCB0aGF0IGNhbiBiZSB1c2VkIHRvIG9ubHkgY2hhbmdlIG9uZSBxdWVyeSBwYXJhbWV0ZXIuXG4gICAqL1xuICBwdWJsaWMgc2V0UXVlcnlQYXJhbShuYW1lOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnNldFF1ZXJ5UGFyYW1zKHsgLi4udGhpcy5zbmFwc2hvdC5xdWVyeVBhcmFtcywgW25hbWVdOiB2YWx1ZSB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUcmlnZ2VycyBhIG5hdmlnYXRpb24gd2l0aCB0aGUgZ2l2ZW4gbmV3IGRhdGEuIFRoZSBvdGhlciBwYXJhbWV0ZXJzLCBhcyB3ZWxsIGFzIGFsbCB0aGUgb3RoZXIgcGFydHMgKHBhcmFtcyBldGMuKVxuICAgKiBzdGF5IGFzIHRoZSBhcmUuXG4gICAqIFRoaXMgaXMgYSBzaG9ydGN1dCB0byBgdHJpZ2dlck5hdmlnYXRpb25gIHRoYXQgY2FuIGJlIHVzZWQgdG8gb25seSBjaGFuZ2UgdGhlIGRhdGEuXG4gICAqL1xuICBwdWJsaWMgc2V0RGF0YShkYXRhOiBEYXRhKTogdm9pZCB7XG4gICAgdGhpcy50cmlnZ2VyTmF2aWdhdGlvbih7IGRhdGEgfSk7XG4gIH1cblxuICAvKipcbiAgICogVHJpZ2dlcnMgYSBuYXZpZ2F0aW9uIHdpdGggdGhlIGdpdmVuIG5ldyBkYXRhIGl0ZW0uIFRoZSBvdGhlciBkYXRhLCBhcyB3ZWxsIGFzIGFsbCB0aGUgb3RoZXIgcGFydHMgKHBhcmFtcyBldGMuKVxuICAgKiBzdGF5IGFzIHRoZSBhcmUuXG4gICAqIFRoaXMgaXMgYSBzaG9ydGN1dCB0byBgdHJpZ2dlck5hdmlnYXRpb25gIHRoYXQgY2FuIGJlIHVzZWQgdG8gb25seSBjaGFuZ2Ugb25lIGRhdGEgaXRlbS5cbiAgICovXG4gIHB1YmxpYyBzZXREYXRhSXRlbShuYW1lOiBzdHJpbmcsIHZhbHVlOiB1bmtub3duKTogdm9pZCB7XG4gICAgdGhpcy5zZXREYXRhKHsgLi4udGhpcy5zbmFwc2hvdC5kYXRhLCBbbmFtZV06IHZhbHVlIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFRyaWdnZXJzIGEgbmF2aWdhdGlvbiB3aXRoIHRoZSBnaXZlbiBuZXcgdGl0bGUuIFRoZSBvdGhlciBwYXJhbWV0ZXJzLCBhcyB3ZWxsIGFzIGFsbCB0aGUgb3RoZXIgcGFydHMgKHBhcmFtcyBldGMuKVxuICAgKiBzdGF5IGFzIHRoZSBhcmUuXG4gICAqIFRoaXMgaXMgYSBzaG9ydGN1dCB0byBgdHJpZ2dlck5hdmlnYXRpb25gIHRoYXQgY2FuIGJlIHVzZWQgdG8gb25seSBjaGFuZ2UgdGhlIHRpdGxlLlxuICAgKi9cbiAgcHVibGljIHNldFRpdGxlKHRpdGxlOiBzdHJpbmcgfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgICB0aGlzLnRyaWdnZXJOYXZpZ2F0aW9uKHsgdGl0bGU6IHsgdmFsdWU6IHRpdGxlIH0gfSk7XG4gIH1cblxuICAvKipcbiAgICogVHJpZ2dlcnMgYSBuYXZpZ2F0aW9uIHdpdGggdGhlIGdpdmVuIG5ldyBmcmFnbWVudC4gVGhlIG90aGVyIHBhcnRzIChwYXJhbXMgZXRjLikgIHN0YXkgYXMgdGhlIGFyZS5cbiAgICogVGhpcyBpcyBhIHNob3J0Y3V0IHRvIGB0cmlnZ2VyTmF2aWdhdGlvbmAgdGhhdCBjYW4gYmUgdXNlZCB0byBvbmx5IGNoYW5nZSB0aGUgZnJhZ21lbnQuXG4gICAqL1xuICBwdWJsaWMgc2V0RnJhZ21lbnQoZnJhZ21lbnQ6IHN0cmluZyB8IG51bGwpOiB2b2lkIHtcbiAgICB0aGlzLnRyaWdnZXJOYXZpZ2F0aW9uKHsgZnJhZ21lbnQgfSk7XG4gIH1cblxuICAvKipcbiAgICogVHJpZ2dlcnMgYSBuYXZpZ2F0aW9uIHdpdGggdGhlIGdpdmVuIG5ldyB1cmwuIFRoZSBvdGhlciBwYXJ0cyAocGFyYW1zIGV0Yy4pICBzdGF5IGFzIHRoZSBhcmUuXG4gICAqIFRoaXMgaXMgYSBzaG9ydGN1dCB0byBgdHJpZ2dlck5hdmlnYXRpb25gIHRoYXQgY2FuIGJlIHVzZWQgdG8gb25seSBjaGFuZ2UgdGhlIHVybC5cbiAgICovXG4gIHB1YmxpYyBzZXRVcmwodXJsOiBBcnJheTxVcmxTZWdtZW50Pik6IHZvaWQge1xuICAgIHRoaXMudHJpZ2dlck5hdmlnYXRpb24oeyB1cmwgfSk7XG4gIH1cblxuICAvKipcbiAgICogVHJpZ2dlcnMgYSBuYXZpZ2F0aW9uIGJhc2VkIG9uIHRoZSBnaXZlbiBvcHRpb25zLiBJZiBhbiBvcHRpb24gaXMgdW5kZWZpbmVkIG9yIG51bGwsIGl0J3MgaWdub3JlZC4gRXhjZXB0IGZvciBmcmFnbWVudCwgd2hpY2ggaXMgb25seVxuICAgKiBpZ25vcmVkIGlmIGl0J3MgdW5kZWZpbmVkLCBiZWNhdXNlIG51bGwgaXMgYSB2YWxpZCB2YWx1ZSBmb3IgYSBmcmFnbWVudC5cbiAgICpcbiAgICogVGhlIG5vbi1pZ25vcmVkIHZhbHVlcyBhcmUgdXNlZCB0byBjaGFuZ2UgdGhlIHNuYXBzaG90IG9mIHRoZSByb3V0ZS4gT25jZSB0aGUgc25hcHNob3QgaGFzIGJlZW4gbW9kaWZpZWQsXG4gICAqIHRoZSBvYnNlcnZhYmxlcyBjb3JyZXNwb25kaW5nIHRvIHRoZSB1cGRhdGVkIHBhcnRzIGVtaXQgdGhlIG5ldyB2YWx1ZS5cbiAgICpcbiAgICogU28sIHNldHRpbmcgcGFyYW1zIGFuZCBxdWVyeSBwYXJhbXMgd2lsbCBtYWtlIHRoZSBwYXJhbXMgYW5kIHF1ZXJ5UGFyYW1zIG9ic2VydmFibGVzIGVtaXQsIGJ1dCBub3QgdGhlIGZyYWdtZW50LCBkYXRhIGFuZFxuICAgKiB1cmwgb2JzZXJ2YWJsZXMgZm9yIGV4YW1wbGUuIFRoaXMgaXMgY29uc2lzdGVudCB0byBob3cgdGhlIHJvdXRlciBiZWhhdmVzLlxuICAgKlxuICAgKiBOb3RlOiBzaW5jZSB0aGUgdGl0bGUgb2YgYSByb3V0ZSBjYW4gYmVjb21lIHVuZGVmaW5lZCwgaW4gb3JkZXIgdG8gYmUgYWJsZSB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIGEgbmF2aWdhdGlvbiB3aGljaCBsZWF2ZXMgdGhlIHRpdGxlXG4gICAqIGFzIGl0IGlzIGFuZCBhIG5hdmlnYXRpb24gdGhhdCBzZXRzIHRoZSB0aXRsZSB0byB1bmRlZmluZWQsIGEgd3JhcHBlciBvYmplY3QgaXMgdXNlZCBmb3IgdGhlIHRpdGxlLiBTb1xuICAgKlxuICAgKiAtIGB0cmlnZ2VyTmF2aWdhdGlvbih7IHBhcmFtczouLi4gfSlgIGxlYXZlcyB0aGUgdGl0bGUgYXMgaXMgYmVjYXVzZSBpdCdzIHVuZGVmaW5lZCBpbiB0aGUgb3B0aW9uc1xuICAgKiAtIGB0cmlnZ2VyTmF2aWdhdGlvbih7IHRpdGxlOiB7IHZhbHVlOiAndGVzdCcgfSB9KWAgc2V0cyB0aGUgdGl0bGUgdG8gJ3Rlc3QnXG4gICAqIC0gYHRyaWdnZXJOYXZpZ2F0aW9uKHsgdGl0bGU6IHsgdmFsdWU6IHVuZGVmaW5lZCB9IH0pYCBzZXRzIHRoZSB0aXRsZSB0byB1bmRlZmluZWRcbiAgICovXG4gIHB1YmxpYyB0cmlnZ2VyTmF2aWdhdGlvbihvcHRpb25zOiB7XG4gICAgcGFyYW1zPzogUGFyYW1zO1xuICAgIHF1ZXJ5UGFyYW1zPzogUGFyYW1zO1xuICAgIGZyYWdtZW50Pzogc3RyaW5nIHwgbnVsbDtcbiAgICBkYXRhPzogRGF0YSB8IG51bGw7XG4gICAgdGl0bGU/OiB7IHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQgfSB8IG51bGw7XG4gICAgdXJsPzogQXJyYXk8VXJsU2VnbWVudD4gfCBudWxsO1xuICB9KTogdm9pZCB7XG4gICAgLy8gc2V0IHRoZSBzbmFwc2hvdCBmaXJzdFxuICAgIGlmIChvcHRpb25zLnBhcmFtcykge1xuICAgICAgdGhpcy5zbmFwc2hvdC5wYXJhbXMgPSBvcHRpb25zLnBhcmFtcztcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMucXVlcnlQYXJhbXMpIHtcbiAgICAgIHRoaXMuc25hcHNob3QucXVlcnlQYXJhbXMgPSBvcHRpb25zLnF1ZXJ5UGFyYW1zO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy5mcmFnbWVudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnNuYXBzaG90LmZyYWdtZW50ID0gb3B0aW9ucy5mcmFnbWVudDtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMuZGF0YSkge1xuICAgICAgdGhpcy5zbmFwc2hvdC5kYXRhID0gb3B0aW9ucy5kYXRhO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy50aXRsZSkge1xuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciB0aGUgdGl0bGUgaXMgcmVhZG9ubHksIGJ1dCB3ZSBuZWVkIHRvIGJlIGFibGUgdG8gb3ZlcndyaXRlIGl0IGhlcmVcbiAgICAgIHRoaXMuc25hcHNob3QudGl0bGUgPSBvcHRpb25zLnRpdGxlLnZhbHVlO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy51cmwpIHtcbiAgICAgIHRoaXMuc25hcHNob3QudXJsID0gb3B0aW9ucy51cmw7XG4gICAgfVxuXG4gICAgLy8gdGhlbiBlbWl0IGV2ZXJ5dGhpbmcgdGhhdCBoYXMgY2hhbmdlZFxuICAgIGlmIChvcHRpb25zLnBhcmFtcykge1xuICAgICAgdGhpcy5wYXJhbXNTdWJqZWN0Lm5leHQodGhpcy5zbmFwc2hvdC5wYXJhbXMpO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy5xdWVyeVBhcmFtcykge1xuICAgICAgdGhpcy5xdWVyeVBhcmFtc1N1YmplY3QubmV4dCh0aGlzLnNuYXBzaG90LnF1ZXJ5UGFyYW1zKTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMuZnJhZ21lbnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5mcmFnbWVudFN1YmplY3QubmV4dCh0aGlzLnNuYXBzaG90LmZyYWdtZW50KTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMuZGF0YSkge1xuICAgICAgdGhpcy5kYXRhU3ViamVjdC5uZXh0KHRoaXMuc25hcHNob3QuZGF0YSk7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLnRpdGxlKSB7XG4gICAgICB0aGlzLnRpdGxlU3ViamVjdC5uZXh0KHRoaXMuc25hcHNob3QudGl0bGUpO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy51cmwpIHtcbiAgICAgIHRoaXMudXJsU3ViamVjdC5uZXh0KHRoaXMuc25hcHNob3QudXJsKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gJ0FjdGl2YXRlZFJvdXRlU3R1Yic7XG4gIH1cbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IEFjdGl2YXRlZFJvdXRlU3R1YiwgYnkgY2FsbGluZyBpdHMgY29uc3RydWN0b3IuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdHViUm91dGUob3B0aW9ucz86IEFjdGl2YXRlZFJvdXRlU3R1Yk9wdGlvbnMpOiBBY3RpdmF0ZWRSb3V0ZVN0dWIge1xuICByZXR1cm4gbmV3IEFjdGl2YXRlZFJvdXRlU3R1YihvcHRpb25zKTtcbn1cbiJdfQ==
@@ -715,7 +715,6 @@ class ActivatedRouteSnapshotStub extends ActivatedRouteSnapshot {
715
715
  this._firstChild = null;
716
716
  this._children = [];
717
717
  this._pathFromRoot = [];
718
- this._routeConfig = null;
719
718
  this._root = this;
720
719
  }
721
720
  get parent() {
@@ -748,13 +747,11 @@ class ActivatedRouteSnapshotStub extends ActivatedRouteSnapshot {
748
747
  set pathFromRoot(value) {
749
748
  this._pathFromRoot = value;
750
749
  }
751
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
752
- // @ts-ignore
753
- get routeConfig() {
754
- return this._routeConfig;
750
+ get title() {
751
+ return this._title;
755
752
  }
756
- set routeConfig(route) {
757
- this._routeConfig = route;
753
+ set title(value) {
754
+ this._title = value;
758
755
  }
759
756
  get paramMap() {
760
757
  return convertToParamMap(this.params);
@@ -800,8 +797,10 @@ class ActivatedRouteStub extends ActivatedRoute {
800
797
  snapshot.params = (_f = options === null || options === void 0 ? void 0 : options.params) !== null && _f !== void 0 ? _f : {};
801
798
  snapshot.queryParams = (_g = options === null || options === void 0 ? void 0 : options.queryParams) !== null && _g !== void 0 ? _g : {};
802
799
  snapshot.data = (_h = options === null || options === void 0 ? void 0 : options.data) !== null && _h !== void 0 ? _h : {};
800
+ snapshot.title = options === null || options === void 0 ? void 0 : options.title;
803
801
  snapshot.fragment = (_j = options === null || options === void 0 ? void 0 : options.fragment) !== null && _j !== void 0 ? _j : null;
804
802
  snapshot.url = (_k = options === null || options === void 0 ? void 0 : options.url) !== null && _k !== void 0 ? _k : [];
803
+ // @ts-expect-error the routeConfig is readonly, but we need to overwrite it here
805
804
  snapshot.routeConfig = (_l = options === null || options === void 0 ? void 0 : options.routeConfig) !== null && _l !== void 0 ? _l : null;
806
805
  snapshot.firstChild = (_o = (_m = this.firstChild) === null || _m === void 0 ? void 0 : _m.snapshot) !== null && _o !== void 0 ? _o : null;
807
806
  snapshot.children = (_q = (_p = this.children) === null || _p === void 0 ? void 0 : _p.map(route => route.snapshot)) !== null && _q !== void 0 ? _q : [];
@@ -811,6 +810,7 @@ class ActivatedRouteStub extends ActivatedRoute {
811
810
  this.paramsSubject = new BehaviorSubject(this.snapshot.params);
812
811
  this.queryParamsSubject = new BehaviorSubject(this.snapshot.queryParams);
813
812
  this.dataSubject = new BehaviorSubject(this.snapshot.data);
813
+ this.titleSubject = new BehaviorSubject(this.snapshot.title);
814
814
  this.fragmentSubject = new BehaviorSubject(this.snapshot.fragment);
815
815
  this.urlSubject = new BehaviorSubject(this.snapshot.url);
816
816
  this.params = this.paramsSubject.asObservable();
@@ -818,6 +818,8 @@ class ActivatedRouteStub extends ActivatedRoute {
818
818
  this.data = this.dataSubject.asObservable();
819
819
  this.fragment = this.fragmentSubject.asObservable();
820
820
  this.url = this.urlSubject.asObservable();
821
+ // @ts-expect-error the title is readonly, but we need to be able to initialize it here
822
+ this.title = this.titleSubject.asObservable();
821
823
  }
822
824
  get root() {
823
825
  return this._root;
@@ -838,7 +840,7 @@ class ActivatedRouteStub extends ActivatedRoute {
838
840
  return this.snapshot.routeConfig;
839
841
  }
840
842
  /**
841
- * Triggers a navigation with the given new parameters. All the other parts (query params etc.) stay as the are.
843
+ * Triggers a navigation with the given new parameters. All the other parts (query params etc.) stay as they are.
842
844
  * This is a shortcut to `triggerNavigation` that can be used to only change the parameters.
843
845
  */
844
846
  setParams(params) {
@@ -846,7 +848,7 @@ class ActivatedRouteStub extends ActivatedRoute {
846
848
  }
847
849
  /**
848
850
  * Triggers a navigation with the given new parameter. The other parameters, as well as all the other parts (query params etc.)
849
- * stay as the are.
851
+ * stay as they are.
850
852
  * This is a shortcut to `triggerNavigation` that can be used to only change one parameter.
851
853
  */
852
854
  setParam(name, value) {
@@ -883,6 +885,14 @@ class ActivatedRouteStub extends ActivatedRoute {
883
885
  setDataItem(name, value) {
884
886
  this.setData(Object.assign(Object.assign({}, this.snapshot.data), { [name]: value }));
885
887
  }
888
+ /**
889
+ * Triggers a navigation with the given new title. The other parameters, as well as all the other parts (params etc.)
890
+ * stay as the are.
891
+ * This is a shortcut to `triggerNavigation` that can be used to only change the title.
892
+ */
893
+ setTitle(title) {
894
+ this.triggerNavigation({ title: { value: title } });
895
+ }
886
896
  /**
887
897
  * Triggers a navigation with the given new fragment. The other parts (params etc.) stay as the are.
888
898
  * This is a shortcut to `triggerNavigation` that can be used to only change the fragment.
@@ -906,6 +916,13 @@ class ActivatedRouteStub extends ActivatedRoute {
906
916
  *
907
917
  * So, setting params and query params will make the params and queryParams observables emit, but not the fragment, data and
908
918
  * url observables for example. This is consistent to how the router behaves.
919
+ *
920
+ * Note: since the title of a route can become undefined, in order to be able to distinguish between a navigation which leaves the title
921
+ * as it is and a navigation that sets the title to undefined, a wrapper object is used for the title. So
922
+ *
923
+ * - `triggerNavigation({ params:... })` leaves the title as is because it's undefined in the options
924
+ * - `triggerNavigation({ title: { value: 'test' } })` sets the title to 'test'
925
+ * - `triggerNavigation({ title: { value: undefined } })` sets the title to undefined
909
926
  */
910
927
  triggerNavigation(options) {
911
928
  // set the snapshot first
@@ -921,6 +938,10 @@ class ActivatedRouteStub extends ActivatedRoute {
921
938
  if (options.data) {
922
939
  this.snapshot.data = options.data;
923
940
  }
941
+ if (options.title) {
942
+ // @ts-expect-error the title is readonly, but we need to be able to overwrite it here
943
+ this.snapshot.title = options.title.value;
944
+ }
924
945
  if (options.url) {
925
946
  this.snapshot.url = options.url;
926
947
  }
@@ -937,6 +958,9 @@ class ActivatedRouteStub extends ActivatedRoute {
937
958
  if (options.data) {
938
959
  this.dataSubject.next(this.snapshot.data);
939
960
  }
961
+ if (options.title) {
962
+ this.titleSubject.next(this.snapshot.title);
963
+ }
940
964
  if (options.url) {
941
965
  this.urlSubject.next(this.snapshot.url);
942
966
  }
@@ -1263,3 +1287,4 @@ function createMock(type) {
1263
1287
 
1264
1288
  export { ActivatedRouteStub, ComponentTester, TestButton, TestElement, TestHtmlElement, TestInput, TestSelect, TestTextArea, createMock, fakeRoute, fakeSnapshot, speculoosMatchers, stubRoute };
1265
1289
  //# sourceMappingURL=ngx-speculoos.mjs.map
1290
+ //# sourceMappingURL=ngx-speculoos.mjs.map