valtech-components 4.0.165 → 4.0.167
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/esm2022/lib/services/app-version/app-version.service.mjs +57 -6
- package/esm2022/lib/services/auth/auth.service.mjs +18 -4
- package/esm2022/lib/services/auth/handoff.service.mjs +4 -2
- package/esm2022/lib/version.mjs +2 -2
- package/fesm2022/valtech-components.mjs +76 -9
- package/fesm2022/valtech-components.mjs.map +1 -1
- package/lib/services/app-version/app-version.service.d.ts +8 -0
- package/lib/version.d.ts +1 -1
- package/package.json +1 -1
- package/src/lib/services/firebase/firebase-messaging-sw.js +0 -145
|
@@ -28,9 +28,16 @@ import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
|
28
28
|
import { SwUpdate } from '@angular/service-worker';
|
|
29
29
|
import { filter, interval } from 'rxjs';
|
|
30
30
|
import { AppConfigService } from '../app-config/app-config.service';
|
|
31
|
-
import { APP_VERSION_PLATFORM_PLUGIN, APP_VERSION_REMOTE_PLUGIN, VALTECH_APP_VERSION } from './config';
|
|
31
|
+
import { APP_VERSION_PLATFORM_PLUGIN, APP_VERSION_REMOTE_PLUGIN, VALTECH_APP_VERSION, } from './config';
|
|
32
32
|
import { DEFAULT_APP_VERSION_SERVICE_CONFIG, } from './types';
|
|
33
33
|
import * as i0 from "@angular/core";
|
|
34
|
+
/**
|
|
35
|
+
* Máximo que `applyUpdate` espera por el `VERSION_READY` del SW antes de recargar
|
|
36
|
+
* igual. Cubre el caso en que el update lo detectó el path HTTP antes de que el
|
|
37
|
+
* SW descargara el bundle nuevo (evita el loop de banner). Si el SW nunca queda
|
|
38
|
+
* listo (Android Chrome), recarga como último recurso al vencer.
|
|
39
|
+
*/
|
|
40
|
+
const SW_READY_TIMEOUT_MS = 8000;
|
|
34
41
|
/**
|
|
35
42
|
* Compara dos versiones semver. Retorna true si `a` es estrictamente menor
|
|
36
43
|
* que `b`. Tolerante a longitudes distintas y a partes no numéricas.
|
|
@@ -57,9 +64,13 @@ export class AppVersionService {
|
|
|
57
64
|
this.appConfig = inject(AppConfigService, { optional: true });
|
|
58
65
|
this.serviceConfig = inject(VALTECH_APP_VERSION, { optional: true });
|
|
59
66
|
/** Plugin nativo opcional: provisto por apps Capacitor para Play Store / App Store. */
|
|
60
|
-
this.platformPlugin = inject(APP_VERSION_PLATFORM_PLUGIN, {
|
|
67
|
+
this.platformPlugin = inject(APP_VERSION_PLATFORM_PLUGIN, {
|
|
68
|
+
optional: true,
|
|
69
|
+
});
|
|
61
70
|
/** Plugin HTTP opcional: alternativa a AppConfigService para apps sin Firebase. */
|
|
62
|
-
this.remotePlugin = inject(APP_VERSION_REMOTE_PLUGIN, {
|
|
71
|
+
this.remotePlugin = inject(APP_VERSION_REMOTE_PLUGIN, {
|
|
72
|
+
optional: true,
|
|
73
|
+
});
|
|
63
74
|
this.document = inject(DOCUMENT);
|
|
64
75
|
this.destroyRef = inject(DestroyRef);
|
|
65
76
|
/** True cuando el SW reportó un bundle nuevo listo (`VERSION_READY`). */
|
|
@@ -128,7 +139,21 @@ export class AppVersionService {
|
|
|
128
139
|
}
|
|
129
140
|
try {
|
|
130
141
|
if (this.swUpdate?.isEnabled) {
|
|
131
|
-
|
|
142
|
+
// Si la actualización se detectó por el path HTTP (/version.json) ANTES
|
|
143
|
+
// de que el SW descargue el bundle nuevo, `swUpdateReady` aún es false:
|
|
144
|
+
// recargar ahora volvería a cargar el MISMO bundle viejo y el banner
|
|
145
|
+
// reaparecería (loop de "actualizar N veces"). Pedimos al SW que chequee
|
|
146
|
+
// y esperamos a que el bundle quede listo (con timeout) para que el
|
|
147
|
+
// reload realmente cambie de versión.
|
|
148
|
+
if (!this.swUpdateReady()) {
|
|
149
|
+
await this.swUpdate.checkForUpdate().catch(() => undefined);
|
|
150
|
+
if (!this.swUpdateReady()) {
|
|
151
|
+
await this.waitForSwReady(SW_READY_TIMEOUT_MS);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
if (this.swUpdateReady()) {
|
|
155
|
+
await this.swUpdate.activateUpdate();
|
|
156
|
+
}
|
|
132
157
|
}
|
|
133
158
|
}
|
|
134
159
|
catch (err) {
|
|
@@ -138,6 +163,30 @@ export class AppVersionService {
|
|
|
138
163
|
this.document.defaultView?.location.reload();
|
|
139
164
|
}
|
|
140
165
|
}
|
|
166
|
+
/**
|
|
167
|
+
* Espera a que el SW reporte un bundle nuevo listo (`VERSION_READY`), o hasta
|
|
168
|
+
* `timeoutMs`. Evita el reload "en seco" cuando el update lo detectó el path
|
|
169
|
+
* HTTP antes de que el SW descargara el bundle. Si el timeout vence (ej.
|
|
170
|
+
* Android Chrome donde VERSION_READY es poco confiable), resuelve igual y el
|
|
171
|
+
* caller recarga como último recurso.
|
|
172
|
+
*/
|
|
173
|
+
waitForSwReady(timeoutMs) {
|
|
174
|
+
if (this.swUpdateReady() || !this.swUpdate?.isEnabled)
|
|
175
|
+
return Promise.resolve();
|
|
176
|
+
return new Promise(resolve => {
|
|
177
|
+
let settled = false;
|
|
178
|
+
const finish = () => {
|
|
179
|
+
if (settled)
|
|
180
|
+
return;
|
|
181
|
+
settled = true;
|
|
182
|
+
sub.unsubscribe();
|
|
183
|
+
clearTimeout(timer);
|
|
184
|
+
resolve();
|
|
185
|
+
};
|
|
186
|
+
const sub = this.swUpdate.versionUpdates.pipe(filter(evt => evt.type === 'VERSION_READY')).subscribe(() => finish());
|
|
187
|
+
const timer = setTimeout(finish, timeoutMs);
|
|
188
|
+
});
|
|
189
|
+
}
|
|
141
190
|
/**
|
|
142
191
|
* Descarta el banner de actualización opcional.
|
|
143
192
|
* No tiene efecto sobre el estado `update-required` (hard gate).
|
|
@@ -151,7 +200,9 @@ export class AppVersionService {
|
|
|
151
200
|
async checkNow() {
|
|
152
201
|
await Promise.all([
|
|
153
202
|
this.swUpdate?.isEnabled
|
|
154
|
-
? this.swUpdate
|
|
203
|
+
? this.swUpdate
|
|
204
|
+
.checkForUpdate()
|
|
205
|
+
.catch(err => console.warn('[AppVersionService] checkForUpdate failed:', err))
|
|
155
206
|
: undefined,
|
|
156
207
|
this.remotePlugin ? this.loadRemoteConfig() : undefined,
|
|
157
208
|
]);
|
|
@@ -224,4 +275,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
224
275
|
type: Injectable,
|
|
225
276
|
args: [{ providedIn: 'root' }]
|
|
226
277
|
}], ctorParameters: () => [] });
|
|
227
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLXZlcnNpb24uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvc2VydmljZXMvYXBwLXZlcnNpb24vYXBwLXZlcnNpb24uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F1Qkc7QUFFSCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQVUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ25ELE9BQU8sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRXhDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSx5QkFBeUIsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUN2RyxPQUFPLEVBS0wsa0NBQWtDLEdBQ25DLE1BQU0sU0FBUyxDQUFDOztBQUVqQjs7O0dBR0c7QUFDSCxTQUFTLGNBQWMsQ0FBQyxDQUFTLEVBQUUsQ0FBUztJQUMxQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNqRCxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMs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NUYsUUFBUSxDQUFDLFVBQVUsQ0FBQzthQUNqQixJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO2FBQ3pDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLENBQUM7UUFFakQsTUFBTSxTQUFTLEdBQUcsR0FBUyxFQUFFO1lBQzNCLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxlQUFlLEtBQUssU0FBUztnQkFBRSxLQUFLLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQ2hGLENBQUMsQ0FBQztRQUNGLElBQUksQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsa0JBQWtCLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDOUQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxrQkFBa0IsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDO0lBQ3BHLENBQUM7SUFFTyxLQUFLLENBQUMsZ0JBQWdCO1FBQzVCLElBQUksQ0FBQztZQUNILE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLFlBQWEsQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUMxRCxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNoQyxDQUFDO1FBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztZQUNiLE9BQU8sQ0FBQyxJQUFJLENBQUMsaURBQWlELEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDdkUsQ0FBQztJQUNILENBQUM7K0dBaE5VLGlCQUFpQjttSEFBakIsaUJBQWlCLGNBREosTUFBTTs7NEZBQ25CLGlCQUFpQjtrQkFEN0IsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEFwcFZlcnNpb25TZXJ2aWNlXG4gKlxuICogVmVyaWZpY2FjacOzbiBkZSB2ZXJzacOzbiBkZSBsYSBhcHAgcGFyYSBQV0EgLyB3ZWIgLyBDYXBhY2l0b3IuXG4gKlxuICogVW5pZmljYSB0cmVzIHNlw7FhbGVzIHBhcmEgZGV0ZWN0YXIgYWN0dWFsaXphY2lvbmVzOlxuICpcbiAqIDEuIGBTd1VwZGF0ZWAgKGBAYW5ndWxhci9zZXJ2aWNlLXdvcmtlcmApIOKAlCBlbCBldmVudG8gYFZFUlNJT05fUkVBRFlgIGluZGljYVxuICogICAgcXVlIHVuIGJ1bmRsZSBudWV2byBmdWUgZGVzY2FyZ2FkbyB5IGVzdMOhIGxpc3RvIHBhcmEgYWN0aXZhcnNlLiBTb2xvIGVzdMOhXG4gKiAgICBkaXNwb25pYmxlIGN1YW5kbyBlbCBzZXJ2aWNlIHdvcmtlciBlc3TDoSByZWdpc3RyYWRvIChidWlsZCBkZSBwcm9kdWNjacOzbikuXG4gKiAgICBBZGVtw6FzIHNlIGNoZXF1ZWEgcHJvYWN0aXZhbWVudGUgY2FkYSBgY2hlY2tJbnRlcnZhbE1zYCB5IGNhZGEgdmV6IHF1ZSBsYVxuICogICAgYXBwIHZ1ZWx2ZSBhIGZvcmVncm91bmQgKGB2aXNpYmlsaXR5Y2hhbmdlYCkuXG4gKlxuICogMi4gYEFwcENvbmZpZ1NlcnZpY2VgIChjb25maWcgcmVtb3RvIGVuIEZpcmVzdG9yZSkg4oCUIGV4cG9uZSBgdmVyc2lvbmBcbiAqICAgICjDumx0aW1hIHZlcnNpw7NuIHB1YmxpY2FkYSkgeSBgbWluVmVyc2lvbmAgKHZlcnNpw7NuIG3DrW5pbWEgc29wb3J0YWRhKS5cbiAqICAgIFNlIHVzYSBwYXJhIGxhIHBvbMOtdGljYSBkZSBhY3R1YWxpemFjacOzbiBvYmxpZ2F0b3JpYSAoaGFyZCBnYXRlKS5cbiAqXG4gKiAzLiBgQXBwVmVyc2lvblJlbW90ZVBsdWdpbmAgKEhUVFApIOKAlCBhbHRlcm5hdGl2YSBhIEFwcENvbmZpZ1NlcnZpY2UgcGFyYSBhcHBzXG4gKiAgICBzaW4gRmlyZWJhc2UuIFByb3Zpc3RvIHZpYSBgcHJvdmlkZVZhbHRlY2hBcHBWZXJzaW9uSHR0cGAuIEV4cG9uZSBlbCBtaXNtb1xuICogICAgY29udHJhdG8gKGB2ZXJzaW9uYCAvIGBtaW5WZXJzaW9uYCkuIFNlIGNoZXF1ZWEgZW4gbG9zIG1pc21vcyBpbnRlcnZhbG9zXG4gKiAgICBxdWUgZWwgU1cuXG4gKlxuICogTGFzIHRyZXMgZGVwZW5kZW5jaWFzIHNlIGlueWVjdGFuIGNvbW8gb3BjaW9uYWxlcy5cbiAqL1xuXG5pbXBvcnQgeyBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBEZXN0cm95UmVmLCBJbmplY3RhYmxlLCBTaWduYWwsIGNvbXB1dGVkLCBpbmplY3QsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgU3dVcGRhdGUgfSBmcm9tICdAYW5ndWxhci9zZXJ2aWNlLXdvcmtlcic7XG5pbXBvcnQgeyBmaWx0ZXIsIGludGVydmFsIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IEFwcENvbmZpZ1NlcnZpY2UgfSBmcm9tICcuLi9hcHAtY29uZmlnL2FwcC1jb25maWcuc2VydmljZSc7XG5pbXBvcnQgeyBBUFBfVkVSU0lPTl9QTEFURk9STV9QTFVHSU4sIEFQUF9WRVJTSU9OX1JFTU9URV9QTFVHSU4sIFZBTFRFQ0hfQVBQX1ZFUlNJT04gfSBmcm9tICcuL2NvbmZpZyc7XG5pbXBvcnQge1xuICBBcHBWZXJzaW9uUGxhdGZvcm1QbHVnaW4sXG4gIEFwcFZlcnNpb25SZW1vdGVDb25maWcsXG4gIEFwcFZlcnNpb25SZW1vdGVQbHVnaW4sXG4gIEFwcFZlcnNpb25TdGF0dXMsXG4gIERFRkFVTFRfQVBQX1ZFUlNJT05fU0VSVklDRV9DT05GSUcsXG59IGZyb20gJy4vdHlwZXMnO1xuXG4vKipcbiAqIENvbXBhcmEgZG9zIHZlcnNpb25lcyBzZW12ZXIuIFJldG9ybmEgdHJ1ZSBzaSBgYWAgZXMgZXN0cmljdGFtZW50ZSBtZW5vclxuICogcXVlIGBiYC4gVG9sZXJhbnRlIGEgbG9uZ2l0dWRlcyBkaXN0aW50YXMgeSBhIHBhcnRlcyBubyBudW3DqXJpY2FzLlxuICovXG5mdW5jdGlvbiBpc1ZlcnNpb25Mb3dlcihhOiBzdHJpbmcsIGI6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBjb25zdCBwYSA9IGEuc3BsaXQoJy4nKS5tYXAobiA9PiBOdW1iZXIobikgfHwgMCk7XG4gIGNvbnN0IHBiID0gYi5zcGxpdCgnLicpLm1hcChuID0+IE51bWJlcihuKSB8fCAwKTtcbiAgY29uc3QgbGVuID0gTWF0aC5tYXgocGEubGVuZ3RoLCBwYi5sZW5ndGgpO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICBjb25zdCB4ID0gcGFbaV0gfHwgMDtcbiAgICBjb25zdCB5ID0gcGJbaV0gfHwgMDtcbiAgICBpZiAoeCA8IHkpIHJldHVybiB0cnVlO1xuICAgIGlmICh4ID4geSkgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIEFwcFZlcnNpb25TZXJ2aWNlIHtcbiAgLyoqIFN3VXBkYXRlIHNvbG8gZXhpc3RlIHNpIGVsIFNXIGVzdMOhIHJlZ2lzdHJhZG8gKHByb2QgYnVpbGQpLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IHN3VXBkYXRlID0gaW5qZWN0KFN3VXBkYXRlLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuICAvKiogQXBwQ29uZmlnU2VydmljZSBlcyBvcGNpb25hbDogbGEgYXBwIHB1ZWRlIG5vIHdpcmVhcmxvLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IGFwcENvbmZpZyA9IGluamVjdChBcHBDb25maWdTZXJ2aWNlLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuICBwcml2YXRlIHJlYWRvbmx5IHNlcnZpY2VDb25maWcgPSBpbmplY3QoVkFMVEVDSF9BUFBfVkVSU0lPTiwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcbiAgLyoqIFBsdWdpbiBuYXRpdm8gb3BjaW9uYWw6IHByb3Zpc3RvIHBvciBhcHBzIENhcGFjaXRvciBwYXJhIFBsYXkgU3RvcmUgLyBBcHAgU3RvcmUuICovXG4gIHByaXZhdGUgcmVhZG9ubHkgcGxhdGZvcm1QbHVnaW4gPSBpbmplY3Q8QXBwVmVyc2lvblBsYXRmb3JtUGx1Z2luPihcbiAgICBBUFBfVkVSU0lPTl9QTEFURk9STV9QTFVHSU4sXG4gICAgeyBvcHRpb25hbDogdHJ1ZSB9XG4gICk7XG4gIC8qKiBQbHVnaW4gSFRUUCBvcGNpb25hbDogYWx0ZXJuYXRpdmEgYSBBcHBDb25maWdTZXJ2aWNlIHBhcmEgYXBwcyBzaW4gRmlyZWJhc2UuICovXG4gIHByaXZhdGUgcmVhZG9ubHkgcmVtb3RlUGx1Z2luID0gaW5qZWN0PEFwcFZlcnNpb25SZW1vdGVQbHVnaW4+KFxuICAgIEFQUF9WRVJTSU9OX1JFTU9URV9QTFVHSU4sXG4gICAgeyBvcHRpb25hbDogdHJ1ZSB9XG4gICk7XG4gIHByaXZhdGUgcmVhZG9ubHkgZG9jdW1lbnQgPSBpbmplY3QoRE9DVU1FTlQpO1xuICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG5cbiAgLyoqIFRydWUgY3VhbmRvIGVsIFNXIHJlcG9ydMOzIHVuIGJ1bmRsZSBudWV2byBsaXN0byAoYFZFUlNJT05fUkVBRFlgKS4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSBzd1VwZGF0ZVJlYWR5ID0gc2lnbmFsKGZhbHNlKTtcblxuICAvKiogQ29uZmlnIHJlbW90YSBjYXJnYWRhIHBvciBlbCBwbHVnaW4gSFRUUC4gTnVsbCBoYXN0YSBxdWUgY2FyZ2EgbyBzaSBubyBoYXkgcGx1Z2luLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IHJlbW90ZUNvbmZpZyA9IHNpZ25hbDxBcHBWZXJzaW9uUmVtb3RlQ29uZmlnIHwgbnVsbD4obnVsbCk7XG5cbiAgLyoqXG4gICAqIFRydWUgY3VhbmRvIGVsIHVzdWFyaW8gZGVzY2FydMOzIGVsIGJhbm5lciBkZSBhY3R1YWxpemFjacOzbiBvcGNpb25hbC5cbiAgICogRWwgYmFubmVyIG9ibGlnYXRvcmlvIChgdXBkYXRlLXJlcXVpcmVkYCkgaWdub3JhIGVzdGUgZmxhZy5cbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgX2Rpc21pc3NlZCA9IHNpZ25hbChmYWxzZSk7XG4gIHJlYWRvbmx5IGRpc21pc3NlZDogU2lnbmFsPGJvb2xlYW4+ID0gdGhpcy5fZGlzbWlzc2VkLmFzUmVhZG9ubHkoKTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gU0lHTkFMUyBQw5pCTElDT1NcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIFZlcnNpw7NuIGxvY2FsIGRlbCBidWlsZCBhY3R1YWwgZGUgbGEgYXBwLlxuICAgKiBQcm92aWVuZSBkZWwgcHJvdmlkZXIgYHByb3ZpZGVWYWx0ZWNoQXBwVmVyc2lvbih7IGN1cnJlbnRWZXJzaW9uIH0pYC5cbiAgICovXG4gIHJlYWRvbmx5IGN1cnJlbnRWZXJzaW9uOiBTaWduYWw8c3RyaW5nPiA9IGNvbXB1dGVkKFxuICAgICgpID0+IHRoaXMuc2VydmljZUNvbmZpZz8uY3VycmVudFZlcnNpb24gPz8gJzAuMC4wJ1xuICApO1xuXG4gIC8qKlxuICAgKiDDmmx0aW1hIHZlcnNpw7NuIHB1YmxpY2FkYSBzZWfDum4gZWwgY29uZmlnIHJlbW90byAoQXBwQ29uZmlnU2VydmljZSBvIHBsdWdpbiBIVFRQKS5cbiAgICogYG51bGxgIHNpIG5pbmd1bmEgZnVlbnRlIGVzdMOhIGRpc3BvbmlibGUgbyBhw7puIG5vIGNhcmfDsy5cbiAgICovXG4gIHJlYWRvbmx5IGxhdGVzdFZlcnNpb246IFNpZ25hbDxzdHJpbmcgfCBudWxsPiA9IGNvbXB1dGVkKFxuICAgICgpID0+IHRoaXMuYXBwQ29uZmlnPy5yZW1vdGVWZXJzaW9uKCkgPz8gdGhpcy5yZW1vdGVDb25maWcoKT8udmVyc2lvbiA/PyBudWxsXG4gICk7XG5cbiAgLyoqXG4gICAqIEVzdGFkbyBkZSBsYSB2ZXJzacOzbjpcbiAgICogLSBgdXBkYXRlLXJlcXVpcmVkYCDigJQgbGEgdmVyc2nDs24gbG9jYWwgcXVlZMOzIHBvciBkZWJham8gZGUgYG1pblZlcnNpb25gLiBIYXJkIGdhdGUuXG4gICAqIC0gYHVwZGF0ZS1hdmFpbGFibGVgIOKAlCBTVyBidW5kbGUgbGlzdG8sIEFwcENvbmZpZ1NlcnZpY2UgbyBwbHVnaW4gSFRUUCBkZXRlY3Rhcm9uIHZlcnNpw7NuIG51ZXZhLlxuICAgKiAtIGB1cC10by1kYXRlYCDigJQgZW4gY3VhbHF1aWVyIG90cm8gY2Fzby5cbiAgICovXG4gIHJlYWRvbmx5IHN0YXR1czogU2lnbmFsPEFwcFZlcnNpb25TdGF0dXM+ID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIC8vIDEuIEhhcmQgZ2F0ZSDigJQgbWluVmVyc2lvbiBkZSBBcHBDb25maWdTZXJ2aWNlIG8gZGVsIHBsdWdpbiBIVFRQLlxuICAgIGNvbnN0IG1pblZlcnNpb24gPVxuICAgICAgdGhpcy5hcHBDb25maWc/LmFwcENvbmZpZygpPy5taW5WZXJzaW9uID8/IHRoaXMucmVtb3RlQ29uZmlnKCk/Lm1pblZlcnNpb247XG4gICAgaWYgKG1pblZlcnNpb24gJiYgaXNWZXJzaW9uTG93ZXIodGhpcy5jdXJyZW50VmVyc2lvbigpLCBtaW5WZXJzaW9uKSkge1xuICAgICAgcmV0dXJuICd1cGRhdGUtcmVxdWlyZWQnO1xuICAgIH1cblxuICAgIC8vIDIuIFVwZGF0ZSBvcGNpb25hbCDigJQgU1cgYnVuZGxlIGxpc3RvLCBBcHBDb25maWcsIG8gcGx1Z2luIEhUVFAgbcOhcyBudWV2by5cbiAgICBjb25zdCByZW1vdGVMYXRlc3QgPSB0aGlzLnJlbW90ZUNvbmZpZygpPy52ZXJzaW9uO1xuICAgIGNvbnN0IGhhc1JlbW90ZVVwZGF0ZSA9IHJlbW90ZUxhdGVzdFxuICAgICAgPyBpc1ZlcnNpb25Mb3dlcih0aGlzLmN1cnJlbnRWZXJzaW9uKCksIHJlbW90ZUxhdGVzdClcbiAgICAgIDogZmFsc2U7XG5cbiAgICBpZiAodGhpcy5zd1VwZGF0ZVJlYWR5KCkgfHwgdGhpcy5hcHBDb25maWc/Lmhhc1VwZGF0ZSgpIHx8IGhhc1JlbW90ZVVwZGF0ZSkge1xuICAgICAgcmV0dXJuICd1cGRhdGUtYXZhaWxhYmxlJztcbiAgICB9XG5cbiAgICByZXR1cm4gJ3VwLXRvLWRhdGUnO1xuICB9KTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLndpcmVTZXJ2aWNlV29ya2VyKCk7XG4gICAgaWYgKHRoaXMucmVtb3RlUGx1Z2luKSB7XG4gICAgICB0aGlzLndpcmVSZW1vdGVQbHVnaW4oKTtcbiAgICB9XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gTcOJVE9ET1MgUMOaQkxJQ09TXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8qKlxuICAgKiBBcGxpY2EgbGEgYWN0dWFsaXphY2nDs24gcGVuZGllbnRlLlxuICAgKlxuICAgKiBTaSBoYXkgdW4gcGx1Z2luIGRlIHBsYXRhZm9ybWEgKG5hdGl2by9DYXBhY2l0b3IpLCBkZWxlZ2EgZW4gw6lsIChlai4gUGxheSBTdG9yZSkuXG4gICAqIFNpIG5vLCBhY3RpdmEgbGEgdmVyc2nDs24gU1cgc2kgZXN0w6EgZGlzcG9uaWJsZSB5IHJlY2FyZ2EgbGEgcMOhZ2luYS5cbiAgICovXG4gIGFzeW5jIGFwcGx5VXBkYXRlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLnBsYXRmb3JtUGx1Z2luKSB7XG4gICAgICBhd2FpdCB0aGlzLnBsYXRmb3JtUGx1Z2luLmFwcGx5VXBkYXRlKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGlmICh0aGlzLnN3VXBkYXRlPy5pc0VuYWJsZWQpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5zd1VwZGF0ZS5hY3RpdmF0ZVVwZGF0ZSgpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc29sZS53YXJuKCdbQXBwVmVyc2lvblNlcnZpY2VdIGFjdGl2YXRlVXBkYXRlIGZhaWxlZDonLCBlcnIpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLmRvY3VtZW50LmRlZmF1bHRWaWV3Py5sb2NhdGlvbi5yZWxvYWQoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRGVzY2FydGEgZWwgYmFubmVyIGRlIGFjdHVhbGl6YWNpw7NuIG9wY2lvbmFsLlxuICAgKiBObyB0aWVuZSBlZmVjdG8gc29icmUgZWwgZXN0YWRvIGB1cGRhdGUtcmVxdWlyZWRgIChoYXJkIGdhdGUpLlxuICAgKi9cbiAgZGlzbWlzcygpOiB2b2lkIHtcbiAgICB0aGlzLl9kaXNtaXNzZWQuc2V0KHRydWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZ1ZXJ6YSB1biBjaGVxdWVvOiBTVyArIHBsdWdpbiBIVFRQIChzaSBleGlzdGUpLlxuICAgKi9cbiAgYXN5bmMgY2hlY2tOb3coKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgdGhpcy5zd1VwZGF0ZT8uaXNFbmFibGVkXG4gICAgICAgID8gdGhpcy5zd1VwZGF0ZS5jaGVja0ZvclVwZGF0ZSgpLmNhdGNoKGVyciA9PlxuICAgICAgICAgICAgY29uc29sZS53YXJuKCdbQXBwVmVyc2lvblNlcnZpY2VdIGNoZWNrRm9yVXBkYXRlIGZhaWxlZDonLCBlcnIpXG4gICAgICAgICAgKVxuICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgIHRoaXMucmVtb3RlUGx1Z2luID8gdGhpcy5sb2FkUmVtb3RlQ29uZmlnKCkgOiB1bmRlZmluZWQsXG4gICAgXSk7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gUFJJVkFET1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAvKipcbiAgICogU3VzY3JpYmUgYHZlcnNpb25VcGRhdGVzYCwgcHJvZ3JhbWEgY2hlcXVlb3MgcGVyacOzZGljb3MgeSByZWFjY2lvbmEgYWxcbiAgICogdm9sdmVyIGxhIGFwcCBhIGZvcmVncm91bmQuIFNvbG8gYWN0w7phIHNpIGVsIFNXIGVzdMOhIGhhYmlsaXRhZG8uXG4gICAqL1xuICBwcml2YXRlIHdpcmVTZXJ2aWNlV29ya2VyKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5zd1VwZGF0ZT8uaXNFbmFibGVkKSByZXR1cm47XG5cbiAgICAvLyBCdW5kbGUgbnVldm8gZGVzY2FyZ2FkbyB5IGxpc3RvLlxuICAgIHRoaXMuc3dVcGRhdGUudmVyc2lvblVwZGF0ZXNcbiAgICAgIC5waXBlKFxuICAgICAgICBmaWx0ZXIoZXZ0ID0+IGV2dC50eXBlID09PSAnVkVSU0lPTl9SRUFEWScpLFxuICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLnN3VXBkYXRlUmVhZHkuc2V0KHRydWUpKTtcblxuICAgIC8vIFNXIGVuIGVzdGFkbyBpcnJlY3VwZXJhYmxlIOKAlCBsYSBjYWNow6kgZGVsIHNlcnZpY2Ugd29ya2VyIHNlIGNvcnJvbXBpw7Mgb1xuICAgIC8vIGZ1ZSBwYXJjaWFsbWVudGUgZXZpY3RhZGEgKGNvbcO6biBlbiBQV0FzIHN0YW5kYWxvbmUgZGUgaU9TIHRyYXMgZGVwbG95c1xuICAgIC8vIHJlcGV0aWRvcykuIExhIGFwcCBubyBwdWVkZSBjYXJnYXIgc3VzIGFzc2V0cyDihpIgcGFudGFsbGEgZW4gYmxhbmNvLlxuICAgIC8vIFJlY3VwZXJhY2nDs24gcmVjb21lbmRhZGEgcG9yIEFuZ3VsYXI6IHJlY2FyZ2FyIHBhcmEgdHJhZXIgdG9kbyBmcmVzY29cbiAgICAvLyBkZXNkZSBsYSByZWQuXG4gICAgdGhpcy5zd1VwZGF0ZS51bnJlY292ZXJhYmxlLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpLnN1YnNjcmliZShldmVudCA9PiB7XG4gICAgICBjb25zb2xlLmVycm9yKCdbQXBwVmVyc2lvblNlcnZpY2VdIFNXIHVucmVjb3ZlcmFibGUg4oCUIHJlbG9hZGluZzonLCBldmVudC5yZWFzb24pO1xuICAgICAgdGhpcy5kb2N1bWVudC5kZWZhdWx0Vmlldz8ubG9jYXRpb24ucmVsb2FkKCk7XG4gICAgfSk7XG5cbiAgICBjb25zdCBpbnRlcnZhbE1zID1cbiAgICAgIHRoaXMuc2VydmljZUNvbmZpZz8uY2hlY2tJbnRlcnZhbE1zID8/IERFRkFVTFRfQVBQX1ZFUlNJT05fU0VSVklDRV9DT05GSUcuY2hlY2tJbnRlcnZhbE1zO1xuXG4gICAgaW50ZXJ2YWwoaW50ZXJ2YWxNcylcbiAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB2b2lkIHRoaXMuY2hlY2tOb3coKSk7XG5cbiAgICBjb25zdCBvblZpc2libGUgPSAoKTogdm9pZCA9PiB7XG4gICAgICBpZiAodGhpcy5kb2N1bWVudC52aXNpYmlsaXR5U3RhdGUgPT09ICd2aXNpYmxlJykgdm9pZCB0aGlzLmNoZWNrTm93KCk7XG4gICAgfTtcbiAgICB0aGlzLmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3Zpc2liaWxpdHljaGFuZ2UnLCBvblZpc2libGUpO1xuICAgIHRoaXMuZGVzdHJveVJlZi5vbkRlc3Ryb3koKCkgPT4gdGhpcy5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCd2aXNpYmlsaXR5Y2hhbmdlJywgb25WaXNpYmxlKSk7XG5cbiAgICB2b2lkIHRoaXMuY2hlY2tOb3coKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYXJnYSBjb25maWcgcmVtb3RhIHZpYSBwbHVnaW4gSFRUUCBhbCBpbmljaW8sIGVuIGZvcmVncm91bmQgeSBlbiBlbCBpbnRlcnZhbG8gcGVyacOzZGljby5cbiAgICogU29sbyBzZSBsbGFtYSBzaSBgcmVtb3RlUGx1Z2luYCBlc3TDoSBwcm92aXN0by5cbiAgICovXG4gIHByaXZhdGUgd2lyZVJlbW90ZVBsdWdpbigpOiB2b2lkIHtcbiAgICB2b2lkIHRoaXMubG9hZFJlbW90ZUNvbmZpZygpO1xuXG4gICAgY29uc3QgaW50ZXJ2YWxNcyA9XG4gICAgICB0aGlzLnNlcnZpY2VDb25maWc/LmNoZWNrSW50ZXJ2YWxNcyA/PyBERUZBVUxUX0FQUF9WRVJTSU9OX1NFUlZJQ0VfQ09ORklHLmNoZWNrSW50ZXJ2YWxNcztcblxuICAgIGludGVydmFsKGludGVydmFsTXMpXG4gICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSlcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdm9pZCB0aGlzLmxvYWRSZW1vdGVDb25maWcoKSk7XG5cbiAgICBjb25zdCBvblZpc2libGUgPSAoKTogdm9pZCA9PiB7XG4gICAgICBpZiAodGhpcy5kb2N1bWVudC52aXNpYmlsaXR5U3RhdGUgPT09ICd2aXNpYmxlJykgdm9pZCB0aGlzLmxvYWRSZW1vdGVDb25maWcoKTtcbiAgICB9O1xuICAgIHRoaXMuZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndmlzaWJpbGl0eWNoYW5nZScsIG9uVmlzaWJsZSk7XG4gICAgdGhpcy5kZXN0cm95UmVmLm9uRGVzdHJveSgoKSA9PiB0aGlzLmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Zpc2liaWxpdHljaGFuZ2UnLCBvblZpc2libGUpKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgbG9hZFJlbW90ZUNvbmZpZygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgY29uZmlnID0gYXdhaXQgdGhpcy5yZW1vdGVQbHVnaW4hLmdldFJlbW90ZUNvbmZpZygpO1xuICAgICAgdGhpcy5yZW1vdGVDb25maWcuc2V0KGNvbmZpZyk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1tBcHBWZXJzaW9uU2VydmljZV0gcmVtb3RlIGNvbmZpZyBmZXRjaCBmYWlsZWQ6JywgZXJyKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
278
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLXZlcnNpb24uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvc2VydmljZXMvYXBwLXZlcnNpb24vYXBwLXZlcnNpb24uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F1Qkc7QUFFSCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQVUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ25ELE9BQU8sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRXhDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3BFLE9BQU8sRUFDTCwyQkFBMkIsRUFDM0IseUJBQXlCLEVBQ3pCLG1CQUFtQixHQUNwQixNQUFNLFVBQVUsQ0FBQztBQUNsQixPQUFPLEVBS0wsa0NBQWtDLEdBQ25DLE1BQU0sU0FBUyxDQUFDOztBQUVqQjs7Ozs7R0FLRztBQUNILE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxDQUFDO0FBRWpDOzs7R0FHRztBQUNILFNBQVMsY0FBYyxDQUFDLENBQVMsRUFBRSxDQUFTO0lBQzFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ2pELE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMs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QztRQUN2RSxDQUFDO0lBQ0gsQ0FBQzsrR0F4UFUsaUJBQWlCO21IQUFqQixpQkFBaUIsY0FESixNQUFNOzs0RkFDbkIsaUJBQWlCO2tCQUQ3QixVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQXBwVmVyc2lvblNlcnZpY2VcbiAqXG4gKiBWZXJpZmljYWNpw7NuIGRlIHZlcnNpw7NuIGRlIGxhIGFwcCBwYXJhIFBXQSAvIHdlYiAvIENhcGFjaXRvci5cbiAqXG4gKiBVbmlmaWNhIHRyZXMgc2XDsWFsZXMgcGFyYSBkZXRlY3RhciBhY3R1YWxpemFjaW9uZXM6XG4gKlxuICogMS4gYFN3VXBkYXRlYCAoYEBhbmd1bGFyL3NlcnZpY2Utd29ya2VyYCkg4oCUIGVsIGV2ZW50byBgVkVSU0lPTl9SRUFEWWAgaW5kaWNhXG4gKiAgICBxdWUgdW4gYnVuZGxlIG51ZXZvIGZ1ZSBkZXNjYXJnYWRvIHkgZXN0w6EgbGlzdG8gcGFyYSBhY3RpdmFyc2UuIFNvbG8gZXN0w6FcbiAqICAgIGRpc3BvbmlibGUgY3VhbmRvIGVsIHNlcnZpY2Ugd29ya2VyIGVzdMOhIHJlZ2lzdHJhZG8gKGJ1aWxkIGRlIHByb2R1Y2Npw7NuKS5cbiAqICAgIEFkZW3DoXMgc2UgY2hlcXVlYSBwcm9hY3RpdmFtZW50ZSBjYWRhIGBjaGVja0ludGVydmFsTXNgIHkgY2FkYSB2ZXogcXVlIGxhXG4gKiAgICBhcHAgdnVlbHZlIGEgZm9yZWdyb3VuZCAoYHZpc2liaWxpdHljaGFuZ2VgKS5cbiAqXG4gKiAyLiBgQXBwQ29uZmlnU2VydmljZWAgKGNvbmZpZyByZW1vdG8gZW4gRmlyZXN0b3JlKSDigJQgZXhwb25lIGB2ZXJzaW9uYFxuICogICAgKMO6bHRpbWEgdmVyc2nDs24gcHVibGljYWRhKSB5IGBtaW5WZXJzaW9uYCAodmVyc2nDs24gbcOtbmltYSBzb3BvcnRhZGEpLlxuICogICAgU2UgdXNhIHBhcmEgbGEgcG9sw610aWNhIGRlIGFjdHVhbGl6YWNpw7NuIG9ibGlnYXRvcmlhIChoYXJkIGdhdGUpLlxuICpcbiAqIDMuIGBBcHBWZXJzaW9uUmVtb3RlUGx1Z2luYCAoSFRUUCkg4oCUIGFsdGVybmF0aXZhIGEgQXBwQ29uZmlnU2VydmljZSBwYXJhIGFwcHNcbiAqICAgIHNpbiBGaXJlYmFzZS4gUHJvdmlzdG8gdmlhIGBwcm92aWRlVmFsdGVjaEFwcFZlcnNpb25IdHRwYC4gRXhwb25lIGVsIG1pc21vXG4gKiAgICBjb250cmF0byAoYHZlcnNpb25gIC8gYG1pblZlcnNpb25gKS4gU2UgY2hlcXVlYSBlbiBsb3MgbWlzbW9zIGludGVydmFsb3NcbiAqICAgIHF1ZSBlbCBTVy5cbiAqXG4gKiBMYXMgdHJlcyBkZXBlbmRlbmNpYXMgc2UgaW55ZWN0YW4gY29tbyBvcGNpb25hbGVzLlxuICovXG5cbmltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IERlc3Ryb3lSZWYsIEluamVjdGFibGUsIFNpZ25hbCwgY29tcHV0ZWQsIGluamVjdCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBTd1VwZGF0ZSB9IGZyb20gJ0Bhbmd1bGFyL3NlcnZpY2Utd29ya2VyJztcbmltcG9ydCB7IGZpbHRlciwgaW50ZXJ2YWwgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgQXBwQ29uZmlnU2VydmljZSB9IGZyb20gJy4uL2FwcC1jb25maWcvYXBwLWNvbmZpZy5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIEFQUF9WRVJTSU9OX1BMQVRGT1JNX1BMVUdJTixcbiAgQVBQX1ZFUlNJT05fUkVNT1RFX1BMVUdJTixcbiAgVkFMVEVDSF9BUFBfVkVSU0lPTixcbn0gZnJvbSAnLi9jb25maWcnO1xuaW1wb3J0IHtcbiAgQXBwVmVyc2lvblBsYXRmb3JtUGx1Z2luLFxuICBBcHBWZXJzaW9uUmVtb3RlQ29uZmlnLFxuICBBcHBWZXJzaW9uUmVtb3RlUGx1Z2luLFxuICBBcHBWZXJzaW9uU3RhdHVzLFxuICBERUZBVUxUX0FQUF9WRVJTSU9OX1NFUlZJQ0VfQ09ORklHLFxufSBmcm9tICcuL3R5cGVzJztcblxuLyoqXG4gKiBNw6F4aW1vIHF1ZSBgYXBwbHlVcGRhdGVgIGVzcGVyYSBwb3IgZWwgYFZFUlNJT05fUkVBRFlgIGRlbCBTVyBhbnRlcyBkZSByZWNhcmdhclxuICogaWd1YWwuIEN1YnJlIGVsIGNhc28gZW4gcXVlIGVsIHVwZGF0ZSBsbyBkZXRlY3TDsyBlbCBwYXRoIEhUVFAgYW50ZXMgZGUgcXVlIGVsXG4gKiBTVyBkZXNjYXJnYXJhIGVsIGJ1bmRsZSBudWV2byAoZXZpdGEgZWwgbG9vcCBkZSBiYW5uZXIpLiBTaSBlbCBTVyBudW5jYSBxdWVkYVxuICogbGlzdG8gKEFuZHJvaWQgQ2hyb21lKSwgcmVjYXJnYSBjb21vIMO6bHRpbW8gcmVjdXJzbyBhbCB2ZW5jZXIuXG4gKi9cbmNvbnN0IFNXX1JFQURZX1RJTUVPVVRfTVMgPSA4MDAwO1xuXG4vKipcbiAqIENvbXBhcmEgZG9zIHZlcnNpb25lcyBzZW12ZXIuIFJldG9ybmEgdHJ1ZSBzaSBgYWAgZXMgZXN0cmljdGFtZW50ZSBtZW5vclxuICogcXVlIGBiYC4gVG9sZXJhbnRlIGEgbG9uZ2l0dWRlcyBkaXN0aW50YXMgeSBhIHBhcnRlcyBubyBudW3DqXJpY2FzLlxuICovXG5mdW5jdGlvbiBpc1ZlcnNpb25Mb3dlcihhOiBzdHJpbmcsIGI6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBjb25zdCBwYSA9IGEuc3BsaXQoJy4nKS5tYXAobiA9PiBOdW1iZXIobikgfHwgMCk7XG4gIGNvbnN0IHBiID0gYi5zcGxpdCgnLicpLm1hcChuID0+IE51bWJlcihuKSB8fCAwKTtcbiAgY29uc3QgbGVuID0gTWF0aC5tYXgocGEubGVuZ3RoLCBwYi5sZW5ndGgpO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICBjb25zdCB4ID0gcGFbaV0gfHwgMDtcbiAgICBjb25zdCB5ID0gcGJbaV0gfHwgMDtcbiAgICBpZiAoeCA8IHkpIHJldHVybiB0cnVlO1xuICAgIGlmICh4ID4geSkgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIEFwcFZlcnNpb25TZXJ2aWNlIHtcbiAgLyoqIFN3VXBkYXRlIHNvbG8gZXhpc3RlIHNpIGVsIFNXIGVzdMOhIHJlZ2lzdHJhZG8gKHByb2QgYnVpbGQpLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IHN3VXBkYXRlID0gaW5qZWN0KFN3VXBkYXRlLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuICAvKiogQXBwQ29uZmlnU2VydmljZSBlcyBvcGNpb25hbDogbGEgYXBwIHB1ZWRlIG5vIHdpcmVhcmxvLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IGFwcENvbmZpZyA9IGluamVjdChBcHBDb25maWdTZXJ2aWNlLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuICBwcml2YXRlIHJlYWRvbmx5IHNlcnZpY2VDb25maWcgPSBpbmplY3QoVkFMVEVDSF9BUFBfVkVSU0lPTiwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcbiAgLyoqIFBsdWdpbiBuYXRpdm8gb3BjaW9uYWw6IHByb3Zpc3RvIHBvciBhcHBzIENhcGFjaXRvciBwYXJhIFBsYXkgU3RvcmUgLyBBcHAgU3RvcmUuICovXG4gIHByaXZhdGUgcmVhZG9ubHkgcGxhdGZvcm1QbHVnaW4gPSBpbmplY3Q8QXBwVmVyc2lvblBsYXRmb3JtUGx1Z2luPihBUFBfVkVSU0lPTl9QTEFURk9STV9QTFVHSU4sIHtcbiAgICBvcHRpb25hbDogdHJ1ZSxcbiAgfSk7XG4gIC8qKiBQbHVnaW4gSFRUUCBvcGNpb25hbDogYWx0ZXJuYXRpdmEgYSBBcHBDb25maWdTZXJ2aWNlIHBhcmEgYXBwcyBzaW4gRmlyZWJhc2UuICovXG4gIHByaXZhdGUgcmVhZG9ubHkgcmVtb3RlUGx1Z2luID0gaW5qZWN0PEFwcFZlcnNpb25SZW1vdGVQbHVnaW4+KEFQUF9WRVJTSU9OX1JFTU9URV9QTFVHSU4sIHtcbiAgICBvcHRpb25hbDogdHJ1ZSxcbiAgfSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgZG9jdW1lbnQgPSBpbmplY3QoRE9DVU1FTlQpO1xuICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG5cbiAgLyoqIFRydWUgY3VhbmRvIGVsIFNXIHJlcG9ydMOzIHVuIGJ1bmRsZSBudWV2byBsaXN0byAoYFZFUlNJT05fUkVBRFlgKS4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSBzd1VwZGF0ZVJlYWR5ID0gc2lnbmFsKGZhbHNlKTtcblxuICAvKiogQ29uZmlnIHJlbW90YSBjYXJnYWRhIHBvciBlbCBwbHVnaW4gSFRUUC4gTnVsbCBoYXN0YSBxdWUgY2FyZ2EgbyBzaSBubyBoYXkgcGx1Z2luLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IHJlbW90ZUNvbmZpZyA9IHNpZ25hbDxBcHBWZXJzaW9uUmVtb3RlQ29uZmlnIHwgbnVsbD4obnVsbCk7XG5cbiAgLyoqXG4gICAqIFRydWUgY3VhbmRvIGVsIHVzdWFyaW8gZGVzY2FydMOzIGVsIGJhbm5lciBkZSBhY3R1YWxpemFjacOzbiBvcGNpb25hbC5cbiAgICogRWwgYmFubmVyIG9ibGlnYXRvcmlvIChgdXBkYXRlLXJlcXVpcmVkYCkgaWdub3JhIGVzdGUgZmxhZy5cbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgX2Rpc21pc3NlZCA9IHNpZ25hbChmYWxzZSk7XG4gIHJlYWRvbmx5IGRpc21pc3NlZDogU2lnbmFsPGJvb2xlYW4+ID0gdGhpcy5fZGlzbWlzc2VkLmFzUmVhZG9ubHkoKTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gU0lHTkFMUyBQw5pCTElDT1NcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIFZlcnNpw7NuIGxvY2FsIGRlbCBidWlsZCBhY3R1YWwgZGUgbGEgYXBwLlxuICAgKiBQcm92aWVuZSBkZWwgcHJvdmlkZXIgYHByb3ZpZGVWYWx0ZWNoQXBwVmVyc2lvbih7IGN1cnJlbnRWZXJzaW9uIH0pYC5cbiAgICovXG4gIHJlYWRvbmx5IGN1cnJlbnRWZXJzaW9uOiBTaWduYWw8c3RyaW5nPiA9IGNvbXB1dGVkKFxuICAgICgpID0+IHRoaXMuc2VydmljZUNvbmZpZz8uY3VycmVudFZlcnNpb24gPz8gJzAuMC4wJ1xuICApO1xuXG4gIC8qKlxuICAgKiDDmmx0aW1hIHZlcnNpw7NuIHB1YmxpY2FkYSBzZWfDum4gZWwgY29uZmlnIHJlbW90byAoQXBwQ29uZmlnU2VydmljZSBvIHBsdWdpbiBIVFRQKS5cbiAgICogYG51bGxgIHNpIG5pbmd1bmEgZnVlbnRlIGVzdMOhIGRpc3BvbmlibGUgbyBhw7puIG5vIGNhcmfDsy5cbiAgICovXG4gIHJlYWRvbmx5IGxhdGVzdFZlcnNpb246IFNpZ25hbDxzdHJpbmcgfCBudWxsPiA9IGNvbXB1dGVkKFxuICAgICgpID0+IHRoaXMuYXBwQ29uZmlnPy5yZW1vdGVWZXJzaW9uKCkgPz8gdGhpcy5yZW1vdGVDb25maWcoKT8udmVyc2lvbiA/PyBudWxsXG4gICk7XG5cbiAgLyoqXG4gICAqIEVzdGFkbyBkZSBsYSB2ZXJzacOzbjpcbiAgICogLSBgdXBkYXRlLXJlcXVpcmVkYCDigJQgbGEgdmVyc2nDs24gbG9jYWwgcXVlZMOzIHBvciBkZWJham8gZGUgYG1pblZlcnNpb25gLiBIYXJkIGdhdGUuXG4gICAqIC0gYHVwZGF0ZS1hdmFpbGFibGVgIOKAlCBTVyBidW5kbGUgbGlzdG8sIEFwcENvbmZpZ1NlcnZpY2UgbyBwbHVnaW4gSFRUUCBkZXRlY3Rhcm9uIHZlcnNpw7NuIG51ZXZhLlxuICAgKiAtIGB1cC10by1kYXRlYCDigJQgZW4gY3VhbHF1aWVyIG90cm8gY2Fzby5cbiAgICovXG4gIHJlYWRvbmx5IHN0YXR1czogU2lnbmFsPEFwcFZlcnNpb25TdGF0dXM+ID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIC8vIDEuIEhhcmQgZ2F0ZSDigJQgbWluVmVyc2lvbiBkZSBBcHBDb25maWdTZXJ2aWNlIG8gZGVsIHBsdWdpbiBIVFRQLlxuICAgIGNvbnN0IG1pblZlcnNpb24gPSB0aGlzLmFwcENvbmZpZz8uYXBwQ29uZmlnKCk/Lm1pblZlcnNpb24gPz8gdGhpcy5yZW1vdGVDb25maWcoKT8ubWluVmVyc2lvbjtcbiAgICBpZiAobWluVmVyc2lvbiAmJiBpc1ZlcnNpb25Mb3dlcih0aGlzLmN1cnJlbnRWZXJzaW9uKCksIG1pblZlcnNpb24pKSB7XG4gICAgICByZXR1cm4gJ3VwZGF0ZS1yZXF1aXJlZCc7XG4gICAgfVxuXG4gICAgLy8gMi4gVXBkYXRlIG9wY2lvbmFsIOKAlCBTVyBidW5kbGUgbGlzdG8sIEFwcENvbmZpZywgbyBwbHVnaW4gSFRUUCBtw6FzIG51ZXZvLlxuICAgIGNvbnN0IHJlbW90ZUxhdGVzdCA9IHRoaXMucmVtb3RlQ29uZmlnKCk/LnZlcnNpb247XG4gICAgY29uc3QgaGFzUmVtb3RlVXBkYXRlID0gcmVtb3RlTGF0ZXN0XG4gICAgICA/IGlzVmVyc2lvbkxvd2VyKHRoaXMuY3VycmVudFZlcnNpb24oKSwgcmVtb3RlTGF0ZXN0KVxuICAgICAgOiBmYWxzZTtcblxuICAgIGlmICh0aGlzLnN3VXBkYXRlUmVhZHkoKSB8fCB0aGlzLmFwcENvbmZpZz8uaGFzVXBkYXRlKCkgfHwgaGFzUmVtb3RlVXBkYXRlKSB7XG4gICAgICByZXR1cm4gJ3VwZGF0ZS1hdmFpbGFibGUnO1xuICAgIH1cblxuICAgIHJldHVybiAndXAtdG8tZGF0ZSc7XG4gIH0pO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMud2lyZVNlcnZpY2VXb3JrZXIoKTtcbiAgICBpZiAodGhpcy5yZW1vdGVQbHVnaW4pIHtcbiAgICAgIHRoaXMud2lyZVJlbW90ZVBsdWdpbigpO1xuICAgIH1cbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBNw4lUT0RPUyBQw5pCTElDT1NcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIEFwbGljYSBsYSBhY3R1YWxpemFjacOzbiBwZW5kaWVudGUuXG4gICAqXG4gICAqIFNpIGhheSB1biBwbHVnaW4gZGUgcGxhdGFmb3JtYSAobmF0aXZvL0NhcGFjaXRvciksIGRlbGVnYSBlbiDDqWwgKGVqLiBQbGF5IFN0b3JlKS5cbiAgICogU2kgbm8sIGFjdGl2YSBsYSB2ZXJzacOzbiBTVyBzaSBlc3TDoSBkaXNwb25pYmxlIHkgcmVjYXJnYSBsYSBww6FnaW5hLlxuICAgKi9cbiAgYXN5bmMgYXBwbHlVcGRhdGUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMucGxhdGZvcm1QbHVnaW4pIHtcbiAgICAgIGF3YWl0IHRoaXMucGxhdGZvcm1QbHVnaW4uYXBwbHlVcGRhdGUoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgaWYgKHRoaXMuc3dVcGRhdGU/LmlzRW5hYmxlZCkge1xuICAgICAgICAvLyBTaSBsYSBhY3R1YWxpemFjacOzbiBzZSBkZXRlY3TDsyBwb3IgZWwgcGF0aCBIVFRQICgvdmVyc2lvbi5qc29uKSBBTlRFU1xuICAgICAgICAvLyBkZSBxdWUgZWwgU1cgZGVzY2FyZ3VlIGVsIGJ1bmRsZSBudWV2bywgYHN3VXBkYXRlUmVhZHlgIGHDum4gZXMgZmFsc2U6XG4gICAgICAgIC8vIHJlY2FyZ2FyIGFob3JhIHZvbHZlcsOtYSBhIGNhcmdhciBlbCBNSVNNTyBidW5kbGUgdmllam8geSBlbCBiYW5uZXJcbiAgICAgICAgLy8gcmVhcGFyZWNlcsOtYSAobG9vcCBkZSBcImFjdHVhbGl6YXIgTiB2ZWNlc1wiKS4gUGVkaW1vcyBhbCBTVyBxdWUgY2hlcXVlZVxuICAgICAgICAvLyB5IGVzcGVyYW1vcyBhIHF1ZSBlbCBidW5kbGUgcXVlZGUgbGlzdG8gKGNvbiB0aW1lb3V0KSBwYXJhIHF1ZSBlbFxuICAgICAgICAvLyByZWxvYWQgcmVhbG1lbnRlIGNhbWJpZSBkZSB2ZXJzacOzbi5cbiAgICAgICAgaWYgKCF0aGlzLnN3VXBkYXRlUmVhZHkoKSkge1xuICAgICAgICAgIGF3YWl0IHRoaXMuc3dVcGRhdGUuY2hlY2tGb3JVcGRhdGUoKS5jYXRjaCgoKSA9PiB1bmRlZmluZWQpO1xuICAgICAgICAgIGlmICghdGhpcy5zd1VwZGF0ZVJlYWR5KCkpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMud2FpdEZvclN3UmVhZHkoU1dfUkVBRFlfVElNRU9VVF9NUyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnN3VXBkYXRlUmVhZHkoKSkge1xuICAgICAgICAgIGF3YWl0IHRoaXMuc3dVcGRhdGUuYWN0aXZhdGVVcGRhdGUoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc29sZS53YXJuKCdbQXBwVmVyc2lvblNlcnZpY2VdIGFjdGl2YXRlVXBkYXRlIGZhaWxlZDonLCBlcnIpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLmRvY3VtZW50LmRlZmF1bHRWaWV3Py5sb2NhdGlvbi5yZWxvYWQoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRXNwZXJhIGEgcXVlIGVsIFNXIHJlcG9ydGUgdW4gYnVuZGxlIG51ZXZvIGxpc3RvIChgVkVSU0lPTl9SRUFEWWApLCBvIGhhc3RhXG4gICAqIGB0aW1lb3V0TXNgLiBFdml0YSBlbCByZWxvYWQgXCJlbiBzZWNvXCIgY3VhbmRvIGVsIHVwZGF0ZSBsbyBkZXRlY3TDsyBlbCBwYXRoXG4gICAqIEhUVFAgYW50ZXMgZGUgcXVlIGVsIFNXIGRlc2NhcmdhcmEgZWwgYnVuZGxlLiBTaSBlbCB0aW1lb3V0IHZlbmNlIChlai5cbiAgICogQW5kcm9pZCBDaHJvbWUgZG9uZGUgVkVSU0lPTl9SRUFEWSBlcyBwb2NvIGNvbmZpYWJsZSksIHJlc3VlbHZlIGlndWFsIHkgZWxcbiAgICogY2FsbGVyIHJlY2FyZ2EgY29tbyDDumx0aW1vIHJlY3Vyc28uXG4gICAqL1xuICBwcml2YXRlIHdhaXRGb3JTd1JlYWR5KHRpbWVvdXRNczogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuc3dVcGRhdGVSZWFkeSgpIHx8ICF0aGlzLnN3VXBkYXRlPy5pc0VuYWJsZWQpIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4ocmVzb2x2ZSA9PiB7XG4gICAgICBsZXQgc2V0dGxlZCA9IGZhbHNlO1xuICAgICAgY29uc3QgZmluaXNoID0gKCkgPT4ge1xuICAgICAgICBpZiAoc2V0dGxlZCkgcmV0dXJuO1xuICAgICAgICBzZXR0bGVkID0gdHJ1ZTtcbiAgICAgICAgc3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgIH07XG4gICAgICBjb25zdCBzdWIgPSB0aGlzLnN3VXBkYXRlIS52ZXJzaW9uVXBkYXRlcy5waXBlKFxuICAgICAgICBmaWx0ZXIoZXZ0ID0+IGV2dC50eXBlID09PSAnVkVSU0lPTl9SRUFEWScpXG4gICAgICApLnN1YnNjcmliZSgoKSA9PiBmaW5pc2goKSk7XG4gICAgICBjb25zdCB0aW1lciA9IHNldFRpbWVvdXQoZmluaXNoLCB0aW1lb3V0TXMpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIERlc2NhcnRhIGVsIGJhbm5lciBkZSBhY3R1YWxpemFjacOzbiBvcGNpb25hbC5cbiAgICogTm8gdGllbmUgZWZlY3RvIHNvYnJlIGVsIGVzdGFkbyBgdXBkYXRlLXJlcXVpcmVkYCAoaGFyZCBnYXRlKS5cbiAgICovXG4gIGRpc21pc3MoKTogdm9pZCB7XG4gICAgdGhpcy5fZGlzbWlzc2VkLnNldCh0cnVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGdWVyemEgdW4gY2hlcXVlbzogU1cgKyBwbHVnaW4gSFRUUCAoc2kgZXhpc3RlKS5cbiAgICovXG4gIGFzeW5jIGNoZWNrTm93KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgIHRoaXMuc3dVcGRhdGU/LmlzRW5hYmxlZFxuICAgICAgICA/IHRoaXMuc3dVcGRhdGVcbiAgICAgICAgICAgIC5jaGVja0ZvclVwZGF0ZSgpXG4gICAgICAgICAgICAuY2F0Y2goZXJyID0+IGNvbnNvbGUud2FybignW0FwcFZlcnNpb25TZXJ2aWNlXSBjaGVja0ZvclVwZGF0ZSBmYWlsZWQ6JywgZXJyKSlcbiAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICB0aGlzLnJlbW90ZVBsdWdpbiA/IHRoaXMubG9hZFJlbW90ZUNvbmZpZygpIDogdW5kZWZpbmVkLFxuICAgIF0pO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFBSSVZBRE9cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIFN1c2NyaWJlIGB2ZXJzaW9uVXBkYXRlc2AsIHByb2dyYW1hIGNoZXF1ZW9zIHBlcmnDs2RpY29zIHkgcmVhY2Npb25hIGFsXG4gICAqIHZvbHZlciBsYSBhcHAgYSBmb3JlZ3JvdW5kLiBTb2xvIGFjdMO6YSBzaSBlbCBTVyBlc3TDoSBoYWJpbGl0YWRvLlxuICAgKi9cbiAgcHJpdmF0ZSB3aXJlU2VydmljZVdvcmtlcigpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuc3dVcGRhdGU/LmlzRW5hYmxlZCkgcmV0dXJuO1xuXG4gICAgLy8gQnVuZGxlIG51ZXZvIGRlc2NhcmdhZG8geSBsaXN0by5cbiAgICB0aGlzLnN3VXBkYXRlLnZlcnNpb25VcGRhdGVzXG4gICAgICAucGlwZShcbiAgICAgICAgZmlsdGVyKGV2dCA9PiBldnQudHlwZSA9PT0gJ1ZFUlNJT05fUkVBRFknKSxcbiAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZilcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5zd1VwZGF0ZVJlYWR5LnNldCh0cnVlKSk7XG5cbiAgICAvLyBTVyBlbiBlc3RhZG8gaXJyZWN1cGVyYWJsZSDigJQgbGEgY2FjaMOpIGRlbCBzZXJ2aWNlIHdvcmtlciBzZSBjb3Jyb21wacOzIG9cbiAgICAvLyBmdWUgcGFyY2lhbG1lbnRlIGV2aWN0YWRhIChjb23Dum4gZW4gUFdBcyBzdGFuZGFsb25lIGRlIGlPUyB0cmFzIGRlcGxveXNcbiAgICAvLyByZXBldGlkb3MpLiBMYSBhcHAgbm8gcHVlZGUgY2FyZ2FyIHN1cyBhc3NldHMg4oaSIHBhbnRhbGxhIGVuIGJsYW5jby5cbiAgICAvLyBSZWN1cGVyYWNpw7NuIHJlY29tZW5kYWRhIHBvciBBbmd1bGFyOiByZWNhcmdhciBwYXJhIHRyYWVyIHRvZG8gZnJlc2NvXG4gICAgLy8gZGVzZGUgbGEgcmVkLlxuICAgIHRoaXMuc3dVcGRhdGUudW5yZWNvdmVyYWJsZS5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKS5zdWJzY3JpYmUoZXZlbnQgPT4ge1xuICAgICAgY29uc29sZS5lcnJvcignW0FwcFZlcnNpb25TZXJ2aWNlXSBTVyB1bnJlY292ZXJhYmxlIOKAlCByZWxvYWRpbmc6JywgZXZlbnQucmVhc29uKTtcbiAgICAgIHRoaXMuZG9jdW1lbnQuZGVmYXVsdFZpZXc/LmxvY2F0aW9uLnJlbG9hZCgpO1xuICAgIH0pO1xuXG4gICAgY29uc3QgaW50ZXJ2YWxNcyA9XG4gICAgICB0aGlzLnNlcnZpY2VDb25maWc/LmNoZWNrSW50ZXJ2YWxNcyA/PyBERUZBVUxUX0FQUF9WRVJTSU9OX1NFUlZJQ0VfQ09ORklHLmNoZWNrSW50ZXJ2YWxNcztcblxuICAgIGludGVydmFsKGludGVydmFsTXMpXG4gICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSlcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdm9pZCB0aGlzLmNoZWNrTm93KCkpO1xuXG4gICAgY29uc3Qgb25WaXNpYmxlID0gKCk6IHZvaWQgPT4ge1xuICAgICAgaWYgKHRoaXMuZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlID09PSAndmlzaWJsZScpIHZvaWQgdGhpcy5jaGVja05vdygpO1xuICAgIH07XG4gICAgdGhpcy5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCd2aXNpYmlsaXR5Y2hhbmdlJywgb25WaXNpYmxlKTtcbiAgICB0aGlzLmRlc3Ryb3lSZWYub25EZXN0cm95KCgpID0+XG4gICAgICB0aGlzLmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Zpc2liaWxpdHljaGFuZ2UnLCBvblZpc2libGUpXG4gICAgKTtcblxuICAgIHZvaWQgdGhpcy5jaGVja05vdygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhcmdhIGNvbmZpZyByZW1vdGEgdmlhIHBsdWdpbiBIVFRQIGFsIGluaWNpbywgZW4gZm9yZWdyb3VuZCB5IGVuIGVsIGludGVydmFsbyBwZXJpw7NkaWNvLlxuICAgKiBTb2xvIHNlIGxsYW1hIHNpIGByZW1vdGVQbHVnaW5gIGVzdMOhIHByb3Zpc3RvLlxuICAgKi9cbiAgcHJpdmF0ZSB3aXJlUmVtb3RlUGx1Z2luKCk6IHZvaWQge1xuICAgIHZvaWQgdGhpcy5sb2FkUmVtb3RlQ29uZmlnKCk7XG5cbiAgICBjb25zdCBpbnRlcnZhbE1zID1cbiAgICAgIHRoaXMuc2VydmljZUNvbmZpZz8uY2hlY2tJbnRlcnZhbE1zID8/IERFRkFVTFRfQVBQX1ZFUlNJT05fU0VSVklDRV9DT05GSUcuY2hlY2tJbnRlcnZhbE1zO1xuXG4gICAgaW50ZXJ2YWwoaW50ZXJ2YWxNcylcbiAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB2b2lkIHRoaXMubG9hZFJlbW90ZUNvbmZpZygpKTtcblxuICAgIGNvbnN0IG9uVmlzaWJsZSA9ICgpOiB2b2lkID0+IHtcbiAgICAgIGlmICh0aGlzLmRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZSA9PT0gJ3Zpc2libGUnKSB2b2lkIHRoaXMubG9hZFJlbW90ZUNvbmZpZygpO1xuICAgIH07XG4gICAgdGhpcy5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCd2aXNpYmlsaXR5Y2hhbmdlJywgb25WaXNpYmxlKTtcbiAgICB0aGlzLmRlc3Ryb3lSZWYub25EZXN0cm95KCgpID0+XG4gICAgICB0aGlzLmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Zpc2liaWxpdHljaGFuZ2UnLCBvblZpc2libGUpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgbG9hZFJlbW90ZUNvbmZpZygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgY29uZmlnID0gYXdhaXQgdGhpcy5yZW1vdGVQbHVnaW4hLmdldFJlbW90ZUNvbmZpZygpO1xuICAgICAgdGhpcy5yZW1vdGVDb25maWcuc2V0KGNvbmZpZyk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1tBcHBWZXJzaW9uU2VydmljZV0gcmVtb3RlIGNvbmZpZyBmZXRjaCBmYWlsZWQ6JywgZXJyKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|