@coolon/angular-ui-powerups 16.1.0-alpha.299 → 16.1.0-alpha.301
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.
- package/assets/commands.scss +18 -0
- package/assets/styles.scss +1 -0
- package/esm2022/lib/place/navigation/session/navigation-context.mjs +7 -2
- package/esm2022/lib/place/navigation/session/navigation-session.mjs +10 -2
- package/esm2022/lib/place/place-router.mjs +2 -2
- package/fesm2022/coolon-angular-ui-powerups.mjs +16 -3
- package/fesm2022/coolon-angular-ui-powerups.mjs.map +1 -1
- package/lib/place/navigation/session/navigation-context.d.ts +7 -1
- package/package.json +1 -1
package/assets/commands.scss
CHANGED
|
@@ -1,3 +1,21 @@
|
|
|
1
|
+
@use 'sass:map';
|
|
2
|
+
@use '@angular/material' as mat;
|
|
3
|
+
|
|
1
4
|
:root {
|
|
2
5
|
--aup-command-face-icon-gap: 8px;
|
|
3
6
|
}
|
|
7
|
+
|
|
8
|
+
// A face's colour applies in a menu as it does on a button, so a Delete face with `color: warn`
|
|
9
|
+
// reads as warn wherever it is shown. Keyed on the colour attribute aup-command-face sets on itself,
|
|
10
|
+
// which covers aup's own menus and hand-built mat-menus alike. A disabled item keeps Material's
|
|
11
|
+
// faded look.
|
|
12
|
+
@mixin apply-theme($color-config, $typography-config) {
|
|
13
|
+
@each $palette in (primary, accent, warn) {
|
|
14
|
+
$color: mat.get-color-from-palette(map.get($color-config, $palette));
|
|
15
|
+
|
|
16
|
+
.mat-mdc-menu-item:not([disabled]) aup-command-face[color=#{$palette}] {
|
|
17
|
+
color: $color;
|
|
18
|
+
--mat-menu-item-icon-color: #{$color};
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
}
|
package/assets/styles.scss
CHANGED
|
@@ -26,6 +26,7 @@
|
|
|
26
26
|
@include activities.apply-theme($color-config, $typography);
|
|
27
27
|
@include pills.apply-theme($color-config, $typography);
|
|
28
28
|
@include place.apply-theme($color-config, $typography);
|
|
29
|
+
@include commands.apply-theme($color-config, $typography);
|
|
29
30
|
|
|
30
31
|
:root {
|
|
31
32
|
--aup-default-padding: var(--default-padding, 16px);
|
|
@@ -7,15 +7,20 @@ export var NavigationContext;
|
|
|
7
7
|
transitionTo;
|
|
8
8
|
finishRoutingSession;
|
|
9
9
|
recordVisit;
|
|
10
|
-
|
|
10
|
+
getActiveVisit;
|
|
11
|
+
constructor(urlService, routerInteractionAdapter, navigateByUrl, transitionTo, finishRoutingSession, recordVisit, getActiveVisit) {
|
|
11
12
|
this.urlService = urlService;
|
|
12
13
|
this.routerInteractionAdapter = routerInteractionAdapter;
|
|
13
14
|
this.navigateByUrl = navigateByUrl;
|
|
14
15
|
this.transitionTo = transitionTo;
|
|
15
16
|
this.finishRoutingSession = finishRoutingSession;
|
|
16
17
|
this.recordVisit = recordVisit;
|
|
18
|
+
this.getActiveVisit = getActiveVisit;
|
|
19
|
+
}
|
|
20
|
+
get activeVisit() {
|
|
21
|
+
return this.getActiveVisit();
|
|
17
22
|
}
|
|
18
23
|
}
|
|
19
24
|
NavigationContext.Impl = Impl;
|
|
20
25
|
})(NavigationContext || (NavigationContext = {}));
|
|
21
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
26
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2aWdhdGlvbi1jb250ZXh0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLXVpLXBvd2VydXBzL3NyYy9saWIvcGxhY2UvbmF2aWdhdGlvbi9zZXNzaW9uL25hdmlnYXRpb24tY29udGV4dC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUE4QkEsTUFBTSxLQUFXLGlCQUFpQixDQWlCakM7QUFqQkQsV0FBaUIsaUJBQWlCO0lBQ2hDLE1BQWEsSUFBSTtRQUNNO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNRO1FBTjdCLFlBQXFCLFVBQXNCLEVBQ3RCLHdCQUEwRCxFQUMxRCxhQUE4RixFQUM5RixZQUFtRCxFQUNuRCxvQkFBNkMsRUFDN0MsV0FBbUMsRUFDM0IsY0FBdUM7WUFOL0MsZUFBVSxHQUFWLFVBQVUsQ0FBWTtZQUN0Qiw2QkFBd0IsR0FBeEIsd0JBQXdCLENBQWtDO1lBQzFELGtCQUFhLEdBQWIsYUFBYSxDQUFpRjtZQUM5RixpQkFBWSxHQUFaLFlBQVksQ0FBdUM7WUFDbkQseUJBQW9CLEdBQXBCLG9CQUFvQixDQUF5QjtZQUM3QyxnQkFBVyxHQUFYLFdBQVcsQ0FBd0I7WUFDM0IsbUJBQWMsR0FBZCxjQUFjLENBQXlCO1FBQ3BFLENBQUM7UUFFRCxJQUFJLFdBQVc7WUFDYixPQUFPLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUMvQixDQUFDO0tBRUY7SUFkWSxzQkFBSSxPQWNoQixDQUFBO0FBRUgsQ0FBQyxFQWpCZ0IsaUJBQWlCLEtBQWpCLGlCQUFpQixRQWlCakMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7SW50ZXJhY3Rpb25TZXJ2aWNlUm91dGluZ0FkYXB0ZXJ9IGZyb20gJy4uLy4uLy4uL2ludGVyYWN0aW9uL3NlcnZpY2VzL2ludGVyYWN0aW9uLXNlcnZpY2Utcm91dGluZy1hZGFwdGVyJztcbmltcG9ydCB0eXBlIHtVcmxTZXJ2aWNlfSBmcm9tICcuLi8uLi91cmwtc2VydmljZSc7XG5pbXBvcnQgdHlwZSB7VXJsU25hcHNob3R9IGZyb20gJy4uLy4uL3VybC1zbmFwc2hvdCc7XG5pbXBvcnQgdHlwZSB7VmlzaXR9IGZyb20gJy4uLy4uL3Zpc2l0JztcbmltcG9ydCB0eXBlIHtOYXZpZ2F0aW9uU2Vzc2lvbn0gZnJvbSAnLi9uYXZpZ2F0aW9uLXNlc3Npb24nO1xuXG5leHBvcnQgaW50ZXJmYWNlIE5hdmlnYXRpb25Db250ZXh0IHtcbiAgcmVhZG9ubHkgdXJsU2VydmljZTogVXJsU2VydmljZSxcbiAgcmVhZG9ubHkgcm91dGVySW50ZXJhY3Rpb25BZGFwdGVyOiBJbnRlcmFjdGlvblNlcnZpY2VSb3V0aW5nQWRhcHRlcjtcblxuICAvKipcbiAgICogVGhlIHZpc2l0IG9mIHRoZSBsYXN0IGNvbXBsZXRlZCBuYXZpZ2F0aW9uLCBvciB1bmRlZmluZWQgYmVmb3JlIHRoZSBmaXJzdCBvbmUuXG4gICAqL1xuICByZWFkb25seSBhY3RpdmVWaXNpdDogVmlzaXQgfCB1bmRlZmluZWQ7XG5cbiAgZmluaXNoUm91dGluZ1Nlc3Npb24odmlzaXQ/OiBWaXNpdCk7XG5cbiAgLyoqXG4gICAqIFJlY29yZHMgYSBjb21wbGV0ZWQgbmF2aWdhdGlvbidzIHZpc2l0IChhY3RpdmUgdmlzaXQgKyBwbGFjZSBoaXN0b3J5KSBXSVRIT1VUIGZpbmlzaGluZyB0aGVcbiAgICogc2Vzc2lvbiDigJQgZm9yIHNlc3Npb25zIHRoYXQgaGFuZCBvdmVyIHRvIGhvdXNla2VlcGluZyAoZS5nLiB0aGUgaW50ZXJhY3Rpb24taWQgc3luYykgd2hvc2Ugb3duXG4gICAqIGZpbmlzaCBpcyBkZWxpYmVyYXRlbHkgdmlzaXRsZXNzLiBEcm9wcGluZyB0aGUgdmlzaXQgaW5zdGVhZCBsZWF2ZXMgYWN0aXZlVmlzaXQkIHN0YWxlLCBhbmQgYVxuICAgKiBsYXRlciBuYXZpZ2F0ZSgpIHRoZW4gYnVpbGRzIGl0cyB1cmwgZnJvbSBzdGFsZSAocG9zc2libHkgaWQtbGVzcykgc2VnbWVudHMuXG4gICAqL1xuICByZWNvcmRWaXNpdCh2aXNpdDogVmlzaXQpO1xuXG4gIHRyYW5zaXRpb25UbyhuZXdTdGF0ZTogTmF2aWdhdGlvblNlc3Npb24pO1xuXG4gIG5hdmlnYXRlQnlVcmwodXJsU25hcHNob3Q6IFVybFNuYXBzaG90LCBvcHRpb25zOiB7IHJlcGxhY2VVcmw6IGJvb2xlYW4gfSk6IFByb21pc2U8Ym9vbGVhbj47XG59XG5cbmV4cG9ydCBuYW1lc3BhY2UgTmF2aWdhdGlvbkNvbnRleHQge1xuICBleHBvcnQgY2xhc3MgSW1wbCBpbXBsZW1lbnRzIE5hdmlnYXRpb25Db250ZXh0IHtcbiAgICBjb25zdHJ1Y3RvcihyZWFkb25seSB1cmxTZXJ2aWNlOiBVcmxTZXJ2aWNlLFxuICAgICAgICAgICAgICAgIHJlYWRvbmx5IHJvdXRlckludGVyYWN0aW9uQWRhcHRlcjogSW50ZXJhY3Rpb25TZXJ2aWNlUm91dGluZ0FkYXB0ZXIsXG4gICAgICAgICAgICAgICAgcmVhZG9ubHkgbmF2aWdhdGVCeVVybDogKHVybFNuYXBzaG90OiBVcmxTbmFwc2hvdCwgb3B0aW9uczogeyByZXBsYWNlVXJsOiBib29sZWFuIH0pPT4gUHJvbWlzZTxib29sZWFuPixcbiAgICAgICAgICAgICAgICByZWFkb25seSB0cmFuc2l0aW9uVG86IChuZXdTdGF0ZTogTmF2aWdhdGlvblNlc3Npb24pID0+IHZvaWQsXG4gICAgICAgICAgICAgICAgcmVhZG9ubHkgZmluaXNoUm91dGluZ1Nlc3Npb246ICh2aXNpdD86IFZpc2l0KSA9PiB2b2lkLFxuICAgICAgICAgICAgICAgIHJlYWRvbmx5IHJlY29yZFZpc2l0OiAodmlzaXQ6IFZpc2l0KSA9PiB2b2lkLFxuICAgICAgICAgICAgICAgIHByaXZhdGUgcmVhZG9ubHkgZ2V0QWN0aXZlVmlzaXQ6ICgpID0+IFZpc2l0IHwgdW5kZWZpbmVkKSB7XG4gICAgfVxuXG4gICAgZ2V0IGFjdGl2ZVZpc2l0KCk6IFZpc2l0IHwgdW5kZWZpbmVkIHtcbiAgICAgIHJldHVybiB0aGlzLmdldEFjdGl2ZVZpc2l0KCk7XG4gICAgfVxuXG4gIH1cblxufVxuIl19
|
|
@@ -67,7 +67,15 @@ export class NavigationSession extends GarbageCollector {
|
|
|
67
67
|
const snapshot = this.urlService.parseUrl(url);
|
|
68
68
|
const filteredSegments = Array.from(this._visitSegments.values())
|
|
69
69
|
.filter(it => snapshot.containsVisitSegment(it));
|
|
70
|
-
|
|
70
|
+
const visit = Visit.fromSegments(filteredSegments);
|
|
71
|
+
// Angular only runs guards for routes whose parameters changed, so a place that stays active
|
|
72
|
+
// (e.g. the parent when Back only changes the child) never reaches this session. Keep its
|
|
73
|
+
// segment from the active visit, otherwise Visit fills it in with empty parameters.
|
|
74
|
+
const activeVisit = this.context.activeVisit;
|
|
75
|
+
const segments = visit.segments.map(segment => this._visitSegments.has(segment.placeDefinition)
|
|
76
|
+
? segment
|
|
77
|
+
: activeVisit?.getSegmentFor(segment.placeDefinition) ?? segment);
|
|
78
|
+
return Visit.fromSegments(segments);
|
|
71
79
|
}
|
|
72
80
|
get canDeactivateInteractionContext() {
|
|
73
81
|
return this._interactionContext;
|
|
@@ -182,4 +190,4 @@ export class NavigationSession extends GarbageCollector {
|
|
|
182
190
|
return context;
|
|
183
191
|
}
|
|
184
192
|
}
|
|
185
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2aWdhdGlvbi1zZXNzaW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLXVpLXBvd2VydXBzL3NyYy9saWIvcGxhY2UvbmF2aWdhdGlvbi9zZXNzaW9uL25hdmlnYXRpb24tc2Vzc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUMsZ0JBQWdCLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBTzlELE9BQU8sRUFBQyxLQUFLLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFFbEMsT0FBTyxFQUFDLGlDQUFpQyxFQUFDLE1BQU0seUNBQXlDLENBQUM7QUFHMUY7O0dBRUc7QUFDSCxNQUFNLE9BQWdCLGlCQUFrQixTQUFRLGdCQUFnQjtJQVd6QztJQUFxQztJQVQxRCxpQkFBaUIsR0FBYSxFQUFFLENBQUM7SUFDekIsY0FBYyxHQUFHLElBQUksR0FBRyxFQUFpQyxDQUFDO0lBRTFELDZCQUE2QixHQUFHLElBQUksR0FBRyxFQUFxRCxDQUFDO0lBSTdGLG1CQUFtQixDQUFxQjtJQUVoRCxZQUFxQixPQUEwQixFQUFXLFdBQW1CO1FBQzNFLEtBQUssRUFBRSxDQUFDO1FBRFcsWUFBTyxHQUFQLE9BQU8sQ0FBbUI7UUFBVyxnQkFBVyxHQUFYLFdBQVcsQ0FBUTtRQUUzRSw4Q0FBOEM7UUFDOUMsd0RBQXdEO1FBQ3hELElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLHdCQUF3QixDQUFDLHlDQUF5QyxFQUFFLENBQUM7UUFDN0csSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDbEIsK0ZBQStGO1lBQy9GLDhGQUE4RjtZQUM5RixpR0FBaUc7WUFDakcsOEZBQThGO1lBQzlGLElBQUksSUFBSSxDQUFDLG1CQUFtQixFQUFFO2dCQUM1QixJQUFJLENBQUMsbUJBQW1CLENBQUMsT0FBTyxFQUFFLENB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QU0sS0FBSyxDQUFDO1FBQ2QsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsOEJBQThCLENBQUMsTUFBYztRQUMzQyxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxtRUFBbUUsQ0FBQyxDQUFDO1FBQzNGLHFHQUFxRztRQUNyRyxtQkFBbUI7UUFDbkIsTUFBTSwrQkFBK0IsR0FBRyxJQUFJLENBQUMscUNBQXFDLEVBQUUsQ0FBQztRQUNyRix1RkFBdUY7UUFDdkYsdUZBQXVGO1FBQ3ZGLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLDBDQUEwQyxDQUFDLENBQUM7UUFDbEUsK0JBQStCLENBQUMsb0JBQW9CLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFO1lBQy9ELCtCQUErQixDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQzVDLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLHlDQUF5QyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFJUywrQ0FBK0MsQ0FBQyxHQUFXO1FBQ25FLHNGQUFzRjtRQUN0Rix3R0FBd0c7UUFDeEcsb0NBQW9DO1FBQ3BDLGlCQUFpQjtRQUNqQixzRUFBc0U7UUFDdEUsd0RBQXdEO1FBQ3hELElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLEVBQUUsRUFBRSxjQUFjLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUMzRCxDQUFDO0lBRVMscUNBQXFDO1FBQzdDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQztRQUN6QyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDO1FBQ2hDLE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7TmF2aWdhdGlvbkNhbmNlbCwgTmF2aWdhdGlvbkVuZCwgTmF2aWdhdGlvbkVycm9yLCBOYXZpZ2F0aW9uU3RhcnQsIFJvdXRlckV2ZW50fSBmcm9tIFwiQGFuZ3VsYXIvcm91dGVyXCI7XG5pbXBvcnQge0dhcmJhZ2VDb2xsZWN0b3IsIGxhbmcsIExvZ2dlcn0gZnJvbSBcIkBjb29sb24vcGVjdGluXCI7XG5pbXBvcnQgdHlwZSB7SW50ZXJhY3Rpb25Db250ZXh0fSBmcm9tIFwiLi4vLi4vLi4vaW50ZXJhY3Rpb24vaW50ZXJhY3Rpb24tY29udGV4dFwiO1xuaW1wb3J0IHR5cGUge0ludGVyYWN0aW9uU2VydmljZVJvdXRpbmdBZGFwdGVyfSBmcm9tIFwiLi4vLi4vLi4vaW50ZXJhY3Rpb24vc2VydmljZXMvaW50ZXJhY3Rpb24tc2VydmljZS1yb3V0aW5nLWFkYXB0ZXJcIjtcbmltcG9ydCB0eXBlIHtQbGFjZUNvbXBvbmVudH0gZnJvbSBcIi4uLy4uL3BsYWNlLWNvbXBvbmVudFwiO1xuaW1wb3J0IHR5cGUge1BsYWNlRGVmaW5pdGlvbn0gZnJvbSBcIi4uLy4uL3BsYWNlLWRlZmluaXRpb25cIjtcbmltcG9ydCB0eXBlIHtVcmxTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vdXJsLXNlcnZpY2VcIjtcbmltcG9ydCB0eXBlIHtVcmxTbmFwc2hvdH0gZnJvbSBcIi4uLy4uL3VybC1zbmFwc2hvdFwiO1xuaW1wb3J0IHtWaXNpdH0gZnJvbSBcIi4uLy4uL3Zpc2l0XCI7XG5pbXBvcnQgdHlwZSB7VmlzaXRTZWdtZW50fSBmcm9tIFwiLi4vLi4vdmlzaXQtc2VnbWVudFwiO1xuaW1wb3J0IHtQbGFjZUNvbXBvbmVudERlYWN0aXZhdGlvbkhhbmRsZXJ9IGZyb20gXCIuLi9wbGFjZS1jb21wb25lbnQtZGVhY3RpdmF0aW9uLWhhbmRsZXJcIjtcbmltcG9ydCB0eXBlIHtOYXZpZ2F0aW9uQ29udGV4dH0gZnJvbSBcIi4vbmF2aWdhdGlvbi1jb250ZXh0XCI7XG5cbi8qKlxuICogVHJhbnNpZW50IHN0YXRlc1xuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgTmF2aWdhdGlvblNlc3Npb24gZXh0ZW5kcyBHYXJiYWdlQ29sbGVjdG9yIHtcblxuICBkZWJ1Z1Byb3BlcnR5S2V5czogc3RyaW5nW10gPSBbXTtcbiAgcHJpdmF0ZSBfdmlzaXRTZWdtZW50cyA9IG5ldyBNYXA8UGxhY2VEZWZpbml0aW9uLCBWaXNpdFNlZ21lbnQ+KCk7XG5cbiAgcHJpdmF0ZSBjb21wb25lbnREZWFjdGl2YXRpb25IYW5kbGVycyA9IG5ldyBNYXA8UGxhY2VDb21wb25lbnQsIFBsYWNlQ29tcG9uZW50RGVhY3RpdmF0aW9uSGFuZGxlcj4oKTtcbiAgYWJzdHJhY3QgcmVhZG9ubHkgaXNQb3BTdGF0ZTogYm9vbGVhbjtcblxuXG4gIHByaXZhdGUgX2ludGVyYWN0aW9uQ29udGV4dDogSW50ZXJhY3Rpb25Db250ZXh0O1xuXG4gIGNvbnN0cnVjdG9yKHJlYWRvbmx5IGNvbnRleHQ6IE5hdmlnYXRpb25Db250ZXh0LCByZWFkb25seSBzdGFydGluZ1VybDogc3RyaW5nKSB7XG4gICAgc3VwZXIoKTtcbiAgICAvLyBjb25zb2xlLmxvZyhgbmV3ICR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfWApXG4gICAgLy8gVE9ETzogY2FuIEkgZ2V0IGF3YXkgd2l0aG91dCBjcmVhdGluZyBvbmUgZXZlcnkgdGltZT9cbiAgICB0aGlzLl9pbnRlcmFjdGlvbkNvbnRleHQgPSB0aGlzLmNvbnRleHQucm91dGVySW50ZXJhY3Rpb25BZGFwdGVyLmNyZWF0ZU5hdmlnYXRpb25TZXNzaW9uSW50ZXJhY3Rpb25Db250ZXh0KCk7XG4gICAgdGhpcy5vbkRpc3Bvc2UoKCkgPT4ge1xuICAgICAgLy8gdGhlIGludGVyYWN0aW9uIGNvbnRleHQgY2FuIGJlIGRldGFjaGVkIGR1cmluZyB0aGUgYmFjayBidXR0b24gY2FuY2VsbGF0aW9uIHN0YXRlIHRyYW5zaXRpb25cbiAgICAgIC8vIGFzIHRoZSB0cmFuc2l0aW9uIGlzIHN5bmNocm9ub3VzIGFuZCBhY3Rpdml0eUNhbmNlbGxhdGlvbiBpc24ndC4gIE90aGVyd2lzZSBkaXNwb3NlIHdpbGwgYmVcbiAgICAgIC8vIGNhbGxlZCBiZWZvcmUgdGhlIGNvbnRleHQgaGFzIGJlZW4gY2FuY2VsbGVkLiAgSXQgbWlnaHQgYmUgd29yayBoYXZpbmcgdGhlIGludGVyYWN0aW9uIGNvbnRleHRcbiAgICAgIC8vIGF1dG9tYXRpY2FsbHkgY2FuY2VsIGlmIHRoZSBjb250ZXh0IGlzIGRpc3Bvc2VkIHNvIHdlIGRvbid0IGhhdmUgd29ycnkgYWJvdXQgZGV0YWNoaW5nIGV0Yy5cbiAgICAgIGlmICh0aGlzLl9pbnRlcmFjdGlvbkNvbnRleHQpIHtcbiAgICAgICAgdGhpcy5faW50ZXJhY3Rpb25Db250ZXh0LmRpc3Bvc2UoKTsgLy8gb3IgZG8gc29tZXRoaW5nIGxpa2UgY2FuY2VsQW5kRGlzcG9zZT9cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGdldCBpc0ludGVyYWN0aW9uU3luYygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogSW50ZXJydXB0aWJsZSBzZXNzaW9ucyBhcmUgaW50ZXJuYWwgaG91c2VrZWVwaW5nIG5hdmlnYXRpb25zIChlLmcuIGludGVyYWN0aW9uLWlkXG4gICAqIHN5bmNocm9uaXNhdGlvbikuIEhpc3RvcmljYWxseSBvbmx5IHRoZXNlIHF1ZXVlZCBhbiBvdmVybGFwcGluZyBuYXZpZ2F0aW9uIHdoaWxlIHJlYWxcbiAgICogbmF2aWdhdGlvbnMgZHJvcHBlZCBpdDsgQUxMIG92ZXJsYXBwaW5nIG5hdmlnYXRpb25zIG5vdyBxdWV1ZSAoc2VlXG4gICAqIFBsYWNlUm91dGVyLmhhbmRsZU92ZXJsYXBwaW5nTmF2aWdhdGlvbiksIHNvIHRoaXMgZmxhZyBpcyBkaWFnbm9zdGljIG9ubHkuXG4gICAqL1xuICBnZXQgaXNJbnRlcnJ1cHRpYmxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzSW50ZXJhY3Rpb25TeW5jO1xuICB9XG5cbiAgZ2V0IG5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci5uYW1lO1xuICB9XG5cbiAgZ2V0IHVybFNlcnZpY2UoKTogVXJsU2VydmljZSB7XG4gICAgcmV0dXJuIHRoaXMuY29udGV4dC51cmxTZXJ2aWNlO1xuICB9XG5cbiAgZ2V0IGludGVyYWN0aW9uU2VydmljZUFkYXB0ZXIoKTogSW50ZXJhY3Rpb25TZXJ2aWNlUm91dGluZ0FkYXB0ZXIge1xuICAgIHJldHVybiB0aGlzLmNvbnRleHQucm91dGVySW50ZXJhY3Rpb25BZGFwdGVyO1xuICB9XG5cbiAgaW5pdGlhbGlzZVZpc2l0U2VnbWVudHModmlzaXQ6IFZpc2l0KSB7XG4gICAgdmlzaXQuc2VnbWVudHMuZm9yRWFjaChpdCA9PiB0aGlzLnVwZGF0ZVZpc2l0U2VnbWVudChpdCkpXG4gIH1cblxuICB1cGRhdGVWaXNpdFNlZ21lbnQoc2VnbWVudDogVmlzaXRTZWdtZW50KSB7XG4gICAgLy8gY29uc29sZS5sb2coYHVwZGF0ZVZpc2l0U2VnbWVudGAsIHNlZ21lbnQudG9EZWJ1Z1N0cmluZygpKTtcbiAgICB0aGlzLl92aXNpdFNlZ21lbnRzLnNldChzZWdtZW50LnBsYWNlRGVmaW5pdGlvbiwgc2VnbWVudCk7XG4gIH1cblxuXG4gIGdldFZpc2l0U2VnbWVudEZvcihwbGFjZURlZjogUGxhY2VEZWZpbml0aW9uKSB7XG4gICAgY29uc3QgdmlzaXQgPSB0aGlzLl92aXNpdFNlZ21lbnRzLmdldChwbGFjZURlZik7XG4gICAgLy8gY29uc29sZS5sb2coYEdldHRpbmcgdmlzaXQgZm9yICR7cGxhY2VEZWYuY29tcG9uZW50Lm5hbWV9YCwge3Zpc2l0fSk7XG4gICAgcmV0dXJuIHZpc2l0O1xuICB9XG5cbiAgY3JlYXRlVXBkYXRlZFZpc2l0KHVybDogc3RyaW5nKSA6VmlzaXQge1xuICAgIC8vIFRoZSB2aXNpdCBzZWdtZW50cyBjYW4gaGF2ZSBhcmJpcmFyeSBwbGFjZXMgaW4gdGhlbSBhZnRlciByZWRpcmVjdHNcbiAgICAvLyBzbyB3ZSBoYXZlIHRvIGZpbHRlciB0aGVtIGJhc2VkIG9uIHRoZSBmaW5hbCB1cmwuXG4gICAgY29uc3Qgc25hcHNob3QgPSB0aGlzLnVybFNlcnZpY2UucGFyc2VVcmwodXJsKTtcbiAgICBjb25zdCBmaWx0ZXJlZFNlZ21lbnRzID0gQXJyYXkuZnJvbSh0aGlzLl92aXNpdFNlZ21lbnRzLnZhbHVlcygpKVxuICAgICAgLmZpbHRlcihpdCA9PiBzbmFwc2hvdC5jb250YWluc1Zpc2l0U2VnbWVudChpdCkpO1xuICAgIHJldHVybiBWaXNpdC5mcm9tU2VnbWVudHMoZmlsdGVyZWRTZWdtZW50cyk7XG4gIH1cblxuICBnZXQgY2FuRGVhY3RpdmF0ZUludGVyYWN0aW9uQ29udGV4dCgpOiBJbnRlcmFjdGlvbkNvbnRleHQge1xuICAgIHJldHVybiB0aGlzLl9pbnRlcmFjdGlvbkNvbnRleHQ7XG4gIH1cblxuICBub3RpZnlBY3RpdmUoKSB7XG4gICAgLy8gbm9vcC5cbiAgfVxuXG4gIG9uUm91dGVyU3RhcnRlZChldmVudDogTmF2aWdhdGlvblN0YXJ0KTogdm9pZCB7XG4gICAgLy8gbmF2aWdhdGlvbiBzZXNzaW9ucyBjYW4gaGF2ZSBtYW55IGNhbmNlbCBzdGFydCBjeWNsZXMgZHVlIHRvIHBsYWNlIGd1YXJkIHJlZGlyZWN0c1xuICAgIHRoaXMuaWdub3JlKGV2ZW50KTtcbiAgfVxuXG4gIC8vIEBUcmFjZSgpXG4gIG9uVXJsQ2hhbmdlKHVybDogc3RyaW5nKSB7XG4gICAgLy8gTm9ybWFsbHkgd2UganVzdCBpZ25vcmUgdGhlc2UgYnV0IHRoZXkgYXJlIHRoZSBvbmx5IHdheSBvZiBkZXRlY3RpbmcgaWYgdGhlIGJhY2sgYnV0dG9uXG4gICAgLy8gd2FzIGNsaWNrZWQgZHVyaW5nIGEgY2FuRGVhY3RpdmF0ZSBwcm9taXNlLlxuICAgIC8vIDEuIGEgcm91dGUgaXMgaW4gcHJvZ3Jlc3MgYW5kIGF3YWl0aW5nIGEgY2FuRGVhY3RpdmF0ZUd1YXJkXG4gICAgLy8gMi4gdGhlIHVzZXIgdGhlIGNsaWNrcyB0aGUgYmFjayBidXR0b24uXG4gICAgLy8gU28gdG8gaGFuZGxlIHRoYXQgc2NlbmFyaW8gd2UgbmVlZCB0byBjaGVjayBpZiB3ZSd2ZSBnb3QgYSBjYW4gZGVhY3RpdmF0ZSBpbnRlcmFjdGlvbiBpblxuICAgIC8vIHByb2dyZXNzIGFuZCB0aGUgZG8gdGhlIGFwcHJvcHJpYXRlIGNsZWFuIHVwLlxuICAgIGlmICh0aGlzLmNhbkRlYWN0aXZhdGVJbnRlcmFjdGlvbkNvbnRleHQgJiYgdGhpcy5jYW5EZWFjdGl2YXRlSW50ZXJhY3Rpb25Db250ZXh0LmlzQWN0aXZlKCkpIHtcbiAgICAgIHRoaXMuY2FuY2VsQ2FuRGVhY3RpdmF0ZUludGVyYWN0aW9uKHVybCk7XG4gICAgfVxuICB9XG5cbiAgb25Qb3BTdGF0ZShldmVudDogTmF2aWdhdGlvblN0YXJ0KTogdm9pZCB7XG4gICAgcmV0dXJuIHRoaXMuaWxsZWdhbFRyYW5zaXRpb24oZXZlbnQpO1xuICB9XG5cbiAgb25Sb3V0ZXJDYW5jZWxsZWQoZXZlbnQ6IE5hdmlnYXRpb25DYW5jZWwpOiB2b2lkIHtcbiAgICByZXR1cm4gdGhpcy5pbGxlZ2FsVHJhbnNpdGlvbihldmVudCk7XG4gIH1cblxuICBvblJvdXRlckVycm9yKGV2ZW50OiBOYXZpZ2F0aW9uRXJyb3IpOiB2b2lkIHtcbiAgICByZXR1cm4gdGhpcy5pbGxlZ2FsVHJhbnNpdGlvbihldmVudCk7XG4gIH1cblxuICBvblJvdXRlckVuZChldmVudDogTmF2aWdhdGlvbkVuZCk6IHZvaWQge1xuICAgIHJldHVybiB0aGlzLmlsbGVnYWxUcmFuc2l0aW9uKGV2ZW50KTtcbiAgfVxuXG4gIGdldFZpc2l0U2VnbWVudHMoKTogVmlzaXRTZWdtZW50W10ge1xuICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXMuX3Zpc2l0U2VnbWVudHMudmFsdWVzKCkpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGlsbGVnYWxUcmFuc2l0aW9uPFI+KG1lc3NhZ2U6IHN0cmluZyB8IFJvdXRlckV2ZW50KTogUiB7XG4gICAgcmV0dXJuIGxhbmcuaWxsZWdhbFN0YXRlKGAke21lc3NhZ2UudG9TdHJpbmcoKX0gbm90IHN1cHBvcnRlZCBieSAke3RoaXMudG9TdHJpbmcoKX1gKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjdXJyZW50Um91dGVyVXJsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMudXJsU2VydmljZS5nZXRDdXJyZW50Um91dGVyVXJsKCk7XG4gIH1cblxuICByZXNldEJyb3dzZXJMb2NhdGlvbih1cmwsIG9wdGlvbnM6IHsgcmVwbGFjZUN1cnJlbnQ6IGJvb2xlYW4gfSA9IHsgcmVwbGFjZUN1cnJlbnQ6IGZhbHNlIH0pIHtcbiAgICAvLyBjb25zb2xlLmxvZyhgLS0tPiByZXNldHRpbmcgYnJvd3NlciBsb2NhdGlvbiB0bzogJHt1cmx9YCk7XG4gICAgdGhpcy51cmxTZXJ2aWNlLnJlc2V0QnJvd3NlckxvY2F0aW9uKHVybCwgb3B0aW9ucyk7XG4gIH1cblxuICAvLyBAVHJhY2UoKVxuICBwcm90ZWN0ZWQgcmVwYWlyQnJvd3Nlckhpc3RvcnlBbmRVcmxBZnRlckd1YXJkQ2FuY2VsbGF0aW9uKHBvcHBlZEhpc3RvcnlUb1JlcGxhY2U6IHN0cmluZywgYWN0aXZlVXJsOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAvLyBJbXBvcnRhbnQ6IEkgdHJpZWQgdG8gcGVyZm9ybSB0aGlzIGZpeCBhdCBhIGxhdGVyIHBvaW50IGludCBoZSByb3V0aW5nIGN5Y2xlIGJ1dCBpdCBjcmVhdGVkIGFsbCBraW5kcyBvZlxuICAgIC8vIHN0cmFuZ2VuZXNzLlxuICAgIExvZ2dlci5nZXQodGhpcykuaW5mbyhcIldPUkstQVJPVU5EOiBVcGRhdGluZyBicm93c2VyIGxvY2F0aW9uIGFmdGVyIHBvcCBzdGF0ZSAtIHNlZSBhbmd1bGFyIGlzc3VlICMxMzU4NlwiKTtcbiAgICAvLyBjb25zb2xlLmxvZyhgcmVwbGFjaW5nICR7dGhpcy51cmxTZXJ2aWNlLmdldEN1cnJlbnRMb2NhdGlvblVybFNuYXBzaG90KCkudXJsfSB3aXRoICR7cG9wcGVkSGlzdG9yeVRvUmVwbGFjZX1gKTtcbiAgICB0aGlzLnVybFNlcnZpY2UucmVzZXRCcm93c2VyTG9jYXRpb24ocG9wcGVkSGlzdG9yeVRvUmVwbGFjZSwgeyByZXBsYWNlQ3VycmVudDogdHJ1ZSB9KTtcbiAgICAvLyBjb25zb2xlLmxvZyhgcHVzaGluZyAke2FjdGl2ZVVybH0gYmFjayBvbnRvIHRoZSBoaXN0b3J5LmApO1xuICAgIHRoaXMudXJsU2VydmljZS5yZXNldEJyb3dzZXJMb2NhdGlvbihhY3RpdmVVcmwsIHsgcmVwbGFjZUN1cnJlbnQ6IGZhbHNlIH0pO1xuICB9XG5cblxuICBpZ25vcmUoZXZlbnQ6IFJvdXRlckV2ZW50LCByZWFzb24/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICByZWFzb24gPSByZWFzb24gPyBgIC0+ICR7cmVhc29ufWAgOiBcIlwiO1xuICAgIC8vIExvZ2dlci5nZXQodGhpcykuaW5mbyhgSWdub3Jpbmcgcm91dGVyIGV2ZW50JHtyZWFzb259OiAke2V2ZW50LmNvbnN0cnVjdG9yLm5hbWV9IC0+ICR7ZXZlbnQudXJsfSA6OiAke3RoaXMudG9TdHJpbmcoKX1gKTtcbiAgfVxuXG4gIG92ZXJyaWRlIHRvU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke3RoaXMuY29uc3RydWN0b3IubmFtZX0oJHt0aGlzLmRlYnVnU3RhdGUoKX0pYDtcbiAgfVxuXG4gIHByb3RlY3RlZCBkZWJ1Z1N0YXRlKHByb3BlcnRpZXM/OiBzdHJpbmdbXSkge1xuICAgIHJldHVybiAocHJvcGVydGllcyB8fCB0aGlzLmRlYnVnUHJvcGVydHlLZXlzKS5tYXAocCA9PiB7XG4gICAgICByZXR1cm4gYCR7cH06ICR7dGhpc1twXX1gO1xuICAgIH0pLmpvaW4oXCIsIFwiKTtcbiAgfVxuXG4gIGFzeW5jIGNhbkRlYWN0aXZhdGVQbGFjZShjb21wb25lbnQ6IFBsYWNlQ29tcG9uZW50LCBjdXJyZW50VXJsOiBVcmxTbmFwc2hvdCwgbmV4dFVybDogVXJsU25hcHNob3QpOiBQcm9taXNlPGJvb2xlYW4gfCBVcmxTbmFwc2hvdD4ge1xuICAgIC8vIGNvbnNvbGUubG9nKGAtLS0+IGNhbkRlYWN0aXZhdGVQbGFjZSgke2NvbXBvbmVudC5wbGFjZURlZmluaXRpb24ucGF0aH0sICR7Y3VycmVudFVybC51cmx9IC0+ICR7bmV4dFVybC51cmx9KWApO1xuICAgIC8vIGxvb2t1cCB0aGUgaGFuZGxlciBhbmQgY3JlYXRlIGl0IGlmIHdlJ3ZlIG5vdCBzZWVuIGl0IHlldFxuICAgIGxldCBoYW5kbGVyID0gdGhpcy5jb21wb25lbnREZWFjdGl2YXRpb25IYW5kbGVycy5nZXQoY29tcG9uZW50KTtcbiAgICBpZiAoIWhhbmRsZXIpIHtcbiAgICAgIGNvbnN0IGlzUHJpbWFyeUhhbmRsZXIgPSB0aGlzLmNvbXBvbmVudERlYWN0aXZhdGlvbkhhbmRsZXJzLnNpemUgPT09IDA7IC8vIG9ubHkgcHJpbWFyeSBoYW5kbGVyIGNhbmNlbHMgdGhlIGFwcCBtb2RlbCBpbnRlcmF0aW9uc1xuICAgICAgaGFuZGxlciA9IG5ldyBQbGFjZUNvbXBvbmVudERlYWN0aXZhdGlvbkhhbmRsZXIoY29tcG9uZW50LCB0aGlzLCBpc1ByaW1hcnlIYW5kbGVyKTtcbiAgICAgIHRoaXMuY29tcG9uZW50RGVhY3RpdmF0aW9uSGFuZGxlcnMuc2V0KGNvbXBvbmVudCwgaGFuZGxlcik7XG4gICAgfVxuICAgIHJldHVybiBoYW5kbGVyLmNhbkRlYWN0aXZhdGUoY3VycmVudFVybCwgbmV4dFVybCkudGhlbihyZXN1bHQgPT4ge1xuICAgICAgLy8gY29uc29sZS5sb2coYDwtLS0gY2FuRGVhY3RpdmF0ZVBsYWNlKCR7Y29tcG9uZW50LnBsYWNlRGVmaW5pdGlvbi5wYXRofSk6ICR7cmVzdWx0fWApO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9KS5jYXRjaChlcnJvciA9PiB7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9KTtcbiAgfVxuXG4gIGNhbmNlbENhbkRlYWN0aXZhdGVJbnRlcmFjdGlvbihuZXdVcmw6IHN0cmluZyk6IHZvaWQge1xuICAgIExvZ2dlci5nZXQodGhpcykuaW5mbyhgYmFjayBidXR0b24gcHJlc3NlZCBkdXJpbmcgbmF2aWdhdGlvbiBzZXNzaW9uIGludGVyYWN0aW9uIHByb21pc2VgKTtcbiAgICAvLyBkZXRhY2ggdGhlIGludGVyYWN0aW9uIGZyb20gdGhlIHNlc3Npb24gc28gaXQgZG9lc24ndCBnZXQgZGlzcG9zZWQgdW50aWwgdGhlIGFjdGl2aXR5IGhhcyBmaW5pc2hlZFxuICAgIC8vIGFsbCBpdCdzIHRoaW5ncy5cbiAgICBjb25zdCBjYW5EZWFjdGl2YXRlSW50ZXJhY3Rpb25Db250ZXh0ID0gdGhpcy5kZXRhY2hDYW5EZWFjdGl2YXRlSW50ZXJhY3Rpb25Db250ZXh0KCk7XG4gICAgLy8gVE9ETzogSSBuZWVkIHRvIG1ha2UgdGhlIGV4Y2x1c2l2ZSBpbnRlcmFjdGlvbiBjb250ZXh0IGRpc2FsbG93IG5lc3RlZCBhY3Rpdml0aWVzIG9yXG4gICAgLy8gICAgICAgdGhhdCB3b3VsZCBtZXNzIHRoaW5ncyB1cCBlbnRpcmVseS4gT3IsIGNhbiBJIGRvIGEgY29udGV4dC5hYm9ydEFsbCgpLnRoZW4oLi4pXG4gICAgTG9nZ2VyLmdldCh0aGlzKS5pbmZvKFwiY2FuY2VsbGluZyBjdXJyZW50IG5hdmlnYXRpb24gYWN0aXZpdHkuLlwiKTtcbiAgICBjYW5EZWFjdGl2YXRlSW50ZXJhY3Rpb25Db250ZXh0LmNhbmNlbEFjdGl2ZUFjdGl2aXR5KCkudGhlbigoKSA9PiB7XG4gICAgICBjYW5EZWFjdGl2YXRlSW50ZXJhY3Rpb25Db250ZXh0LmRpc3Bvc2UoKTtcbiAgICB9KTtcblxuICAgIHRoaXMuaGFuZGxlQ2FuRGVhY3RpdmF0ZUNhbmNlbGxlZEV2ZW50U2NlbmFyaW8obmV3VXJsKTtcbiAgfVxuXG4gIGFic3RyYWN0IGhhbmRsZUNhbkRlYWN0aXZhdGVDYW5jZWxsZWRFdmVudFNjZW5hcmlvKG5ld1VybDogc3RyaW5nKTogdm9pZFxuXG4gIHByb3RlY3RlZCByZWluc3RhdGVVcmxBZnRlckFuZ3VsYXJDaGFuZ2VkSXRPbkNhbmNlbGxhdGlvbih1cmw6IHN0cmluZykge1xuICAgIC8vIEFuZ3VsYXIgY2FsbHMgX3RoaXMucmVzZXRVcmxUb0N1cnJlbnRVcmxUcmVlKCkgb24gY2FuY2VsbGluZyBhbmQgZnVja3Mgb3VyIGhpc3RvcnkuXG4gICAgLy8gU28gdGhpcyBtZWFucyB0aGF0IHRoZSB0b3Agb2YgdGhlIHN0YWNrIGlzIHRoZSB1cmwgd2Ugd2FudCB0byBnbyBiYWNrIHRvLCBhbmQgbm90IHRoZSBvbmUgdGhhdCB3YXMgb25cbiAgICAvLyBpdCBiZWZvcmUgdGhlIGNhbmNlbCBldmVudCBmaXJlZC5cbiAgICAvLyBTbyB3ZSBuZWVkIHRvOlxuICAgIC8vIC0gcmVwbGFjZSB0aGUganVzdCBpbnNlcnRlZCB1cmwgd2l0aCB0aGUgb25lIHRoYXQgdXNlZCB0byBiZSB0aGVyZS5cbiAgICAvLyAtIHB1c2ggb3VyIGFjdHVhbCB1cmwgYmFjayBvbnRvIHRoZSB0b3Agb2YgdGhlIHN0YWNrLlxuICAgIHRoaXMucmVzZXRCcm93c2VyTG9jYXRpb24odXJsLCB7IHJlcGxhY2VDdXJyZW50OiB0cnVlIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGRldGFjaENhbkRlYWN0aXZhdGVJbnRlcmFjdGlvbkNvbnRleHQoKTogSW50ZXJhY3Rpb25Db250ZXh0IHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5faW50ZXJhY3Rpb25Db250ZXh0O1xuICAgIHRoaXMuX2ludGVyYWN0aW9uQ29udGV4dCA9IG51bGw7XG4gICAgcmV0dXJuIGNvbnRleHQ7XG4gIH1cbn1cbiJdfQ==
|
|
193
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2aWdhdGlvbi1zZXNzaW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLXVpLXBvd2VydXBzL3NyYy9saWIvcGxhY2UvbmF2aWdhdGlvbi9zZXNzaW9uL25hdmlnYXRpb24tc2Vzc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUMsZ0JBQWdCLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBTzlELE9BQU8sRUFBQyxLQUFLLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFFbEMsT0FBTyxFQUFDLGlDQUFpQyxFQUFDLE1BQU0seUNBQXlDLENBQUM7QUFHMUY7O0dBRUc7QUFDSCxNQUFNLE9BQWdCLGlCQUFrQixTQUFRLGdCQUFnQjtJQVd6QztJQUFxQztJQVQxRCxpQkFBaUIsR0FBYSxFQUFFLENBQUM7SUFDekIsY0FBYyxHQUFHLElBQUksR0FBRyxFQUFpQyxDQUFDO0lBRTFELDZCQUE2QixHQUFHLElBQUksR0FBRyxFQUFxRCxDQUFDO0lBSTdGLG1CQUFtQixDQUFxQjtJQUVoRCxZQUFxQixPQUEwQixFQUFXLFdBQW1CO1FBQzNFLEtBQUssRUFBRSxDQUFDO1FBRFcsWUFBTyxHQUFQLE9BQU8sQ0FBbUI7UUFBVyxnQkFBVyxHQUFYLFdBQVcsQ0FBUTtRQUUzRSw4Q0FBOEM7UUFDOUMsd0RBQXdEO1FBQ3hELElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLHdCQUF3QixDQUFDLHlDQUF5QyxFQUFFLENBQUM7UUFDN0csSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDbEIsK0ZBQStGO1lBQy9GLDhGQUE4RjtZQUM5RixpR0FBaUc7WUFDakcsOEZBQThGO1lBQzlGLElBQUksSUFBSSxDQUFDLG1CQUFtQixFQUFFO2dCQUM1QixJQUFJLENBQUMsbUJBQW1CLENBQUMsT0FBTyxFQUFFLENB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QjtRQUNqQixzRUFBc0U7UUFDdEUsd0RBQXdEO1FBQ3hELElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLEVBQUUsRUFBRSxjQUFjLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUMzRCxDQUFDO0lBRVMscUNBQXFDO1FBQzdDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQztRQUN6QyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDO1FBQ2hDLE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7TmF2aWdhdGlvbkNhbmNlbCwgTmF2aWdhdGlvbkVuZCwgTmF2aWdhdGlvbkVycm9yLCBOYXZpZ2F0aW9uU3RhcnQsIFJvdXRlckV2ZW50fSBmcm9tIFwiQGFuZ3VsYXIvcm91dGVyXCI7XG5pbXBvcnQge0dhcmJhZ2VDb2xsZWN0b3IsIGxhbmcsIExvZ2dlcn0gZnJvbSBcIkBjb29sb24vcGVjdGluXCI7XG5pbXBvcnQgdHlwZSB7SW50ZXJhY3Rpb25Db250ZXh0fSBmcm9tIFwiLi4vLi4vLi4vaW50ZXJhY3Rpb24vaW50ZXJhY3Rpb24tY29udGV4dFwiO1xuaW1wb3J0IHR5cGUge0ludGVyYWN0aW9uU2VydmljZVJvdXRpbmdBZGFwdGVyfSBmcm9tIFwiLi4vLi4vLi4vaW50ZXJhY3Rpb24vc2VydmljZXMvaW50ZXJhY3Rpb24tc2VydmljZS1yb3V0aW5nLWFkYXB0ZXJcIjtcbmltcG9ydCB0eXBlIHtQbGFjZUNvbXBvbmVudH0gZnJvbSBcIi4uLy4uL3BsYWNlLWNvbXBvbmVudFwiO1xuaW1wb3J0IHR5cGUge1BsYWNlRGVmaW5pdGlvbn0gZnJvbSBcIi4uLy4uL3BsYWNlLWRlZmluaXRpb25cIjtcbmltcG9ydCB0eXBlIHtVcmxTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vdXJsLXNlcnZpY2VcIjtcbmltcG9ydCB0eXBlIHtVcmxTbmFwc2hvdH0gZnJvbSBcIi4uLy4uL3VybC1zbmFwc2hvdFwiO1xuaW1wb3J0IHtWaXNpdH0gZnJvbSBcIi4uLy4uL3Zpc2l0XCI7XG5pbXBvcnQgdHlwZSB7VmlzaXRTZWdtZW50fSBmcm9tIFwiLi4vLi4vdmlzaXQtc2VnbWVudFwiO1xuaW1wb3J0IHtQbGFjZUNvbXBvbmVudERlYWN0aXZhdGlvbkhhbmRsZXJ9IGZyb20gXCIuLi9wbGFjZS1jb21wb25lbnQtZGVhY3RpdmF0aW9uLWhhbmRsZXJcIjtcbmltcG9ydCB0eXBlIHtOYXZpZ2F0aW9uQ29udGV4dH0gZnJvbSBcIi4vbmF2aWdhdGlvbi1jb250ZXh0XCI7XG5cbi8qKlxuICogVHJhbnNpZW50IHN0YXRlc1xuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgTmF2aWdhdGlvblNlc3Npb24gZXh0ZW5kcyBHYXJiYWdlQ29sbGVjdG9yIHtcblxuICBkZWJ1Z1Byb3BlcnR5S2V5czogc3RyaW5nW10gPSBbXTtcbiAgcHJpdmF0ZSBfdmlzaXRTZWdtZW50cyA9IG5ldyBNYXA8UGxhY2VEZWZpbml0aW9uLCBWaXNpdFNlZ21lbnQ+KCk7XG5cbiAgcHJpdmF0ZSBjb21wb25lbnREZWFjdGl2YXRpb25IYW5kbGVycyA9IG5ldyBNYXA8UGxhY2VDb21wb25lbnQsIFBsYWNlQ29tcG9uZW50RGVhY3RpdmF0aW9uSGFuZGxlcj4oKTtcbiAgYWJzdHJhY3QgcmVhZG9ubHkgaXNQb3BTdGF0ZTogYm9vbGVhbjtcblxuXG4gIHByaXZhdGUgX2ludGVyYWN0aW9uQ29udGV4dDogSW50ZXJhY3Rpb25Db250ZXh0O1xuXG4gIGNvbnN0cnVjdG9yKHJlYWRvbmx5IGNvbnRleHQ6IE5hdmlnYXRpb25Db250ZXh0LCByZWFkb25seSBzdGFydGluZ1VybDogc3RyaW5nKSB7XG4gICAgc3VwZXIoKTtcbiAgICAvLyBjb25zb2xlLmxvZyhgbmV3ICR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfWApXG4gICAgLy8gVE9ETzogY2FuIEkgZ2V0IGF3YXkgd2l0aG91dCBjcmVhdGluZyBvbmUgZXZlcnkgdGltZT9cbiAgICB0aGlzLl9pbnRlcmFjdGlvbkNvbnRleHQgPSB0aGlzLmNvbnRleHQucm91dGVySW50ZXJhY3Rpb25BZGFwdGVyLmNyZWF0ZU5hdmlnYXRpb25TZXNzaW9uSW50ZXJhY3Rpb25Db250ZXh0KCk7XG4gICAgdGhpcy5vbkRpc3Bvc2UoKCkgPT4ge1xuICAgICAgLy8gdGhlIGludGVyYWN0aW9uIGNvbnRleHQgY2FuIGJlIGRldGFjaGVkIGR1cmluZyB0aGUgYmFjayBidXR0b24gY2FuY2VsbGF0aW9uIHN0YXRlIHRyYW5zaXRpb25cbiAgICAgIC8vIGFzIHRoZSB0cmFuc2l0aW9uIGlzIHN5bmNocm9ub3VzIGFuZCBhY3Rpdml0eUNhbmNlbGxhdGlvbiBpc24ndC4gIE90aGVyd2lzZSBkaXNwb3NlIHdpbGwgYmVcbiAgICAgIC8vIGNhbGxlZCBiZWZvcmUgdGhlIGNvbnRleHQgaGFzIGJlZW4gY2FuY2VsbGVkLiAgSXQgbWlnaHQgYmUgd29yayBoYXZpbmcgdGhlIGludGVyYWN0aW9uIGNvbnRleHRcbiAgICAgIC8vIGF1dG9tYXRpY2FsbHkgY2FuY2VsIGlmIHRoZSBjb250ZXh0IGlzIGRpc3Bvc2VkIHNvIHdlIGRvbid0IGhhdmUgd29ycnkgYWJvdXQgZGV0YWNoaW5nIGV0Yy5cbiAgICAgIGlmICh0aGlzLl9pbnRlcmFjdGlvbkNvbnRleHQpIHtcbiAgICAgICAgdGhpcy5faW50ZXJhY3Rpb25Db250ZXh0LmRpc3Bvc2UoKTsgLy8gb3IgZG8gc29tZXRoaW5nIGxpa2UgY2FuY2VsQW5kRGlzcG9zZT9cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGdldCBpc0ludGVyYWN0aW9uU3luYygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogSW50ZXJydXB0aWJsZSBzZXNzaW9ucyBhcmUgaW50ZXJuYWwgaG91c2VrZWVwaW5nIG5hdmlnYXRpb25zIChlLmcuIGludGVyYWN0aW9uLWlkXG4gICAqIHN5bmNocm9uaXNhdGlvbikuIEhpc3RvcmljYWxseSBvbmx5IHRoZXNlIHF1ZXVlZCBhbiBvdmVybGFwcGluZyBuYXZpZ2F0aW9uIHdoaWxlIHJlYWxcbiAgICogbmF2aWdhdGlvbnMgZHJvcHBlZCBpdDsgQUxMIG92ZXJsYXBwaW5nIG5hdmlnYXRpb25zIG5vdyBxdWV1ZSAoc2VlXG4gICAqIFBsYWNlUm91dGVyLmhhbmRsZU92ZXJsYXBwaW5nTmF2aWdhdGlvbiksIHNvIHRoaXMgZmxhZyBpcyBkaWFnbm9zdGljIG9ubHkuXG4gICAqL1xuICBnZXQgaXNJbnRlcnJ1cHRpYmxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzSW50ZXJhY3Rpb25TeW5jO1xuICB9XG5cbiAgZ2V0IG5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci5uYW1lO1xuICB9XG5cbiAgZ2V0IHVybFNlcnZpY2UoKTogVXJsU2VydmljZSB7XG4gICAgcmV0dXJuIHRoaXMuY29udGV4dC51cmxTZXJ2aWNlO1xuICB9XG5cbiAgZ2V0IGludGVyYWN0aW9uU2VydmljZUFkYXB0ZXIoKTogSW50ZXJhY3Rpb25TZXJ2aWNlUm91dGluZ0FkYXB0ZXIge1xuICAgIHJldHVybiB0aGlzLmNvbnRleHQucm91dGVySW50ZXJhY3Rpb25BZGFwdGVyO1xuICB9XG5cbiAgaW5pdGlhbGlzZVZpc2l0U2VnbWVudHModmlzaXQ6IFZpc2l0KSB7XG4gICAgdmlzaXQuc2VnbWVudHMuZm9yRWFjaChpdCA9PiB0aGlzLnVwZGF0ZVZpc2l0U2VnbWVudChpdCkpXG4gIH1cblxuICB1cGRhdGVWaXNpdFNlZ21lbnQoc2VnbWVudDogVmlzaXRTZWdtZW50KSB7XG4gICAgLy8gY29uc29sZS5sb2coYHVwZGF0ZVZpc2l0U2VnbWVudGAsIHNlZ21lbnQudG9EZWJ1Z1N0cmluZygpKTtcbiAgICB0aGlzLl92aXNpdFNlZ21lbnRzLnNldChzZWdtZW50LnBsYWNlRGVmaW5pdGlvbiwgc2VnbWVudCk7XG4gIH1cblxuXG4gIGdldFZpc2l0U2VnbWVudEZvcihwbGFjZURlZjogUGxhY2VEZWZpbml0aW9uKSB7XG4gICAgY29uc3QgdmlzaXQgPSB0aGlzLl92aXNpdFNlZ21lbnRzLmdldChwbGFjZURlZik7XG4gICAgLy8gY29uc29sZS5sb2coYEdldHRpbmcgdmlzaXQgZm9yICR7cGxhY2VEZWYuY29tcG9uZW50Lm5hbWV9YCwge3Zpc2l0fSk7XG4gICAgcmV0dXJuIHZpc2l0O1xuICB9XG5cbiAgY3JlYXRlVXBkYXRlZFZpc2l0KHVybDogc3RyaW5nKSA6VmlzaXQge1xuICAgIC8vIFRoZSB2aXNpdCBzZWdtZW50cyBjYW4gaGF2ZSBhcmJpcmFyeSBwbGFjZXMgaW4gdGhlbSBhZnRlciByZWRpcmVjdHNcbiAgICAvLyBzbyB3ZSBoYXZlIHRvIGZpbHRlciB0aGVtIGJhc2VkIG9uIHRoZSBmaW5hbCB1cmwuXG4gICAgY29uc3Qgc25hcHNob3QgPSB0aGlzLnVybFNlcnZpY2UucGFyc2VVcmwodXJsKTtcbiAgICBjb25zdCBmaWx0ZXJlZFNlZ21lbnRzID0gQXJyYXkuZnJvbSh0aGlzLl92aXNpdFNlZ21lbnRzLnZhbHVlcygpKVxuICAgICAgLmZpbHRlcihpdCA9PiBzbmFwc2hvdC5jb250YWluc1Zpc2l0U2VnbWVudChpdCkpO1xuICAgIGNvbnN0IHZpc2l0ID0gVmlzaXQuZnJvbVNlZ21lbnRzKGZpbHRlcmVkU2VnbWVudHMpO1xuICAgIC8vIEFuZ3VsYXIgb25seSBydW5zIGd1YXJkcyBmb3Igcm91dGVzIHdob3NlIHBhcmFtZXRlcnMgY2hhbmdlZCwgc28gYSBwbGFjZSB0aGF0IHN0YXlzIGFjdGl2ZVxuICAgIC8vIChlLmcuIHRoZSBwYXJlbnQgd2hlbiBCYWNrIG9ubHkgY2hhbmdlcyB0aGUgY2hpbGQpIG5ldmVyIHJlYWNoZXMgdGhpcyBzZXNzaW9uLiBLZWVwIGl0c1xuICAgIC8vIHNlZ21lbnQgZnJvbSB0aGUgYWN0aXZlIHZpc2l0LCBvdGhlcndpc2UgVmlzaXQgZmlsbHMgaXQgaW4gd2l0aCBlbXB0eSBwYXJhbWV0ZXJzLlxuICAgIGNvbnN0IGFjdGl2ZVZpc2l0ID0gdGhpcy5jb250ZXh0LmFjdGl2ZVZpc2l0O1xuICAgIGNvbnN0IHNlZ21lbnRzID0gdmlzaXQuc2VnbWVudHMubWFwKHNlZ21lbnQgPT4gdGhpcy5fdmlzaXRTZWdtZW50cy5oYXMoc2VnbWVudC5wbGFjZURlZmluaXRpb24pXG4gICAgICA/IHNlZ21lbnRcbiAgICAgIDogYWN0aXZlVmlzaXQ/LmdldFNlZ21lbnRGb3Ioc2VnbWVudC5wbGFjZURlZmluaXRpb24pID8/IHNlZ21lbnQpO1xuICAgIHJldHVybiBWaXNpdC5mcm9tU2VnbWVudHMoc2VnbWVudHMpO1xuICB9XG5cbiAgZ2V0IGNhbkRlYWN0aXZhdGVJbnRlcmFjdGlvbkNvbnRleHQoKTogSW50ZXJhY3Rpb25Db250ZXh0IHtcbiAgICByZXR1cm4gdGhpcy5faW50ZXJhY3Rpb25Db250ZXh0O1xuICB9XG5cbiAgbm90aWZ5QWN0aXZlKCkge1xuICAgIC8vIG5vb3AuXG4gIH1cblxuICBvblJvdXRlclN0YXJ0ZWQoZXZlbnQ6IE5hdmlnYXRpb25TdGFydCk6IHZvaWQge1xuICAgIC8vIG5hdmlnYXRpb24gc2Vzc2lvbnMgY2FuIGhhdmUgbWFueSBjYW5jZWwgc3RhcnQgY3ljbGVzIGR1ZSB0byBwbGFjZSBndWFyZCByZWRpcmVjdHNcbiAgICB0aGlzLmlnbm9yZShldmVudCk7XG4gIH1cblxuICAvLyBAVHJhY2UoKVxuICBvblVybENoYW5nZSh1cmw6IHN0cmluZykge1xuICAgIC8vIE5vcm1hbGx5IHdlIGp1c3QgaWdub3JlIHRoZXNlIGJ1dCB0aGV5IGFyZSB0aGUgb25seSB3YXkgb2YgZGV0ZWN0aW5nIGlmIHRoZSBiYWNrIGJ1dHRvblxuICAgIC8vIHdhcyBjbGlja2VkIGR1cmluZyBhIGNhbkRlYWN0aXZhdGUgcHJvbWlzZS5cbiAgICAvLyAxLiBhIHJvdXRlIGlzIGluIHByb2dyZXNzIGFuZCBhd2FpdGluZyBhIGNhbkRlYWN0aXZhdGVHdWFyZFxuICAgIC8vIDIuIHRoZSB1c2VyIHRoZSBjbGlja3MgdGhlIGJhY2sgYnV0dG9uLlxuICAgIC8vIFNvIHRvIGhhbmRsZSB0aGF0IHNjZW5hcmlvIHdlIG5lZWQgdG8gY2hlY2sgaWYgd2UndmUgZ290IGEgY2FuIGRlYWN0aXZhdGUgaW50ZXJhY3Rpb24gaW5cbiAgICAvLyBwcm9ncmVzcyBhbmQgdGhlIGRvIHRoZSBhcHByb3ByaWF0ZSBjbGVhbiB1cC5cbiAgICBpZiAodGhpcy5jYW5EZWFjdGl2YXRlSW50ZXJhY3Rpb25Db250ZXh0ICYmIHRoaXMuY2FuRGVhY3RpdmF0ZUludGVyYWN0aW9uQ29udGV4dC5pc0FjdGl2ZSgpKSB7XG4gICAgICB0aGlzLmNhbmNlbENhbkRlYWN0aXZhdGVJbnRlcmFjdGlvbih1cmwpO1xuICAgIH1cbiAgfVxuXG4gIG9uUG9wU3RhdGUoZXZlbnQ6IE5hdmlnYXRpb25TdGFydCk6IHZvaWQge1xuICAgIHJldHVybiB0aGlzLmlsbGVnYWxUcmFuc2l0aW9uKGV2ZW50KTtcbiAgfVxuXG4gIG9uUm91dGVyQ2FuY2VsbGVkKGV2ZW50OiBOYXZpZ2F0aW9uQ2FuY2VsKTogdm9pZCB7XG4gICAgcmV0dXJuIHRoaXMuaWxsZWdhbFRyYW5zaXRpb24oZXZlbnQpO1xuICB9XG5cbiAgb25Sb3V0ZXJFcnJvcihldmVudDogTmF2aWdhdGlvbkVycm9yKTogdm9pZCB7XG4gICAgcmV0dXJuIHRoaXMuaWxsZWdhbFRyYW5zaXRpb24oZXZlbnQpO1xuICB9XG5cbiAgb25Sb3V0ZXJFbmQoZXZlbnQ6IE5hdmlnYXRpb25FbmQpOiB2b2lkIHtcbiAgICByZXR1cm4gdGhpcy5pbGxlZ2FsVHJhbnNpdGlvbihldmVudCk7XG4gIH1cblxuICBnZXRWaXNpdFNlZ21lbnRzKCk6IFZpc2l0U2VnbWVudFtdIHtcbiAgICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLl92aXNpdFNlZ21lbnRzLnZhbHVlcygpKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBpbGxlZ2FsVHJhbnNpdGlvbjxSPihtZXNzYWdlOiBzdHJpbmcgfCBSb3V0ZXJFdmVudCk6IFIge1xuICAgIHJldHVybiBsYW5nLmlsbGVnYWxTdGF0ZShgJHttZXNzYWdlLnRvU3RyaW5nKCl9IG5vdCBzdXBwb3J0ZWQgYnkgJHt0aGlzLnRvU3RyaW5nKCl9YCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgY3VycmVudFJvdXRlclVybCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnVybFNlcnZpY2UuZ2V0Q3VycmVudFJvdXRlclVybCgpO1xuICB9XG5cbiAgcmVzZXRCcm93c2VyTG9jYXRpb24odXJsLCBvcHRpb25zOiB7IHJlcGxhY2VDdXJyZW50OiBib29sZWFuIH0gPSB7IHJlcGxhY2VDdXJyZW50OiBmYWxzZSB9KSB7XG4gICAgLy8gY29uc29sZS5sb2coYC0tLT4gcmVzZXR0aW5nIGJyb3dzZXIgbG9jYXRpb24gdG86ICR7dXJsfWApO1xuICAgIHRoaXMudXJsU2VydmljZS5yZXNldEJyb3dzZXJMb2NhdGlvbih1cmwsIG9wdGlvbnMpO1xuICB9XG5cbiAgLy8gQFRyYWNlKClcbiAgcHJvdGVjdGVkIHJlcGFpckJyb3dzZXJIaXN0b3J5QW5kVXJsQWZ0ZXJHdWFyZENhbmNlbGxhdGlvbihwb3BwZWRIaXN0b3J5VG9SZXBsYWNlOiBzdHJpbmcsIGFjdGl2ZVVybDogc3RyaW5nKTogdm9pZCB7XG4gICAgLy8gSW1wb3J0YW50OiBJIHRyaWVkIHRvIHBlcmZvcm0gdGhpcyBmaXggYXQgYSBsYXRlciBwb2ludCBpbnQgaGUgcm91dGluZyBjeWNsZSBidXQgaXQgY3JlYXRlZCBhbGwga2luZHMgb2ZcbiAgICAvLyBzdHJhbmdlbmVzcy5cbiAgICBMb2dnZXIuZ2V0KHRoaXMpLmluZm8oXCJXT1JLLUFST1VORDogVXBkYXRpbmcgYnJvd3NlciBsb2NhdGlvbiBhZnRlciBwb3Agc3RhdGUgLSBzZWUgYW5ndWxhciBpc3N1ZSAjMTM1ODZcIik7XG4gICAgLy8gY29uc29sZS5sb2coYHJlcGxhY2luZyAke3RoaXMudXJsU2VydmljZS5nZXRDdXJyZW50TG9jYXRpb25VcmxTbmFwc2hvdCgpLnVybH0gd2l0aCAke3BvcHBlZEhpc3RvcnlUb1JlcGxhY2V9YCk7XG4gICAgdGhpcy51cmxTZXJ2aWNlLnJlc2V0QnJvd3NlckxvY2F0aW9uKHBvcHBlZEhpc3RvcnlUb1JlcGxhY2UsIHsgcmVwbGFjZUN1cnJlbnQ6IHRydWUgfSk7XG4gICAgLy8gY29uc29sZS5sb2coYHB1c2hpbmcgJHthY3RpdmVVcmx9IGJhY2sgb250byB0aGUgaGlzdG9yeS5gKTtcbiAgICB0aGlzLnVybFNlcnZpY2UucmVzZXRCcm93c2VyTG9jYXRpb24oYWN0aXZlVXJsLCB7IHJlcGxhY2VDdXJyZW50OiBmYWxzZSB9KTtcbiAgfVxuXG5cbiAgaWdub3JlKGV2ZW50OiBSb3V0ZXJFdmVudCwgcmVhc29uPzogc3RyaW5nKTogdm9pZCB7XG4gICAgcmVhc29uID0gcmVhc29uID8gYCAtPiAke3JlYXNvbn1gIDogXCJcIjtcbiAgICAvLyBMb2dnZXIuZ2V0KHRoaXMpLmluZm8oYElnbm9yaW5nIHJvdXRlciBldmVudCR7cmVhc29ufTogJHtldmVudC5jb25zdHJ1Y3Rvci5uYW1lfSAtPiAke2V2ZW50LnVybH0gOjogJHt0aGlzLnRvU3RyaW5nKCl9YCk7XG4gIH1cblxuICBvdmVycmlkZSB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9KCR7dGhpcy5kZWJ1Z1N0YXRlKCl9KWA7XG4gIH1cblxuICBwcm90ZWN0ZWQgZGVidWdTdGF0ZShwcm9wZXJ0aWVzPzogc3RyaW5nW10pIHtcbiAgICByZXR1cm4gKHByb3BlcnRpZXMgfHwgdGhpcy5kZWJ1Z1Byb3BlcnR5S2V5cykubWFwKHAgPT4ge1xuICAgICAgcmV0dXJuIGAke3B9OiAke3RoaXNbcF19YDtcbiAgICB9KS5qb2luKFwiLCBcIik7XG4gIH1cblxuICBhc3luYyBjYW5EZWFjdGl2YXRlUGxhY2UoY29tcG9uZW50OiBQbGFjZUNvbXBvbmVudCwgY3VycmVudFVybDogVXJsU25hcHNob3QsIG5leHRVcmw6IFVybFNuYXBzaG90KTogUHJvbWlzZTxib29sZWFuIHwgVXJsU25hcHNob3Q+IHtcbiAgICAvLyBjb25zb2xlLmxvZyhgLS0tPiBjYW5EZWFjdGl2YXRlUGxhY2UoJHtjb21wb25lbnQucGxhY2VEZWZpbml0aW9uLnBhdGh9LCAke2N1cnJlbnRVcmwudXJsfSAtPiAke25leHRVcmwudXJsfSlgKTtcbiAgICAvLyBsb29rdXAgdGhlIGhhbmRsZXIgYW5kIGNyZWF0ZSBpdCBpZiB3ZSd2ZSBub3Qgc2VlbiBpdCB5ZXRcbiAgICBsZXQgaGFuZGxlciA9IHRoaXMuY29tcG9uZW50RGVhY3RpdmF0aW9uSGFuZGxlcnMuZ2V0KGNvbXBvbmVudCk7XG4gICAgaWYgKCFoYW5kbGVyKSB7XG4gICAgICBjb25zdCBpc1ByaW1hcnlIYW5kbGVyID0gdGhpcy5jb21wb25lbnREZWFjdGl2YXRpb25IYW5kbGVycy5zaXplID09PSAwOyAvLyBvbmx5IHByaW1hcnkgaGFuZGxlciBjYW5jZWxzIHRoZSBhcHAgbW9kZWwgaW50ZXJhdGlvbnNcbiAgICAgIGhhbmRsZXIgPSBuZXcgUGxhY2VDb21wb25lbnREZWFjdGl2YXRpb25IYW5kbGVyKGNvbXBvbmVudCwgdGhpcywgaXNQcmltYXJ5SGFuZGxlcik7XG4gICAgICB0aGlzLmNvbXBvbmVudERlYWN0aXZhdGlvbkhhbmRsZXJzLnNldChjb21wb25lbnQsIGhhbmRsZXIpO1xuICAgIH1cbiAgICByZXR1cm4gaGFuZGxlci5jYW5EZWFjdGl2YXRlKGN1cnJlbnRVcmwsIG5leHRVcmwpLnRoZW4ocmVzdWx0ID0+IHtcbiAgICAgIC8vIGNvbnNvbGUubG9nKGA8LS0tIGNhbkRlYWN0aXZhdGVQbGFjZSgke2NvbXBvbmVudC5wbGFjZURlZmluaXRpb24ucGF0aH0pOiAke3Jlc3VsdH1gKTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSkuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfSk7XG4gIH1cblxuICBjYW5jZWxDYW5EZWFjdGl2YXRlSW50ZXJhY3Rpb24obmV3VXJsOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBMb2dnZXIuZ2V0KHRoaXMpLmluZm8oYGJhY2sgYnV0dG9uIHByZXNzZWQgZHVyaW5nIG5hdmlnYXRpb24gc2Vzc2lvbiBpbnRlcmFjdGlvbiBwcm9taXNlYCk7XG4gICAgLy8gZGV0YWNoIHRoZSBpbnRlcmFjdGlvbiBmcm9tIHRoZSBzZXNzaW9uIHNvIGl0IGRvZXNuJ3QgZ2V0IGRpc3Bvc2VkIHVudGlsIHRoZSBhY3Rpdml0eSBoYXMgZmluaXNoZWRcbiAgICAvLyBhbGwgaXQncyB0aGluZ3MuXG4gICAgY29uc3QgY2FuRGVhY3RpdmF0ZUludGVyYWN0aW9uQ29udGV4dCA9IHRoaXMuZGV0YWNoQ2FuRGVhY3RpdmF0ZUludGVyYWN0aW9uQ29udGV4dCgpO1xuICAgIC8vIFRPRE86IEkgbmVlZCB0byBtYWtlIHRoZSBleGNsdXNpdmUgaW50ZXJhY3Rpb24gY29udGV4dCBkaXNhbGxvdyBuZXN0ZWQgYWN0aXZpdGllcyBvclxuICAgIC8vICAgICAgIHRoYXQgd291bGQgbWVzcyB0aGluZ3MgdXAgZW50aXJlbHkuIE9yLCBjYW4gSSBkbyBhIGNvbnRleHQuYWJvcnRBbGwoKS50aGVuKC4uKVxuICAgIExvZ2dlci5nZXQodGhpcykuaW5mbyhcImNhbmNlbGxpbmcgY3VycmVudCBuYXZpZ2F0aW9uIGFjdGl2aXR5Li5cIik7XG4gICAgY2FuRGVhY3RpdmF0ZUludGVyYWN0aW9uQ29udGV4dC5jYW5jZWxBY3RpdmVBY3Rpdml0eSgpLnRoZW4oKCkgPT4ge1xuICAgICAgY2FuRGVhY3RpdmF0ZUludGVyYWN0aW9uQ29udGV4dC5kaXNwb3NlKCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLmhhbmRsZUNhbkRlYWN0aXZhdGVDYW5jZWxsZWRFdmVudFNjZW5hcmlvKG5ld1VybCk7XG4gIH1cblxuICBhYnN0cmFjdCBoYW5kbGVDYW5EZWFjdGl2YXRlQ2FuY2VsbGVkRXZlbnRTY2VuYXJpbyhuZXdVcmw6IHN0cmluZyk6IHZvaWRcblxuICBwcm90ZWN0ZWQgcmVpbnN0YXRlVXJsQWZ0ZXJBbmd1bGFyQ2hhbmdlZEl0T25DYW5jZWxsYXRpb24odXJsOiBzdHJpbmcpIHtcbiAgICAvLyBBbmd1bGFyIGNhbGxzIF90aGlzLnJlc2V0VXJsVG9DdXJyZW50VXJsVHJlZSgpIG9uIGNhbmNlbGxpbmcgYW5kIGZ1Y2tzIG91ciBoaXN0b3J5LlxuICAgIC8vIFNvIHRoaXMgbWVhbnMgdGhhdCB0aGUgdG9wIG9mIHRoZSBzdGFjayBpcyB0aGUgdXJsIHdlIHdhbnQgdG8gZ28gYmFjayB0bywgYW5kIG5vdCB0aGUgb25lIHRoYXQgd2FzIG9uXG4gICAgLy8gaXQgYmVmb3JlIHRoZSBjYW5jZWwgZXZlbnQgZmlyZWQuXG4gICAgLy8gU28gd2UgbmVlZCB0bzpcbiAgICAvLyAtIHJlcGxhY2UgdGhlIGp1c3QgaW5zZXJ0ZWQgdXJsIHdpdGggdGhlIG9uZSB0aGF0IHVzZWQgdG8gYmUgdGhlcmUuXG4gICAgLy8gLSBwdXNoIG91ciBhY3R1YWwgdXJsIGJhY2sgb250byB0aGUgdG9wIG9mIHRoZSBzdGFjay5cbiAgICB0aGlzLnJlc2V0QnJvd3NlckxvY2F0aW9uKHVybCwgeyByZXBsYWNlQ3VycmVudDogdHJ1ZSB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBkZXRhY2hDYW5EZWFjdGl2YXRlSW50ZXJhY3Rpb25Db250ZXh0KCk6IEludGVyYWN0aW9uQ29udGV4dCB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuX2ludGVyYWN0aW9uQ29udGV4dDtcbiAgICB0aGlzLl9pbnRlcmFjdGlvbkNvbnRleHQgPSBudWxsO1xuICAgIHJldHVybiBjb250ZXh0O1xuICB9XG59XG4iXX0=
|
|
@@ -71,7 +71,7 @@ export class PlaceRouter extends GarbageCollector {
|
|
|
71
71
|
this.routingSessionFinished(segments);
|
|
72
72
|
}, (visit) => {
|
|
73
73
|
this.recordFinishedVisit(visit);
|
|
74
|
-
});
|
|
74
|
+
}, () => this.activeVisit$.value);
|
|
75
75
|
const { chain } = Dsl.disposeWith(this);
|
|
76
76
|
this.navigationInProgress$ = chain(this.navigationSession$).isNotNil();
|
|
77
77
|
this.interactionSyncInProgress$ = chain(this.navigationSession$)
|
|
@@ -465,4 +465,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
|
|
|
465
465
|
providedIn: 'root',
|
|
466
466
|
}]
|
|
467
467
|
}], ctorParameters: function () { return [{ type: i1.Router }, { type: i2.Location }, { type: i3.InteractionService }, { type: i4.UrlService }, { type: i5.PlaceHistory }]; } });
|
|
468
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxhY2Utcm91dGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLXVpLXBvd2VydXBzL3NyYy9saWIvcGxhY2UvcGxhY2Utcm91dGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QyxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFFTCxnQkFBZ0IsRUFDaEIsYUFBYSxFQUNiLGVBQWUsRUFFZixlQUFlLEVBQ2YsTUFBTSxFQUVQLE1BQU0saUJBQWlCLENBQUM7QUFDekIsT0FBTyxFQUNMLE1BQU0sRUFDTixZQUFZLEVBQUUsb0JBQW9CLEVBQ2xDLEdBQUcsRUFDSCxnQkFBZ0IsRUFFaEIsTUFBTSxFQUNOLGlCQUFpQixFQUNqQixvQkFBb0IsRUFLckIsTUFBTSxnQkFBZ0IsQ0FBQztBQUl4QixPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSw2Q0FBNkMsQ0FBQztBQUMvRSxPQUFPLEVBQUMsMkJBQTJCLEVBQUMsTUFBTSxpRUFBaUUsQ0FBQztBQUM1RyxPQUFPLEVBQUMsbUNBQW1DLEVBQUMsTUFBTSwyRUFBMkUsQ0FBQztBQUM5SCxPQUFPLEVBQUMseUNBQXlDLEVBQUMsTUFBTSxrRkFBa0YsQ0FBQztBQUMzSSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0saUNBQWlDLENBQUM7QUFDM0QsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0seUNBQXlDLENBQUM7QUFFMUUsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sMkNBQTJDLENBQUM7QUFDN0UsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFFdEQsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFDcEQsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQzdDLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFekMsT0FBTyxFQUFDLEtBQUssRUFBQyxNQUFNLFNBQVMsQ0FBQzs7Ozs7OztBQUc5Qiw0Q0FBNEM7QUFDNUMsZ0RBQWdEO0FBQ2hELElBQUk7QUFLSixNQUFNLE9BQU8sV0FBWSxTQUFRLGdCQUFnQjtJQXFDNUI7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQXhDVixrQkFBa0IsR0FBRyxJQUFJLGlCQUFpQixFQUFxQixDQUFDO0lBQ2hFLHFCQUFxQixDQUEyQjtJQUNoRCxzQkFBc0IsQ0FBMEIsQ0FBQyxnQkFBZ0I7SUFDakUsMEJBQTBCLENBQXNCO0lBRXhDLGlCQUFpQixDQUF5QjtJQUUxQyxhQUFhLEdBQUcsSUFBSSxpQkFBaUIsRUFBUyxDQUFDO0lBQy9DLHdCQUF3QixDQUFtQztJQUNwRSxtQkFBbUIsR0FBbUIsRUFBRSxDQUFDO0lBRWpELDJGQUEyRjtJQUMzRiw0RkFBNEY7SUFDNUYsaUdBQWlHO0lBQ2pHLGdHQUFnRztJQUMvRSxxQkFBcUIsR0FBdUQsRUFBRSxDQUFDO0lBRWhHLGlHQUFpRztJQUNqRywyRkFBMkY7SUFDbkYsaUJBQWlCLENBS3ZCO0lBQ00scUJBQXFCLEdBQUcsQ0FBQyxDQUFDO0lBQzFCLE1BQU0sQ0FBVSwyQkFBMkIsR0FBRyxDQUFDLENBQUM7SUFFL0MsV0FBVyxHQUFHLElBQUksZ0JBQWdCLEVBQUUsQ0FBQztJQUU3QixPQUFPLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUNoRCxJQUFJLG9CQUFvQixFQUFXLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUN0RCxDQUFDO0lBQ08sTUFBTSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDO0lBRXpDLFlBQ21CLGFBQXFCLEVBQ3JCLGVBQXlCLEVBQ3pCLGtCQUFzQyxFQUN0QyxVQUFzQixFQUN0QixZQUEwQjtRQUUzQyxLQUFLLEVBQUUsQ0FBQztRQU5TLGtCQUFhLEdBQWIsYUFBYSxDQUFRO1FBQ3JCLG9CQUFlLEdBQWYsZUFBZSxDQUFVO1FBQ3pCLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUFDdEMsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUN0QixpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUkzQyxJQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUMsRUFBRTtZQUNyQixNQUFNLENBQUMsaUJBQWlCLENBQUMsR0FBRyxJQUFJLENBQUM7U0FDbEM7UUFFRCxJQUFJLENBQUMsd0JBQXdCO1lBQzNCLGtCQUFrQixDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBRS9DLHVEQUF1RDtRQUN2RCxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxpQkFBaUIsQ0FBQyxJQUFJLENBQ2pELElBQUksQ0FBQyxVQUFVLEVBQ2YsSUFBSSxDQUFDLHdCQUF3QixFQUM3QixDQUFDLFdBQXdCLEVBQUUsT0FBZ0MsRUFBRSxFQUFFO1lBQzdELE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDbEQsQ0FBQyxFQUNELENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDUixJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzNCLENBQUMsRUFDRCxDQUFDLFFBQVEsRUFBRSxFQUFFO1lBQ1gsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3hDLENBQUMsRUFDRCxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ1IsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2xDLENBQUMsQ0FDRixDQUFDO1FBRUYsTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFHLEdBQUcsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDeEMsSUFBSSxDQUFDLHFCQUFxQixHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUN2RSxJQUFJLENBQUMsMEJBQTBCLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQzthQUM3RCxLQUFLLENBQUMsbUJBQW1CLENBQUM7YUFDMUIsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRXBCLE1BQU0sYUFBYSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FDekUsTUFBTSxDQUFDLENBQUMsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUMxQyxDQUFDO1FBQ0YsSUFBSSxDQUFDLHNCQUFzQixHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUM7YUFDekQsS0FBSyxDQUFDLE1BQU0sQ0FBQzthQUNiLFNBQVMsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUU1QixZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUseUJBQXlCLENBQUMsQ0FBQztRQUVoRSxvRkFBb0Y7UUFDcEYsYUFBYSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUN2Qyx5QkFBeUI7WUFDekIseUJBQXlCO1lBQ3pCLGdHQUFnRztZQUNoRyxpRkFBaUY7WUFDakYsa0ZBQWtGO1lBQ2xGLDBCQUEwQjtZQUMxQixJQUFJLEtBQUssWUFBWSxlQUFlLEVBQUU7Z0JBQ3BDLCtGQUErRjtnQkFDL0YsSUFBSSxLQUFLLENBQUMsaUJBQWlCLEtBQUssVUFBVSxFQUFFO29CQUMxQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO2lCQUN4QjtxQkFBTTtvQkFDTCxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO2lCQUM3QjtnQkFDRCwrRkFBK0Y7YUFDaEc7WUFDRCxJQUFJLEtBQUssWUFBWSxhQUFhLEVBQUU7Z0JBQ2xDLGdFQUFnRTtnQkFDaEUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDeEIsZ0VBQWdFO2FBQ2pFO1lBQ0QsSUFBSSxLQUFLLFlBQVksZUFBZSxFQUFFO2dCQUNwQyxrRUFBa0U7Z0JBQ2xFLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQzFCLGtFQUFrRTthQUNuRTtZQUNELElBQUksS0FBSyxZQUFZLGdCQUFnQixFQUFFO2dCQUNyQyxtRUFBbUU7Z0JBQ25FLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDOUIsbUVBQW1FO2FBQ3BFO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFFSCw0R0FBNEc7UUFDNUcsK0JBQStCO1FBQy9CLGVBQWUsQ0FBQyxXQUFXLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUU3RCxnR0FBZ0c7UUFDaEcsMEZBQTBGO1FBQzFGLDZEQUE2RDtRQUM3RCxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLG9CQUFvQixDQUFDLGVBQWUsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDO0lBQ2hHLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILGFBQWEsQ0FBQyxTQUFzRDtRQUNsRSxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzNDLE9BQU87WUFDTCxPQUFPLEVBQUUsR0FBRyxFQUFFO2dCQUNaLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQzVELElBQUksS0FBSyxJQUFJLENBQUMsRUFBRTtvQkFDZCxJQUFJLENBQUMscUJBQXFCLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztpQkFDN0M7WUFDSCxDQUFDO1NBQ0YsQ0FBQztJQUNKLENBQUM7SUFFTyxvQkFBb0IsQ0FBQyxRQUErQjtRQUMxRCxPQUFPLENBQUMsQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO0lBQ3pGLENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxVQUErQjtRQUNsRCxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRUQsS0FBSyxDQUFDLGdDQUFnQyxDQUNwQyxjQUFzQyxFQUN0QyxLQUEwQjtRQUUxQixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsZ0NBQWdDLENBQ3RELGNBQWMsRUFDZCxLQUFLLENBQ04sQ0FBQztJQUNKLENBQUM7SUFFRCxLQUFLLENBQUMsc0NBQXNDLENBQzFDLFNBQXdDO1FBRXhDLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxzQ0FBc0MsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUM1RSxDQUFDO0lBRUQsSUFBSSxpQkFBaUI7UUFDbkIsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxJQUFJLGNBQWM7UUFDaEIsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxZQUFZO1FBQ1YsT0FBTyxJQUFJLENBQUMscUJBQXFCLENBQUMsS0FBSyxDQUFDO0lBQzFDLENBQUM7SUFFRCxLQUFLLENBQUMsb0JBQW9CO1FBQ3hCLE1BQU0sRUFBRSxTQUFTLEVBQUUsR0FBRyxHQUFHLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzVDLE1BQU0sU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUM3QyxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxLQUFLLENBQUMsYUFBYTtRQUNqQixNQUFNLEVBQUUsU0FBUyxFQUFFLEdBQUcsR0FBRyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM1QyxNQUFNLFNBQVMsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUM1RCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxLQUFLLENBQUMsMEJBQTBCO1FBQzlCLE1BQU0sRUFBRSxTQUFTLEVBQUUsR0FBRyxHQUFHLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzVDLE1BQU0sU0FBUyxDQUFDLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ2pFLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELFdBQVc7SUFDWCxVQUFVLENBQUMsS0FBc0I7UUFDL0IsTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsaUJBQWlCLEtBQUssVUFBVSxDQUFDLENBQUM7UUFDeEQsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFO1lBQ3ZCLElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ3ZDO2FBQU07WUFDTCxNQUFNLGdCQUFnQixHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUM7WUFDbkMsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLG1CQUFtQixFQUFFLENBQUM7WUFDL0QsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsRUFBRTtnQkFDaEQsQ0FBQyxDQUFDLElBQUksbUNBQW1DLENBQ3JDLElBQUksQ0FBQyxpQkFBaUIsRUFDdEIsZ0JBQWdCLEVBQ2hCLGdCQUFnQixDQUNqQjtnQkFDSCxDQUFDLENBQUMsSUFBSSxrQkFBa0IsQ0FDcEIsSUFBSSxDQUFDLGlCQUFpQixFQUN0QixnQkFBZ0IsRUFDaEIsZ0JBQWdCLENBQ2pCLENBQUM7WUFDTixJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQzVCO0lBQ0gsQ0FBQztJQUVELFdBQVc7SUFDWCxlQUFlLENBQUMsS0FBc0I7UUFDcEMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsaUJBQWlCLEtBQUssVUFBVSxDQUFDLENBQUM7UUFDeEQsNERBQTREO1FBQzVELElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRTtZQUN2QixJQUFJLENBQUMsY0FBYyxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUM1QzthQUFNO1lBQ0wsSUFBSSxDQUFDLFlBQVksQ0FDZixJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLENBQ3BFLENBQUM7U0FDSDtJQUNILENBQUM7SUFFRCxXQUFXO0lBQ1gsWUFBWSxDQUFDLE1BQWM7UUFDekIsMEZBQTBGO1FBQzFGLDZDQUE2QztRQUM3QyxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFDdkIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDekM7YUFBTTtZQUNMLE9BQU8sQ0FBQyxHQUFHLENBQUMsMkRBQTJELENBQUMsQ0FBQztTQUMxRTtRQUNELG1DQUFtQztJQUNyQyxDQUFDO0lBRUQsV0FBVztJQUNYLGlCQUFpQixDQUFDLEtBQXVCO1FBQ3ZDLElBQUksQ0FBQyxjQUFjLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVELFdBQVc7SUFDWCxhQUFhLENBQUMsS0FBc0I7UUFDbEMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVELFdBQVc7SUFDWCxXQUFXLENBQUMsS0FBb0I7UUFDOUIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDekMsQ0FBQztJQU9ELEtBQUssQ0FBQyxRQUFRLENBQ1oscUJBQTRELEVBQzVELE1BQWdDO1FBRWhDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQ3hCLHFCQUFxQixFQUNyQixNQUFNLENBQ1AsQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2hELE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsS0FBSyxJQUFJLEVBQUU7WUFDekMsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDO1FBQy9ELENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFdBQVc7SUFDWCxLQUFLLENBQUMsWUFBWSxDQUNoQixLQUFZLEVBQ1oscUJBQWtEO1FBRWxELElBQUksSUFBSSxDQUFDLHFCQUFxQixDQUFDLEtBQUssRUFBRTtZQUNwQyxPQUFPLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxLQUFLLEVBQUUscUJBQXFCLENBQUMsQ0FBQztTQUN2RTtRQUNELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FDN0MsSUFBSSxDQUFDLFVBQVUsQ0FBQyxtQkFBbUIsRUFBRSxDQUN0QyxDQUFDO1FBQ0YsVUFBVSxDQUFDLHVCQUF1QixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzFDLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDOUIsSUFBSTtZQUNGLE1BQU0scUJBQXFCLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1NBQ2pEO2dCQUFTO1lBQ1IsdUdBQXVHO1lBQ3ZHLGdEQUFnRDtZQUNoRCxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxvQkFBb0IsRUFBRSxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUU7Z0JBQ3JFLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUM3QixJQUFJLGFBQWEsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLENBQ2pFLENBQUM7YUFDSDtTQUNGO0lBQ0gsQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7O09BYUc7SUFDSywyQkFBMkIsQ0FDakMsS0FBWSxFQUNaLHFCQUFrRDtRQUVsRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUM7UUFDdkMsTUFBTSxLQUFLLEdBQUc7WUFDWixVQUFVLEVBQUU7Z0JBQ1YsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJO2dCQUN0QixLQUFLLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRTtnQkFDMUIsaUJBQWlCLEVBQUUsT0FBTyxFQUFFLGlCQUFpQjtnQkFDN0MsZUFBZSxFQUFFLE9BQU8sRUFBRSxlQUFlO2dCQUN6QyxVQUFVLEVBQUUsT0FBTyxFQUFFLFVBQVU7Z0JBQy9CLFFBQVEsRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsYUFBYSxFQUFFLENBQUM7YUFDbEU7WUFDRCxRQUFRLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBRTtZQUNoQyxVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxtQkFBbUIsRUFBRTtTQUNsRCxDQUFDO1FBRUYsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQ25CLHVDQUF1QyxPQUFPLEVBQUUsSUFBSSxvQkFBb0I7WUFDdEUsMkRBQTJELEVBQzdELEtBQUssQ0FDTixDQUFDO1FBQ0YsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssRUFBRSxxQkFBcUIsQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFFTyxlQUFlLENBQ3JCLEtBQVksRUFDWixxQkFBa0Q7UUFFbEQsTUFBTSxxQkFBcUIsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDO1FBQ3ZELElBQUksSUFBSSxDQUFDLGlCQUFpQixFQUFFO1lBQzFCLDRGQUE0RjtZQUM1RixJQUFJLENBQUMsaUJBQWlCLENBQUMsT0FBTyxFQUFFLENBQUM7U0FDbEM7UUFDRCxPQUFPLElBQUksT0FBTyxDQUFPLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQzNDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxFQUFFLEtBQUssRUFBRSxxQkFBcUIsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLENBQUM7WUFDM0UsSUFBSSxDQUFDLHFCQUFxQixFQUFFO2dCQUMxQixJQUFJLENBQUMsOEJBQThCLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUMsQ0FBQzthQUMxRTtRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLHNCQUFzQjtRQUM1QixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUM7UUFDdkMsSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNaLE9BQU87U0FDUjtRQUNELElBQUksQ0FBQyxpQkFBaUIsR0FBRyxTQUFTLENBQUM7UUFFbkMsSUFBSSxJQUFJLENBQUMscUJBQXFCLElBQUksV0FBVyxDQUFDLDJCQUEyQixFQUFFO1lBQ3pFLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUNuQixvQ0FBb0MsSUFBSSxDQUFDLHFCQUFxQiw0QkFBNEI7Z0JBQ3hGLDBCQUEwQixFQUM1QixFQUFFLEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSyxFQUFFLGFBQWEsRUFBRSxFQUFFLENBQzFDLENBQUM7WUFDRixJQUFJLENBQUMscUJBQXFCLEdBQUcsQ0FBQyxDQUFDO1lBQy9CLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNsQixPQUFPO1NBQ1I7UUFFRCxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztRQUM3QixJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLHFCQUFxQixDQUFDLENBQUMsSUFBSSxDQUNsRSxHQUFHLEVBQUU7WUFDSCxJQUFJLENBQUMscUJBQXFCLEdBQUcsQ0FBQyxDQUFDO1lBQy9CLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNwQixDQUFDLEVBQ0QsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNSLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxDQUFDLENBQUM7WUFDL0IsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN4QixDQUFDLENBQ0YsQ0FBQztJQUNKLENBQUM7SUFFRCxhQUFhLENBQ1gsV0FBd0IsRUFDeEIsZ0JBQW1DO1FBRW5DLDJFQUEyRTtRQUMzRSxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUNyQyxXQUFXLENBQUMsT0FBTyxFQUNuQixnQkFBZ0IsQ0FDakIsQ0FBQztJQUNKLENBQUM7SUFFRCxJQUFJLFlBQVk7UUFDZCxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDO0lBQ3RDLENBQUM7SUFFRCxzQkFBc0IsQ0FBQyxNQUFvRCxFQUFFLE9BQXFCO1FBQ2hHLE1BQU0sRUFBRSxLQUFLLEVBQUUsR0FBRyxHQUFHLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUN4RCxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQzFELE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUM1RCxDQUFDO0lBQ0osQ0FBQztJQUVELEtBQUssQ0FBQyx5QkFBeUIsQ0FDN0IsRUFBZ0IsRUFDaEIsR0FBaUIsRUFDakIsUUFBK0I7UUFFL0IsaUdBQWlHO1FBQ2pHLElBQUksQ0FBQyxZQUFZLENBQUMsa0JBQWtCLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFekMsNkRBQTZEO1FBQzdELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLHFCQUFxQixDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2hFLElBQUksRUFBRSxDQUFDLHFCQUFxQixDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ2pDLHVGQUF1RjtZQUN2RiwrRUFBK0U7WUFDL0Usd0ZBQXdGO1lBQ3hGLDJFQUEyRTtZQUMzRSxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDdkQsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUU7Z0JBQ2xDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxVQUFVO3FCQUNoQyxRQUFRLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQztxQkFDckQsa0JBQWtCLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQzFCLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLEVBQUUsRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDO1lBQ3pELENBQUMsQ0FBQyxDQUFDO1NBQ0o7SUFDSCxDQUFDO0lBRU8sdUJBQXVCLENBQUMsZ0JBQXdCO1FBQ3RELE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUN6RCxPQUFPLGFBQWE7WUFDbEIsQ0FBQyxDQUFDLElBQUksMkJBQTJCLENBQzdCLElBQUksQ0FBQyxpQkFBaUIsRUFDdEIsZ0JBQWdCLENBQ2pCO1lBQ0gsQ0FBQyxDQUFDLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO0lBQy9ELENBQUM7SUFFRCxXQUFXO0lBRUQsWUFBWSxDQUFDLElBQXVCO1FBQzVDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUM7UUFDL0MsSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNiLElBQUksQ0FBQyxZQUFZLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztTQUM3QztRQUNELE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxLQUFLLFFBQVEsQ0FBQyxDQUFDO1FBQ25DLDBIQUEwSDtRQUMxSCxJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztRQUNyQyxJQUFJLFFBQVEsRUFBRTtZQUNaLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztTQUNwQjtRQUNELElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRUQsV0FBVztJQUVILHNCQUFzQixDQUFDLEtBQWE7UUFDMUMsSUFBSSxLQUFLLEVBQUU7WUFDVCxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNsRCxJQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDakM7UUFDRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDO1FBQ3BDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNsQixJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztRQUNyQywwRUFBMEU7UUFDMUUsNkZBQTZGO1FBQzdGLDZGQUE2RjtRQUM3Riw4RkFBOEY7UUFDOUYsa0JBQWtCO1FBQ2xCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQztRQUN0QyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsRUFBRSxDQUFDO1FBQzlCLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUVEOzs7O09BSUc7SUFDSyxtQkFBbUIsQ0FBQyxLQUFZO1FBQ3RDLElBQUksQ0FBQyxZQUFZLENBQUMsd0JBQXdCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbEQsa0VBQWtFO1FBQ2xFLDBFQUEwRTtRQUMxRSxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7SUFDbkMsQ0FBQztJQUVEOzs7O09BSUc7SUFDSyw4QkFBOEIsQ0FBQyxJQUFnQjtRQUNyRCxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsV0FBVztJQUNYLG1DQUFtQyxDQUNqQyxpQkFBNkIsR0FBRyxFQUFFO1FBQ2hDLE9BQU87SUFDVCxDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUU7WUFDMUIsMEdBQTBHO1lBQzFHLDBDQUEwQztZQUMxQyxPQUFPLElBQUksT0FBTyxDQUFPLENBQUMsT0FBTyxFQUFFLEVBQUU7Z0JBQ25DLE1BQU0saUJBQWlCLEdBQUcsR0FBRyxFQUFFO29CQUM3QixJQUFJLElBQUksQ0FBQyxpQkFBaUIsRUFBRTt3QkFDMUIsb0ZBQW9GO3dCQUNwRixtRkFBbUY7d0JBQ25GLElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO3dCQUN2RCxPQUFPO3FCQUNSO29CQUNELElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxHQUFHLEVBQUU7d0JBQ3ZDLGNBQWMsRUFBRSxDQUFDO3dCQUNqQixPQUFPLEVBQUUsQ0FBQztvQkFDWixDQUFDLENBQUMsQ0FBQztvQkFDSCxNQUFNLFdBQVcsR0FBRyxJQUFJLHlDQUF5QyxDQUMvRCxJQUFJLENBQUMsaUJBQWlCLEVBQ3RCLElBQUksQ0FBQyxVQUFVLENBQUMsbUJBQW1CLEVBQUUsRUFDckMsS0FBSyxDQUNOLENBQUM7b0JBQ0YsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsQ0FBQztnQkFDakMsQ0FBQyxDQUFDO2dCQUNGLElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1lBQ3pELENBQUMsQ0FBQyxDQUFDO1NBQ0o7YUFBTTtZQUNMLE9BQU8sSUFBSSxPQUFPLENBQU8sQ0FBQyxPQUFPLEVBQUUsRUFBRTtnQkFDbkMsMEVBQTBFO2dCQUMxRSxJQUFJLENBQUMsOEJBQThCLENBQUMsR0FBRyxFQUFFO29CQUN2QyxjQUFjLEVBQUUsQ0FBQztvQkFDakIsT0FBTyxFQUFFLENBQUM7Z0JBQ1osQ0FBQyxDQUFDLENBQUM7Z0JBQ0gsTUFBTSxPQUFPLEdBQUcsSUFBSSx5Q0FBeUMsQ0FDM0QsSUFBSSxDQUFDLGlCQUFpQixFQUN0QixJQUFJLENBQUMsVUFBVSxDQUFDLG1CQUFtQixFQUFFLEVBQ3JDLEtBQUssQ0FDTixDQUFDO2dCQUNGLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDN0IsQ0FBQyxDQUFDLENBQUM7U0FDSjtJQUNILENBQUM7SUFFTyxPQUFPLENBQ2IscUJBQTRELEVBQzVELE1BQWdDO1FBRWhDLElBQUkscUJBQXFCLFlBQVksS0FBSyxFQUFFO1lBQzFDLE9BQU8scUJBQXFCLENBQUM7U0FDOUI7YUFBTTtZQUNMLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxNQUFNLENBQUMsQ0FBQztTQUNsRDtJQUNILENBQUM7dUdBM2pCVSxXQUFXOzJHQUFYLFdBQVcsY0FGVixNQUFNOzsyRkFFUCxXQUFXO2tCQUh2QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7TG9jYXRpb259IGZyb20gXCJAYW5ndWxhci9jb21tb25cIjtcbmltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7XG4gIEFjdGl2YXRlZFJvdXRlU25hcHNob3QsXG4gIE5hdmlnYXRpb25DYW5jZWwsXG4gIE5hdmlnYXRpb25FbmQsXG4gIE5hdmlnYXRpb25FcnJvcixcbiAgTmF2aWdhdGlvbkV4dHJhcyxcbiAgTmF2aWdhdGlvblN0YXJ0LFxuICBSb3V0ZXIsXG4gIFJvdXRlclN0YXRlU25hcHNob3Rcbn0gZnJvbSBcIkBhbmd1bGFyL3JvdXRlclwiO1xuaW1wb3J0IHtcbiAgYXNzZXJ0LFxuICBEZWJ1Z0NvbnRleHQsIERlbGVnYXRpbmdWYWx1ZU1vZGVsLCBEaXNwb3NhYmxlLCBEaXNwb3NlZFdpdGgsXG4gIERzbCxcbiAgR2FyYmFnZUNvbGxlY3RvcixcbiAgTGlzdE1vZGVsLFxuICBMb2dnZXIsXG4gIE11dGFibGVWYWx1ZU1vZGVsLFxuICBTaW5nbGVTZWxlY3Rpb25Nb2RlbCxcbiAgVHJhbnNhY3Rpb24sXG4gIFRyYW5zYWN0aW9uT2JzZXJ2ZXIsXG4gIFZhbHVlTW9kZWwsXG4gIFZhbHVlTW9kZWxDaGFpblxufSBmcm9tICdAY29vbG9uL3BlY3Rpbic7XG5pbXBvcnQge0NvbnN0cnVjdGFibGV9IGZyb20gXCJAY29vbG9uL3R5cGVzY3JpcHQtdXRpbGl0aWVzXCI7XG5pbXBvcnQgdHlwZSB7RGlzcG9zYWJsZUNvbXBvbmVudH0gZnJvbSAnLi4vY29tcG9uZW50cy9kaXNwb3NhYmxlLWNvbXBvbmVudCc7XG5pbXBvcnQgdHlwZSB7SW50ZXJhY3Rpb25TZXJ2aWNlUm91dGluZ0FkYXB0ZXJ9IGZyb20gXCIuLi9pbnRlcmFjdGlvbi9zZXJ2aWNlcy9pbnRlcmFjdGlvbi1zZXJ2aWNlLXJvdXRpbmctYWRhcHRlclwiO1xuaW1wb3J0IHtJbnRlcmFjdGlvblNlcnZpY2V9IGZyb20gXCIuLi9pbnRlcmFjdGlvbi9zZXJ2aWNlcy9pbnRlcmFjdGlvbi5zZXJ2aWNlXCI7XG5pbXBvcnQge05hdmlnYXRpbmdEdXJpbmdJbnRlcmFjdGlvbn0gZnJvbSBcIi4vbmF2aWdhdGlvbi9zZXNzaW9uL2ludGVyYWN0aW9ucy9uYXZpZ2F0aW5nLWR1cmluZy1pbnRlcmFjdGlvblwiO1xuaW1wb3J0IHtQb3BTdGF0ZUR1cmluZ0ludGVyYWN0aW9uTmF2aWdhdGlvbn0gZnJvbSBcIi4vbmF2aWdhdGlvbi9zZXNzaW9uL2ludGVyYWN0aW9ucy9wb3Atc3RhdGUtZHVyaW5nLWludGVyYWN0aW9uLW5hdmlnYXRpb25cIjtcbmltcG9ydCB7U3luY2hyb25pc2VJbnRlcmFjdGlvbkNvbnRleHRJZHNXaXRoUm91dGV9IGZyb20gXCIuL25hdmlnYXRpb24vc2Vzc2lvbi9pbnRlcmFjdGlvbnMvc3luY2hyb25pc2UtaW50ZXJhY3Rpb24tY29udGV4dC1pZHMtd2l0aC1yb3V0ZVwiO1xuaW1wb3J0IHtOYXZpZ2F0aW5nfSBmcm9tIFwiLi9uYXZpZ2F0aW9uL3Nlc3Npb24vbmF2aWdhdGluZ1wiO1xuaW1wb3J0IHtOYXZpZ2F0aW9uQ29udGV4dH0gZnJvbSBcIi4vbmF2aWdhdGlvbi9zZXNzaW9uL25hdmlnYXRpb24tY29udGV4dFwiO1xuaW1wb3J0IHR5cGUge05hdmlnYXRpb25TZXNzaW9ufSBmcm9tIFwiLi9uYXZpZ2F0aW9uL3Nlc3Npb24vbmF2aWdhdGlvbi1zZXNzaW9uXCI7XG5pbXBvcnQge1BvcFN0YXRlTmF2aWdhdGlvbn0gZnJvbSBcIi4vbmF2aWdhdGlvbi9zZXNzaW9uL3BvcC1zdGF0ZS1uYXZpZ2F0aW9uXCI7XG5pbXBvcnQge1BsYWNlQXV0aFNlcnZpY2V9IGZyb20gXCIuL3BsYWNlLWF1dGgtc2VydmljZVwiO1xuaW1wb3J0IHR5cGUge1BsYWNlQ29tcG9uZW50fSBmcm9tIFwiLi9wbGFjZS1jb21wb25lbnRcIjtcbmltcG9ydCB7Z2V0UGxhY2VEZWZpbml0aW9ufSBmcm9tIFwiLi9wbGFjZS1tZXRhZGF0YVwiO1xuaW1wb3J0IHtQbGFjZUhpc3Rvcnl9IGZyb20gXCIuL3BsYWNlLWhpc3RvcnlcIjtcbmltcG9ydCB7VXJsU2VydmljZX0gZnJvbSBcIi4vdXJsLXNlcnZpY2VcIjtcbmltcG9ydCB0eXBlIHtVcmxTbmFwc2hvdH0gZnJvbSBcIi4vdXJsLXNuYXBzaG90XCI7XG5pbXBvcnQge1Zpc2l0fSBmcm9tIFwiLi92aXNpdFwiO1xuaW1wb3J0IHR5cGUge1Zpc2l0U2VnbWVudH0gZnJvbSBcIi4vdmlzaXQtc2VnbWVudFwiO1xuXG4vLyBmdW5jdGlvbiBhc0FycmF5PFQ+KGl0ZW06IFQgfCBUW10pOiBUW10ge1xuLy8gICByZXR1cm4gQXJyYXkuaXNBcnJheShpdGVtKSA/IGl0ZW0gOiBbaXRlbV07XG4vLyB9XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBQbGFjZVJvdXRlciBleHRlbmRzIEdhcmJhZ2VDb2xsZWN0b3Ige1xuICByZWFkb25seSBuYXZpZ2F0aW9uU2Vzc2lvbiQgPSBuZXcgTXV0YWJsZVZhbHVlTW9kZWw8TmF2aWdhdGlvblNlc3Npb24+KCk7XG4gIHJlYWRvbmx5IG5hdmlnYXRpb25JblByb2dyZXNzJDogVmFsdWVNb2RlbENoYWluPGJvb2xlYW4+O1xuICByZWFkb25seSBuYXZpZ2F0aW9uU2Vzc2lvbk5hbWUkOiBWYWx1ZU1vZGVsQ2hhaW48c3RyaW5nPjsgLy8gdXNlZCBieSB0ZXN0c1xuICByZWFkb25seSBpbnRlcmFjdGlvblN5bmNJblByb2dyZXNzJDogVmFsdWVNb2RlbDxib29sZWFuPjtcblxuICBwcml2YXRlIHJlYWRvbmx5IG5hdmlnYXRpb25Db250ZXh0OiBOYXZpZ2F0aW9uQ29udGV4dC5JbXBsO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2FjdGl2ZVZpc2l0JCA9IG5ldyBNdXRhYmxlVmFsdWVNb2RlbDxWaXNpdD4oKTtcbiAgcHJpdmF0ZSByZWFkb25seSByb3V0ZXJJbnRlcmFjdGlvbkFkYXB0ZXI6IEludGVyYWN0aW9uU2VydmljZVJvdXRpbmdBZGFwdGVyO1xuICBwcml2YXRlIHNlc3Npb25GaW5pc2hlZEpvYnM6ICgoKSA9PiB2b2lkKVtdID0gW107XG5cbiAgLy8gUHJlZGljYXRlcyB0aGF0LCBnaXZlbiB0aGUgb3JpZ2luYXRpbmcgY2hhbmdlJ3MgdHJhbnNhY3Rpb24gbWV0YWRhdGEsIGRlY2lkZSBhbiBpbi1wbGFjZVxuICAvLyBwYXJhbWV0ZXIgY2hhbmdlIHNob3VsZCByZXBsYWNlIHJhdGhlciB0aGFuIHB1c2ggYSBoaXN0b3J5IGVudHJ5LiBUaGUgcm91dGVyIGl0c2VsZiBzdGF5c1xuICAvLyBhZ25vc3RpYyBhYm91dCB3aGF0IHRoZSBtZXRhZGF0YSBtZWFucyAtIHByb2R1Y2VycyAoZS5nLiBTaW5nbGVTZWxlY3Rpb25Nb2RlbCBjb3JyZWN0aW9ucykgdGFnXG4gIC8vIHRoZSB0cmFuc2FjdGlvbiBhbmQgcmVnaXN0ZXIgYSBwcmVkaWNhdGUgaGVyZS4gU2VlIHNraXBIaXN0b3J5SWYgLyBub3RpZnlWaXNpdFNlZ21lbnRDaGFuZ2VkLlxuICBwcml2YXRlIHJlYWRvbmx5IHNraXBIaXN0b3J5UHJlZGljYXRlczogQXJyYXk8KG1ldGFkYXRhOiBUcmFuc2FjdGlvbi5NZXRhRGF0YSkgPT4gYm9vbGVhbj4gPSBbXTtcblxuICAvLyBBIG5hdmlnYXRpb24gdHJpZ2dlcmVkIHdoaWxlIGFuIGludGVycnVwdGlibGUgc2Vzc2lvbiBpcyBpbiBmbGlnaHQgaXMgcGFya2VkIGhlcmUgYW5kIHJ1biB3aGVuXG4gIC8vIHRoYXQgc2Vzc2lvbiBmaW5pc2hlcy4gT25seSB0aGUgbW9zdCByZWNlbnQgcGVuZGluZyBuYXZpZ2F0aW9uIGlzIHJldGFpbmVkIChjb2FsZXNjaW5nKS5cbiAgcHJpdmF0ZSBwZW5kaW5nTmF2aWdhdGlvbj86IHtcbiAgICByZWFkb25seSB2aXNpdDogVmlzaXQ7XG4gICAgcmVhZG9ubHkgcnVuTmF2aWdhdGlvbkNvbW1hbmRzOiAocm91dGVyOiBSb3V0ZXIpID0+IHVua25vd247XG4gICAgcmVhZG9ubHkgcmVzb2x2ZTogKCkgPT4gdm9pZDtcbiAgICByZWFkb25seSByZWplY3Q6IChyZWFzb24/OiB1bmtub3duKSA9PiB2b2lkO1xuICB9O1xuICBwcml2YXRlIHF1ZXVlZE5hdmlnYXRpb25EZXB0aCA9IDA7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IE1BWF9RVUVVRURfTkFWSUdBVElPTl9ERVBUSCA9IDU7XG5cbiAgcmVhZG9ubHkgYXV0aFNlcnZpY2UgPSBuZXcgUGxhY2VBdXRoU2VydmljZSgpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWR5JCA9IHRoaXMucmVnaXN0ZXJEaXNwb3NhYmxlKFxuICAgIG5ldyBEZWxlZ2F0aW5nVmFsdWVNb2RlbDxib29sZWFuPigpLndpdGhEZWZhdWx0KHRydWUpXG4gICk7XG4gIHJlYWRvbmx5IHJlYWR5JCA9IHRoaXMuX3JlYWR5JC5yZWFkb25seSQ7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBhbmd1bGFyUm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSByZWFkb25seSBhbmd1bGFyTG9jYXRpb246IExvY2F0aW9uLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgaW50ZXJhY3Rpb25TZXJ2aWNlOiBJbnRlcmFjdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSB1cmxTZXJ2aWNlOiBVcmxTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcGxhY2VIaXN0b3J5OiBQbGFjZUhpc3RvcnlcbiAgKSB7XG4gICAgc3VwZXIoKTtcblxuICAgIGlmICh3aW5kb3dbJ0N5cHJlc3MnXSkge1xuICAgICAgd2luZG93WydhdXAuUGxhY2VSb3V0ZXInXSA9IHRoaXM7XG4gICAgfVxuXG4gICAgdGhpcy5yb3V0ZXJJbnRlcmFjdGlvbkFkYXB0ZXIgPVxuICAgICAgaW50ZXJhY3Rpb25TZXJ2aWNlLnJlZ2lzdGVyUGxhY2VSb3V0ZXIodGhpcyk7XG5cbiAgICAvLyBUT0RPOiBNYWtlIHRoaXMgYW4gaW50ZXJmYWNlIGFuZCB1c2UgJ3RoaXMnIGluc3RlYWQuXG4gICAgdGhpcy5uYXZpZ2F0aW9uQ29udGV4dCA9IG5ldyBOYXZpZ2F0aW9uQ29udGV4dC5JbXBsKFxuICAgICAgdGhpcy51cmxTZXJ2aWNlLFxuICAgICAgdGhpcy5yb3V0ZXJJbnRlcmFjdGlvbkFkYXB0ZXIsXG4gICAgICAodXJsU25hcHNob3Q6IFVybFNuYXBzaG90LCBvcHRpb25zOiB7IHJlcGxhY2VVcmw6IGJvb2xlYW4gfSkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5uYXZpZ2F0ZUJ5VXJsKHVybFNuYXBzaG90LCBvcHRpb25zKTtcbiAgICAgIH0sXG4gICAgICAoc3RhdGUpID0+IHtcbiAgICAgICAgdGhpcy50cmFuc2l0aW9uVG8oc3RhdGUpO1xuICAgICAgfSxcbiAgICAgIChzZWdtZW50cykgPT4ge1xuICAgICAgICB0aGlzLnJvdXRpbmdTZXNzaW9uRmluaXNoZWQoc2VnbWVudHMpO1xuICAgICAgfSxcbiAgICAgICh2aXNpdCkgPT4ge1xuICAgICAgICB0aGlzLnJlY29yZEZpbmlzaGVkVmlzaXQodmlzaXQpO1xuICAgICAgfVxuICAgICk7XG5cbiAgICBjb25zdCB7IGNoYWluIH0gPSBEc2wuZGlzcG9zZVdpdGgodGhpcyk7XG4gICAgdGhpcy5uYXZpZ2F0aW9uSW5Qcm9ncmVzcyQgPSBjaGFpbih0aGlzLm5hdmlnYXRpb25TZXNzaW9uJCkuaXNOb3ROaWwoKTtcbiAgICB0aGlzLmludGVyYWN0aW9uU3luY0luUHJvZ3Jlc3MkID0gY2hhaW4odGhpcy5uYXZpZ2F0aW9uU2Vzc2lvbiQpXG4gICAgICAucGx1Y2soJ2lzSW50ZXJhY3Rpb25TeW5jJylcbiAgICAgIC5vdGhlcndpc2UoZmFsc2UpO1xuXG4gICAgY29uc3QgaWRsZVN0YXRlTmFtZSA9IGNoYWluKHRoaXMuaW50ZXJhY3Rpb25TZXJ2aWNlLmFjdGl2ZSkubWFwKChhY3RpdmUpID0+XG4gICAgICBhY3RpdmUgPyAnSWRsZUR1cmluZ0ludGVyYWN0aW9uJyA6ICdJZGxlJ1xuICAgICk7XG4gICAgdGhpcy5uYXZpZ2F0aW9uU2Vzc2lvbk5hbWUkID0gY2hhaW4odGhpcy5uYXZpZ2F0aW9uU2Vzc2lvbiQpXG4gICAgICAucGx1Y2soJ25hbWUnKVxuICAgICAgLm90aGVyd2lzZShpZGxlU3RhdGVOYW1lKTtcblxuICAgIERlYnVnQ29udGV4dC50YWcodGhpcy5fYWN0aXZlVmlzaXQkLCAnUGxhY2VSb3V0ZXIuYWN0aXZlVmlzaXQnKTtcblxuICAgIC8vIFRPRE86IG1ha2Ugc2V0dXAgdGhlIGNhbGxiYWNrcyBpbiBkdXJpbmcgbW9kdWxlIGluaXRpYXRpb24gdG8gbWFrZSB0aGlzIHRlc3RhYmxlLlxuICAgIGFuZ3VsYXJSb3V0ZXIuZXZlbnRzLnN1YnNjcmliZSgoZXZlbnQpID0+IHtcbiAgICAgIC8vIFJvdXRpbmcgZXZlbnQgc2VxdWVuY2VcbiAgICAgIC8vID09PT09PT09PT09PT09PT09PT09PT1cbiAgICAgIC8vIE5hdmlnYXRpb25TdGFydCAtPiAuLi4uIC0+IE5hdmlnYXRpb25DYW5jZWwgLS0+IHJlZGlyZWN0LCBnbyBhcm91bmQgYWdhaW4gaW4gdGhlIHNhbWUgc2Vzc2lvblxuICAgICAgLy8gTmF2aWdhdGlvblN0YXJ0IC0+IC4uLi4gLT4gTmF2aWdhdGlvbkVuZCAtLT4gbmF2aWdhdGlvbiBjb21wbGV0ZSwgZW5kIHNlc3Npb24uXG4gICAgICAvLyBOYXZpZ2F0aW9uU3RhcnQgLT4gLi4uLiAtPiBOYXZpZ2F0aW9uRXJyb3IgLS0+IG5hdmlnYXRpb24gYWJvcnRlZCwgZW5kIHNlc3Npb24uXG4gICAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PVxuICAgICAgaWYgKGV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvblN0YXJ0KSB7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGAtLS0+IE5hdmlnYXRpb25TdGFydFske2V2ZW50LmlkfV06ICR7ZXZlbnQudXJsfSAoJHtldmVudC5uYXZpZ2F0aW9uVHJpZ2dlcn0pYCk7XG4gICAgICAgIGlmIChldmVudC5uYXZpZ2F0aW9uVHJpZ2dlciA9PT0gJ3BvcHN0YXRlJykge1xuICAgICAgICAgIHRoaXMub25Qb3BTdGF0ZShldmVudCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5vblJvdXRlclN0YXJ0ZWQoZXZlbnQpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGA8LS0tIE5hdmlnYXRpb25TdGFydFske2V2ZW50LmlkfV06ICR7ZXZlbnQudXJsfSAoJHtldmVudC5uYXZpZ2F0aW9uVHJpZ2dlcn0pYCk7XG4gICAgICB9XG4gICAgICBpZiAoZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uRW5kKSB7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGAtLS0+IE5hdmlnYXRpb25FbmRbJHtldmVudC5pZH1dOiAke2V2ZW50LnVybH1gKTtcbiAgICAgICAgdGhpcy5vblJvdXRlckVuZChldmVudCk7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGA8LS0tIE5hdmlnYXRpb25FbmRbJHtldmVudC5pZH1dOiAke2V2ZW50LnVybH1gKTtcbiAgICAgIH1cbiAgICAgIGlmIChldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25FcnJvcikge1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhgLS0tPiBOYXZpZ2F0aW9uRXJyb3JbJHtldmVudC5pZH1dOiAke2V2ZW50LnVybH1gKTtcbiAgICAgICAgdGhpcy5vblJvdXRlckVycm9yKGV2ZW50KTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coYDwtLS0gTmF2aWdhdGlvbkVycm9yWyR7ZXZlbnQuaWR9XTogJHtldmVudC51cmx9YCk7XG4gICAgICB9XG4gICAgICBpZiAoZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uQ2FuY2VsKSB7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGAtLS0+IE5hdmlnYXRpb25DYW5jZWxbJHtldmVudC5pZH1dOiAke2V2ZW50LnVybH1gKTtcbiAgICAgICAgdGhpcy5vblJvdXRlckNhbmNlbGxlZChldmVudCk7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGA8LS0tIE5hdmlnYXRpb25DYW5jZWxbJHtldmVudC5pZH1dOiAke2V2ZW50LnVybH1gKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIFRoZSByb3V0ZXIgbmVlZHMgdG8ga25vdyBhYm91dCB1cmwgY2hhbmdlcyBhbmQgaW4gc29tZSBjYXNlcyB0aGV5IGFyZSB0aGUgb25seSB3YXkgdGhlIHJvdXRlciBjYW4ga25vdyBpZlxuICAgIC8vIHRoZSBiYWNrIGJ1dHRvbiB3YXMgY2xpY2tlZC5cbiAgICBhbmd1bGFyTG9jYXRpb24ub25VcmxDaGFuZ2UoKHVybCkgPT4gdGhpcy5vblVybENoYW5nZWQodXJsKSk7XG5cbiAgICAvLyBBdXRvbWF0aWMgc2VsZWN0aW9uIGNvcnJlY3Rpb25zIChhdXRvLXNlbGVjdC1maXJzdCAvIHNlbGVjdC1uZWFyZXN0KSB0YWcgdGhlaXIgdHJhbnNhY3Rpb24gc29cbiAgICAvLyB0aGV5IHJlZmluZSB0aGUgVVJMIGluIHBsYWNlIHJhdGhlciB0aGFuIGFjY3J1aW5nIGJhY2stc3RhY2sgZW50cmllcy4gQSBkZWxpYmVyYXRlIHVzZXJcbiAgICAvLyBzZWxlY3QoKSBpcyB1bnRhZ2dlZCBhbmQgdGhlcmVmb3JlIHB1c2hlcyBhIGhpc3RvcnkgZW50cnkuXG4gICAgdGhpcy5za2lwSGlzdG9yeUlmKChtZXRhZGF0YSkgPT4gbWV0YWRhdGEuZ2V0KFNpbmdsZVNlbGVjdGlvbk1vZGVsLkFVVE9fQ09SUkVDVElPTikgPT09IHRydWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVyIGEgcHJlZGljYXRlIHRoYXQgZGVjaWRlcywgZnJvbSB0aGUgb3JpZ2luYXRpbmcgY2hhbmdlJ3MgdHJhbnNhY3Rpb24gbWV0YWRhdGEsIHdoZXRoZXIgYW5cbiAgICogaW4tcGxhY2UgdmlzaXQtcGFyYW1ldGVyIGNoYW5nZSBzaG91bGQgcmVwbGFjZSB0aGUgY3VycmVudCBoaXN0b3J5IGVudHJ5IGluc3RlYWQgb2YgcHVzaGluZyBhIG5ld1xuICAgKiBvbmUuIFVzZSB0aGlzIHRvIHN1cHByZXNzIGhpc3RvcnkgZm9yIHByb2dyYW1tYXRpYy9hdXRvbWF0aWMgY2hhbmdlcyB3aGlsZSBsZWF2aW5nIGRlbGliZXJhdGVcbiAgICogdXNlciBuYXZpZ2F0aW9ucyBhcyBwdXNoZXMuIFJldHVybnMgYSB7QGxpbmsgRGlzcG9zYWJsZX0gdGhhdCByZW1vdmVzIHRoZSBwcmVkaWNhdGUuXG4gICAqL1xuICBza2lwSGlzdG9yeUlmKHByZWRpY2F0ZTogKG1ldGFkYXRhOiBUcmFuc2FjdGlvbi5NZXRhRGF0YSkgPT4gYm9vbGVhbik6IERpc3Bvc2FibGUge1xuICAgIHRoaXMuc2tpcEhpc3RvcnlQcmVkaWNhdGVzLnB1c2gocHJlZGljYXRlKTtcbiAgICByZXR1cm4ge1xuICAgICAgZGlzcG9zZTogKCkgPT4ge1xuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuc2tpcEhpc3RvcnlQcmVkaWNhdGVzLmluZGV4T2YocHJlZGljYXRlKTtcbiAgICAgICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgICAgICB0aGlzLnNraXBIaXN0b3J5UHJlZGljYXRlcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgc2hvdWxkUmVwbGFjZUhpc3RvcnkobWV0YWRhdGE/OiBUcmFuc2FjdGlvbi5NZXRhRGF0YSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIW1ldGFkYXRhICYmIHRoaXMuc2tpcEhpc3RvcnlQcmVkaWNhdGVzLnNvbWUocHJlZGljYXRlID0+IHByZWRpY2F0ZShtZXRhZGF0YSkpO1xuICB9XG5cbiAgcG9zdHBvbmVSb3V0aW5nVW50aWwoY29uZGl0aW9uJDogVmFsdWVNb2RlbDxib29sZWFuPikge1xuICAgIHRoaXMuX3JlYWR5JC5zZXREZWxlZ2F0ZShjb25kaXRpb24kKTtcbiAgfVxuXG4gIGFzeW5jIGdldEF1dGhlbnRpY2F0aW9uRmFpbHVyZVJlZGlyZWN0KFxuICAgIGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LFxuICAgIHN0YXRlOiBSb3V0ZXJTdGF0ZVNuYXBzaG90XG4gICk6IFByb21pc2U8VmlzaXQ+IHtcbiAgICByZXR1cm4gdGhpcy5hdXRoU2VydmljZS5nZXRBdXRoZW50aWNhdGlvbkZhaWx1cmVSZWRpcmVjdChcbiAgICAgIGFjdGl2YXRlZFJvdXRlLFxuICAgICAgc3RhdGVcbiAgICApO1xuICB9XG5cbiAgYXN5bmMgZ2V0QXV0aG9yaXNhdGlvbkZhaWx1cmVSZWRpcmVjdE9wdGlvbnMoXG4gICAgY29tcG9uZW50OiBDb25zdHJ1Y3RhYmxlPFBsYWNlQ29tcG9uZW50PlxuICApOiBQcm9taXNlPFZpc2l0W10+IHtcbiAgICByZXR1cm4gdGhpcy5hdXRoU2VydmljZS5nZXRBdXRob3Jpc2F0aW9uRmFpbHVyZVJlZGlyZWN0T3B0aW9ucyhjb21wb25lbnQpO1xuICB9XG5cbiAgZ2V0IG5hdmlnYXRpb25TZXNzaW9uKCkge1xuICAgIHJldHVybiB0aGlzLm5hdmlnYXRpb25TZXNzaW9uJC52YWx1ZTtcbiAgfVxuXG4gIGdldCBjdXJyZW50U2Vzc2lvbigpIHtcbiAgICByZXR1cm4gdGhpcy5uYXZpZ2F0aW9uU2Vzc2lvbiQudmFsdWU7XG4gIH1cblxuICBpc05hdmlnYXRpbmcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMubmF2aWdhdGlvbkluUHJvZ3Jlc3MkLnZhbHVlO1xuICB9XG5cbiAgYXN5bmMgd2FpdFVudGlsUm91dGVyUmVhZHkoKSB7XG4gICAgY29uc3QgeyB3YWl0VW50aWwgfSA9IERzbC5kaXNwb3NlV2l0aCh0aGlzKTtcbiAgICBhd2FpdCB3YWl0VW50aWwodGhpcy5yZWFkeSQpLmJlY29tZXNUcnV0aHkoKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGFzeW5jIHdhaXRVbnRpbElkbGUoKTogUHJvbWlzZTx0aGlzPiB7XG4gICAgY29uc3QgeyB3YWl0VW50aWwgfSA9IERzbC5kaXNwb3NlV2l0aCh0aGlzKTtcbiAgICBhd2FpdCB3YWl0VW50aWwodGhpcy5uYXZpZ2F0aW9uSW5Qcm9ncmVzcyQpLmJlY29tZXNGYWxzZXkoKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGFzeW5jIHdhaXRBY3Rpdml0aWVzU3luY2hyb25pc2VkKCk6IFByb21pc2U8dGhpcz4ge1xuICAgIGNvbnN0IHsgd2FpdFVudGlsIH0gPSBEc2wuZGlzcG9zZVdpdGgodGhpcyk7XG4gICAgYXdhaXQgd2FpdFVudGlsKHRoaXMuaW50ZXJhY3Rpb25TeW5jSW5Qcm9ncmVzcyQpLmJlY29tZXNGYWxzZXkoKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIEBUcmFjZSgpXG4gIG9uUG9wU3RhdGUoZXZlbnQ6IE5hdmlnYXRpb25TdGFydCkge1xuICAgIGFzc2VydC5pc1RydXRoeShldmVudC5uYXZpZ2F0aW9uVHJpZ2dlciA9PT0gJ3BvcHN0YXRlJyk7XG4gICAgaWYgKHRoaXMuY3VycmVudFNlc3Npb24pIHtcbiAgICAgIHRoaXMuY3VycmVudFNlc3Npb24ub25Qb3BTdGF0ZShldmVudCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHBvcHBlZEhpc3RvcnlVcmwgPSBldmVudC51cmw7XG4gICAgICBjb25zdCBjdXJyZW50Um91dGVyVXJsID0gdGhpcy51cmxTZXJ2aWNlLmdldEN1cnJlbnRSb3V0ZXJVcmwoKTtcbiAgICAgIGNvbnN0IHNlc3Npb24gPSB0aGlzLmludGVyYWN0aW9uU2VydmljZS5pc0FjdGl2ZSgpXG4gICAgICAgID8gbmV3IFBvcFN0YXRlRHVyaW5nSW50ZXJhY3Rpb25OYXZpZ2F0aW9uKFxuICAgICAgICAgICAgdGhpcy5uYXZpZ2F0aW9uQ29udGV4dCxcbiAgICAgICAgICAgIGN1cnJlbnRSb3V0ZXJVcmwsXG4gICAgICAgICAgICBwb3BwZWRIaXN0b3J5VXJsXG4gICAgICAgICAgKVxuICAgICAgICA6IG5ldyBQb3BTdGF0ZU5hdmlnYXRpb24oXG4gICAgICAgICAgICB0aGlzLm5hdmlnYXRpb25Db250ZXh0LFxuICAgICAgICAgICAgY3VycmVudFJvdXRlclVybCxcbiAgICAgICAgICAgIHBvcHBlZEhpc3RvcnlVcmxcbiAgICAgICAgICApO1xuICAgICAgdGhpcy50cmFuc2l0aW9uVG8oc2Vzc2lvbik7XG4gICAgfVxuICB9XG5cbiAgLy8gQFRyYWNlKClcbiAgb25Sb3V0ZXJTdGFydGVkKGV2ZW50OiBOYXZpZ2F0aW9uU3RhcnQpIHtcbiAgICBhc3NlcnQuaXNGYWxzZXkoZXZlbnQubmF2aWdhdGlvblRyaWdnZXIgPT09ICdwb3BzdGF0ZScpO1xuICAgIC8vIGNvbnN0IGluSW50ZXJhY3Rpb24gPSB0aGlzLmludGVyYWN0aW9uU2VydmljZS5pc0FjdGl2ZSgpO1xuICAgIGlmICh0aGlzLmN1cnJlbnRTZXNzaW9uKSB7XG4gICAgICB0aGlzLmN1cnJlbnRTZXNzaW9uLm9uUm91dGVyU3RhcnRlZChldmVudCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudHJhbnNpdGlvblRvKFxuICAgICAgICB0aGlzLmNyZWF0ZU5hdmlnYXRpb25TZXNzaW9uKHRoaXMudXJsU2VydmljZS5nZXRDdXJyZW50Um91dGVyVXJsKCkpXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8vIEBUcmFjZSgpXG4gIG9uVXJsQ2hhbmdlZChuZXdVcmw6IHN0cmluZykge1xuICAgIC8vIHRoZSBiYWNrIGJ1dHRvbiBjYW4gdHJpZ2dlciBhIHVybCBjaGFuZ2Ugd2l0aG91dCBhIG5hdmlnYXRpb24gc2Vzc2lvbiBpbiBwcm9ncmVzcyBzbyB3ZVxuICAgIC8vIGNvbnNvbGUubG9nKGAtLS0+IFVybCBDaGFuZ2VkICR7bmV3VXJsfWApO1xuICAgIGlmICh0aGlzLmN1cnJlbnRTZXNzaW9uKSB7XG4gICAgICB0aGlzLmN1cnJlbnRTZXNzaW9uLm9uVXJsQ2hhbmdlKG5ld1VybCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUubG9nKCdGWUk6IHVybCBjaGFuZ2VkIHdpdGhvdXQgYSBuYXZpZ2F0aW9uIHNlc3Npb24gaW4gcHJvZ3Jlc3MnKTtcbiAgICB9XG4gICAgLy8gY29uc29sZS5sb2coYDwtLS0gVXJsIENoYW5nZWRgKTtcbiAgfVxuXG4gIC8vIEBUcmFjZSgpXG4gIG9uUm91dGVyQ2FuY2VsbGVkKGV2ZW50OiBOYXZpZ2F0aW9uQ2FuY2VsKSB7XG4gICAgdGhpcy5jdXJyZW50U2Vzc2lvbi5vblJvdXRlckNhbmNlbGxlZChldmVudCk7XG4gIH1cblxuICAvLyBAVHJhY2UoKVxuICBvblJvdXRlckVycm9yKGV2ZW50OiBOYXZpZ2F0aW9uRXJyb3IpIHtcbiAgICB0aGlzLmN1cnJlbnRTZXNzaW9uLm9uUm91dGVyRXJyb3IoZXZlbnQpO1xuICB9XG5cbiAgLy8gQFRyYWNlKClcbiAgb25Sb3V0ZXJFbmQoZXZlbnQ6IE5hdmlnYXRpb25FbmQpIHtcbiAgICB0aGlzLmN1cnJlbnRTZXNzaW9uLm9uUm91dGVyRW5kKGV2ZW50KTtcbiAgfVxuXG4gIGFzeW5jIG5hdmlnYXRlKHZpc2l0OiBWaXNpdCk7XG4gIGFzeW5jIG5hdmlnYXRlKFxuICAgIHBsYWNlQ29tcG9uZW50OiBDb25zdHJ1Y3RhYmxlPFBsYWNlQ29tcG9uZW50PixcbiAgICBwYXJhbXM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICApO1xuICBhc3luYyBuYXZpZ2F0ZShcbiAgICB2aXNpdE9yUGxhY2VDb21wb25lbnQ6IFZpc2l0IHwgQ29uc3RydWN0YWJsZTxQbGFjZUNvbXBvbmVudD4sXG4gICAgcGFyYW1zPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgKSB7XG4gICAgY29uc3QgdmlzaXQgPSB0aGlzLnRvVmlzaXQoXG4gICAgICB2aXNpdE9yUGxhY2VDb21wb25lbnQsXG4gICAgICBwYXJhbXNcbiAgICApLmNvcHlXaXRoRGVmYXVsdHNGcm9tKHRoaXMuYWN0aXZlVmlzaXQkLnZhbHVlKTtcbiAgICByZXR1cm4gdGhpcy5kb05hdmlnYXRpb24odmlzaXQsIGFzeW5jICgpID0+IHtcbiAgICAgIGF3YWl0IHRoaXMuYW5ndWxhclJvdXRlci5uYXZpZ2F0ZSh2aXNpdC5nZXRSb3V0ZXJDb21tYW5kcygpKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIEBUcmFjZSgpXG4gIGFzeW5jIGRvTmF2aWdhdGlvbihcbiAgICB2aXNpdDogVmlzaXQsXG4gICAgcnVuTmF2aWdhdGlvbkNvbW1hbmRzOiAocm91dGVyOiBSb3V0ZXIpID0+IHVua25vd25cbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMubmF2aWdhdGlvbkluUHJvZ3Jlc3MkLnZhbHVlKSB7XG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVPdmVybGFwcGluZ05hdmlnYXRpb24odmlzaXQsIHJ1bk5hdmlnYXRpb25Db21tYW5kcyk7XG4gICAgfVxuICAgIGNvbnN0IG5hdmlnYXRpb24gPSB0aGlzLmNyZWF0ZU5hdmlnYXRpb25TZXNzaW9uKFxuICAgICAgdGhpcy51cmxTZXJ2aWNlLmdldEN1cnJlbnRSb3V0ZXJVcmwoKVxuICAgICk7XG4gICAgbmF2aWdhdGlvbi5pbml0aWFsaXNlVmlzaXRTZWdtZW50cyh2aXNpdCk7XG4gICAgdGhpcy50cmFuc2l0aW9uVG8obmF2aWdhdGlvbik7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHJ1bk5hdmlnYXRpb25Db21tYW5kcyh0aGlzLmFuZ3VsYXJSb3V0ZXIpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICAvLyBDaGVjayBpZiB0aGUgcm91dGVyIGhhcyBmaW5pc2hlZCAoaW4gdGhlIGNhc2Ugd2hlcmUgbm8gcm91dGVyIGNoYW5nZSByZXF1aXJlZCkgYW5kIHdlJ3JlIHN0aWxsIGluICBhXG4gICAgICAvLyB0cmFuc2llbnQgc3RhdGUgYW5kIGZpbmlzaCBvZiB0aGUgdHJhbnNpdGlvbi5cbiAgICAgIGlmICghdGhpcy5hbmd1bGFyUm91dGVyLmdldEN1cnJlbnROYXZpZ2F0aW9uKCkgJiYgdGhpcy5jdXJyZW50U2Vzc2lvbikge1xuICAgICAgICB0aGlzLmN1cnJlbnRTZXNzaW9uLm9uUm91dGVyRW5kKFxuICAgICAgICAgIG5ldyBOYXZpZ2F0aW9uRW5kKC0xLCAnJywgdGhpcy51cmxTZXJ2aWNlLmdldEN1cnJlbnRSb3V0ZXJVcmwoKSlcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlcyBhIG5hdmlnYXRpb24gdHJpZ2dlcmVkIHdoaWxlIGFub3RoZXIgaXMgYWxyZWFkeSBpbiBmbGlnaHQ6IHF1ZXVlIGl0IChjb2FsZXNjaW5nIHRvIHRoZVxuICAgKiBsYXRlc3QpIGFuZCBydW4gaXQgb25jZSB0aGUgaW4tZmxpZ2h0IHNlc3Npb24gZmluaXNoZXMuXG4gICAqXG4gICAqIEhpc3Rvcnk6IHRoaXMgdXNlZCB0byB0aHJvdyBgaWxsZWdhbFN0YXRlKCdOYXZpZ2F0aW9uIGFscmVhZHkgaW4gcHJvZ3Jlc3MnKWAgKGtpbGxlZCB0aGVcbiAgICogdHJpZ2dlcmluZyBhY3Rpb24pLCB0aGVuIGRyb3BwZWQgcmVhbC12cy1yZWFsIGNvbGxpc2lvbnMgYXMgYW4gaW50ZXJpbSBwb2xpY3kgcGVuZGluZ1xuICAgKiBwcm9kdWN0aW9uIGV2aWRlbmNlLiBUaGUgZXZpZGVuY2UgYXJyaXZlZDogYSBgbmF2aWdhdGUoKWAgaXNzdWVkIGZyb20gYG9uUGxhY2VSZWFkeWAgb3IgYVxuICAgKiByb3V0ZS1wYXJhbWV0ZXIgc3Vic2NyaXB0aW9uIGNhbiBsYW5kIHdoaWxlIHRoZSBhY3RpdmF0aW5nIG5hdmlnYXRpb24ncyBzZXNzaW9uIGlzIHN0aWxsXG4gICAqIHNldHRsaW5nIOKAlCBkcm9wcGluZyBpdCBsZWF2ZXMgYSBwbGFjZSB0aGF0IG5ldmVyIGZpbmlzaGVzIG5hdmlnYXRpbmcgKGUuZy4gYVxuICAgKiByZWRpcmVjdFRvRmlyc3RDaGlsZC1zdHlsZSBjaGlsZCB0aGF0IG5ldmVyIGFwcGVhcnMpLCBhbmQgdGhlIGNhbGxlciBjYW4ndCB0ZWxsIGJlY2F1c2UgdGhlXG4gICAqIGRyb3BwZWQgcHJvbWlzZSByZXNvbHZlZCBub3JtYWxseS4gUG9wc3RhdGUgbmV2ZXIgZW50ZXJzIGRvTmF2aWdhdGlvbiAoaXQgYXJyaXZlcyB2aWEgcm91dGVyXG4gICAqIGV2ZW50cyAtPiBvblBvcFN0YXRlKSwgc28gcXVldWVpbmcgcHJvZ3JhbW1hdGljIG5hdmlnYXRpb25zIGJlaGluZCBhbiBpbi1mbGlnaHQgc2Vzc2lvblxuICAgKiBwcmVzZXJ2ZXMgdXNlci1pbnRlbnQgb3JkZXJpbmcuXG4gICAqL1xuICBwcml2YXRlIGhhbmRsZU92ZXJsYXBwaW5nTmF2aWdhdGlvbihcbiAgICB2aXNpdDogVmlzaXQsXG4gICAgcnVuTmF2aWdhdGlvbkNvbW1hbmRzOiAocm91dGVyOiBSb3V0ZXIpID0+IHVua25vd25cbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgY3VycmVudCA9IHRoaXMubmF2aWdhdGlvblNlc3Npb247XG4gICAgY29uc3QgZGVidWcgPSB7XG4gICAgICBpblByb2dyZXNzOiB7XG4gICAgICAgIHNlc3Npb246IGN1cnJlbnQ/Lm5hbWUsXG4gICAgICAgIHN0YXRlOiBjdXJyZW50Py50b1N0cmluZygpLFxuICAgICAgICBpc0ludGVyYWN0aW9uU3luYzogY3VycmVudD8uaXNJbnRlcmFjdGlvblN5bmMsXG4gICAgICAgIGlzSW50ZXJydXB0aWJsZTogY3VycmVudD8uaXNJbnRlcnJ1cHRpYmxlLFxuICAgICAgICBpc1BvcFN0YXRlOiBjdXJyZW50Py5pc1BvcFN0YXRlLFxuICAgICAgICBzZWdtZW50czogY3VycmVudD8uZ2V0VmlzaXRTZWdtZW50cygpLm1hcChzID0+IHMudG9EZWJ1Z1N0cmluZygpKSxcbiAgICAgIH0sXG4gICAgICBpbmNvbWluZzogdmlzaXQ/LnRvRGVidWdTdHJpbmcoKSxcbiAgICAgIGN1cnJlbnRVcmw6IHRoaXMudXJsU2VydmljZS5nZXRDdXJyZW50Um91dGVyVXJsKCksXG4gICAgfTtcblxuICAgIExvZ2dlci5nZXQodGhpcykud2FybihcbiAgICAgIGBOYXZpZ2F0aW9uIHRyaWdnZXJlZCB3aGlsZSBzZXNzaW9uICcke2N1cnJlbnQ/Lm5hbWV9JyBpcyBpbiBwcm9ncmVzczsgYCArXG4gICAgICAgIGBxdWV1ZWluZyB0aGUgaW5jb21pbmcgbmF2aWdhdGlvbiB0byBydW4gb25jZSBpdCBmaW5pc2hlcy5gLFxuICAgICAgZGVidWdcbiAgICApO1xuICAgIHJldHVybiB0aGlzLnF1ZXVlTmF2aWdhdGlvbih2aXNpdCwgcnVuTmF2aWdhdGlvbkNvbW1hbmRzKTtcbiAgfVxuXG4gIHByaXZhdGUgcXVldWVOYXZpZ2F0aW9uKFxuICAgIHZpc2l0OiBWaXNpdCxcbiAgICBydW5OYXZpZ2F0aW9uQ29tbWFuZHM6IChyb3V0ZXI6IFJvdXRlcikgPT4gdW5rbm93blxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBmbHVzaEFscmVhZHlTY2hlZHVsZWQgPSAhIXRoaXMucGVuZGluZ05hdmlnYXRpb247XG4gICAgaWYgKHRoaXMucGVuZGluZ05hdmlnYXRpb24pIHtcbiAgICAgIC8vIENvYWxlc2NlOiBzdXBlcnNlZGUgdGhlIHByZXZpb3VzbHkgcXVldWVkIG5hdmlnYXRpb24gc28gb25seSB0aGUgbW9zdCByZWNlbnQgdGFyZ2V0IHJ1bnMuXG4gICAgICB0aGlzLnBlbmRpbmdOYXZpZ2F0aW9uLnJlc29sdmUoKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRoaXMucGVuZGluZ05hdmlnYXRpb24gPSB7IHZpc2l0LCBydW5OYXZpZ2F0aW9uQ29tbWFuZHMsIHJlc29sdmUsIHJlamVjdCB9O1xuICAgICAgaWYgKCFmbHVzaEFscmVhZHlTY2hlZHVsZWQpIHtcbiAgICAgICAgdGhpcy5ydW5BZnRlclJvdXRpbmdTZXNzaW9uRmluaXNoZXMoKCkgPT4gdGhpcy5mbHVzaFBlbmRpbmdOYXZpZ2F0aW9uKCkpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBmbHVzaFBlbmRpbmdOYXZpZ2F0aW9uKCk6IHZvaWQge1xuICAgIGNvbnN0IHBlbmRpbmcgPSB0aGlzLnBlbmRpbmdOYXZpZ2F0aW9uO1xuICAgIGlmICghcGVuZGluZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnBlbmRpbmdOYXZpZ2F0aW9uID0gdW5kZWZpbmVkO1xuXG4gICAgaWYgKHRoaXMucXVldWVkTmF2aWdhdGlvbkRlcHRoID49IFBsYWNlUm91dGVyLk1BWF9RVUVVRURfTkFWSUdBVElPTl9ERVBUSCkge1xuICAgICAgTG9nZ2VyLmdldCh0aGlzKS53YXJuKFxuICAgICAgICBgRHJvcHBpbmcgcXVldWVkIG5hdmlnYXRpb24gYWZ0ZXIgJHt0aGlzLnF1ZXVlZE5hdmlnYXRpb25EZXB0aH0gY29uc2VjdXRpdmUgZGVmZXJyYWxzIHRvIGAgK1xuICAgICAgICAgIGBhdm9pZCBhIG5hdmlnYXRpb24gbG9vcC5gLFxuICAgICAgICB7IHZpc2l0OiBwZW5kaW5nLnZpc2l0Py50b0RlYnVnU3RyaW5nKCkgfVxuICAgICAgKTtcbiAgICAgIHRoaXMucXVldWVkTmF2aWdhdGlvbkRlcHRoID0gMDtcbiAgICAgIHBlbmRpbmcucmVzb2x2ZSgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucXVldWVkTmF2aWdhdGlvbkRlcHRoKys7XG4gICAgdGhpcy5kb05hdmlnYXRpb24ocGVuZGluZy52aXNpdCwgcGVuZGluZy5ydW5OYXZpZ2F0aW9uQ29tbWFuZHMpLnRoZW4oXG4gICAgICAoKSA9PiB7XG4gICAgICAgIHRoaXMucXVldWVkTmF2aWdhdGlvbkRlcHRoID0gMDtcbiAgICAgICAgcGVuZGluZy5yZXNvbHZlKCk7XG4gICAgICB9LFxuICAgICAgKGVycm9yKSA9PiB7XG4gICAgICAgIHRoaXMucXVldWVkTmF2aWdhdGlvbkRlcHRoID0gMDtcbiAgICAgICAgcGVuZGluZy5yZWplY3QoZXJyb3IpO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBuYXZpZ2F0ZUJ5VXJsKFxuICAgIHVybFNuYXBzaG90OiBVcmxTbmFwc2hvdCxcbiAgICBuYXZpZ2F0aW9uRXh0cmFzPzogTmF2aWdhdGlvbkV4dHJhc1xuICApOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAvLyBjb25zb2xlLmxvZyhgIyMjIG5hdmlnYXRpb25CeVVybCAtPiAke3VybFNuYXBzaG90LnVybFRyZWUudG9TdHJpbmcoKX1gKTtcbiAgICByZXR1cm4gdGhpcy5hbmd1bGFyUm91dGVyLm5hdmlnYXRlQnlVcmwoXG4gICAgICB1cmxTbmFwc2hvdC51cmxUcmVlLFxuICAgICAgbmF2aWdhdGlvbkV4dHJhc1xuICAgICk7XG4gIH1cblxuICBnZXQgYWN0aXZlVmlzaXQkKCk6IFZhbHVlTW9kZWw8VmlzaXQ+IHtcbiAgICByZXR1cm4gdGhpcy5fYWN0aXZlVmlzaXQkLnJlYWRvbmx5JDtcbiAgfVxuXG4gIGZpbHRlckF1dGhvcml6ZWRQbGFjZXMocGxhY2VzOiBSZWFkb25seUFycmF5PENvbnN0cnVjdGFibGU8UGxhY2VDb21wb25lbnQ+Piwgb3B0aW9uczogRGlzcG9zZWRXaXRoKTogTGlzdE1vZGVsPENvbnN0cnVjdGFibGU8UGxhY2VDb21wb25lbnQ+PiB7XG4gICAgY29uc3QgeyBjaGFpbiB9ID0gRHNsLmRpc3Bvc2VXaXRoKG9wdGlvbnMuZGlzcG9zZWRXaXRoKTtcbiAgICByZXR1cm4gY2hhaW4odGhpcy5hdXRoU2VydmljZS5hY2Nlc3NHdWFyZCQpLm1hcFRvTGlzdCgoZykgPT5cbiAgICAgIHBsYWNlcy5maWx0ZXIoKHApID0+IGcuaXNBdXRob3Jpc2VkKGdldFBsYWNlRGVmaW5pdGlvbihwKSkpXG4gICAgKTtcbiAgfVxuXG4gIGFzeW5jIG5vdGlmeVZpc2l0U2VnbWVudENoYW5nZWQoXG4gICAgaXM6IFZpc2l0U2VnbWVudCxcbiAgICB3YXM6IFZpc2l0U2VnbWVudCxcbiAgICBtZXRhZGF0YT86IFRyYW5zYWN0aW9uLk1ldGFEYXRhXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIGNvbnNvbGUubG9nKFwiUGxhY2VSb3V0ZXIubm90aWZ5VmlzaXRTZWdtZW50Q2hhbmdlZFwiLCBpcy50b0RlYnVnU3RyaW5nKCksIHdhcy50b0RlYnVnU3RyaW5nKCkpO1xuICAgIHRoaXMucGxhY2VIaXN0b3J5LnVwZGF0ZVZpc2l0U2VnbWVudChpcyk7XG5cbiAgICAvLyBGSVhNRTogbm8gcm91dGUgaWQgLT4gcm91dGUgaWQgZHVwbGljYXRlcyByb3V0ZSBwYXJhbWV0ZXJzXG4gICAgY29uc3QgdmlzaXQgPSB0aGlzLmFjdGl2ZVZpc2l0JC52YWx1ZS5jb3B5QW5kUmVwbGFjZVNlZ21lbnQoaXMpO1xuICAgIGlmIChpcy5oYXNSb3V0aW5nQ2hhbmdlZEZyb20od2FzKSkge1xuICAgICAgLy8gQW4gaW4tcGxhY2UgcGFyYW1ldGVyIGNoYW5nZSAobW9kZWwgLT4gcm91dGUpIHB1c2hlcyBhIGhpc3RvcnkgZW50cnkgYnkgZGVmYXVsdCBzbyBhXG4gICAgICAvLyBkZWxpYmVyYXRlIHNlbGVjdGlvbiBpcyByZWFjaGFibGUgdmlhIHRoZSBiYWNrIGJ1dHRvbi4gQXV0b21hdGljIHJlZmluZW1lbnRzXG4gICAgICAvLyAoYXV0by1zZWxlY3QtZmlyc3QgLyBzZWxlY3QtbmVhcmVzdCBjb3JyZWN0aW9ucykgdGFnIHRoZWlyIHRyYW5zYWN0aW9uIG1ldGFkYXRhIGFuZCBhXG4gICAgICAvLyByZWdpc3RlcmVkIHNraXBIaXN0b3J5SWYgcHJlZGljYXRlIHJlcGxhY2VzIGluc3RlYWQgLSBzZWUgc2tpcEhpc3RvcnlJZi5cbiAgICAgIGNvbnN0IHJlcGxhY2VVcmwgPSB0aGlzLnNob3VsZFJlcGxhY2VIaXN0b3J5KG1ldGFkYXRhKTtcbiAgICAgIGF3YWl0IHRoaXMuZG9OYXZpZ2F0aW9uKHZpc2l0LCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHVybFNuYXBzaG90ID0gdGhpcy51cmxTZXJ2aWNlXG4gICAgICAgICAgLnBhcnNlVXJsKHRoaXMuYW5ndWxhclJvdXRlci5yb3V0ZXJTdGF0ZS5zbmFwc2hvdC51cmwpXG4gICAgICAgICAgLnVwZGF0ZVZpc2l0U2VnbWVudChpcyk7XG4gICAgICAgIHJldHVybiB0aGlzLm5hdmlnYXRlQnlVcmwodXJsU25hcHNob3QsIHsgcmVwbGFjZVVybCB9KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlTmF2aWdhdGlvblNlc3Npb24oY3VycmVudFJvdXRlclVybDogc3RyaW5nKTogTmF2aWdhdGlvblNlc3Npb24ge1xuICAgIGNvbnN0IGluSW50ZXJhY3Rpb24gPSB0aGlzLmludGVyYWN0aW9uU2VydmljZS5pc0FjdGl2ZSgpO1xuICAgIHJldHVybiBpbkludGVyYWN0aW9uXG4gICAgICA/IG5ldyBOYXZpZ2F0aW5nRHVyaW5nSW50ZXJhY3Rpb24oXG4gICAgICAgICAgdGhpcy5uYXZpZ2F0aW9uQ29udGV4dCxcbiAgICAgICAgICBjdXJyZW50Um91dGVyVXJsXG4gICAgICAgIClcbiAgICAgIDogbmV3IE5hdmlnYXRpbmcodGhpcy5uYXZpZ2F0aW9uQ29udGV4dCwgY3VycmVudFJvdXRlclVybCk7XG4gIH1cblxuICAvLyBAVHJhY2UoKVxuXG4gIHByb3RlY3RlZCB0cmFuc2l0aW9uVG8obmV4dDogTmF2aWdhdGlvblNlc3Npb24pIHtcbiAgICBjb25zdCBwcmV2aW91cyA9IHRoaXMubmF2aWdhdGlvblNlc3Npb24kLnZhbHVlO1xuICAgIGlmICghcHJldmlvdXMpIHtcbiAgICAgIHRoaXMucGxhY2VIaXN0b3J5Lm5vdGlmeU5hdmlnYXRpb25TdGFydGVkKCk7XG4gICAgfVxuICAgIGFzc2VydC5pc1RydXRoeShuZXh0ICE9PSBwcmV2aW91cyk7XG4gICAgLy8gTG9nZ2VyLmdldCh0aGlzKS5pbmZvKGAjIyMgUm91dGVyIFN0YXRlIFRyYW5zaXRpb246ICR7cHJldmlvdXMgPyBwcmV2aW91cy50b1N0cmluZygpIDogJ251bGwnfSAtPiAke25leHQudG9TdHJpbmcoKX1gKTtcbiAgICB0aGlzLm5hdmlnYXRpb25TZXNzaW9uJC52YWx1ZSA9IG5leHQ7XG4gICAgaWYgKHByZXZpb3VzKSB7XG4gICAgICBwcmV2aW91cy5kaXNwb3NlKCk7XG4gICAgfVxuICAgIG5leHQubm90aWZ5QWN0aXZlKCk7XG4gIH1cblxuICAvLyBAVHJhY2UoKVxuXG4gIHByaXZhdGUgcm91dGluZ1Nlc3Npb25GaW5pc2hlZCh2aXNpdD86IFZpc2l0KSB7XG4gICAgaWYgKHZpc2l0KSB7XG4gICAgICBhc3NlcnQuaXNUcnV0aHkodGhpcy5uYXZpZ2F0aW9uSW5Qcm9ncmVzcyQudmFsdWUpO1xuICAgICAgdGhpcy5yZWNvcmRGaW5pc2hlZFZpc2l0KHZpc2l0KTtcbiAgICB9XG4gICAgY29uc3Qgc2Vzc2lvbiA9IHRoaXMuY3VycmVudFNlc3Npb247XG4gICAgc2Vzc2lvbi5kaXNwb3NlKCk7XG4gICAgdGhpcy5uYXZpZ2F0aW9uU2Vzc2lvbiQudmFsdWUgPSBudWxsO1xuICAgIC8vIGNvbnNvbGUubG9nKGAjIyMgUm91dGVyIFNlc3Npb24gRmluaXNoZWQgKHdhcyAke3Nlc3Npb24udG9TdHJpbmcoKX0pYCk7XG4gICAgLy8gU25hcHNob3QtYW5kLXN3YXA6IGpvYnMgcmVnaXN0ZXJlZCBEVVJJTkcgdGhlIGRyYWluIChlLmcuIHRoZSBpbnRlcmFjdGlvbi1pZCBzeW5jJ3MgbmVzdGVkXG4gICAgLy8gY29tcGxldGlvbiBqb2IsIG9yIGEgcXVldWVkIG5hdmlnYXRpb24gcmUtcXVldWVpbmcpIGJlbG9uZyB0byB0aGUgTkVYVCBzZXNzaW9uIGZpbmlzaC4gVGhlXG4gICAgLy8gb2xkIGZvckVhY2gtdGhlbi1yZWFzc2lnbiBib3RoIHNraXBwZWQgdGhlbSAoZm9yRWFjaCBkb2Vzbid0IHZpc2l0IGFwcGVuZGVkIGl0ZW1zKSBhbmQgdGhlblxuICAgIC8vIGRpc2NhcmRlZCB0aGVtLlxuICAgIGNvbnN0IGpvYnMgPSB0aGlzLnNlc3Npb25GaW5pc2hlZEpvYnM7XG4gICAgdGhpcy5zZXNzaW9uRmluaXNoZWRKb2JzID0gW107XG4gICAgam9icy5mb3JFYWNoKChqb2IpID0+IGpvYigpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWNvcmRzIGEgY29tcGxldGVkIG5hdmlnYXRpb24ncyB2aXNpdCB3aXRob3V0IGZpbmlzaGluZyB0aGUgc2Vzc2lvbi4gU2hhcmVkIGJ5IHRoZSBub3JtYWxcbiAgICogZmluaXNoIHBhdGggYW5kIHNlc3Npb25zIHRoYXQgaGFuZCBvdmVyIHRvIHZpc2l0bGVzcyBob3VzZWtlZXBpbmcgKHNlZVxuICAgKiBOYXZpZ2F0aW9uQ29udGV4dC5yZWNvcmRWaXNpdCkuXG4gICAqL1xuICBwcml2YXRlIHJlY29yZEZpbmlzaGVkVmlzaXQodmlzaXQ6IFZpc2l0KSB7XG4gICAgdGhpcy5wbGFjZUhpc3Rvcnkubm90aWZ5TmF2aWdhdGlvbkZpbmlzaGVkKHZpc2l0KTtcbiAgICAvLyBXZSB1cGRhdGUgdGhlIGFjdGl2ZSB2aXNpdHMgYmVmb3JlIHdlIGZpbmlzaCB0aGUgc2Vzc2lvbiBzbyB0aGVcbiAgICAvLyBwbGFjZSBvdXRsZXRzIGNhbiBpZ25vcmUgdGhlIGluY29taW5nIGNoYW5nZXMgdW50aWwgdGhpbmdzIGFyZSBzZXR0bGVkLlxuICAgIHRoaXMuX2FjdGl2ZVZpc2l0JC52YWx1ZSA9IHZpc2l0O1xuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgYGZ1bmNgIHdoZW4gdGhlIE5FWFQgbmF2aWdhdGlvbiBzZXNzaW9uIGZpbmlzaGVzIOKAlCB3aGljaCBtYXkgYmUgYSBzZXNzaW9uIHRoYXQgaGFzbid0XG4gICAqIHN0YXJ0ZWQgeWV0ICh0aGUgaW50ZXJhY3Rpb24taWQgc3luYyByZWdpc3RlcnMgaXRzIGNvbXBsZXRpb24gam9iIGJlZm9yZSBzdGFydGluZyB0aGUgc3luY1xuICAgKiBzZXNzaW9uLCBhbmQgam9icyByZWdpc3RlcmVkIHdoaWxlIGEgZHJhaW4gaXMgcnVubmluZyBiZWxvbmcgdG8gdGhlIGZvbGxvd2luZyBzZXNzaW9uKS5cbiAgICovXG4gIHByaXZhdGUgcnVuQWZ0ZXJSb3V0aW5nU2Vzc2lvbkZpbmlzaGVzKGZ1bmM6ICgpID0+IHZvaWQpIHtcbiAgICB0aGlzLnNlc3Npb25GaW5pc2hlZEpvYnMucHVzaChmdW5jKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTeW5jJ3MgdGhlIGN1cnJlbnQgaW50ZXJhY3Rpb24gc3RhdGUgd2l0aCB0aGUgVVJMLiAgV2UgbmVlZCB0byBwdXNoIHNvbWV0aGluZyBpbiB0aGUgVVJMIGluIG9yZGVyXG4gICAqIHRvIGJlIGFibGUgdG8gY2FwdHVyZSB0aGUgYmFjayBidXR0b24gb24gdGhlIGZpcnN0IHBhZ2UuICBJZiB3ZSBkb24ndCB0aGVuIHRoZSBiYWNrIGNsaWNrIHdpbGwgZXhpdFxuICAgKiB0aGUgYXBwIGRpcmVjdGx5IGFuZCB3ZSBkb24ndCBnZXQgdG8gYXNrLlxuICAgKi9cbiAgLy8gQFRyYWNlKClcbiAgc3luY0ludGVyYWN0aW9uQ29udGV4dElkc1dpdGhSb3V0ZXIoXG4gICAgb25TeW5jQ29tcGxldGU6ICgpID0+IHZvaWQgPSAoKSA9PiB7XG4gICAgICAvLyBub29wXG4gICAgfVxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5uYXZpZ2F0aW9uU2Vzc2lvbikge1xuICAgICAgLy8gY29uc29sZS5sb2coYE5hdmlnYXRpb24gYWN0aXZlIC0+ICR7dGhpcy5uYXZpZ2F0aW9uU2Vzc2lvbi50b1N0cmluZygpfSwgc3luYyBkZWxheWVkIHVudGlsIGZpbmlzaGVkLmApO1xuICAgICAgLy8gY29uc3Qgc2Vzc2lvbiA9IHRoaXMubmF2aWdhdGlvblNlc3Npb247XG4gICAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHtcbiAgICAgICAgY29uc3Qgc3RhcnRTeW5jV2hlbklkbGUgPSAoKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMubmF2aWdhdGlvblNlc3Npb24pIHtcbiAgICAgICAgICAgIC8vIEEgam9iIGRyYWluZWQgYmVmb3JlIHVzIChlLmcuIGEgcXVldWVkIG5hdmlnYXRpb24pIGFscmVhZHkgc3RhcnRlZCBhIG5ldyBzZXNzaW9uO1xuICAgICAgICAgICAgLy8gdHJhbnNpdGlvbmluZyBub3cgd291bGQgZGlzcG9zZSBpdCBtaWQtZmxpZ2h0LiBSZS1kZWZlciB1bnRpbCB0aGF0IG9uZSBmaW5pc2hlcy5cbiAgICAgICAgICAgIHRoaXMucnVuQWZ0ZXJSb3V0aW5nU2Vzc2lvbkZpbmlzaGVzKHN0YXJ0U3luY1doZW5JZGxlKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5ydW5BZnRlclJvdXRpbmdTZXNzaW9uRmluaXNoZXMoKCkgPT4ge1xuICAgICAgICAgICAgb25TeW5jQ29tcGxldGUoKTtcbiAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBjb25zdCBzeW5jU2Vzc2lvbiA9IG5ldyBTeW5jaHJvbmlzZUludGVyYWN0aW9uQ29udGV4dElkc1dpdGhSb3V0ZShcbiAgICAgICAgICAgIHRoaXMubmF2aWdhdGlvbkNvbnRleHQsXG4gICAgICAgICAgICB0aGlzLnVybFNlcnZpY2UuZ2V0Q3VycmVudFJvdXRlclVybCgpLFxuICAgICAgICAgICAgZmFsc2VcbiAgICAgICAgICApO1xuICAgICAgICAgIHRoaXMudHJhbnNpdGlvblRvKHN5bmNTZXNzaW9uKTtcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5ydW5BZnRlclJvdXRpbmdTZXNzaW9uRmluaXNoZXMoc3RhcnRTeW5jV2hlbklkbGUpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4ge1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhgTm8gbmF2aWdhdGlvbiBpbiBwcm9ncmVzcywgc3RhcnRpbmcgc3luY2hyb25pc2F0aW9uIGpvYmApO1xuICAgICAgICB0aGlzLnJ1bkFmdGVyUm91dGluZ1Nlc3Npb25GaW5pc2hlcygoKSA9PiB7XG4gICAgICAgICAgb25TeW5jQ29tcGxldGUoKTtcbiAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBzZXNzaW9uID0gbmV3IFN5bmNocm9uaXNlSW50ZXJhY3Rpb25Db250ZXh0SWRzV2l0aFJvdXRlKFxuICAgICAgICAgIHRoaXMubmF2aWdhdGlvbkNvbnRleHQsXG4gICAgICAgICAgdGhpcy51cmxTZXJ2aWNlLmdldEN1cnJlbnRSb3V0ZXJVcmwoKSxcbiAgICAgICAgICBmYWxzZVxuICAgICAgICApO1xuICAgICAgICB0aGlzLnRyYW5zaXRpb25UbyhzZXNzaW9uKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdG9WaXNpdChcbiAgICB2aXNpdE9yUGxhY2VDb21wb25lbnQ6IFZpc2l0IHwgQ29uc3RydWN0YWJsZTxQbGFjZUNvbXBvbmVudD4sXG4gICAgcGFyYW1zPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgKSB7XG4gICAgaWYgKHZpc2l0T3JQbGFjZUNvbXBvbmVudCBpbnN0YW5jZW9mIFZpc2l0KSB7XG4gICAgICByZXR1cm4gdmlzaXRPclBsYWNlQ29tcG9uZW50O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gVmlzaXQuZ290byh2aXNpdE9yUGxhY2VDb21wb25lbnQsIHBhcmFtcyk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBuYW1lc3BhY2UgUGxhY2VSb3V0ZXIge1xuXG4gIGV4cG9ydCBpbnRlcmZhY2UgUmVkaXJlY3Rpb25zIHtcbiAgICAvKipcbiAgICAgKiBOT1RFOiBmb3Igbm93IHRoaXMgb25seSBzdXBwb3J0cyB0b3AgbGV2ZWwgcGxhY2VzLiAgU3VwcG9ydCBmb3IgY2hpbGQgcGxhY2VzIHdpbGwgcmVxdWlyZSBhIG1vcmUgZnVuZGFtZW50YWxcbiAgICAgKiBjaGFuZ2UgdG8gdmlzaXRzIHRvIHN1cHBvcnQgbmVzdGluZ1xuICAgICAqL1xuICAgIG9uQXV0aGVudGljYXRpb25GYWlsdXJlKGFjdGl2YXRlZFJvdXRlPzogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCwgc3RhdGU/OiBSb3V0ZXJTdGF0ZVNuYXBzaG90KTogVmlzaXQgfCBDb25zdHJ1Y3RhYmxlPFBsYWNlQ29tcG9uZW50PjtcblxuICAgIC8qKlxuICAgICAqIE5PVEU6IGZvciBub3cgdGhpcyBvbmx5IHN1cHBvcnRzIHRvcCBsZXZlbCBwbGFjZXMuICBTdXBwb3J0IGZvciBjaGlsZCBwbGFjZXMgd2lsbCByZXF1aXJlIGEgbW9yZSBmdW5kYW1lbnRhbFxuICAgICAqIGNoYW5nZSB0byB2aXNpdHMgdG8gc3VwcG9ydCBuZXN0aW5nXG4gICAgICogQHBhcmFtIGNvbXBvbmVudFxuICAgICAqL1xuICAgIG9uQXV0aG9yaXNhdGlvbkZhaWx1cmUoY29tcG9uZW50OiBDb25zdHJ1Y3RhYmxlPFBsYWNlQ29tcG9uZW50Pik6IChDb25zdHJ1Y3RhYmxlPFBsYWNlQ29tcG9uZW50PiB8IFZpc2l0KVtdO1xuICB9XG59XG4iXX0=
|
|
468
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxhY2Utcm91dGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLXVpLXBvd2VydXBzL3NyYy9saWIvcGxhY2UvcGxhY2Utcm91dGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QyxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFFTCxnQkFBZ0IsRUFDaEIsYUFBYSxFQUNiLGVBQWUsRUFFZixlQUFlLEVBQ2YsTUFBTSxFQUVQLE1BQU0saUJBQWlCLENBQUM7QUFDekIsT0FBTyxFQUNMLE1BQU0sRUFDTixZQUFZLEVBQUUsb0JBQW9CLEVBQ2xDLEdBQUcsRUFDSCxnQkFBZ0IsRUFFaEIsTUFBTSxFQUNOLGlCQUFpQixFQUNqQixvQkFBb0IsRUFLckIsTUFBTSxnQkFBZ0IsQ0FBQztBQUl4QixPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSw2Q0FBNkMsQ0FBQztBQUMvRSxPQUFPLEVBQUMsMkJBQTJCLEVBQUMsTUFBTSxpRUFBaUUsQ0FBQztBQUM1RyxPQUFPLEVBQUMsbUNBQW1DLEVBQUMsTUFBTSwyRUFBMkUsQ0FBQztBQUM5SCxPQUFPLEVBQUMseUNBQXlDLEVBQUMsTUFBTSxrRkFBa0YsQ0FBQztBQUMzSSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0saUNBQWlDLENBQUM7QUFDM0QsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0seUNBQXlDLENBQUM7QUFFMUUsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sMkNBQTJDLENBQUM7QUFDN0UsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFFdEQsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFDcEQsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGlCQUFpQixD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WUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzdCLENBQUMsQ0FBQyxDQUFDO1NBQ0o7SUFDSCxDQUFDO0lBRU8sT0FBTyxDQUNiLHFCQUE0RCxFQUM1RCxNQUFnQztRQUVoQyxJQUFJLHFCQUFxQixZQUFZLEtBQUssRUFBRTtZQUMxQyxPQUFPLHFCQUFxQixDQUFDO1NBQzlCO2FBQU07WUFDTCxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMscUJBQXFCLEVBQUUsTUFBTSxDQUFDLENBQUM7U0FDbEQ7SUFDSCxDQUFDO3VHQTVqQlUsV0FBVzsyR0FBWCxXQUFXLGNBRlYsTUFBTTs7MkZBRVAsV0FBVztrQkFIdkIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0xvY2F0aW9ufSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uXCI7XG5pbXBvcnQge0luamVjdGFibGV9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQge1xuICBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LFxuICBOYXZpZ2F0aW9uQ2FuY2VsLFxuICBOYXZpZ2F0aW9uRW5kLFxuICBOYXZpZ2F0aW9uRXJyb3IsXG4gIE5hdmlnYXRpb25FeHRyYXMsXG4gIE5hdmlnYXRpb25TdGFydCxcbiAgUm91dGVyLFxuICBSb3V0ZXJTdGF0ZVNuYXBzaG90XG59IGZyb20gXCJAYW5ndWxhci9yb3V0ZXJcIjtcbmltcG9ydCB7XG4gIGFzc2VydCxcbiAgRGVidWdDb250ZXh0LCBEZWxlZ2F0aW5nVmFsdWVNb2RlbCwgRGlzcG9zYWJsZSwgRGlzcG9zZWRXaXRoLFxuICBEc2wsXG4gIEdhcmJhZ2VDb2xsZWN0b3IsXG4gIExpc3RNb2RlbCxcbiAgTG9nZ2VyLFxuICBNdXRhYmxlVmFsdWVNb2RlbCxcbiAgU2luZ2xlU2VsZWN0aW9uTW9kZWwsXG4gIFRyYW5zYWN0aW9uLFxuICBUcmFuc2FjdGlvbk9ic2VydmVyLFxuICBWYWx1ZU1vZGVsLFxuICBWYWx1ZU1vZGVsQ2hhaW5cbn0gZnJvbSAnQGNvb2xvbi9wZWN0aW4nO1xuaW1wb3J0IHtDb25zdHJ1Y3RhYmxlfSBmcm9tIFwiQGNvb2xvbi90eXBlc2NyaXB0LXV0aWxpdGllc1wiO1xuaW1wb3J0IHR5cGUge0Rpc3Bvc2FibGVDb21wb25lbnR9IGZyb20gJy4uL2NvbXBvbmVudHMvZGlzcG9zYWJsZS1jb21wb25lbnQnO1xuaW1wb3J0IHR5cGUge0ludGVyYWN0aW9uU2VydmljZVJvdXRpbmdBZGFwdGVyfSBmcm9tIFwiLi4vaW50ZXJhY3Rpb24vc2VydmljZXMvaW50ZXJhY3Rpb24tc2VydmljZS1yb3V0aW5nLWFkYXB0ZXJcIjtcbmltcG9ydCB7SW50ZXJhY3Rpb25TZXJ2aWNlfSBmcm9tIFwiLi4vaW50ZXJhY3Rpb24vc2VydmljZXMvaW50ZXJhY3Rpb24uc2VydmljZVwiO1xuaW1wb3J0IHtOYXZpZ2F0aW5nRHVyaW5nSW50ZXJhY3Rpb259IGZyb20gXCIuL25hdmlnYXRpb24vc2Vzc2lvbi9pbnRlcmFjdGlvbnMvbmF2aWdhdGluZy1kdXJpbmctaW50ZXJhY3Rpb25cIjtcbmltcG9ydCB7UG9wU3RhdGVEdXJpbmdJbnRlcmFjdGlvbk5hdmlnYXRpb259IGZyb20gXCIuL25hdmlnYXRpb24vc2Vzc2lvbi9pbnRlcmFjdGlvbnMvcG9wLXN0YXRlLWR1cmluZy1pbnRlcmFjdGlvbi1uYXZpZ2F0aW9uXCI7XG5pbXBvcnQge1N5bmNocm9uaXNlSW50ZXJhY3Rpb25Db250ZXh0SWRzV2l0aFJvdXRlfSBmcm9tIFwiLi9uYXZpZ2F0aW9uL3Nlc3Npb24vaW50ZXJhY3Rpb25zL3N5bmNocm9uaXNlLWludGVyYWN0aW9uLWNvbnRleHQtaWRzLXdpdGgtcm91dGVcIjtcbmltcG9ydCB7TmF2aWdhdGluZ30gZnJvbSBcIi4vbmF2aWdhdGlvbi9zZXNzaW9uL25hdmlnYXRpbmdcIjtcbmltcG9ydCB7TmF2aWdhdGlvbkNvbnRleHR9IGZyb20gXCIuL25hdmlnYXRpb24vc2Vzc2lvbi9uYXZpZ2F0aW9uLWNvbnRleHRcIjtcbmltcG9ydCB0eXBlIHtOYXZpZ2F0aW9uU2Vzc2lvbn0gZnJvbSBcIi4vbmF2aWdhdGlvbi9zZXNzaW9uL25hdmlnYXRpb24tc2Vzc2lvblwiO1xuaW1wb3J0IHtQb3BTdGF0ZU5hdmlnYXRpb259IGZyb20gXCIuL25hdmlnYXRpb24vc2Vzc2lvbi9wb3Atc3RhdGUtbmF2aWdhdGlvblwiO1xuaW1wb3J0IHtQbGFjZUF1dGhTZXJ2aWNlfSBmcm9tIFwiLi9wbGFjZS1hdXRoLXNlcnZpY2VcIjtcbmltcG9ydCB0eXBlIHtQbGFjZUNvbXBvbmVudH0gZnJvbSBcIi4vcGxhY2UtY29tcG9uZW50XCI7XG5pbXBvcnQge2dldFBsYWNlRGVmaW5pdGlvbn0gZnJvbSBcIi4vcGxhY2UtbWV0YWRhdGFcIjtcbmltcG9ydCB7UGxhY2VIaXN0b3J5fSBmcm9tIFwiLi9wbGFjZS1oaXN0b3J5XCI7XG5pbXBvcnQge1VybFNlcnZpY2V9IGZyb20gXCIuL3VybC1zZXJ2aWNlXCI7XG5pbXBvcnQgdHlwZSB7VXJsU25hcHNob3R9IGZyb20gXCIuL3VybC1zbmFwc2hvdFwiO1xuaW1wb3J0IHtWaXNpdH0gZnJvbSBcIi4vdmlzaXRcIjtcbmltcG9ydCB0eXBlIHtWaXNpdFNlZ21lbnR9IGZyb20gXCIuL3Zpc2l0LXNlZ21lbnRcIjtcblxuLy8gZnVuY3Rpb24gYXNBcnJheTxUPihpdGVtOiBUIHwgVFtdKTogVFtdIHtcbi8vICAgcmV0dXJuIEFycmF5LmlzQXJyYXkoaXRlbSkgPyBpdGVtIDogW2l0ZW1dO1xuLy8gfVxuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgUGxhY2VSb3V0ZXIgZXh0ZW5kcyBHYXJiYWdlQ29sbGVjdG9yIHtcbiAgcmVhZG9ubHkgbmF2aWdhdGlvblNlc3Npb24kID0gbmV3IE11dGFibGVWYWx1ZU1vZGVsPE5hdmlnYXRpb25TZXNzaW9uPigpO1xuICByZWFkb25seSBuYXZpZ2F0aW9uSW5Qcm9ncmVzcyQ6IFZhbHVlTW9kZWxDaGFpbjxib29sZWFuPjtcbiAgcmVhZG9ubHkgbmF2aWdhdGlvblNlc3Npb25OYW1lJDogVmFsdWVNb2RlbENoYWluPHN0cmluZz47IC8vIHVzZWQgYnkgdGVzdHNcbiAgcmVhZG9ubHkgaW50ZXJhY3Rpb25TeW5jSW5Qcm9ncmVzcyQ6IFZhbHVlTW9kZWw8Ym9vbGVhbj47XG5cbiAgcHJpdmF0ZSByZWFkb25seSBuYXZpZ2F0aW9uQ29udGV4dDogTmF2aWdhdGlvbkNvbnRleHQuSW1wbDtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9hY3RpdmVWaXNpdCQgPSBuZXcgTXV0YWJsZVZhbHVlTW9kZWw8VmlzaXQ+KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgcm91dGVySW50ZXJhY3Rpb25BZGFwdGVyOiBJbnRlcmFjdGlvblNlcnZpY2VSb3V0aW5nQWRhcHRlcjtcbiAgcHJpdmF0ZSBzZXNzaW9uRmluaXNoZWRKb2JzOiAoKCkgPT4gdm9pZClbXSA9IFtdO1xuXG4gIC8vIFByZWRpY2F0ZXMgdGhhdCwgZ2l2ZW4gdGhlIG9yaWdpbmF0aW5nIGNoYW5nZSdzIHRyYW5zYWN0aW9uIG1ldGFkYXRhLCBkZWNpZGUgYW4gaW4tcGxhY2VcbiAgLy8gcGFyYW1ldGVyIGNoYW5nZSBzaG91bGQgcmVwbGFjZSByYXRoZXIgdGhhbiBwdXNoIGEgaGlzdG9yeSBlbnRyeS4gVGhlIHJvdXRlciBpdHNlbGYgc3RheXNcbiAgLy8gYWdub3N0aWMgYWJvdXQgd2hhdCB0aGUgbWV0YWRhdGEgbWVhbnMgLSBwcm9kdWNlcnMgKGUuZy4gU2luZ2xlU2VsZWN0aW9uTW9kZWwgY29ycmVjdGlvbnMpIHRhZ1xuICAvLyB0aGUgdHJhbnNhY3Rpb24gYW5kIHJlZ2lzdGVyIGEgcHJlZGljYXRlIGhlcmUuIFNlZSBza2lwSGlzdG9yeUlmIC8gbm90aWZ5VmlzaXRTZWdtZW50Q2hhbmdlZC5cbiAgcHJpdmF0ZSByZWFkb25seSBza2lwSGlzdG9yeVByZWRpY2F0ZXM6IEFycmF5PChtZXRhZGF0YTogVHJhbnNhY3Rpb24uTWV0YURhdGEpID0+IGJvb2xlYW4+ID0gW107XG5cbiAgLy8gQSBuYXZpZ2F0aW9uIHRyaWdnZXJlZCB3aGlsZSBhbiBpbnRlcnJ1cHRpYmxlIHNlc3Npb24gaXMgaW4gZmxpZ2h0IGlzIHBhcmtlZCBoZXJlIGFuZCBydW4gd2hlblxuICAvLyB0aGF0IHNlc3Npb24gZmluaXNoZXMuIE9ubHkgdGhlIG1vc3QgcmVjZW50IHBlbmRpbmcgbmF2aWdhdGlvbiBpcyByZXRhaW5lZCAoY29hbGVzY2luZykuXG4gIHByaXZhdGUgcGVuZGluZ05hdmlnYXRpb24/OiB7XG4gICAgcmVhZG9ubHkgdmlzaXQ6IFZpc2l0O1xuICAgIHJlYWRvbmx5IHJ1bk5hdmlnYXRpb25Db21tYW5kczogKHJvdXRlcjogUm91dGVyKSA9PiB1bmtub3duO1xuICAgIHJlYWRvbmx5IHJlc29sdmU6ICgpID0+IHZvaWQ7XG4gICAgcmVhZG9ubHkgcmVqZWN0OiAocmVhc29uPzogdW5rbm93bikgPT4gdm9pZDtcbiAgfTtcbiAgcHJpdmF0ZSBxdWV1ZWROYXZpZ2F0aW9uRGVwdGggPSAwO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBNQVhfUVVFVUVEX05BVklHQVRJT05fREVQVEggPSA1O1xuXG4gIHJlYWRvbmx5IGF1dGhTZXJ2aWNlID0gbmV3IFBsYWNlQXV0aFNlcnZpY2UoKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkeSQgPSB0aGlzLnJlZ2lzdGVyRGlzcG9zYWJsZShcbiAgICBuZXcgRGVsZWdhdGluZ1ZhbHVlTW9kZWw8Ym9vbGVhbj4oKS53aXRoRGVmYXVsdCh0cnVlKVxuICApO1xuICByZWFkb25seSByZWFkeSQgPSB0aGlzLl9yZWFkeSQucmVhZG9ubHkkO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgYW5ndWxhclJvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgYW5ndWxhckxvY2F0aW9uOiBMb2NhdGlvbixcbiAgICBwcml2YXRlIHJlYWRvbmx5IGludGVyYWN0aW9uU2VydmljZTogSW50ZXJhY3Rpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgdXJsU2VydmljZTogVXJsU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHBsYWNlSGlzdG9yeTogUGxhY2VIaXN0b3J5XG4gICkge1xuICAgIHN1cGVyKCk7XG5cbiAgICBpZiAod2luZG93WydDeXByZXNzJ10pIHtcbiAgICAgIHdpbmRvd1snYXVwLlBsYWNlUm91dGVyJ10gPSB0aGlzO1xuICAgIH1cblxuICAgIHRoaXMucm91dGVySW50ZXJhY3Rpb25BZGFwdGVyID1cbiAgICAgIGludGVyYWN0aW9uU2VydmljZS5yZWdpc3RlclBsYWNlUm91dGVyKHRoaXMpO1xuXG4gICAgLy8gVE9ETzogTWFrZSB0aGlzIGFuIGludGVyZmFjZSBhbmQgdXNlICd0aGlzJyBpbnN0ZWFkLlxuICAgIHRoaXMubmF2aWdhdGlvbkNvbnRleHQgPSBuZXcgTmF2aWdhdGlvbkNvbnRleHQuSW1wbChcbiAgICAgIHRoaXMudXJsU2VydmljZSxcbiAgICAgIHRoaXMucm91dGVySW50ZXJhY3Rpb25BZGFwdGVyLFxuICAgICAgKHVybFNuYXBzaG90OiBVcmxTbmFwc2hvdCwgb3B0aW9uczogeyByZXBsYWNlVXJsOiBib29sZWFuIH0pID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmF2aWdhdGVCeVVybCh1cmxTbmFwc2hvdCwgb3B0aW9ucyk7XG4gICAgICB9LFxuICAgICAgKHN0YXRlKSA9PiB7XG4gICAgICAgIHRoaXMudHJhbnNpdGlvblRvKHN0YXRlKTtcbiAgICAgIH0sXG4gICAgICAoc2VnbWVudHMpID0+IHtcbiAgICAgICAgdGhpcy5yb3V0aW5nU2Vzc2lvbkZpbmlzaGVkKHNlZ21lbnRzKTtcbiAgICAgIH0sXG4gICAgICAodmlzaXQpID0+IHtcbiAgICAgICAgdGhpcy5yZWNvcmRGaW5pc2hlZFZpc2l0KHZpc2l0KTtcbiAgICAgIH0sXG4gICAgICAoKSA9PiB0aGlzLmFjdGl2ZVZpc2l0JC52YWx1ZVxuICAgICk7XG5cbiAgICBjb25zdCB7IGNoYWluIH0gPSBEc2wuZGlzcG9zZVdpdGgodGhpcyk7XG4gICAgdGhpcy5uYXZpZ2F0aW9uSW5Qcm9ncmVzcyQgPSBjaGFpbih0aGlzLm5hdmlnYXRpb25TZXNzaW9uJCkuaXNOb3ROaWwoKTtcbiAgICB0aGlzLmludGVyYWN0aW9uU3luY0luUHJvZ3Jlc3MkID0gY2hhaW4odGhpcy5uYXZpZ2F0aW9uU2Vzc2lvbiQpXG4gICAgICAucGx1Y2soJ2lzSW50ZXJhY3Rpb25TeW5jJylcbiAgICAgIC5vdGhlcndpc2UoZmFsc2UpO1xuXG4gICAgY29uc3QgaWRsZVN0YXRlTmFtZSA9IGNoYWluKHRoaXMuaW50ZXJhY3Rpb25TZXJ2aWNlLmFjdGl2ZSkubWFwKChhY3RpdmUpID0+XG4gICAgICBhY3RpdmUgPyAnSWRsZUR1cmluZ0ludGVyYWN0aW9uJyA6ICdJZGxlJ1xuICAgICk7XG4gICAgdGhpcy5uYXZpZ2F0aW9uU2Vzc2lvbk5hbWUkID0gY2hhaW4odGhpcy5uYXZpZ2F0aW9uU2Vzc2lvbiQpXG4gICAgICAucGx1Y2soJ25hbWUnKVxuICAgICAgLm90aGVyd2lzZShpZGxlU3RhdGVOYW1lKTtcblxuICAgIERlYnVnQ29udGV4dC50YWcodGhpcy5fYWN0aXZlVmlzaXQkLCAnUGxhY2VSb3V0ZXIuYWN0aXZlVmlzaXQnKTtcblxuICAgIC8vIFRPRE86IG1ha2Ugc2V0dXAgdGhlIGNhbGxiYWNrcyBpbiBkdXJpbmcgbW9kdWxlIGluaXRpYXRpb24gdG8gbWFrZSB0aGlzIHRlc3RhYmxlLlxuICAgIGFuZ3VsYXJSb3V0ZXIuZXZlbnRzLnN1YnNjcmliZSgoZXZlbnQpID0+IHtcbiAgICAgIC8vIFJvdXRpbmcgZXZlbnQgc2VxdWVuY2VcbiAgICAgIC8vID09PT09PT09PT09PT09PT09PT09PT1cbiAgICAgIC8vIE5hdmlnYXRpb25TdGFydCAtPiAuLi4uIC0+IE5hdmlnYXRpb25DYW5jZWwgLS0+IHJlZGlyZWN0LCBnbyBhcm91bmQgYWdhaW4gaW4gdGhlIHNhbWUgc2Vzc2lvblxuICAgICAgLy8gTmF2aWdhdGlvblN0YXJ0IC0+IC4uLi4gLT4gTmF2aWdhdGlvbkVuZCAtLT4gbmF2aWdhdGlvbiBjb21wbGV0ZSwgZW5kIHNlc3Npb24uXG4gICAgICAvLyBOYXZpZ2F0aW9uU3RhcnQgLT4gLi4uLiAtPiBOYXZpZ2F0aW9uRXJyb3IgLS0+IG5hdmlnYXRpb24gYWJvcnRlZCwgZW5kIHNlc3Npb24uXG4gICAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PVxuICAgICAgaWYgKGV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvblN0YXJ0KSB7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGAtLS0+IE5hdmlnYXRpb25TdGFydFske2V2ZW50LmlkfV06ICR7ZXZlbnQudXJsfSAoJHtldmVudC5uYXZpZ2F0aW9uVHJpZ2dlcn0pYCk7XG4gICAgICAgIGlmIChldmVudC5uYXZpZ2F0aW9uVHJpZ2dlciA9PT0gJ3BvcHN0YXRlJykge1xuICAgICAgICAgIHRoaXMub25Qb3BTdGF0ZShldmVudCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5vblJvdXRlclN0YXJ0ZWQoZXZlbnQpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGA8LS0tIE5hdmlnYXRpb25TdGFydFske2V2ZW50LmlkfV06ICR7ZXZlbnQudXJsfSAoJHtldmVudC5uYXZpZ2F0aW9uVHJpZ2dlcn0pYCk7XG4gICAgICB9XG4gICAgICBpZiAoZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uRW5kKSB7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGAtLS0+IE5hdmlnYXRpb25FbmRbJHtldmVudC5pZH1dOiAke2V2ZW50LnVybH1gKTtcbiAgICAgICAgdGhpcy5vblJvdXRlckVuZChldmVudCk7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGA8LS0tIE5hdmlnYXRpb25FbmRbJHtldmVudC5pZH1dOiAke2V2ZW50LnVybH1gKTtcbiAgICAgIH1cbiAgICAgIGlmIChldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25FcnJvcikge1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhgLS0tPiBOYXZpZ2F0aW9uRXJyb3JbJHtldmVudC5pZH1dOiAke2V2ZW50LnVybH1gKTtcbiAgICAgICAgdGhpcy5vblJvdXRlckVycm9yKGV2ZW50KTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coYDwtLS0gTmF2aWdhdGlvbkVycm9yWyR7ZXZlbnQuaWR9XTogJHtldmVudC51cmx9YCk7XG4gICAgICB9XG4gICAgICBpZiAoZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uQ2FuY2VsKSB7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGAtLS0+IE5hdmlnYXRpb25DYW5jZWxbJHtldmVudC5pZH1dOiAke2V2ZW50LnVybH1gKTtcbiAgICAgICAgdGhpcy5vblJvdXRlckNhbmNlbGxlZChldmVudCk7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGA8LS0tIE5hdmlnYXRpb25DYW5jZWxbJHtldmVudC5pZH1dOiAke2V2ZW50LnVybH1gKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIFRoZSByb3V0ZXIgbmVlZHMgdG8ga25vdyBhYm91dCB1cmwgY2hhbmdlcyBhbmQgaW4gc29tZSBjYXNlcyB0aGV5IGFyZSB0aGUgb25seSB3YXkgdGhlIHJvdXRlciBjYW4ga25vdyBpZlxuICAgIC8vIHRoZSBiYWNrIGJ1dHRvbiB3YXMgY2xpY2tlZC5cbiAgICBhbmd1bGFyTG9jYXRpb24ub25VcmxDaGFuZ2UoKHVybCkgPT4gdGhpcy5vblVybENoYW5nZWQodXJsKSk7XG5cbiAgICAvLyBBdXRvbWF0aWMgc2VsZWN0aW9uIGNvcnJlY3Rpb25zIChhdXRvLXNlbGVjdC1maXJzdCAvIHNlbGVjdC1uZWFyZXN0KSB0YWcgdGhlaXIgdHJhbnNhY3Rpb24gc29cbiAgICAvLyB0aGV5IHJlZmluZSB0aGUgVVJMIGluIHBsYWNlIHJhdGhlciB0aGFuIGFjY3J1aW5nIGJhY2stc3RhY2sgZW50cmllcy4gQSBkZWxpYmVyYXRlIHVzZXJcbiAgICAvLyBzZWxlY3QoKSBpcyB1bnRhZ2dlZCBhbmQgdGhlcmVmb3JlIHB1c2hlcyBhIGhpc3RvcnkgZW50cnkuXG4gICAgdGhpcy5za2lwSGlzdG9yeUlmKChtZXRhZGF0YSkgPT4gbWV0YWRhdGEuZ2V0KFNpbmdsZVNlbGVjdGlvbk1vZGVsLkFVVE9fQ09SUkVDVElPTikgPT09IHRydWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVyIGEgcHJlZGljYXRlIHRoYXQgZGVjaWRlcywgZnJvbSB0aGUgb3JpZ2luYXRpbmcgY2hhbmdlJ3MgdHJhbnNhY3Rpb24gbWV0YWRhdGEsIHdoZXRoZXIgYW5cbiAgICogaW4tcGxhY2UgdmlzaXQtcGFyYW1ldGVyIGNoYW5nZSBzaG91bGQgcmVwbGFjZSB0aGUgY3VycmVudCBoaXN0b3J5IGVudHJ5IGluc3RlYWQgb2YgcHVzaGluZyBhIG5ld1xuICAgKiBvbmUuIFVzZSB0aGlzIHRvIHN1cHByZXNzIGhpc3RvcnkgZm9yIHByb2dyYW1tYXRpYy9hdXRvbWF0aWMgY2hhbmdlcyB3aGlsZSBsZWF2aW5nIGRlbGliZXJhdGVcbiAgICogdXNlciBuYXZpZ2F0aW9ucyBhcyBwdXNoZXMuIFJldHVybnMgYSB7QGxpbmsgRGlzcG9zYWJsZX0gdGhhdCByZW1vdmVzIHRoZSBwcmVkaWNhdGUuXG4gICAqL1xuICBza2lwSGlzdG9yeUlmKHByZWRpY2F0ZTogKG1ldGFkYXRhOiBUcmFuc2FjdGlvbi5NZXRhRGF0YSkgPT4gYm9vbGVhbik6IERpc3Bvc2FibGUge1xuICAgIHRoaXMuc2tpcEhpc3RvcnlQcmVkaWNhdGVzLnB1c2gocHJlZGljYXRlKTtcbiAgICByZXR1cm4ge1xuICAgICAgZGlzcG9zZTogKCkgPT4ge1xuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuc2tpcEhpc3RvcnlQcmVkaWNhdGVzLmluZGV4T2YocHJlZGljYXRlKTtcbiAgICAgICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgICAgICB0aGlzLnNraXBIaXN0b3J5UHJlZGljYXRlcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgc2hvdWxkUmVwbGFjZUhpc3RvcnkobWV0YWRhdGE/OiBUcmFuc2FjdGlvbi5NZXRhRGF0YSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIW1ldGFkYXRhICYmIHRoaXMuc2tpcEhpc3RvcnlQcmVkaWNhdGVzLnNvbWUocHJlZGljYXRlID0+IHByZWRpY2F0ZShtZXRhZGF0YSkpO1xuICB9XG5cbiAgcG9zdHBvbmVSb3V0aW5nVW50aWwoY29uZGl0aW9uJDogVmFsdWVNb2RlbDxib29sZWFuPikge1xuICAgIHRoaXMuX3JlYWR5JC5zZXREZWxlZ2F0ZShjb25kaXRpb24kKTtcbiAgfVxuXG4gIGFzeW5jIGdldEF1dGhlbnRpY2F0aW9uRmFpbHVyZVJlZGlyZWN0KFxuICAgIGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LFxuICAgIHN0YXRlOiBSb3V0ZXJTdGF0ZVNuYXBzaG90XG4gICk6IFByb21pc2U8VmlzaXQ+IHtcbiAgICByZXR1cm4gdGhpcy5hdXRoU2VydmljZS5nZXRBdXRoZW50aWNhdGlvbkZhaWx1cmVSZWRpcmVjdChcbiAgICAgIGFjdGl2YXRlZFJvdXRlLFxuICAgICAgc3RhdGVcbiAgICApO1xuICB9XG5cbiAgYXN5bmMgZ2V0QXV0aG9yaXNhdGlvbkZhaWx1cmVSZWRpcmVjdE9wdGlvbnMoXG4gICAgY29tcG9uZW50OiBDb25zdHJ1Y3RhYmxlPFBsYWNlQ29tcG9uZW50PlxuICApOiBQcm9taXNlPFZpc2l0W10+IHtcbiAgICByZXR1cm4gdGhpcy5hdXRoU2VydmljZS5nZXRBdXRob3Jpc2F0aW9uRmFpbHVyZVJlZGlyZWN0T3B0aW9ucyhjb21wb25lbnQpO1xuICB9XG5cbiAgZ2V0IG5hdmlnYXRpb25TZXNzaW9uKCkge1xuICAgIHJldHVybiB0aGlzLm5hdmlnYXRpb25TZXNzaW9uJC52YWx1ZTtcbiAgfVxuXG4gIGdldCBjdXJyZW50U2Vzc2lvbigpIHtcbiAgICByZXR1cm4gdGhpcy5uYXZpZ2F0aW9uU2Vzc2lvbiQudmFsdWU7XG4gIH1cblxuICBpc05hdmlnYXRpbmcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMubmF2aWdhdGlvbkluUHJvZ3Jlc3MkLnZhbHVlO1xuICB9XG5cbiAgYXN5bmMgd2FpdFVudGlsUm91dGVyUmVhZHkoKSB7XG4gICAgY29uc3QgeyB3YWl0VW50aWwgfSA9IERzbC5kaXNwb3NlV2l0aCh0aGlzKTtcbiAgICBhd2FpdCB3YWl0VW50aWwodGhpcy5yZWFkeSQpLmJlY29tZXNUcnV0aHkoKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGFzeW5jIHdhaXRVbnRpbElkbGUoKTogUHJvbWlzZTx0aGlzPiB7XG4gICAgY29uc3QgeyB3YWl0VW50aWwgfSA9IERzbC5kaXNwb3NlV2l0aCh0aGlzKTtcbiAgICBhd2FpdCB3YWl0VW50aWwodGhpcy5uYXZpZ2F0aW9uSW5Qcm9ncmVzcyQpLmJlY29tZXNGYWxzZXkoKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGFzeW5jIHdhaXRBY3Rpdml0aWVzU3luY2hyb25pc2VkKCk6IFByb21pc2U8dGhpcz4ge1xuICAgIGNvbnN0IHsgd2FpdFVudGlsIH0gPSBEc2wuZGlzcG9zZVdpdGgodGhpcyk7XG4gICAgYXdhaXQgd2FpdFVudGlsKHRoaXMuaW50ZXJhY3Rpb25TeW5jSW5Qcm9ncmVzcyQpLmJlY29tZXNGYWxzZXkoKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8vIEBUcmFjZSgpXG4gIG9uUG9wU3RhdGUoZXZlbnQ6IE5hdmlnYXRpb25TdGFydCkge1xuICAgIGFzc2VydC5pc1RydXRoeShldmVudC5uYXZpZ2F0aW9uVHJpZ2dlciA9PT0gJ3BvcHN0YXRlJyk7XG4gICAgaWYgKHRoaXMuY3VycmVudFNlc3Npb24pIHtcbiAgICAgIHRoaXMuY3VycmVudFNlc3Npb24ub25Qb3BTdGF0ZShldmVudCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHBvcHBlZEhpc3RvcnlVcmwgPSBldmVudC51cmw7XG4gICAgICBjb25zdCBjdXJyZW50Um91dGVyVXJsID0gdGhpcy51cmxTZXJ2aWNlLmdldEN1cnJlbnRSb3V0ZXJVcmwoKTtcbiAgICAgIGNvbnN0IHNlc3Npb24gPSB0aGlzLmludGVyYWN0aW9uU2VydmljZS5pc0FjdGl2ZSgpXG4gICAgICAgID8gbmV3IFBvcFN0YXRlRHVyaW5nSW50ZXJhY3Rpb25OYXZpZ2F0aW9uKFxuICAgICAgICAgICAgdGhpcy5uYXZpZ2F0aW9uQ29udGV4dCxcbiAgICAgICAgICAgIGN1cnJlbnRSb3V0ZXJVcmwsXG4gICAgICAgICAgICBwb3BwZWRIaXN0b3J5VXJsXG4gICAgICAgICAgKVxuICAgICAgICA6IG5ldyBQb3BTdGF0ZU5hdmlnYXRpb24oXG4gICAgICAgICAgICB0aGlzLm5hdmlnYXRpb25Db250ZXh0LFxuICAgICAgICAgICAgY3VycmVudFJvdXRlclVybCxcbiAgICAgICAgICAgIHBvcHBlZEhpc3RvcnlVcmxcbiAgICAgICAgICApO1xuICAgICAgdGhpcy50cmFuc2l0aW9uVG8oc2Vzc2lvbik7XG4gICAgfVxuICB9XG5cbiAgLy8gQFRyYWNlKClcbiAgb25Sb3V0ZXJTdGFydGVkKGV2ZW50OiBOYXZpZ2F0aW9uU3RhcnQpIHtcbiAgICBhc3NlcnQuaXNGYWxzZXkoZXZlbnQubmF2aWdhdGlvblRyaWdnZXIgPT09ICdwb3BzdGF0ZScpO1xuICAgIC8vIGNvbnN0IGluSW50ZXJhY3Rpb24gPSB0aGlzLmludGVyYWN0aW9uU2VydmljZS5pc0FjdGl2ZSgpO1xuICAgIGlmICh0aGlzLmN1cnJlbnRTZXNzaW9uKSB7XG4gICAgICB0aGlzLmN1cnJlbnRTZXNzaW9uLm9uUm91dGVyU3RhcnRlZChldmVudCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudHJhbnNpdGlvblRvKFxuICAgICAgICB0aGlzLmNyZWF0ZU5hdmlnYXRpb25TZXNzaW9uKHRoaXMudXJsU2VydmljZS5nZXRDdXJyZW50Um91dGVyVXJsKCkpXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8vIEBUcmFjZSgpXG4gIG9uVXJsQ2hhbmdlZChuZXdVcmw6IHN0cmluZykge1xuICAgIC8vIHRoZSBiYWNrIGJ1dHRvbiBjYW4gdHJpZ2dlciBhIHVybCBjaGFuZ2Ugd2l0aG91dCBhIG5hdmlnYXRpb24gc2Vzc2lvbiBpbiBwcm9ncmVzcyBzbyB3ZVxuICAgIC8vIGNvbnNvbGUubG9nKGAtLS0+IFVybCBDaGFuZ2VkICR7bmV3VXJsfWApO1xuICAgIGlmICh0aGlzLmN1cnJlbnRTZXNzaW9uKSB7XG4gICAgICB0aGlzLmN1cnJlbnRTZXNzaW9uLm9uVXJsQ2hhbmdlKG5ld1VybCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUubG9nKCdGWUk6IHVybCBjaGFuZ2VkIHdpdGhvdXQgYSBuYXZpZ2F0aW9uIHNlc3Npb24gaW4gcHJvZ3Jlc3MnKTtcbiAgICB9XG4gICAgLy8gY29uc29sZS5sb2coYDwtLS0gVXJsIENoYW5nZWRgKTtcbiAgfVxuXG4gIC8vIEBUcmFjZSgpXG4gIG9uUm91dGVyQ2FuY2VsbGVkKGV2ZW50OiBOYXZpZ2F0aW9uQ2FuY2VsKSB7XG4gICAgdGhpcy5jdXJyZW50U2Vzc2lvbi5vblJvdXRlckNhbmNlbGxlZChldmVudCk7XG4gIH1cblxuICAvLyBAVHJhY2UoKVxuICBvblJvdXRlckVycm9yKGV2ZW50OiBOYXZpZ2F0aW9uRXJyb3IpIHtcbiAgICB0aGlzLmN1cnJlbnRTZXNzaW9uLm9uUm91dGVyRXJyb3IoZXZlbnQpO1xuICB9XG5cbiAgLy8gQFRyYWNlKClcbiAgb25Sb3V0ZXJFbmQoZXZlbnQ6IE5hdmlnYXRpb25FbmQpIHtcbiAgICB0aGlzLmN1cnJlbnRTZXNzaW9uLm9uUm91dGVyRW5kKGV2ZW50KTtcbiAgfVxuXG4gIGFzeW5jIG5hdmlnYXRlKHZpc2l0OiBWaXNpdCk7XG4gIGFzeW5jIG5hdmlnYXRlKFxuICAgIHBsYWNlQ29tcG9uZW50OiBDb25zdHJ1Y3RhYmxlPFBsYWNlQ29tcG9uZW50PixcbiAgICBwYXJhbXM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICApO1xuICBhc3luYyBuYXZpZ2F0ZShcbiAgICB2aXNpdE9yUGxhY2VDb21wb25lbnQ6IFZpc2l0IHwgQ29uc3RydWN0YWJsZTxQbGFjZUNvbXBvbmVudD4sXG4gICAgcGFyYW1zPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgKSB7XG4gICAgY29uc3QgdmlzaXQgPSB0aGlzLnRvVmlzaXQoXG4gICAgICB2aXNpdE9yUGxhY2VDb21wb25lbnQsXG4gICAgICBwYXJhbXNcbiAgICApLmNvcHlXaXRoRGVmYXVsdHNGcm9tKHRoaXMuYWN0aXZlVmlzaXQkLnZhbHVlKTtcbiAgICByZXR1cm4gdGhpcy5kb05hdmlnYXRpb24odmlzaXQsIGFzeW5jICgpID0+IHtcbiAgICAgIGF3YWl0IHRoaXMuYW5ndWxhclJvdXRlci5uYXZpZ2F0ZSh2aXNpdC5nZXRSb3V0ZXJDb21tYW5kcygpKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIEBUcmFjZSgpXG4gIGFzeW5jIGRvTmF2aWdhdGlvbihcbiAgICB2aXNpdDogVmlzaXQsXG4gICAgcnVuTmF2aWdhdGlvbkNvbW1hbmRzOiAocm91dGVyOiBSb3V0ZXIpID0+IHVua25vd25cbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMubmF2aWdhdGlvbkluUHJvZ3Jlc3MkLnZhbHVlKSB7XG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVPdmVybGFwcGluZ05hdmlnYXRpb24odmlzaXQsIHJ1bk5hdmlnYXRpb25Db21tYW5kcyk7XG4gICAgfVxuICAgIGNvbnN0IG5hdmlnYXRpb24gPSB0aGlzLmNyZWF0ZU5hdmlnYXRpb25TZXNzaW9uKFxuICAgICAgdGhpcy51cmxTZXJ2aWNlLmdldEN1cnJlbnRSb3V0ZXJVcmwoKVxuICAgICk7XG4gICAgbmF2aWdhdGlvbi5pbml0aWFsaXNlVmlzaXRTZWdtZW50cyh2aXNpdCk7XG4gICAgdGhpcy50cmFuc2l0aW9uVG8obmF2aWdhdGlvbik7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHJ1bk5hdmlnYXRpb25Db21tYW5kcyh0aGlzLmFuZ3VsYXJSb3V0ZXIpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICAvLyBDaGVjayBpZiB0aGUgcm91dGVyIGhhcyBmaW5pc2hlZCAoaW4gdGhlIGNhc2Ugd2hlcmUgbm8gcm91dGVyIGNoYW5nZSByZXF1aXJlZCkgYW5kIHdlJ3JlIHN0aWxsIGluICBhXG4gICAgICAvLyB0cmFuc2llbnQgc3RhdGUgYW5kIGZpbmlzaCBvZiB0aGUgdHJhbnNpdGlvbi5cbiAgICAgIGlmICghdGhpcy5hbmd1bGFyUm91dGVyLmdldEN1cnJlbnROYXZpZ2F0aW9uKCkgJiYgdGhpcy5jdXJyZW50U2Vzc2lvbikge1xuICAgICAgICB0aGlzLmN1cnJlbnRTZXNzaW9uLm9uUm91dGVyRW5kKFxuICAgICAgICAgIG5ldyBOYXZpZ2F0aW9uRW5kKC0xLCAnJywgdGhpcy51cmxTZXJ2aWNlLmdldEN1cnJlbnRSb3V0ZXJVcmwoKSlcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlcyBhIG5hdmlnYXRpb24gdHJpZ2dlcmVkIHdoaWxlIGFub3RoZXIgaXMgYWxyZWFkeSBpbiBmbGlnaHQ6IHF1ZXVlIGl0IChjb2FsZXNjaW5nIHRvIHRoZVxuICAgKiBsYXRlc3QpIGFuZCBydW4gaXQgb25jZSB0aGUgaW4tZmxpZ2h0IHNlc3Npb24gZmluaXNoZXMuXG4gICAqXG4gICAqIEhpc3Rvcnk6IHRoaXMgdXNlZCB0byB0aHJvdyBgaWxsZWdhbFN0YXRlKCdOYXZpZ2F0aW9uIGFscmVhZHkgaW4gcHJvZ3Jlc3MnKWAgKGtpbGxlZCB0aGVcbiAgICogdHJpZ2dlcmluZyBhY3Rpb24pLCB0aGVuIGRyb3BwZWQgcmVhbC12cy1yZWFsIGNvbGxpc2lvbnMgYXMgYW4gaW50ZXJpbSBwb2xpY3kgcGVuZGluZ1xuICAgKiBwcm9kdWN0aW9uIGV2aWRlbmNlLiBUaGUgZXZpZGVuY2UgYXJyaXZlZDogYSBgbmF2aWdhdGUoKWAgaXNzdWVkIGZyb20gYG9uUGxhY2VSZWFkeWAgb3IgYVxuICAgKiByb3V0ZS1wYXJhbWV0ZXIgc3Vic2NyaXB0aW9uIGNhbiBsYW5kIHdoaWxlIHRoZSBhY3RpdmF0aW5nIG5hdmlnYXRpb24ncyBzZXNzaW9uIGlzIHN0aWxsXG4gICAqIHNldHRsaW5nIOKAlCBkcm9wcGluZyBpdCBsZWF2ZXMgYSBwbGFjZSB0aGF0IG5ldmVyIGZpbmlzaGVzIG5hdmlnYXRpbmcgKGUuZy4gYVxuICAgKiByZWRpcmVjdFRvRmlyc3RDaGlsZC1zdHlsZSBjaGlsZCB0aGF0IG5ldmVyIGFwcGVhcnMpLCBhbmQgdGhlIGNhbGxlciBjYW4ndCB0ZWxsIGJlY2F1c2UgdGhlXG4gICAqIGRyb3BwZWQgcHJvbWlzZSByZXNvbHZlZCBub3JtYWxseS4gUG9wc3RhdGUgbmV2ZXIgZW50ZXJzIGRvTmF2aWdhdGlvbiAoaXQgYXJyaXZlcyB2aWEgcm91dGVyXG4gICAqIGV2ZW50cyAtPiBvblBvcFN0YXRlKSwgc28gcXVldWVpbmcgcHJvZ3JhbW1hdGljIG5hdmlnYXRpb25zIGJlaGluZCBhbiBpbi1mbGlnaHQgc2Vzc2lvblxuICAgKiBwcmVzZXJ2ZXMgdXNlci1pbnRlbnQgb3JkZXJpbmcuXG4gICAqL1xuICBwcml2YXRlIGhhbmRsZU92ZXJsYXBwaW5nTmF2aWdhdGlvbihcbiAgICB2aXNpdDogVmlzaXQsXG4gICAgcnVuTmF2aWdhdGlvbkNvbW1hbmRzOiAocm91dGVyOiBSb3V0ZXIpID0+IHVua25vd25cbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgY3VycmVudCA9IHRoaXMubmF2aWdhdGlvblNlc3Npb247XG4gICAgY29uc3QgZGVidWcgPSB7XG4gICAgICBpblByb2dyZXNzOiB7XG4gICAgICAgIHNlc3Npb246IGN1cnJlbnQ/Lm5hbWUsXG4gICAgICAgIHN0YXRlOiBjdXJyZW50Py50b1N0cmluZygpLFxuICAgICAgICBpc0ludGVyYWN0aW9uU3luYzogY3VycmVudD8uaXNJbnRlcmFjdGlvblN5bmMsXG4gICAgICAgIGlzSW50ZXJydXB0aWJsZTogY3VycmVudD8uaXNJbnRlcnJ1cHRpYmxlLFxuICAgICAgICBpc1BvcFN0YXRlOiBjdXJyZW50Py5pc1BvcFN0YXRlLFxuICAgICAgICBzZWdtZW50czogY3VycmVudD8uZ2V0VmlzaXRTZWdtZW50cygpLm1hcChzID0+IHMudG9EZWJ1Z1N0cmluZygpKSxcbiAgICAgIH0sXG4gICAgICBpbmNvbWluZzogdmlzaXQ/LnRvRGVidWdTdHJpbmcoKSxcbiAgICAgIGN1cnJlbnRVcmw6IHRoaXMudXJsU2VydmljZS5nZXRDdXJyZW50Um91dGVyVXJsKCksXG4gICAgfTtcblxuICAgIExvZ2dlci5nZXQodGhpcykud2FybihcbiAgICAgIGBOYXZpZ2F0aW9uIHRyaWdnZXJlZCB3aGlsZSBzZXNzaW9uICcke2N1cnJlbnQ/Lm5hbWV9JyBpcyBpbiBwcm9ncmVzczsgYCArXG4gICAgICAgIGBxdWV1ZWluZyB0aGUgaW5jb21pbmcgbmF2aWdhdGlvbiB0byBydW4gb25jZSBpdCBmaW5pc2hlcy5gLFxuICAgICAgZGVidWdcbiAgICApO1xuICAgIHJldHVybiB0aGlzLnF1ZXVlTmF2aWdhdGlvbih2aXNpdCwgcnVuTmF2aWdhdGlvbkNvbW1hbmRzKTtcbiAgfVxuXG4gIHByaXZhdGUgcXVldWVOYXZpZ2F0aW9uKFxuICAgIHZpc2l0OiBWaXNpdCxcbiAgICBydW5OYXZpZ2F0aW9uQ29tbWFuZHM6IChyb3V0ZXI6IFJvdXRlcikgPT4gdW5rbm93blxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBmbHVzaEFscmVhZHlTY2hlZHVsZWQgPSAhIXRoaXMucGVuZGluZ05hdmlnYXRpb247XG4gICAgaWYgKHRoaXMucGVuZGluZ05hdmlnYXRpb24pIHtcbiAgICAgIC8vIENvYWxlc2NlOiBzdXBlcnNlZGUgdGhlIHByZXZpb3VzbHkgcXVldWVkIG5hdmlnYXRpb24gc28gb25seSB0aGUgbW9zdCByZWNlbnQgdGFyZ2V0IHJ1bnMuXG4gICAgICB0aGlzLnBlbmRpbmdOYXZpZ2F0aW9uLnJlc29sdmUoKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRoaXMucGVuZGluZ05hdmlnYXRpb24gPSB7IHZpc2l0LCBydW5OYXZpZ2F0aW9uQ29tbWFuZHMsIHJlc29sdmUsIHJlamVjdCB9O1xuICAgICAgaWYgKCFmbHVzaEFscmVhZHlTY2hlZHVsZWQpIHtcbiAgICAgICAgdGhpcy5ydW5BZnRlclJvdXRpbmdTZXNzaW9uRmluaXNoZXMoKCkgPT4gdGhpcy5mbHVzaFBlbmRpbmdOYXZpZ2F0aW9uKCkpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBmbHVzaFBlbmRpbmdOYXZpZ2F0aW9uKCk6IHZvaWQge1xuICAgIGNvbnN0IHBlbmRpbmcgPSB0aGlzLnBlbmRpbmdOYXZpZ2F0aW9uO1xuICAgIGlmICghcGVuZGluZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnBlbmRpbmdOYXZpZ2F0aW9uID0gdW5kZWZpbmVkO1xuXG4gICAgaWYgKHRoaXMucXVldWVkTmF2aWdhdGlvbkRlcHRoID49IFBsYWNlUm91dGVyLk1BWF9RVUVVRURfTkFWSUdBVElPTl9ERVBUSCkge1xuICAgICAgTG9nZ2VyLmdldCh0aGlzKS53YXJuKFxuICAgICAgICBgRHJvcHBpbmcgcXVldWVkIG5hdmlnYXRpb24gYWZ0ZXIgJHt0aGlzLnF1ZXVlZE5hdmlnYXRpb25EZXB0aH0gY29uc2VjdXRpdmUgZGVmZXJyYWxzIHRvIGAgK1xuICAgICAgICAgIGBhdm9pZCBhIG5hdmlnYXRpb24gbG9vcC5gLFxuICAgICAgICB7IHZpc2l0OiBwZW5kaW5nLnZpc2l0Py50b0RlYnVnU3RyaW5nKCkgfVxuICAgICAgKTtcbiAgICAgIHRoaXMucXVldWVkTmF2aWdhdGlvbkRlcHRoID0gMDtcbiAgICAgIHBlbmRpbmcucmVzb2x2ZSgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucXVldWVkTmF2aWdhdGlvbkRlcHRoKys7XG4gICAgdGhpcy5kb05hdmlnYXRpb24ocGVuZGluZy52aXNpdCwgcGVuZGluZy5ydW5OYXZpZ2F0aW9uQ29tbWFuZHMpLnRoZW4oXG4gICAgICAoKSA9PiB7XG4gICAgICAgIHRoaXMucXVldWVkTmF2aWdhdGlvbkRlcHRoID0gMDtcbiAgICAgICAgcGVuZGluZy5yZXNvbHZlKCk7XG4gICAgICB9LFxuICAgICAgKGVycm9yKSA9PiB7XG4gICAgICAgIHRoaXMucXVldWVkTmF2aWdhdGlvbkRlcHRoID0gMDtcbiAgICAgICAgcGVuZGluZy5yZWplY3QoZXJyb3IpO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBuYXZpZ2F0ZUJ5VXJsKFxuICAgIHVybFNuYXBzaG90OiBVcmxTbmFwc2hvdCxcbiAgICBuYXZpZ2F0aW9uRXh0cmFzPzogTmF2aWdhdGlvbkV4dHJhc1xuICApOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAvLyBjb25zb2xlLmxvZyhgIyMjIG5hdmlnYXRpb25CeVVybCAtPiAke3VybFNuYXBzaG90LnVybFRyZWUudG9TdHJpbmcoKX1gKTtcbiAgICByZXR1cm4gdGhpcy5hbmd1bGFyUm91dGVyLm5hdmlnYXRlQnlVcmwoXG4gICAgICB1cmxTbmFwc2hvdC51cmxUcmVlLFxuICAgICAgbmF2aWdhdGlvbkV4dHJhc1xuICAgICk7XG4gIH1cblxuICBnZXQgYWN0aXZlVmlzaXQkKCk6IFZhbHVlTW9kZWw8VmlzaXQ+IHtcbiAgICByZXR1cm4gdGhpcy5fYWN0aXZlVmlzaXQkLnJlYWRvbmx5JDtcbiAgfVxuXG4gIGZpbHRlckF1dGhvcml6ZWRQbGFjZXMocGxhY2VzOiBSZWFkb25seUFycmF5PENvbnN0cnVjdGFibGU8UGxhY2VDb21wb25lbnQ+Piwgb3B0aW9uczogRGlzcG9zZWRXaXRoKTogTGlzdE1vZGVsPENvbnN0cnVjdGFibGU8UGxhY2VDb21wb25lbnQ+PiB7XG4gICAgY29uc3QgeyBjaGFpbiB9ID0gRHNsLmRpc3Bvc2VXaXRoKG9wdGlvbnMuZGlzcG9zZWRXaXRoKTtcbiAgICByZXR1cm4gY2hhaW4odGhpcy5hdXRoU2VydmljZS5hY2Nlc3NHdWFyZCQpLm1hcFRvTGlzdCgoZykgPT5cbiAgICAgIHBsYWNlcy5maWx0ZXIoKHApID0+IGcuaXNBdXRob3Jpc2VkKGdldFBsYWNlRGVmaW5pdGlvbihwKSkpXG4gICAgKTtcbiAgfVxuXG4gIGFzeW5jIG5vdGlmeVZpc2l0U2VnbWVudENoYW5nZWQoXG4gICAgaXM6IFZpc2l0U2VnbWVudCxcbiAgICB3YXM6IFZpc2l0U2VnbWVudCxcbiAgICBtZXRhZGF0YT86IFRyYW5zYWN0aW9uLk1ldGFEYXRhXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIGNvbnNvbGUubG9nKFwiUGxhY2VSb3V0ZXIubm90aWZ5VmlzaXRTZWdtZW50Q2hhbmdlZFwiLCBpcy50b0RlYnVnU3RyaW5nKCksIHdhcy50b0RlYnVnU3RyaW5nKCkpO1xuICAgIHRoaXMucGxhY2VIaXN0b3J5LnVwZGF0ZVZpc2l0U2VnbWVudChpcyk7XG5cbiAgICAvLyBGSVhNRTogbm8gcm91dGUgaWQgLT4gcm91dGUgaWQgZHVwbGljYXRlcyByb3V0ZSBwYXJhbWV0ZXJzXG4gICAgY29uc3QgdmlzaXQgPSB0aGlzLmFjdGl2ZVZpc2l0JC52YWx1ZS5jb3B5QW5kUmVwbGFjZVNlZ21lbnQoaXMpO1xuICAgIGlmIChpcy5oYXNSb3V0aW5nQ2hhbmdlZEZyb20od2FzKSkge1xuICAgICAgLy8gQW4gaW4tcGxhY2UgcGFyYW1ldGVyIGNoYW5nZSAobW9kZWwgLT4gcm91dGUpIHB1c2hlcyBhIGhpc3RvcnkgZW50cnkgYnkgZGVmYXVsdCBzbyBhXG4gICAgICAvLyBkZWxpYmVyYXRlIHNlbGVjdGlvbiBpcyByZWFjaGFibGUgdmlhIHRoZSBiYWNrIGJ1dHRvbi4gQXV0b21hdGljIHJlZmluZW1lbnRzXG4gICAgICAvLyAoYXV0by1zZWxlY3QtZmlyc3QgLyBzZWxlY3QtbmVhcmVzdCBjb3JyZWN0aW9ucykgdGFnIHRoZWlyIHRyYW5zYWN0aW9uIG1ldGFkYXRhIGFuZCBhXG4gICAgICAvLyByZWdpc3RlcmVkIHNraXBIaXN0b3J5SWYgcHJlZGljYXRlIHJlcGxhY2VzIGluc3RlYWQgLSBzZWUgc2tpcEhpc3RvcnlJZi5cbiAgICAgIGNvbnN0IHJlcGxhY2VVcmwgPSB0aGlzLnNob3VsZFJlcGxhY2VIaXN0b3J5KG1ldGFkYXRhKTtcbiAgICAgIGF3YWl0IHRoaXMuZG9OYXZpZ2F0aW9uKHZpc2l0LCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHVybFNuYXBzaG90ID0gdGhpcy51cmxTZXJ2aWNlXG4gICAgICAgICAgLnBhcnNlVXJsKHRoaXMuYW5ndWxhclJvdXRlci5yb3V0ZXJTdGF0ZS5zbmFwc2hvdC51cmwpXG4gICAgICAgICAgLnVwZGF0ZVZpc2l0U2VnbWVudChpcyk7XG4gICAgICAgIHJldHVybiB0aGlzLm5hdmlnYXRlQnlVcmwodXJsU25hcHNob3QsIHsgcmVwbGFjZVVybCB9KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlTmF2aWdhdGlvblNlc3Npb24oY3VycmVudFJvdXRlclVybDogc3RyaW5nKTogTmF2aWdhdGlvblNlc3Npb24ge1xuICAgIGNvbnN0IGluSW50ZXJhY3Rpb24gPSB0aGlzLmludGVyYWN0aW9uU2VydmljZS5pc0FjdGl2ZSgpO1xuICAgIHJldHVybiBpbkludGVyYWN0aW9uXG4gICAgICA/IG5ldyBOYXZpZ2F0aW5nRHVyaW5nSW50ZXJhY3Rpb24oXG4gICAgICAgICAgdGhpcy5uYXZpZ2F0aW9uQ29udGV4dCxcbiAgICAgICAgICBjdXJyZW50Um91dGVyVXJsXG4gICAgICAgIClcbiAgICAgIDogbmV3IE5hdmlnYXRpbmcodGhpcy5uYXZpZ2F0aW9uQ29udGV4dCwgY3VycmVudFJvdXRlclVybCk7XG4gIH1cblxuICAvLyBAVHJhY2UoKVxuXG4gIHByb3RlY3RlZCB0cmFuc2l0aW9uVG8obmV4dDogTmF2aWdhdGlvblNlc3Npb24pIHtcbiAgICBjb25zdCBwcmV2aW91cyA9IHRoaXMubmF2aWdhdGlvblNlc3Npb24kLnZhbHVlO1xuICAgIGlmICghcHJldmlvdXMpIHtcbiAgICAgIHRoaXMucGxhY2VIaXN0b3J5Lm5vdGlmeU5hdmlnYXRpb25TdGFydGVkKCk7XG4gICAgfVxuICAgIGFzc2VydC5pc1RydXRoeShuZXh0ICE9PSBwcmV2aW91cyk7XG4gICAgLy8gTG9nZ2VyLmdldCh0aGlzKS5pbmZvKGAjIyMgUm91dGVyIFN0YXRlIFRyYW5zaXRpb246ICR7cHJldmlvdXMgPyBwcmV2aW91cy50b1N0cmluZygpIDogJ251bGwnfSAtPiAke25leHQudG9TdHJpbmcoKX1gKTtcbiAgICB0aGlzLm5hdmlnYXRpb25TZXNzaW9uJC52YWx1ZSA9IG5leHQ7XG4gICAgaWYgKHByZXZpb3VzKSB7XG4gICAgICBwcmV2aW91cy5kaXNwb3NlKCk7XG4gICAgfVxuICAgIG5leHQubm90aWZ5QWN0aXZlKCk7XG4gIH1cblxuICAvLyBAVHJhY2UoKVxuXG4gIHByaXZhdGUgcm91dGluZ1Nlc3Npb25GaW5pc2hlZCh2aXNpdD86IFZpc2l0KSB7XG4gICAgaWYgKHZpc2l0KSB7XG4gICAgICBhc3NlcnQuaXNUcnV0aHkodGhpcy5uYXZpZ2F0aW9uSW5Qcm9ncmVzcyQudmFsdWUpO1xuICAgICAgdGhpcy5yZWNvcmRGaW5pc2hlZFZpc2l0KHZpc2l0KTtcbiAgICB9XG4gICAgY29uc3Qgc2Vzc2lvbiA9IHRoaXMuY3VycmVudFNlc3Npb247XG4gICAgc2Vzc2lvbi5kaXNwb3NlKCk7XG4gICAgdGhpcy5uYXZpZ2F0aW9uU2Vzc2lvbiQudmFsdWUgPSBudWxsO1xuICAgIC8vIGNvbnNvbGUubG9nKGAjIyMgUm91dGVyIFNlc3Npb24gRmluaXNoZWQgKHdhcyAke3Nlc3Npb24udG9TdHJpbmcoKX0pYCk7XG4gICAgLy8gU25hcHNob3QtYW5kLXN3YXA6IGpvYnMgcmVnaXN0ZXJlZCBEVVJJTkcgdGhlIGRyYWluIChlLmcuIHRoZSBpbnRlcmFjdGlvbi1pZCBzeW5jJ3MgbmVzdGVkXG4gICAgLy8gY29tcGxldGlvbiBqb2IsIG9yIGEgcXVldWVkIG5hdmlnYXRpb24gcmUtcXVldWVpbmcpIGJlbG9uZyB0byB0aGUgTkVYVCBzZXNzaW9uIGZpbmlzaC4gVGhlXG4gICAgLy8gb2xkIGZvckVhY2gtdGhlbi1yZWFzc2lnbiBib3RoIHNraXBwZWQgdGhlbSAoZm9yRWFjaCBkb2Vzbid0IHZpc2l0IGFwcGVuZGVkIGl0ZW1zKSBhbmQgdGhlblxuICAgIC8vIGRpc2NhcmRlZCB0aGVtLlxuICAgIGNvbnN0IGpvYnMgPSB0aGlzLnNlc3Npb25GaW5pc2hlZEpvYnM7XG4gICAgdGhpcy5zZXNzaW9uRmluaXNoZWRKb2JzID0gW107XG4gICAgam9icy5mb3JFYWNoKChqb2IpID0+IGpvYigpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWNvcmRzIGEgY29tcGxldGVkIG5hdmlnYXRpb24ncyB2aXNpdCB3aXRob3V0IGZpbmlzaGluZyB0aGUgc2Vzc2lvbi4gU2hhcmVkIGJ5IHRoZSBub3JtYWxcbiAgICogZmluaXNoIHBhdGggYW5kIHNlc3Npb25zIHRoYXQgaGFuZCBvdmVyIHRvIHZpc2l0bGVzcyBob3VzZWtlZXBpbmcgKHNlZVxuICAgKiBOYXZpZ2F0aW9uQ29udGV4dC5yZWNvcmRWaXNpdCkuXG4gICAqL1xuICBwcml2YXRlIHJlY29yZEZpbmlzaGVkVmlzaXQodmlzaXQ6IFZpc2l0KSB7XG4gICAgdGhpcy5wbGFjZUhpc3Rvcnkubm90aWZ5TmF2aWdhdGlvbkZpbmlzaGVkKHZpc2l0KTtcbiAgICAvLyBXZSB1cGRhdGUgdGhlIGFjdGl2ZSB2aXNpdHMgYmVmb3JlIHdlIGZpbmlzaCB0aGUgc2Vzc2lvbiBzbyB0aGVcbiAgICAvLyBwbGFjZSBvdXRsZXRzIGNhbiBpZ25vcmUgdGhlIGluY29taW5nIGNoYW5nZXMgdW50aWwgdGhpbmdzIGFyZSBzZXR0bGVkLlxuICAgIHRoaXMuX2FjdGl2ZVZpc2l0JC52YWx1ZSA9IHZpc2l0O1xuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgYGZ1bmNgIHdoZW4gdGhlIE5FWFQgbmF2aWdhdGlvbiBzZXNzaW9uIGZpbmlzaGVzIOKAlCB3aGljaCBtYXkgYmUgYSBzZXNzaW9uIHRoYXQgaGFzbid0XG4gICAqIHN0YXJ0ZWQgeWV0ICh0aGUgaW50ZXJhY3Rpb24taWQgc3luYyByZWdpc3RlcnMgaXRzIGNvbXBsZXRpb24gam9iIGJlZm9yZSBzdGFydGluZyB0aGUgc3luY1xuICAgKiBzZXNzaW9uLCBhbmQgam9icyByZWdpc3RlcmVkIHdoaWxlIGEgZHJhaW4gaXMgcnVubmluZyBiZWxvbmcgdG8gdGhlIGZvbGxvd2luZyBzZXNzaW9uKS5cbiAgICovXG4gIHByaXZhdGUgcnVuQWZ0ZXJSb3V0aW5nU2Vzc2lvbkZpbmlzaGVzKGZ1bmM6ICgpID0+IHZvaWQpIHtcbiAgICB0aGlzLnNlc3Npb25GaW5pc2hlZEpvYnMucHVzaChmdW5jKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTeW5jJ3MgdGhlIGN1cnJlbnQgaW50ZXJhY3Rpb24gc3RhdGUgd2l0aCB0aGUgVVJMLiAgV2UgbmVlZCB0byBwdXNoIHNvbWV0aGluZyBpbiB0aGUgVVJMIGluIG9yZGVyXG4gICAqIHRvIGJlIGFibGUgdG8gY2FwdHVyZSB0aGUgYmFjayBidXR0b24gb24gdGhlIGZpcnN0IHBhZ2UuICBJZiB3ZSBkb24ndCB0aGVuIHRoZSBiYWNrIGNsaWNrIHdpbGwgZXhpdFxuICAgKiB0aGUgYXBwIGRpcmVjdGx5IGFuZCB3ZSBkb24ndCBnZXQgdG8gYXNrLlxuICAgKi9cbiAgLy8gQFRyYWNlKClcbiAgc3luY0ludGVyYWN0aW9uQ29udGV4dElkc1dpdGhSb3V0ZXIoXG4gICAgb25TeW5jQ29tcGxldGU6ICgpID0+IHZvaWQgPSAoKSA9PiB7XG4gICAgICAvLyBub29wXG4gICAgfVxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5uYXZpZ2F0aW9uU2Vzc2lvbikge1xuICAgICAgLy8gY29uc29sZS5sb2coYE5hdmlnYXRpb24gYWN0aXZlIC0+ICR7dGhpcy5uYXZpZ2F0aW9uU2Vzc2lvbi50b1N0cmluZygpfSwgc3luYyBkZWxheWVkIHVudGlsIGZpbmlzaGVkLmApO1xuICAgICAgLy8gY29uc3Qgc2Vzc2lvbiA9IHRoaXMubmF2aWdhdGlvblNlc3Npb247XG4gICAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHtcbiAgICAgICAgY29uc3Qgc3RhcnRTeW5jV2hlbklkbGUgPSAoKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMubmF2aWdhdGlvblNlc3Npb24pIHtcbiAgICAgICAgICAgIC8vIEEgam9iIGRyYWluZWQgYmVmb3JlIHVzIChlLmcuIGEgcXVldWVkIG5hdmlnYXRpb24pIGFscmVhZHkgc3RhcnRlZCBhIG5ldyBzZXNzaW9uO1xuICAgICAgICAgICAgLy8gdHJhbnNpdGlvbmluZyBub3cgd291bGQgZGlzcG9zZSBpdCBtaWQtZmxpZ2h0LiBSZS1kZWZlciB1bnRpbCB0aGF0IG9uZSBmaW5pc2hlcy5cbiAgICAgICAgICAgIHRoaXMucnVuQWZ0ZXJSb3V0aW5nU2Vzc2lvbkZpbmlzaGVzKHN0YXJ0U3luY1doZW5JZGxlKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5ydW5BZnRlclJvdXRpbmdTZXNzaW9uRmluaXNoZXMoKCkgPT4ge1xuICAgICAgICAgICAgb25TeW5jQ29tcGxldGUoKTtcbiAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBjb25zdCBzeW5jU2Vzc2lvbiA9IG5ldyBTeW5jaHJvbmlzZUludGVyYWN0aW9uQ29udGV4dElkc1dpdGhSb3V0ZShcbiAgICAgICAgICAgIHRoaXMubmF2aWdhdGlvbkNvbnRleHQsXG4gICAgICAgICAgICB0aGlzLnVybFNlcnZpY2UuZ2V0Q3VycmVudFJvdXRlclVybCgpLFxuICAgICAgICAgICAgZmFsc2VcbiAgICAgICAgICApO1xuICAgICAgICAgIHRoaXMudHJhbnNpdGlvblRvKHN5bmNTZXNzaW9uKTtcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5ydW5BZnRlclJvdXRpbmdTZXNzaW9uRmluaXNoZXMoc3RhcnRTeW5jV2hlbklkbGUpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4ge1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhgTm8gbmF2aWdhdGlvbiBpbiBwcm9ncmVzcywgc3RhcnRpbmcgc3luY2hyb25pc2F0aW9uIGpvYmApO1xuICAgICAgICB0aGlzLnJ1bkFmdGVyUm91dGluZ1Nlc3Npb25GaW5pc2hlcygoKSA9PiB7XG4gICAgICAgICAgb25TeW5jQ29tcGxldGUoKTtcbiAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBzZXNzaW9uID0gbmV3IFN5bmNocm9uaXNlSW50ZXJhY3Rpb25Db250ZXh0SWRzV2l0aFJvdXRlKFxuICAgICAgICAgIHRoaXMubmF2aWdhdGlvbkNvbnRleHQsXG4gICAgICAgICAgdGhpcy51cmxTZXJ2aWNlLmdldEN1cnJlbnRSb3V0ZXJVcmwoKSxcbiAgICAgICAgICBmYWxzZVxuICAgICAgICApO1xuICAgICAgICB0aGlzLnRyYW5zaXRpb25UbyhzZXNzaW9uKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdG9WaXNpdChcbiAgICB2aXNpdE9yUGxhY2VDb21wb25lbnQ6IFZpc2l0IHwgQ29uc3RydWN0YWJsZTxQbGFjZUNvbXBvbmVudD4sXG4gICAgcGFyYW1zPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgKSB7XG4gICAgaWYgKHZpc2l0T3JQbGFjZUNvbXBvbmVudCBpbnN0YW5jZW9mIFZpc2l0KSB7XG4gICAgICByZXR1cm4gdmlzaXRPclBsYWNlQ29tcG9uZW50O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gVmlzaXQuZ290byh2aXNpdE9yUGxhY2VDb21wb25lbnQsIHBhcmFtcyk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBuYW1lc3BhY2UgUGxhY2VSb3V0ZXIge1xuXG4gIGV4cG9ydCBpbnRlcmZhY2UgUmVkaXJlY3Rpb25zIHtcbiAgICAvKipcbiAgICAgKiBOT1RFOiBmb3Igbm93IHRoaXMgb25seSBzdXBwb3J0cyB0b3AgbGV2ZWwgcGxhY2VzLiAgU3VwcG9ydCBmb3IgY2hpbGQgcGxhY2VzIHdpbGwgcmVxdWlyZSBhIG1vcmUgZnVuZGFtZW50YWxcbiAgICAgKiBjaGFuZ2UgdG8gdmlzaXRzIHRvIHN1cHBvcnQgbmVzdGluZ1xuICAgICAqL1xuICAgIG9uQXV0aGVudGljYXRpb25GYWlsdXJlKGFjdGl2YXRlZFJvdXRlPzogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCwgc3RhdGU/OiBSb3V0ZXJTdGF0ZVNuYXBzaG90KTogVmlzaXQgfCBDb25zdHJ1Y3RhYmxlPFBsYWNlQ29tcG9uZW50PjtcblxuICAgIC8qKlxuICAgICAqIE5PVEU6IGZvciBub3cgdGhpcyBvbmx5IHN1cHBvcnRzIHRvcCBsZXZlbCBwbGFjZXMuICBTdXBwb3J0IGZvciBjaGlsZCBwbGFjZXMgd2lsbCByZXF1aXJlIGEgbW9yZSBmdW5kYW1lbnRhbFxuICAgICAqIGNoYW5nZSB0byB2aXNpdHMgdG8gc3VwcG9ydCBuZXN0aW5nXG4gICAgICogQHBhcmFtIGNvbXBvbmVudFxuICAgICAqL1xuICAgIG9uQXV0aG9yaXNhdGlvbkZhaWx1cmUoY29tcG9uZW50OiBDb25zdHJ1Y3RhYmxlPFBsYWNlQ29tcG9uZW50Pik6IChDb25zdHJ1Y3RhYmxlPFBsYWNlQ29tcG9uZW50PiB8IFZpc2l0KVtdO1xuICB9XG59XG4iXX0=
|
|
@@ -10001,7 +10001,15 @@ class NavigationSession extends GarbageCollector {
|
|
|
10001
10001
|
const snapshot = this.urlService.parseUrl(url);
|
|
10002
10002
|
const filteredSegments = Array.from(this._visitSegments.values())
|
|
10003
10003
|
.filter(it => snapshot.containsVisitSegment(it));
|
|
10004
|
-
|
|
10004
|
+
const visit = Visit.fromSegments(filteredSegments);
|
|
10005
|
+
// Angular only runs guards for routes whose parameters changed, so a place that stays active
|
|
10006
|
+
// (e.g. the parent when Back only changes the child) never reaches this session. Keep its
|
|
10007
|
+
// segment from the active visit, otherwise Visit fills it in with empty parameters.
|
|
10008
|
+
const activeVisit = this.context.activeVisit;
|
|
10009
|
+
const segments = visit.segments.map(segment => this._visitSegments.has(segment.placeDefinition)
|
|
10010
|
+
? segment
|
|
10011
|
+
: activeVisit?.getSegmentFor(segment.placeDefinition) ?? segment);
|
|
10012
|
+
return Visit.fromSegments(segments);
|
|
10005
10013
|
}
|
|
10006
10014
|
get canDeactivateInteractionContext() {
|
|
10007
10015
|
return this._interactionContext;
|
|
@@ -10618,13 +10626,18 @@ var NavigationContext;
|
|
|
10618
10626
|
transitionTo;
|
|
10619
10627
|
finishRoutingSession;
|
|
10620
10628
|
recordVisit;
|
|
10621
|
-
|
|
10629
|
+
getActiveVisit;
|
|
10630
|
+
constructor(urlService, routerInteractionAdapter, navigateByUrl, transitionTo, finishRoutingSession, recordVisit, getActiveVisit) {
|
|
10622
10631
|
this.urlService = urlService;
|
|
10623
10632
|
this.routerInteractionAdapter = routerInteractionAdapter;
|
|
10624
10633
|
this.navigateByUrl = navigateByUrl;
|
|
10625
10634
|
this.transitionTo = transitionTo;
|
|
10626
10635
|
this.finishRoutingSession = finishRoutingSession;
|
|
10627
10636
|
this.recordVisit = recordVisit;
|
|
10637
|
+
this.getActiveVisit = getActiveVisit;
|
|
10638
|
+
}
|
|
10639
|
+
get activeVisit() {
|
|
10640
|
+
return this.getActiveVisit();
|
|
10628
10641
|
}
|
|
10629
10642
|
}
|
|
10630
10643
|
NavigationContext.Impl = Impl;
|
|
@@ -11327,7 +11340,7 @@ class PlaceRouter extends GarbageCollector {
|
|
|
11327
11340
|
this.routingSessionFinished(segments);
|
|
11328
11341
|
}, (visit) => {
|
|
11329
11342
|
this.recordFinishedVisit(visit);
|
|
11330
|
-
});
|
|
11343
|
+
}, () => this.activeVisit$.value);
|
|
11331
11344
|
const { chain } = Dsl.disposeWith(this);
|
|
11332
11345
|
this.navigationInProgress$ = chain(this.navigationSession$).isNotNil();
|
|
11333
11346
|
this.interactionSyncInProgress$ = chain(this.navigationSession$)
|