@yuuvis/client-shell-core 2.3.4 → 2.3.6

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.
@@ -2,4 +2,4 @@ export var GlobalShortcut;
2
2
  (function (GlobalShortcut) {
3
3
  GlobalShortcut["search"] = "search";
4
4
  })(GlobalShortcut || (GlobalShortcut = {}));
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpZW50LXNoZWxsLmludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMveXV1dmlzL2NsaWVudC1zaGVsbC1jb3JlL3NyYy9saWIvY2xpZW50LXNoZWxsLmludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUEwRkEsTUFBTSxDQUFOLElBQVksY0FFWDtBQUZELFdBQVksY0FBYztJQUN4QixtQ0FBaUIsQ0FBQTtBQUNuQixDQUFDLEVBRlcsY0FBYyxLQUFkLGNBQWMsUUFFekIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUeXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBPYmplY3RUeXBlRmxhdm9yIH0gZnJvbSAnQHl1dXZpcy9jbGllbnQtY29yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2xpZW50U2hlbGxFeHRlbnNpb24ge1xuICBpbml0OiAoKSA9PiBQcm9taXNlPGFueT4gfCBPYnNlcnZhYmxlPGFueT47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2xpZW50U2hlbGxDb25maWcge1xuICBhcHBJY29uPzoge1xuICAgIHN2Z0ljb24/OiBzdHJpbmc7XG4gICAgaWNvbk5hbWU6IHN0cmluZztcbiAgfTtcbiAgc2hlbGxJY29uTmFtZXNwYWNlPzogc3RyaW5nO1xufVxuXG4vLyBUb2RvOiB3cml0ZSBkb2N1bWVudGF0aW9uXG5leHBvcnQgaW50ZXJmYWNlIEFwcCBleHRlbmRzIFJvdXRlIHtcbiAgaWQ6IHN0cmluZztcbiAgc3ZnSWNvbj86IHN0cmluZztcbiAgaWNvbk5hbWU6IHN0cmluZztcbiAgLy8gdXNlciByb2xlcy9ncm91cHMgdGhhdCBhcmUgYWxsb3dlZC9kZW5pZWQgdG8gdXNlIHRoZSBhcHBcbiAgcGVybWlzc2lvbnM/OiBBcHBQZXJtaXNzaW9uO1xuICBvcHRpb25zPzogQXBwT3B0aW9ucztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBcHBPcHRpb25zIHtcbiAgLy8gd2hldGhlciBvciBub3QgdG8gdXNlIHNoZWxscyBhcHAgaGVhZGVyIGxheW91dFxuICBhcHBIZWFkZXI/OiBib29sZWFuO1xuICAvLyB1c2luZyBhcHAgaGVhZGVyIGxheW91dCB0aGlzIGNsYWltIHdpbGwgYmUgcGxhY2VkIG5leHQgdG8gKGJlbG93KSB0aGUgYXBwcyBuYW1lXG4gIGFwcENsYWltPzogc3RyaW5nO1xuICAvLyB3aGV0aGVyIG9yIG5vdCB0byBsaXN0IHRoZSBhcHAgaW4gdGhlIHNoZWxscyBzaWRlbmF2XG4gIGhpZGVGcm9tTmF2PzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBcHBQZXJtaXNzaW9uIHtcbiAgYWxsb3c6IHN0cmluZ1tdO1xuICBkZW55OiBzdHJpbmdbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBY2NlbnRDb2xvciB7XG4gIGxhYmVsOiBzdHJpbmc7XG4gIG5hbWU6IHN0cmluZztcbiAgdG9uZTogc3RyaW5nO1xufVxuXG4vLyBJbnRlcmZhY2UgZm9yIGFwcHMgdG8gZXhwb3NlIG93biBzZXR0aW5ncyB0byBiZSBob29rZWQgaW50b1xuLy8gc2hlbGwgc2V0dGluZ3MgcGFnZVxuZXhwb3J0IGludGVyZmFjZSBTaGVsbEFwcFNldHRpbmdzIHtcbiAgYXBwSUQ6IHN0cmluZztcbiAgLy8gbGFiZWwgZm9yIHRoZSBzZXR0aW5ncyBncm91cCAoZS5nLiB0aGUgYXBwcyBuYW1lKVxuICBsYWJlbDogc3RyaW5nO1xuICAvLyBjb2xsZWN0aW9uIG9mIHNldHRpbmdzIGV4cG9zZWQgYnkgdGhlIGFwcFxuICBwcm9wZXJ0aWVzOiBTaGVsbEFwcFNldHRpbmdQcm9wZXJ0eVtdO1xufVxuZXhwb3J0IGludGVyZmFjZSBTaGVsbEFwcFNldHRpbmdQcm9wZXJ0eSB7XG4gIGxhYmVsOiBzdHJpbmc7XG4gIG5hbWU6IHN0cmluZztcbiAgLy8gJ3N0cmluZycgfCAnbnVtYmVyJyB8ICdib29sZWFuJyB8ICdjYXRhbG9nJyB8ICd1cmwnIHwgJ2VtYWlsJztcbiAgdHlwZTogc3RyaW5nO1xuICB2YWx1ZT86IHN0cmluZyB8IGJvb2xlYW4gfCBudW1iZXI7XG59XG5cbi8vIFB1YmxpYyBpbnRlcmZhY2UgZm9yIGFwcHNcblxuLyoqXG4gKiBAZGVwcmVjYXRlZFxuICovXG5leHBvcnQgdHlwZSBBcHBTY2hlbWFGbGF2b3JPcmlnaW4gPSBBcHBGbGF2b3JPcmlnaW47XG4vKipcbiAqIEBkZXByZWNhdGVkXG4gKi9cbmV4cG9ydCB0eXBlIEFwcFNjaGVtYUZsYXZvciA9IEFwcEZsYXZvcjtcblxuZXhwb3J0IHR5cGUgQXBwRmxhdm9yT3JpZ2luID0gJ2FwcCcgfCAnY29uZmlnJztcblxuLy8gRkxBVk9SU1xuZXhwb3J0IHR5cGUgT2JqZWN0Rmxhdm9yID0gQXBwRmxhdm9yICYgeyBhcHA6IHN0cmluZzsgb3JpZ2luOiBBcHBGbGF2b3JPcmlnaW47IG5hbWU/OiBzdHJpbmc7IGRlc2NyaXB0aW9uPzogc3RyaW5nIH07XG5cbi8vIERlZmluaXRpb24gb2YgYW4gb2JqZWN0IGZsYXZvci5cbmV4cG9ydCBpbnRlcmZhY2UgQXBwRmxhdm9yIGV4dGVuZHMgT2JqZWN0VHlwZUZsYXZvciB7XG4gIG9iamVjdFR5cGVJRDogc3RyaW5nO1xuICBkZXNjcmlwdGlvbktleT86IHN0cmluZztcbiAgLy8gdXNlIHRoZSBkZWZhdWx0IGFwcGx5IGNvbXBvbmVudCAocHJldmlldyBhbmQgbWV0YWRhdGEgb3ZlcmxheSlcbiAgdXNlRGVmYXVsdEFwcGx5Q29tcG9uZW50PzogYm9vbGVhbjtcbiAgLy8gc2V0IGEgY3VzdG9tIGFwcGx5IGNvbXBvbmVudFxuICBhcHBseUNvbXBvbmVudD86IFR5cGU8YW55Pjtcbn1cblxuZXhwb3J0IGVudW0gR2xvYmFsU2hvcnRjdXQge1xuICBzZWFyY2ggPSAnc2VhcmNoJ1xufVxuIl19
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpZW50LXNoZWxsLmludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMveXV1dmlzL2NsaWVudC1zaGVsbC1jb3JlL3NyYy9saWIvY2xpZW50LXNoZWxsLmludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUErRkEsTUFBTSxDQUFOLElBQVksY0FFWDtBQUZELFdBQVksY0FBYztJQUN4QixtQ0FBaUIsQ0FBQTtBQUNuQixDQUFDLEVBRlcsY0FBYyxLQUFkLGNBQWMsUUFFekIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUeXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBPYmplY3RUeXBlRmxhdm9yIH0gZnJvbSAnQHl1dXZpcy9jbGllbnQtY29yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2xpZW50U2hlbGxFeHRlbnNpb24ge1xuICBpbml0OiAoKSA9PiBQcm9taXNlPGFueT4gfCBPYnNlcnZhYmxlPGFueT47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2xpZW50U2hlbGxDb25maWcge1xuICBhcHBJY29uPzoge1xuICAgIHN2Z0ljb24/OiBzdHJpbmc7XG4gICAgaWNvbk5hbWU6IHN0cmluZztcbiAgfTtcbiAgc2hlbGxJY29uTmFtZXNwYWNlPzogc3RyaW5nO1xufVxuXG4vLyBUb2RvOiB3cml0ZSBkb2N1bWVudGF0aW9uXG5leHBvcnQgaW50ZXJmYWNlIEFwcCBleHRlbmRzIFJvdXRlIHtcbiAgaWQ6IHN0cmluZztcbiAgc3ZnSWNvbj86IHN0cmluZztcbiAgaWNvbk5hbWU6IHN0cmluZztcbiAgdGl0bGU6IHN0cmluZztcbiAgLy8gdXNlciByb2xlcy9ncm91cHMgdGhhdCBhcmUgYWxsb3dlZC9kZW5pZWQgdG8gdXNlIHRoZSBhcHBcbiAgcGVybWlzc2lvbnM/OiBBcHBQZXJtaXNzaW9uO1xuICBvcHRpb25zPzogQXBwT3B0aW9ucztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBcHBPcHRpb25zIHtcbiAgLy8gd2hldGhlciBvciBub3QgdG8gdXNlIHNoZWxscyBhcHAgaGVhZGVyIGxheW91dFxuICBhcHBIZWFkZXI/OiBib29sZWFuO1xuICAvLyB1c2luZyBhcHAgaGVhZGVyIGxheW91dCB0aGlzIGNsYWltIHdpbGwgYmUgcGxhY2VkIG5leHQgdG8gKGJlbG93KSB0aGUgYXBwcyBuYW1lXG4gIC8vIGtleSB0byBiZSB1c2VkIGZvciB0cmFuc2xhdGlvbi4gSWYgYSBrZXkgaXMgcHJvdmlkZWQgdGhlIGFwcENsYWltIHdpbGxcbiAgLy8gYmUgc2V0IHRvIHRoZSB0cmFuc2xhdGVkIHZhbHVlIG9mIHRoZSBrZXlcbiAgYXBwQ2xhaW1LZXk/OiBzdHJpbmc7XG4gIC8vIGNsYWltIHRvIHNob3cgYXMgaXNcbiAgYXBwQ2xhaW0/OiBzdHJpbmc7XG4gIC8vIHdoZXRoZXIgb3Igbm90IHRvIGxpc3QgdGhlIGFwcCBpbiB0aGUgc2hlbGxzIHNpZGVuYXZcbiAgaGlkZUZyb21OYXY/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFwcFBlcm1pc3Npb24ge1xuICBhbGxvdzogc3RyaW5nW107XG4gIGRlbnk6IHN0cmluZ1tdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFjY2VudENvbG9yIHtcbiAgbGFiZWw6IHN0cmluZztcbiAgbmFtZTogc3RyaW5nO1xuICB0b25lOiBzdHJpbmc7XG59XG5cbi8vIEludGVyZmFjZSBmb3IgYXBwcyB0byBleHBvc2Ugb3duIHNldHRpbmdzIHRvIGJlIGhvb2tlZCBpbnRvXG4vLyBzaGVsbCBzZXR0aW5ncyBwYWdlXG5leHBvcnQgaW50ZXJmYWNlIFNoZWxsQXBwU2V0dGluZ3Mge1xuICBhcHBJRDogc3RyaW5nO1xuICAvLyBsYWJlbCBmb3IgdGhlIHNldHRpbmdzIGdyb3VwIChlLmcuIHRoZSBhcHBzIG5hbWUpXG4gIGxhYmVsOiBzdHJpbmc7XG4gIC8vIGNvbGxlY3Rpb24gb2Ygc2V0dGluZ3MgZXhwb3NlZCBieSB0aGUgYXBwXG4gIHByb3BlcnRpZXM6IFNoZWxsQXBwU2V0dGluZ1Byb3BlcnR5W107XG59XG5leHBvcnQgaW50ZXJmYWNlIFNoZWxsQXBwU2V0dGluZ1Byb3BlcnR5IHtcbiAgbGFiZWw6IHN0cmluZztcbiAgbmFtZTogc3RyaW5nO1xuICAvLyAnc3RyaW5nJyB8ICdudW1iZXInIHwgJ2Jvb2xlYW4nIHwgJ2NhdGFsb2cnIHwgJ3VybCcgfCAnZW1haWwnO1xuICB0eXBlOiBzdHJpbmc7XG4gIHZhbHVlPzogc3RyaW5nIHwgYm9vbGVhbiB8IG51bWJlcjtcbn1cblxuLy8gUHVibGljIGludGVyZmFjZSBmb3IgYXBwc1xuXG4vKipcbiAqIEBkZXByZWNhdGVkXG4gKi9cbmV4cG9ydCB0eXBlIEFwcFNjaGVtYUZsYXZvck9yaWdpbiA9IEFwcEZsYXZvck9yaWdpbjtcbi8qKlxuICogQGRlcHJlY2F0ZWRcbiAqL1xuZXhwb3J0IHR5cGUgQXBwU2NoZW1hRmxhdm9yID0gQXBwRmxhdm9yO1xuXG5leHBvcnQgdHlwZSBBcHBGbGF2b3JPcmlnaW4gPSAnYXBwJyB8ICdjb25maWcnO1xuXG4vLyBGTEFWT1JTXG5leHBvcnQgdHlwZSBPYmplY3RGbGF2b3IgPSBBcHBGbGF2b3IgJiB7IGFwcDogc3RyaW5nOyBvcmlnaW46IEFwcEZsYXZvck9yaWdpbjsgbmFtZT86IHN0cmluZzsgZGVzY3JpcHRpb24/OiBzdHJpbmcgfTtcblxuLy8gRGVmaW5pdGlvbiBvZiBhbiBvYmplY3QgZmxhdm9yLlxuZXhwb3J0IGludGVyZmFjZSBBcHBGbGF2b3IgZXh0ZW5kcyBPYmplY3RUeXBlRmxhdm9yIHtcbiAgb2JqZWN0VHlwZUlEOiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uS2V5Pzogc3RyaW5nO1xuICAvLyB1c2UgdGhlIGRlZmF1bHQgYXBwbHkgY29tcG9uZW50IChwcmV2aWV3IGFuZCBtZXRhZGF0YSBvdmVybGF5KVxuICB1c2VEZWZhdWx0QXBwbHlDb21wb25lbnQ/OiBib29sZWFuO1xuICAvLyBzZXQgYSBjdXN0b20gYXBwbHkgY29tcG9uZW50XG4gIGFwcGx5Q29tcG9uZW50PzogVHlwZTxhbnk+O1xufVxuXG5leHBvcnQgZW51bSBHbG9iYWxTaG9ydGN1dCB7XG4gIHNlYXJjaCA9ICdzZWFyY2gnXG59XG4iXX0=
@@ -10,6 +10,21 @@ import { SHELL_CONFIG_TYPES } from '../shell-config/shell-config.const';
10
10
  import { ShellConfigService } from '../shell-config/shell-config.service';
11
11
  import * as i0 from "@angular/core";
12
12
  export class ShellService {
13
+ #dmsService;
14
+ #dialog;
15
+ #system;
16
+ #userService;
17
+ // TODO: Need orignal MatIconRegistry to #registerObjectTypeIcons, otherwise icons could not be registered in the namespace
18
+ // #iconRegistry = inject(YuvMatIconRegistry);
19
+ #iconRegistry;
20
+ #shellConfig;
21
+ #configService;
22
+ #sanitizer;
23
+ #DOCUMENT;
24
+ #appSettings;
25
+ #appSettingsSubject;
26
+ #defaultShellConfig;
27
+ #dialogStates;
13
28
  constructor() {
14
29
  this.#dmsService = inject(DmsService);
15
30
  this.#dialog = inject(MatDialog);
@@ -53,21 +68,39 @@ export class ShellService {
53
68
  this._extensions = {};
54
69
  this._objectFlavors = [];
55
70
  this._objectCreateFlavors = [];
71
+ this.#dialogStates = {};
72
+ this.translate.onLangChange.subscribe(() => {
73
+ this.apps.set(this.#getMappedApps(this.apps()));
74
+ });
75
+ fromEvent(window, 'popstate').subscribe((e) => {
76
+ if (e.state && e.state.dialogId) {
77
+ const id = e.state.dialogId;
78
+ if (this.#dialogStates[id]) {
79
+ // Close dialog ...
80
+ this.#dialogStates[id].ref.close({ closedByPopState: true });
81
+ // ... and unsubscribe from close subscription
82
+ this.#dialogStates[id].sub.unsubscribe();
83
+ delete this.#dialogStates[id];
84
+ }
85
+ }
86
+ });
87
+ this.#dialog.afterOpened.subscribe((ref) => {
88
+ const id = ref.id;
89
+ this.#dialogStates[id] = {
90
+ sub: ref.afterClosed().subscribe((dialogRes) => {
91
+ this.#dialogStates[id].sub.unsubscribe();
92
+ delete this.#dialogStates[id];
93
+ if (dialogRes?.closedByPopState)
94
+ return;
95
+ // history.back();
96
+ }),
97
+ ref
98
+ };
99
+ history.pushState({
100
+ dialogId: id
101
+ }, '', `${window.location.href}#${id}`);
102
+ });
56
103
  }
57
- #dmsService;
58
- #dialog;
59
- #system;
60
- #userService;
61
- // TODO: Need orignal MatIconRegistry to #registerObjectTypeIcons, otherwise icons could not be registered in the namespace
62
- // #iconRegistry = inject(YuvMatIconRegistry);
63
- #iconRegistry;
64
- #shellConfig;
65
- #configService;
66
- #sanitizer;
67
- #DOCUMENT;
68
- #appSettings;
69
- #appSettingsSubject;
70
- #defaultShellConfig;
71
104
  pickFile() {
72
105
  const input = this.#DOCUMENT.createElement('input');
73
106
  input.type = 'file';
@@ -83,11 +116,31 @@ export class ShellService {
83
116
  }));
