ngx-speculoos 7.1.0 → 7.2.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,6 +89,7 @@ class ActivatedRouteSnapshotStub extends ActivatedRouteSnapshot {
89
89
  this._firstChild = null;
90
90
  this._children = [];
91
91
  this._pathFromRoot = [];
92
+ this._routeConfig = null;
92
93
  this._root = this;
93
94
  }
94
95
  get parent() {
@@ -121,6 +122,14 @@ class ActivatedRouteSnapshotStub extends ActivatedRouteSnapshot {
121
122
  set pathFromRoot(value) {
122
123
  this._pathFromRoot = value;
123
124
  }
125
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
126
+ // @ts-ignore
127
+ get routeConfig() {
128
+ return this._routeConfig;
129
+ }
130
+ set routeConfig(route) {
131
+ this._routeConfig = route;
132
+ }
124
133
  }
125
134
  /**
126
135
  * A stub for ActivatedRoute. It behaves almost the same way as the actual ActivatedRoute, exposing a snapshot
@@ -158,6 +167,7 @@ export class ActivatedRouteStub extends ActivatedRoute {
158
167
  snapshot.data = options?.data ?? {};
159
168
  snapshot.fragment = options?.fragment ?? null;
160
169
  snapshot.url = options?.url ?? [];
170
+ snapshot.routeConfig = options?.routeConfig ?? null;
161
171
  snapshot.firstChild = this.firstChild?.snapshot ?? null;
162
172
  snapshot.children = this.children?.map(route => route.snapshot) ?? [];
163
173
  snapshot.parent = this.parent?.snapshot ?? null;
@@ -189,6 +199,9 @@ export class ActivatedRouteStub extends ActivatedRoute {
189
199
  get children() {
190
200
  return this._children;
191
201
  }
202
+ get routeConfig() {
203
+ return this.snapshot.routeConfig;
204
+ }
192
205
  /**
193
206
  * Triggers a navigation with the given new parameters. All the other parts (query params etc.) stay as the are.
194
207
  * This is a shortcut to `triggerNavigation` that can be used to only change the parameters.
@@ -303,4 +316,4 @@ export class ActivatedRouteStub extends ActivatedRoute {
303
316
  export function stubRoute(options) {
304
317
  return new ActivatedRouteStub(options);
305
318
  }
306
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc3BlY3Vsb29zL3NyYy9saWIvcm91dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxzQkFBc0IsRUFBRSxpQkFBaUIsRUFBbUMsTUFBTSxpQkFBaUIsQ0FBQztBQUM3SCxPQUFPLEVBQUUsZUFBZSxFQUFFLEdBQUcsRUFBYyxNQUFNLE1BQU0sQ0FBQztBQUd4RDs7Ozs7Ozs7Ozs7Ozs7OztHQWdCRztBQUNILE1BQU0sVUFBVSxTQUFTLENBQUMsT0E0QnpCO0lBQ0MsTUFBTSxNQUFNLEdBQUc7UUFDYixHQUFHLEVBQUUsT0FBTyxDQUFDLEdBQUc7UUFDaEIsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNO1FBQ3RCLFFBQVEsRUFBRSxPQUFPLENBQUMsTUFBTSxJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDekYsV0FBVyxFQUFFLE9BQU8sQ0FBQyxXQUFXO1FBQ2hDLGFBQWEsRUFBRSxPQUFPLENBQUMsV0FBVyxJQUFJLE9BQU8sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDeEcsUUFBUSxFQUFFLE9BQU8sQ0FBQyxRQUFRO1FBQzFCLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSTtRQUNsQixNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU07UUFDdEIsU0FBUyxFQUFFLE9BQU8sQ0FBQyxTQUFTO1FBQzVCLFFBQVEsRUFBRSxPQUFPLENBQUMsUUFBUTtRQUMxQixXQUFXLEVBQUUsT0FBTyxDQUFDLFdBQVc7UUFDaEMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJO1FB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QUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQztTQUN6RDtRQUNELElBQUksT0FBTyxDQUFDLFFBQVEsS0FBSyxTQUFTLEVBQUU7WUFDbEMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUNuRDtRQUNELElBQUksT0FBTyxDQUFDLElBQUksRUFBRTtZQUNoQixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQzNDO1FBQ0QsSUFBSSxPQUFPLENBQUMsR0FBRyxFQUFFO1lBQ2YsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUN6QztJQUNILENBQUM7SUFFTSxRQUFRO1FBQ2IsT0FBTyxvQkFBb0IsQ0FBQztJQUM5QixDQUFDO0NBQ0Y7QUFFRDs7R0FFRztBQUNILE1BQU0sVUFBVSxTQUFTLENBQUMsT0FBbUM7SUFDM0QsT0FBTyxJQUFJLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ3pDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgQWN0aXZhdGVkUm91dGVTbmFwc2hvdCwgY29udmVydFRvUGFyYW1NYXAsIERhdGEsIFBhcmFtcywgUm91dGUsIFVybFNlZ21lbnQgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBtYXAsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFR5cGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuLyoqXG4gKiBDcmVhdGVzIGEgZmFrZSBwYXJ0aWFsIEFjdGl2YXRlZFJvdXRlIGZvciB0ZXN0cy5cbiAqXG4gKiBJZiB5b3UgcGFzcyBwYXJhbXMsIHRoZW4gdGhlIGNyZWF0ZWQgcm91dGUncyBwYXJhbU1hcCB3aWxsIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWVzLlxuICogVGhlIHNhbWUgZ29lcyBmb3IgcXVlcnlQYXJhbXMgYW5kIHF1ZXJ5UGFyYW1NYXAuXG4gKlxuICogSWYgeW91IHBhc3MgYSBwYXJlbnQgcm91dGUgYW5kIGEgc25hcHNob3QsIGFuZCB0aGUgcGFzc2VkIHNuYXBzaG90IGRvZXNuJ3QgaGF2ZSBhIHBhcmVudCwgdGhlbiB0aGUgc25hcHNob3Qnc1xuICogcGFyZW50IHdpbGwgYmUgc2V0IHRvIHRoZSBwYXJlbnQgcm91dGUgc25hcHNob3QuIFRoaXMgYWxsb3dzIHRoZSBjb2RlIHVuZGVyIHRlc3QgdG8gdXNlXG4gKiBgcm91dGUucGFyZW50LnNuYXBzaG90YCBvciBgcm91dGUuc25hcHNob3QucGFyZW50YC5cbiAqXG4gKiBJZiB5b3UgcGFzcyBhIHNuYXBzaG90IHdpdGggYSBwYXJlbnQsIGJ1dCBkb24ndCBwYXNzIGEgcGFyZW50IG9yIHBhc3MgYSBwYXJlbnQgd2l0aG91dCBzbmFwc2hvdCwgdGhlbiB0aGUgcm91dGUnc1xuICogcGFyZW50IHNuYXBzaG90IHdpbGwgYmUgc2V0IHRvIHRoZSBnaXZlbiBzbmFwc2hvdCdzIHBhcmVudC4gVGhpcyBhbGxvd3MgdGhlIGNvZGUgdW5kZXIgdGVzdCB0byB1c2VcbiAqIGByb3V0ZS5wYXJlbnQuc25hcHNob3RgIG9yIGByb3V0ZS5zbmFwc2hvdC5wYXJlbnRgLlxuICpcbiAqIEByZXR1cm5zIGEgcGFydGlhbGx5IHBvcHVsYXRlZCwgZmFrZSBBY3RpdmF0ZWRSb3V0ZSwgZGVwZW5kaW5nIG9uIHdoYXQgeW91IHBhc3NlZCBpblxuICogQGRlcHJlY2F0ZWQgZmF2b3Igc3R1YlJvdXRlLCB3aGljaCBjcmVhdGVzIGFuIGVhc2llciB0byB1c2UgYW5kIG1vcmUgbG9naWNhbCBzdHViXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmYWtlUm91dGUob3B0aW9uczoge1xuICB1cmw/OiBPYnNlcnZhYmxlPFVybFNlZ21lbnRbXT47XG4gIC8qKiBBbiBvYnNlcnZhYmxlIG9mIHRoZSBtYXRyaXggcGFyYW1ldGVycyBzY29wZWQgdG8gdGhpcyByb3V0ZSAqL1xuICBwYXJhbXM/OiBPYnNlcnZhYmxlPFBhcmFtcz47XG4gIC8qKiBBbiBvYnNlcnZhYmxlIG9mIHRoZSBxdWVyeSBwYXJhbWV0ZXJzIHNoYXJlZCBieSBhbGwgdGhlIHJvdXRlcyAqL1xuICBxdWVyeVBhcmFtcz86IE9ic2VydmFibGU8UGFyYW1zPjtcbiAgLyoqIEFuIG9ic2VydmFibGUgb2YgdGhlIFVSTCBmcmFnbWVudCBzaGFyZWQgYnkgYWxsIHRoZSByb3V0ZXMgKi9cbiAgZnJhZ21lbnQ/OiBPYnNlcnZhYmxlPHN0cmluZz47XG4gIC8qKiBBbiBvYnNlcnZhYmxlIG9mIHRoZSBzdGF0aWMgYW5kIHJlc29sdmVkIGRhdGEgb2YgdGhpcyByb3V0ZS4gKi9cbiAgZGF0YT86IE9ic2VydmFibGU8RGF0YT47XG4gIC8qKiBUaGUgb3V0bGV0IG5hbWUgb2YgdGhlIHJvdXRlLiBJdCdzIGEgY29uc3RhbnQgKi9cbiAgb3V0bGV0Pzogc3RyaW5nO1xuICAvKiogVGhlIGNvbXBvbmVudCBvZiB0aGUgcm91dGUuIEl0J3MgYSBjb25zdGFudCAqL1xuICBjb21wb25lbnQ/OiBUeXBlPHVua25vd24+IHwgc3RyaW5nIHwgbnVsbDtcbiAgLyoqIFRoZSBjdXJyZW50IHNuYXBzaG90IG9mIHRoaXMgcm91dGUgKi9cbiAgc25hcHNob3Q/OiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90O1xuICAvKiogVGhlIGNvbmZpZ3VyYXRpb24gdXNlZCB0byBtYXRjaCB0aGlzIHJvdXRlICovXG4gIHJvdXRlQ29uZmlnPzogUm91dGUgfCBudWxsO1xuICAvKiogVGhlIHJvb3Qgb2YgdGhlIHJvdXRlciBzdGF0ZSAqL1xuICByb290PzogQWN0aXZhdGVkUm91dGU7XG4gIC8qKiBUaGUgcGFyZW50IG9mIHRoaXMgcm91dGUgaW4gdGhlIHJvdXRlciBzdGF0ZSB0cmVlICovXG4gIHBhcmVudD86IEFjdGl2YXRlZFJvdXRlIHwgbnVsbDtcbiAgLyoqIFRoZSBmaXJzdCBjaGlsZCBvZiB0aGlzIHJvdXRlIGluIHRoZSByb3V0ZXIgc3RhdGUgdHJlZSAqL1xuICBmaXJzdENoaWxkPzogQWN0aXZhdGVkUm91dGU7XG4gIC8qKiBUaGUgY2hpbGRyZW4gb2YgdGhpcyByb3V0ZSBpbiB0aGUgcm91dGVyIHN0YXRlIHRyZWUgKi9cbiAgY2hpbGRyZW4/OiBBY3RpdmF0ZWRSb3V0ZVtdO1xuICAvKiogVGhlIHBhdGggZnJvbSB0aGUgcm9vdCBvZiB0aGUgcm91dGVyIHN0YXRlIHRyZWUgdG8gdGhpcyByb3V0ZSAqL1xuICBwYXRoRnJvbVJvb3Q/OiBBY3RpdmF0ZWRSb3V0ZVtdO1xufSk6IEFjdGl2YXRlZFJvdXRlIHtcbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgIHVybDogb3B0aW9ucy51cmwsXG4gICAgcGFyYW1zOiBvcHRpb25zLnBhcmFtcyxcbiAgICBwYXJhbU1hcDogb3B0aW9ucy5wYXJhbXMgJiYgb3B0aW9ucy5wYXJhbXMucGlwZShtYXAocGFyYW1zID0+IGNvbnZlcnRUb1BhcmFtTWFwKHBhcmFtcykpKSxcbiAgICBxdWVyeVBhcmFtczogb3B0aW9ucy5xdWVyeVBhcmFtcyxcbiAgICBxdWVyeVBhcmFtTWFwOiBvcHRpb25zLnF1ZXJ5UGFyYW1zICYmIG9wdGlvbnMucXVlcnlQYXJhbXMucGlwZShtYXAocGFyYW1zID0+IGNvbnZlcnRUb1BhcmFtTWFwKHBhcmFtcykpKSxcbiAgICBmcmFnbWVudDogb3B0aW9ucy5mcmFnbWVudCxcbiAgICBkYXRhOiBvcHRpb25zLmRhdGEsXG4gICAgb3V0bGV0OiBvcHRpb25zLm91dGxldCxcbiAgICBjb21wb25lbnQ6IG9wdGlvbnMuY29tcG9uZW50LFxuICAgIHNuYXBzaG90OiBvcHRpb25zLnNuYXBzaG90LFxuICAgIHJvdXRlQ29uZmlnOiBvcHRpb25zLnJvdXRlQ29uZmlnLFxuICAgIHJvb3Q6IG9wdGlvbnMucm9vdCxcbiAgICBwYXJlbnQ6IG9wdGlvbnMucGFyZW50LFxuICAgIGZpcnN0Q2hpbGQ6IG9wdGlvbnMuZmlyc3RDaGlsZCxcbiAgICBjaGlsZHJlbjogb3B0aW9ucy5jaGlsZHJlbixcbiAgICBwYXRoRnJvbVJvb3Q6IG9wdGlvbnMucGF0aEZyb21Sb290XG4gIH0gYXMgQWN0aXZhdGVkUm91dGU7XG5cbiAgZm9yIChsZXQgcm91dGU6IG51bGwgfCBBY3RpdmF0ZWRSb3V0ZSA9IHJlc3VsdDsgcm91dGU7IHJvdXRlID0gcm91dGUucGFyZW50KSB7XG4gICAgaWYgKHJvdXRlLnBhcmVudCAmJiByb3V0ZS5wYXJlbnQuc25hcHNob3QgJiYgIXJvdXRlLnNuYXBzaG90KSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbiAgICAgIHJvdXRlLnNuYXBzaG90ID0gZmFrZVNuYXBzaG90KHt9KTtcbiAgICB9XG4gICAgaWYgKHJvdXRlLnBhcmVudCAmJiByb3V0ZS5wYXJlbnQuc25hcHNob3QgJiYgIXJvdXRlLnNuYXBzaG90LnBhcmVudCkge1xuICAgICAgKHJvdXRlLnNuYXBzaG90IGFzIE9taXQ8QWN0aXZhdGVkUm91dGVTbmFwc2hvdCwgJ3BhcmVudCc+ICYgeyBwYXJlbnQ6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QgfSkucGFyZW50ID0gcm91dGUucGFyZW50LnNuYXBzaG90O1xuICAgIH1cblxuICAgIGlmIChyb3V0ZS5zbmFwc2hvdCAmJiByb3V0ZS5zbmFwc2hvdC5wYXJlbnQgJiYgIXJvdXRlLnBhcmVudCkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG4gICAgICAocm91dGUgYXMgT21pdDxBY3RpdmF0ZWRSb3V0ZSwgJ3BhcmVudCc+ICYgeyBwYXJlbnQ6IEFjdGl2YXRlZFJvdXRlIH0pLnBhcmVudCA9IGZha2VSb3V0ZSh7fSk7XG4gICAgfVxuICAgIGlmIChyb3V0ZS5zbmFwc2hvdCAmJiByb3V0ZS5zbmFwc2hvdC5wYXJlbnQgJiYgcm91dGUucGFyZW50ICYmICFyb3V0ZS5wYXJlbnQuc25hcHNob3QpIHtcbiAgICAgIHJvdXRlLnBhcmVudC5zbmFwc2hvdCA9IHJvdXRlLnNuYXBzaG90LnBhcmVudDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBmYWtlIHBhcnRpYWwgQWN0aXZhdGVkUm91dGVTbmFwc2hvdCBmb3IgdGVzdHMuXG4gKlxuICogSWYgeW91IHBhc3MgcGFyYW1zLCB0aGVuIHRoZSBjcmVhdGVkIHNuYXBzaG90J3MgcGFyYW1NYXAgd2lsbCBjb250YWluIHRoZSBzYW1lIHZhbHVlcy5cbiAqIFRoZSBzYW1lIGdvZXMgZm9yIHF1ZXJ5UGFyYW1zIGFuZCBxdWVyeVBhcmFtTWFwLlxuICpcbiAqIEByZXR1cm5zIGEgcGFydGlhbGx5IHBvcHVsYXRlZCwgZmFrZSBBY3RpdmF0ZWRSb3V0ZSwgZGVwZW5kaW5nIG9uIHdoYXQgeW91IHBhc3NlZCBpblxuICogQGRlcHJlY2F0ZWQgZmF2b3Igc3R1YlJvdXRlLCB3aGljaCBjcmVhdGVzIGFuIGVhc2llciB0byB1c2UgYW5kIG1vcmUgbG9naWNhbCBzdHViIGZvciBib3RoIHRoZSByb3V0ZSBhbmQgaXRzIHNuYXBzaG90XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmYWtlU25hcHNob3Qob3B0aW9uczoge1xuICB1cmw/OiBVcmxTZWdtZW50W107XG4gIC8qKiBUaGUgbWF0cml4IHBhcmFtZXRlcnMgc2NvcGVkIHRvIHRoaXMgcm91dGUgKi9cbiAgcGFyYW1zPzogUGFyYW1zO1xuICAvKiogVGhlIHF1ZXJ5IHBhcmFtZXRlcnMgc2hhcmVkIGJ5IGFsbCB0aGUgcm91dGVzICovXG4gIHF1ZXJ5UGFyYW1zPzogUGFyYW1zO1xuICAvKiogVGhlIFVSTCBmcmFnbWVudCBzaGFyZWQgYnkgYWxsIHRoZSByb3V0ZXMgKi9cbiAgZnJhZ21lbnQ/OiBzdHJpbmc7XG4gIC8qKiBUaGUgc3RhdGljIGFuZCByZXNvbHZlZCBkYXRhIG9mIHRoaXMgcm91dGUgKi9cbiAgZGF0YT86IERhdGE7XG4gIC8qKiBUaGUgb3V0bGV0IG5hbWUgb2YgdGhlIHJvdXRlICovXG4gIG91dGxldD86IHN0cmluZztcbiAgLyoqIFRoZSBjb21wb25lbnQgb2YgdGhlIHJvdXRlICovXG4gIGNvbXBvbmVudD86IFR5cGU8dW5rbm93bj4gfCBzdHJpbmcgfCBudWxsO1xuICAvKiogVGhlIGNvbmZpZ3VyYXRpb24gdXNlZCB0byBtYXRjaCB0aGlzIHJvdXRlICovXG4gIHJvdXRlQ29uZmlnPzogUm91dGU7XG4gIC8qKiBUaGUgcm9vdCBvZiB0aGUgcm91dGVyIHN0YXRlICovXG4gIHJvb3Q/OiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90O1xuICAvKiogVGhlIHBhcmVudCBvZiB0aGlzIHJvdXRlIGluIHRoZSByb3V0ZXIgc3RhdGUgdHJlZSAqL1xuICBwYXJlbnQ/OiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90IHwgbnVsbDtcbiAgLyoqIFRoZSBmaXJzdCBjaGlsZCBvZiB0aGlzIHJvdXRlIGluIHRoZSByb3V0ZXIgc3RhdGUgdHJlZSAqL1xuICBmaXJzdENoaWxkPzogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCB8IG51bGw7XG4gIC8qKiBUaGUgY2hpbGRyZW4gb2YgdGhpcyByb3V0ZSBpbiB0aGUgcm91dGVyIHN0YXRlIHRyZWUgKi9cbiAgY2hpbGRyZW4/OiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90W107XG4gIC8qKiBUaGUgcGF0aCBmcm9tIHRoZSByb290IG9mIHRoZSByb3V0ZXIgc3RhdGUgdHJlZSB0byB0aGlzIHJvdXRlICovXG4gIHBhdGhGcm9tUm9vdD86IEFjdGl2YXRlZFJvdXRlU25hcHNob3RbXTtcbn0pOiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90IHtcbiAgcmV0dXJuIHtcbiAgICB1cmw6IG9wdGlvbnMudXJsLFxuICAgIHBhcmFtczogb3B0aW9ucy5wYXJhbXMsXG4gICAgcGFyYW1NYXA6IG9wdGlvbnMucGFyYW1zICYmIGNvbnZlcnRUb1BhcmFtTWFwKG9wdGlvbnMucGFyYW1zKSxcbiAgICBxdWVyeVBhcmFtczogb3B0aW9ucy5xdWVyeVBhcmFtcyxcbiAgICBxdWVyeVBhcmFtTWFwOiBvcHRpb25zLnF1ZXJ5UGFyYW1zICYmIGNvbnZlcnRUb1BhcmFtTWFwKG9wdGlvbnMucXVlcnlQYXJhbXMpLFxuICAgIGZyYWdtZW50OiBvcHRpb25zLmZyYWdtZW50LFxuICAgIGRhdGE6IG9wdGlvbnMuZGF0YSxcbiAgICBvdXRsZXQ6IG9wdGlvbnMub3V0bGV0LFxuICAgIGNvbXBvbmVudDogb3B0aW9ucy5jb21wb25lbnQsXG4gICAgcm91dGVDb25maWc6IG9wdGlvbnMucm91dGVDb25maWcsXG4gICAgcm9vdDogb3B0aW9ucy5yb290LFxuICAgIHBhcmVudDogb3B0aW9ucy5wYXJlbnQsXG4gICAgZmlyc3RDaGlsZDogb3B0aW9ucy5maXJzdENoaWxkLFxuICAgIGNoaWxkcmVuOiBvcHRpb25zLmNoaWxkcmVuLFxuICAgIHBhdGhGcm9tUm9vdDogb3B0aW9ucy5wYXRoRnJvbVJvb3RcbiAgfSBhcyBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90O1xufVxuXG4vKipcbiAqIFRoZSBvcHRpb25zIHRoYXQgYXJlIHBhc3NlZCB3aGVuIGNyZWF0aW5nIGFuIEFjdGl2YXRlZFJvdXRlU3R1Yi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBY3RpdmF0ZWRSb3V0ZVN0dWJPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBpbml0aWFsIHZhbHVlcyBvZiB0aGUgcGFyYW1ldGVycyBvZiB0aGUgcm91dGVcbiAgICovXG4gIHBhcmFtcz86IFBhcmFtcztcbiAgLyoqXG4gICAqIFRoZSBpbml0aWFsIHZhbHVlcyBvZiB0aGUgcXVlcnkgcGFyYW1ldGVycyBvZiB0aGUgcm91dGVcbiAgICovXG4gIHF1ZXJ5UGFyYW1zPzogUGFyYW1zO1xuICAvKipcbiAgICogVGhlIGluaXRpYWwgdmFsdWVzIG9mIHRoZSBkYXRhIG9mIHRoZSByb3V0ZVxuICAgKi9cbiAgZGF0YT86IERhdGE7XG4gIC8qKlxuICAgKiBUaGUgaW5pdGlhbCBmcmFnbWVudCBvZiB0aGUgcm91dGVcbiAgICovXG4gIGZyYWdtZW50Pzogc3RyaW5nIHwgbnVsbDtcbiAgLyoqXG4gICAqIFRoZSBpbml0aWFsIHVybCBvZiB0aGUgcm91dGVcbiAgICovXG4gIHVybD86IFVybFNlZ21lbnRbXTtcbiAgLyoqXG4gICAqIFRoZSBwYXJlbnQgb2YgdGhlIHJvdXRlXG4gICAqL1xuICBwYXJlbnQ/OiBBY3RpdmF0ZWRSb3V0ZVN0dWIgfCBudWxsO1xuICAvKipcbiAgICogVGhlIGZpcnN0IGNoaWxkIG9mIHRoZSByb3V0ZVxuICAgKi9cbiAgZmlyc3RDaGlsZD86IEFjdGl2YXRlZFJvdXRlU3R1YiB8IG51bGw7XG4gIC8qKlxuICAgKiBUaGUgY2hpbGRyZW4gb2YgdGhlIHJvdXRlXG4gICAqL1xuICBjaGlsZHJlbj86IEFjdGl2YXRlZFJvdXRlU3R1YltdIHwgbnVsbDtcbn1cblxuY2xhc3MgQWN0aXZhdGVkUm91dGVTbmFwc2hvdFN0dWIgZXh0ZW5kcyBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90IHtcbiAgcHJpdmF0ZSBfcGFyZW50OiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90IHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgX3Jvb3Q6IEFjdGl2YXRlZFJvdXRlU25hcHNob3Q7XG4gIHByaXZhdGUgX2ZpcnN0Q2hpbGQ6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBfY2hpbGRyZW46IEFycmF5PEFjdGl2YXRlZFJvdXRlU25hcHNob3Q+ID0gW107XG4gIHByaXZhdGUgX3BhdGhGcm9tUm9vdDogQXJyYXk8QWN0aXZhdGVkUm91dGVTbmFwc2hvdD4gPSBbXTtcblxuICBnZXQgcGFyZW50KCk6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fcGFyZW50O1xuICB9XG5cbiAgc2V0IHBhcmVudCh2YWx1ZTogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCB8IG51bGwpIHtcbiAgICB0aGlzLl9wYXJlbnQgPSB2YWx1ZTtcbiAgfVxuXG4gIGdldCByb290KCk6IEFjdGl2YXRlZFJvdXRlU25hcHNob3Qge1xuICAgIHJldHVybiB0aGlzLl9yb290O1xuICB9XG5cbiAgc2V0IHJvb3QodmFsdWU6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QpIHtcbiAgICB0aGlzLl9yb290ID0gdmFsdWU7XG4gIH1cblxuICBnZXQgZmlyc3RDaGlsZCgpOiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90IHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX2ZpcnN0Q2hpbGQ7XG4gIH1cblxuICBzZXQgZmlyc3RDaGlsZCh2YWx1ZTogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCB8IG51bGwpIHtcbiAgICB0aGlzLl9maXJzdENoaWxkID0gdmFsdWU7XG4gIH1cblxuICBnZXQgY2hpbGRyZW4oKTogQXJyYXk8QWN0aXZhdGVkUm91dGVTbmFwc2hvdD4ge1xuICAgIHJldHVybiB0aGlzLl9jaGlsZHJlbjtcbiAgfVxuXG4gIHNldCBjaGlsZHJlbih2YWx1ZTogQXJyYXk8QWN0aXZhdGVkUm91dGVTbmFwc2hvdD4pIHtcbiAgICB0aGlzLl9jaGlsZHJlbiA9IHZhbHVlO1xuICB9XG5cbiAgZ2V0IHBhdGhGcm9tUm9vdCgpOiBBcnJheTxBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90PiB7XG4gICAgcmV0dXJuIHRoaXMuX3BhdGhGcm9tUm9vdDtcbiAgfVxuXG4gIHNldCBwYXRoRnJvbVJvb3QodmFsdWU6IEFycmF5PEFjdGl2YXRlZFJvdXRlU25hcHNob3Q+KSB7XG4gICAgdGhpcy5fcGF0aEZyb21Sb290ID0gdmFsdWU7XG4gIH1cblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuX3Jvb3QgPSB0aGlzO1xuICB9XG59XG5cbi8qKlxuICogQSBzdHViIGZvciBBY3RpdmF0ZWRSb3V0ZS4gSXQgYmVoYXZlcyBhbG1vc3QgdGhlIHNhbWUgd2F5IGFzIHRoZSBhY3R1YWwgQWN0aXZhdGVkUm91dGUsIGV4cG9zaW5nIGEgc25hcHNob3RcbiAqIGFuZCBvYnNlcnZhYmxlcyBmb3IgdGhlIHBhcmFtcywgcXVlcnkgcGFyYW1zIGV0Yy4sIHdoaWNoIGFyZSBrZXB0IGluIHN5bmMuXG4gKlxuICogSW4gYWRkaXRpb24sIHRoaXMgc3R1YiBhbGxvd3Mgc2ltdWxhdGluZyBhIG5hdmlnYXRpb24gYnkgY2hhbmdpbmcgdGhlIHBhcmFtcywgdGhlIHF1ZXJ5IHBhcmFtcywgdGhlIGZyYWdtZW50LCBldGMuXG4gKiBXaGVuIHRoYXQgaGFwcGVucywgdGhlIHNuYXBzaG90IGlzIG1vZGlmaWVkLCB0aGVuIHRoZSByZWxldmFudCBvYnNlcnZhYmxlcyBlbWl0IHRoZSBuZXcgdmFsdWVzLlxuICpcbiAqIFRoZXJlIGFyZSBzb21lIHRoaW5ncyB0aGF0IGRvbid0IHJlYWxseSB3b3JrIHRoZSBzYW1lIHdheSBhcyB0aGUgcmVhbCBBY3RpdmF0ZWRSb3V0ZSB0aG91Z2g6XG4gKiAtIHRoZSBoYW5kbGluZyBvZiB0aGUgZmlyc3RDaGlsZCBhbmQgb2YgdGhlIGNoaWxkcmVuIGlzIGVudGlyZWx5IHVuZGVyIHRoZSB0ZXN0ZXIncyByZXNwb25zaWJpbGl0eS4gU2V0dGluZyB0aGUgcGFyZW50XG4gKiAgIG9mIGEgcm91dGUgc3R1YiBkb2VzIG5vdCBhZGQgdGhpcyByb3V0ZSB0byB0aGUgY2hpbGRyZW4gb2YgaXRzIHBhcmVudCwgZm9yIGV4YW1wbGUuXG4gKiAtIHdoZW4gY2hhbmdpbmcgdGhlIHBhcmFtcywgcXVlcnkgcGFyYW1zLCBmcmFnbWVudCwgZXRjLiwgdGhlaXIgYXNzb2NpYXRlZCBvYnNlcnZhYmxlIGVtaXRzIHVuY29uZGl0aW9uYWxseSwgaW5zdGVhZCBvZlxuICogICBmaXJzdCBjaGVja2luZyBpZiB0aGUgdmFsdWUgaXMgYWN0dWFsbHkgZGlmZmVyZW50IGZyb20gYmVmb3JlLiBJdCdzIHRodXMgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSB0ZXN0ZXIgdG8gbm90XG4gKiAgIGNoYW5nZSB0aGUgdmFsdWVzIGlmIHRoZXkncmUgdGhlIHNhbWUgYXMgYmVmb3JlLlxuICovXG5leHBvcnQgY2xhc3MgQWN0aXZhdGVkUm91dGVTdHViIGV4dGVuZHMgQWN0aXZhdGVkUm91dGUge1xuICBwcml2YXRlIF9maXJzdENoaWxkOiBBY3RpdmF0ZWRSb3V0ZVN0dWIgfCBudWxsO1xuICBwcml2YXRlIF9jaGlsZHJlbjogQXJyYXk8QWN0aXZhdGVkUm91dGVTdHViPjtcblxuICBwcml2YXRlIHJlYWRvbmx5IHBhcmFtc1N1YmplY3Q6IEJlaGF2aW9yU3ViamVjdDxQYXJhbXM+O1xuICBwcml2YXRlIHJlYWRvbmx5IHF1ZXJ5UGFyYW1zU3ViamVjdDogQmVoYXZpb3JTdWJqZWN0PFBhcmFtcz47XG4gIHByaXZhdGUgcmVhZG9ubHkgZGF0YVN1YmplY3Q6IEJlaGF2aW9yU3ViamVjdDxEYXRhPjtcbiAgcHJpdmF0ZSByZWFkb25seSBmcmFnbWVudFN1YmplY3Q6IEJlaGF2aW9yU3ViamVjdDxzdHJpbmcgfCBudWxsPjtcbiAgcHJpdmF0ZSByZWFkb25seSB1cmxTdWJqZWN0OiBCZWhhdmlvclN1YmplY3Q8QXJyYXk8VXJsU2VnbWVudD4+O1xuXG4gIHByaXZhdGUgX3BhcmVudDogQWN0aXZhdGVkUm91dGVTdHViIHwgbnVsbDtcbiAgcHJpdmF0ZSBfcm9vdDogQWN0aXZhdGVkUm91dGVTdHViO1xuICBwcml2YXRlIF9wYXRoRnJvbVJvb3Q6IEFycmF5PEFjdGl2YXRlZFJvdXRlU3R1Yj47XG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdHMgYSBuZXcgaW5zdGFuY2UsIGJhc2VkIG9uIHRoZSBnaXZlbiBvcHRpb25zLlxuICAgKiBJZiBhbiBvcHRpb24gaXMgbm90IHByb3ZpZGVkIChvciBpZiBubyBvcHRpb24gaXMgcHJvdmlkZWQgYXQgYWxsKSwgdGhlbiB0aGUgcm91dGUgaGFzIGEgZGVmYXVsdCB2YWx1ZSBmb3IgdGhpcyBvcHRpb25cbiAgICogKGVtcHR5IHBhcmFtZXRlcnMgZm9yIGV4YW1wbGUsIG51bGwgZnJhZ21lbnQsIGV0Yy4pXG4gICAqIElmIG5vIHBhcmVudCBpcyBwYXNzZWQsIHRoZW4gdGhpcyByb3V0ZSBoYXMgbm8gcGFyZW50IGFuZCBpcyB0aHVzIHNldCBhcyB0aGUgcm9vdC4gT3RoZXJ3aXNlLCB0aGUgcm9vdCBhbmQgdGhlIHBhdGhcbiAgICogZnJvbSByb290IGFyZSBjcmVhdGVkIGJhc2VkIG9uIHRoZSByb290IGFuZCBwYXRoIGZyb20gcm9vdCBvZiB0aGUgZ2l2ZW4gcGFyZW50IHJvdXRlLlxuICAgKi9cbiAgY29uc3RydWN0b3Iob3B0aW9ucz86IEFjdGl2YXRlZFJvdXRlU3R1Yk9wdGlvbnMpIHtcbiAgICBzdXBlcigpO1xuXG4gICAgY29uc3Qgc25hcHNob3QgPSBuZXcgQWN0aXZhdGVkUm91dGVTbmFwc2hvdFN0dWIoKTtcbiAgICB0aGlzLnNuYXBzaG90ID0gc25hcHNob3Q7XG5cbiAgICB0aGlzLl9maXJzdENoaWxkID0gb3B0aW9ucz8uZmlyc3RDaGlsZCA/PyBudWxsO1xuICAgIHRoaXMuX2NoaWxkcmVuID0gb3B0aW9ucz8uY2hpbGRyZW4gPz8gW107XG4gICAgdGhpcy5fcGFyZW50ID0gb3B0aW9ucz8ucGFyZW50ID8/IG51bGw7XG4gICAgdGhpcy5fcm9vdCA9IHRoaXMucGFyZW50Py5yb290ID8/IHRoaXM7XG4gICAgdGhpcy5fcGF0aEZyb21Sb290ID0gdGhpcy5wYXJlbnQgPyBbLi4udGhpcy5wYXJlbnQucGF0aEZyb21Sb290LCB0aGlzXSA6IFt0aGlzXTtcblxuICAgIHNuYXBzaG90LnBhcmFtcyA9IG9wdGlvbnM/LnBhcmFtcyA/PyB7fTtcbiAgICBzbmFwc2hvdC5xdWVyeVBhcmFtcyA9IG9wdGlvbnM/LnF1ZXJ5UGFyYW1zID8/IHt9O1xuICAgIHNuYXBzaG90LmRhdGEgPSBvcHRpb25zPy5kYXRhID8/IHt9O1xuICAgIHNuYXBzaG90LmZyYWdtZW50ID0gb3B0aW9ucz8uZnJhZ21lbnQgPz8gbnVsbDtcbiAgICBzbmFwc2hvdC51cmwgPSBvcHRpb25zPy51cmwgPz8gW107XG5cbiAgICBzbmFwc2hvdC5maXJzdENoaWxkID0gdGhpcy5maXJzdENoaWxkPy5zbmFwc2hvdCA/PyBudWxsO1xuICAgIHNuYXBzaG90LmNoaWxkcmVuID0gdGhpcy5jaGlsZHJlbj8ubWFwKHJvdXRlID0+IHJvdXRlLnNuYXBzaG90KSA/PyBbXTtcbiAgICBzbmFwc2hvdC5wYXJlbnQgPSB0aGlzLnBhcmVudD8uc25hcHNob3QgPz8gbnVsbDtcbiAgICBzbmFwc2hvdC5yb290ID0gdGhpcy5yb290LnNuYXBzaG90O1xuICAgIHNuYXBzaG90LnBhdGhGcm9tUm9vdCA9IHRoaXMucGF0aEZyb21Sb290Lm1hcChyb3V0ZSA9PiByb3V0ZS5zbmFwc2hvdCk7XG5cbiAgICB0aGlzLnBhcmFtc1N1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFBhcmFtcz4odGhpcy5zbmFwc2hvdC5wYXJhbXMpO1xuICAgIHRoaXMucXVlcnlQYXJhbXNTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxQYXJhbXM+KHRoaXMuc25hcHNob3QucXVlcnlQYXJhbXMpO1xuICAgIHRoaXMuZGF0YVN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PERhdGE+KHRoaXMuc25hcHNob3QuZGF0YSk7XG4gICAgdGhpcy5mcmFnbWVudFN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZyB8IG51bGw+KHRoaXMuc25hcHNob3QuZnJhZ21lbnQpO1xuICAgIHRoaXMudXJsU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8QXJyYXk8VXJsU2VnbWVudD4+KHRoaXMuc25hcHNob3QudXJsKTtcblxuICAgIHRoaXMucGFyYW1zID0gdGhpcy5wYXJhbXNTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICAgIHRoaXMucXVlcnlQYXJhbXMgPSB0aGlzLnF1ZXJ5UGFyYW1zU3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgICB0aGlzLmRhdGEgPSB0aGlzLmRhdGFTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICAgIHRoaXMuZnJhZ21lbnQgPSB0aGlzLmZyYWdtZW50U3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgICB0aGlzLnVybCA9IHRoaXMudXJsU3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIGdldCByb290KCkge1xuICAgIHJldHVybiB0aGlzLl9yb290O1xuICB9XG5cbiAgZ2V0IHBhcmVudCgpOiBBY3RpdmF0ZWRSb3V0ZVN0dWIgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fcGFyZW50O1xuICB9XG5cbiAgZ2V0IHBhdGhGcm9tUm9vdCgpOiBBcnJheTxBY3RpdmF0ZWRSb3V0ZVN0dWI+IHtcbiAgICByZXR1cm4gdGhpcy5fcGF0aEZyb21Sb290O1xuICB9XG5cbiAgZ2V0IGZpcnN0Q2hpbGQoKTogQWN0aXZhdGVkUm91dGVTdHViIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX2ZpcnN0Q2hpbGQ7XG4gIH1cblxuICBnZXQgY2hpbGRyZW4oKTogQXJyYXk8QWN0aXZhdGVkUm91dGVTdHViPiB7XG4gICAgcmV0dXJuIHRoaXMuX2NoaWxkcmVuO1xuICB9XG5cbiAgLyoqXG4gICAqIFRyaWdnZXJzIGEgbmF2aWdhdGlvbiB3aXRoIHRoZSBnaXZlbiBuZXcgcGFyYW1ldGVycy4gQWxsIHRoZSBvdGhlciBwYXJ0cyAocXVlcnkgcGFyYW1zIGV0Yy4pIHN0YXkgYXMgdGhlIGFyZS5cbiAgICogVGhpcyBpcyBhIHNob3J0Y3V0IHRvIGB0cmlnZ2VyTmF2aWdhdGlvbmAgdGhhdCBjYW4gYmUgdXNlZCB0byBvbmx5IGNoYW5nZSB0aGUgcGFyYW1ldGVycy5cbiAgICovXG4gIHB1YmxpYyBzZXRQYXJhbXMocGFyYW1zOiBQYXJhbXMpOiB2b2lkIHtcbiAgICB0aGlzLnRyaWdnZXJOYXZpZ2F0aW9uKHsgcGFyYW1zIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFRyaWdnZXJzIGEgbmF2aWdhdGlvbiB3aXRoIHRoZSBnaXZlbiBuZXcgcGFyYW1ldGVyLiBUaGUgb3RoZXIgcGFyYW1ldGVycywgYXMgd2VsbCBhcyBhbGwgdGhlIG90aGVyIHBhcnRzIChxdWVyeSBwYXJhbXMgZXRjLilcbiAgICogc3RheSBhcyB0aGUgYXJlLlxuICAgKiBUaGlzIGlzIGEgc2hvcnRjdXQgdG8gYHRyaWdnZXJOYXZpZ2F0aW9uYCB0aGF0IGNhbiBiZSB1c2VkIHRvIG9ubHkgY2hhbmdlIG9uZSBwYXJhbWV0ZXIuXG4gICAqL1xuICBwdWJsaWMgc2V0UGFyYW0obmFtZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5zZXRQYXJhbXMoeyAuLi50aGlzLnNuYXBzaG90LnBhcmFtcywgW25hbWVdOiB2YWx1ZSB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUcmlnZ2VycyBhIG5hdmlnYXRpb24gd2l0aCB0aGUgZ2l2ZW4gbmV3IHF1ZXJ5IHBhcmFtZXRlcnMuIEFsbCB0aGUgb3RoZXIgcGFydHMgKHBhcmFtcyBldGMuKSBzdGF5IGFzIHRoZSBhcmUuXG4gICAqIFRoaXMgaXMgYSBzaG9ydGN1dCB0byBgdHJpZ2dlck5hdmlnYXRpb25gIHRoYXQgY2FuIGJlIHVzZWQgdG8gb25seSBjaGFuZ2UgdGhlIHF1ZXJ5IHBhcmFtZXRlcnMuXG4gICAqL1xuICBwdWJsaWMgc2V0UXVlcnlQYXJhbXMocXVlcnlQYXJhbXM6IFBhcmFtcyk6IHZvaWQge1xuICAgIHRoaXMudHJpZ2dlck5hdmlnYXRpb24oeyBxdWVyeVBhcmFtcyB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUcmlnZ2VycyBhIG5hdmlnYXRpb24gd2l0aCB0aGUgZ2l2ZW4gbmV3IHBhcmFtZXRlci4gVGhlIG90aGVyIHF1ZXJ5IHBhcmFtZXRlcnMsIGFzIHdlbGwgYXMgYWxsIHRoZSBvdGhlciBwYXJ0cyAocGFyYW1zIGV0Yy4pXG4gICAqIHN0YXkgYXMgdGhlIGFyZS5cbiAgICogVGhpcyBpcyBhIHNob3J0Y3V0IHRvIGB0cmlnZ2VyTmF2aWdhdGlvbmAgdGhhdCBjYW4gYmUgdXNlZCB0byBvbmx5IGNoYW5nZSBvbmUgcXVlcnkgcGFyYW1ldGVyLlxuICAgKi9cbiAgcHVibGljIHNldFF1ZXJ5UGFyYW0obmFtZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5zZXRRdWVyeVBhcmFtcyh7IC4uLnRoaXMuc25hcHNob3QucXVlcnlQYXJhbXMsIFtuYW1lXTogdmFsdWUgfSk7XG4gIH1cblxuICAvKipcbiAgICogVHJpZ2dlcnMgYSBuYXZpZ2F0aW9uIHdpdGggdGhlIGdpdmVuIG5ldyBkYXRhLiBUaGUgb3RoZXIgcGFyYW1ldGVycywgYXMgd2VsbCBhcyBhbGwgdGhlIG90aGVyIHBhcnRzIChwYXJhbXMgZXRjLilcbiAgICogc3RheSBhcyB0aGUgYXJlLlxuICAgKiBUaGlzIGlzIGEgc2hvcnRjdXQgdG8gYHRyaWdnZXJOYXZpZ2F0aW9uYCB0aGF0IGNhbiBiZSB1c2VkIHRvIG9ubHkgY2hhbmdlIHRoZSBkYXRhLlxuICAgKi9cbiAgcHVibGljIHNldERhdGEoZGF0YTogRGF0YSk6IHZvaWQge1xuICAgIHRoaXMudHJpZ2dlck5hdmlnYXRpb24oeyBkYXRhIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFRyaWdnZXJzIGEgbmF2aWdhdGlvbiB3aXRoIHRoZSBnaXZlbiBuZXcgZGF0YSBpdGVtLiBUaGUgb3RoZXIgZGF0YSwgYXMgd2VsbCBhcyBhbGwgdGhlIG90aGVyIHBhcnRzIChwYXJhbXMgZXRjLilcbiAgICogc3RheSBhcyB0aGUgYXJlLlxuICAgKiBUaGlzIGlzIGEgc2hvcnRjdXQgdG8gYHRyaWdnZXJOYXZpZ2F0aW9uYCB0aGF0IGNhbiBiZSB1c2VkIHRvIG9ubHkgY2hhbmdlIG9uZSBkYXRhIGl0ZW0uXG4gICAqL1xuICBwdWJsaWMgc2V0RGF0YUl0ZW0obmFtZTogc3RyaW5nLCB2YWx1ZTogdW5rbm93bik6IHZvaWQge1xuICAgIHRoaXMuc2V0RGF0YSh7IC4uLnRoaXMuc25hcHNob3QuZGF0YSwgW25hbWVdOiB2YWx1ZSB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUcmlnZ2VycyBhIG5hdmlnYXRpb24gd2l0aCB0aGUgZ2l2ZW4gbmV3IGZyYWdtZW50LiBUaGUgb3RoZXIgcGFydHMgKHBhcmFtcyBldGMuKSAgc3RheSBhcyB0aGUgYXJlLlxuICAgKiBUaGlzIGlzIGEgc2hvcnRjdXQgdG8gYHRyaWdnZXJOYXZpZ2F0aW9uYCB0aGF0IGNhbiBiZSB1c2VkIHRvIG9ubHkgY2hhbmdlIHRoZSBmcmFnbWVudC5cbiAgICovXG4gIHB1YmxpYyBzZXRGcmFnbWVudChmcmFnbWVudDogc3RyaW5nIHwgbnVsbCk6IHZvaWQge1xuICAgIHRoaXMudHJpZ2dlck5hdmlnYXRpb24oeyBmcmFnbWVudCB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUcmlnZ2VycyBhIG5hdmlnYXRpb24gd2l0aCB0aGUgZ2l2ZW4gbmV3IHVybC4gVGhlIG90aGVyIHBhcnRzIChwYXJhbXMgZXRjLikgIHN0YXkgYXMgdGhlIGFyZS5cbiAgICogVGhpcyBpcyBhIHNob3J0Y3V0IHRvIGB0cmlnZ2VyTmF2aWdhdGlvbmAgdGhhdCBjYW4gYmUgdXNlZCB0byBvbmx5IGNoYW5nZSB0aGUgdXJsLlxuICAgKi9cbiAgcHVibGljIHNldFVybCh1cmw6IEFycmF5PFVybFNlZ21lbnQ+KTogdm9pZCB7XG4gICAgdGhpcy50cmlnZ2VyTmF2aWdhdGlvbih7IHVybCB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUcmlnZ2VycyBhIG5hdmlnYXRpb24gYmFzZWQgb24gdGhlIGdpdmVuIG9wdGlvbnMuIElmIGFuIG9wdGlvbiBpcyB1bmRlZmluZWQgb3IgbnVsbCwgaXQncyBpZ25vcmVkLiBFeGNlcHQgZm9yIGZyYWdtZW50LCB3aGljaCBpcyBvbmx5XG4gICAqIGlnbm9yZWQgaWYgaXQncyB1bmRlZmluZWQsIGJlY2F1c2UgbnVsbCBpcyBhIHZhbGlkIHZhbHVlIGZvciBhIGZyYWdtZW50LlxuICAgKlxuICAgKiBUaGUgbm9uLWlnbm9yZWQgdmFsdWVzIGFyZSB1c2VkIHRvIGNoYW5nZSB0aGUgc25hcHNob3Qgb2YgdGhlIHJvdXRlLiBPbmNlIHRoZSBzbmFwc2hvdCBoYXMgYmVlbiBtb2RpZmllZCxcbiAgICogdGhlIG9ic2VydmFibGVzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHVwZGF0ZWQgcGFydHMgZW1pdCB0aGUgbmV3IHZhbHVlLlxuICAgKlxuICAgKiBTbywgc2V0dGluZyBwYXJhbXMgYW5kIHF1ZXJ5IHBhcmFtcyB3aWxsIG1ha2UgdGhlIHBhcmFtcyBhbmQgcXVlcnlQYXJhbXMgb2JzZXJ2YWJsZXMgZW1pdCwgYnV0IG5vdCB0aGUgZnJhZ21lbnQsIGRhdGEgYW5kXG4gICAqIHVybCBvYnNlcnZhYmxlcyBmb3IgZXhhbXBsZS4gVGhpcyBpcyBjb25zaXN0ZW50IHRvIGhvdyB0aGUgcm91dGVyIGJlaGF2ZXMuXG4gICAqL1xuICBwdWJsaWMgdHJpZ2dlck5hdmlnYXRpb24ob3B0aW9uczoge1xuICAgIHBhcmFtcz86IFBhcmFtcztcbiAgICBxdWVyeVBhcmFtcz86IFBhcmFtcztcbiAgICBmcmFnbWVudD86IHN0cmluZyB8IG51bGw7XG4gICAgZGF0YT86IERhdGEgfCBudWxsO1xuICAgIHVybD86IEFycmF5PFVybFNlZ21lbnQ+IHwgbnVsbDtcbiAgfSk6IHZvaWQge1xuICAgIC8vIHNldCB0aGUgc25hcHNob3QgZmlyc3RcbiAgICBpZiAob3B0aW9ucy5wYXJhbXMpIHtcbiAgICAgIHRoaXMuc25hcHNob3QucGFyYW1zID0gb3B0aW9ucy5wYXJhbXM7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLnF1ZXJ5UGFyYW1zKSB7XG4gICAgICB0aGlzLnNuYXBzaG90LnF1ZXJ5UGFyYW1zID0gb3B0aW9ucy5xdWVyeVBhcmFtcztcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMuZnJhZ21lbnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5zbmFwc2hvdC5mcmFnbWVudCA9IG9wdGlvbnMuZnJhZ21lbnQ7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLmRhdGEpIHtcbiAgICAgIHRoaXMuc25hcHNob3QuZGF0YSA9IG9wdGlvbnMuZGF0YTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMudXJsKSB7XG4gICAgICB0aGlzLnNuYXBzaG90LnVybCA9IG9wdGlvbnMudXJsO1xuICAgIH1cblxuICAgIC8vIHRoZW4gZW1pdCBldmVyeXRoaW5nIHRoYXQgaGFzIGNoYW5nZWRcbiAgICBpZiAob3B0aW9ucy5wYXJhbXMpIHtcbiAgICAgIHRoaXMucGFyYW1zU3ViamVjdC5uZXh0KHRoaXMuc25hcHNob3QucGFyYW1zKTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMucXVlcnlQYXJhbXMpIHtcbiAgICAgIHRoaXMucXVlcnlQYXJhbXNTdWJqZWN0Lm5leHQodGhpcy5zbmFwc2hvdC5xdWVyeVBhcmFtcyk7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLmZyYWdtZW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuZnJhZ21lbnRTdWJqZWN0Lm5leHQodGhpcy5zbmFwc2hvdC5mcmFnbWVudCk7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLmRhdGEpIHtcbiAgICAgIHRoaXMuZGF0YVN1YmplY3QubmV4dCh0aGlzLnNuYXBzaG90LmRhdGEpO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy51cmwpIHtcbiAgICAgIHRoaXMudXJsU3ViamVjdC5uZXh0KHRoaXMuc25hcHNob3QudXJsKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gJ0FjdGl2YXRlZFJvdXRlU3R1Yic7XG4gIH1cbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IEFjdGl2YXRlZFJvdXRlU3R1YiwgYnkgY2FsbGluZyBpdHMgY29uc3RydWN0b3IuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdHViUm91dGUob3B0aW9ucz86IEFjdGl2YXRlZFJvdXRlU3R1Yk9wdGlvbnMpOiBBY3RpdmF0ZWRSb3V0ZVN0dWIge1xuICByZXR1cm4gbmV3IEFjdGl2YXRlZFJvdXRlU3R1YihvcHRpb25zKTtcbn1cbiJdfQ==
319
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc3BlY3Vsb29zL3NyYy9saWIvcm91dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxzQkFBc0IsRUFBRSxpQkFBaUIsRUFBbUMsTUFBTSxpQkFBaUIsQ0FBQztBQUM3SCxPQUFPLEVBQUUsZUFBZSxFQUFFLEdBQUcsRUFBYyxNQUFNLE1BQU0sQ0FBQztBQUd4RDs7Ozs7Ozs7Ozs7Ozs7OztHQWdCRztBQUNILE1BQU0sVUFBVSxTQUFTLENBQUMsT0E0QnpCO0lBQ0MsTUFBTSxNQUFNLEdBQUc7UUFDYixHQUFHLEVBQUUsT0FBTyxDQUFDLEdBQUc7UUFDaEIsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNO1FBQ3RCLFFBQVEsRUFBRSxPQUFPLENBQUMsTUFBTSxJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDekYsV0FBVyxFQUFFLE9BQU8sQ0FBQyxXQUFXO1FBQ2hDLGFBQWEsRUFBRSxPQUFPLENBQUMsV0FBVyxJQUFJLE9BQU8sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDeEcsUUFBUSxFQUFFLE9BQU8sQ0FBQyxRQUFRO1FBQzFCLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSTtRQUNsQixNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU07UUFDdEIsU0FBUyxFQUFFLE9BQU8sQ0FBQyxTQUFTO1FBQzVCLFFBQVEsRUFBRSxPQUFPLENBQUMsUUFBUTtRQUMxQixXQUFXLEVBQUUsT0FBTyxDQUFDLFdBQVc7UUFDaEMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJO1FBQ2xCLE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTTtRQUN0QixVQUFVLEVBQUUsT0FBTyxDQUFDLFVBQVU7UUFDOUIsUUFBUSxFQUFFLE9BQU8sQ0FBQyxRQUFRO1FBQzFCLFlBQVksRUFBRSxPQUFPLENBQUMsWUFBWTtLQUNqQixDQUFDO0lBRXBCLEtBQUssSUFBSSxLQUFLLEdBQTBCLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUU7UUFDM0UsSUFBSSxLQUFLLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRTtZQUM1RCxtREFBbUQ7WUFDbkQsS0FBSyxDQUFDLFFBQVEsR0FBRyxZQUFZLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDbkM7UUFDRCxJQUFJLEtBQUssQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRTtZQUNsRSxLQUFLLENBQUMsUUFBd0YsQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUM7U0FDaEk7UUFFRCxJQUFJLEtBQUssQ0FBQyxRQUFRLElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFO1lBQzVELG1EQUFtRDtZQUNsRCxLQUFxRSxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDL0Y7UUFDRCxJQUFJLEtBQUssQ0FBQyxRQUFRLElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFO1lBQ3JGLEtBQUssQ0FBQyxNQUFNLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDO1NBQy9DO0tBQ0Y7SUFFRCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDO0FBRUQ7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLFVBQVUsWUFBWSxDQUFDLE9BMEI1QjtJQUNDLE9BQU87UUFDTCxHQUFHLEVBQUUsT0FBTyxDQUFDLEdBQUc7UUFDaEIsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNO1FBQ3RCLFFBQVEsRUFBRSxPQUFPLENBQUMsTUFBTSxJQUFJLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUM7UUFDN0QsV0FBVyxFQUFFLE9BQU8sQ0FBQyxXQUFXO1FBQ2hDLGFBQWEsRUFBRSxPQUFPLENBQUMsV0FBVyxJQUFJLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUM7UUFDNUUsUUFBUSxFQUFFLE9BQU8sQ0FBQyxRQUFRO1FBQzFCLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSTtRQUNsQixNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU07UUFDdEIsU0FBUyxFQUFFLE9BQU8sQ0FBQyxTQUFTO1FBQzVCLFdBQVcsRUFBRSxPQUFPLENBQUMsV0FBVztRQUNoQyxJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUk7UUFDbEIsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNO1FBQ3RCLFVBQVUsRUFBRSxPQUFPLENBQUMsVUFBVTtRQUM5QixRQUFRLEVBQUUsT0FBTyxDQUFDLFFBQVE7UUFDMUIsWUFBWSxFQUFFLE9BQU8sQ0FBQyxZQUFZO0tBQ1QsQ0FBQztBQUM5QixDQUFDO0FBNENELE1BQU0sMEJBQTJCLFNBQVEsc0JBQXNCO0lBMEQ3RDtRQUNFLEtBQUssRUFBRSxDQUFDO1FBMURGLFlBQU8sR0FBa0MsSUFBSSxDQUFDO1FBRTlDLGdCQUFXLEdBQWtDLElBQUksQ0FBQztRQUNsRCxjQUFTLEdBQWtDLEVBQUUsQ0FBQztRQUM5QyxrQkFBYSxHQUFrQyxFQUFFLENBQUM7UUFDbEQsaUJBQVksR0FBaUIsSUFBSSxDQUFDO1FBc0R4QyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztJQUNwQixDQUFDO0lBckRELElBQUksTUFBTTtRQUNSLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN0QixDQUFDO0lBRUQsSUFBSSxNQUFNLENBQUMsS0FBb0M7UUFDN0MsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7SUFDdkIsQ0FBQztJQUVELElBQUksSUFBSTtRQUNOLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUNwQixDQUFDO0lBRUQsSUFBSSxJQUFJLENBQUMsS0FBNkI7UUFDcEMsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7SUFDckIsQ0FBQztJQUVELElBQUksVUFBVTtRQUNaLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUMxQixDQUFDO0lBRUQsSUFBSSxVQUFVLENBQUMsS0FBb0M7UUFDakQsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7SUFDM0IsQ0FBQztJQUVELElBQUksUUFBUTtRQUNWLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUN4QixDQUFDO0lBRUQsSUFBSSxRQUFRLENBQUMsS0FBb0M7UUFDL0MsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7SUFDekIsQ0FBQztJQUVELElBQUksWUFBWTtRQUNkLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQztJQUM1QixDQUFDO0lBRUQsSUFBSSxZQUFZLENBQUMsS0FBb0M7UUFDbkQsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7SUFDN0IsQ0FBQztJQUVELDZEQUE2RDtJQUM3RCxhQUFhO0lBQ2IsSUFBSSxXQUFXO1FBQ2IsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzNCLENBQUM7SUFFRCxJQUFJLFdBQVcsQ0FBQyxLQUFtQjtRQUNqQyxJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztJQUM1QixDQUFDO0NBTUY7QUFFRDs7Ozs7Ozs7Ozs7OztHQWFHO0FBQ0gsTUFBTSxPQUFPLGtCQUFtQixTQUFRLGNBQWM7SUFjcEQ7Ozs7OztPQU1HO0lBQ0gsWUFBWSxPQUFtQztRQUM3QyxLQUFLLEVBQUUsQ0FBQztRQUVSLE1BQU0sUUFBUSxHQUFHLElBQUksMEJBQTBCLEVBQUUsQ0FBQztRQUNsRCxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztRQUV6QixJQUFJLENBQUMsV0FBVyxHQUFHLE9BQU8sRUFBRSxVQUFVLElBQUksSUFBSSxDQUFDO1FBQy9DLElBQUksQ0FBQyxTQUFTLEdBQUcsT0FBTyxFQUFFLFFBQVEsSUFBSSxFQUFFLENBQUM7UUFDekMsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLEVBQUUsTUFBTSxJQUFJLElBQUksQ0FBQztRQUN2QyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxJQUFJLElBQUksQ0FBQztRQUN2QyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUVoRixRQUFRLENBQUMsTUFBTSxHQUFHLE9BQU8sRUFBRSxNQUFNLElBQUksRUFBRSxDQUFDO1FBQ3hDLFFBQVEsQ0FBQyxXQUFXLEdBQUcsT0FBTyxFQUFFLFdBQVcsSUFBSSxFQUFFLENBQUM7UUFDbEQsUUFBUSxDQUFDLElBQUksR0FBRyxPQUFPLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUNwQyxRQUFRLENBQUMsUUFBUSxHQUFHLE9BQU8sRUFBRSxRQUFRLElBQUksSUFBSSxDQUFDO1FBQzlDLFFBQVEsQ0FBQyxHQUFHLEdBQUcsT0FBTyxFQUFFLEdBQUcsSUFBSSxFQUFFLENBQUM7UUFDbEMsUUFBUSxDQUFDLFdBQVcsR0FBRyxPQUFPLEVBQUUsV0FBVyxJQUFJLElBQUksQ0FBQztRQUVwRCxRQUFRLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsUUFBUSxJQUFJLElBQUksQ0FBQztRQUN4RCxRQUFRLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN0RSxRQUFRLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsUUFBUSxJQUFJLElBQUksQ0FBQztRQUNoRCxRQUFRLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQ25DLFFBQVEsQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFdkUsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLGVBQWUsQ0FBUyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3ZFLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLGVBQWUsQ0FBUyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ2pGLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxlQUFlLENBQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNqRSxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksZUFBZSxDQUFnQixJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2xGLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxlQUFlLENBQW9CLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFNUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ2hELElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFlBQVksRUFBRSxDQUFDO1FBQzFELElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUM1QyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDcEQsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzVDLENBQUM7SUFFRCxJQUFJLElBQUk7UUFDTixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDcEIsQ0FBQztJQUVELElBQUksTUFBTTtRQUNSLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN0QixDQUFDO0lBRUQsSUFBSSxZQUFZO1FBQ2QsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDO0lBQzVCLENBQUM7SUFFRCxJQUFJLFVBQVU7UUFDWixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDMUIsQ0FBQztJQUVELElBQUksUUFBUTtRQUNWLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUN4QixDQUFDO0lBRUQsSUFBSSxXQUFXO1FBQ2IsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQztJQUNuQyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksU0FBUyxDQUFDLE1BQWM7UUFDN0IsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLFFBQVEsQ0FBQyxJQUFZLEVBQUUsS0FBYTtRQUN6QyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUVEOzs7T0FHRztJQUNJLGNBQWMsQ0FBQyxXQUFtQjtRQUN2QyxJQUFJLENBQUMsaUJBQWlCLENBQUMsRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksYUFBYSxDQUFDLElBQVksRUFBRSxLQUFhO1FBQzlDLElBQUksQ0FBQyxjQUFjLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUN2RSxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLE9BQU8sQ0FBQyxJQUFVO1FBQ3ZCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxXQUFXLENBQUMsSUFBWSxFQUFFLEtBQWM7UUFDN0MsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFFRDs7O09BR0c7SUFDSSxXQUFXLENBQUMsUUFBdUI7UUFDeEMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksTUFBTSxDQUFDLEdBQXNCO1FBQ2xDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVEOzs7Ozs7Ozs7T0FTRztJQUNJLGlCQUFpQixDQUFDLE9BTXhCO1FBQ0MseUJBQXlCO1FBQ3pCLElBQUksT0FBTyxDQUFDLE1BQU0sRUFBRTtZQUNsQixJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDO1NBQ3ZDO1FBQ0QsSUFBSSxPQUFPLENBQUMsV0FBVyxFQUFFO1lBQ3ZCLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUM7U0FDakQ7UUFDRCxJQUFJLE9BQU8sQ0FBQyxRQUFRLEtBQUssU0FBUyxFQUFFO1lBQ2xDLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUM7U0FDM0M7UUFDRCxJQUFJLE9BQU8sQ0FBQyxJQUFJLEVBQUU7WUFDaEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQztTQUNuQztRQUNELElBQUksT0FBTyxDQUFDLEdBQUcsRUFBRTtZQUNmLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUM7U0FDakM7UUFFRCx3Q0FBd0M7UUFDeEMsSUFBSSxPQUFPLENBQUMsTUFBTSxFQUFFO1lBQ2xCLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDL0M7UUFDRCxJQUFJLE9BQU8sQ0FBQyxXQUFXLEVBQUU7WUFDdkIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1NBQ3pEO1FBQ0QsSUFBSSxPQUFPLENBQUMsUUFBUSxLQUFLLFNBQVMsRUFBRTtZQUNsQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQ25EO1FBQ0QsSUFBSSxPQUFPLENBQUMsSUFBSSxFQUFFO1lBQ2hCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDM0M7UUFDRCxJQUFJLE9BQU8sQ0FBQyxHQUFHLEVBQUU7WUFDZixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ3pDO0lBQ0gsQ0FBQztJQUVNLFFBQVE7UUFDYixPQUFPLG9CQUFvQixDQUFDO0lBQzlCLENBQUM7Q0FDRjtBQUVEOztHQUVHO0FBQ0gsTUFBTSxVQUFVLFNBQVMsQ0FBQyxPQUFtQztJQUMzRCxPQUFPLElBQUksa0JBQWtCLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDekMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LCBjb252ZXJ0VG9QYXJhbU1hcCwgRGF0YSwgUGFyYW1zLCBSb3V0ZSwgVXJsU2VnbWVudCB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIG1hcCwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgVHlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBmYWtlIHBhcnRpYWwgQWN0aXZhdGVkUm91dGUgZm9yIHRlc3RzLlxuICpcbiAqIElmIHlvdSBwYXNzIHBhcmFtcywgdGhlbiB0aGUgY3JlYXRlZCByb3V0ZSdzIHBhcmFtTWFwIHdpbGwgY29udGFpbiB0aGUgc2FtZSB2YWx1ZXMuXG4gKiBUaGUgc2FtZSBnb2VzIGZvciBxdWVyeVBhcmFtcyBhbmQgcXVlcnlQYXJhbU1hcC5cbiAqXG4gKiBJZiB5b3UgcGFzcyBhIHBhcmVudCByb3V0ZSBhbmQgYSBzbmFwc2hvdCwgYW5kIHRoZSBwYXNzZWQgc25hcHNob3QgZG9lc24ndCBoYXZlIGEgcGFyZW50LCB0aGVuIHRoZSBzbmFwc2hvdCdzXG4gKiBwYXJlbnQgd2lsbCBiZSBzZXQgdG8gdGhlIHBhcmVudCByb3V0ZSBzbmFwc2hvdC4gVGhpcyBhbGxvd3MgdGhlIGNvZGUgdW5kZXIgdGVzdCB0byB1c2VcbiAqIGByb3V0ZS5wYXJlbnQuc25hcHNob3RgIG9yIGByb3V0ZS5zbmFwc2hvdC5wYXJlbnRgLlxuICpcbiAqIElmIHlvdSBwYXNzIGEgc25hcHNob3Qgd2l0aCBhIHBhcmVudCwgYnV0IGRvbid0IHBhc3MgYSBwYXJlbnQgb3IgcGFzcyBhIHBhcmVudCB3aXRob3V0IHNuYXBzaG90LCB0aGVuIHRoZSByb3V0ZSdzXG4gKiBwYXJlbnQgc25hcHNob3Qgd2lsbCBiZSBzZXQgdG8gdGhlIGdpdmVuIHNuYXBzaG90J3MgcGFyZW50LiBUaGlzIGFsbG93cyB0aGUgY29kZSB1bmRlciB0ZXN0IHRvIHVzZVxuICogYHJvdXRlLnBhcmVudC5zbmFwc2hvdGAgb3IgYHJvdXRlLnNuYXBzaG90LnBhcmVudGAuXG4gKlxuICogQHJldHVybnMgYSBwYXJ0aWFsbHkgcG9wdWxhdGVkLCBmYWtlIEFjdGl2YXRlZFJvdXRlLCBkZXBlbmRpbmcgb24gd2hhdCB5b3UgcGFzc2VkIGluXG4gKiBAZGVwcmVjYXRlZCBmYXZvciBzdHViUm91dGUsIHdoaWNoIGNyZWF0ZXMgYW4gZWFzaWVyIHRvIHVzZSBhbmQgbW9yZSBsb2dpY2FsIHN0dWJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZha2VSb3V0ZShvcHRpb25zOiB7XG4gIHVybD86IE9ic2VydmFibGU8VXJsU2VnbWVudFtdPjtcbiAgLyoqIEFuIG9ic2VydmFibGUgb2YgdGhlIG1hdHJpeCBwYXJhbWV0ZXJzIHNjb3BlZCB0byB0aGlzIHJvdXRlICovXG4gIHBhcmFtcz86IE9ic2VydmFibGU8UGFyYW1zPjtcbiAgLyoqIEFuIG9ic2VydmFibGUgb2YgdGhlIHF1ZXJ5IHBhcmFtZXRlcnMgc2hhcmVkIGJ5IGFsbCB0aGUgcm91dGVzICovXG4gIHF1ZXJ5UGFyYW1zPzogT2JzZXJ2YWJsZTxQYXJhbXM+O1xuICAvKiogQW4gb2JzZXJ2YWJsZSBvZiB0aGUgVVJMIGZyYWdtZW50IHNoYXJlZCBieSBhbGwgdGhlIHJvdXRlcyAqL1xuICBmcmFnbWVudD86IE9ic2VydmFibGU8c3RyaW5nPjtcbiAgLyoqIEFuIG9ic2VydmFibGUgb2YgdGhlIHN0YXRpYyBhbmQgcmVzb2x2ZWQgZGF0YSBvZiB0aGlzIHJvdXRlLiAqL1xuICBkYXRhPzogT2JzZXJ2YWJsZTxEYXRhPjtcbiAgLyoqIFRoZSBvdXRsZXQgbmFtZSBvZiB0aGUgcm91dGUuIEl0J3MgYSBjb25zdGFudCAqL1xuICBvdXRsZXQ/OiBzdHJpbmc7XG4gIC8qKiBUaGUgY29tcG9uZW50IG9mIHRoZSByb3V0ZS4gSXQncyBhIGNvbnN0YW50ICovXG4gIGNvbXBvbmVudD86IFR5cGU8dW5rbm93bj4gfCBzdHJpbmcgfCBudWxsO1xuICAvKiogVGhlIGN1cnJlbnQgc25hcHNob3Qgb2YgdGhpcyByb3V0ZSAqL1xuICBzbmFwc2hvdD86IEFjdGl2YXRlZFJvdXRlU25hcHNob3Q7XG4gIC8qKiBUaGUgY29uZmlndXJhdGlvbiB1c2VkIHRvIG1hdGNoIHRoaXMgcm91dGUgKi9cbiAgcm91dGVDb25maWc/OiBSb3V0ZSB8IG51bGw7XG4gIC8qKiBUaGUgcm9vdCBvZiB0aGUgcm91dGVyIHN0YXRlICovXG4gIHJvb3Q/OiBBY3RpdmF0ZWRSb3V0ZTtcbiAgLyoqIFRoZSBwYXJlbnQgb2YgdGhpcyByb3V0ZSBpbiB0aGUgcm91dGVyIHN0YXRlIHRyZWUgKi9cbiAgcGFyZW50PzogQWN0aXZhdGVkUm91dGUgfCBudWxsO1xuICAvKiogVGhlIGZpcnN0IGNoaWxkIG9mIHRoaXMgcm91dGUgaW4gdGhlIHJvdXRlciBzdGF0ZSB0cmVlICovXG4gIGZpcnN0Q2hpbGQ/OiBBY3RpdmF0ZWRSb3V0ZTtcbiAgLyoqIFRoZSBjaGlsZHJlbiBvZiB0aGlzIHJvdXRlIGluIHRoZSByb3V0ZXIgc3RhdGUgdHJlZSAqL1xuICBjaGlsZHJlbj86IEFjdGl2YXRlZFJvdXRlW107XG4gIC8qKiBUaGUgcGF0aCBmcm9tIHRoZSByb290IG9mIHRoZSByb3V0ZXIgc3RhdGUgdHJlZSB0byB0aGlzIHJvdXRlICovXG4gIHBhdGhGcm9tUm9vdD86IEFjdGl2YXRlZFJvdXRlW107XG59KTogQWN0aXZhdGVkUm91dGUge1xuICBjb25zdCByZXN1bHQgPSB7XG4gICAgdXJsOiBvcHRpb25zLnVybCxcbiAgICBwYXJhbXM6IG9wdGlvbnMucGFyYW1zLFxuICAgIHBhcmFtTWFwOiBvcHRpb25zLnBhcmFtcyAmJiBvcHRpb25zLnBhcmFtcy5waXBlKG1hcChwYXJhbXMgPT4gY29udmVydFRvUGFyYW1NYXAocGFyYW1zKSkpLFxuICAgIHF1ZXJ5UGFyYW1zOiBvcHRpb25zLnF1ZXJ5UGFyYW1zLFxuICAgIHF1ZXJ5UGFyYW1NYXA6IG9wdGlvbnMucXVlcnlQYXJhbXMgJiYgb3B0aW9ucy5xdWVyeVBhcmFtcy5waXBlKG1hcChwYXJhbXMgPT4gY29udmVydFRvUGFyYW1NYXAocGFyYW1zKSkpLFxuICAgIGZyYWdtZW50OiBvcHRpb25zLmZyYWdtZW50LFxuICAgIGRhdGE6IG9wdGlvbnMuZGF0YSxcbiAgICBvdXRsZXQ6IG9wdGlvbnMub3V0bGV0LFxuICAgIGNvbXBvbmVudDogb3B0aW9ucy5jb21wb25lbnQsXG4gICAgc25hcHNob3Q6IG9wdGlvbnMuc25hcHNob3QsXG4gICAgcm91dGVDb25maWc6IG9wdGlvbnMucm91dGVDb25maWcsXG4gICAgcm9vdDogb3B0aW9ucy5yb290LFxuICAgIHBhcmVudDogb3B0aW9ucy5wYXJlbnQsXG4gICAgZmlyc3RDaGlsZDogb3B0aW9ucy5maXJzdENoaWxkLFxuICAgIGNoaWxkcmVuOiBvcHRpb25zLmNoaWxkcmVuLFxuICAgIHBhdGhGcm9tUm9vdDogb3B0aW9ucy5wYXRoRnJvbVJvb3RcbiAgfSBhcyBBY3RpdmF0ZWRSb3V0ZTtcblxuICBmb3IgKGxldCByb3V0ZTogbnVsbCB8IEFjdGl2YXRlZFJvdXRlID0gcmVzdWx0OyByb3V0ZTsgcm91dGUgPSByb3V0ZS5wYXJlbnQpIHtcbiAgICBpZiAocm91dGUucGFyZW50ICYmIHJvdXRlLnBhcmVudC5zbmFwc2hvdCAmJiAhcm91dGUuc25hcHNob3QpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuICAgICAgcm91dGUuc25hcHNob3QgPSBmYWtlU25hcHNob3Qoe30pO1xuICAgIH1cbiAgICBpZiAocm91dGUucGFyZW50ICYmIHJvdXRlLnBhcmVudC5zbmFwc2hvdCAmJiAhcm91dGUuc25hcHNob3QucGFyZW50KSB7XG4gICAgICAocm91dGUuc25hcHNob3QgYXMgT21pdDxBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LCAncGFyZW50Jz4gJiB7IHBhcmVudDogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCB9KS5wYXJlbnQgPSByb3V0ZS5wYXJlbnQuc25hcHNob3Q7XG4gICAgfVxuXG4gICAgaWYgKHJvdXRlLnNuYXBzaG90ICYmIHJvdXRlLnNuYXBzaG90LnBhcmVudCAmJiAhcm91dGUucGFyZW50KSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbiAgICAgIChyb3V0ZSBhcyBPbWl0PEFjdGl2YXRlZFJvdXRlLCAncGFyZW50Jz4gJiB7IHBhcmVudDogQWN0aXZhdGVkUm91dGUgfSkucGFyZW50ID0gZmFrZVJvdXRlKHt9KTtcbiAgICB9XG4gICAgaWYgKHJvdXRlLnNuYXBzaG90ICYmIHJvdXRlLnNuYXBzaG90LnBhcmVudCAmJiByb3V0ZS5wYXJlbnQgJiYgIXJvdXRlLnBhcmVudC5zbmFwc2hvdCkge1xuICAgICAgcm91dGUucGFyZW50LnNuYXBzaG90ID0gcm91dGUuc25hcHNob3QucGFyZW50O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZha2UgcGFydGlhbCBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90IGZvciB0ZXN0cy5cbiAqXG4gKiBJZiB5b3UgcGFzcyBwYXJhbXMsIHRoZW4gdGhlIGNyZWF0ZWQgc25hcHNob3QncyBwYXJhbU1hcCB3aWxsIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWVzLlxuICogVGhlIHNhbWUgZ29lcyBmb3IgcXVlcnlQYXJhbXMgYW5kIHF1ZXJ5UGFyYW1NYXAuXG4gKlxuICogQHJldHVybnMgYSBwYXJ0aWFsbHkgcG9wdWxhdGVkLCBmYWtlIEFjdGl2YXRlZFJvdXRlLCBkZXBlbmRpbmcgb24gd2hhdCB5b3UgcGFzc2VkIGluXG4gKiBAZGVwcmVjYXRlZCBmYXZvciBzdHViUm91dGUsIHdoaWNoIGNyZWF0ZXMgYW4gZWFzaWVyIHRvIHVzZSBhbmQgbW9yZSBsb2dpY2FsIHN0dWIgZm9yIGJvdGggdGhlIHJvdXRlIGFuZCBpdHMgc25hcHNob3RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZha2VTbmFwc2hvdChvcHRpb25zOiB7XG4gIHVybD86IFVybFNlZ21lbnRbXTtcbiAgLyoqIFRoZSBtYXRyaXggcGFyYW1ldGVycyBzY29wZWQgdG8gdGhpcyByb3V0ZSAqL1xuICBwYXJhbXM/OiBQYXJhbXM7XG4gIC8qKiBUaGUgcXVlcnkgcGFyYW1ldGVycyBzaGFyZWQgYnkgYWxsIHRoZSByb3V0ZXMgKi9cbiAgcXVlcnlQYXJhbXM/OiBQYXJhbXM7XG4gIC8qKiBUaGUgVVJMIGZyYWdtZW50IHNoYXJlZCBieSBhbGwgdGhlIHJvdXRlcyAqL1xuICBmcmFnbWVudD86IHN0cmluZztcbiAgLyoqIFRoZSBzdGF0aWMgYW5kIHJlc29sdmVkIGRhdGEgb2YgdGhpcyByb3V0ZSAqL1xuICBkYXRhPzogRGF0YTtcbiAgLyoqIFRoZSBvdXRsZXQgbmFtZSBvZiB0aGUgcm91dGUgKi9cbiAgb3V0bGV0Pzogc3RyaW5nO1xuICAvKiogVGhlIGNvbXBvbmVudCBvZiB0aGUgcm91dGUgKi9cbiAgY29tcG9uZW50PzogVHlwZTx1bmtub3duPiB8IHN0cmluZyB8IG51bGw7XG4gIC8qKiBUaGUgY29uZmlndXJhdGlvbiB1c2VkIHRvIG1hdGNoIHRoaXMgcm91dGUgKi9cbiAgcm91dGVDb25maWc/OiBSb3V0ZTtcbiAgLyoqIFRoZSByb290IG9mIHRoZSByb3V0ZXIgc3RhdGUgKi9cbiAgcm9vdD86IEFjdGl2YXRlZFJvdXRlU25hcHNob3Q7XG4gIC8qKiBUaGUgcGFyZW50IG9mIHRoaXMgcm91dGUgaW4gdGhlIHJvdXRlciBzdGF0ZSB0cmVlICovXG4gIHBhcmVudD86IEFjdGl2YXRlZFJvdXRlU25hcHNob3QgfCBudWxsO1xuICAvKiogVGhlIGZpcnN0IGNoaWxkIG9mIHRoaXMgcm91dGUgaW4gdGhlIHJvdXRlciBzdGF0ZSB0cmVlICovXG4gIGZpcnN0Q2hpbGQ/OiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90IHwgbnVsbDtcbiAgLyoqIFRoZSBjaGlsZHJlbiBvZiB0aGlzIHJvdXRlIGluIHRoZSByb3V0ZXIgc3RhdGUgdHJlZSAqL1xuICBjaGlsZHJlbj86IEFjdGl2YXRlZFJvdXRlU25hcHNob3RbXTtcbiAgLyoqIFRoZSBwYXRoIGZyb20gdGhlIHJvb3Qgb2YgdGhlIHJvdXRlciBzdGF0ZSB0cmVlIHRvIHRoaXMgcm91dGUgKi9cbiAgcGF0aEZyb21Sb290PzogQWN0aXZhdGVkUm91dGVTbmFwc2hvdFtdO1xufSk6IEFjdGl2YXRlZFJvdXRlU25hcHNob3Qge1xuICByZXR1cm4ge1xuICAgIHVybDogb3B0aW9ucy51cmwsXG4gICAgcGFyYW1zOiBvcHRpb25zLnBhcmFtcyxcbiAgICBwYXJhbU1hcDogb3B0aW9ucy5wYXJhbXMgJiYgY29udmVydFRvUGFyYW1NYXAob3B0aW9ucy5wYXJhbXMpLFxuICAgIHF1ZXJ5UGFyYW1zOiBvcHRpb25zLnF1ZXJ5UGFyYW1zLFxuICAgIHF1ZXJ5UGFyYW1NYXA6IG9wdGlvbnMucXVlcnlQYXJhbXMgJiYgY29udmVydFRvUGFyYW1NYXAob3B0aW9ucy5xdWVyeVBhcmFtcyksXG4gICAgZnJhZ21lbnQ6IG9wdGlvbnMuZnJhZ21lbnQsXG4gICAgZGF0YTogb3B0aW9ucy5kYXRhLFxuICAgIG91dGxldDogb3B0aW9ucy5vdXRsZXQsXG4gICAgY29tcG9uZW50OiBvcHRpb25zLmNvbXBvbmVudCxcbiAgICByb3V0ZUNvbmZpZzogb3B0aW9ucy5yb3V0ZUNvbmZpZyxcbiAgICByb290OiBvcHRpb25zLnJvb3QsXG4gICAgcGFyZW50OiBvcHRpb25zLnBhcmVudCxcbiAgICBmaXJzdENoaWxkOiBvcHRpb25zLmZpcnN0Q2hpbGQsXG4gICAgY2hpbGRyZW46IG9wdGlvbnMuY2hpbGRyZW4sXG4gICAgcGF0aEZyb21Sb290OiBvcHRpb25zLnBhdGhGcm9tUm9vdFxuICB9IGFzIEFjdGl2YXRlZFJvdXRlU25hcHNob3Q7XG59XG5cbi8qKlxuICogVGhlIG9wdGlvbnMgdGhhdCBhcmUgcGFzc2VkIHdoZW4gY3JlYXRpbmcgYW4gQWN0aXZhdGVkUm91dGVTdHViLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFjdGl2YXRlZFJvdXRlU3R1Yk9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIGluaXRpYWwgdmFsdWVzIG9mIHRoZSBwYXJhbWV0ZXJzIG9mIHRoZSByb3V0ZVxuICAgKi9cbiAgcGFyYW1zPzogUGFyYW1zO1xuICAvKipcbiAgICogVGhlIGluaXRpYWwgdmFsdWVzIG9mIHRoZSBxdWVyeSBwYXJhbWV0ZXJzIG9mIHRoZSByb3V0ZVxuICAgKi9cbiAgcXVlcnlQYXJhbXM/OiBQYXJhbXM7XG4gIC8qKlxuICAgKiBUaGUgaW5pdGlhbCB2YWx1ZXMgb2YgdGhlIGRhdGEgb2YgdGhlIHJvdXRlXG4gICAqL1xuICBkYXRhPzogRGF0YTtcbiAgLyoqXG4gICAqIFRoZSBpbml0aWFsIGZyYWdtZW50IG9mIHRoZSByb3V0ZVxuICAgKi9cbiAgZnJhZ21lbnQ/OiBzdHJpbmcgfCBudWxsO1xuICAvKipcbiAgICogVGhlIGluaXRpYWwgdXJsIG9mIHRoZSByb3V0ZVxuICAgKi9cbiAgdXJsPzogVXJsU2VnbWVudFtdO1xuICAvKipcbiAgICogVGhlIHBhcmVudCBvZiB0aGUgcm91dGVcbiAgICovXG4gIHBhcmVudD86IEFjdGl2YXRlZFJvdXRlU3R1YiB8IG51bGw7XG4gIC8qKlxuICAgKiBUaGUgZmlyc3QgY2hpbGQgb2YgdGhlIHJvdXRlXG4gICAqL1xuICBmaXJzdENoaWxkPzogQWN0aXZhdGVkUm91dGVTdHViIHwgbnVsbDtcbiAgLyoqXG4gICAqIFRoZSBjaGlsZHJlbiBvZiB0aGUgcm91dGVcbiAgICovXG4gIGNoaWxkcmVuPzogQWN0aXZhdGVkUm91dGVTdHViW10gfCBudWxsO1xuICAvKipcbiAgICogVGhlIGNvbmZpZ3VyYXRpb24gb2YgdGhlIHJvdXRlXG4gICAqL1xuICByb3V0ZUNvbmZpZz86IFJvdXRlIHwgbnVsbDtcbn1cblxuY2xhc3MgQWN0aXZhdGVkUm91dGVTbmFwc2hvdFN0dWIgZXh0ZW5kcyBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90IHtcbiAgcHJpdmF0ZSBfcGFyZW50OiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90IHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgX3Jvb3Q6IEFjdGl2YXRlZFJvdXRlU25hcHNob3Q7XG4gIHByaXZhdGUgX2ZpcnN0Q2hpbGQ6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBfY2hpbGRyZW46IEFycmF5PEFjdGl2YXRlZFJvdXRlU25hcHNob3Q+ID0gW107XG4gIHByaXZhdGUgX3BhdGhGcm9tUm9vdDogQXJyYXk8QWN0aXZhdGVkUm91dGVTbmFwc2hvdD4gPSBbXTtcbiAgcHJpdmF0ZSBfcm91dGVDb25maWc6IFJvdXRlIHwgbnVsbCA9IG51bGw7XG5cbiAgZ2V0IHBhcmVudCgpOiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90IHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX3BhcmVudDtcbiAgfVxuXG4gIHNldCBwYXJlbnQodmFsdWU6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QgfCBudWxsKSB7XG4gICAgdGhpcy5fcGFyZW50ID0gdmFsdWU7XG4gIH1cblxuICBnZXQgcm9vdCgpOiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90IHtcbiAgICByZXR1cm4gdGhpcy5fcm9vdDtcbiAgfVxuXG4gIHNldCByb290KHZhbHVlOiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90KSB7XG4gICAgdGhpcy5fcm9vdCA9IHZhbHVlO1xuICB9XG5cbiAgZ2V0IGZpcnN0Q2hpbGQoKTogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9maXJzdENoaWxkO1xuICB9XG5cbiAgc2V0IGZpcnN0Q2hpbGQodmFsdWU6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QgfCBudWxsKSB7XG4gICAgdGhpcy5fZmlyc3RDaGlsZCA9IHZhbHVlO1xuICB9XG5cbiAgZ2V0IGNoaWxkcmVuKCk6IEFycmF5PEFjdGl2YXRlZFJvdXRlU25hcHNob3Q+IHtcbiAgICByZXR1cm4gdGhpcy5fY2hpbGRyZW47XG4gIH1cblxuICBzZXQgY2hpbGRyZW4odmFsdWU6IEFycmF5PEFjdGl2YXRlZFJvdXRlU25hcHNob3Q+KSB7XG4gICAgdGhpcy5fY2hpbGRyZW4gPSB2YWx1ZTtcbiAgfVxuXG4gIGdldCBwYXRoRnJvbVJvb3QoKTogQXJyYXk8QWN0aXZhdGVkUm91dGVTbmFwc2hvdD4ge1xuICAgIHJldHVybiB0aGlzLl9wYXRoRnJvbVJvb3Q7XG4gIH1cblxuICBzZXQgcGF0aEZyb21Sb290KHZhbHVlOiBBcnJheTxBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90Pikge1xuICAgIHRoaXMuX3BhdGhGcm9tUm9vdCA9IHZhbHVlO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuICAvLyBAdHMtaWdub3JlXG4gIGdldCByb3V0ZUNvbmZpZygpOiBSb3V0ZSB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9yb3V0ZUNvbmZpZztcbiAgfVxuXG4gIHNldCByb3V0ZUNvbmZpZyhyb3V0ZTogUm91dGUgfCBudWxsKSB7XG4gICAgdGhpcy5fcm91dGVDb25maWcgPSByb3V0ZTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5fcm9vdCA9IHRoaXM7XG4gIH1cbn1cblxuLyoqXG4gKiBBIHN0dWIgZm9yIEFjdGl2YXRlZFJvdXRlLiBJdCBiZWhhdmVzIGFsbW9zdCB0aGUgc2FtZSB3YXkgYXMgdGhlIGFjdHVhbCBBY3RpdmF0ZWRSb3V0ZSwgZXhwb3NpbmcgYSBzbmFwc2hvdFxuICogYW5kIG9ic2VydmFibGVzIGZvciB0aGUgcGFyYW1zLCBxdWVyeSBwYXJhbXMgZXRjLiwgd2hpY2ggYXJlIGtlcHQgaW4gc3luYy5cbiAqXG4gKiBJbiBhZGRpdGlvbiwgdGhpcyBzdHViIGFsbG93cyBzaW11bGF0aW5nIGEgbmF2aWdhdGlvbiBieSBjaGFuZ2luZyB0aGUgcGFyYW1zLCB0aGUgcXVlcnkgcGFyYW1zLCB0aGUgZnJhZ21lbnQsIGV0Yy5cbiAqIFdoZW4gdGhhdCBoYXBwZW5zLCB0aGUgc25hcHNob3QgaXMgbW9kaWZpZWQsIHRoZW4gdGhlIHJlbGV2YW50IG9ic2VydmFibGVzIGVtaXQgdGhlIG5ldyB2YWx1ZXMuXG4gKlxuICogVGhlcmUgYXJlIHNvbWUgdGhpbmdzIHRoYXQgZG9uJ3QgcmVhbGx5IHdvcmsgdGhlIHNhbWUgd2F5IGFzIHRoZSByZWFsIEFjdGl2YXRlZFJvdXRlIHRob3VnaDpcbiAqIC0gdGhlIGhhbmRsaW5nIG9mIHRoZSBmaXJzdENoaWxkIGFuZCBvZiB0aGUgY2hpbGRyZW4gaXMgZW50aXJlbHkgdW5kZXIgdGhlIHRlc3RlcidzIHJlc3BvbnNpYmlsaXR5LiBTZXR0aW5nIHRoZSBwYXJlbnRcbiAqICAgb2YgYSByb3V0ZSBzdHViIGRvZXMgbm90IGFkZCB0aGlzIHJvdXRlIHRvIHRoZSBjaGlsZHJlbiBvZiBpdHMgcGFyZW50LCBmb3IgZXhhbXBsZS5cbiAqIC0gd2hlbiBjaGFuZ2luZyB0aGUgcGFyYW1zLCBxdWVyeSBwYXJhbXMsIGZyYWdtZW50LCBldGMuLCB0aGVpciBhc3NvY2lhdGVkIG9ic2VydmFibGUgZW1pdHMgdW5jb25kaXRpb25hbGx5LCBpbnN0ZWFkIG9mXG4gKiAgIGZpcnN0IGNoZWNraW5nIGlmIHRoZSB2YWx1ZSBpcyBhY3R1YWxseSBkaWZmZXJlbnQgZnJvbSBiZWZvcmUuIEl0J3MgdGh1cyB0aGUgcmVzcG9uc2liaWxpdHkgb2YgdGhlIHRlc3RlciB0byBub3RcbiAqICAgY2hhbmdlIHRoZSB2YWx1ZXMgaWYgdGhleSdyZSB0aGUgc2FtZSBhcyBiZWZvcmUuXG4gKi9cbmV4cG9ydCBjbGFzcyBBY3RpdmF0ZWRSb3V0ZVN0dWIgZXh0ZW5kcyBBY3RpdmF0ZWRSb3V0ZSB7XG4gIHByaXZhdGUgX2ZpcnN0Q2hpbGQ6IEFjdGl2YXRlZFJvdXRlU3R1YiB8IG51bGw7XG4gIHByaXZhdGUgX2NoaWxkcmVuOiBBcnJheTxBY3RpdmF0ZWRSb3V0ZVN0dWI+O1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgcGFyYW1zU3ViamVjdDogQmVoYXZpb3JTdWJqZWN0PFBhcmFtcz47XG4gIHByaXZhdGUgcmVhZG9ubHkgcXVlcnlQYXJhbXNTdWJqZWN0OiBCZWhhdmlvclN1YmplY3Q8UGFyYW1zPjtcbiAgcHJpdmF0ZSByZWFkb25seSBkYXRhU3ViamVjdDogQmVoYXZpb3JTdWJqZWN0PERhdGE+O1xuICBwcml2YXRlIHJlYWRvbmx5IGZyYWdtZW50U3ViamVjdDogQmVoYXZpb3JTdWJqZWN0PHN0cmluZyB8IG51bGw+O1xuICBwcml2YXRlIHJlYWRvbmx5IHVybFN1YmplY3Q6IEJlaGF2aW9yU3ViamVjdDxBcnJheTxVcmxTZWdtZW50Pj47XG5cbiAgcHJpdmF0ZSBfcGFyZW50OiBBY3RpdmF0ZWRSb3V0ZVN0dWIgfCBudWxsO1xuICBwcml2YXRlIF9yb290OiBBY3RpdmF0ZWRSb3V0ZVN0dWI7XG4gIHByaXZhdGUgX3BhdGhGcm9tUm9vdDogQXJyYXk8QWN0aXZhdGVkUm91dGVTdHViPjtcblxuICAvKipcbiAgICogQ29uc3RydWN0cyBhIG5ldyBpbnN0YW5jZSwgYmFzZWQgb24gdGhlIGdpdmVuIG9wdGlvbnMuXG4gICAqIElmIGFuIG9wdGlvbiBpcyBub3QgcHJvdmlkZWQgKG9yIGlmIG5vIG9wdGlvbiBpcyBwcm92aWRlZCBhdCBhbGwpLCB0aGVuIHRoZSByb3V0ZSBoYXMgYSBkZWZhdWx0IHZhbHVlIGZvciB0aGlzIG9wdGlvblxuICAgKiAoZW1wdHkgcGFyYW1ldGVycyBmb3IgZXhhbXBsZSwgbnVsbCBmcmFnbWVudCwgZXRjLilcbiAgICogSWYgbm8gcGFyZW50IGlzIHBhc3NlZCwgdGhlbiB0aGlzIHJvdXRlIGhhcyBubyBwYXJlbnQgYW5kIGlzIHRodXMgc2V0IGFzIHRoZSByb290LiBPdGhlcndpc2UsIHRoZSByb290IGFuZCB0aGUgcGF0aFxuICAgKiBmcm9tIHJvb3QgYXJlIGNyZWF0ZWQgYmFzZWQgb24gdGhlIHJvb3QgYW5kIHBhdGggZnJvbSByb290IG9mIHRoZSBnaXZlbiBwYXJlbnQgcm91dGUuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihvcHRpb25zPzogQWN0aXZhdGVkUm91dGVTdHViT3B0aW9ucykge1xuICAgIHN1cGVyKCk7XG5cbiAgICBjb25zdCBzbmFwc2hvdCA9IG5ldyBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90U3R1YigpO1xuICAgIHRoaXMuc25hcHNob3QgPSBzbmFwc2hvdDtcblxuICAgIHRoaXMuX2ZpcnN0Q2hpbGQgPSBvcHRpb25zPy5maXJzdENoaWxkID8/IG51bGw7XG4gICAgdGhpcy5fY2hpbGRyZW4gPSBvcHRpb25zPy5jaGlsZHJlbiA/PyBbXTtcbiAgICB0aGlzLl9wYXJlbnQgPSBvcHRpb25zPy5wYXJlbnQgPz8gbnVsbDtcbiAgICB0aGlzLl9yb290ID0gdGhpcy5wYXJlbnQ/LnJvb3QgPz8gdGhpcztcbiAgICB0aGlzLl9wYXRoRnJvbVJvb3QgPSB0aGlzLnBhcmVudCA/IFsuLi50aGlzLnBhcmVudC5wYXRoRnJvbVJvb3QsIHRoaXNdIDogW3RoaXNdO1xuXG4gICAgc25hcHNob3QucGFyYW1zID0gb3B0aW9ucz8ucGFyYW1zID8/IHt9O1xuICAgIHNuYXBzaG90LnF1ZXJ5UGFyYW1zID0gb3B0aW9ucz8ucXVlcnlQYXJhbXMgPz8ge307XG4gICAgc25hcHNob3QuZGF0YSA9IG9wdGlvbnM/LmRhdGEgPz8ge307XG4gICAgc25hcHNob3QuZnJhZ21lbnQgPSBvcHRpb25zPy5mcmFnbWVudCA/PyBudWxsO1xuICAgIHNuYXBzaG90LnVybCA9IG9wdGlvbnM/LnVybCA/PyBbXTtcbiAgICBzbmFwc2hvdC5yb3V0ZUNvbmZpZyA9IG9wdGlvbnM/LnJvdXRlQ29uZmlnID8/IG51bGw7XG5cbiAgICBzbmFwc2hvdC5maXJzdENoaWxkID0gdGhpcy5maXJzdENoaWxkPy5zbmFwc2hvdCA/PyBudWxsO1xuICAgIHNuYXBzaG90LmNoaWxkcmVuID0gdGhpcy5jaGlsZHJlbj8ubWFwKHJvdXRlID0+IHJvdXRlLnNuYXBzaG90KSA/PyBbXTtcbiAgICBzbmFwc2hvdC5wYXJlbnQgPSB0aGlzLnBhcmVudD8uc25hcHNob3QgPz8gbnVsbDtcbiAgICBzbmFwc2hvdC5yb290ID0gdGhpcy5yb290LnNuYXBzaG90O1xuICAgIHNuYXBzaG90LnBhdGhGcm9tUm9vdCA9IHRoaXMucGF0aEZyb21Sb290Lm1hcChyb3V0ZSA9PiByb3V0ZS5zbmFwc2hvdCk7XG5cbiAgICB0aGlzLnBhcmFtc1N1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFBhcmFtcz4odGhpcy5zbmFwc2hvdC5wYXJhbXMpO1xuICAgIHRoaXMucXVlcnlQYXJhbXNTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxQYXJhbXM+KHRoaXMuc25hcHNob3QucXVlcnlQYXJhbXMpO1xuICAgIHRoaXMuZGF0YVN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PERhdGE+KHRoaXMuc25hcHNob3QuZGF0YSk7XG4gICAgdGhpcy5mcmFnbWVudFN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZyB8IG51bGw+KHRoaXMuc25hcHNob3QuZnJhZ21lbnQpO1xuICAgIHRoaXMudXJsU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8QXJyYXk8VXJsU2VnbWVudD4+KHRoaXMuc25hcHNob3QudXJsKTtcblxuICAgIHRoaXMucGFyYW1zID0gdGhpcy5wYXJhbXNTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICAgIHRoaXMucXVlcnlQYXJhbXMgPSB0aGlzLnF1ZXJ5UGFyYW1zU3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgICB0aGlzLmRhdGEgPSB0aGlzLmRhdGFTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICAgIHRoaXMuZnJhZ21lbnQgPSB0aGlzLmZyYWdtZW50U3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgICB0aGlzLnVybCA9IHRoaXMudXJsU3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIGdldCByb290KCkge1xuICAgIHJldHVybiB0aGlzLl9yb290O1xuICB9XG5cbiAgZ2V0IHBhcmVudCgpOiBBY3RpdmF0ZWRSb3V0ZVN0dWIgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fcGFyZW50O1xuICB9XG5cbiAgZ2V0IHBhdGhGcm9tUm9vdCgpOiBBcnJheTxBY3RpdmF0ZWRSb3V0ZVN0dWI+IHtcbiAgICByZXR1cm4gdGhpcy5fcGF0aEZyb21Sb290O1xuICB9XG5cbiAgZ2V0IGZpcnN0Q2hpbGQoKTogQWN0aXZhdGVkUm91dGVTdHViIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX2ZpcnN0Q2hpbGQ7XG4gIH1cblxuICBnZXQgY2hpbGRyZW4oKTogQXJyYXk8QWN0aXZhdGVkUm91dGVTdHViPiB7XG4gICAgcmV0dXJuIHRoaXMuX2NoaWxkcmVuO1xuICB9XG5cbiAgZ2V0IHJvdXRlQ29uZmlnKCk6IFJvdXRlIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuc25hcHNob3Qucm91dGVDb25maWc7XG4gIH1cblxuICAvKipcbiAgICogVHJpZ2dlcnMgYSBuYXZpZ2F0aW9uIHdpdGggdGhlIGdpdmVuIG5ldyBwYXJhbWV0ZXJzLiBBbGwgdGhlIG90aGVyIHBhcnRzIChxdWVyeSBwYXJhbXMgZXRjLikgc3RheSBhcyB0aGUgYXJlLlxuICAgKiBUaGlzIGlzIGEgc2hvcnRjdXQgdG8gYHRyaWdnZXJOYXZpZ2F0aW9uYCB0aGF0IGNhbiBiZSB1c2VkIHRvIG9ubHkgY2hhbmdlIHRoZSBwYXJhbWV0ZXJzLlxuICAgKi9cbiAgcHVibGljIHNldFBhcmFtcyhwYXJhbXM6IFBhcmFtcyk6IHZvaWQge1xuICAgIHRoaXMudHJpZ2dlck5hdmlnYXRpb24oeyBwYXJhbXMgfSk7XG4gIH1cblxuICAvKipcbiAgICogVHJpZ2dlcnMgYSBuYXZpZ2F0aW9uIHdpdGggdGhlIGdpdmVuIG5ldyBwYXJhbWV0ZXIuIFRoZSBvdGhlciBwYXJhbWV0ZXJzLCBhcyB3ZWxsIGFzIGFsbCB0aGUgb3RoZXIgcGFydHMgKHF1ZXJ5IHBhcmFtcyBldGMuKVxuICAgKiBzdGF5IGFzIHRoZSBhcmUuXG4gICAqIFRoaXMgaXMgYSBzaG9ydGN1dCB0byBgdHJpZ2dlck5hdmlnYXRpb25gIHRoYXQgY2FuIGJlIHVzZWQgdG8gb25seSBjaGFuZ2Ugb25lIHBhcmFtZXRlci5cbiAgICovXG4gIHB1YmxpYyBzZXRQYXJhbShuYW1lOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnNldFBhcmFtcyh7IC4uLnRoaXMuc25hcHNob3QucGFyYW1zLCBbbmFtZV06IHZhbHVlIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFRyaWdnZXJzIGEgbmF2aWdhdGlvbiB3aXRoIHRoZSBnaXZlbiBuZXcgcXVlcnkgcGFyYW1ldGVycy4gQWxsIHRoZSBvdGhlciBwYXJ0cyAocGFyYW1zIGV0Yy4pIHN0YXkgYXMgdGhlIGFyZS5cbiAgICogVGhpcyBpcyBhIHNob3J0Y3V0IHRvIGB0cmlnZ2VyTmF2aWdhdGlvbmAgdGhhdCBjYW4gYmUgdXNlZCB0byBvbmx5IGNoYW5nZSB0aGUgcXVlcnkgcGFyYW1ldGVycy5cbiAgICovXG4gIHB1YmxpYyBzZXRRdWVyeVBhcmFtcyhxdWVyeVBhcmFtczogUGFyYW1zKTogdm9pZCB7XG4gICAgdGhpcy50cmlnZ2VyTmF2aWdhdGlvbih7IHF1ZXJ5UGFyYW1zIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFRyaWdnZXJzIGEgbmF2aWdhdGlvbiB3aXRoIHRoZSBnaXZlbiBuZXcgcGFyYW1ldGVyLiBUaGUgb3RoZXIgcXVlcnkgcGFyYW1ldGVycywgYXMgd2VsbCBhcyBhbGwgdGhlIG90aGVyIHBhcnRzIChwYXJhbXMgZXRjLilcbiAgICogc3RheSBhcyB0aGUgYXJlLlxuICAgKiBUaGlzIGlzIGEgc2hvcnRjdXQgdG8gYHRyaWdnZXJOYXZpZ2F0aW9uYCB0aGF0IGNhbiBiZSB1c2VkIHRvIG9ubHkgY2hhbmdlIG9uZSBxdWVyeSBwYXJhbWV0ZXIuXG4gICAqL1xuICBwdWJsaWMgc2V0UXVlcnlQYXJhbShuYW1lOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnNldFF1ZXJ5UGFyYW1zKHsgLi4udGhpcy5zbmFwc2hvdC5xdWVyeVBhcmFtcywgW25hbWVdOiB2YWx1ZSB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUcmlnZ2VycyBhIG5hdmlnYXRpb24gd2l0aCB0aGUgZ2l2ZW4gbmV3IGRhdGEuIFRoZSBvdGhlciBwYXJhbWV0ZXJzLCBhcyB3ZWxsIGFzIGFsbCB0aGUgb3RoZXIgcGFydHMgKHBhcmFtcyBldGMuKVxuICAgKiBzdGF5IGFzIHRoZSBhcmUuXG4gICAqIFRoaXMgaXMgYSBzaG9ydGN1dCB0byBgdHJpZ2dlck5hdmlnYXRpb25gIHRoYXQgY2FuIGJlIHVzZWQgdG8gb25seSBjaGFuZ2UgdGhlIGRhdGEuXG4gICAqL1xuICBwdWJsaWMgc2V0RGF0YShkYXRhOiBEYXRhKTogdm9pZCB7XG4gICAgdGhpcy50cmlnZ2VyTmF2aWdhdGlvbih7IGRhdGEgfSk7XG4gIH1cblxuICAvKipcbiAgICogVHJpZ2dlcnMgYSBuYXZpZ2F0aW9uIHdpdGggdGhlIGdpdmVuIG5ldyBkYXRhIGl0ZW0uIFRoZSBvdGhlciBkYXRhLCBhcyB3ZWxsIGFzIGFsbCB0aGUgb3RoZXIgcGFydHMgKHBhcmFtcyBldGMuKVxuICAgKiBzdGF5IGFzIHRoZSBhcmUuXG4gICAqIFRoaXMgaXMgYSBzaG9ydGN1dCB0byBgdHJpZ2dlck5hdmlnYXRpb25gIHRoYXQgY2FuIGJlIHVzZWQgdG8gb25seSBjaGFuZ2Ugb25lIGRhdGEgaXRlbS5cbiAgICovXG4gIHB1YmxpYyBzZXREYXRhSXRlbShuYW1lOiBzdHJpbmcsIHZhbHVlOiB1bmtub3duKTogdm9pZCB7XG4gICAgdGhpcy5zZXREYXRhKHsgLi4udGhpcy5zbmFwc2hvdC5kYXRhLCBbbmFtZV06IHZhbHVlIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFRyaWdnZXJzIGEgbmF2aWdhdGlvbiB3aXRoIHRoZSBnaXZlbiBuZXcgZnJhZ21lbnQuIFRoZSBvdGhlciBwYXJ0cyAocGFyYW1zIGV0Yy4pICBzdGF5IGFzIHRoZSBhcmUuXG4gICAqIFRoaXMgaXMgYSBzaG9ydGN1dCB0byBgdHJpZ2dlck5hdmlnYXRpb25gIHRoYXQgY2FuIGJlIHVzZWQgdG8gb25seSBjaGFuZ2UgdGhlIGZyYWdtZW50LlxuICAgKi9cbiAgcHVibGljIHNldEZyYWdtZW50KGZyYWdtZW50OiBzdHJpbmcgfCBudWxsKTogdm9pZCB7XG4gICAgdGhpcy50cmlnZ2VyTmF2aWdhdGlvbih7IGZyYWdtZW50IH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFRyaWdnZXJzIGEgbmF2aWdhdGlvbiB3aXRoIHRoZSBnaXZlbiBuZXcgdXJsLiBUaGUgb3RoZXIgcGFydHMgKHBhcmFtcyBldGMuKSAgc3RheSBhcyB0aGUgYXJlLlxuICAgKiBUaGlzIGlzIGEgc2hvcnRjdXQgdG8gYHRyaWdnZXJOYXZpZ2F0aW9uYCB0aGF0IGNhbiBiZSB1c2VkIHRvIG9ubHkgY2hhbmdlIHRoZSB1cmwuXG4gICAqL1xuICBwdWJsaWMgc2V0VXJsKHVybDogQXJyYXk8VXJsU2VnbWVudD4pOiB2b2lkIHtcbiAgICB0aGlzLnRyaWdnZXJOYXZpZ2F0aW9uKHsgdXJsIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFRyaWdnZXJzIGEgbmF2aWdhdGlvbiBiYXNlZCBvbiB0aGUgZ2l2ZW4gb3B0aW9ucy4gSWYgYW4gb3B0aW9uIGlzIHVuZGVmaW5lZCBvciBudWxsLCBpdCdzIGlnbm9yZWQuIEV4Y2VwdCBmb3IgZnJhZ21lbnQsIHdoaWNoIGlzIG9ubHlcbiAgICogaWdub3JlZCBpZiBpdCdzIHVuZGVmaW5lZCwgYmVjYXVzZSBudWxsIGlzIGEgdmFsaWQgdmFsdWUgZm9yIGEgZnJhZ21lbnQuXG4gICAqXG4gICAqIFRoZSBub24taWdub3JlZCB2YWx1ZXMgYXJlIHVzZWQgdG8gY2hhbmdlIHRoZSBzbmFwc2hvdCBvZiB0aGUgcm91dGUuIE9uY2UgdGhlIHNuYXBzaG90IGhhcyBiZWVuIG1vZGlmaWVkLFxuICAgKiB0aGUgb2JzZXJ2YWJsZXMgY29ycmVzcG9uZGluZyB0byB0aGUgdXBkYXRlZCBwYXJ0cyBlbWl0IHRoZSBuZXcgdmFsdWUuXG4gICAqXG4gICAqIFNvLCBzZXR0aW5nIHBhcmFtcyBhbmQgcXVlcnkgcGFyYW1zIHdpbGwgbWFrZSB0aGUgcGFyYW1zIGFuZCBxdWVyeVBhcmFtcyBvYnNlcnZhYmxlcyBlbWl0LCBidXQgbm90IHRoZSBmcmFnbWVudCwgZGF0YSBhbmRcbiAgICogdXJsIG9ic2VydmFibGVzIGZvciBleGFtcGxlLiBUaGlzIGlzIGNvbnNpc3RlbnQgdG8gaG93IHRoZSByb3V0ZXIgYmVoYXZlcy5cbiAgICovXG4gIHB1YmxpYyB0cmlnZ2VyTmF2aWdhdGlvbihvcHRpb25zOiB7XG4gICAgcGFyYW1zPzogUGFyYW1zO1xuICAgIHF1ZXJ5UGFyYW1zPzogUGFyYW1zO1xuICAgIGZyYWdtZW50Pzogc3RyaW5nIHwgbnVsbDtcbiAgICBkYXRhPzogRGF0YSB8IG51bGw7XG4gICAgdXJsPzogQXJyYXk8VXJsU2VnbWVudD4gfCBudWxsO1xuICB9KTogdm9pZCB7XG4gICAgLy8gc2V0IHRoZSBzbmFwc2hvdCBmaXJzdFxuICAgIGlmIChvcHRpb25zLnBhcmFtcykge1xuICAgICAgdGhpcy5zbmFwc2hvdC5wYXJhbXMgPSBvcHRpb25zLnBhcmFtcztcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMucXVlcnlQYXJhbXMpIHtcbiAgICAgIHRoaXMuc25hcHNob3QucXVlcnlQYXJhbXMgPSBvcHRpb25zLnF1ZXJ5UGFyYW1zO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy5mcmFnbWVudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnNuYXBzaG90LmZyYWdtZW50ID0gb3B0aW9ucy5mcmFnbWVudDtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMuZGF0YSkge1xuICAgICAgdGhpcy5zbmFwc2hvdC5kYXRhID0gb3B0aW9ucy5kYXRhO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy51cmwpIHtcbiAgICAgIHRoaXMuc25hcHNob3QudXJsID0gb3B0aW9ucy51cmw7XG4gICAgfVxuXG4gICAgLy8gdGhlbiBlbWl0IGV2ZXJ5dGhpbmcgdGhhdCBoYXMgY2hhbmdlZFxuICAgIGlmIChvcHRpb25zLnBhcmFtcykge1xuICAgICAgdGhpcy5wYXJhbXNTdWJqZWN0Lm5leHQodGhpcy5zbmFwc2hvdC5wYXJhbXMpO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy5xdWVyeVBhcmFtcykge1xuICAgICAgdGhpcy5xdWVyeVBhcmFtc1N1YmplY3QubmV4dCh0aGlzLnNuYXBzaG90LnF1ZXJ5UGFyYW1zKTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMuZnJhZ21lbnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5mcmFnbWVudFN1YmplY3QubmV4dCh0aGlzLnNuYXBzaG90LmZyYWdtZW50KTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMuZGF0YSkge1xuICAgICAgdGhpcy5kYXRhU3ViamVjdC5uZXh0KHRoaXMuc25hcHNob3QuZGF0YSk7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLnVybCkge1xuICAgICAgdGhpcy51cmxTdWJqZWN0Lm5leHQodGhpcy5zbmFwc2hvdC51cmwpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgIHJldHVybiAnQWN0aXZhdGVkUm91dGVTdHViJztcbiAgfVxufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgQWN0aXZhdGVkUm91dGVTdHViLCBieSBjYWxsaW5nIGl0cyBjb25zdHJ1Y3Rvci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0dWJSb3V0ZShvcHRpb25zPzogQWN0aXZhdGVkUm91dGVTdHViT3B0aW9ucyk6IEFjdGl2YXRlZFJvdXRlU3R1YiB7XG4gIHJldHVybiBuZXcgQWN0aXZhdGVkUm91dGVTdHViKG9wdGlvbnMpO1xufVxuIl19
@@ -715,6 +715,7 @@ class ActivatedRouteSnapshotStub extends ActivatedRouteSnapshot {
715
715
  this._firstChild = null;
716
716
  this._children = [];
717
717
  this._pathFromRoot = [];
718
+ this._routeConfig = null;
718
719
  this._root = this;
719
720
  }
720
721
  get parent() {
@@ -747,6 +748,14 @@ class ActivatedRouteSnapshotStub extends ActivatedRouteSnapshot {
747
748
  set pathFromRoot(value) {
748
749
  this._pathFromRoot = value;
749
750
  }
751
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
752
+ // @ts-ignore
753
+ get routeConfig() {
754
+ return this._routeConfig;
755
+ }
756
+ set routeConfig(route) {
757
+ this._routeConfig = route;
758
+ }
750
759
  }
751
760
  /**
752
761
  * A stub for ActivatedRoute. It behaves almost the same way as the actual ActivatedRoute, exposing a snapshot
@@ -771,7 +780,7 @@ class ActivatedRouteStub extends ActivatedRoute {
771
780
  * from root are created based on the root and path from root of the given parent route.
772
781
  */
773
782
  constructor(options) {
774
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r;
783
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s;
775
784
  super();
776
785
  const snapshot = new ActivatedRouteSnapshotStub();
777
786
  this.snapshot = snapshot;
@@ -785,9 +794,10 @@ class ActivatedRouteStub extends ActivatedRoute {
785
794
  snapshot.data = (_h = options === null || options === void 0 ? void 0 : options.data) !== null && _h !== void 0 ? _h : {};
786
795
  snapshot.fragment = (_j = options === null || options === void 0 ? void 0 : options.fragment) !== null && _j !== void 0 ? _j : null;
787
796
  snapshot.url = (_k = options === null || options === void 0 ? void 0 : options.url) !== null && _k !== void 0 ? _k : [];
788
- snapshot.firstChild = (_m = (_l = this.firstChild) === null || _l === void 0 ? void 0 : _l.snapshot) !== null && _m !== void 0 ? _m : null;
789
- snapshot.children = (_p = (_o = this.children) === null || _o === void 0 ? void 0 : _o.map(route => route.snapshot)) !== null && _p !== void 0 ? _p : [];
790
- snapshot.parent = (_r = (_q = this.parent) === null || _q === void 0 ? void 0 : _q.snapshot) !== null && _r !== void 0 ? _r : null;
797
+ snapshot.routeConfig = (_l = options === null || options === void 0 ? void 0 : options.routeConfig) !== null && _l !== void 0 ? _l : null;
798
+ snapshot.firstChild = (_o = (_m = this.firstChild) === null || _m === void 0 ? void 0 : _m.snapshot) !== null && _o !== void 0 ? _o : null;
799
+ snapshot.children = (_q = (_p = this.children) === null || _p === void 0 ? void 0 : _p.map(route => route.snapshot)) !== null && _q !== void 0 ? _q : [];
800
+ snapshot.parent = (_s = (_r = this.parent) === null || _r === void 0 ? void 0 : _r.snapshot) !== null && _s !== void 0 ? _s : null;
791
801
  snapshot.root = this.root.snapshot;
792
802
  snapshot.pathFromRoot = this.pathFromRoot.map(route => route.snapshot);
793
803
  this.paramsSubject = new BehaviorSubject(this.snapshot.params);
@@ -816,6 +826,9 @@ class ActivatedRouteStub extends ActivatedRoute {
816
826
  get children() {
817
827
  return this._children;
818
828
  }
829
+ get routeConfig() {
830
+ return this.snapshot.routeConfig;
831
+ }
819
832
  /**
820
833
  * Triggers a navigation with the given new parameters. All the other parts (query params etc.) stay as the are.
821
834
  * This is a shortcut to `triggerNavigation` that can be used to only change the parameters.
@@ -1227,7 +1240,7 @@ function collectMethodNames(proto) {
1227
1240
  * Creates a spy object for a class where all the methods of the class (and of its superclasses) are spies.
1228
1241
  * I.e., for a class `UserService` with methods `get()`, `create()`, `update()` and `delete()`, calling
1229
1242
  * `createMock(UserService)` is equivalent to calling
1230
- * `jasmine.createSpyObj<UserService>('UserService', ['get', 'create', 'update', 'delete']).
1243
+ * `jasmine.createSpyObj<UserService>('UserService', ['get', 'create', 'update', 'delete'])`.
1231
1244
  * @param type the type to mock (usually a service class)
1232
1245
  */
1233
1246
  function createMock(type) {