84
117
  }
85
118
  setApps(apps) {
86
- this.apps.set(apps);
119
+ this.apps.set(this.#getMappedApps(apps));
87
120
  const appBaseRoutes = {};
88
121
  apps.forEach((a) => (appBaseRoutes[a.id] = a.path || ''));
89
122
  this.appBaseRoutes = appBaseRoutes;
90
123
  }
124
+ #getMappedApps(apps) {
125
+ return apps.map((a) => {
126
+ const ma = {
127
+ ...a,
128
+ title: this.#getAppTitle(a)
129
+ };
130
+ if (a.options?.appClaimKey) {
131
+ ma.options = { ...ma.options, appClaim: this.#getAppClaim(a.options.appClaimKey) || a.options.appClaim };
132
+ }
133
+ return ma;
134
+ });
135
+ }
136
+ #getAppTitle(a) {
137
+ const translatedTitle = this.translate.instant(a.id);
138
+ return translatedTitle && !translatedTitle.startsWith('!missing') ? translatedTitle : a.title || '';
139
+ }
140
+ #getAppClaim(claimKey) {
141
+ const translatedClaim = this.translate.instant(claimKey);
142
+ return translatedClaim && !translatedClaim.startsWith('!missing') ? translatedClaim : undefined;
143
+ }
91
144
  getApp(id) {
92
145
  return this.apps().find((a) => id === a.id);
93
146
  }
@@ -390,5 +443,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImpo
390
443
  args: [{
391
444
  providedIn: 'root'
392
445
  }]
393
- }] });
394
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hlbGwuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMveXV1dmlzL2NsaWVudC1zaGVsbC1jb3JlL3NyYy9saWIvc2VydmljZXMvc2hlbGwvc2hlbGwuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFRLE1BQU0sZUFBZSxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDekQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3pELE9BQU8sRUFDTCxPQUFPLEVBQ1AsbUJBQW1CLEVBQ25CLGFBQWEsRUFFYixVQUFVLEVBRVYsYUFBYSxFQUNiLFVBQVUsRUFDVixnQkFBZ0IsRUFDaEIsV0FBVyxFQUNYLEtBQUssRUFFTixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsY0FBYyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQWMsRUFBRSxFQUFFLGFBQWEsRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDeEksT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFHaEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFFeEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7O0FBSzFFLE1BQU0sT0FBTyxZQUFZO0lBSHpCO1FBSUUsZ0JBQVcsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDakMsWUFBTyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM1QixZQUFPLEdBQUcsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ2hDLGlCQUFZLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ25DLDJIQUEySDtRQUMzSCw4Q0FBOEM7UUFDOUMsa0JBQWEsR0FBRyxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDeEMsaUJBQVksR0FBRyxNQUFNLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUMxQyxtQkFBYyxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUN2QyxlQUFVLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ2xDLGNBQVMsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDckIsY0FBUyxHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBRXJDLGVBQVUsR0FBRyxDQUFDLENBQUM7UUFDZixrQkFBYSxHQUFHLElBQUksZUFBZSxDQUFVLEtBQUssQ0FBQyxDQUFDO1FBQzVELFlBQU8sR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksRUFBRSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUVwRSxpQkFBWSxHQUFxQyxFQUFFLENBQUM7UUFDcEQsd0JBQW1CLEdBQUcsSUFBSSxhQUFhLEVBQXNCLENBQUM7UUFDOUQsaUJBQVksR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsWUFBWSxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBRS9FLGtCQUFhLEdBQTJCLEVBQUUsQ0FBQztRQUUzQyx3QkFBbUIsR0FBc0I7WUFDdkMsT0FBTyxFQUFFLG1CQUFtQixDQUFDLE9BQU87WUFDcEMsa0JBQWtCLEVBQUUsbUJBQW1CLENBQUMsa0JBQWtCO1NBQzNELENBQUM7UUFDRixnQkFBVyxHQUFHLE1BQU0sQ0FBb0IsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFDbEUsU0FBSSxHQUFHLE1BQU0sQ0FBUSxFQUFFLENBQUMsQ0FBQztRQUV6Qjs7Ozs7V0FLRztRQUNILHFCQUFnQixHQUErQixTQUFTLENBQWdCLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQyxJQUFJLENBQy9GLEdBQUcsQ0FBQyxDQUFDLENBQWdCLEVBQUUsRUFBRTtZQUN2Qiw2QkFBNkI7WUFDN0Isd0NBQXdDO1lBQ3hDLHdCQUF3QjtZQUN4QixrQ0FBa0M7WUFDbEMsSUFBSTtZQUNKLE9BQU8sU0FBUyxDQUFDO1FBQ25CLENBQUMsQ0FBQyxFQUNGLE1BQU0sQ0FBQyxDQUFDLENBQTZCLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxTQUFTLENBQUMsRUFDMUQsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFtQixDQUFDLENBQ2hDLENBQUM7UUFFTSxnQkFBVyxHQUFrQyxFQUFFLENBQUM7UUFDaEQsbUJBQWMsR0FBbUIsRUFBRSxDQUFDO1FBQ3BDLHlCQUFvQixHQUF5QixFQUFFLENBQUM7S0F1V3pEO0lBMVpDLFdBQVcsQ0FBc0I7SUFDakMsT0FBTyxDQUFxQjtJQUM1QixPQUFPLENBQXlCO0lBQ2hDLFlBQVksQ0FBdUI7SUFDbkMsMkhBQTJIO0lBQzNILDhDQUE4QztJQUM5QyxhQUFhLENBQTJCO0lBQ3hDLFlBQVksQ0FBOEI7SUFDMUMsY0FBYyxDQUF5QjtJQUN2QyxVQUFVLENBQXdCO0lBQ2xDLFNBQVMsQ0FBb0I7SUFPN0IsWUFBWSxDQUF3QztJQUNwRCxtQkFBbUIsQ0FBMkM7SUFLOUQsbUJBQW1CLENBR2pCO0lBMkJGLFFBQVE7UUFDTixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNwRCxLQUFLLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQztRQUNwQixLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDZCxPQUFPLFNBQVMsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUNwQyxHQUFHLENBQUMsQ0FBQyxDQUFRLEVBQUUsRUFBRSxDQUFFLENBQUMsQ0FBQyxNQUEyQixDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxFQUNwRSxHQUFHLENBQUMsR0FBRyxFQUFFO1lBQ1AsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ2pCLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0lBRUQsY0FBYyxDQUFDLEdBQXNCO1FBQ25DLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQy9CLE9BQU8sRUFBRSxHQUFHLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQyxPQUFPO1lBQ2xDLGtCQUFrQixFQUFFLEdBQUcsQ0FBQyxrQkFBa0IsSUFBSSxFQUFFLENBQUMsa0JBQWtCO1NBQ3BFLENBQUMsQ0FBQyxDQUFDO0lBQ04sQ0FBQztJQUVELE9BQU8sQ0FBQyxJQUFXO1FBQ2pCLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3BCLE1BQU0sYUFBYSxHQUEyQixFQUFFLENBQUM7UUFDakQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztRQUMxRCxJQUFJLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQztJQUNyQyxDQUFDO0lBRUQsTUFBTSxDQUFDLEVBQVU7UUFDZixPQUFPLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUVELE9BQU8sQ0FBQyxNQUFnQixFQUFFO1FBQ3hCLE9BQU8sR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2xGLENBQUM7SUFFRCxVQUFVO0lBQ1YsbUNBQW1DO0lBQ25DLG9DQUFvQztJQUNwQyxJQUFJO0lBRUosd0RBQXdEO0lBQ3hELHVEQUF1RDtJQUN2RCxJQUFJO0lBRUo7Ozs7O09BS0c7SUFDSCxtQkFBbUIsQ0FBQyxLQUFhLEVBQUUsR0FBcUI7UUFDdEQsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUM7UUFDL0IsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsaUJBQWlCLENBQUMsS0FBYTtRQUM3QixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLElBQUksQ0FDakMsR0FBRyxDQUFDLENBQUMsQ0FBc0IsRUFBRSxFQUFFO1lBQzdCLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxZQUFZLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUNyRyxDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQztJQUVELG9CQUFvQixDQUFDLEtBQWEsRUFBRSxRQUEwQjtRQUM1RCxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxpQkFBaUIsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQzFGLENBQUM7SUFFRCxlQUFlO1FBQ2IsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUM7YUFDbEMsR0FBRyxDQUFDLENBQUMsR0FBVyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ3JCLEtBQUssRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUs7WUFDbkMsS0FBSyxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSztZQUNuQyxVQUFVLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxVQUFVO1NBQzlDLENBQUMsQ0FBQzthQUNGLElBQUksRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVELE9BQU87UUFDTCxJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDMUIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDaEMsQ0FBQztRQUNELElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUNwQixDQUFDO0lBQ0QsVUFBVTtRQUNSLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNsQixJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDMUIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDakMsQ0FBQztJQUNILENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILHlCQUF5QixDQUFDLE9BQTZCO1FBQ3JELE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUEwQixFQUFFLEVBQUU7WUFDN0MsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDM0UsSUFBSSxHQUFHLEtBQUssQ0FBQyxDQUFDO2dCQUFFLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDekQsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsMEJBQTBCLENBQUMsT0FBNkI7UUFDdEQsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDM0YsQ0FBQztJQUVEOztPQUVHO0lBQ0gsc0JBQXNCO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLG9CQUFvQixDQUFDO0lBQ25DLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0gsbUJBQW1CLENBQUMsT0FBb0IsRUFBRSxHQUFHLEdBQUcsUUFBUSxFQUFFLFNBQTJCLEtBQUs7UUFDeEYsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNsRSxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsb0JBQW9CLENBQUMsT0FBb0IsRUFBRSxHQUFHLEdBQUcsUUFBUTtRQUN2RCxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDM0QsQ0FBQztJQUVEOzs7Ozs7Ozs7O09BVUc7SUFDSCxrQkFBa0IsQ0FBQyxNQUFpQixFQUFFLEdBQUcsR0FBRyxRQUFRLEVBQUUsU0FBMkIsS0FBSztRQUNwRixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxNQUFNLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUssR0FBRyxDQUFDLENBQUM7UUFDdEYsSUFBSSxHQUFHLEtBQUssQ0FBQyxDQUFDO1lBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLE1BQU0sRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUN2RSxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILG1CQUFtQixDQUFDLE1BQWlCLEVBQUUsR0FBRyxHQUFHLFFBQVE7UUFDbkQsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxNQUFNLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUssR0FBRyxDQUFDLENBQUM7SUFDL0YsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsZ0JBQWdCLENBQUMsR0FBWTtRQUMzQixPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUM7SUFDeEYsQ0FBQztJQUVEOzs7Ozs7OztPQVFHO0lBQ0gsd0JBQXdCLENBQUMsU0FBb0IsRUFBRSxNQUFvQixFQUFFLElBQVUsRUFBRSxjQUEwQjtRQUN6RyxJQUFJLFNBQVMsRUFBRSxDQUFDO1lBQ2QsTUFBTSxFQUFFLEdBQUcsY0FBYyxJQUFJLE1BQU0sQ0FBQyxjQUFjLENBQUM7WUFDbkQsSUFBSSxFQUFFLEVBQUUsQ0FBQztnQkFDUCxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUU7b0JBQ3BCLFFBQVEsRUFBRSxNQUFNO29CQUNoQixTQUFTLEVBQUUsTUFBTTtvQkFDakIsUUFBUSxFQUFFLE1BQU07b0JBQ2hCLElBQUksRUFBRTt3QkFDSixTQUFTO3dCQUNULE1BQU07d0JBQ04sSUFBSTtxQkFDTDtpQkFDRixDQUFDLENBQUM7Z0JBQ0gsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDbEIsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLE1BQU0sSUFBSSxHQUFjLFNBQVMsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMseUJBQXlCLENBQWMsSUFBSSxFQUFFLENBQUM7Z0JBQ3pHLE1BQU0sSUFBSSxHQUFRLEVBQUUsQ0FBQztnQkFDckIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLHlCQUF5QixDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQzVFLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQUMsU0FBUyxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDckYsQ0FBQztRQUNILENBQUM7O1lBQU0sT0FBTyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDMUIsQ0FBQztJQUVELGtCQUFrQixDQUFDLFNBQW9CLEVBQUUsTUFBb0I7UUFDM0QsTUFBTSxJQUFJLEdBQTRCO1lBQ3BDLENBQUMsbUJBQW1CLENBQUMseUJBQXlCLENBQUMsRUFBRyxTQUFTLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLHlCQUF5QixDQUFjLENBQUMsTUFBTSxDQUNqSSxDQUFDLEdBQVcsRUFBRSxFQUFFLENBQUMsR0FBRyxLQUFLLE1BQU0sQ0FBQyxHQUFHLENBQ3BDO1NBQ0YsQ0FBQztRQUNGLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDcEYsQ0FBQztJQUVEOzs7Ozs7Ozs7T0FTRztJQUNILDRCQUE0QixDQUFDLFFBQWdCLEVBQUUsR0FBWSxFQUFFLGFBQThCO1FBQ3pGLE9BQU8sQ0FBQyxHQUFHLENBQUMsYUFBYSxJQUFJLEVBQUUsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLE1BQU0sQ0FDOUQsQ0FBQyxFQUFnQixFQUFFLEVBQUUsQ0FDbkIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxZQUFZLEVBQUUsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLFlBQVksRUFBRSxPQUFPLElBQUksRUFBRSxDQUFDLFlBQVksRUFBRSxTQUFTLENBQUMsQ0FBQztZQUN2RixDQUFDLENBQUMsRUFBRSxDQUFDLFlBQVk7Z0JBQ2YsQ0FBQyxFQUFFLENBQUMsWUFBWSxFQUFFLFNBQVM7Z0JBQzNCLENBQUMsRUFBRSxDQUFDLFlBQVksRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksRUFBRSxDQUFDLEdBQUcsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQ3hILENBQUM7SUFDSixDQUFDO0lBRUQsMEJBQTBCLENBQUMsR0FBWSxFQUFFLGFBQThCO1FBQ3JFLE9BQU8sQ0FBQyxHQUFHLENBQUMsYUFBYSxJQUFJLEVBQUUsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQWdCLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxZQUFZLEVBQUUsT0FBTyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksRUFBRSxDQUFDLEdBQUcsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQy9JLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsdUJBQXVCLENBQUMsU0FBb0I7UUFJMUMsTUFBTSxPQUFPLEdBQW1CLEVBQUUsQ0FBQztRQUNuQyxNQUFNLFVBQVUsR0FBbUIsRUFBRSxDQUFDO1FBQ3RDLElBQUksU0FBUyxFQUFFLENBQUM7WUFDZCxNQUFNLElBQUksR0FBYyxTQUFTLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLHlCQUF5QixDQUFjLElBQUksRUFBRSxDQUFDO1lBQ3pHLElBQUksU0FBUyxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUN0QixJQUFJLENBQUMsNEJBQTRCLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFvQixFQUFFLEVBQUU7b0JBQzdGLE1BQU0sR0FBRzt3QkFDUCxHQUFHLE1BQU07d0JBQ1QsSUFBSSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7d0JBQ3BGLFdBQVcsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLHVCQUF1QixDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO3FCQUNwSixDQUFDO29CQUNGLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQzt3QkFDOUIsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFDdkIsQ0FBQzt5QkFBTSxDQUFDO3dCQUNOLFVBQVUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7b0JBQzFCLENBQUM7Z0JBQ0gsQ0FBQyxDQUFDLENBQUM7WUFDTCxDQUFDO1lBRUQsSUFBSSxTQUFTLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ3ZCLElBQUksQ0FBQywwQkFBMEIsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQW9CLEVBQUUsRUFBRTtvQkFDakUsTUFBTSxHQUFHO3dCQUNQLEdBQUcsTUFBTTt3QkFDVCxJQUFJLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQzt3QkFDcEYsV0FBVyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsdUJBQXVCLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7cUJBQ3BKLENBQUM7b0JBQ0YsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO3dCQUM5QixPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO29CQUN2QixDQUFDO3lCQUFNLENBQUM7d0JBQ04sVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFDMUIsQ0FBQztnQkFDSCxDQUFDLENBQUMsQ0FBQztZQUNMLENBQUM7UUFDSCxDQUFDO1FBQ0QsT0FBTyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsQ0FBQztJQUNqQyxDQUFDO0lBRUQsY0FBYyxDQUFDLEVBQVU7UUFDdkIsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzFFLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxTQUFvQixFQUFFLE1BQW9CLEVBQUUsT0FBZ0MsRUFBRTtRQUM5RixNQUFNLElBQUksR0FBYyxTQUFTLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLHlCQUF5QixDQUFjLElBQUksRUFBRSxDQUFDO1FBQ3pHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyx5QkFBeUIsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzVFLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUM5RCxDQUFDO0lBRUQscUJBQXFCLENBQUMsR0FBa0I7UUFDdEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDO0lBQ3JDLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsMkJBQTJCO1FBQ3pCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUMxQixDQUFDO0lBRUQscUJBQXFCO1FBQ25CLDJCQUEyQjtRQUMzQixPQUFPLENBQUMsS0FBSyxDQUFDLCtCQUErQixDQUFDLENBQUM7UUFDL0MsT0FBTyxjQUFjLENBQ25CLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLGtCQUFrQixDQUFDLENBQUMsSUFBSSxDQUM1QyxHQUFHLENBQUMsQ0FBQyxHQUE0QixFQUFFLEVBQUU7WUFDbkMsSUFBSSxHQUFHLEVBQUUsQ0FBQztnQkFDUixJQUFJLENBQUMsd0JBQXdCLENBQUUsR0FBRyxDQUFDLElBQTBCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFFaEYsTUFBTSxHQUFHLEdBQWlCLEdBQUcsQ0FBQyxJQUEwQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztvQkFDbkUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFO29CQUNSLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRTtvQkFDVCxJQUFJLEVBQUUsQ0FBQyxDQUFDLEVBQUU7b0JBQ1YsT0FBTyxFQUFFLElBQUk7b0JBQ2IsWUFBWSxFQUFFLENBQUMsQ0FBQyxRQUFRO29CQUN4QixZQUFZLEVBQUU7d0JBQ1osT0FBTyxFQUFFLENBQUMsQ0FBQyxRQUFRLEtBQUssVUFBVSxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsUUFBUSxLQUFLLFVBQVUsQ0FBQyxNQUFNO3dCQUM3RSxTQUFTLEVBQUUsQ0FBQyxDQUFDLFFBQVEsS0FBSyxVQUFVLENBQUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxRQUFRLEtBQUssVUFBVSxDQUFDLE1BQU07d0JBQ2pGLFNBQVMsRUFBRSxDQUFDLENBQUMscUJBQXFCLElBQUksU0FBUztxQkFDaEQ7b0JBQ0Qsd0JBQXdCLEVBQUUsQ0FBQyxDQUFDLENBQUMsWUFBWTtpQkFDMUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ0osSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDcEQsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUNILENBQ0YsQ0FBQztJQUNKLENBQUM7SUFFRCx3QkFBd0IsQ0FBQyxHQUFhO1FBQ3BDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDaEQsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFO2dCQUNqQixrRkFBa0Y7Z0JBQ2xGLE1BQU0sUUFBUSxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQy9CLElBQUksUUFBUSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztvQkFDMUIsTUFBTSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsb0JBQW9CLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztvQkFDNUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxxQkFBcUIsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsOEJBQThCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFDMUgsQ0FBQztZQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsS0FBSztRQUNILHdDQUF3QztJQUMxQyxDQUFDOytHQTFaVSxZQUFZO21IQUFaLFlBQVksY0FGWCxNQUFNOzs0RkFFUCxZQUFZO2tCQUh4QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IGluamVjdCwgSW5qZWN0YWJsZSwgc2lnbmFsLCBUeXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNYXREaWFsb2cgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuaW1wb3J0IHsgTWF0SWNvblJlZ2lzdHJ5IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcbmltcG9ydCB7XG4gIEFwaUJhc2UsXG4gIEJhc2VPYmplY3RUeXBlRmllbGQsXG4gIENvbmZpZ1NlcnZpY2UsXG4gIERtc09iamVjdCxcbiAgRG1zU2VydmljZSxcbiAgT2JqZWN0Q3JlYXRlRmxhdm9yLFxuICBTeXN0ZW1TZXJ2aWNlLFxuICBTeXN0ZW1UeXBlLFxuICBUcmFuc2xhdGVTZXJ2aWNlLFxuICBVc2VyU2VydmljZSxcbiAgVXRpbHMsXG4gIFl1dlVzZXJcbn0gZnJvbSAnQHl1dXZpcy9jbGllbnQtY29yZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGRlYm91bmNlVGltZSwgZmlsdGVyLCBmaXJzdCwgZmlyc3RWYWx1ZUZyb20sIGZyb21FdmVudCwgbWFwLCBPYnNlcnZhYmxlLCBvZiwgUmVwbGF5U3ViamVjdCwgdGFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBDTElFTlRfU0hFTExfQVNTRVRTIH0gZnJvbSAnLi4vLi4vY2xpZW50LXNoZWxsLmFzc2V0cyc7XG5pbXBvcnQgeyBBcHAsIEFwcEZsYXZvciwgQ2xpZW50U2hlbGxDb25maWcsIEdsb2JhbFNob3J0Y3V0LCBPYmplY3RGbGF2b3IsIFNoZWxsQXBwU2V0dGluZ3MgfSBmcm9tICcuLi8uLi9jbGllbnQtc2hlbGwuaW50ZXJmYWNlJztcbmltcG9ydCB7IFRpbGVFeHRlbnNpb24gfSBmcm9tICcuLi8uLi90aWxlLWV4dGVuc2lvbi5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgU0hFTExfQ09ORklHX1RZUEVTIH0gZnJvbSAnLi4vc2hlbGwtY29uZmlnL3NoZWxsLWNvbmZpZy5jb25zdCc7XG5pbXBvcnQgeyBDbGllbnRTaGVsbFR5cGUsIFNoZWxsQ29uZmlnIH0gZnJvbSAnLi4vc2hlbGwtY29uZmlnL3NoZWxsLWNvbmZpZy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgU2hlbGxDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi4vc2hlbGwtY29uZmlnL3NoZWxsLWNvbmZpZy5zZXJ2aWNlJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgU2hlbGxTZXJ2aWNlIHtcbiAgI2Rtc1NlcnZpY2UgPSBpbmplY3QoRG1zU2VydmljZSk7XG4gICNkaWFsb2cgPSBpbmplY3QoTWF0RGlhbG9nKTtcbiAgI3N5c3RlbSA9IGluamVjdChTeXN0ZW1TZXJ2aWNlKTtcbiAgI3VzZXJTZXJ2aWNlID0gaW5qZWN0KFVzZXJTZXJ2aWNlKTtcbiAgLy8gVE9ETzogTmVlZCBvcmlnbmFsIE1hdEljb25SZWdpc3RyeSB0byAjcmVnaXN0ZXJPYmplY3RUeXBlSWNvbnMsIG90aGVyd2lzZSBpY29ucyBjb3VsZCBub3QgYmUgcmVnaXN0ZXJlZCBpbiB0aGUgbmFtZXNwYWNlXG4gIC8vICNpY29uUmVnaXN0cnkgPSBpbmplY3QoWXV2TWF0SWNvblJlZ2lzdHJ5KTtcbiAgI2ljb25SZWdpc3RyeSA9IGluamVjdChNYXRJY29uUmVnaXN0cnkpO1xuICAjc2hlbGxDb25maWcgPSBpbmplY3QoU2hlbGxDb25maWdTZXJ2aWNlKTtcbiAgI2NvbmZpZ1NlcnZpY2UgPSBpbmplY3QoQ29uZmlnU2VydmljZSk7XG4gICNzYW5pdGl6ZXIgPSBpbmplY3QoRG9tU2FuaXRpemVyKTtcbiAgI0RPQ1VNRU5UID0gaW5qZWN0KERPQ1VNRU5UKTtcbiAgcHJpdmF0ZSB0cmFuc2xhdGUgPSBpbmplY3QoVHJhbnNsYXRlU2VydmljZSk7XG5cbiAgcHJpdmF0ZSBfYnVzeUNvdW50ID0gMDtcbiAgcHJpdmF0ZSBpc0J1c3lTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIGlzQnVzeSQgPSB0aGlzLmlzQnVzeVN1YmplY3QuYXNPYnNlcnZhYmxlKCkucGlwZShkZWJvdW5jZVRpbWUoNTAwKSk7XG5cbiAgI2FwcFNldHRpbmdzOiBSZWNvcmQ8c3RyaW5nLCBTaGVsbEFwcFNldHRpbmdzPiA9IHt9O1xuICAjYXBwU2V0dGluZ3NTdWJqZWN0ID0gbmV3IFJlcGxheVN1YmplY3Q8U2hlbGxBcHBTZXR0aW5nc1tdPigpO1xuICBhcHBTZXR0aW5ncyQgPSB0aGlzLiNhcHBTZXR0aW5nc1N1YmplY3QuYXNPYnNlcnZhYmxlKCkucGlwZShkZWJvdW5jZVRpbWUoNTAwKSk7XG5cbiAgYXBwQmFzZVJvdXRlczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuXG4gICNkZWZhdWx0U2hlbGxDb25maWc6IENsaWVudFNoZWxsQ29uZmlnID0ge1xuICAgIGFwcEljb246IENMSUVOVF9TSEVMTF9BU1NFVFMuYXBwSWNvbixcbiAgICBzaGVsbEljb25OYW1lc3BhY2U6IENMSUVOVF9TSEVMTF9BU1NFVFMuc2hlbGxJY29uTmFtZXNwYWNlXG4gIH07XG4gIHNoZWxsQ29uZmlnID0gc2lnbmFsPENsaWVudFNoZWxsQ29uZmlnPih0aGlzLiNkZWZhdWx0U2hlbGxDb25maWcpO1xuICBhcHBzID0gc2lnbmFsPEFwcFtdPihbXSk7XG5cbiAgLyoqIFRPRE86IGltcGxlbWVudCB0aGlzIGZlYXR1cmUgPz8/P1xuICAgKiBHbG9iYWwgc2hvcnRjdXRzIGFyZSBjYXB0dXJlZCBieSB0aGUgc2hlbGwgdG8gcHJvdmlkZSBhIGNvbnNpc3RlbnQgZXhwZXJpZW5jZVxuICAgKiBhY2Nyb3NzIGFsbCBhcHBzLiBTZWFyY2ggaXMgb25lIGV4YW1wbGUuIEFwcHMgc2hvdWxkIG5vdCBkZWZpbmUgdGhlaXIgb3duIHNob3VydGN1dHNcbiAgICogZm9yIHNlYXJjaC4gSW5zdGVhZCB0aGV5IHNob3VsZCBzdWJzY3JpYmUgdG8gdGhlIGdsb2JhbCBzaG9ydGN1dHMgYW5kIGluaXRpYWxpemUgdGhlaXJcbiAgICogc2VhcmNoIGJhc2VkIG9uIHRoZSBnbG9iYWwgc2VhcmNoIHNob3J0Y3V0LlxuICAgKi9cbiAgZ2xvYmFsU2hvcnRjdXRzJDogT2JzZXJ2YWJsZTxHbG9iYWxTaG9ydGN1dD4gPSBmcm9tRXZlbnQ8S2V5Ym9hcmRFdmVudD4oZG9jdW1lbnQsICdrZXlkb3duJykucGlwZShcbiAgICBtYXAoKGU6IEtleWJvYXJkRXZlbnQpID0+IHtcbiAgICAgIC8vIGdsb2JhbCBzaG9ydGN1dCBmb3Igc2VhcmNoXG4gICAgICAvLyBpZiAoZS5jdHJsS2V5ICYmIGUuY29kZSA9PT0gJ0tleUYnKSB7XG4gICAgICAvLyAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgIC8vICAgcmV0dXJuIEdsb2JhbFNob3J0Y3V0LnNlYXJjaDtcbiAgICAgIC8vIH1cbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfSksXG4gICAgZmlsdGVyKChzOiBHbG9iYWxTaG9ydGN1dCB8IHVuZGVmaW5lZCkgPT4gcyAhPT0gdW5kZWZpbmVkKSxcbiAgICBtYXAoKHMpID0+IHMgYXMgR2xvYmFsU2hvcnRjdXQpXG4gICk7XG5cbiAgcHJpdmF0ZSBfZXh0ZW5zaW9uczogUmVjb3JkPHN0cmluZywgVGlsZUV4dGVuc2lvbj4gPSB7fTtcbiAgcHJpdmF0ZSBfb2JqZWN0Rmxhdm9yczogT2JqZWN0Rmxhdm9yW10gPSBbXTtcbiAgcHJpdmF0ZSBfb2JqZWN0Q3JlYXRlRmxhdm9yczogT2JqZWN0Q3JlYXRlRmxhdm9yW10gPSBbXTtcblxuICBwaWNrRmlsZSgpOiBPYnNlcnZhYmxlPEZpbGUgfCBudWxsPiB7XG4gICAgY29uc3QgaW5wdXQgPSB0aGlzLiNET0NVTUVOVC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpO1xuICAgIGlucHV0LnR5cGUgPSAnZmlsZSc7XG4gICAgaW5wdXQuY2xpY2soKTtcbiAgICByZXR1cm4gZnJvbUV2ZW50KGlucHV0LCAnY2hhbmdlJykucGlwZShcbiAgICAgIG1hcCgoZTogRXZlbnQpID0+IChlLnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS5maWxlcz8uWzBdIHx8IG51bGwpLFxuICAgICAgdGFwKCgpID0+IHtcbiAgICAgICAgaW5wdXQucmVtb3ZlKCk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBzZXRTaGVsbENvbmZpZyhjc2M6IENsaWVudFNoZWxsQ29uZmlnKSB7XG4gICAgdGhpcy5zaGVsbENvbmZpZy51cGRhdGUoKHNjKSA9PiAoe1xuICAgICAgYXBwSWNvbjogY3NjLmFwcEljb24gPz8gc2MuYXBwSWNvbixcbiAgICAgIHNoZWxsSWNvbk5hbWVzcGFjZTogY3NjLnNoZWxsSWNvbk5hbWVzcGFjZSA/PyBzYy5zaGVsbEljb25OYW1lc3BhY2VcbiAgICB9KSk7XG4gIH1cblxuICBzZXRBcHBzKGFwcHM6IEFwcFtdKSB7XG4gICAgdGhpcy5hcHBzLnNldChhcHBzKTtcbiAgICBjb25zdCBhcHBCYXNlUm91dGVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG4gICAgYXBwcy5mb3JFYWNoKChhKSA9PiAoYXBwQmFzZVJvdXRlc1thLmlkXSA9IGEucGF0aCB8fCAnJykpO1xuICAgIHRoaXMuYXBwQmFzZVJvdXRlcyA9IGFwcEJhc2VSb3V0ZXM7XG4gIH1cblxuICBnZXRBcHAoaWQ6IHN0cmluZyk6IEFwcCB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuYXBwcygpLmZpbmQoKGEpID0+IGlkID09PSBhLmlkKTtcbiAgfVxuXG4gIGdldEFwcHMoaWRzOiBzdHJpbmdbXSA9IFtdKTogQXBwW10ge1xuICAgIHJldHVybiBpZHMubGVuZ3RoID8gdGhpcy5hcHBzKCkuZmlsdGVyKChhKSA9PiBpZHMuaW5jbHVkZXMoYS5pZCkpIDogdGhpcy5hcHBzKCk7XG4gIH1cblxuICAvLyAvLyBBUFBTXG4gIC8vIHJlZ2lzdGVyQXBwKHNjaGVtYTogQXBwU2NoZW1hKSB7XG4gIC8vICAgdGhpcy4jYXBwU2NoZW1hdGEucHVzaChzY2hlbWEpO1xuICAvLyB9XG5cbiAgLy8gZ2V0UmVnaXN0ZXJlZEFwcChpZDogc3RyaW5nKTogQXBwU2NoZW1hIHwgdW5kZWZpbmVkIHtcbiAgLy8gICByZXR1cm4gdGhpcy4jYXBwU2NoZW1hdGEuZmluZCgoYSkgPT4gYS5pZCA9PT0gaWQpO1xuICAvLyB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVyIHNldHRpbmdzIGZvciBhcHBzIHRvIGhvb2sgaW50byBzaGVsbCBzZXR0aW5ncyBwYWdlLlxuICAgKiBUaGVzZSBleHBvc2VkIHNldHRpbmdzIHdpbGwgYmUgc2F2ZWQgaW4gdGhlIHVzZXJzIHNldHRpbmdzIG9uIHRoZSBiYWNrZW5kLlxuICAgKiBAcGFyYW0gYXBwSUQgSUQgb2YgdGhlIGFwcCB0aGF0IGV4cG9zZXMgdGhlIHNldHRpbmdzXG4gICAqIEBwYXJhbSBjZmcgU2hlbGxBcHBTZXR0aW5ncyBvYmplY3QgY29udGFpbmluZyB0aGUgc2V0dGluZ3NcbiAgICovXG4gIHJlZ2lzdGVyQXBwU2V0dGluZ3MoYXBwSUQ6IHN0cmluZywgY2ZnOiBTaGVsbEFwcFNldHRpbmdzKSB7XG4gICAgdGhpcy4jYXBwU2V0dGluZ3NbYXBwSURdID0gY2ZnO1xuICAgIHRoaXMuI2FwcFNldHRpbmdzU3ViamVjdC5uZXh0KHRoaXMuI2dldEFwcFNldHRpbmdzKCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIExvYWQgcGVyc2lzdGVkIHNldHRpbmdzIGZvciBhIHNwZWNpZmljIGFwcFxuICAgKiBAcGFyYW0gYXBwSUQgSUQgb2YgdGhlIGFwcCB0byBsb2FkIHRoZSBzZXR0aW5ncyBmb3JcbiAgICovXG4gIHVzZXJzQXBwU2V0dGluZ3MkKGFwcElEOiBzdHJpbmcpOiBPYnNlcnZhYmxlPFNoZWxsQXBwU2V0dGluZ3MgfCB1bmRlZmluZWQ+IHtcbiAgICByZXR1cm4gdGhpcy4jdXNlclNlcnZpY2UudXNlciQucGlwZShcbiAgICAgIG1hcCgodTogWXV2VXNlciB8IHVuZGVmaW5lZCkgPT4ge1xuICAgICAgICByZXR1cm4gdSAmJiB1LnVzZXJTZXR0aW5ncy5jbGllbnRBcHBTZXR0aW5ncyA/IHUudXNlclNldHRpbmdzLmNsaWVudEFwcFNldHRpbmdzW2FwcElEXSA6IHVuZGVmaW5lZDtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHNhdmVVc2Vyc0FwcFNldHRpbmdzKGFwcElEOiBzdHJpbmcsIHNldHRpbmdzOiBTaGVsbEFwcFNldHRpbmdzKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy4jdXNlclNlcnZpY2Uuc2F2ZVVzZXJTZXR0aW5ncyh7IGNsaWVudEFwcFNldHRpbmdzOiB7IFthcHBJRF06IHNldHRpbmdzIH0gfSk7XG4gIH1cblxuICAjZ2V0QXBwU2V0dGluZ3MoKTogU2hlbGxBcHBTZXR0aW5nc1tdIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy4jYXBwU2V0dGluZ3MpXG4gICAgICAubWFwKChrZXk6IHN0cmluZykgPT4gKHtcbiAgICAgICAgYXBwSUQ6IHRoaXMuI2FwcFNldHRpbmdzW2tleV0uYXBwSUQsXG4gICAgICAgIGxhYmVsOiB0aGlzLiNhcHBTZXR0aW5nc1trZXldLmxhYmVsLFxuICAgICAgICBwcm9wZXJ0aWVzOiB0aGlzLiNhcHBTZXR0aW5nc1trZXldLnByb3BlcnRpZXNcbiAgICAgIH0pKVxuICAgICAgLnNvcnQoKTtcbiAgfVxuXG4gIGFkZEJ1c3koKSB7XG4gICAgaWYgKHRoaXMuX2J1c3lDb3VudCA9PT0gMCkge1xuICAgICAgdGhpcy5pc0J1c3lTdWJqZWN0Lm5leHQodHJ1ZSk7XG4gICAgfVxuICAgIHRoaXMuX2J1c3lDb3VudCsrO1xuICB9XG4gIHJlbW92ZUJ1c3koKSB7XG4gICAgdGhpcy5fYnVzeUNvdW50LS07XG4gICAgaWYgKHRoaXMuX2J1c3lDb3VudCA9PT0gMCkge1xuICAgICAgdGhpcy5pc0J1c3lTdWJqZWN0Lm5leHQoZmFsc2UpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBFeHBvc2VzIG9iamVjdCBjcmVhdGUgZmxhdm9ycyB0byB0aGUgc2hlbGwuXG4gICAqIFRoZXMgZmxhdm9ycyBkZXNjcmliZSBkaWZmZXJlbnQgd2F5cyBvZiBob3cgb2JqZWN0cyBjYW4gYmUgY3JlYXRlZC4gU28gYXBwc1xuICAgKiBjYW4gcmVnaXN0ZXIgY3VzdG9tIHdheXMgb2YgY3JlYXRpbmcgb2JqZWN0cyB0aGF0IGNhbiB0aGVuIGJlIHVzZWQgYnkgb3RoZXIgYXBwcy5cbiAgICogQHBhcmFtIGZsYXZvcnMgQ3JlYXRlIGZsYXZvcnMgdG8gYmUgZXhwb3NlZFxuICAgKi9cbiAgZXhwb3NlT2JqZWN0Q3JlYXRlRmxhdm9ycyhmbGF2b3JzOiBPYmplY3RDcmVhdGVGbGF2b3JbXSkge1xuICAgIGZsYXZvcnMuZm9yRWFjaCgoZmxhdm9yOiBPYmplY3RDcmVhdGVGbGF2b3IpID0+IHtcbiAgICAgIGNvbnN0IGlkeCA9IHRoaXMuX29iamVjdENyZWF0ZUZsYXZvcnMuZmluZEluZGV4KChmKSA9PiBmLmlkID09PSBmbGF2b3IuaWQpO1xuICAgICAgaWYgKGlkeCA9PT0gLTEpIHRoaXMuX29iamVjdENyZWF0ZUZsYXZvcnMucHVzaChmbGF2b3IpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBvYmplY3QgY3JlYXRlIGZsYXZvcnMgZnJvbSB0aGUgc2hlbGxzIHJlZ2lzdHJ5XG4gICAqIEBwYXJhbSBmbGF2b3JzIENyZWF0ZSBmbGF2b3JzIHRvIGJlIHJlbW92ZWRcbiAgICovXG4gIGNvbmNlYWxPYmplY3RDcmVhdGVGbGF2b3JzKGZsYXZvcnM6IE9iamVjdENyZWF0ZUZsYXZvcltdKSB7XG4gICAgY29uc3QgZmlkID0gZmxhdm9ycy5tYXAoKGYpID0+IGYuaWQpO1xuICAgIHRoaXMuX29iamVjdENyZWF0ZUZsYXZvcnMgPSB0aGlzLl9vYmplY3RDcmVhdGVGbGF2b3JzLmZpbHRlcigoZikgPT4gIWZpZC5pbmNsdWRlcyhmLmlkKSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGFsbCByZWdpc3RlcmQgb2JqZWN0IGNyZWF0ZSBmbGF2b3JzXG4gICAqL1xuICBnZXRPYmplY3RDcmVhdGVGbGF2b3JzKCk6IE9iamVjdENyZWF0ZUZsYXZvcltdIHtcbiAgICByZXR1cm4gdGhpcy5fb2JqZWN0Q3JlYXRlRmxhdm9ycztcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHBvc2VzIGEgbGlzdCBvZiBvYmplY3QgZmxhdm9ycyB0byB0aGUgc2hlbGwuXG4gICAqIEZsYXZvcnMgYXJlIGFibGUgdG8gYmUgYXBwbGllZCB0byBvYmplY3RzIGFuZCBhZGQgbmV3IG1ldGFkYXRhIHByb3BlcnRpZXMgdG8gdGhlbS5cbiAgICogQHBhcmFtIGZsYXZvcnMgQXJyYXkgb2YgZmxhdm9ycyB0byBiZSBleHBvc2VkXG4gICAqIEBwYXJhbSBhcHAgT3B0aW9uYWwgSUQgb2YgdGhlIGFwcCB0aGF0IGV4cG9zZXMgdGhlIGZsYXZvcnMgKGRlZmF1bHRzIHRvICdnbG9iYWwnIGlmIG5vdCBwcm92aWRlZClcbiAgICogQHBhcmFtIG9yaWdpbiBPcHRpb25hbCBvcmlnaW4gb2YgdGhlIGZsYXZvcnMuIEZsYXZvcnMgY291bGQgYmUgYWRkZWQgYnkgYXBwcyBvciBkZXJpdmVkXG4gICAqIGZyb20gYSBjb25maWd1cmF0aW9uIChkZWZhdWx0cyB0byAnYXBwJyBpZiBub3QgcHJvdmlkZWQpXG4gICAqL1xuICBleHBvc2VPYmplY3RGbGF2b3JzKGZsYXZvcnM6IEFwcEZsYXZvcltdLCBhcHAgPSAnZ2xvYmFsJywgb3JpZ2luOiAnYXBwJyB8ICdjb25maWcnID0gJ2FwcCcpIHtcbiAgICBmbGF2b3JzLmZvckVhY2goKGYpID0+IHRoaXMuZXhwb3NlT2JqZWN0Rmxhdm9yKGYsIGFwcCwgb3JpZ2luKSk7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlcyBleHBvc2VkIG9iamVjdCBmbGF2b3JzIGZyb20gdGhlIHNoZWxsLlxuICAgKiBAcGFyYW0gZmxhdm9ycyBBcnJheSBvZiBmbGF2b3JzIHRvIGJlIGNvbmNlYWxlZFxuICAgKi9cbiAgY29uY2VhbE9iamVjdEZsYXZvcnMoZmxhdm9yczogQXBwRmxhdm9yW10sIGFwcCA9ICdnbG9iYWwnKSB7XG4gICAgZmxhdm9ycy5mb3JFYWNoKChmKSA9PiB0aGlzLmNvbmNlYWxPYmplY3RGbGF2b3IoZiwgYXBwKSk7XG4gIH1cblxuICAvKipcbiAgICogRXhwb3NlcyBhbiBvYmplY3QgZmxhdm9yIHRvIHRoZSBzaGVsbC4gRmxhdm9ycyBhcmUgYWJsZSB0byBiZSBhcHBsaWVkIHRvIG9iamVjdHNcbiAgICogaW4gb3JkZXIgdG8gYWRkIGEgbmV3IGFzcGVjdCB0byB0aGVtLiBBbiBvYmplY3QgY29udGFpbmluZyBhbiBpbWFnZSBmb3IgZXhhbXBsZSBjb3VsZFxuICAgKiBiZSBhZGRlZCBhIGZsYXZvciBvZiAnRVhJRiBEYXRhJyB0aGF0IHdpbGwgYWRkIHRoZSBjb3JyZXNwb25kaW5nIFNPVCB0byBpdC4gVGhpcyB3YXkgdGhlXG4gICAqIG9iamVjdCBnZXRzIG5ldyBtZXRhZGF0YSBwcm9wZXJ0aWVzLiBJZiBzdXBwb3J0ZWQsIHRoZXNlIG1ldGFkYXRhIGNvdWxkIGV2ZW4gYmUgZXh0cmFjdGVkXG4gICAqIGZyb20gdGhlIGZpbGUgYW5kIGZpbGxlZCBvdXQgYXV0b21hdGljYWxseS5cbiAgICogQHBhcmFtIGZsYXZvciBUaGUgZmxhdm9yIG9iamVjdCB0byBiZSBleHBvc2VkXG4gICAqIEBwYXJhbSBhcHAgT3B0aW9uYWwgSUQgb2YgdGhlIGFwcCB0aGF0IGV4cG9zZXMgdGhlIGZsYXZvciAoZGVmYXVsdHMgdG8gJ2dsb2JhbCcgaWYgbm90IHByb3ZpZGVkKVxuICAgKiBAcGFyYW0gb3JpZ2luIE9wdGlvbmFsIG9yaWdpbiBvZiB0aGUgZmxhdm9ycy4gRmxhdm9ycyBjb3VsZCBiZSBhZGRlZCBieSBhcHBzIG9yIGRlcml2ZWRcbiAgICogZnJvbSBhIGNvbmZpZ3VyYXRpb24gKGRlZmF1bHRzIHRvICdhcHAnIGlmIG5vdCBwcm92aWRlZClcbiAgICovXG4gIGV4cG9zZU9iamVjdEZsYXZvcihmbGF2b3I6IEFwcEZsYXZvciwgYXBwID0gJ2dsb2JhbCcsIG9yaWdpbjogJ2FwcCcgfCAnY29uZmlnJyA9ICdhcHAnKSB7XG4gICAgY29uc3QgaWR4ID0gdGhpcy5fb2JqZWN0Rmxhdm9ycy5maW5kSW5kZXgoKGYpID0+IGYuaWQgPT09IGZsYXZvci5pZCAmJiBmLmFwcCA9PT0gYXBwKTtcbiAgICBpZiAoaWR4ID09PSAtMSkgdGhpcy5fb2JqZWN0Rmxhdm9ycy5wdXNoKHsgLi4uZmxhdm9yLCBhcHAsIG9yaWdpbiB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIGFuIGV4cG9zZWQgb2JqZWN0IGZsYXZvciBmcm9tIHRoZSBzaGVsbC5cbiAgICogQHBhcmFtIGZsYXZvciBGbGF2b3IgdG8gYmUgY29uY2VhbGVkXG4gICAqIEBwYXJhbSBhcHAgT3B0aW9uYWwgSUQgb2YgdGhlIGFwcCB0aGF0IGV4cG9zZXMgdGhlIGZsYXZvciAoZGVmYXVsdHMgdG8gJ2dsb2JhbCcgaWYgbm90IHByb3ZpZGVkKVxuICAgKi9cbiAgY29uY2VhbE9iamVjdEZsYXZvcihmbGF2b3I6IEFwcEZsYXZvciwgYXBwID0gJ2dsb2JhbCcpIHtcbiAgICB0aGlzLl9vYmplY3RGbGF2b3JzID0gdGhpcy5fb2JqZWN0Rmxhdm9ycy5maWx0ZXIoKGYpID0+IGYuaWQgIT09IGZsYXZvci5pZCAmJiBmLmFwcCAhPT0gYXBwKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgcmVnaXN0ZXJlZCBvYmplY3QgZmxhdm9yc1xuICAgKiBAcGFyYW0gYXBwIE9wdGlvbmFsIGFwcCBJRCB0aGF0IHJlc3RyaWN0cyB0aGUgcmV0dXJuZWQgZmxhdm9ycyB0byB0aGUgb25lc1xuICAgKiBwcm92aWRlZCBieSBhIHBhcnRpY3VsYXIgYXBwLiBJZiBub3QgcHJvdmlkZWQgYWxsIGZsYXZvcnMgYXJlIHJldHVybmVkXG4gICAqIEByZXR1cm5zIEFycmF5IG9mIG1hdGNoaW5nIG9iamVjdCBmbGF2b3JzXG4gICAqL1xuICBnZXRPYmplY3RGbGF2b3JzKGFwcD86IHN0cmluZyk6IE9iamVjdEZsYXZvcltdIHtcbiAgICByZXR1cm4gYXBwID8gdGhpcy5fb2JqZWN0Rmxhdm9ycy5maWx0ZXIoKG9mKSA9PiBvZi5hcHAgPT09IGFwcCkgOiB0aGlzLl9vYmplY3RGbGF2b3JzO1xuICB9XG5cbiAgLyoqXG4gICAqIFRyaWdnZXJzIHRoZSBhcHBsaWNhdGlvbiBvZiBhbiBvYmplY3QgZmxhdm9yLiBJZiB0aGUgZmxhdm9yIGhhcyBhbiBhcHBseUNvbXBvbmVudFxuICAgKiBkZWZpbmVkLCB0aGUgb3ZlcmxheSB3aWxsIGJlIG9wZW5lZCB3aXRoIHRoZSBjb21wb25lbnQuIE90aGVyd2lzZSB0aGUgZmxhdm9yIHdpbGxcbiAgICogYmUgYXBwbGllZCBkaXJlY3RseSB0byB0aGUgb2JqZWN0LlxuICAgKiBAcGFyYW0gZG1zT2JqZWN0IFRoZSBvYmplY3QgdG8gYXBwbHkgdGhlIGZsYXZvciB0b1xuICAgKiBAcGFyYW0gZmxhdm9yIFRoZSBmbGF2b3IgdG8gYXBwbHlcbiAgICogQHBhcmFtIGRhdGEgT3B0aW9uYWwgZGF0YSB0byBiZSBwYXNzZWQgdG8gdGhlIGZsYXZvciBjb21wb25lbnRcbiAgICogQHJldHVybnMgT2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHRydWUgaWYgdGhlIGZsYXZvciB3YXMgYXBwbGllZCBzdWNjZXNzZnVsbHlcbiAgICovXG4gIHRyaWdnZXJBcHBseU9iamVjdEZsYXZvcihkbXNPYmplY3Q6IERtc09iamVjdCwgZmxhdm9yOiBPYmplY3RGbGF2b3IsIGRhdGE/OiBhbnksIGFwcGx5Q29tcG9uZW50PzogVHlwZTxhbnk+KTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgaWYgKGRtc09iamVjdCkge1xuICAgICAgY29uc3QgYWMgPSBhcHBseUNvbXBvbmVudCB8fCBmbGF2b3IuYXBwbHlDb21wb25lbnQ7XG4gICAgICBpZiAoYWMpIHtcbiAgICAgICAgdGhpcy4jZGlhbG9nLm9wZW4oYWMsIHtcbiAgICAgICAgICBtYXhXaWR0aDogJzkwdncnLFxuICAgICAgICAgIG1heEhlaWdodDogJzkwdmgnLFxuICAgICAgICAgIG1pbldpZHRoOiAnNTB2dycsXG4gICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgZG1zT2JqZWN0LFxuICAgICAgICAgICAgZmxhdm9yLFxuICAgICAgICAgICAgZGF0YVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBvZih0cnVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHNvdHM6IHN0cmluZ1tdID0gKGRtc09iamVjdC5kYXRhW0Jhc2VPYmplY3RUeXBlRmllbGQuU0VDT05EQVJZX09CSkVDVF9UWVBFX0lEU10gYXMgc3RyaW5nW10pIHx8IFtdO1xuICAgICAgICBjb25zdCBkYXRhOiBhbnkgPSB7fTtcbiAgICAgICAgZGF0YVtCYXNlT2JqZWN0VHlwZUZpZWxkLlNFQ09OREFSWV9PQkpFQ1RfVFlQRV9JRFNdID0gWy4uLnNvdHMsIGZsYXZvci5zb3RdO1xuICAgICAgICByZXR1cm4gdGhpcy4jZG1zU2VydmljZS51cGRhdGVEbXNPYmplY3QoZG1zT2JqZWN0Py5pZCwgZGF0YSkucGlwZShtYXAoKCkgPT4gdHJ1ZSkpO1xuICAgICAgfVxuICAgIH0gZWxzZSByZXR1cm4gb2YoZmFsc2UpO1xuICB9XG5cbiAgcmVtb3ZlT2JqZWN0Rmxhdm9yKGRtc09iamVjdDogRG1zT2JqZWN0LCBmbGF2b3I6IE9iamVjdEZsYXZvcik6IE9ic2VydmFibGU8YW55PiB7XG4gICAgY29uc3QgZGF0YTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7XG4gICAgICBbQmFzZU9iamVjdFR5cGVGaWVsZC5TRUNPTkRBUllfT0JKRUNUX1RZUEVfSURTXTogKGRtc09iamVjdC5kYXRhW0Jhc2VPYmplY3RUeXBlRmllbGQuU0VDT05EQVJZX09CSkVDVF9UWVBFX0lEU10gYXMgc3RyaW5nW10pLmZpbHRlcihcbiAgICAgICAgKHNvdDogc3RyaW5nKSA9PiBzb3QgIT09IGZsYXZvci5zb3RcbiAgICAgIClcbiAgICB9O1xuICAgIHJldHVybiB0aGlzLiNkbXNTZXJ2aWNlLnVwZGF0ZURtc09iamVjdChkbXNPYmplY3QuaWQsIGRhdGEpLnBpcGUobWFwKCgpID0+IHRydWUpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgb2JqZWN0IGZsYXZvcnMgYXBwbGljYWJsZSBmb3IgYSBjZXJ0YWluIG1pbWV0eXBlXG4gICAqIEBwYXJhbSBtaW1lVHlwZSBNaW1lIHR5cGUgb3IgbWltZSB0eXBlIHBhdHRlcm4gbGlrZSAnaW1hZ2UvKidcbiAgICogQHBhcmFtIGFwcCBPcHRpb25hbCBhcHAgSUQgdGhhdCByZXN0cmljdHMgdGhlIHJldHVybmVkIGZsYXZvcnMgdG8gdGhlIG9uZXNcbiAgICogcHJvdmlkZWQgYnkgYSBwYXJ0aWN1bGFyIGFwcFxuICAgKiBAcGFyYW0gY3VzdG9tRmxhdm9ycyBPcHRpb25hbCBhcnJheSBvZiBjdXN0b20gZmxhdm9ycyB0byBhbHNvIHRha2UgaW50byBhY2NvdW50LlxuICAgKiBUaGlzIGNvdWxkIGJlIGZsYXZvcnMgbWFuYWdlZCBieSBhbiBhcHAgaXRzZWxmIHRoYXQgYXJlIG5vdCBzdXBwb3NlZCB0byBiZVxuICAgKiBleHBvc2VkIHRvIG90aGVyIGFwcHNcbiAgICogQHJldHVybnMgQXJyYXkgb2YgbWF0Y2hpbmcgb2JqZWN0IGZsYXZvcnNcbiAgICovXG4gIGdldEFwcGxpY2FibGVEb2N1bWVudEZsYXZvcnMobWltZVR5cGU6IHN0cmluZywgYXBwPzogc3RyaW5nLCBjdXN0b21GbGF2b3JzPzogT2JqZWN0Rmxhdm9yW10pOiBPYmplY3RGbGF2b3JbXSB7XG4gICAgcmV0dXJuIFsuLi4oY3VzdG9tRmxhdm9ycyB8fCBbXSksIC4uLnRoaXMuX29iamVjdEZsYXZvcnNdLmZpbHRlcihcbiAgICAgIChvZjogT2JqZWN0Rmxhdm9yKSA9PlxuICAgICAgICAoIW9mLmFwcGxpY2FibGVUbz8uZm9sZGVycyB8fCAob2YuYXBwbGljYWJsZVRvPy5mb2xkZXJzICYmIG9mLmFwcGxpY2FibGVUbz8uZG9jdW1lbnRzKSkgJiZcbiAgICAgICAgKCFvZi5hcHBsaWNhYmxlVG8gfHxcbiAgICAgICAgICAhb2YuYXBwbGljYWJsZVRvPy5taW1lVHlwZXMgfHxcbiAgICAgICAgICAob2YuYXBwbGljYWJsZVRvPy5taW1lVHlwZXM/LnNvbWUoKG10cCkgPT4gVXRpbHMucGF0dGVyblRvUmVnRXhwKG10cCkudGVzdChtaW1lVHlwZSkpICYmICghYXBwIHx8IG9mLmFwcCA9PT0gYXBwKSkpXG4gICAgKTtcbiAgfVxuXG4gIGdldEFwcGxpY2FibGVGb2xkZXJGbGF2b3JzKGFwcD86IHN0cmluZywgY3VzdG9tRmxhdm9ycz86IE9iamVjdEZsYXZvcltdKTogT2JqZWN0Rmxhdm9yW10ge1xuICAgIHJldHVybiBbLi4uKGN1c3RvbUZsYXZvcnMgfHwgW10pLCAuLi50aGlzLl9vYmplY3RGbGF2b3JzXS5maWx0ZXIoKG9mOiBPYmplY3RGbGF2b3IpID0+IG9mLmFwcGxpY2FibGVUbz8uZm9sZGVycyAmJiAoIWFwcCB8fCBvZi5hcHAgPT09IGFwcCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhcHBsaWVkIGFuZCBhcHBsaWNhYmxlIG9iamVjdCBmbGF2b3JzIGZvciBhIGNlcnRhaW4gb2JqZWN0XG4gICAqIEBwYXJhbSBkbXNPYmplY3QgRG1zT2JqZWN0IHRvIGdldCBmbGF2b3JzIGZvclxuICAgKiBAcmV0dXJucyBPYmplY3QgY29udGFpbmluZyB0d28gYXJyYXlzOiBhcHBsaWVkIGFuZCBhcHBsaWNhYmxlIGZsYXZvcnNcbiAgICovXG4gIGdldEFwcGxpZWRPYmplY3RGbGF2b3JzKGRtc09iamVjdDogRG1zT2JqZWN0KToge1xuICAgIGFwcGxpZWQ6IE9iamVjdEZsYXZvcltdO1xuICAgIGFwcGxpY2FibGU6IE9iamVjdEZsYXZvcltdO1xuICB9IHtcbiAgICBjb25zdCBhcHBsaWVkOiBPYmplY3RGbGF2b3JbXSA9IFtdO1xuICAgIGNvbnN0IGFwcGxpY2FibGU6IE9iamVjdEZsYXZvcltdID0gW107XG4gICAgaWYgKGRtc09iamVjdCkge1xuICAgICAgY29uc3Qgc290czogc3RyaW5nW10gPSAoZG1zT2JqZWN0LmRhdGFbQmFzZU9iamVjdFR5cGVGaWVsZC5TRUNPTkRBUllfT0JKRUNUX1RZUEVfSURTXSBhcyBzdHJpbmdbXSkgfHwgW107XG4gICAgICBpZiAoZG1zT2JqZWN0LmNvbnRlbnQpIHtcbiAgICAgICAgdGhpcy5nZXRBcHBsaWNhYmxlRG9jdW1lbnRGbGF2b3JzKGRtc09iamVjdC5jb250ZW50Lm1pbWVUeXBlKS5mb3JFYWNoKChmbGF2b3I6IE9iamVjdEZsYXZvcikgPT4ge1xuICAgICAgICAgIGZsYXZvciA9IHtcbiAgICAgICAgICAgIC4uLmZsYXZvcixcbiAgICAgICAgICAgIG5hbWU6IHRoaXMuI3N5c3RlbS5nZXRMb2NhbGl6ZWRMYWJlbChmbGF2b3IuaWQpIHx8IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoZmxhdm9yLmlkKSxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiB0aGlzLiNzeXN0ZW0uZ2V0TG9jYWxpemVkRGVzY3JpcHRpb24oZmxhdm9yLmlkKSB8fCAoZmxhdm9yLmRlc2NyaXB0aW9uS2V5ID8gdGhpcy50cmFuc2xhdGUuaW5zdGFudChmbGF2b3IuZGVzY3JpcHRpb25LZXkpIDogdW5kZWZpbmVkKVxuICAgICAgICAgIH07XG4gICAgICAgICAgaWYgKHNvdHMuaW5jbHVkZXMoZmxhdm9yLnNvdCkpIHtcbiAgICAgICAgICAgIGFwcGxpZWQucHVzaChmbGF2b3IpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhcHBsaWNhYmxlLnB1c2goZmxhdm9yKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAoZG1zT2JqZWN0LmlzRm9sZGVyKSB7XG4gICAgICAgIHRoaXMuZ2V0QXBwbGljYWJsZUZvbGRlckZsYXZvcnMoKS5mb3JFYWNoKChmbGF2b3I6IE9iamVjdEZsYXZvcikgPT4ge1xuICAgICAgICAgIGZsYXZvciA9IHtcbiAgICAgICAgICAgIC4uLmZsYXZvcixcbiAgICAgICAgICAgIG5hbWU6IHRoaXMuI3N5c3RlbS5nZXRMb2NhbGl6ZWRMYWJlbChmbGF2b3IuaWQpIHx8IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoZmxhdm9yLmlkKSxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiB0aGlzLiNzeXN0ZW0uZ2V0TG9jYWxpemVkRGVzY3JpcHRpb24oZmxhdm9yLmlkKSB8fCAoZmxhdm9yLmRlc2NyaXB0aW9uS2V5ID8gdGhpcy50cmFuc2xhdGUuaW5zdGFudChmbGF2b3IuZGVzY3JpcHRpb25LZXkpIDogdW5kZWZpbmVkKVxuICAgICAgICAgIH07XG4gICAgICAgICAgaWYgKHNvdHMuaW5jbHVkZXMoZmxhdm9yLnNvdCkpIHtcbiAgICAgICAgICAgIGFwcGxpZWQucHVzaChmbGF2b3IpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhcHBsaWNhYmxlLnB1c2goZmxhdm9yKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4geyBhcHBsaWVkLCBhcHBsaWNhYmxlIH07XG4gIH1cblxuICBnZXRGbGF2b3JMYWJlbChpZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuI3N5c3RlbS5nZXRMb2NhbGl6ZWRMYWJlbChpZCkgfHwgdGhpcy50cmFuc2xhdGUuaW5zdGFudChpZCk7XG4gIH1cblxuICBhcHBseU9iamVjdEZsYXZvcihkbXNPYmplY3Q6IERtc09iamVjdCwgZmxhdm9yOiBPYmplY3RGbGF2b3IsIGRhdGE6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge30pOiBPYnNlcnZhYmxlPERtc09iamVjdD4ge1xuICAgIGNvbnN0IHNvdHM6IHN0cmluZ1tdID0gKGRtc09iamVjdC5kYXRhW0Jhc2VPYmplY3RUeXBlRmllbGQuU0VDT05EQVJZX09CSkVDVF9UWVBFX0lEU10gYXMgc3RyaW5nW10pIHx8IFtdO1xuICAgIGRhdGFbQmFzZU9iamVjdFR5cGVGaWVsZC5TRUNPTkRBUllfT0JKRUNUX1RZUEVfSURTXSA9IFsuLi5zb3RzLCBmbGF2b3Iuc290XTtcbiAgICByZXR1cm4gdGhpcy4jZG1zU2VydmljZS51cGRhdGVEbXNPYmplY3QoZG1zT2JqZWN0LmlkLCBkYXRhKTtcbiAgfVxuXG4gIHJlZ2lzdGVyVGlsZUV4dGVuc2lvbihleHQ6IFRpbGVFeHRlbnNpb24pIHtcbiAgICB0aGlzLl9leHRlbnNpb25zW2V4dC50eXBlSWRdID0gZXh0O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aWxlIGV4dGVuc2lvbnMgZm9yIGEgY2VydGFpbiB0eXBlXG4gICAqIEBwYXJhbSB0eXBlSWQgSUQgb2YgdGhlIHR5cGUgdG8gZmV0Y2ggZXh0ZXNpb24gZm9yIChvYmplY3RUeXBlSUQgb3Igc2Vjb25kYXJ5T2JqZWN0VHlwZUlEKVxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgZ2V0UmVnaXN0ZXJlZFRpbGVFeHRlbnNpb25zKCk6IFJlY29yZDxzdHJpbmcsIFRpbGVFeHRlbnNpb24+IHtcbiAgICByZXR1cm4gdGhpcy5fZXh0ZW5zaW9ucztcbiAgfVxuXG4gIF9pbml0T2JqZWN0VHlwZUNvbmZpZygpOiBQcm9taXNlPHVua25vd24+IHtcbiAgICAvLyBsb2FkIGZsYXZvcnMgZnJvbSBjb25maWdcbiAgICBjb25zb2xlLmRlYnVnKCdMb2FkaW5nIG9iamVjdCB0eXBlIGNvbmZpZy4uLicpO1xuICAgIHJldHVybiBmaXJzdFZhbHVlRnJvbShcbiAgICAgIHRoaXMuI3NoZWxsQ29uZmlnLmdldChTSEVMTF9DT05GSUdfVFlQRVMpLnBpcGUoXG4gICAgICAgIHRhcCgocmVzOiBTaGVsbENvbmZpZyB8IHVuZGVmaW5lZCkgPT4ge1xuICAgICAgICAgIGlmIChyZXMpIHtcbiAgICAgICAgICAgIHRoaXMuI3JlZ2lzdGVyT2JqZWN0VHlwZUljb25zKChyZXMuZGF0YSBhcyBDbGllbnRTaGVsbFR5cGVbXSkubWFwKCh0KSA9PiB0LmlkKSk7XG5cbiAgICAgICAgICAgIGNvbnN0IGZsdjogQXBwRmxhdm9yW10gPSAocmVzLmRhdGEgYXMgQ2xpZW50U2hlbGxUeXBlW10pLm1hcCgodCkgPT4gKHtcbiAgICAgICAgICAgICAgaWQ6IHQuaWQsXG4gICAgICAgICAgICAgIHNvdDogdC5pZCxcbiAgICAgICAgICAgICAgaWNvbjogdC5pZCxcbiAgICAgICAgICAgICAgc3ZnSWNvbjogdHJ1ZSxcbiAgICAgICAgICAgICAgb2JqZWN0VHlwZUlEOiB0LmJhc2VUeXBlLFxuICAgICAgICAgICAgICBhcHBsaWNhYmxlVG86IHtcbiAgICAgICAgICAgICAgICBmb2xkZXJzOiB0LmJhc2VUeXBlID09PSBTeXN0ZW1UeXBlLkZPTERFUiB8fCB0LmJhc2VUeXBlID09PSBTeXN0ZW1UeXBlLk9CSkVDVCxcbiAgICAgICAgICAgICAgICBkb2N1bWVudHM6IHQuYmFzZVR5cGUgPT09IFN5c3RlbVR5cGUuRE9DVU1FTlQgfHwgdC5iYXNlVHlwZSA9PT0gU3lzdGVtVHlwZS5PQkpFQ1QsXG4gICAgICAgICAgICAgICAgbWltZVR5cGVzOiB0LmFwcGxpY2FibGVUb01pbWVUeXBlcyB8fCB1bmRlZmluZWRcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgdXNlRGVmYXVsdEFwcGx5Q29tcG9uZW50OiAhdC5pbnN0YW50QXBwbHlcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIHRoaXMuZXhwb3NlT2JqZWN0Rmxhdm9ycyhmbHYsICdnbG9iYWwnLCAnY29uZmlnJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICAjcmVnaXN0ZXJPYmplY3RUeXBlSWNvbnMoaWRzOiBzdHJpbmdbXSkge1xuICAgIHRoaXMuI3N5c3RlbS5zeXN0ZW0kLnBpcGUoZmlyc3QoKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIGlkcy5mb3JFYWNoKChpZCkgPT4ge1xuICAgICAgICAvLyBzcGxpdCB0ZWNobmljYWwgbmFtZSBlLmcuICdzeXN0ZW06ZG9jdW1lbnQnIGFuZCB1c2UgdGhlIGZpcnN0IHBhcnQgYXMgbmFtZXNwYWNlXG4gICAgICAgIGNvbnN0IGlkVG9rZW5zID0gaWQuc3BsaXQoJzonKTtcbiAgICAgICAgaWYgKGlkVG9rZW5zLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgIGNvbnN0IHVyaSA9IGAke3RoaXMuI2NvbmZpZ1NlcnZpY2UuZ2V0QXBpQmFzZShBcGlCYXNlLm5vbmUsIHRydWUpfSR7dGhpcy4jc3lzdGVtLmdldE9iamVjdFR5cGVJY29uVXJpKGlkKX1gO1xuICAgICAgICAgIHRoaXMuI2ljb25SZWdpc3RyeS5hZGRTdmdJY29uSW5OYW1lc3BhY2UoaWRUb2tlbnNbMF0sIGlkVG9rZW5zWzFdLCB0aGlzLiNzYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdFJlc291cmNlVXJsKHVyaSkpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIF9pbml0KCkge1xuICAgIC8vIHRoZSBwbGFjZSBmb3IgaW5pdGlhbGl6YXRpb24gdGFza3MgaWZcbiAgfVxufVxuIl19
446
+ }], ctorParameters: () => [] });
447
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hlbGwuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMveXV1dmlzL2NsaWVudC1zaGVsbC1jb3JlL3NyYy9saWIvc2VydmljZXMvc2hlbGwvc2hlbGwuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFRLE1BQU0sZUFBZSxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxTQUFTLEVBQWdCLE1BQU0sMEJBQTBCLENBQUM7QUFDbkUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN6RCxPQUFPLEVBQ0wsT0FBTyxFQUNQLG1CQUFtQixFQUNuQixhQUFhLEVBRWIsVUFBVSxFQUVWLGFBQWEsRUFDYixVQUFVLEVBQ1YsZ0JBQWdCLEVBQ2hCLFdBQVcsRUFDWCxLQUFLLEVBRU4sTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUUsZUFBZSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLGNBQWMsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFjLEVBQUUsRUFBRSxhQUFhLEVBQWdCLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0SixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUdoRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUV4RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQzs7QUFLMUUsTUFBTSxPQUFPLFlBQVk7SUFDdkIsV0FBVyxDQUFzQjtJQUNqQyxPQUFPLENBQXFCO0lBQzVCLE9BQU8sQ0FBeUI7SUFDaEMsWUFBWSxD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LEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRTtnQkFDakIsa0ZBQWtGO2dCQUNsRixNQUFNLFFBQVEsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUMvQixJQUFJLFFBQVEsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7b0JBQzFCLE1BQU0sR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLG9CQUFvQixDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7b0JBQzVHLElBQUksQ0FBQyxhQUFhLENBQUMscUJBQXFCLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLDhCQUE4QixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQzFILENBQUM7WUFDSCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELEtBQUs7UUFDSCx3Q0FBd0M7SUFDMUMsQ0FBQzsrR0E5ZFUsWUFBWTttSEFBWixZQUFZLGNBRlgsTUFBTTs7NEZBRVAsWUFBWTtrQkFIeEIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUsIHNpZ25hbCwgVHlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTWF0RGlhbG9nLCBNYXREaWFsb2dSZWYgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuaW1wb3J0IHsgTWF0SWNvblJlZ2lzdHJ5IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcbmltcG9ydCB7XG4gIEFwaUJhc2UsXG4gIEJhc2VPYmplY3RUeXBlRmllbGQsXG4gIENvbmZpZ1NlcnZpY2UsXG4gIERtc09iamVjdCxcbiAgRG1zU2VydmljZSxcbiAgT2JqZWN0Q3JlYXRlRmxhdm9yLFxuICBTeXN0ZW1TZXJ2aWNlLFxuICBTeXN0ZW1UeXBlLFxuICBUcmFuc2xhdGVTZXJ2aWNlLFxuICBVc2VyU2VydmljZSxcbiAgVXRpbHMsXG4gIFl1dlVzZXJcbn0gZnJvbSAnQHl1dXZpcy9jbGllbnQtY29yZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGRlYm91bmNlVGltZSwgZmlsdGVyLCBmaXJzdCwgZmlyc3RWYWx1ZUZyb20sIGZyb21FdmVudCwgbWFwLCBPYnNlcnZhYmxlLCBvZiwgUmVwbGF5U3ViamVjdCwgU3Vic2NyaXB0aW9uLCB0YXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IENMSUVOVF9TSEVMTF9BU1NFVFMgfSBmcm9tICcuLi8uLi9jbGllbnQtc2hlbGwuYXNzZXRzJztcbmltcG9ydCB7IEFwcCwgQXBwRmxhdm9yLCBDbGllbnRTaGVsbENvbmZpZywgR2xvYmFsU2hvcnRjdXQsIE9iamVjdEZsYXZvciwgU2hlbGxBcHBTZXR0aW5ncyB9IGZyb20gJy4uLy4uL2NsaWVudC1zaGVsbC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgVGlsZUV4dGVuc2lvbiB9IGZyb20gJy4uLy4uL3RpbGUtZXh0ZW5zaW9uLmludGVyZmFjZSc7XG5pbXBvcnQgeyBTSEVMTF9DT05GSUdfVFlQRVMgfSBmcm9tICcuLi9zaGVsbC1jb25maWcvc2hlbGwtY29uZmlnLmNvbnN0JztcbmltcG9ydCB7IENsaWVudFNoZWxsVHlwZSwgU2hlbGxDb25maWcgfSBmcm9tICcuLi9zaGVsbC1jb25maWcvc2hlbGwtY29uZmlnLmludGVyZmFjZSc7XG5pbXBvcnQgeyBTaGVsbENvbmZpZ1NlcnZpY2UgfSBmcm9tICcuLi9zaGVsbC1jb25maWcvc2hlbGwtY29uZmlnLnNlcnZpY2UnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBTaGVsbFNlcnZpY2Uge1xuICAjZG1zU2VydmljZSA9IGluamVjdChEbXNTZXJ2aWNlKTtcbiAgI2RpYWxvZyA9IGluamVjdChNYXREaWFsb2cpO1xuICAjc3lzdGVtID0gaW5qZWN0KFN5c3RlbVNlcnZpY2UpO1xuICAjdXNlclNlcnZpY2UgPSBpbmplY3QoVXNlclNlcnZpY2UpO1xuICAvLyBUT0RPOiBOZWVkIG9yaWduYWwgTWF0SWNvblJlZ2lzdHJ5IHRvICNyZWdpc3Rlck9iamVjdFR5cGVJY29ucywgb3RoZXJ3aXNlIGljb25zIGNvdWxkIG5vdCBiZSByZWdpc3RlcmVkIGluIHRoZSBuYW1lc3BhY2VcbiAgLy8gI2ljb25SZWdpc3RyeSA9IGluamVjdChZdXZNYXRJY29uUmVnaXN0cnkpO1xuICAjaWNvblJlZ2lzdHJ5ID0gaW5qZWN0KE1hdEljb25SZWdpc3RyeSk7XG4gICNzaGVsbENvbmZpZyA9IGluamVjdChTaGVsbENvbmZpZ1NlcnZpY2UpO1xuICAjY29uZmlnU2VydmljZSA9IGluamVjdChDb25maWdTZXJ2aWNlKTtcbiAgI3Nhbml0aXplciA9IGluamVjdChEb21TYW5pdGl6ZXIpO1xuICAjRE9DVU1FTlQgPSBpbmplY3QoRE9DVU1FTlQpO1xuICBwcml2YXRlIHRyYW5zbGF0ZSA9IGluamVjdChUcmFuc2xhdGVTZXJ2aWNlKTtcblxuICBwcml2YXRlIF9idXN5Q291bnQgPSAwO1xuICBwcml2YXRlIGlzQnVzeVN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgaXNCdXN5JCA9IHRoaXMuaXNCdXN5U3ViamVjdC5hc09ic2VydmFibGUoKS5waXBlKGRlYm91bmNlVGltZSg1MDApKTtcblxuICAjYXBwU2V0dGluZ3M6IFJlY29yZDxzdHJpbmcsIFNoZWxsQXBwU2V0dGluZ3M+ID0ge307XG4gICNhcHBTZXR0aW5nc1N1YmplY3QgPSBuZXcgUmVwbGF5U3ViamVjdDxTaGVsbEFwcFNldHRpbmdzW10+KCk7XG4gIGFwcFNldHRpbmdzJCA9IHRoaXMuI2FwcFNldHRpbmdzU3ViamVjdC5hc09ic2VydmFibGUoKS5waXBlKGRlYm91bmNlVGltZSg1MDApKTtcblxuICBhcHBCYXNlUm91dGVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG5cbiAgI2RlZmF1bHRTaGVsbENvbmZpZzogQ2xpZW50U2hlbGxDb25maWcgPSB7XG4gICAgYXBwSWNvbjogQ0xJRU5UX1NIRUxMX0FTU0VUUy5hcHBJY29uLFxuICAgIHNoZWxsSWNvbk5hbWVzcGFjZTogQ0xJRU5UX1NIRUxMX0FTU0VUUy5zaGVsbEljb25OYW1lc3BhY2VcbiAgfTtcbiAgc2hlbGxDb25maWcgPSBzaWduYWw8Q2xpZW50U2hlbGxDb25maWc+KHRoaXMuI2RlZmF1bHRTaGVsbENvbmZpZyk7XG4gIGFwcHMgPSBzaWduYWw8QXBwW10+KFtdKTtcblxuICAvKiogVE9ETzogaW1wbGVtZW50IHRoaXMgZmVhdHVyZSA/Pz8/XG4gICAqIEdsb2JhbCBzaG9ydGN1dHMgYXJlIGNhcHR1cmVkIGJ5IHRoZSBzaGVsbCB0byBwcm92aWRlIGEgY29uc2lzdGVudCBleHBlcmllbmNlXG4gICAqIGFjY3Jvc3MgYWxsIGFwcHMuIFNlYXJjaCBpcyBvbmUgZXhhbXBsZS4gQXBwcyBzaG91bGQgbm90IGRlZmluZSB0aGVpciBvd24gc2hvdXJ0Y3V0c1xuICAgKiBmb3Igc2VhcmNoLiBJbnN0ZWFkIHRoZXkgc2hvdWxkIHN1YnNjcmliZSB0byB0aGUgZ2xvYmFsIHNob3J0Y3V0cyBhbmQgaW5pdGlhbGl6ZSB0aGVpclxuICAgKiBzZWFyY2ggYmFzZWQgb24gdGhlIGdsb2JhbCBzZWFyY2ggc2hvcnRjdXQuXG4gICAqL1xuICBnbG9iYWxTaG9ydGN1dHMkOiBPYnNlcnZhYmxlPEdsb2JhbFNob3J0Y3V0PiA9IGZyb21FdmVudDxLZXlib2FyZEV2ZW50Pihkb2N1bWVudCwgJ2tleWRvd24nKS5waXBlKFxuICAgIG1hcCgoZTogS2V5Ym9hcmRFdmVudCkgPT4ge1xuICAgICAgLy8gZ2xvYmFsIHNob3J0Y3V0IGZvciBzZWFyY2hcbiAgICAgIC8vIGlmIChlLmN0cmxLZXkgJiYgZS5jb2RlID09PSAnS2V5RicpIHtcbiAgICAgIC8vICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgLy8gICByZXR1cm4gR2xvYmFsU2hvcnRjdXQuc2VhcmNoO1xuICAgICAgLy8gfVxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9KSxcbiAgICBmaWx0ZXIoKHM6IEdsb2JhbFNob3J0Y3V0IHwgdW5kZWZpbmVkKSA9PiBzICE9PSB1bmRlZmluZWQpLFxuICAgIG1hcCgocykgPT4gcyBhcyBHbG9iYWxTaG9ydGN1dClcbiAgKTtcblxuICBwcml2YXRlIF9leHRlbnNpb25zOiBSZWNvcmQ8c3RyaW5nLCBUaWxlRXh0ZW5zaW9uPiA9IHt9O1xuICBwcml2YXRlIF9vYmplY3RGbGF2b3JzOiBPYmplY3RGbGF2b3JbXSA9IFtdO1xuICBwcml2YXRlIF9vYmplY3RDcmVhdGVGbGF2b3JzOiBPYmplY3RDcmVhdGVGbGF2b3JbXSA9IFtdO1xuXG4gICNkaWFsb2dTdGF0ZXM6IFJlY29yZDxcbiAgICBzdHJpbmcsXG4gICAge1xuICAgICAgcmVmOiBNYXREaWFsb2dSZWY8YW55LCBhbnk+O1xuICAgICAgc3ViOiBTdWJzY3JpcHRpb247XG4gICAgfVxuICA+ID0ge307XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy50cmFuc2xhdGUub25MYW5nQ2hhbmdlLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLmFwcHMuc2V0KHRoaXMuI2dldE1hcHBlZEFwcHModGhpcy5hcHBzKCkpKTtcbiAgICB9KTtcbiAgICBmcm9tRXZlbnQ8UG9wU3RhdGVFdmVudD4od2luZG93LCAncG9wc3RhdGUnKS5zdWJzY3JpYmUoKGU6IFBvcFN0YXRlRXZlbnQpID0+IHtcbiAgICAgIGlmIChlLnN0YXRlICYmIGUuc3RhdGUuZGlhbG9nSWQpIHtcbiAgICAgICAgY29uc3QgaWQgPSBlLnN0YXRlLmRpYWxvZ0lkO1xuICAgICAgICBpZiAodGhpcy4jZGlhbG9nU3RhdGVzW2lkXSkge1xuICAgICAgICAgIC8vIENsb3NlIGRpYWxvZyAuLi5cbiAgICAgICAgICB0aGlzLiNkaWFsb2dTdGF0ZXNbaWRdLnJlZi5jbG9zZSh7IGNsb3NlZEJ5UG9wU3RhdGU6IHRydWUgfSk7XG4gICAgICAgICAgLy8gLi4uIGFuZCB1bnN1YnNjcmliZSBmcm9tIGNsb3NlIHN1YnNjcmlwdGlvblxuICAgICAgICAgIHRoaXMuI2RpYWxvZ1N0YXRlc1tpZF0uc3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgZGVsZXRlIHRoaXMuI2RpYWxvZ1N0YXRlc1tpZF07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLiNkaWFsb2cuYWZ0ZXJPcGVuZWQuc3Vic2NyaWJlKChyZWY6IE1hdERpYWxvZ1JlZjxhbnksIGFueT4pID0+IHtcbiAgICAgIGNvbnN0IGlkID0gcmVmLmlkO1xuICAgICAgdGhpcy4jZGlhbG9nU3RhdGVzW2lkXSA9IHtcbiAgICAgICAgc3ViOiByZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUoKGRpYWxvZ1JlczogYW55KSA9PiB7XG4gICAgICAgICAgdGhpcy4jZGlhbG9nU3RhdGVzW2lkXS5zdWIudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICBkZWxldGUgdGhpcy4jZGlhbG9nU3RhdGVzW2lkXTtcbiAgICAgICAgICBpZiAoZGlhbG9nUmVzPy5jbG9zZWRCeVBvcFN0YXRlKSByZXR1cm47XG4gICAgICAgICAgLy8gaGlzdG9yeS5iYWNrKCk7XG4gICAgICAgIH0pLFxuICAgICAgICByZWZcbiAgICAgIH07XG4gICAgICBoaXN0b3J5LnB1c2hTdGF0ZShcbiAgICAgICAge1xuICAgICAgICAgIGRpYWxvZ0lkOiBpZFxuICAgICAgICB9LFxuICAgICAgICAnJyxcbiAgICAgICAgYCR7d2luZG93LmxvY2F0aW9uLmhyZWZ9IyR7aWR9YFxuICAgICAgKTtcbiAgICB9KTtcbiAgfVxuXG4gIHBpY2tGaWxlKCk6IE9ic2VydmFibGU8RmlsZSB8IG51bGw+IHtcbiAgICBjb25zdCBpbnB1dCA9IHRoaXMuI0RPQ1VNRU5ULmNyZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7XG4gICAgaW5wdXQudHlwZSA9ICdmaWxlJztcbiAgICBpbnB1dC5jbGljaygpO1xuICAgIHJldHVybiBmcm9tRXZlbnQoaW5wdXQsICdjaGFuZ2UnKS5waXBlKFxuICAgICAgbWFwKChlOiBFdmVudCkgPT4gKGUudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLmZpbGVzPy5bMF0gfHwgbnVsbCksXG4gICAgICB0YXAoKCkgPT4ge1xuICAgICAgICBpbnB1dC5yZW1vdmUoKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHNldFNoZWxsQ29uZmlnKGNzYzogQ2xpZW50U2hlbGxDb25maWcpIHtcbiAgICB0aGlzLnNoZWxsQ29uZmlnLnVwZGF0ZSgoc2MpID0+ICh7XG4gICAgICBhcHBJY29uOiBjc2MuYXBwSWNvbiA/PyBzYy5hcHBJY29uLFxuICAgICAgc2hlbGxJY29uTmFtZXNwYWNlOiBjc2Muc2hlbGxJY29uTmFtZXNwYWNlID8/IHNjLnNoZWxsSWNvbk5hbWVzcGFjZVxuICAgIH0pKTtcbiAgfVxuXG4gIHNldEFwcHMoYXBwczogQXBwW10pIHtcbiAgICB0aGlzLmFwcHMuc2V0KHRoaXMuI2dldE1hcHBlZEFwcHMoYXBwcykpO1xuICAgIGNvbnN0IGFwcEJhc2VSb3V0ZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcbiAgICBhcHBzLmZvckVhY2goKGEpID0+IChhcHBCYXNlUm91dGVzW2EuaWRdID0gYS5wYXRoIHx8ICcnKSk7XG4gICAgdGhpcy5hcHBCYXNlUm91dGVzID0gYXBwQmFzZVJvdXRlcztcbiAgfVxuXG4gICNnZXRNYXBwZWRBcHBzKGFwcHM6IEFwcFtdKTogQXBwW10ge1xuICAgIHJldHVybiBhcHBzLm1hcCgoYSkgPT4ge1xuICAgICAgY29uc3QgbWEgPSB7XG4gICAgICAgIC4uLmEsXG4gICAgICAgIHRpdGxlOiB0aGlzLiNnZXRBcHBUaXRsZShhKVxuICAgICAgfTtcbiAgICAgIGlmIChhLm9wdGlvbnM/LmFwcENsYWltS2V5KSB7XG4gICAgICAgIG1hLm9wdGlvbnMgPSB7IC4uLm1hLm9wdGlvbnMsIGFwcENsYWltOiB0aGlzLiNnZXRBcHBDbGFpbShhLm9wdGlvbnMuYXBwQ2xhaW1LZXkpIHx8IGEub3B0aW9ucy5hcHBDbGFpbSB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIG1hO1xuICAgIH0pO1xuICB9XG5cbiAgI2dldEFwcFRpdGxlKGE6IEFwcCk6IHN0cmluZyB7XG4gICAgY29uc3QgdHJhbnNsYXRlZFRpdGxlID0gdGhpcy50cmFuc2xhdGUuaW5zdGFudChhLmlkKTtcbiAgICByZXR1cm4gdHJhbnNsYXRlZFRpdGxlICYmICF0cmFuc2xhdGVkVGl0bGUuc3RhcnRzV2l0aCgnIW1pc3NpbmcnKSA/IHRyYW5zbGF0ZWRUaXRsZSA6IChhLnRpdGxlIGFzIHN0cmluZykgfHwgJyc7XG4gIH1cblxuICAjZ2V0QXBwQ2xhaW0oY2xhaW1LZXk6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgdHJhbnNsYXRlZENsYWltID0gdGhpcy50cmFuc2xhdGUuaW5zdGFudChjbGFpbUtleSk7XG4gICAgcmV0dXJuIHRyYW5zbGF0ZWRDbGFpbSAmJiAhdHJhbnNsYXRlZENsYWltLnN0YXJ0c1dpdGgoJyFtaXNzaW5nJykgPyB0cmFuc2xhdGVkQ2xhaW0gOiB1bmRlZmluZWQ7XG4gIH1cblxuICBnZXRBcHAoaWQ6IHN0cmluZyk6IEFwcCB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuYXBwcygpLmZpbmQoKGEpID0+IGlkID09PSBhLmlkKTtcbiAgfVxuXG4gIGdldEFwcHMoaWRzOiBzdHJpbmdbXSA9IFtdKTogQXBwW10ge1xuICAgIHJldHVybiBpZHMubGVuZ3RoID8gdGhpcy5hcHBzKCkuZmlsdGVyKChhKSA9PiBpZHMuaW5jbHVkZXMoYS5pZCkpIDogdGhpcy5hcHBzKCk7XG4gIH1cblxuICAvLyAvLyBBUFBTXG4gIC8vIHJlZ2lzdGVyQXBwKHNjaGVtYTogQXBwU2NoZW1hKSB7XG4gIC8vICAgdGhpcy4jYXBwU2NoZW1hdGEucHVzaChzY2hlbWEpO1xuICAvLyB9XG5cbiAgLy8gZ2V0UmVnaXN0ZXJlZEFwcChpZDogc3RyaW5nKTogQXBwU2NoZW1hIHwgdW5kZWZpbmVkIHtcbiAgLy8gICByZXR1cm4gdGhpcy4jYXBwU2NoZW1hdGEuZmluZCgoYSkgPT4gYS5pZCA9PT0gaWQpO1xuICAvLyB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVyIHNldHRpbmdzIGZvciBhcHBzIHRvIGhvb2sgaW50byBzaGVsbCBzZXR0aW5ncyBwYWdlLlxuICAgKiBUaGVzZSBleHBvc2VkIHNldHRpbmdzIHdpbGwgYmUgc2F2ZWQgaW4gdGhlIHVzZXJzIHNldHRpbmdzIG9uIHRoZSBiYWNrZW5kLlxuICAgKiBAcGFyYW0gYXBwSUQgSUQgb2YgdGhlIGFwcCB0aGF0IGV4cG9zZXMgdGhlIHNldHRpbmdzXG4gICAqIEBwYXJhbSBjZmcgU2hlbGxBcHBTZXR0aW5ncyBvYmplY3QgY29udGFpbmluZyB0aGUgc2V0dGluZ3NcbiAgICovXG4gIHJlZ2lzdGVyQXBwU2V0dGluZ3MoYXBwSUQ6IHN0cmluZywgY2ZnOiBTaGVsbEFwcFNldHRpbmdzKSB7XG4gICAgdGhpcy4jYXBwU2V0dGluZ3NbYXBwSURdID0gY2ZnO1xuICAgIHRoaXMuI2FwcFNldHRpbmdzU3ViamVjdC5uZXh0KHRoaXMuI2dldEFwcFNldHRpbmdzKCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIExvYWQgcGVyc2lzdGVkIHNldHRpbmdzIGZvciBhIHNwZWNpZmljIGFwcFxuICAgKiBAcGFyYW0gYXBwSUQgSUQgb2YgdGhlIGFwcCB0byBsb2FkIHRoZSBzZXR0aW5ncyBmb3JcbiAgICovXG4gIHVzZXJzQXBwU2V0dGluZ3MkKGFwcElEOiBzdHJpbmcpOiBPYnNlcnZhYmxlPFNoZWxsQXBwU2V0dGluZ3MgfCB1bmRlZmluZWQ+IHtcbiAgICByZXR1cm4gdGhpcy4jdXNlclNlcnZpY2UudXNlciQucGlwZShcbiAgICAgIG1hcCgodTogWXV2VXNlciB8IHVuZGVmaW5lZCkgPT4ge1xuICAgICAgICByZXR1cm4gdSAmJiB1LnVzZXJTZXR0aW5ncy5jbGllbnRBcHBTZXR0aW5ncyA/IHUudXNlclNldHRpbmdzLmNsaWVudEFwcFNldHRpbmdzW2FwcElEXSA6IHVuZGVmaW5lZDtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHNhdmVVc2Vyc0FwcFNldHRpbmdzKGFwcElEOiBzdHJpbmcsIHNldHRpbmdzOiBTaGVsbEFwcFNldHRpbmdzKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy4jdXNlclNlcnZpY2Uuc2F2ZVVzZXJTZXR0aW5ncyh7IGNsaWVudEFwcFNldHRpbmdzOiB7IFthcHBJRF06IHNldHRpbmdzIH0gfSk7XG4gIH1cblxuICAjZ2V0QXBwU2V0dGluZ3MoKTogU2hlbGxBcHBTZXR0aW5nc1tdIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy4jYXBwU2V0dGluZ3MpXG4gICAgICAubWFwKChrZXk6IHN0cmluZykgPT4gKHtcbiAgICAgICAgYXBwSUQ6IHRoaXMuI2FwcFNldHRpbmdzW2tleV0uYXBwSUQsXG4gICAgICAgIGxhYmVsOiB0aGlzLiNhcHBTZXR0aW5nc1trZXldLmxhYmVsLFxuICAgICAgICBwcm9wZXJ0aWVzOiB0aGlzLiNhcHBTZXR0aW5nc1trZXldLnByb3BlcnRpZXNcbiAgICAgIH0pKVxuICAgICAgLnNvcnQoKTtcbiAgfVxuXG4gIGFkZEJ1c3koKSB7XG4gICAgaWYgKHRoaXMuX2J1c3lDb3VudCA9PT0gMCkge1xuICAgICAgdGhpcy5pc0J1c3lTdWJqZWN0Lm5leHQodHJ1ZSk7XG4gICAgfVxuICAgIHRoaXMuX2J1c3lDb3VudCsrO1xuICB9XG4gIHJlbW92ZUJ1c3koKSB7XG4gICAgdGhpcy5fYnVzeUNvdW50LS07XG4gICAgaWYgKHRoaXMuX2J1c3lDb3VudCA9PT0gMCkge1xuICAgICAgdGhpcy5pc0J1c3lTdWJqZWN0Lm5leHQoZmFsc2UpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBFeHBvc2VzIG9iamVjdCBjcmVhdGUgZmxhdm9ycyB0byB0aGUgc2hlbGwuXG4gICAqIFRoZXMgZmxhdm9ycyBkZXNjcmliZSBkaWZmZXJlbnQgd2F5cyBvZiBob3cgb2JqZWN0cyBjYW4gYmUgY3JlYXRlZC4gU28gYXBwc1xuICAgKiBjYW4gcmVnaXN0ZXIgY3VzdG9tIHdheXMgb2YgY3JlYXRpbmcgb2JqZWN0cyB0aGF0IGNhbiB0aGVuIGJlIHVzZWQgYnkgb3RoZXIgYXBwcy5cbiAgICogQHBhcmFtIGZsYXZvcnMgQ3JlYXRlIGZsYXZvcnMgdG8gYmUgZXhwb3NlZFxuICAgKi9cbiAgZXhwb3NlT2JqZWN0Q3JlYXRlRmxhdm9ycyhmbGF2b3JzOiBPYmplY3RDcmVhdGVGbGF2b3JbXSkge1xuICAgIGZsYXZvcnMuZm9yRWFjaCgoZmxhdm9yOiBPYmplY3RDcmVhdGVGbGF2b3IpID0+IHtcbiAgICAgIGNvbnN0IGlkeCA9IHRoaXMuX29iamVjdENyZWF0ZUZsYXZvcnMuZmluZEluZGV4KChmKSA9PiBmLmlkID09PSBmbGF2b3IuaWQpO1xuICAgICAgaWYgKGlkeCA9PT0gLTEpIHRoaXMuX29iamVjdENyZWF0ZUZsYXZvcnMucHVzaChmbGF2b3IpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBvYmplY3QgY3JlYXRlIGZsYXZvcnMgZnJvbSB0aGUgc2hlbGxzIHJlZ2lzdHJ5XG4gICAqIEBwYXJhbSBmbGF2b3JzIENyZWF0ZSBmbGF2b3JzIHRvIGJlIHJlbW92ZWRcbiAgICovXG4gIGNvbmNlYWxPYmplY3RDcmVhdGVGbGF2b3JzKGZsYXZvcnM6IE9iamVjdENyZWF0ZUZsYXZvcltdKSB7XG4gICAgY29uc3QgZmlkID0gZmxhdm9ycy5tYXAoKGYpID0+IGYuaWQpO1xuICAgIHRoaXMuX29iamVjdENyZWF0ZUZsYXZvcnMgPSB0aGlzLl9vYmplY3RDcmVhdGVGbGF2b3JzLmZpbHRlcigoZikgPT4gIWZpZC5pbmNsdWRlcyhmLmlkKSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGFsbCByZWdpc3RlcmQgb2JqZWN0IGNyZWF0ZSBmbGF2b3JzXG4gICAqL1xuICBnZXRPYmplY3RDcmVhdGVGbGF2b3JzKCk6IE9iamVjdENyZWF0ZUZsYXZvcltdIHtcbiAgICByZXR1cm4gdGhpcy5fb2JqZWN0Q3JlYXRlRmxhdm9ycztcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHBvc2VzIGEgbGlzdCBvZiBvYmplY3QgZmxhdm9ycyB0byB0aGUgc2hlbGwuXG4gICAqIEZsYXZvcnMgYXJlIGFibGUgdG8gYmUgYXBwbGllZCB0byBvYmplY3RzIGFuZCBhZGQgbmV3IG1ldGFkYXRhIHByb3BlcnRpZXMgdG8gdGhlbS5cbiAgICogQHBhcmFtIGZsYXZvcnMgQXJyYXkgb2YgZmxhdm9ycyB0byBiZSBleHBvc2VkXG4gICAqIEBwYXJhbSBhcHAgT3B0aW9uYWwgSUQgb2YgdGhlIGFwcCB0aGF0IGV4cG9zZXMgdGhlIGZsYXZvcnMgKGRlZmF1bHRzIHRvICdnbG9iYWwnIGlmIG5vdCBwcm92aWRlZClcbiAgICogQHBhcmFtIG9yaWdpbiBPcHRpb25hbCBvcmlnaW4gb2YgdGhlIGZsYXZvcnMuIEZsYXZvcnMgY291bGQgYmUgYWRkZWQgYnkgYXBwcyBvciBkZXJpdmVkXG4gICAqIGZyb20gYSBjb25maWd1cmF0aW9uIChkZWZhdWx0cyB0byAnYXBwJyBpZiBub3QgcHJvdmlkZWQpXG4gICAqL1xuICBleHBvc2VPYmplY3RGbGF2b3JzKGZsYXZvcnM6IEFwcEZsYXZvcltdLCBhcHAgPSAnZ2xvYmFsJywgb3JpZ2luOiAnYXBwJyB8ICdjb25maWcnID0gJ2FwcCcpIHtcbiAgICBmbGF2b3JzLmZvckVhY2goKGYpID0+IHRoaXMuZXhwb3NlT2JqZWN0Rmxhdm9yKGYsIGFwcCwgb3JpZ2luKSk7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlcyBleHBvc2VkIG9iamVjdCBmbGF2b3JzIGZyb20gdGhlIHNoZWxsLlxuICAgKiBAcGFyYW0gZmxhdm9ycyBBcnJheSBvZiBmbGF2b3JzIHRvIGJlIGNvbmNlYWxlZFxuICAgKi9cbiAgY29uY2VhbE9iamVjdEZsYXZvcnMoZmxhdm9yczogQXBwRmxhdm9yW10sIGFwcCA9ICdnbG9iYWwnKSB7XG4gICAgZmxhdm9ycy5mb3JFYWNoKChmKSA9PiB0aGlzLmNvbmNlYWxPYmplY3RGbGF2b3IoZiwgYXBwKSk7XG4gIH1cblxuICAvKipcbiAgICogRXhwb3NlcyBhbiBvYmplY3QgZmxhdm9yIHRvIHRoZSBzaGVsbC4gRmxhdm9ycyBhcmUgYWJsZSB0byBiZSBhcHBsaWVkIHRvIG9iamVjdHNcbiAgICogaW4gb3JkZXIgdG8gYWRkIGEgbmV3IGFzcGVjdCB0byB0aGVtLiBBbiBvYmplY3QgY29udGFpbmluZyBhbiBpbWFnZSBmb3IgZXhhbXBsZSBjb3VsZFxuICAgKiBiZSBhZGRlZCBhIGZsYXZvciBvZiAnRVhJRiBEYXRhJyB0aGF0IHdpbGwgYWRkIHRoZSBjb3JyZXNwb25kaW5nIFNPVCB0byBpdC4gVGhpcyB3YXkgdGhlXG4gICAqIG9iamVjdCBnZXRzIG5ldyBtZXRhZGF0YSBwcm9wZXJ0aWVzLiBJZiBzdXBwb3J0ZWQsIHRoZXNlIG1ldGFkYXRhIGNvdWxkIGV2ZW4gYmUgZXh0cmFjdGVkXG4gICAqIGZyb20gdGhlIGZpbGUgYW5kIGZpbGxlZCBvdXQgYXV0b21hdGljYWxseS5cbiAgICogQHBhcmFtIGZsYXZvciBUaGUgZmxhdm9yIG9iamVjdCB0byBiZSBleHBvc2VkXG4gICAqIEBwYXJhbSBhcHAgT3B0aW9uYWwgSUQgb2YgdGhlIGFwcCB0aGF0IGV4cG9zZXMgdGhlIGZsYXZvciAoZGVmYXVsdHMgdG8gJ2dsb2JhbCcgaWYgbm90IHByb3ZpZGVkKVxuICAgKiBAcGFyYW0gb3JpZ2luIE9wdGlvbmFsIG9yaWdpbiBvZiB0aGUgZmxhdm9ycy4gRmxhdm9ycyBjb3VsZCBiZSBhZGRlZCBieSBhcHBzIG9yIGRlcml2ZWRcbiAgICogZnJvbSBhIGNvbmZpZ3VyYXRpb24gKGRlZmF1bHRzIHRvICdhcHAnIGlmIG5vdCBwcm92aWRlZClcbiAgICovXG4gIGV4cG9zZU9iamVjdEZsYXZvcihmbGF2b3I6IEFwcEZsYXZvciwgYXBwID0gJ2dsb2JhbCcsIG9yaWdpbjogJ2FwcCcgfCAnY29uZmlnJyA9ICdhcHAnKSB7XG4gICAgY29uc3QgaWR4ID0gdGhpcy5fb2JqZWN0Rmxhdm9ycy5maW5kSW5kZXgoKGYpID0+IGYuaWQgPT09IGZsYXZvci5pZCAmJiBmLmFwcCA9PT0gYXBwKTtcbiAgICBpZiAoaWR4ID09PSAtMSkgdGhpcy5fb2JqZWN0Rmxhdm9ycy5wdXNoKHsgLi4uZmxhdm9yLCBhcHAsIG9yaWdpbiB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIGFuIGV4cG9zZWQgb2JqZWN0IGZsYXZvciBmcm9tIHRoZSBzaGVsbC5cbiAgICogQHBhcmFtIGZsYXZvciBGbGF2b3IgdG8gYmUgY29uY2VhbGVkXG4gICAqIEBwYXJhbSBhcHAgT3B0aW9uYWwgSUQgb2YgdGhlIGFwcCB0aGF0IGV4cG9zZXMgdGhlIGZsYXZvciAoZGVmYXVsdHMgdG8gJ2dsb2JhbCcgaWYgbm90IHByb3ZpZGVkKVxuICAgKi9cbiAgY29uY2VhbE9iamVjdEZsYXZvcihmbGF2b3I6IEFwcEZsYXZvciwgYXBwID0gJ2dsb2JhbCcpIHtcbiAgICB0aGlzLl9vYmplY3RGbGF2b3JzID0gdGhpcy5fb2JqZWN0Rmxhdm9ycy5maWx0ZXIoKGYpID0+IGYuaWQgIT09IGZsYXZvci5pZCAmJiBmLmFwcCAhPT0gYXBwKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgcmVnaXN0ZXJlZCBvYmplY3QgZmxhdm9yc1xuICAgKiBAcGFyYW0gYXBwIE9wdGlvbmFsIGFwcCBJRCB0aGF0IHJlc3RyaWN0cyB0aGUgcmV0dXJuZWQgZmxhdm9ycyB0byB0aGUgb25lc1xuICAgKiBwcm92aWRlZCBieSBhIHBhcnRpY3VsYXIgYXBwLiBJZiBub3QgcHJvdmlkZWQgYWxsIGZsYXZvcnMgYXJlIHJldHVybmVkXG4gICAqIEByZXR1cm5zIEFycmF5IG9mIG1hdGNoaW5nIG9iamVjdCBmbGF2b3JzXG4gICAqL1xuICBnZXRPYmplY3RGbGF2b3JzKGFwcD86IHN0cmluZyk6IE9iamVjdEZsYXZvcltdIHtcbiAgICByZXR1cm4gYXBwID8gdGhpcy5fb2JqZWN0Rmxhdm9ycy5maWx0ZXIoKG9mKSA9PiBvZi5hcHAgPT09IGFwcCkgOiB0aGlzLl9vYmplY3RGbGF2b3JzO1xuICB9XG5cbiAgLyoqXG4gICAqIFRyaWdnZXJzIHRoZSBhcHBsaWNhdGlvbiBvZiBhbiBvYmplY3QgZmxhdm9yLiBJZiB0aGUgZmxhdm9yIGhhcyBhbiBhcHBseUNvbXBvbmVudFxuICAgKiBkZWZpbmVkLCB0aGUgb3ZlcmxheSB3aWxsIGJlIG9wZW5lZCB3aXRoIHRoZSBjb21wb25lbnQuIE90aGVyd2lzZSB0aGUgZmxhdm9yIHdpbGxcbiAgICogYmUgYXBwbGllZCBkaXJlY3RseSB0byB0aGUgb2JqZWN0LlxuICAgKiBAcGFyYW0gZG1zT2JqZWN0IFRoZSBvYmplY3QgdG8gYXBwbHkgdGhlIGZsYXZvciB0b1xuICAgKiBAcGFyYW0gZmxhdm9yIFRoZSBmbGF2b3IgdG8gYXBwbHlcbiAgICogQHBhcmFtIGRhdGEgT3B0aW9uYWwgZGF0YSB0byBiZSBwYXNzZWQgdG8gdGhlIGZsYXZvciBjb21wb25lbnRcbiAgICogQHJldHVybnMgT2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHRydWUgaWYgdGhlIGZsYXZvciB3YXMgYXBwbGllZCBzdWNjZXNzZnVsbHlcbiAgICovXG4gIHRyaWdnZXJBcHBseU9iamVjdEZsYXZvcihkbXNPYmplY3Q6IERtc09iamVjdCwgZmxhdm9yOiBPYmplY3RGbGF2b3IsIGRhdGE/OiBhbnksIGFwcGx5Q29tcG9uZW50PzogVHlwZTxhbnk+KTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgaWYgKGRtc09iamVjdCkge1xuICAgICAgY29uc3QgYWMgPSBhcHBseUNvbXBvbmVudCB8fCBmbGF2b3IuYXBwbHlDb21wb25lbnQ7XG4gICAgICBpZiAoYWMpIHtcbiAgICAgICAgdGhpcy4jZGlhbG9nLm9wZW4oYWMsIHtcbiAgICAgICAgICBtYXhXaWR0aDogJzkwdncnLFxuICAgICAgICAgIG1heEhlaWdodDogJzkwdmgnLFxuICAgICAgICAgIG1pbldpZHRoOiAnNTB2dycsXG4gICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgZG1zT2JqZWN0LFxuICAgICAgICAgICAgZmxhdm9yLFxuICAgICAgICAgICAgZGF0YVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBvZih0cnVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHNvdHM6IHN0cmluZ1tdID0gKGRtc09iamVjdC5kYXRhW0Jhc2VPYmplY3RUeXBlRmllbGQuU0VDT05EQVJZX09CSkVDVF9UWVBFX0lEU10gYXMgc3RyaW5nW10pIHx8IFtdO1xuICAgICAgICBjb25zdCBkYXRhOiBhbnkgPSB7fTtcbiAgICAgICAgZGF0YVtCYXNlT2JqZWN0VHlwZUZpZWxkLlNFQ09OREFSWV9PQkpFQ1RfVFlQRV9JRFNdID0gWy4uLnNvdHMsIGZsYXZvci5zb3RdO1xuICAgICAgICByZXR1cm4gdGhpcy4jZG1zU2VydmljZS51cGRhdGVEbXNPYmplY3QoZG1zT2JqZWN0Py5pZCwgZGF0YSkucGlwZShtYXAoKCkgPT4gdHJ1ZSkpO1xuICAgICAgfVxuICAgIH0gZWxzZSByZXR1cm4gb2YoZmFsc2UpO1xuICB9XG5cbiAgcmVtb3ZlT2JqZWN0Rmxhdm9yKGRtc09iamVjdDogRG1zT2JqZWN0LCBmbGF2b3I6IE9iamVjdEZsYXZvcik6IE9ic2VydmFibGU8YW55PiB7XG4gICAgY29uc3QgZGF0YTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7XG4gICAgICBbQmFzZU9iamVjdFR5cGVGaWVsZC5TRUNPTkRBUllfT0JKRUNUX1RZUEVfSURTXTogKGRtc09iamVjdC5kYXRhW0Jhc2VPYmplY3RUeXBlRmllbGQuU0VDT05EQVJZX09CSkVDVF9UWVBFX0lEU10gYXMgc3RyaW5nW10pLmZpbHRlcihcbiAgICAgICAgKHNvdDogc3RyaW5nKSA9PiBzb3QgIT09IGZsYXZvci5zb3RcbiAgICAgIClcbiAgICB9O1xuICAgIHJldHVybiB0aGlzLiNkbXNTZXJ2aWNlLnVwZGF0ZURtc09iamVjdChkbXNPYmplY3QuaWQsIGRhdGEpLnBpcGUobWFwKCgpID0+IHRydWUpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgb2JqZWN0IGZsYXZvcnMgYXBwbGljYWJsZSBmb3IgYSBjZXJ0YWluIG1pbWV0eXBlXG4gICAqIEBwYXJhbSBtaW1lVHlwZSBNaW1lIHR5cGUgb3IgbWltZSB0eXBlIHBhdHRlcm4gbGlrZSAnaW1hZ2UvKidcbiAgICogQHBhcmFtIGFwcCBPcHRpb25hbCBhcHAgSUQgdGhhdCByZXN0cmljdHMgdGhlIHJldHVybmVkIGZsYXZvcnMgdG8gdGhlIG9uZXNcbiAgICogcHJvdmlkZWQgYnkgYSBwYXJ0aWN1bGFyIGFwcFxuICAgKiBAcGFyYW0gY3VzdG9tRmxhdm9ycyBPcHRpb25hbCBhcnJheSBvZiBjdXN0b20gZmxhdm9ycyB0byBhbHNvIHRha2UgaW50byBhY2NvdW50LlxuICAgKiBUaGlzIGNvdWxkIGJlIGZsYXZvcnMgbWFuYWdlZCBieSBhbiBhcHAgaXRzZWxmIHRoYXQgYXJlIG5vdCBzdXBwb3NlZCB0byBiZVxuICAgKiBleHBvc2VkIHRvIG90aGVyIGFwcHNcbiAgICogQHJldHVybnMgQXJyYXkgb2YgbWF0Y2hpbmcgb2JqZWN0IGZsYXZvcnNcbiAgICovXG4gIGdldEFwcGxpY2FibGVEb2N1bWVudEZsYXZvcnMobWltZVR5cGU6IHN0cmluZywgYXBwPzogc3RyaW5nLCBjdXN0b21GbGF2b3JzPzogT2JqZWN0Rmxhdm9yW10pOiBPYmplY3RGbGF2b3JbXSB7XG4gICAgcmV0dXJuIFsuLi4oY3VzdG9tRmxhdm9ycyB8fCBbXSksIC4uLnRoaXMuX29iamVjdEZsYXZvcnNdLmZpbHRlcihcbiAgICAgIChvZjogT2JqZWN0Rmxhdm9yKSA9PlxuICAgICAgICAoIW9mLmFwcGxpY2FibGVUbz8uZm9sZGVycyB8fCAob2YuYXBwbGljYWJsZVRvPy5mb2xkZXJzICYmIG9mLmFwcGxpY2FibGVUbz8uZG9jdW1lbnRzKSkgJiZcbiAgICAgICAgKCFvZi5hcHBsaWNhYmxlVG8gfHxcbiAgICAgICAgICAhb2YuYXBwbGljYWJsZVRvPy5taW1lVHlwZXMgfHxcbiAgICAgICAgICAob2YuYXBwbGljYWJsZVRvPy5taW1lVHlwZXM/LnNvbWUoKG10cCkgPT4gVXRpbHMucGF0dGVyblRvUmVnRXhwKG10cCkudGVzdChtaW1lVHlwZSkpICYmICghYXBwIHx8IG9mLmFwcCA9PT0gYXBwKSkpXG4gICAgKTtcbiAgfVxuXG4gIGdldEFwcGxpY2FibGVGb2xkZXJGbGF2b3JzKGFwcD86IHN0cmluZywgY3VzdG9tRmxhdm9ycz86IE9iamVjdEZsYXZvcltdKTogT2JqZWN0Rmxhdm9yW10ge1xuICAgIHJldHVybiBbLi4uKGN1c3RvbUZsYXZvcnMgfHwgW10pLCAuLi50aGlzLl9vYmplY3RGbGF2b3JzXS5maWx0ZXIoKG9mOiBPYmplY3RGbGF2b3IpID0+IG9mLmFwcGxpY2FibGVUbz8uZm9sZGVycyAmJiAoIWFwcCB8fCBvZi5hcHAgPT09IGFwcCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhcHBsaWVkIGFuZCBhcHBsaWNhYmxlIG9iamVjdCBmbGF2b3JzIGZvciBhIGNlcnRhaW4gb2JqZWN0XG4gICAqIEBwYXJhbSBkbXNPYmplY3QgRG1zT2JqZWN0IHRvIGdldCBmbGF2b3JzIGZvclxuICAgKiBAcmV0dXJucyBPYmplY3QgY29udGFpbmluZyB0d28gYXJyYXlzOiBhcHBsaWVkIGFuZCBhcHBsaWNhYmxlIGZsYXZvcnNcbiAgICovXG4gIGdldEFwcGxpZWRPYmplY3RGbGF2b3JzKGRtc09iamVjdDogRG1zT2JqZWN0KToge1xuICAgIGFwcGxpZWQ6IE9iamVjdEZsYXZvcltdO1xuICAgIGFwcGxpY2FibGU6IE9iamVjdEZsYXZvcltdO1xuICB9IHtcbiAgICBjb25zdCBhcHBsaWVkOiBPYmplY3RGbGF2b3JbXSA9IFtdO1xuICAgIGNvbnN0IGFwcGxpY2FibGU6IE9iamVjdEZsYXZvcltdID0gW107XG4gICAgaWYgKGRtc09iamVjdCkge1xuICAgICAgY29uc3Qgc290czogc3RyaW5nW10gPSAoZG1zT2JqZWN0LmRhdGFbQmFzZU9iamVjdFR5cGVGaWVsZC5TRUNPTkRBUllfT0JKRUNUX1RZUEVfSURTXSBhcyBzdHJpbmdbXSkgfHwgW107XG4gICAgICBpZiAoZG1zT2JqZWN0LmNvbnRlbnQpIHtcbiAgICAgICAgdGhpcy5nZXRBcHBsaWNhYmxlRG9jdW1lbnRGbGF2b3JzKGRtc09iamVjdC5jb250ZW50Lm1pbWVUeXBlKS5mb3JFYWNoKChmbGF2b3I6IE9iamVjdEZsYXZvcikgPT4ge1xuICAgICAgICAgIGZsYXZvciA9IHtcbiAgICAgICAgICAgIC4uLmZsYXZvcixcbiAgICAgICAgICAgIG5hbWU6IHRoaXMuI3N5c3RlbS5nZXRMb2NhbGl6ZWRMYWJlbChmbGF2b3IuaWQpIHx8IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoZmxhdm9yLmlkKSxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiB0aGlzLiNzeXN0ZW0uZ2V0TG9jYWxpemVkRGVzY3JpcHRpb24oZmxhdm9yLmlkKSB8fCAoZmxhdm9yLmRlc2NyaXB0aW9uS2V5ID8gdGhpcy50cmFuc2xhdGUuaW5zdGFudChmbGF2b3IuZGVzY3JpcHRpb25LZXkpIDogdW5kZWZpbmVkKVxuICAgICAgICAgIH07XG4gICAgICAgICAgaWYgKHNvdHMuaW5jbHVkZXMoZmxhdm9yLnNvdCkpIHtcbiAgICAgICAgICAgIGFwcGxpZWQucHVzaChmbGF2b3IpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhcHBsaWNhYmxlLnB1c2goZmxhdm9yKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAoZG1zT2JqZWN0LmlzRm9sZGVyKSB7XG4gICAgICAgIHRoaXMuZ2V0QXBwbGljYWJsZUZvbGRlckZsYXZvcnMoKS5mb3JFYWNoKChmbGF2b3I6IE9iamVjdEZsYXZvcikgPT4ge1xuICAgICAgICAgIGZsYXZvciA9IHtcbiAgICAgICAgICAgIC4uLmZsYXZvcixcbiAgICAgICAgICAgIG5hbWU6IHRoaXMuI3N5c3RlbS5nZXRMb2NhbGl6ZWRMYWJlbChmbGF2b3IuaWQpIHx8IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoZmxhdm9yLmlkKSxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiB0aGlzLiNzeXN0ZW0uZ2V0TG9jYWxpemVkRGVzY3JpcHRpb24oZmxhdm9yLmlkKSB8fCAoZmxhdm9yLmRlc2NyaXB0aW9uS2V5ID8gdGhpcy50cmFuc2xhdGUuaW5zdGFudChmbGF2b3IuZGVzY3JpcHRpb25LZXkpIDogdW5kZWZpbmVkKVxuICAgICAgICAgIH07XG4gICAgICAgICAgaWYgKHNvdHMuaW5jbHVkZXMoZmxhdm9yLnNvdCkpIHtcbiAgICAgICAgICAgIGFwcGxpZWQucHVzaChmbGF2b3IpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhcHBsaWNhYmxlLnB1c2goZmxhdm9yKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4geyBhcHBsaWVkLCBhcHBsaWNhYmxlIH07XG4gIH1cblxuICBnZXRGbGF2b3JMYWJlbChpZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuI3N5c3RlbS5nZXRMb2NhbGl6ZWRMYWJlbChpZCkgfHwgdGhpcy50cmFuc2xhdGUuaW5zdGFudChpZCk7XG4gIH1cblxuICBhcHBseU9iamVjdEZsYXZvcihkbXNPYmplY3Q6IERtc09iamVjdCwgZmxhdm9yOiBPYmplY3RGbGF2b3IsIGRhdGE6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge30pOiBPYnNlcnZhYmxlPERtc09iamVjdD4ge1xuICAgIGNvbnN0IHNvdHM6IHN0cmluZ1tdID0gKGRtc09iamVjdC5kYXRhW0Jhc2VPYmplY3RUeXBlRmllbGQuU0VDT05EQVJZX09CSkVDVF9UWVBFX0lEU10gYXMgc3RyaW5nW10pIHx8IFtdO1xuICAgIGRhdGFbQmFzZU9iamVjdFR5cGVGaWVsZC5TRUNPTkRBUllfT0JKRUNUX1RZUEVfSURTXSA9IFsuLi5zb3RzLCBmbGF2b3Iuc290XTtcbiAgICByZXR1cm4gdGhpcy4jZG1zU2VydmljZS51cGRhdGVEbXNPYmplY3QoZG1zT2JqZWN0LmlkLCBkYXRhKTtcbiAgfVxuXG4gIHJlZ2lzdGVyVGlsZUV4dGVuc2lvbihleHQ6IFRpbGVFeHRlbnNpb24pIHtcbiAgICB0aGlzLl9leHRlbnNpb25zW2V4dC50eXBlSWRdID0gZXh0O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aWxlIGV4dGVuc2lvbnMgZm9yIGEgY2VydGFpbiB0eXBlXG4gICAqIEBwYXJhbSB0eXBlSWQgSUQgb2YgdGhlIHR5cGUgdG8gZmV0Y2ggZXh0ZXNpb24gZm9yIChvYmplY3RUeXBlSUQgb3Igc2Vjb25kYXJ5T2JqZWN0VHlwZUlEKVxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgZ2V0UmVnaXN0ZXJlZFRpbGVFeHRlbnNpb25zKCk6IFJlY29yZDxzdHJpbmcsIFRpbGVFeHRlbnNpb24+IHtcbiAgICByZXR1cm4gdGhpcy5fZXh0ZW5zaW9ucztcbiAgfVxuXG4gIF9pbml0T2JqZWN0VHlwZUNvbmZpZygpOiBQcm9taXNlPHVua25vd24+IHtcbiAgICAvLyBsb2FkIGZsYXZvcnMgZnJvbSBjb25maWdcbiAgICBjb25zb2xlLmRlYnVnKCdMb2FkaW5nIG9iamVjdCB0eXBlIGNvbmZpZy4uLicpO1xuICAgIHJldHVybiBmaXJzdFZhbHVlRnJvbShcbiAgICAgIHRoaXMuI3NoZWxsQ29uZmlnLmdldChTSEVMTF9DT05GSUdfVFlQRVMpLnBpcGUoXG4gICAgICAgIHRhcCgocmVzOiBTaGVsbENvbmZpZyB8IHVuZGVmaW5lZCkgPT4ge1xuICAgICAgICAgIGlmIChyZXMpIHtcbiAgICAgICAgICAgIHRoaXMuI3JlZ2lzdGVyT2JqZWN0VHlwZUljb25zKChyZXMuZGF0YSBhcyBDbGllbnRTaGVsbFR5cGVbXSkubWFwKCh0KSA9PiB0LmlkKSk7XG5cbiAgICAgICAgICAgIGNvbnN0IGZsdjogQXBwRmxhdm9yW10gPSAocmVzLmRhdGEgYXMgQ2xpZW50U2hlbGxUeXBlW10pLm1hcCgodCkgPT4gKHtcbiAgICAgICAgICAgICAgaWQ6IHQuaWQsXG4gICAgICAgICAgICAgIHNvdDogdC5pZCxcbiAgICAgICAgICAgICAgaWNvbjogdC5pZCxcbiAgICAgICAgICAgICAgc3ZnSWNvbjogdHJ1ZSxcbiAgICAgICAgICAgICAgb2JqZWN0VHlwZUlEOiB0LmJhc2VUeXBlLFxuICAgICAgICAgICAgICBhcHBsaWNhYmxlVG86IHtcbiAgICAgICAgICAgICAgICBmb2xkZXJzOiB0LmJhc2VUeXBlID09PSBTeXN0ZW1UeXBlLkZPTERFUiB8fCB0LmJhc2VUeXBlID09PSBTeXN0ZW1UeXBlLk9CSkVDVCxcbiAgICAgICAgICAgICAgICBkb2N1bWVudHM6IHQuYmFzZVR5cGUgPT09IFN5c3RlbVR5cGUuRE9DVU1FTlQgfHwgdC5iYXNlVHlwZSA9PT0gU3lzdGVtVHlwZS5PQkpFQ1QsXG4gICAgICAgICAgICAgICAgbWltZVR5cGVzOiB0LmFwcGxpY2FibGVUb01pbWVUeXBlcyB8fCB1bmRlZmluZWRcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgdXNlRGVmYXVsdEFwcGx5Q29tcG9uZW50OiAhdC5pbnN0YW50QXBwbHlcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIHRoaXMuZXhwb3NlT2JqZWN0Rmxhdm9ycyhmbHYsICdnbG9iYWwnLCAnY29uZmlnJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICAjcmVnaXN0ZXJPYmplY3RUeXBlSWNvbnMoaWRzOiBzdHJpbmdbXSkge1xuICAgIHRoaXMuI3N5c3RlbS5zeXN0ZW0kLnBpcGUoZmlyc3QoKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIGlkcy5mb3JFYWNoKChpZCkgPT4ge1xuICAgICAgICAvLyBzcGxpdCB0ZWNobmljYWwgbmFtZSBlLmcuICdzeXN0ZW06ZG9jdW1lbnQnIGFuZCB1c2UgdGhlIGZpcnN0IHBhcnQgYXMgbmFtZXNwYWNlXG4gICAgICAgIGNvbnN0IGlkVG9rZW5zID0gaWQuc3BsaXQoJzonKTtcbiAgICAgICAgaWYgKGlkVG9rZW5zLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgIGNvbnN0IHVyaSA9IGAke3RoaXMuI2NvbmZpZ1NlcnZpY2UuZ2V0QXBpQmFzZShBcGlCYXNlLm5vbmUsIHRydWUpfSR7dGhpcy4jc3lzdGVtLmdldE9iamVjdFR5cGVJY29uVXJpKGlkKX1gO1xuICAgICAgICAgIHRoaXMuI2ljb25SZWdpc3RyeS5hZGRTdmdJY29uSW5OYW1lc3BhY2UoaWRUb2tlbnNbMF0sIGlkVG9rZW5zWzFdLCB0aGlzLiNzYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdFJlc291cmNlVXJsKHVyaSkpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIF9pbml0KCkge1xuICAgIC8vIHRoZSBwbGFjZSBmb3IgaW5pdGlhbGl6YXRpb24gdGFza3MgaWZcbiAgfVxufVxuIl19
@@ -16,11 +16,13 @@ export interface App extends Route {
16
16
  id: string;
17
17
  svgIcon?: string;
18
18
  iconName: string;
19
+ title: string;
19
20
  permissions?: AppPermission;
20
21
  options?: AppOptions;
21
22
  }
22
23
  export interface AppOptions {
23
24
  appHeader?: boolean;
25
+ appClaimKey?: string;
24
26
  appClaim?: string;
25
27
  hideFromNav?: boolean;
26
28
  }
@@ -24,6 +24,7 @@ export declare class ShellService {
24
24
  private _extensions;
25
25
  private _objectFlavors;
26
26
  private _objectCreateFlavors;
27
+ constructor();
27
28
  pickFile(): Observable<File | null>;
28
29
  setShellConfig(csc: ClientShellConfig): void;
29
30
  setApps(apps: App[]): void;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yuuvis/client-shell-core",
3
- "version": "2.3.4",
3
+ "version": "2.3.6",
4
4
  "author": "OPTIMAL SYSTEMS GmbH <npm@optimal-systems.de>",
5
5
  "license": "MIT",
6
6
  "peerDependencies": {
@@ -9,7 +9,7 @@
9
9
  "@angular/material": "^19.2.15",
10
10
  "rxjs": "^7.8.2",
11
11
  "@angular/platform-browser": "^19.2.1",
12
- "@yuuvis/client-core": "^2.3.4"
12
+ "@yuuvis/client-core": "^2.3.6"
13
13
  },
14
14
  "dependencies": {
15
15
  "tslib": "^2.3.0"