@sumaris-net/ngx-components 18.6.21 → 18.6.23
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/doc/changelog.md +6 -0
- package/esm2022/src/app/core/services/platform.service.mjs +16 -2
- package/fesm2022/sumaris-net.ngx-components.mjs +14 -0
- package/fesm2022/sumaris-net.ngx-components.mjs.map +1 -1
- package/package.json +1 -1
- package/src/app/core/install/install-upgrade-card.component.d.ts +1 -1
- package/src/app/core/services/platform.service.d.ts +7 -1
- package/src/app/shared/inputs.d.ts +1 -1
- package/src/assets/manifest.json +1 -1
- package/src/theme/_ngx-components.tabs.scss +11 -0
package/doc/changelog.md
CHANGED
|
@@ -1151,3 +1151,9 @@ enh: Environment: add useHash property to configure Angular router to use hash U
|
|
|
1151
1151
|
|
|
1152
1152
|
# 18.6.19
|
|
1153
1153
|
- fix(autocomplete-field) Avoid too many blur events - see issue sumaris-app#837
|
|
1154
|
+
|
|
1155
|
+
# 18.6.22
|
|
1156
|
+
- enh(styles) Avoid use selection of tab labels
|
|
1157
|
+
|
|
1158
|
+
# 18.6.23
|
|
1159
|
+
- enh(platform) Add `markAsBusy()` and `markAsNotBusy()` to display a backdrop (e.g. from the app.component.ts)
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Inject, Injectable, Optional } from '@angular/core';
|
|
2
2
|
import { isNilOrBlank, isNotNil, isNotNilOrBlank, toBoolean } from '../../shared/functions';
|
|
3
3
|
import { Toasts } from '../../shared/toast/toasts';
|
|
4
|
-
import { from, of, timer } from 'rxjs';
|
|
4
|
+
import { BehaviorSubject, from, of, timer } from 'rxjs';
|
|
5
5
|
import { catchError, skip, tap } from 'rxjs/operators';
|
|
6
6
|
import { ENVIRONMENT } from '../../../environments/environment.class';
|
|
7
7
|
import { CORE_CONFIG_OPTIONS } from './config/core.config';
|
|
@@ -72,6 +72,7 @@ export class PlatformService extends StartableService {
|
|
|
72
72
|
_capacitor;
|
|
73
73
|
_android;
|
|
74
74
|
_ios;
|
|
75
|
+
busySubject = new BehaviorSubject(true);
|
|
75
76
|
constructor(ionicPlatform, cdkPlatform, cdkClipboard, toastController, translate, dateAdapter, entitiesStorage, settings, networkService, accountService, configService, cache, audioProvider, environment, loggingService, downloader) {
|
|
76
77
|
super(ionicPlatform);
|
|
77
78
|
this.ionicPlatform = ionicPlatform;
|
|
@@ -250,6 +251,19 @@ export class PlatformService extends StartableService {
|
|
|
250
251
|
return this.onStartupError(err);
|
|
251
252
|
}
|
|
252
253
|
}
|
|
254
|
+
/**
|
|
255
|
+
* Used to show a backdrop when platform is busy (e.g. from the app.component.ts)
|
|
256
|
+
*/
|
|
257
|
+
markAsBusy() {
|
|
258
|
+
if (!this.busySubject.value) {
|
|
259
|
+
this.busySubject.next(true);
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
markAsNotBusy() {
|
|
263
|
+
if (this.busySubject.value) {
|
|
264
|
+
this.busySubject.next(false);
|
|
265
|
+
}
|
|
266
|
+
}
|
|
253
267
|
async open(url, opts) {
|
|
254
268
|
console.info(`[platform] Opening link: ${url}`);
|
|
255
269
|
if (this._mobile && this._capacitor) {
|
|
@@ -594,4 +608,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
594
608
|
}] }, { type: i13.Downloader, decorators: [{
|
|
595
609
|
type: Optional
|
|
596
610
|
}] }] });
|
|
597
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxhdGZvcm0uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29yZS9zZXJ2aWNlcy9wbGF0Zm9ybS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQVU3RCxPQUFPLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxlQUFlLEVBQUUsU0FBUyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFNUYsT0FBTyxFQUFvQixNQUFNLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUdyRSxPQUFPLEVBQUUsSUFBSSxFQUFjLEVBQUUsRUFBZ0IsS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3ZELE9BQU8sRUFBZSxXQUFXLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUVuRixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUUzRCxPQUFPLEVBQStCLHNCQUFzQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbkcsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFDakYsT0FBTyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM3RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDN0QsT0FBTyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNyRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDdkQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFB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QUFNLElBQUksTUFBTSxFQUFFLENBQUM7WUFDbEIsSUFBSSxjQUFjLEVBQUUsQ0FBQztnQkFDbkIsT0FBTyxJQUFJLGdCQUFnQixjQUFjLElBQUksQ0FBQztZQUNoRCxDQUFDO1lBQ0QsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN4QixDQUFDO2FBQU0sQ0FBQztZQUNOLE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDdkIsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLE9BQU87Z0JBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzlELENBQUM7SUFDSCxDQUFDO3dHQXZsQlUsZUFBZSxtWkF1QmhCLFdBQVcsYUFDQyxtQkFBbUI7NEdBeEI5QixlQUFlLGNBREYsTUFBTTs7NEZBQ25CLGVBQWU7a0JBRDNCLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFOzswQkF3QjdCLE1BQU07MkJBQUMsV0FBVzs7MEJBQ2xCLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsbUJBQW1COzswQkFDdEMsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSwgT3B0aW9uYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFBsYXRmb3JtLCBUb2FzdENvbnRyb2xsZXIgfSBmcm9tICdAaW9uaWMvYW5ndWxhcic7XG5pbXBvcnQgeyBOZXR3b3JrU2VydmljZSB9IGZyb20gJy4vbmV0d29yay5zZXJ2aWNlJztcbmltcG9ydCB7IEF1dGhUb2tlblR5cGUgfSBmcm9tICcuL25ldHdvcmsudHlwZXMnO1xuaW1wb3J0IHsgUGxhdGZvcm1zIH0gZnJvbSAnQGlvbmljL2NvcmUnO1xuaW1wb3J0IHsgTG9jYWxTZXR0aW5nc1NlcnZpY2UgfSBmcm9tICcuL2xvY2FsLXNldHRpbmdzLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ2FjaGVTZXJ2aWNlIH0gZnJvbSAnaW9uaWMtY2FjaGUnO1xuaW1wb3J0IHsgQXVkaW9Qcm92aWRlciB9IGZyb20gJy4uLy4uL3NoYXJlZC9hdWRpby9hdWRpbyc7XG5pbXBvcnQgeyBQbGF0Zm9ybSBhcyBDZGtQbGF0Zm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9wbGF0Zm9ybSc7XG5cbmltcG9ydCB7IGlzTmlsT3JCbGFuaywgaXNOb3ROaWwsIGlzTm90TmlsT3JCbGFuaywgdG9Cb29sZWFuIH0gZnJvbSAnLi4vLi4vc2hhcmVkL2Z1bmN0aW9ucyc7XG5pbXBvcnQgeyBFbnRpdGllc1N0b3JhZ2UgfSBmcm9tICcuL3N0b3JhZ2UvZW50aXRpZXMtc3RvcmFnZS5zZXJ2aWNlJztcbmltcG9ydCB7IFNob3dUb2FzdE9wdGlvbnMsIFRvYXN0cyB9IGZyb20gJy4uLy4uL3NoYXJlZC90b2FzdC90b2FzdHMnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgQWNjb3VudFNlcnZpY2UgfSBmcm9tICcuL2FjY291bnQuc2VydmljZSc7XG5pbXBvcnQgeyBmcm9tLCBPYnNlcnZhYmxlLCBvZiwgU3Vic2NyaXB0aW9uLCB0aW1lciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgc2tpcCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgRW52aXJvbm1lbnQsIEVOVklST05NRU5UIH0gZnJvbSAnLi4vLi4vLi4vZW52aXJvbm1lbnRzL2Vudmlyb25tZW50LmNsYXNzJztcbmltcG9ydCB7IENvbmZpZ1NlcnZpY2UgfSBmcm9tICcuL2NvbmZpZy5zZXJ2aWNlJztcbmltcG9ydCB7IENPUkVfQ09ORklHX09QVElPTlMgfSBmcm9tICcuL2NvbmZpZy9jb3JlLmNvbmZpZyc7XG5pbXBvcnQgeyBNb21lbnREYXRlQWRhcHRlciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsLW1vbWVudC1hZGFwdGVyJztcbmltcG9ydCB7IERvd25sb2FkZXIsIERvd25sb2FkUmVxdWVzdCwgTm90aWZpY2F0aW9uVmlzaWJpbGl0eSB9IGZyb20gJ0Bpb25pYy1uYXRpdmUvZG93bmxvYWRlci9uZ3gnO1xuaW1wb3J0IHsgU3RhcnRhYmxlU2VydmljZSB9IGZyb20gJy4uLy4uL3NoYXJlZC9zZXJ2aWNlcy9zdGFydGFibGUtc2VydmljZS5jbGFzcyc7XG5pbXBvcnQgeyBpc01vYmlsZSwgaXNXaW5kb3dzIH0gZnJvbSAnLi4vLi4vc2hhcmVkL3BsYXRmb3Jtcyc7XG5pbXBvcnQgeyBWZXJzaW9uVXRpbHMgfSBmcm9tICcuLi8uLi9zaGFyZWQvdmVyc2lvbi92ZXJzaW9ucyc7XG5pbXBvcnQgeyBGaWxlc1V0aWxzLCBNaW1lVHlwZXMgfSBmcm9tICcuLi8uLi9zaGFyZWQvZmlsZS9maWxlLnV0aWxzJztcbmltcG9ydCB7IFVyaVV0aWxzIH0gZnJvbSAnLi4vLi4vc2hhcmVkL2ZpbGUvdXJpLnV0aWxzJztcbmltcG9ydCB7IFNwbGFzaFNjcmVlbiB9IGZyb20gJ0BjYXBhY2l0b3Ivc3BsYXNoLXNjcmVlbic7XG5pbXBvcnQgeyBTdGF0dXNCYXIgfSBmcm9tICdAY2FwYWNpdG9yL3N0YXR1cy1iYXInO1xuaW1wb3J0IHsgQnJvd3NlciwgT3Blbk9wdGlvbnMgfSBmcm9tICdAY2FwYWNpdG9yL2Jyb3dzZXInO1xuaW1wb3J0IHsgS2V5Ym9hcmQgfSBmcm9tICdAY2FwYWNpdG9yL2tleWJvYXJkJztcbmltcG9ydCB7IENhcGFjaXRvclBsdWdpbnMgfSBmcm9tICcuLi8uLi9zaGFyZWQvY2FwYWNpdG9yL3BsdWdpbnMnO1xuaW1wb3J0IHsgbG9jYWxlIGFzIG1vbWVudExvY2FsZSB9IGZyb20gJ21vbWVudCc7XG5pbXBvcnQgeyBJTG9nZ2VyLCBJTG9nZ2luZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zaGFyZWQvbG9nZ2luZy9sb2dnZXIubW9kZWwnO1xuaW1wb3J0IHsgQVBQX0xPR0dJTkdfU0VSVklDRSB9IGZyb20gJy4uLy4uL3NoYXJlZC9sb2dnaW5nL2xvZ2dpbmctc2VydmljZS5jbGFzcyc7XG5pbXBvcnQgeyBDbGlwYm9hcmQgYXMgQ2RrQ2xpcGJvYXJkIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NsaXBib2FyZCc7XG5pbXBvcnQgeyBDbGlwYm9hcmQgfSBmcm9tICdAY2FwYWNpdG9yL2NsaXBib2FyZCc7XG5pbXBvcnQgeyBXcml0ZU9wdGlvbnMgfSBmcm9tICdAY2FwYWNpdG9yL2NsaXBib2FyZC9kaXN0L2VzbS9kZWZpbml0aW9ucyc7XG5cbmV4cG9ydCBjb25zdCBBbmRyb2lkT3NFbnZpcm9ubWVudCA9IE9iamVjdC5mcmVlemUoe1xuICBESVJFQ1RPUllfRE9XTkxPQURTOiAnRG93bmxvYWQnLFxuICBESVJFQ1RPUllfRE9XTkxPQURTX09MRDogJ0Rvd25sb2FkcycsIC8vIE9sZCBuYW1lLCBmb3Igb2xkZXIgQW5kcm9pZCB2ZXJzaW9uXG4gIC8vIFRPRE86IGZpbmQgdmFsdWUgZm9yIHRoaXMuIFNlZSBodHRwczovL2RldmVsb3Blci5hbmRyb2lkLmNvbS9yZWZlcmVuY2UvYW5kcm9pZC9vcy9FbnZpcm9ubWVudCNnZXRFeHRlcm5hbFN0b3JhZ2VTdGF0ZShqYXZhLmlvLkZpbGUpXG4gIC8vIERJUkVDVE9SWV9NVVNJQyxcbiAgLy8gRElSRUNUT1JZX1BPRENBU1RTLFxuICAvLyBESVJFQ1RPUllfUklOR1RPTkVTLFxuICAvLyBESVJFQ1RPUllfQUxBUk1TLFxuICAvLyBESVJFQ1RPUllfTk9USUZJQ0FUSU9OUyxcbiAgLy8gRElSRUNUT1JZX1BJQ1RVUkVTLFxuICAvLyBESVJFQ1RPUllfTU9WSUVTLFxuICAvLyBESVJFQ1RPUllfRENJTSxcbiAgLy8gRElSRUNUT1JZX0RPQ1VNRU5UUyxcbiAgLy8gRElSRUNUT1JZX0FVRElPQk9PS1MsXG59KTtcblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBQbGF0Zm9ybVNlcnZpY2UgZXh0ZW5kcyBTdGFydGFibGVTZXJ2aWNlIHtcbiAgcHJpdmF0ZSBfbG9nZ2VyOiBJTG9nZ2VyO1xuICBwcml2YXRlIF9tb2JpbGU6IGJvb2xlYW47XG4gIHByaXZhdGUgX2Rlc2t0b3A6IGJvb2xlYW47XG4gIHByaXZhdGUgX2NvcmRvdmE6IGJvb2xlYW47XG4gIHByaXZhdGUgX2NhcGFjaXRvcjogYm9vbGVhbjtcbiAgcHJpdmF0ZSBfYW5kcm9pZDogYm9vbGVhbjtcbiAgcHJpdmF0ZSBfaW9zOiBib29sZWFuO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgaW9uaWNQbGF0Zm9ybTogUGxhdGZvcm0sXG4gICAgcHJpdmF0ZSBjZGtQbGF0Zm9ybTogQ2RrUGxhdGZvcm0sXG4gICAgcHJpdmF0ZSBjZGtDbGlwYm9hcmQ6IENka0NsaXBib2FyZCxcbiAgICBwcml2YXRlIHRvYXN0Q29udHJvbGxlcjogVG9hc3RDb250cm9sbGVyLFxuICAgIHByaXZhdGUgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgZGF0ZUFkYXB0ZXI6IE1vbWVudERhdGVBZGFwdGVyLFxuICAgIHByaXZhdGUgZW50aXRpZXNTdG9yYWdlOiBFbnRpdGllc1N0b3JhZ2UsXG4gICAgcHJpdmF0ZSBzZXR0aW5nczogTG9jYWxTZXR0aW5nc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBuZXR3b3JrU2VydmljZTogTmV0d29ya1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBhY2NvdW50U2VydmljZTogQWNjb3VudFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjb25maWdTZXJ2aWNlOiBDb25maWdTZXJ2aWNlLFxuICAgIHByaXZhdGUgY2FjaGU6IENhY2hlU2VydmljZSxcbiAgICBwcml2YXRlIGF1ZGlvUHJvdmlkZXI6IEF1ZGlvUHJvdmlkZXIsXG4gICAgQEluamVjdChFTlZJUk9OTUVOVCkgcHJvdGVjdGVkIGVudmlyb25tZW50OiBFbnZpcm9ubWVudCxcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KEFQUF9MT0dHSU5HX1NFUlZJQ0UpIGxvZ2dpbmdTZXJ2aWNlOiBJTG9nZ2luZ1NlcnZpY2UsXG4gICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSBkb3dubG9hZGVyOiBEb3dubG9hZGVyXG4gICkge1xuICAgIHN1cGVyKGlvbmljUGxhdGZvcm0pO1xuXG4gICAgdGhpcy5fbG9nZ2VyID0gbG9nZ2luZ1NlcnZpY2U/LmdldExvZ2dlcigncGxhdGZvcm0nKTtcbiAgICB0aGlzLl9kZWJ1ZyA9ICFlbnZpcm9ubWVudC5wcm9kdWN0aW9uO1xuICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZygnW3BsYXRmb3JtXSBDcmVhdGluZyBzZXJ2aWNlJyk7XG5cbiAgICBpZiAodGhpcy5fbG9nZ2VyKSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZGVidWcoJ2N0b3InLCAnQ3JlYXRpbmcgc2VydmljZScpO1xuICAgICAgaW9uaWNQbGF0Zm9ybS5wYXVzZS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnY3RvcicsICdQYXVzZSBhcHAnKTtcbiAgICAgIH0pO1xuICAgICAgaW9uaWNQbGF0Zm9ybS5yZXN1bWUuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ2N0b3InLCAnUmVzdW1lIGFwcCcpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIHByaXZhdGUgX2Rvd25sb2FkaW5nSm9iczogTWFwPHN0cmluZywgT2JzZXJ2YWJsZTxzdHJpbmc+PiA9IG5ldyBNYXAoKTtcblxuICBwcml2YXRlIGNoZWNrQXBwVmVyc2lvblRpbWVyOiBTdWJzY3JpcHRpb247XG5cbiAgaXMocGxhdGZvcm1OYW1lOiBQbGF0Zm9ybXMpOiBib29sZWFuIHtcbiAgICBzd2l0Y2ggKHBsYXRmb3JtTmFtZSkge1xuICAgICAgY2FzZSAnbW9iaWxlJzpcbiAgICAgICAgLy8gRXhjbHVkZSBXaW5kb3dzIHRvdWNoIHNjcmVlbnMgLSBzZWUgc3VtYXJpcy1hcHAgaXNzdWVzICMzMjMgYW5kICMzNDZcbiAgICAgICAgcmV0dXJuIGlzTW9iaWxlKHdpbmRvdyk7XG4gICAgICBjYXNlICdtb2JpbGV3ZWInOlxuICAgICAgICAvLyBFeGNsdWRlIFdpbmRvd3MgdG91Y2ggc2NyZWVucyAtIHNlZSBzdW1hcmlzLWFwcCBpc3N1ZXMgIzMyMyBhbmQgIzM0NlxuICAgICAgICByZXR1cm4gdGhpcy5pb25pY1BsYXRmb3JtLmlzKHBsYXRmb3JtTmFtZSkgJiYgIWlzV2luZG93cyh3aW5kb3cpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIHRoaXMuaW9uaWNQbGF0Zm9ybS5pcyhwbGF0Zm9ybU5hbWUpO1xuICAgIH1cbiAgfVxuXG4gIGdldCBtb2JpbGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGlzTm90TmlsKHRoaXMuX21vYmlsZSkgPyB0aGlzLl9tb2JpbGUgOiB0aGlzLmlzKCdtb2JpbGUnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTYXkgaWYgb3BlbmVkIGhhcyBiZWVuIG9wZW5lZCBpbnNpZGUgYW4gQW5kcm9pZCBvciBpT3MgQXBwLlxuICAgKiBUaGlzIGlzIHVzZWQgdG8ga25vd24gaWYgdGhlcmUgaXMgY29yZG92YSBmZWF0dXJlc1xuICAgKi9cbiAgaXNDYXBhY2l0b3IoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2NhcGFjaXRvcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBTYXkgaWYgb3BlbmVkIGhhcyBiZWVuIG9wZW5lZCBpbnNpZGUgYW4gQW5kcm9pZCBvciBpT3MgQXBwLlxuICAgKiBUaGlzIGlzIHVzZWQgdG8ga25vd24gaWYgdGhlcmUgaXMgY29yZG92YSBmZWF0dXJlc1xuICAgKi9cbiAgaXNDb3Jkb3ZhKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9jb3Jkb3ZhO1xuICB9XG5cbiAgaXNBbmRyb2lkQ29yZG92YSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKHRoaXMuX2FuZHJvaWQgJiYgdGhpcy5fY29yZG92YSkgfHwgZmFsc2U7XG4gIH1cblxuICBpc0lPU0NvcmRvdmEoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICh0aGlzLl9pb3MgJiYgdGhpcy5fY29yZG92YSkgfHwgZmFsc2U7XG4gIH1cblxuICBpc0FuZHJvaWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2FuZHJvaWQgfHwgZmFsc2U7XG4gIH1cblxuICBpc0lPUygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5faW9zIHx8IGZhbHNlO1xuICB9XG5cbiAgaXNNYWNPU0Rlc2t0b3AoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2Rlc2t0b3AgJiYgdGhpcy5pc0NvcmRvdmEoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJcyBhIG5hdGl2ZSBBcHAgKGFuZCBOT1QgYSBtb2JpbGUgd2ViKVxuICAgKi9cbiAgaXNBcHAoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNBbmRyb2lkQ29yZG92YSgpIHx8IHRoaXMuaXNJT1NDb3Jkb3ZhKCk7XG4gIH1cblxuICBpc1dlYigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXRoaXMuaXNBcHAoKTtcbiAgfVxuXG4gIGlzTW9iaWxlV2ViKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLm1vYmlsZSAmJiB0aGlzLmlzV2ViKCk7XG4gIH1cblxuICBnZXQgY2FuRG93bmxvYWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZG93bmxvYWRlciAmJiB0aGlzLmlzQW5kcm9pZENvcmRvdmEoKTtcbiAgfVxuXG4gIGdldCBjYW5PcGVuRmlsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7IC8vIFRPRE86IGZpeG1lIHVzaW5nIEBjYXBhY2l0b3IvZmlsZXN5c3RlbSA/XG4gIH1cblxuICB3aWR0aCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmlvbmljUGxhdGZvcm0ud2lkdGgoKTtcbiAgfVxuXG4gIGhlaWdodCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmlvbmljUGxhdGZvcm0uaGVpZ2h0KCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgbmdPblN0YXJ0KCk6IFByb21pc2U8YW55PiB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICB0aGlzLmFjY291bnRTZXJ2aWNlLnRva2VuVHlwZSA9IHVuZGVmaW5lZDtcbiAgICBjb25zb2xlLmluZm8oJ1twbGF0Zm9ybV0gU3RhcnRpbmcgcGxhdGZvcm0uLi4nKTtcbiAgICB0aGlzLl9sb2dnZXI/LmluZm8oJ25nT25TdGFydCcsICdTdGFydGluZyBwbGF0Zm9ybS4uLicpO1xuXG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuX21vYmlsZSA9IHRoaXMuaXMoJ21vYmlsZScpO1xuICAgICAgdGhpcy5fZGVza3RvcCA9IHRoaXMuaXMoJ2Rlc2t0b3AnKTtcbiAgICAgIHRoaXMuX2NvcmRvdmEgPSB0aGlzLmlzKCdjb3Jkb3ZhJyk7XG4gICAgICB0aGlzLl9jYXBhY2l0b3IgPSB0aGlzLmlzKCdjYXBhY2l0b3InKTtcbiAgICAgIHRoaXMuX2FuZHJvaWQgPSB0aGlzLmlzKCdhbmRyb2lkJyk7XG4gICAgICB0aGlzLl9pb3MgPSB0aGlzLmlzKCdpb3MnKTtcblxuICAgICAgY29uc3QgbG9nTWVzc2FnZSA9IGBEZXRlY3RlZCB7bW9iaWxlOiAke3RoaXMuX21vYmlsZX0sIGRlc2t0b3A6ICR7dGhpcy5fZGVza3RvcH0sIGNvcmRvdmE6ICR7dGhpcy5fY29yZG92YX0sIGNhcGFjaXRvcjogJHt0aGlzLl9jYXBhY2l0b3J9LCBhbmRyb2lkOiAke3RoaXMuX2FuZHJvaWR9LCBpb3M6ICR7dGhpcy5faW9zfX1gO1xuICAgICAgY29uc29sZS5pbmZvKCdbcGxhdGZvcm1dICcgKyBsb2dNZXNzYWdlKTtcbiAgICAgIHRoaXMuX2xvZ2dlcj8uaW5mbygnbmdPblN0YXJ0JywgbG9nTWVzc2FnZSk7XG5cbiAgICAgIC8vIENvbmZpZ3VyZSB0aGVtZVxuICAgICAgYXdhaXQgdGhpcy5jb25maWd1cmVUaGVtZSh0aGlzLl9tb2JpbGUpO1xuXG4gICAgICAvLyBDb25maWd1cmUgQ2FwYWNpdG9yIHBsdWdpbnNcbiAgICAgIGF3YWl0IHRoaXMuY29uZmlndXJlQ2FwYWNpdG9yUGx1Z2lucygpO1xuXG4gICAgICAvLyBDb25maWd1cmUgdHJhbnNsYXRpb25cbiAgICAgIHRoaXMuY29uZmlndXJlVHJhbnNsYXRlKCk7XG5cbiAgICAgIC8vIENvbmZpZ3VyZSBjYWNoZVxuICAgICAgdGhpcy5jb25maWd1cmVDYWNoZSgpO1xuXG4gICAgICAvLyBTdGFydCByb290IHNlcnZpY2VzXG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChbdGhpcy5lbnRpdGllc1N0b3JhZ2UucmVhZHkoKSwgdGhpcy5zZXR0aW5ncy5yZWFkeSgpLCB0aGlzLm5ldHdvcmtTZXJ2aWNlLnJlYWR5KCksIHRoaXMuYXVkaW9Qcm92aWRlci5yZWFkeSgpXSk7XG5cbiAgICAgIC8vIENoZWNrIGlmIHdlYiBhcHAgaGFzIHVwZGF0ZSwgYW5kIHJlbG9hZCBwYWdlIGlmIG5lZWRcbiAgICAgIGlmICh0aGlzLmlzV2ViKCkgJiYgdGhpcy5lbnZpcm9ubWVudC5wcm9kdWN0aW9uKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuY2hlY2tBcHBWZXJzaW9uKHsgY2FuUmVsb2FkOiB0cnVlIH0pO1xuICAgICAgfVxuXG4gICAgICAvLyBVcGRhdGUgY2FjaGUgY29uZmlndXJhdGlvbiB3aGVuIG5ldHdvcmsgY2hhbmdlZFxuICAgICAgdGhpcy5yZWdpc3RlclN1YnNjcmlwdGlvbihcbiAgICAgICAgdGhpcy5uZXR3b3JrU2VydmljZS5vbk5ldHdvcmtTdGF0dXNDaGFuZ2VzXG4gICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICBza2lwKDEpIC8vIEFscmVhZHkgZG9uZSBvbmNlLCBzbyB3ZSBza2lwIHRoZSBmaXJzdCBldmVudFxuICAgICAgICAgIClcbiAgICAgICAgICAuc3Vic2NyaWJlKCh0eXBlKSA9PiB0aGlzLmNvbmZpZ3VyZUNhY2hlKHR5cGUgIT09ICdub25lJykpXG4gICAgICApO1xuXG4gICAgICBjb25zb2xlLmluZm8oXG4gICAgICAgIGBbcGxhdGZvcm1dIFN0YXJ0aW5nIHBsYXRmb3JtIFtPS10ge21vYmlsZTogJHt0aGlzLl9tb2JpbGV9LCBjYXBhY2l0b3I6ICR7dGhpcy5fY2FwYWNpdG9yfSwgd2ViOiAke3RoaXMuaXNXZWIoKX0sIGRvd25sb2FkZXI6ICR7dGhpcy5jYW5Eb3dubG9hZH19IGluICR7RGF0ZS5ub3coKSAtIG5vd31tc2BcbiAgICAgICk7XG5cbiAgICAgIC8vIFBhc3MgYXV0aCB0b2tlblxuICAgICAgdGhpcy5yZWdpc3RlclN1YnNjcmlwdGlvbihcbiAgICAgICAgdGhpcy5jb25maWdTZXJ2aWNlLmNvbmZpZy5zdWJzY3JpYmUoKGNvbmZpZykgPT4ge1xuICAgICAgICAgIGlmICghY29uZmlnKSByZXR1cm47IC8vIFNraXBcblxuICAgICAgICAgIC8vIFVwZGF0ZSBhdXRoZW50aWNhdGlvbiB0eXBlXG4gICAgICAgICAgY29uc3QgdG9rZW5UeXBlOiBBdXRoVG9rZW5UeXBlID0gY29uZmlnLmdldFByb3BlcnR5KENPUkVfQ09ORklHX09QVElPTlMuQVVUSF9UT0tFTl9UWVBFKSBhcyBBdXRoVG9rZW5UeXBlO1xuICAgICAgICAgIGlmIChpc05vdE5pbE9yQmxhbmsodG9rZW5UeXBlKSAmJiB0aGlzLmFjY291bnRTZXJ2aWNlLnRva2VuVHlwZSAhPT0gdG9rZW5UeXBlKSB7XG4gICAgICAgICAgICBjb25zb2xlLmluZm8oYFtwbGF0Zm9ybV0gVXNpbmcgYXV0aCB0b2tlbiB0eXBlIHske3Rva2VuVHlwZX19YCk7XG4gICAgICAgICAgICB0aGlzLmFjY291bnRTZXJ2aWNlLnRva2VuVHlwZSA9IHRva2VuVHlwZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBFbmFibGUgYXV0aCBBUEkgdXNpbmcgdG9rZW5zXG4gICAgICAgICAgY29uc3QgYXV0aEFwaUVuYWJsZWQgPSBjb25maWcuZ2V0UHJvcGVydHlBc0Jvb2xlYW4oQ09SRV9DT05GSUdfT1BUSU9OUy5BVVRIX0FQSV9UT0tFTl9FTkFCTEVEKTtcbiAgICAgICAgICBpZiAoaXNOb3ROaWwoYXV0aEFwaUVuYWJsZWQpICYmIGF1dGhBcGlFbmFibGVkICE9PSB0aGlzLmFjY291bnRTZXJ2aWNlLmFwaVRva2VuRW5hYmxlZCkge1xuICAgICAgICAgICAgY29uc29sZS5pbmZvKGBbcGxhdGZvcm1dIFVzaW5nIGF1dGggQVBJIHRva2VucyA/ICR7YXV0aEFwaUVuYWJsZWR9fWApO1xuICAgICAgICAgICAgdGhpcy5hY2NvdW50U2VydmljZS5hcGlUb2tlbkVuYWJsZWQgPSBhdXRoQXBpRW5hYmxlZDtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICApO1xuXG4gICAgICBpZiAodGhpcy5fbW9iaWxlIHx8IHRoaXMuaXNNYWNPU0Rlc2t0b3AoKSkge1xuICAgICAgICAvLyBIaWRlIHRoZSBzcGxhc2hzY3JlZW4gKGlmIG1vYmlsZSkgLSBhZnRlciAxcyAtIGFuZCBwbGF5IHN0YXJ0IHNvdW5kXG4gICAgICAgIHNldFRpbWVvdXQoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGF3YWl0IFNwbGFzaFNjcmVlbi5oaWRlKCk7XG5cbiAgICAgICAgICAvLyBQbGF5IHN0YXJ0dXAgc291bmRcbiAgICAgICAgICBpZiAodGhpcy5fbW9iaWxlKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmF1ZGlvUHJvdmlkZXIucGxheVN0YXJ0dXBTb3VuZCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSwgMTAwMCk7XG4gICAgICB9XG5cbiAgICAgIC8vIENoZWNrIGlmIG5ldyB2ZXJzaW9uLCBldmVyeSAxIG1pblxuICAgICAgY29uc3QgY2hlY2tJbnRlcnZhbE1zID0gKHRoaXMuZW52aXJvbm1lbnQuY2hlY2tBcHBWZXJzaW9uSW50ZXJ2YWxJblNlY29uZHMgfHwgMCkgKiAxMDAwO1xuICAgICAgaWYgKHRoaXMuaXNXZWIoKSAmJiB0aGlzLmVudmlyb25tZW50LnByb2R1Y3Rpb24gJiYgY2hlY2tJbnRlcnZhbE1zID4gMCkge1xuICAgICAgICB0aGlzLmNoZWNrQXBwVmVyc2lvblRpbWVyPy51bnN1YnNjcmliZSgpO1xuICAgICAgICBjb25zdCBzdWJzY3JpcHRpb24gPSB0aW1lcihjaGVja0ludGVydmFsTXMsIGNoZWNrSW50ZXJ2YWxNcykuc3Vic2NyaWJlKChfKSA9PlxuICAgICAgICAgIHRoaXMuY2hlY2tBcHBWZXJzaW9uKHsgc2lsZW50OiB0cnVlLCBjYW5SZWxvYWQ6IGZhbHNlIC8qZG8gTk9UIGF1dG8gcmVsb2FkLCB3aGVuIGFwcCBpcyBzdGFydGVkKi8gfSlcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5jaGVja0FwcFZlcnNpb25UaW1lciA9IHN1YnNjcmlwdGlvbjtcbiAgICAgICAgdGhpcy5yZWdpc3RlclN1YnNjcmlwdGlvbihzdWJzY3JpcHRpb24pO1xuICAgICAgICBzdWJzY3JpcHRpb24uYWRkKCgpID0+IHRoaXMudW5yZWdpc3RlclN1YnNjcmlwdGlvbihzdWJzY3JpcHRpb24pKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIC8vIE1hbmFnZSBzdGFydHVwIGVycm9yXG4gICAgICByZXR1cm4gdGhpcy5vblN0YXJ0dXBFcnJvcihlcnIpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIG9wZW4odXJsOiBzdHJpbmcsIG9wdHM/OiBPbWl0PE9wZW5PcHRpb25zLCAndXJsJz4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zb2xlLmluZm8oYFtwbGF0Zm9ybV0gT3BlbmluZyBsaW5rOiAke3VybH1gKTtcbiAgICBpZiAodGhpcy5fbW9iaWxlICYmIHRoaXMuX2NhcGFjaXRvcikge1xuICAgICAgYXdhaXQgQnJvd3Nlci5vcGVuKHsgdXJsLCAuLi5vcHRzIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB3aW5kb3cub3Blbih1cmwsIG9wdHM/LndpbmRvd05hbWUpO1xuICAgIH1cbiAgfVxuXG4gIGdldERvd25sb2FkaW5nSm9iKHVyaTogc3RyaW5nKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5fZG93bmxvYWRpbmdKb2JzLmdldCh1cmkpO1xuICB9XG5cbiAgZG93bmxvYWQocmVxdWVzdDogeyB1cmk6IHN0cmluZzsgZmlsZW5hbWU/OiBzdHJpbmcgfSAmIFBhcnRpYWw8RG93bmxvYWRSZXF1ZXN0Pik6IE9ic2VydmFibGU8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XG4gICAgaWYgKCFyZXF1ZXN0IHx8ICFyZXF1ZXN0LnVyaSkgdGhyb3cgbmV3IEVycm9yKFwiTWlzc2luZyBhcmd1bWVudCAncmVxdWVzdCcgb3IgJ3JlcXVlc3QudXJpJ1wiKTtcblxuICAgIGlmICh0aGlzLmNhbkRvd25sb2FkKSB7XG4gICAgICAvLyBDaGVjayBpZiBub3QgYWxyZWFkeSBkb3dubG9hZGluZyBmaWxlXG4gICAgICBsZXQgam9iJCA9IHRoaXMuX2Rvd25sb2FkaW5nSm9icy5nZXQocmVxdWVzdC51cmkpO1xuICAgICAgaWYgKGpvYiQpIHJldHVybiBqb2IkO1xuXG4gICAgICAvLyBDb21wdXRlIHN1YlBhdGggKGZpbmFsIGZpbGVuYW1lKVxuICAgICAgbGV0IHN1YlBhdGggPVxuICAgICAgICByZXF1ZXN0LmRlc3RpbmF0aW9uSW5FeHRlcm5hbFB1YmxpY0Rpcj8uc3ViUGF0aCB8fFxuICAgICAgICByZXF1ZXN0LmRlc3RpbmF0aW9uSW5FeHRlcm5hbEZpbGVzRGlyPy5zdWJQYXRoIHx8XG4gICAgICAgIHJlcXVlc3QuZmlsZW5hbWUgfHxcbiAgICAgICAgVXJpVXRpbHMuZ2V0RmlsZW5hbWUocmVxdWVzdC51cmkpIHx8XG4gICAgICAgIHJlcXVlc3QudGl0bGUgfHxcbiAgICAgICAgJ2Rvd25sb2FkJztcblxuICAgICAgc3ViUGF0aCA9IHN1YlBhdGhcbiAgICAgICAgLnRvTG93ZXJDYXNlKClcbiAgICAgICAgLy8gUmVtb3ZlIHNwYWNlc1xuICAgICAgICAucmVwbGFjZSgvXFxzKy9nLCAnLScpO1xuXG4gICAgICAvLyBGb3JjZSBBUEsgdG8gZmluaXNoIHdpdGggJy5hcGsnXG4gICAgICBpZiAocmVxdWVzdC5taW1lVHlwZSA9PT0gTWltZVR5cGVzLkFORFJPSURfQVBLICYmICFzdWJQYXRoLnRvTG93ZXJDYXNlKCkuZW5kc1dpdGgoJy5hcGsnKSkge1xuICAgICAgICBzdWJQYXRoICs9ICcuYXBrJztcbiAgICAgIH1cblxuICAgICAgY29uc3QgZG93bmxvYWRSZXF1ZXN0ID0gPERvd25sb2FkUmVxdWVzdD57XG4gICAgICAgIHZpc2libGVJbkRvd25sb2Fkc1VpOiB0cnVlLFxuICAgICAgICBub3RpZmljYXRpb25WaXNpYmlsaXR5OiBOb3RpZmljYXRpb25WaXNpYmlsaXR5LlZpc2libGVOb3RpZnlDb21wbGV0ZWQsXG4gICAgICAgIC4uLnJlcXVlc3QsXG4gICAgICAgIGZpbGVuYW1lOiB1bmRlZmluZWQsIC8vIEZvcmNlIHVuc2V0XG4gICAgICAgIGRlc3RpbmF0aW9uSW5FeHRlcm5hbFB1YmxpY0RpcjogIXJlcXVlc3QuZGVzdGluYXRpb25JbkV4dGVybmFsRmlsZXNEaXJcbiAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgZGlyVHlwZTogQW5kcm9pZE9zRW52aXJvbm1lbnQuRElSRUNUT1JZX0RPV05MT0FEUyxcbiAgICAgICAgICAgICAgLi4ucmVxdWVzdC5kZXN0aW5hdGlvbkluRXh0ZXJuYWxQdWJsaWNEaXIsXG4gICAgICAgICAgICAgIHN1YlBhdGgsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgIGRlc3RpbmF0aW9uSW5FeHRlcm5hbEZpbGVzRGlyOiByZXF1ZXN0LmRlc3RpbmF0aW9uSW5FeHRlcm5hbEZpbGVzRGlyXG4gICAgICAgICAgPyB7XG4gICAgICAgICAgICAgIGRpclR5cGU6IEFuZHJvaWRPc0Vudmlyb25tZW50LkRJUkVDVE9SWV9ET1dOTE9BRFMsXG4gICAgICAgICAgICAgIC4uLnJlcXVlc3QuZGVzdGluYXRpb25JbkV4dGVybmFsRmlsZXNEaXIsXG4gICAgICAgICAgICAgIHN1YlBhdGgsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICB9O1xuXG4gICAgICAvLyBTdGFydCBkb3dubG9hZFxuICAgICAgY29uc29sZS5kZWJ1ZygnW3BsYXRmb3JtXSBEb3dubG9hZGluZywgdXNpbmcgcmVxdWVzdDogJyArIEpTT04uc3RyaW5naWZ5KGRvd25sb2FkUmVxdWVzdCkpO1xuICAgICAgam9iJCA9IGZyb20odGhpcy5kb3dubG9hZGVyLmRvd25sb2FkKGRvd25sb2FkUmVxdWVzdCkpO1xuXG4gICAgICAvLyBSZW1lbWJlciB0aGlzIHJlcXVlc3QgdXJpXG4gICAgICB0aGlzLl9kb3dubG9hZGluZ0pvYnMuc2V0KGRvd25sb2FkUmVxdWVzdC51cmksIGpvYiQpO1xuICAgICAgcmV0dXJuIGpvYiQucGlwZShcbiAgICAgICAgdGFwKChsb2NhdGlvbikgPT4ge1xuICAgICAgICAgIGNvbnNvbGUuaW5mbygnW3BsYXRmb3JtXSBGaWxlIHN1Y2Nlc3NmdWxseSBkb3dubG9hZGVkIGF0OicgKyBsb2NhdGlvbik7XG4gICAgICAgICAgLy8gRm9yZ2V0IGpvYlxuICAgICAgICAgIHRoaXMuX2Rvd25sb2FkaW5nSm9icy5kZWxldGUoZG93bmxvYWRSZXF1ZXN0LnVyaSk7XG4gICAgICAgICAgcmV0dXJuIGxvY2F0aW9uO1xuICAgICAgICB9KSxcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignW3BsYXRmb3JtXSBVbmFibGUgdG8gZG93bmxvYWQ6ICcgKyAoKGVyciAmJiBlcnIubWVzc2FnZSkgfHwgZXJyKSk7XG4gICAgICAgICAgLy8gRm9yZ2V0IHRoZSByZXF1ZXN0XG4gICAgICAgICAgdGhpcy5fZG93bmxvYWRpbmdKb2JzLmRlbGV0ZShkb3dubG9hZFJlcXVlc3QudXJpKTtcblxuICAgICAgICAgIC8vIFJldHJ5IHdpdGggYW5vdGhlciBsb2NhdGlvbiAtIGlzc3VlIGluIG9sZGVyIEFuZHJvaWQgdmVyc2lvblxuICAgICAgICAgIGlmIChkb3dubG9hZFJlcXVlc3QuZGVzdGluYXRpb25JbkV4dGVybmFsUHVibGljRGlyPy5kaXJUeXBlID09PSBBbmRyb2lkT3NFbnZpcm9ubWVudC5ESVJFQ1RPUllfRE9XTkxPQURTKSB7XG4gICAgICAgICAgICBkb3dubG9hZFJlcXVlc3QuZGVzdGluYXRpb25JbkV4dGVybmFsUHVibGljRGlyLmRpclR5cGUgPSBBbmRyb2lkT3NFbnZpcm9ubWVudC5ESVJFQ1RPUllfRE9XTkxPQURTX09MRDtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRvd25sb2FkKGRvd25sb2FkUmVxdWVzdCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gRmFsbGJhY2sgKGlmIG5vdCBBbmRyb2lkIGFuZCBDYXBhY2l0b3IpOiBvcGVuaW5nIHRoZSBVUklcbiAgICAvLyBUT0RPOiBmaW5kIGEgd2F5IHRvIGRvd25sb2FkIHVuZGVyIGlPUyAoc2VlIGh0dHBzOi8vd3d3LmMtc2hhcnBjb3JuZXIuY29tL2FydGljbGUvaG93LXRvLWRvd25sb2FkLWEtZmlsZS11c2luZy1maWxlLXRyYW5zZmVyLXBsdWdpbi1pbi1pb25pYy0zLylcbiAgICBlbHNlIHtcbiAgICAgIEZpbGVzVXRpbHMuZG93bmxvYWRVcmkocmVxdWVzdC51cmksIHJlcXVlc3QuZmlsZW5hbWUpO1xuICAgICAgcmV0dXJuIG9mKHVuZGVmaW5lZCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgY29weVRvQ2xpcGJvYXJkKGRhdGE6IHN0cmluZyB8IFdyaXRlT3B0aW9ucywgb3B0cz86IFNob3dUb2FzdE9wdGlvbnMpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJyA/IGRhdGEgOiBkYXRhLnN0cmluZztcbiAgICBsZXQgY29waWVkID0gdHJ1ZTtcbiAgICBpZiAodGhpcy5pc0FuZHJvaWRDb3Jkb3ZhKCkpIHtcbiAgICAgIGNvbnN0IHdyaXRlT3B0aW9ucyA9IHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJyA/IHsgc3RyaW5nOiB2YWx1ZSB9IDogZGF0YTtcbiAgICAgIGF3YWl0IENsaXBib2FyZC53cml0ZSh3cml0ZU9wdGlvbnMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb3BpZWQgPSB0aGlzLmNka0NsaXBib2FyZC5jb3B5KHZhbHVlKTtcbiAgICB9XG5cbiAgICBpZiAoY29waWVkKSB7XG4gICAgICAvLyBTaG93IHRvYXN0XG4gICAgICBpZiAob3B0cyAmJiBpc05vdE5pbE9yQmxhbmsob3B0cy5tZXNzYWdlKSkge1xuICAgICAgICBhd2FpdCBUb2FzdHMuc2hvdyh0aGlzLnRvYXN0Q29udHJvbGxlciwgdGhpcy50cmFuc2xhdGUsIHtcbiAgICAgICAgICB0eXBlOiAnaW5mbycsXG4gICAgICAgICAgLi4ub3B0cyxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1twbGF0Zm9ybV0gVW5hYmxlIHRvIGNvcHkgdG8gY2xpcGJvYXJkOiAnICsgZGF0YSk7XG4gICAgfVxuICB9XG5cbiAgdG9nZ2xlRGFya1RoZW1lKGVuYWJsZTogYm9vbGVhbikge1xuICAgIGlmIChlbmFibGUgJiYgIWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoJ2RhcmsnKSkge1xuICAgICAgY29uc29sZS5kZWJ1ZygnW3BsYXRmb3JtXSBFbmFibGUgZGFyayBtb2RlLi4uJyk7XG4gICAgfVxuICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGFzc0xpc3QudG9nZ2xlKCdkYXJrJywgZW5hYmxlKTtcbiAgfVxuXG4gIC8qIC0tIHByb3RlY3RlZCBtZXRob2RzIC0tICovXG5cbiAgcHJvdGVjdGVkIGFzeW5jIGNvbmZpZ3VyZVRoZW1lKG1vYmlsZTogYm9vbGVhbiwgd2luOiBhbnkgPSB3aW5kb3cpIHtcbiAgICAvLyBMaXN0ZW4gZm9yIGNoYW5nZXMgdG8gc2V0dGluZ3MgZGFyayBtb2RlXG4gICAgaWYgKHRoaXMuZW52aXJvbm1lbnQuYWxsb3dEYXJrTW9kZSkge1xuICAgICAgdGhpcy5yZWdpc3RlclN1YnNjcmlwdGlvbih0aGlzLnNldHRpbmdzLmRhcmtNb2RlJC5zdWJzY3JpYmUoKGRhcmtNb2RlKSA9PiB0aGlzLnRvZ2dsZURhcmtUaGVtZShkYXJrTW9kZSkpKTtcbiAgICB9XG5cbiAgICAvLyBXb3JrYXJvdW5kLCBmb3IgTVMgV2luZG93cyB0b3VjaCBzY3JlZW4gKGRldGVjdGVkIGFzIG1vYmlsZSwgYnV0IGZvcmNlZCBhcyBkZXNrdG9wKVxuICAgIGlmIChcbiAgICAgICFtb2JpbGUgJiZcbiAgICAgICh3aW4uZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50Py5jbGFzc0xpc3QuY29udGFpbnMoJ3BsdC1tb2JpbGUnKSB8fCB3aW4uZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsYXNzTGlzdD8uY29udGFpbnMoJ3BsdC1tb2JpbGV3ZWInKSlcbiAgICApIHtcbiAgICAgIGNvbnNvbGUud2FybignW3BsYXRmb3JtXSBGb3JjZSBjbGFzcyBsaXN0IHRvOiA8aHRtbCBjbGFzcz1cInBsdC1kZXNrdG9wXCI+LiBXb3JrYXJvdW5kIGZvciBXaW5kb3dzIHRvdWNoIHNjcmVlbi4nKTtcbiAgICAgIHdpbi5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgncGx0LW1vYmlsZScsICdwbHQtbW9iaWxld2ViJyk7XG4gICAgICB3aW4uZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsYXNzTGlzdC5hZGQoJ3BsdC1kZXNrdG9wJyk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGNvbmZpZ3VyZUNhcGFjaXRvclBsdWdpbnMoKSB7XG4gICAgaWYgKCF0aGlzLl9jYXBhY2l0b3IpIHJldHVybjsgLy8gU2tpcFxuXG4gICAgY29uc29sZS5pbmZvKCdbcGxhdGZvcm1dIENvbmZpZ3VyaW5nIENhcGFjaXRvciBwbHVnaW5zLi4uJyk7XG5cbiAgICBsZXQgcGx1Z2luTmFtZTogc3RyaW5nO1xuICAgIHRyeSB7XG4gICAgICBwbHVnaW5OYW1lID0gQ2FwYWNpdG9yUGx1Z2lucy5TdGF0dXNCYXI7XG4gICAgICBpZiAodGhpcy5pc0FwcCgpICYmIHRoaXMuaXNBbmRyb2lkKCkpIHtcbiAgICAgICAgYXdhaXQgU3RhdHVzQmFyLnNldE92ZXJsYXlzV2ViVmlldyh7IG92ZXJsYXk6IGZhbHNlIH0pO1xuICAgICAgfVxuXG4gICAgICAvLyBIaWRlIGFjY2Vzc29yeSBiYXIgKGlPUyBvbmx5KVxuICAgICAgaWYgKHRoaXMuaXNBcHAoKSAmJiB0aGlzLmlzSU9TKCkpIHtcbiAgICAgICAgcGx1Z2luTmFtZSA9IENhcGFjaXRvclBsdWdpbnMuS2V5Ym9hcmQ7XG4gICAgICAgIGF3YWl0IEtleWJvYXJkLnNldEFjY2Vzc29yeUJhclZpc2libGUoeyBpc1Zpc2libGU6IGZhbHNlIH0pO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc3QgbG9nTWVzc2FnZSA9IGBFcnJvciB3aGlsZSBjb25maWd1cmluZyAke3BsdWdpbk5hbWV9IHBsdWdpbjogJHtlcnIubWVzc2FnZSB8fCBlcnJ9XFxuJHtlcnI/Lm9yaWdpbmFsU3RhY2sgfHwgSlNPTi5zdHJpbmdpZnkoZXJyKX1gO1xuICAgICAgY29uc29sZS5lcnJvcignW3BsYXRmb3JtXSAnICsgbG9nTWVzc2FnZSk7XG4gICAgICB0aGlzLl9sb2dnZXI/LmVycm9yKCdjb25maWd1cmVDYXBhY2l0b3JQbHVnaW5zJywgbG9nTWVzc2FnZSk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGNvbmZpZ3VyZVRyYW5zbGF0ZSgpIHtcbiAgICBjb25zb2xlLmluZm8oJ1twbGF0Zm9ybV0gQ29uZmlndXJpbmcgaTE4biAuLi4nKTtcblxuICAgIC8vIHRoaXMgbGFuZ3VhZ2Ugd2lsbCBiZSB1c2VkIGFzIGEgZmFsbGJhY2sgd2hlbiBhIHRyYW5zbGF0aW9uIGlzbid0IGZvdW5kIGluIHRoZSBjdXJyZW50IGxhbmd1YWdlXG4gICAgdGhpcy50cmFuc2xhdGUuc2V0RGVmYXVsdExhbmcodGhpcy5lbnZpcm9ubWVudC5kZWZhdWx0TG9jYWxlKTtcbiAgICAvLyBhcHBseSBsb2NhbGUgaW1tZWRpYXRlbHlcbiAgICB0aGlzLmFwcGx5TG9jYWxlKHRoaXMuZW52aXJvbm1lbnQuZGVmYXVsdExvY2FsZSk7XG5cbiAgICAvLyBXaGVuIGxvY2FsZSBjaGFuZ2VzLCBhcHBseSB0byBkYXRlIGFkYXB0ZXJcbiAgICB0aGlzLnJlZ2lzdGVyU3Vic2NyaXB0aW9uKFxuICAgICAgdGhpcy50cmFuc2xhdGUub25MYW5nQ2hhbmdlLnN1YnNjcmliZSgoZXZlbnQpID0+IHtcbiAgICAgICAgaWYgKGV2ZW50ICYmIGV2ZW50LmxhbmcpIHtcbiAgICAgICAgICB0aGlzLmFwcGx5TG9jYWxlKGV2ZW50LmxhbmcpO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG5cbiAgICB0aGlzLnJlZ2lzdGVyU3Vic2NyaXB0aW9uKFxuICAgICAgdGhpcy5zZXR0aW5ncy5vbkNoYW5nZS5zdWJzY3JpYmUoKGRhdGEpID0+IHtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAvLyBBcHBseSBsb2NhbGVcbiAgICAgICAgICBpZiAoZGF0YS5sb2NhbGUpIHtcbiAgICAgICAgICAgIGlmIChkYXRhLmxvY2FsZSAhPT0gdGhpcy50cmFuc2xhdGUuY3VycmVudExhbmcpIHtcbiAgICAgICAgICAgICAgdGhpcy50cmFuc2xhdGUudXNlKGRhdGEubG9jYWxlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gQXBwbHlpbmcgZGVmYXVsdCwgd2hlbiBzZXR0aW5ncyBoYXMgbm8gbG9jYWxlIHByb3BlcnR5IChob3RmaXggLSBsdWRvdmljLnBlY3F1b3RAZS1pcy5wcm8gLSAxNC8xMS8yMDIxIC0gc2luY2UgdjEuMjAuNDIpXG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1twbGF0Zm9ybV0gTm8gbG9jYWxlIGZvdW5kIGluIHNldHRpbmdzOiBhcHBseWluZyBkZWZhdWx0TG9jYWxlOiAnLCB0aGlzLmVudmlyb25tZW50LmRlZmF1bHRMb2NhbGUpO1xuICAgICAgICAgICAgdGhpcy50cmFuc2xhdGUudXNlKHRoaXMuZW52aXJvbm1lbnQuZGVmYXVsdExvY2FsZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG5cbiAgICAvLyBVc2UgYWNjb3VudCdzIHNldHRpbmdzLCAobGlrZSBsb2NhbGUpLCB3aGVuIGFjY291bnQgaW5oZXJpdGFuY2UgZW5hYmxlZFxuICAgIHRoaXMucmVnaXN0ZXJTdWJzY3JpcHRpb24oXG4gICAgICB0aGlzLmFjY291bnRTZXJ2aWNlLm9uTG9naW4uc3Vic2NyaWJlKChhY2NvdW50KSA9PiB7XG4gICAgICAgIGlmIChhY2NvdW50LnNldHRpbmdzICYmIHRoaXMuc2V0dGluZ3Muc2V0dGluZ3MuYWNjb3VudEluaGVyaXRhbmNlKSB7XG4gICAgICAgICAgY29uc3QgYWNjb3VudFNldHRpbmdzID0gYWNjb3VudC5zZXR0aW5ncy5hc0xvY2FsU2V0dGluZ3MoKTtcbiAgICAgICAgICB0aGlzLnNldHRpbmdzLmFwcGx5KGFjY291bnRTZXR0aW5ncyk7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhcHBseUxvY2FsZShsb2NhbGU6IHN0cmluZykge1xuICAgIC8vIGZvcmNlICdlbicgYXMgJ2VuX0dCJ1xuICAgIGlmIChsb2NhbGUgPT09ICdlbicpIHtcbiAgICAgIGxvY2FsZSA9ICdlbl9HQic7XG4gICAgfVxuXG4gICAgLy8gY29uZmlnIG1vbWVudCBsaWJcbiAgICB0cnkge1xuICAgICAgbW9tZW50TG9jYWxlKGxvY2FsZSk7XG4gICAgICBjb25zb2xlLmRlYnVnKCdbcGxhdGZvcm1dIFVzZSBsb2NhbGUgeycgKyBsb2NhbGUgKyAnfScpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgLy8gSWYgZXJyb3IsIGZhbGxiYWNrIHRvIGVuXG4gICAgICBtb21lbnRMb2NhbGUoJ2VuJyk7XG4gICAgICBjb25zb2xlLndhcm4oJ1twbGF0Zm9ybV0gVW5rbm93biBsb2NhbGUgZm9yIG1vbWVudCBsaWIuIFVzaW5nIGRlZmF1bHQgW2VuXScpO1xuICAgIH1cblxuICAgIC8vIENvbmZpZyBkYXRlIGFkYXB0ZXJcbiAgICB0aGlzLmRhdGVBZGFwdGVyLnNldExvY2FsZShtb21lbnRMb2NhbGUoKSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgY29uZmlndXJlQ2FjaGUob25saW5lPzogYm9vbGVhbikge1xuICAgIG9ubGluZSA9IHRvQm9vbGVhbihvbmxpbmUsIHRoaXMuY2FjaGUuaXNPbmxpbmUoKSk7XG4gICAgY29uc3QgY2FjaGVUVEwgPSBvbmxpbmUgPyAzNjAwIC8qIDFoICovIDogMzYwMCAqIDI0ICogMzA7IC8qIDEgbW9udGggKi9cbiAgICBjb25zb2xlLmluZm8oYFtwbGF0Zm9ybV0gQ29uZmlndXJpbmcgY2FjaGUgW09LXSB7b25saW5lOiAke29ubGluZX0sIHRpbWVUb0xpdmU6ICR7Y2FjaGVUVEwgLyAzNjAwfWgsIG9mZmxpbmVJbnZhbGlkYXRlOiBmYWxzZX1gKTtcbiAgICB0aGlzLmNhY2hlLnNldERlZmF1bHRUVEwoY2FjaGVUVEwpO1xuICAgIHRoaXMuY2FjaGUuc2V0T2ZmbGluZUludmFsaWRhdGUoZmFsc2UpOyAvLyBEbyBub3QgaW52YWxpZGF0ZSBjYWNoZSB3aGVuIG9mZmxpbmVcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBjaGVja0FwcFZlcnNpb24ob3B0cz86IHsgY2FuUmVsb2FkPzogYm9vbGVhbjsgc2lsZW50PzogYm9vbGVhbiB9KSB7XG4gICAgaWYgKHRoaXMubmV0d29ya1NlcnZpY2Uub2ZmbGluZSB8fCAhdGhpcy5pc1dlYigpKSByZXR1cm47IC8vIFNraXBcblxuICAgIGNvbnN0IHNpbGVudCA9IG9wdHM/LnNpbGVudCA9PT0gdHJ1ZTtcbiAgICBjb25zdCBwcm9kdWN0aW9uID0gdGhpcy5lbnZpcm9ubWVudC5wcm9kdWN0aW9uO1xuICAgIGNvbnN0IGNhbkF1dG9SZWxvYWQgPSAhb3B0cyB8fCBvcHRzLmNhblJlbG9hZCAhPT0gZmFsc2U7XG5cbiAgICBpZiAoIXNpbGVudCkgY29uc29sZS5pbmZvKCdbcGxhdGZvcm1dIENoZWNraW5nIHJlbW90ZSBhcHAgdmVyc2lvbi4uLicpO1xuXG4gICAgY29uc3QgYWN0dWFsVmVyc2lvbiA9IHRoaXMuZW52aXJvbm1lbnQudmVyc2lvbjtcbiAgICBpZiAoaXNOaWxPckJsYW5rKGFjdHVhbFZlcnNpb24pKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFwiW3BsYXRmb3JtXSBNaXNzaW5nIHJlcXVpcmVkIHZhbHVlIGZvciAnZW52aXJvbm1lbnQudmVyc2lvbicuIENhbm5vdCBjaGVjayByZW1vdGUgYXBwIHZlcnNpb24uXCIpO1xuICAgICAgdGhpcy5jaGVja0FwcFZlcnNpb25UaW1lcj8udW5zdWJzY3JpYmUoKTsgLy8gU3RvcCB0aW1lciBpZiBleGlzdHNcbiAgICAgIHJldHVybjsgLy8gU2tpcFxuICAgIH1cblxuICAgIGNvbnN0IHJlbW90ZVZlcnNpb24gPSBhd2FpdCB0aGlzLm5ldHdvcmtTZXJ2aWNlLmdldEFwcFZlcnNpb24oKTtcbiAgICBpZiAoaXNOaWxPckJsYW5rKHJlbW90ZVZlcnNpb24pKSB7XG4gICAgICBpZiAocHJvZHVjdGlvbiAmJiAhc2lsZW50KSBjb25zb2xlLmVycm9yKCdbcGxhdGZvcm1dIENhbm5vdCBsb2FkIHJlbW90ZSBhcHAgdmVyc2lvbi4gU2tpcHBpbmcgdmVyc2lvbiBjaGVjaycpO1xuICAgICAgdGhpcy5jaGVja0FwcFZlcnNpb25UaW1lcj8udW5zdWJzY3JpYmUoKTsgLy8gU3RvcCB0aW1lciBpZiBleGlzdHNcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoVmVyc2lvblV0aWxzLmlzQ29tcGF0aWJsZShyZW1vdGVWZXJzaW9uLCBhY3R1YWxWZXJzaW9uKSkge1xuICAgICAgaWYgKCFzaWxlbnQpIGNvbnNvbGUuaW5mbyhgW3BsYXRmb3JtXSBDaGVja2luZyByZW1vdGUgYXBwIHZlcnNpb24gW09LXSB7cmVtb3RlOiAnJHtyZW1vdGVWZXJzaW9ufScsIGFjdHVhbDogJyR7YWN0dWFsVmVyc2lvbn0nfWApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIElmIG5ld2VyIHZlcnNpb24gZXhpc3RzXG4gICAgbGV0IHJlbG9hZFBhdGggPSBsb2NhdGlvbi5ocmVmLnJlcGxhY2UoL1smP112ZXJzaW9uPVteJl0qL2dpLCAnJyk7IC8vIFJlbW92ZSBvbGQgdmVyc2lvbiBpbiBxdWVyeSBwYXJhbXNcbiAgICByZWxvYWRQYXRoICs9IHJlbG9hZFBhdGguaW5kZXhPZignPycpID09PSAtMSA/ICc/JyA6ICcmJzsgLy8gQWRkIHF1ZXJ5IHBhcmFtIHNlcGFyYXRvclxuICAgIHJlbG9hZFBhdGggKz0gJ3ZlcnNpb249JyArIHJlbW90ZVZlcnNpb247IC8vIEFkZCB2ZXJzaW9uICh0byBhdm9pZCBhIHJlbG9hZCBpbmZpbml0ZSBsb29wKVxuXG4gICAgLy8gQWxyZWFkeSB0cnkgdG8gcmVsb2FkLCBidXQgdmVyc2lvbiBzdGlsbCBiYWRcbiAgICBpZiAocmVsb2FkUGF0aCA9PT0gbG9jYXRpb24uaHJlZikge1xuICAgICAgaWYgKGNhbkF1dG9SZWxvYWQpXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgYFtwbGF0Zm9ybV0gUmVsb2FkZWQgcGFnZSBmYWlsZWQsIGJlY2F1c2UgdmVyc2lvbiBzdGlsbCBtaXNtYXRjaCEgUGxlYXNlIGNoZWNrIHZlcnNpb24uYXBwdXAgZmlsZSAoZXhwZWN0ZWQgYXBwIHZlcnNpb246ICR7YWN0dWFsVmVyc2lvbn0pYFxuICAgICAgICApO1xuICAgICAgLy8gU3RvcCB0aW1lciwgdG8gYXZvaWQgaW5maW5pdGUgbG9vcFxuICAgICAgdGhpcy5jaGVja0FwcFZlcnNpb25UaW1lcj8udW5zdWJzY3JpYmUoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zb2xlLndhcm4oYFtwbGF0Zm9ybV0gTW9yZSByZWNlbnQgdmVyc2lvbiBkZXRlY3RlZCAocmVtb3RlOiAke3JlbW90ZVZlcnNpb259LCBhY3R1YWw6ICR7YWN0dWFsVmVyc2lvbn1gKTtcblxuICAgIC8vIEF1dG8gcmVsb2FkXG4gICAgaWYgKGNhbkF1dG9SZWxvYWQpIHtcbiAgICAgIGNvbnNvbGUuaW5mbygnW3BsYXRmb3JtXSBXaWxsIHJlbG9hZGluZyBhdCAnICsgcmVsb2FkUGF0aCk7XG4gICAgICBsb2NhdGlvbi5ocmVmID0gcmVsb2FkUGF0aDtcbiAgICAgIC8vIEFwcCBzdG9wXG4gICAgfVxuICAgIC8vIEFzayB1c2VyIHRvIHJlbG9hZFxuICAgIGVsc2Uge1xuICAgICAgLy8gU3RvcCB0aW1lciwgdG8gYXZvaWQgaW5maW5pdGUgbG9vcFxuICAgICAgdGhpcy5jaGVja0FwcFZlcnNpb25UaW1lcj8udW5zdWJzY3JpYmUoKTtcblxuICAgICAgLy8gRGlzcGxheSBhIHJlbG9hZCB0b2FzdFxuICAgICAgYXdhaXQgdGhpcy5zaG93VG9hc3Qoe1xuICAgICAgICBtZXNzYWdlOiAnQ09ORklSTS5SRUxPQURfQVBQJyxcbiAgICAgICAgbWVzc2FnZVBhcmFtczogeyB2ZXJzaW9uOiByZW1vdGVWZXJzaW9uLCBuYW1lOiB0aGlzLmVudmlyb25tZW50Lm5hbWUgfSxcbiAgICAgICAgdHlwZTogJ2luZm8nLFxuICAgICAgICBkdXJhdGlvbjogLTEsXG4gICAgICAgIHNob3dDbG9zZUJ1dHRvbjogdHJ1ZSxcbiAgICAgICAgYnV0dG9uczogW1xuICAgICAgICAgIC8vIFJlbG9hZCBidXR0b25cbiAgICAgICAgICB7XG4gICAgICAgICAgICB0ZXh0OiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdDT01NT04uQlROX1VQREFURScpLFxuICAgICAgICAgICAgc2lkZTogJ2VuZCcsXG4gICAgICAgICAgICBoYW5kbGVyOiAoKSA9PiB7XG4gICAgICAgICAgICAgIGxvY2F0aW9uLmhyZWYgPSByZWxvYWRQYXRoO1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBzaG93VG9hc3Qob3B0czogU2hvd1RvYXN0T3B0aW9ucyk6IFByb21pc2U8SFRNTElvblRvYXN0RWxlbWVudD4ge1xuICAgIGlmICghdGhpcy50b2FzdENvbnRyb2xsZXIpIHRocm93IG5ldyBFcnJvcihcIk1pc3NpbmcgdG9hc3RDb250cm9sbGVyIGluIGNvbXBvbmVudCdzIGNvbnN0cnVjdG9yXCIpO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT5cbiAgICAgIFRvYXN0cy5zaG93KHRoaXMudG9hc3RDb250cm9sbGVyLCB0aGlzLnRyYW5zbGF0ZSwge1xuICAgICAgICAuLi5vcHRzLFxuICAgICAgICBvbldpbGxQcmVzZW50OiAodCkgPT4gcmVzb2x2ZSh0KSxcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBvblN0YXJ0dXBFcnJvcihlcnIpIHtcbiAgICBjb25zb2xlLmVycm9yKCdbcGxhdGZvcm1dIEZhaWxlZCBzdGFydGluZyB0aGUgcGxhdGZvcm0hICcgKyBKU09OLnN0cmluZ2lmeShlcnIpKTtcbiAgICBsZXQgbWVzc2FnZSA9IChlcnIgJiYgZXJyLm1lc3NhZ2UpIHx8IGVycjtcbiAgICBjb25zdCBkZXRhaWxzTWVzc2FnZSA9IGVyciAmJiAoKGVyci5kZXRhaWxzICYmIGVyci5kZXRhaWxzLm1lc3NhZ2UpIHx8IGVyci5kZXRhaWxzKTtcbiAgICAvLyBTZXQgc3BlY2lmaWMgZXJyb3Igd2hlbiBGaXJlZm94IGlzIGluIHByaXZhdGUgbW9kZSBvciBoaXN0b3J5IG5ldmVyIHJlbWVtYmVyZWQgKHNlZSBNYW50aXMgSWZyZW1lciAjNTY0NDEpXG4gICAgaWYgKGVyci5jb2RlID09PSAxMSAmJiB0aGlzLmNka1BsYXRmb3JtLkZJUkVGT1gpIHtcbiAgICAgIG1lc3NhZ2UgPSAnRVJST1IuRklSRUZPWF9OT19TVE9SQUdFJztcbiAgICB9XG4gICAgaWYgKHRoaXMudHJhbnNsYXRlKSB7XG4gICAgICBtZXNzYWdlID0gYXdhaXQgdGhpcy50cmFuc2xhdGUuaW5zdGFudChtZXNzYWdlKTtcbiAgICAgIGlmIChlcnIgJiYgZXJyLmNvZGUpIHtcbiAgICAgICAgbWVzc2FnZSArPSBgIHtjb2RlOiAke2Vyci5jb2RlfX1gO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBtZXNzYWdlID0gYEZhdGFsIGVycm9yOiBQbGVhc2UgY29udGFjdCB5b3VyIGFkbWluaXN0cmF0b3IuXFxuXFxue2NvZGU6ICR7KGVyciAmJiBlcnIuY29kZSkgfHwgJ251bGwnfSwgbWVzc2FnZTogXCIke21lc3NhZ2V9XCJ9YDtcbiAgICB9XG4gICAgaWYgKHRoaXMudG9hc3RDb250cm9sbGVyKSB7XG4gICAgICBpZiAoZGV0YWlsc01lc3NhZ2UpIHtcbiAgICAgICAgbWVzc2FnZSArPSBgPGJyLz48c21hbGw+JHtkZXRhaWxzTWVzc2FnZX08L3NtYWxsPmA7XG4gICAgICB9XG4gICAgICBhd2FpdCB0aGlzLnNob3dUb2FzdCh7XG4gICAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICAgIGR1cmF0aW9uOiAtMSxcbiAgICAgICAgc2hvd0Nsb3NlQnV0dG9uOiB0cnVlLFxuICAgICAgICBtZXNzYWdlLFxuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmICh3aW5kb3cpIHtcbiAgICAgIGlmIChkZXRhaWxzTWVzc2FnZSkge1xuICAgICAgICBtZXNzYWdlICs9IGBcXG5cXG57Y2F1c2U6IFwiJHtkZXRhaWxzTWVzc2FnZX1cIn1gO1xuICAgICAgfVxuICAgICAgd2luZG93LmFsZXJ0KG1lc3NhZ2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmVycm9yKG1lc3NhZ2UpO1xuICAgICAgaWYgKGVyciAmJiBlcnIuZGV0YWlscykgY29uc29sZS5lcnJvcignY2F1c2UnLCBlcnIuZGV0YWlscyk7XG4gICAgfVxuICB9XG59XG4iXX0=
|
|
611
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxhdGZvcm0uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29yZS9zZXJ2aWNlcy9wbGF0Zm9ybS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQVU3RCxPQUFPLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxlQUFlLEVBQUUsU0FBUyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFNUYsT0FBTyxFQUFvQixNQUFNLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUdyRSxPQUFPLEVBQUUsZUFBZSxFQUFFLElBQUksRUFBYyxFQUFFLEVBQWdCLEtBQUssRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNsRixPQUFPLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN2RCxPQUFPLEVBQWUsV0FBVyxFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFFbkYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFM0QsT0FBTyxFQUErQixzQkFBc0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ25HLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDN0QsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzdELE9BQU8sRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDckUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsU0FB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b20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUGxhdGZvcm0sIFRvYXN0Q29udHJvbGxlciB9IGZyb20gJ0Bpb25pYy9hbmd1bGFyJztcbmltcG9ydCB7IE5ldHdvcmtTZXJ2aWNlIH0gZnJvbSAnLi9uZXR3b3JrLnNlcnZpY2UnO1xuaW1wb3J0IHsgQXV0aFRva2VuVHlwZSB9IGZyb20gJy4vbmV0d29yay50eXBlcyc7XG5pbXBvcnQgeyBQbGF0Zm9ybXMgfSBmcm9tICdAaW9uaWMvY29yZSc7XG5pbXBvcnQgeyBMb2NhbFNldHRpbmdzU2VydmljZSB9IGZyb20gJy4vbG9jYWwtc2V0dGluZ3Muc2VydmljZSc7XG5pbXBvcnQgeyBDYWNoZVNlcnZpY2UgfSBmcm9tICdpb25pYy1jYWNoZSc7XG5pbXBvcnQgeyBBdWRpb1Byb3ZpZGVyIH0gZnJvbSAnLi4vLi4vc2hhcmVkL2F1ZGlvL2F1ZGlvJztcbmltcG9ydCB7IFBsYXRmb3JtIGFzIENka1BsYXRmb3JtIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3BsYXRmb3JtJztcblxuaW1wb3J0IHsgaXNOaWxPckJsYW5rLCBpc05vdE5pbCwgaXNOb3ROaWxPckJsYW5rLCB0b0Jvb2xlYW4gfSBmcm9tICcuLi8uLi9zaGFyZWQvZnVuY3Rpb25zJztcbmltcG9ydCB7IEVudGl0aWVzU3RvcmFnZSB9IGZyb20gJy4vc3RvcmFnZS9lbnRpdGllcy1zdG9yYWdlLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2hvd1RvYXN0T3B0aW9ucywgVG9hc3RzIH0gZnJvbSAnLi4vLi4vc2hhcmVkL3RvYXN0L3RvYXN0cyc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBBY2NvdW50U2VydmljZSB9IGZyb20gJy4vYWNjb3VudC5zZXJ2aWNlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgZnJvbSwgT2JzZXJ2YWJsZSwgb2YsIFN1YnNjcmlwdGlvbiwgdGltZXIgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNhdGNoRXJyb3IsIHNraXAsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEVudmlyb25tZW50LCBFTlZJUk9OTUVOVCB9IGZyb20gJy4uLy4uLy4uL2Vudmlyb25tZW50cy9lbnZpcm9ubWVudC5jbGFzcyc7XG5pbXBvcnQgeyBDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi9jb25maWcuc2VydmljZSc7XG5pbXBvcnQgeyBDT1JFX0NPTkZJR19PUFRJT05TIH0gZnJvbSAnLi9jb25maWcvY29yZS5jb25maWcnO1xuaW1wb3J0IHsgTW9tZW50RGF0ZUFkYXB0ZXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC1tb21lbnQtYWRhcHRlcic7XG5pbXBvcnQgeyBEb3dubG9hZGVyLCBEb3dubG9hZFJlcXVlc3QsIE5vdGlmaWNhdGlvblZpc2liaWxpdHkgfSBmcm9tICdAaW9uaWMtbmF0aXZlL2Rvd25sb2FkZXIvbmd4JztcbmltcG9ydCB7IFN0YXJ0YWJsZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zaGFyZWQvc2VydmljZXMvc3RhcnRhYmxlLXNlcnZpY2UuY2xhc3MnO1xuaW1wb3J0IHsgaXNNb2JpbGUsIGlzV2luZG93cyB9IGZyb20gJy4uLy4uL3NoYXJlZC9wbGF0Zm9ybXMnO1xuaW1wb3J0IHsgVmVyc2lvblV0aWxzIH0gZnJvbSAnLi4vLi4vc2hhcmVkL3ZlcnNpb24vdmVyc2lvbnMnO1xuaW1wb3J0IHsgRmlsZXNVdGlscywgTWltZVR5cGVzIH0gZnJvbSAnLi4vLi4vc2hhcmVkL2ZpbGUvZmlsZS51dGlscyc7XG5pbXBvcnQgeyBVcmlVdGlscyB9IGZyb20gJy4uLy4uL3NoYXJlZC9maWxlL3VyaS51dGlscyc7XG5pbXBvcnQgeyBTcGxhc2hTY3JlZW4gfSBmcm9tICdAY2FwYWNpdG9yL3NwbGFzaC1zY3JlZW4nO1xuaW1wb3J0IHsgU3RhdHVzQmFyIH0gZnJvbSAnQGNhcGFjaXRvci9zdGF0dXMtYmFyJztcbmltcG9ydCB7IEJyb3dzZXIsIE9wZW5PcHRpb25zIH0gZnJvbSAnQGNhcGFjaXRvci9icm93c2VyJztcbmltcG9ydCB7IEtleWJvYXJkIH0gZnJvbSAnQGNhcGFjaXRvci9rZXlib2FyZCc7XG5pbXBvcnQgeyBDYXBhY2l0b3JQbHVnaW5zIH0gZnJvbSAnLi4vLi4vc2hhcmVkL2NhcGFjaXRvci9wbHVnaW5zJztcbmltcG9ydCB7IGxvY2FsZSBhcyBtb21lbnRMb2NhbGUgfSBmcm9tICdtb21lbnQnO1xuaW1wb3J0IHsgSUxvZ2dlciwgSUxvZ2dpbmdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2hhcmVkL2xvZ2dpbmcvbG9nZ2VyLm1vZGVsJztcbmltcG9ydCB7IEFQUF9MT0dHSU5HX1NFUlZJQ0UgfSBmcm9tICcuLi8uLi9zaGFyZWQvbG9nZ2luZy9sb2dnaW5nLXNlcnZpY2UuY2xhc3MnO1xuaW1wb3J0IHsgQ2xpcGJvYXJkIGFzIENka0NsaXBib2FyZCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jbGlwYm9hcmQnO1xuaW1wb3J0IHsgQ2xpcGJvYXJkIH0gZnJvbSAnQGNhcGFjaXRvci9jbGlwYm9hcmQnO1xuaW1wb3J0IHsgV3JpdGVPcHRpb25zIH0gZnJvbSAnQGNhcGFjaXRvci9jbGlwYm9hcmQvZGlzdC9lc20vZGVmaW5pdGlvbnMnO1xuXG5leHBvcnQgY29uc3QgQW5kcm9pZE9zRW52aXJvbm1lbnQgPSBPYmplY3QuZnJlZXplKHtcbiAgRElSRUNUT1JZX0RPV05MT0FEUzogJ0Rvd25sb2FkJyxcbiAgRElSRUNUT1JZX0RPV05MT0FEU19PTEQ6ICdEb3dubG9hZHMnLCAvLyBPbGQgbmFtZSwgZm9yIG9sZGVyIEFuZHJvaWQgdmVyc2lvblxuICAvLyBUT0RPOiBmaW5kIHZhbHVlIGZvciB0aGlzLiBTZWUgaHR0cHM6Ly9kZXZlbG9wZXIuYW5kcm9pZC5jb20vcmVmZXJlbmNlL2FuZHJvaWQvb3MvRW52aXJvbm1lbnQjZ2V0RXh0ZXJuYWxTdG9yYWdlU3RhdGUoamF2YS5pby5GaWxlKVxuICAvLyBESVJFQ1RPUllfTVVTSUMsXG4gIC8vIERJUkVDVE9SWV9QT0RDQVNUUyxcbiAgLy8gRElSRUNUT1JZX1JJTkdUT05FUyxcbiAgLy8gRElSRUNUT1JZX0FMQVJNUyxcbiAgLy8gRElSRUNUT1JZX05PVElGSUNBVElPTlMsXG4gIC8vIERJUkVDVE9SWV9QSUNUVVJFUyxcbiAgLy8gRElSRUNUT1JZX01PVklFUyxcbiAgLy8gRElSRUNUT1JZX0RDSU0sXG4gIC8vIERJUkVDVE9SWV9ET0NVTUVOVFMsXG4gIC8vIERJUkVDVE9SWV9BVURJT0JPT0tTLFxufSk7XG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgUGxhdGZvcm1TZXJ2aWNlIGV4dGVuZHMgU3RhcnRhYmxlU2VydmljZSB7XG4gIHByaXZhdGUgX2xvZ2dlcjogSUxvZ2dlcjtcbiAgcHJpdmF0ZSBfbW9iaWxlOiBib29sZWFuO1xuICBwcml2YXRlIF9kZXNrdG9wOiBib29sZWFuO1xuICBwcml2YXRlIF9jb3Jkb3ZhOiBib29sZWFuO1xuICBwcml2YXRlIF9jYXBhY2l0b3I6IGJvb2xlYW47XG4gIHByaXZhdGUgX2FuZHJvaWQ6IGJvb2xlYW47XG4gIHByaXZhdGUgX2lvczogYm9vbGVhbjtcblxuICBidXN5U3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBpb25pY1BsYXRmb3JtOiBQbGF0Zm9ybSxcbiAgICBwcml2YXRlIGNka1BsYXRmb3JtOiBDZGtQbGF0Zm9ybSxcbiAgICBwcml2YXRlIGNka0NsaXBib2FyZDogQ2RrQ2xpcGJvYXJkLFxuICAgIHByaXZhdGUgdG9hc3RDb250cm9sbGVyOiBUb2FzdENvbnRyb2xsZXIsXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBkYXRlQWRhcHRlcjogTW9tZW50RGF0ZUFkYXB0ZXIsXG4gICAgcHJpdmF0ZSBlbnRpdGllc1N0b3JhZ2U6IEVudGl0aWVzU3RvcmFnZSxcbiAgICBwcml2YXRlIHNldHRpbmdzOiBMb2NhbFNldHRpbmdzU2VydmljZSxcbiAgICBwcml2YXRlIG5ldHdvcmtTZXJ2aWNlOiBOZXR3b3JrU2VydmljZSxcbiAgICBwcml2YXRlIGFjY291bnRTZXJ2aWNlOiBBY2NvdW50U2VydmljZSxcbiAgICBwcml2YXRlIGNvbmZpZ1NlcnZpY2U6IENvbmZpZ1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBjYWNoZTogQ2FjaGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgYXVkaW9Qcm92aWRlcjogQXVkaW9Qcm92aWRlcixcbiAgICBASW5qZWN0KEVOVklST05NRU5UKSBwcm90ZWN0ZWQgZW52aXJvbm1lbnQ6IEVudmlyb25tZW50LFxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoQVBQX0xPR0dJTkdfU0VSVklDRSkgbG9nZ2luZ1NlcnZpY2U6IElMb2dnaW5nU2VydmljZSxcbiAgICBAT3B0aW9uYWwoKSBwcml2YXRlIGRvd25sb2FkZXI6IERvd25sb2FkZXJcbiAgKSB7XG4gICAgc3VwZXIoaW9uaWNQbGF0Zm9ybSk7XG5cbiAgICB0aGlzLl9sb2dnZXIgPSBsb2dnaW5nU2VydmljZT8uZ2V0TG9nZ2VyKCdwbGF0Zm9ybScpO1xuICAgIHRoaXMuX2RlYnVnID0gIWVudmlyb25tZW50LnByb2R1Y3Rpb247XG4gICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKCdbcGxhdGZvcm1dIENyZWF0aW5nIHNlcnZpY2UnKTtcblxuICAgIGlmICh0aGlzLl9sb2dnZXIpIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5kZWJ1ZygnY3RvcicsICdDcmVhdGluZyBzZXJ2aWNlJyk7XG4gICAgICBpb25pY1BsYXRmb3JtLnBhdXNlLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdjdG9yJywgJ1BhdXNlIGFwcCcpO1xuICAgICAgfSk7XG4gICAgICBpb25pY1BsYXRmb3JtLnJlc3VtZS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnY3RvcicsICdSZXN1bWUgYXBwJyk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBfZG93bmxvYWRpbmdKb2JzOiBNYXA8c3RyaW5nLCBPYnNlcnZhYmxlPHN0cmluZz4+ID0gbmV3IE1hcCgpO1xuXG4gIHByaXZhdGUgY2hlY2tBcHBWZXJzaW9uVGltZXI6IFN1YnNjcmlwdGlvbjtcblxuICBpcyhwbGF0Zm9ybU5hbWU6IFBsYXRmb3Jtcyk6IGJvb2xlYW4ge1xuICAgIHN3aXRjaCAocGxhdGZvcm1OYW1lKSB7XG4gICAgICBjYXNlICdtb2JpbGUnOlxuICAgICAgICAvLyBFeGNsdWRlIFdpbmRvd3MgdG91Y2ggc2NyZWVucyAtIHNlZSBzdW1hcmlzLWFwcCBpc3N1ZXMgIzMyMyBhbmQgIzM0NlxuICAgICAgICByZXR1cm4gaXNNb2JpbGUod2luZG93KTtcbiAgICAgIGNhc2UgJ21vYmlsZXdlYic6XG4gICAgICAgIC8vIEV4Y2x1ZGUgV2luZG93cyB0b3VjaCBzY3JlZW5zIC0gc2VlIHN1bWFyaXMtYXBwIGlzc3VlcyAjMzIzIGFuZCAjMzQ2XG4gICAgICAgIHJldHVybiB0aGlzLmlvbmljUGxhdGZvcm0uaXMocGxhdGZvcm1OYW1lKSAmJiAhaXNXaW5kb3dzKHdpbmRvdyk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gdGhpcy5pb25pY1BsYXRmb3JtLmlzKHBsYXRmb3JtTmFtZSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IG1vYmlsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gaXNOb3ROaWwodGhpcy5fbW9iaWxlKSA/IHRoaXMuX21vYmlsZSA6IHRoaXMuaXMoJ21vYmlsZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNheSBpZiBvcGVuZWQgaGFzIGJlZW4gb3BlbmVkIGluc2lkZSBhbiBBbmRyb2lkIG9yIGlPcyBBcHAuXG4gICAqIFRoaXMgaXMgdXNlZCB0byBrbm93biBpZiB0aGVyZSBpcyBjb3Jkb3ZhIGZlYXR1cmVzXG4gICAqL1xuICBpc0NhcGFjaXRvcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fY2FwYWNpdG9yO1xuICB9XG5cbiAgLyoqXG4gICAqIFNheSBpZiBvcGVuZWQgaGFzIGJlZW4gb3BlbmVkIGluc2lkZSBhbiBBbmRyb2lkIG9yIGlPcyBBcHAuXG4gICAqIFRoaXMgaXMgdXNlZCB0byBrbm93biBpZiB0aGVyZSBpcyBjb3Jkb3ZhIGZlYXR1cmVzXG4gICAqL1xuICBpc0NvcmRvdmEoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2NvcmRvdmE7XG4gIH1cblxuICBpc0FuZHJvaWRDb3Jkb3ZhKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAodGhpcy5fYW5kcm9pZCAmJiB0aGlzLl9jb3Jkb3ZhKSB8fCBmYWxzZTtcbiAgfVxuXG4gIGlzSU9TQ29yZG92YSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKHRoaXMuX2lvcyAmJiB0aGlzLl9jb3Jkb3ZhKSB8fCBmYWxzZTtcbiAgfVxuXG4gIGlzQW5kcm9pZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fYW5kcm9pZCB8fCBmYWxzZTtcbiAgfVxuXG4gIGlzSU9TKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9pb3MgfHwgZmFsc2U7XG4gIH1cblxuICBpc01hY09TRGVza3RvcCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fZGVza3RvcCAmJiB0aGlzLmlzQ29yZG92YSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIElzIGEgbmF0aXZlIEFwcCAoYW5kIE5PVCBhIG1vYmlsZSB3ZWIpXG4gICAqL1xuICBpc0FwcCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc0FuZHJvaWRDb3Jkb3ZhKCkgfHwgdGhpcy5pc0lPU0NvcmRvdmEoKTtcbiAgfVxuXG4gIGlzV2ViKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy5pc0FwcCgpO1xuICB9XG5cbiAgaXNNb2JpbGVXZWIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMubW9iaWxlICYmIHRoaXMuaXNXZWIoKTtcbiAgfVxuXG4gIGdldCBjYW5Eb3dubG9hZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5kb3dubG9hZGVyICYmIHRoaXMuaXNBbmRyb2lkQ29yZG92YSgpO1xuICB9XG5cbiAgZ2V0IGNhbk9wZW5GaWxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTsgLy8gVE9ETzogZml4bWUgdXNpbmcgQGNhcGFjaXRvci9maWxlc3lzdGVtID9cbiAgfVxuXG4gIHdpZHRoKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuaW9uaWNQbGF0Zm9ybS53aWR0aCgpO1xuICB9XG5cbiAgaGVpZ2h0KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuaW9uaWNQbGF0Zm9ybS5oZWlnaHQoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBuZ09uU3RhcnQoKTogUHJvbWlzZTxhbnk+IHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIHRoaXMuYWNjb3VudFNlcnZpY2UudG9rZW5UeXBlID0gdW5kZWZpbmVkO1xuICAgIGNvbnNvbGUuaW5mbygnW3BsYXRmb3JtXSBTdGFydGluZyBwbGF0Zm9ybS4uLicpO1xuICAgIHRoaXMuX2xvZ2dlcj8uaW5mbygnbmdPblN0YXJ0JywgJ1N0YXJ0aW5nIHBsYXRmb3JtLi4uJyk7XG5cbiAgICB0cnkge1xuICAgICAgdGhpcy5fbW9iaWxlID0gdGhpcy5pcygnbW9iaWxlJyk7XG4gICAgICB0aGlzLl9kZXNrdG9wID0gdGhpcy5pcygnZGVza3RvcCcpO1xuICAgICAgdGhpcy5fY29yZG92YSA9IHRoaXMuaXMoJ2NvcmRvdmEnKTtcbiAgICAgIHRoaXMuX2NhcGFjaXRvciA9IHRoaXMuaXMoJ2NhcGFjaXRvcicpO1xuICAgICAgdGhpcy5fYW5kcm9pZCA9IHRoaXMuaXMoJ2FuZHJvaWQnKTtcbiAgICAgIHRoaXMuX2lvcyA9IHRoaXMuaXMoJ2lvcycpO1xuXG4gICAgICBjb25zdCBsb2dNZXNzYWdlID0gYERldGVjdGVkIHttb2JpbGU6ICR7dGhpcy5fbW9iaWxlfSwgZGVza3RvcDogJHt0aGlzLl9kZXNrdG9wfSwgY29yZG92YTogJHt0aGlzLl9jb3Jkb3ZhfSwgY2FwYWNpdG9yOiAke3RoaXMuX2NhcGFjaXRvcn0sIGFuZHJvaWQ6ICR7dGhpcy5fYW5kcm9pZH0sIGlvczogJHt0aGlzLl9pb3N9fWA7XG4gICAgICBjb25zb2xlLmluZm8oJ1twbGF0Zm9ybV0gJyArIGxvZ01lc3NhZ2UpO1xuICAgICAgdGhpcy5fbG9nZ2VyPy5pbmZvKCduZ09uU3RhcnQnLCBsb2dNZXNzYWdlKTtcblxuICAgICAgLy8gQ29uZmlndXJlIHRoZW1lXG4gICAgICBhd2FpdCB0aGlzLmNvbmZpZ3VyZVRoZW1lKHRoaXMuX21vYmlsZSk7XG5cbiAgICAgIC8vIENvbmZpZ3VyZSBDYXBhY2l0b3IgcGx1Z2luc1xuICAgICAgYXdhaXQgdGhpcy5jb25maWd1cmVDYXBhY2l0b3JQbHVnaW5zKCk7XG5cbiAgICAgIC8vIENvbmZpZ3VyZSB0cmFuc2xhdGlvblxuICAgICAgdGhpcy5jb25maWd1cmVUcmFuc2xhdGUoKTtcblxuICAgICAgLy8gQ29uZmlndXJlIGNhY2hlXG4gICAgICB0aGlzLmNvbmZpZ3VyZUNhY2hlKCk7XG5cbiAgICAgIC8vIFN0YXJ0IHJvb3Qgc2VydmljZXNcbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKFt0aGlzLmVudGl0aWVzU3RvcmFnZS5yZWFkeSgpLCB0aGlzLnNldHRpbmdzLnJlYWR5KCksIHRoaXMubmV0d29ya1NlcnZpY2UucmVhZHkoKSwgdGhpcy5hdWRpb1Byb3ZpZGVyLnJlYWR5KCldKTtcblxuICAgICAgLy8gQ2hlY2sgaWYgd2ViIGFwcCBoYXMgdXBkYXRlLCBhbmQgcmVsb2FkIHBhZ2UgaWYgbmVlZFxuICAgICAgaWYgKHRoaXMuaXNXZWIoKSAmJiB0aGlzLmVudmlyb25tZW50LnByb2R1Y3Rpb24pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5jaGVja0FwcFZlcnNpb24oeyBjYW5SZWxvYWQ6IHRydWUgfSk7XG4gICAgICB9XG5cbiAgICAgIC8vIFVwZGF0ZSBjYWNoZSBjb25maWd1cmF0aW9uIHdoZW4gbmV0d29yayBjaGFuZ2VkXG4gICAgICB0aGlzLnJlZ2lzdGVyU3Vic2NyaXB0aW9uKFxuICAgICAgICB0aGlzLm5ldHdvcmtTZXJ2aWNlLm9uTmV0d29ya1N0YXR1c0NoYW5nZXNcbiAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgIHNraXAoMSkgLy8gQWxyZWFkeSBkb25lIG9uY2UsIHNvIHdlIHNraXAgdGhlIGZpcnN0IGV2ZW50XG4gICAgICAgICAgKVxuICAgICAgICAgIC5zdWJzY3JpYmUoKHR5cGUpID0+IHRoaXMuY29uZmlndXJlQ2FjaGUodHlwZSAhPT0gJ25vbmUnKSlcbiAgICAgICk7XG5cbiAgICAgIGNvbnNvbGUuaW5mbyhcbiAgICAgICAgYFtwbGF0Zm9ybV0gU3RhcnRpbmcgcGxhdGZvcm0gW09LXSB7bW9iaWxlOiAke3RoaXMuX21vYmlsZX0sIGNhcGFjaXRvcjogJHt0aGlzLl9jYXBhY2l0b3J9LCB3ZWI6ICR7dGhpcy5pc1dlYigpfSwgZG93bmxvYWRlcjogJHt0aGlzLmNhbkRvd25sb2FkfX0gaW4gJHtEYXRlLm5vdygpIC0gbm93fW1zYFxuICAgICAgKTtcblxuICAgICAgLy8gUGFzcyBhdXRoIHRva2VuXG4gICAgICB0aGlzLnJlZ2lzdGVyU3Vic2NyaXB0aW9uKFxuICAgICAgICB0aGlzLmNvbmZpZ1NlcnZpY2UuY29uZmlnLnN1YnNjcmliZSgoY29uZmlnKSA9PiB7XG4gICAgICAgICAgaWYgKCFjb25maWcpIHJldHVybjsgLy8gU2tpcFxuXG4gICAgICAgICAgLy8gVXBkYXRlIGF1dGhlbnRpY2F0aW9uIHR5cGVcbiAgICAgICAgICBjb25zdCB0b2tlblR5cGU6IEF1dGhUb2tlblR5cGUgPSBjb25maWcuZ2V0UHJvcGVydHkoQ09SRV9DT05GSUdfT1BUSU9OUy5BVVRIX1RPS0VOX1RZUEUpIGFzIEF1dGhUb2tlblR5cGU7XG4gICAgICAgICAgaWYgKGlzTm90TmlsT3JCbGFuayh0b2tlblR5cGUpICYmIHRoaXMuYWNjb3VudFNlcnZpY2UudG9rZW5UeXBlICE9PSB0b2tlblR5cGUpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuaW5mbyhgW3BsYXRmb3JtXSBVc2luZyBhdXRoIHRva2VuIHR5cGUgeyR7dG9rZW5UeXBlfX1gKTtcbiAgICAgICAgICAgIHRoaXMuYWNjb3VudFNlcnZpY2UudG9rZW5UeXBlID0gdG9rZW5UeXBlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIEVuYWJsZSBhdXRoIEFQSSB1c2luZyB0b2tlbnNcbiAgICAgICAgICBjb25zdCBhdXRoQXBpRW5hYmxlZCA9IGNvbmZpZy5nZXRQcm9wZXJ0eUFzQm9vbGVhbihDT1JFX0NPTkZJR19PUFRJT05TLkFVVEhfQVBJX1RPS0VOX0VOQUJMRUQpO1xuICAgICAgICAgIGlmIChpc05vdE5pbChhdXRoQXBpRW5hYmxlZCkgJiYgYXV0aEFwaUVuYWJsZWQgIT09IHRoaXMuYWNjb3VudFNlcnZpY2UuYXBpVG9rZW5FbmFibGVkKSB7XG4gICAgICAgICAgICBjb25zb2xlLmluZm8oYFtwbGF0Zm9ybV0gVXNpbmcgYXV0aCBBUEkgdG9rZW5zID8gJHthdXRoQXBpRW5hYmxlZH19YCk7XG4gICAgICAgICAgICB0aGlzLmFjY291bnRTZXJ2aWNlLmFwaVRva2VuRW5hYmxlZCA9IGF1dGhBcGlFbmFibGVkO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICk7XG5cbiAgICAgIGlmICh0aGlzLl9tb2JpbGUgfHwgdGhpcy5pc01hY09TRGVza3RvcCgpKSB7XG4gICAgICAgIC8vIEhpZGUgdGhlIHNwbGFzaHNjcmVlbiAoaWYgbW9iaWxlKSAtIGFmdGVyIDFzIC0gYW5kIHBsYXkgc3RhcnQgc291bmRcbiAgICAgICAgc2V0VGltZW91dChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgYXdhaXQgU3BsYXNoU2NyZWVuLmhpZGUoKTtcblxuICAgICAgICAgIC8vIFBsYXkgc3RhcnR1cCBzb3VuZFxuICAgICAgICAgIGlmICh0aGlzLl9tb2JpbGUpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuYXVkaW9Qcm92aWRlci5wbGF5U3RhcnR1cFNvdW5kKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LCAxMDAwKTtcbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgaWYgbmV3IHZlcnNpb24sIGV2ZXJ5IDEgbWluXG4gICAgICBjb25zdCBjaGVja0ludGVydmFsTXMgPSAodGhpcy5lbnZpcm9ubWVudC5jaGVja0FwcFZlcnNpb25JbnRlcnZhbEluU2Vjb25kcyB8fCAwKSAqIDEwMDA7XG4gICAgICBpZiAodGhpcy5pc1dlYigpICYmIHRoaXMuZW52aXJvbm1lbnQucHJvZHVjdGlvbiAmJiBjaGVja0ludGVydmFsTXMgPiAwKSB7XG4gICAgICAgIHRoaXMuY2hlY2tBcHBWZXJzaW9uVGltZXI/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIGNvbnN0IHN1YnNjcmlwdGlvbiA9IHRpbWVyKGNoZWNrSW50ZXJ2YWxNcywgY2hlY2tJbnRlcnZhbE1zKS5zdWJzY3JpYmUoKF8pID0+XG4gICAgICAgICAgdGhpcy5jaGVja0FwcFZlcnNpb24oeyBzaWxlbnQ6IHRydWUsIGNhblJlbG9hZDogZmFsc2UgLypkbyBOT1QgYXV0byByZWxvYWQsIHdoZW4gYXBwIGlzIHN0YXJ0ZWQqLyB9KVxuICAgICAgICApO1xuICAgICAgICB0aGlzLmNoZWNrQXBwVmVyc2lvblRpbWVyID0gc3Vic2NyaXB0aW9uO1xuICAgICAgICB0aGlzLnJlZ2lzdGVyU3Vic2NyaXB0aW9uKHN1YnNjcmlwdGlvbik7XG4gICAgICAgIHN1YnNjcmlwdGlvbi5hZGQoKCkgPT4gdGhpcy51bnJlZ2lzdGVyU3Vic2NyaXB0aW9uKHN1YnNjcmlwdGlvbikpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgLy8gTWFuYWdlIHN0YXJ0dXAgZXJyb3JcbiAgICAgIHJldHVybiB0aGlzLm9uU3RhcnR1cEVycm9yKGVycik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFVzZWQgdG8gc2hvdyBhIGJhY2tkcm9wIHdoZW4gcGxhdGZvcm0gaXMgYnVzeSAoZS5nLiBmcm9tIHRoZSBhcHAuY29tcG9uZW50LnRzKVxuICAgKi9cbiAgbWFya0FzQnVzeSgpIHtcbiAgICBpZiAoIXRoaXMuYnVzeVN1YmplY3QudmFsdWUpIHtcbiAgICAgIHRoaXMuYnVzeVN1YmplY3QubmV4dCh0cnVlKTtcbiAgICB9XG4gIH1cblxuICBtYXJrQXNOb3RCdXN5KCkge1xuICAgIGlmICh0aGlzLmJ1c3lTdWJqZWN0LnZhbHVlKSB7XG4gICAgICB0aGlzLmJ1c3lTdWJqZWN0Lm5leHQoZmFsc2UpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIG9wZW4odXJsOiBzdHJpbmcsIG9wdHM/OiBPbWl0PE9wZW5PcHRpb25zLCAndXJsJz4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zb2xlLmluZm8oYFtwbGF0Zm9ybV0gT3BlbmluZyBsaW5rOiAke3VybH1gKTtcbiAgICBpZiAodGhpcy5fbW9iaWxlICYmIHRoaXMuX2NhcGFjaXRvcikge1xuICAgICAgYXdhaXQgQnJvd3Nlci5vcGVuKHsgdXJsLCAuLi5vcHRzIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB3aW5kb3cub3Blbih1cmwsIG9wdHM/LndpbmRvd05hbWUpO1xuICAgIH1cbiAgfVxuXG4gIGdldERvd25sb2FkaW5nSm9iKHVyaTogc3RyaW5nKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5fZG93bmxvYWRpbmdKb2JzLmdldCh1cmkpO1xuICB9XG5cbiAgZG93bmxvYWQocmVxdWVzdDogeyB1cmk6IHN0cmluZzsgZmlsZW5hbWU/OiBzdHJpbmcgfSAmIFBhcnRpYWw8RG93bmxvYWRSZXF1ZXN0Pik6IE9ic2VydmFibGU8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XG4gICAgaWYgKCFyZXF1ZXN0IHx8ICFyZXF1ZXN0LnVyaSkgdGhyb3cgbmV3IEVycm9yKFwiTWlzc2luZyBhcmd1bWVudCAncmVxdWVzdCcgb3IgJ3JlcXVlc3QudXJpJ1wiKTtcblxuICAgIGlmICh0aGlzLmNhbkRvd25sb2FkKSB7XG4gICAgICAvLyBDaGVjayBpZiBub3QgYWxyZWFkeSBkb3dubG9hZGluZyBmaWxlXG4gICAgICBsZXQgam9iJCA9IHRoaXMuX2Rvd25sb2FkaW5nSm9icy5nZXQocmVxdWVzdC51cmkpO1xuICAgICAgaWYgKGpvYiQpIHJldHVybiBqb2IkO1xuXG4gICAgICAvLyBDb21wdXRlIHN1YlBhdGggKGZpbmFsIGZpbGVuYW1lKVxuICAgICAgbGV0IHN1YlBhdGggPVxuICAgICAgICByZXF1ZXN0LmRlc3RpbmF0aW9uSW5FeHRlcm5hbFB1YmxpY0Rpcj8uc3ViUGF0aCB8fFxuICAgICAgICByZXF1ZXN0LmRlc3RpbmF0aW9uSW5FeHRlcm5hbEZpbGVzRGlyPy5zdWJQYXRoIHx8XG4gICAgICAgIHJlcXVlc3QuZmlsZW5hbWUgfHxcbiAgICAgICAgVXJpVXRpbHMuZ2V0RmlsZW5hbWUocmVxdWVzdC51cmkpIHx8XG4gICAgICAgIHJlcXVlc3QudGl0bGUgfHxcbiAgICAgICAgJ2Rvd25sb2FkJztcblxuICAgICAgc3ViUGF0aCA9IHN1YlBhdGhcbiAgICAgICAgLnRvTG93ZXJDYXNlKClcbiAgICAgICAgLy8gUmVtb3ZlIHNwYWNlc1xuICAgICAgICAucmVwbGFjZSgvXFxzKy9nLCAnLScpO1xuXG4gICAgICAvLyBGb3JjZSBBUEsgdG8gZmluaXNoIHdpdGggJy5hcGsnXG4gICAgICBpZiAocmVxdWVzdC5taW1lVHlwZSA9PT0gTWltZVR5cGVzLkFORFJPSURfQVBLICYmICFzdWJQYXRoLnRvTG93ZXJDYXNlKCkuZW5kc1dpdGgoJy5hcGsnKSkge1xuICAgICAgICBzdWJQYXRoICs9ICcuYXBrJztcbiAgICAgIH1cblxuICAgICAgY29uc3QgZG93bmxvYWRSZXF1ZXN0ID0gPERvd25sb2FkUmVxdWVzdD57XG4gICAgICAgIHZpc2libGVJbkRvd25sb2Fkc1VpOiB0cnVlLFxuICAgICAgICBub3RpZmljYXRpb25WaXNpYmlsaXR5OiBOb3RpZmljYXRpb25WaXNpYmlsaXR5LlZpc2libGVOb3RpZnlDb21wbGV0ZWQsXG4gICAgICAgIC4uLnJlcXVlc3QsXG4gICAgICAgIGZpbGVuYW1lOiB1bmRlZmluZWQsIC8vIEZvcmNlIHVuc2V0XG4gICAgICAgIGRlc3RpbmF0aW9uSW5FeHRlcm5hbFB1YmxpY0RpcjogIXJlcXVlc3QuZGVzdGluYXRpb25JbkV4dGVybmFsRmlsZXNEaXJcbiAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgZGlyVHlwZTogQW5kcm9pZE9zRW52aXJvbm1lbnQuRElSRUNUT1JZX0RPV05MT0FEUyxcbiAgICAgICAgICAgICAgLi4ucmVxdWVzdC5kZXN0aW5hdGlvbkluRXh0ZXJuYWxQdWJsaWNEaXIsXG4gICAgICAgICAgICAgIHN1YlBhdGgsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgIGRlc3RpbmF0aW9uSW5FeHRlcm5hbEZpbGVzRGlyOiByZXF1ZXN0LmRlc3RpbmF0aW9uSW5FeHRlcm5hbEZpbGVzRGlyXG4gICAgICAgICAgPyB7XG4gICAgICAgICAgICAgIGRpclR5cGU6IEFuZHJvaWRPc0Vudmlyb25tZW50LkRJUkVDVE9SWV9ET1dOTE9BRFMsXG4gICAgICAgICAgICAgIC4uLnJlcXVlc3QuZGVzdGluYXRpb25JbkV4dGVybmFsRmlsZXNEaXIsXG4gICAgICAgICAgICAgIHN1YlBhdGgsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICB9O1xuXG4gICAgICAvLyBTdGFydCBkb3dubG9hZFxuICAgICAgY29uc29sZS5kZWJ1ZygnW3BsYXRmb3JtXSBEb3dubG9hZGluZywgdXNpbmcgcmVxdWVzdDogJyArIEpTT04uc3RyaW5naWZ5KGRvd25sb2FkUmVxdWVzdCkpO1xuICAgICAgam9iJCA9IGZyb20odGhpcy5kb3dubG9hZGVyLmRvd25sb2FkKGRvd25sb2FkUmVxdWVzdCkpO1xuXG4gICAgICAvLyBSZW1lbWJlciB0aGlzIHJlcXVlc3QgdXJpXG4gICAgICB0aGlzLl9kb3dubG9hZGluZ0pvYnMuc2V0KGRvd25sb2FkUmVxdWVzdC51cmksIGpvYiQpO1xuICAgICAgcmV0dXJuIGpvYiQucGlwZShcbiAgICAgICAgdGFwKChsb2NhdGlvbikgPT4ge1xuICAgICAgICAgIGNvbnNvbGUuaW5mbygnW3BsYXRmb3JtXSBGaWxlIHN1Y2Nlc3NmdWxseSBkb3dubG9hZGVkIGF0OicgKyBsb2NhdGlvbik7XG4gICAgICAgICAgLy8gRm9yZ2V0IGpvYlxuICAgICAgICAgIHRoaXMuX2Rvd25sb2FkaW5nSm9icy5kZWxldGUoZG93bmxvYWRSZXF1ZXN0LnVyaSk7XG4gICAgICAgICAgcmV0dXJuIGxvY2F0aW9uO1xuICAgICAgICB9KSxcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignW3BsYXRmb3JtXSBVbmFibGUgdG8gZG93bmxvYWQ6ICcgKyAoKGVyciAmJiBlcnIubWVzc2FnZSkgfHwgZXJyKSk7XG4gICAgICAgICAgLy8gRm9yZ2V0IHRoZSByZXF1ZXN0XG4gICAgICAgICAgdGhpcy5fZG93bmxvYWRpbmdKb2JzLmRlbGV0ZShkb3dubG9hZFJlcXVlc3QudXJpKTtcblxuICAgICAgICAgIC8vIFJldHJ5IHdpdGggYW5vdGhlciBsb2NhdGlvbiAtIGlzc3VlIGluIG9sZGVyIEFuZHJvaWQgdmVyc2lvblxuICAgICAgICAgIGlmIChkb3dubG9hZFJlcXVlc3QuZGVzdGluYXRpb25JbkV4dGVybmFsUHVibGljRGlyPy5kaXJUeXBlID09PSBBbmRyb2lkT3NFbnZpcm9ubWVudC5ESVJFQ1RPUllfRE9XTkxPQURTKSB7XG4gICAgICAgICAgICBkb3dubG9hZFJlcXVlc3QuZGVzdGluYXRpb25JbkV4dGVybmFsUHVibGljRGlyLmRpclR5cGUgPSBBbmRyb2lkT3NFbnZpcm9ubWVudC5ESVJFQ1RPUllfRE9XTkxPQURTX09MRDtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRvd25sb2FkKGRvd25sb2FkUmVxdWVzdCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gRmFsbGJhY2sgKGlmIG5vdCBBbmRyb2lkIGFuZCBDYXBhY2l0b3IpOiBvcGVuaW5nIHRoZSBVUklcbiAgICAvLyBUT0RPOiBmaW5kIGEgd2F5IHRvIGRvd25sb2FkIHVuZGVyIGlPUyAoc2VlIGh0dHBzOi8vd3d3LmMtc2hhcnBjb3JuZXIuY29tL2FydGljbGUvaG93LXRvLWRvd25sb2FkLWEtZmlsZS11c2luZy1maWxlLXRyYW5zZmVyLXBsdWdpbi1pbi1pb25pYy0zLylcbiAgICBlbHNlIHtcbiAgICAgIEZpbGVzVXRpbHMuZG93bmxvYWRVcmkocmVxdWVzdC51cmksIHJlcXVlc3QuZmlsZW5hbWUpO1xuICAgICAgcmV0dXJuIG9mKHVuZGVmaW5lZCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgY29weVRvQ2xpcGJvYXJkKGRhdGE6IHN0cmluZyB8IFdyaXRlT3B0aW9ucywgb3B0cz86IFNob3dUb2FzdE9wdGlvbnMpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJyA/IGRhdGEgOiBkYXRhLnN0cmluZztcbiAgICBsZXQgY29waWVkID0gdHJ1ZTtcbiAgICBpZiAodGhpcy5pc0FuZHJvaWRDb3Jkb3ZhKCkpIHtcbiAgICAgIGNvbnN0IHdyaXRlT3B0aW9ucyA9IHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJyA/IHsgc3RyaW5nOiB2YWx1ZSB9IDogZGF0YTtcbiAgICAgIGF3YWl0IENsaXBib2FyZC53cml0ZSh3cml0ZU9wdGlvbnMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb3BpZWQgPSB0aGlzLmNka0NsaXBib2FyZC5jb3B5KHZhbHVlKTtcbiAgICB9XG5cbiAgICBpZiAoY29waWVkKSB7XG4gICAgICAvLyBTaG93IHRvYXN0XG4gICAgICBpZiAob3B0cyAmJiBpc05vdE5pbE9yQmxhbmsob3B0cy5tZXNzYWdlKSkge1xuICAgICAgICBhd2FpdCBUb2FzdHMuc2hvdyh0aGlzLnRvYXN0Q29udHJvbGxlciwgdGhpcy50cmFuc2xhdGUsIHtcbiAgICAgICAgICB0eXBlOiAnaW5mbycsXG4gICAgICAgICAgLi4ub3B0cyxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1twbGF0Zm9ybV0gVW5hYmxlIHRvIGNvcHkgdG8gY2xpcGJvYXJkOiAnICsgZGF0YSk7XG4gICAgfVxuICB9XG5cbiAgdG9nZ2xlRGFya1RoZW1lKGVuYWJsZTogYm9vbGVhbikge1xuICAgIGlmIChlbmFibGUgJiYgIWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoJ2RhcmsnKSkge1xuICAgICAgY29uc29sZS5kZWJ1ZygnW3BsYXRmb3JtXSBFbmFibGUgZGFyayBtb2RlLi4uJyk7XG4gICAgfVxuICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGFzc0xpc3QudG9nZ2xlKCdkYXJrJywgZW5hYmxlKTtcbiAgfVxuXG4gIC8qIC0tIHByb3RlY3RlZCBtZXRob2RzIC0tICovXG5cbiAgcHJvdGVjdGVkIGFzeW5jIGNvbmZpZ3VyZVRoZW1lKG1vYmlsZTogYm9vbGVhbiwgd2luOiBhbnkgPSB3aW5kb3cpIHtcbiAgICAvLyBMaXN0ZW4gZm9yIGNoYW5nZXMgdG8gc2V0dGluZ3MgZGFyayBtb2RlXG4gICAgaWYgKHRoaXMuZW52aXJvbm1lbnQuYWxsb3dEYXJrTW9kZSkge1xuICAgICAgdGhpcy5yZWdpc3RlclN1YnNjcmlwdGlvbih0aGlzLnNldHRpbmdzLmRhcmtNb2RlJC5zdWJzY3JpYmUoKGRhcmtNb2RlKSA9PiB0aGlzLnRvZ2dsZURhcmtUaGVtZShkYXJrTW9kZSkpKTtcbiAgICB9XG5cbiAgICAvLyBXb3JrYXJvdW5kLCBmb3IgTVMgV2luZG93cyB0b3VjaCBzY3JlZW4gKGRldGVjdGVkIGFzIG1vYmlsZSwgYnV0IGZvcmNlZCBhcyBkZXNrdG9wKVxuICAgIGlmIChcbiAgICAgICFtb2JpbGUgJiZcbiAgICAgICh3aW4uZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50Py5jbGFzc0xpc3QuY29udGFpbnMoJ3BsdC1tb2JpbGUnKSB8fCB3aW4uZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsYXNzTGlzdD8uY29udGFpbnMoJ3BsdC1tb2JpbGV3ZWInKSlcbiAgICApIHtcbiAgICAgIGNvbnNvbGUud2FybignW3BsYXRmb3JtXSBGb3JjZSBjbGFzcyBsaXN0IHRvOiA8aHRtbCBjbGFzcz1cInBsdC1kZXNrdG9wXCI+LiBXb3JrYXJvdW5kIGZvciBXaW5kb3dzIHRvdWNoIHNjcmVlbi4nKTtcbiAgICAgIHdpbi5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgncGx0LW1vYmlsZScsICdwbHQtbW9iaWxld2ViJyk7XG4gICAgICB3aW4uZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsYXNzTGlzdC5hZGQoJ3BsdC1kZXNrdG9wJyk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGNvbmZpZ3VyZUNhcGFjaXRvclBsdWdpbnMoKSB7XG4gICAgaWYgKCF0aGlzLl9jYXBhY2l0b3IpIHJldHVybjsgLy8gU2tpcFxuXG4gICAgY29uc29sZS5pbmZvKCdbcGxhdGZvcm1dIENvbmZpZ3VyaW5nIENhcGFjaXRvciBwbHVnaW5zLi4uJyk7XG5cbiAgICBsZXQgcGx1Z2luTmFtZTogc3RyaW5nO1xuICAgIHRyeSB7XG4gICAgICBwbHVnaW5OYW1lID0gQ2FwYWNpdG9yUGx1Z2lucy5TdGF0dXNCYXI7XG4gICAgICBpZiAodGhpcy5pc0FwcCgpICYmIHRoaXMuaXNBbmRyb2lkKCkpIHtcbiAgICAgICAgYXdhaXQgU3RhdHVzQmFyLnNldE92ZXJsYXlzV2ViVmlldyh7IG92ZXJsYXk6IGZhbHNlIH0pO1xuICAgICAgfVxuXG4gICAgICAvLyBIaWRlIGFjY2Vzc29yeSBiYXIgKGlPUyBvbmx5KVxuICAgICAgaWYgKHRoaXMuaXNBcHAoKSAmJiB0aGlzLmlzSU9TKCkpIHtcbiAgICAgICAgcGx1Z2luTmFtZSA9IENhcGFjaXRvclBsdWdpbnMuS2V5Ym9hcmQ7XG4gICAgICAgIGF3YWl0IEtleWJvYXJkLnNldEFjY2Vzc29yeUJhclZpc2libGUoeyBpc1Zpc2libGU6IGZhbHNlIH0pO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc3QgbG9nTWVzc2FnZSA9IGBFcnJvciB3aGlsZSBjb25maWd1cmluZyAke3BsdWdpbk5hbWV9IHBsdWdpbjogJHtlcnIubWVzc2FnZSB8fCBlcnJ9XFxuJHtlcnI/Lm9yaWdpbmFsU3RhY2sgfHwgSlNPTi5zdHJpbmdpZnkoZXJyKX1gO1xuICAgICAgY29uc29sZS5lcnJvcignW3BsYXRmb3JtXSAnICsgbG9nTWVzc2FnZSk7XG4gICAgICB0aGlzLl9sb2dnZXI/LmVycm9yKCdjb25maWd1cmVDYXBhY2l0b3JQbHVnaW5zJywgbG9nTWVzc2FnZSk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGNvbmZpZ3VyZVRyYW5zbGF0ZSgpIHtcbiAgICBjb25zb2xlLmluZm8oJ1twbGF0Zm9ybV0gQ29uZmlndXJpbmcgaTE4biAuLi4nKTtcblxuICAgIC8vIHRoaXMgbGFuZ3VhZ2Ugd2lsbCBiZSB1c2VkIGFzIGEgZmFsbGJhY2sgd2hlbiBhIHRyYW5zbGF0aW9uIGlzbid0IGZvdW5kIGluIHRoZSBjdXJyZW50IGxhbmd1YWdlXG4gICAgdGhpcy50cmFuc2xhdGUuc2V0RGVmYXVsdExhbmcodGhpcy5lbnZpcm9ubWVudC5kZWZhdWx0TG9jYWxlKTtcbiAgICAvLyBhcHBseSBsb2NhbGUgaW1tZWRpYXRlbHlcbiAgICB0aGlzLmFwcGx5TG9jYWxlKHRoaXMuZW52aXJvbm1lbnQuZGVmYXVsdExvY2FsZSk7XG5cbiAgICAvLyBXaGVuIGxvY2FsZSBjaGFuZ2VzLCBhcHBseSB0byBkYXRlIGFkYXB0ZXJcbiAgICB0aGlzLnJlZ2lzdGVyU3Vic2NyaXB0aW9uKFxuICAgICAgdGhpcy50cmFuc2xhdGUub25MYW5nQ2hhbmdlLnN1YnNjcmliZSgoZXZlbnQpID0+IHtcbiAgICAgICAgaWYgKGV2ZW50ICYmIGV2ZW50LmxhbmcpIHtcbiAgICAgICAgICB0aGlzLmFwcGx5TG9jYWxlKGV2ZW50LmxhbmcpO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG5cbiAgICB0aGlzLnJlZ2lzdGVyU3Vic2NyaXB0aW9uKFxuICAgICAgdGhpcy5zZXR0aW5ncy5vbkNoYW5nZS5zdWJzY3JpYmUoKGRhdGEpID0+IHtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAvLyBBcHBseSBsb2NhbGVcbiAgICAgICAgICBpZiAoZGF0YS5sb2NhbGUpIHtcbiAgICAgICAgICAgIGlmIChkYXRhLmxvY2FsZSAhPT0gdGhpcy50cmFuc2xhdGUuY3VycmVudExhbmcpIHtcbiAgICAgICAgICAgICAgdGhpcy50cmFuc2xhdGUudXNlKGRhdGEubG9jYWxlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gQXBwbHlpbmcgZGVmYXVsdCwgd2hlbiBzZXR0aW5ncyBoYXMgbm8gbG9jYWxlIHByb3BlcnR5IChob3RmaXggLSBsdWRvdmljLnBlY3F1b3RAZS1pcy5wcm8gLSAxNC8xMS8yMDIxIC0gc2luY2UgdjEuMjAuNDIpXG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1twbGF0Zm9ybV0gTm8gbG9jYWxlIGZvdW5kIGluIHNldHRpbmdzOiBhcHBseWluZyBkZWZhdWx0TG9jYWxlOiAnLCB0aGlzLmVudmlyb25tZW50LmRlZmF1bHRMb2NhbGUpO1xuICAgICAgICAgICAgdGhpcy50cmFuc2xhdGUudXNlKHRoaXMuZW52aXJvbm1lbnQuZGVmYXVsdExvY2FsZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG5cbiAgICAvLyBVc2UgYWNjb3VudCdzIHNldHRpbmdzLCAobGlrZSBsb2NhbGUpLCB3aGVuIGFjY291bnQgaW5oZXJpdGFuY2UgZW5hYmxlZFxuICAgIHRoaXMucmVnaXN0ZXJTdWJzY3JpcHRpb24oXG4gICAgICB0aGlzLmFjY291bnRTZXJ2aWNlLm9uTG9naW4uc3Vic2NyaWJlKChhY2NvdW50KSA9PiB7XG4gICAgICAgIGlmIChhY2NvdW50LnNldHRpbmdzICYmIHRoaXMuc2V0dGluZ3Muc2V0dGluZ3MuYWNjb3VudEluaGVyaXRhbmNlKSB7XG4gICAgICAgICAgY29uc3QgYWNjb3VudFNldHRpbmdzID0gYWNjb3VudC5zZXR0aW5ncy5hc0xvY2FsU2V0dGluZ3MoKTtcbiAgICAgICAgICB0aGlzLnNldHRpbmdzLmFwcGx5KGFjY291bnRTZXR0aW5ncyk7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhcHBseUxvY2FsZShsb2NhbGU6IHN0cmluZykge1xuICAgIC8vIGZvcmNlICdlbicgYXMgJ2VuX0dCJ1xuICAgIGlmIChsb2NhbGUgPT09ICdlbicpIHtcbiAgICAgIGxvY2FsZSA9ICdlbl9HQic7XG4gICAgfVxuXG4gICAgLy8gY29uZmlnIG1vbWVudCBsaWJcbiAgICB0cnkge1xuICAgICAgbW9tZW50TG9jYWxlKGxvY2FsZSk7XG4gICAgICBjb25zb2xlLmRlYnVnKCdbcGxhdGZvcm1dIFVzZSBsb2NhbGUgeycgKyBsb2NhbGUgKyAnfScpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgLy8gSWYgZXJyb3IsIGZhbGxiYWNrIHRvIGVuXG4gICAgICBtb21lbnRMb2NhbGUoJ2VuJyk7XG4gICAgICBjb25zb2xlLndhcm4oJ1twbGF0Zm9ybV0gVW5rbm93biBsb2NhbGUgZm9yIG1vbWVudCBsaWIuIFVzaW5nIGRlZmF1bHQgW2VuXScpO1xuICAgIH1cblxuICAgIC8vIENvbmZpZyBkYXRlIGFkYXB0ZXJcbiAgICB0aGlzLmRhdGVBZGFwdGVyLnNldExvY2FsZShtb21lbnRMb2NhbGUoKSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgY29uZmlndXJlQ2FjaGUob25saW5lPzogYm9vbGVhbikge1xuICAgIG9ubGluZSA9IHRvQm9vbGVhbihvbmxpbmUsIHRoaXMuY2FjaGUuaXNPbmxpbmUoKSk7XG4gICAgY29uc3QgY2FjaGVUVEwgPSBvbmxpbmUgPyAzNjAwIC8qIDFoICovIDogMzYwMCAqIDI0ICogMzA7IC8qIDEgbW9udGggKi9cbiAgICBjb25zb2xlLmluZm8oYFtwbGF0Zm9ybV0gQ29uZmlndXJpbmcgY2FjaGUgW09LXSB7b25saW5lOiAke29ubGluZX0sIHRpbWVUb0xpdmU6ICR7Y2FjaGVUVEwgLyAzNjAwfWgsIG9mZmxpbmVJbnZhbGlkYXRlOiBmYWxzZX1gKTtcbiAgICB0aGlzLmNhY2hlLnNldERlZmF1bHRUVEwoY2FjaGVUVEwpO1xuICAgIHRoaXMuY2FjaGUuc2V0T2ZmbGluZUludmFsaWRhdGUoZmFsc2UpOyAvLyBEbyBub3QgaW52YWxpZGF0ZSBjYWNoZSB3aGVuIG9mZmxpbmVcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBjaGVja0FwcFZlcnNpb24ob3B0cz86IHsgY2FuUmVsb2FkPzogYm9vbGVhbjsgc2lsZW50PzogYm9vbGVhbiB9KSB7XG4gICAgaWYgKHRoaXMubmV0d29ya1NlcnZpY2Uub2ZmbGluZSB8fCAhdGhpcy5pc1dlYigpKSByZXR1cm47IC8vIFNraXBcblxuICAgIGNvbnN0IHNpbGVudCA9IG9wdHM/LnNpbGVudCA9PT0gdHJ1ZTtcbiAgICBjb25zdCBwcm9kdWN0aW9uID0gdGhpcy5lbnZpcm9ubWVudC5wcm9kdWN0aW9uO1xuICAgIGNvbnN0IGNhbkF1dG9SZWxvYWQgPSAhb3B0cyB8fCBvcHRzLmNhblJlbG9hZCAhPT0gZmFsc2U7XG5cbiAgICBpZiAoIXNpbGVudCkgY29uc29sZS5pbmZvKCdbcGxhdGZvcm1dIENoZWNraW5nIHJlbW90ZSBhcHAgdmVyc2lvbi4uLicpO1xuXG4gICAgY29uc3QgYWN0dWFsVmVyc2lvbiA9IHRoaXMuZW52aXJvbm1lbnQudmVyc2lvbjtcbiAgICBpZiAoaXNOaWxPckJsYW5rKGFjdHVhbFZlcnNpb24pKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFwiW3BsYXRmb3JtXSBNaXNzaW5nIHJlcXVpcmVkIHZhbHVlIGZvciAnZW52aXJvbm1lbnQudmVyc2lvbicuIENhbm5vdCBjaGVjayByZW1vdGUgYXBwIHZlcnNpb24uXCIpO1xuICAgICAgdGhpcy5jaGVja0FwcFZlcnNpb25UaW1lcj8udW5zdWJzY3JpYmUoKTsgLy8gU3RvcCB0aW1lciBpZiBleGlzdHNcbiAgICAgIHJldHVybjsgLy8gU2tpcFxuICAgIH1cblxuICAgIGNvbnN0IHJlbW90ZVZlcnNpb24gPSBhd2FpdCB0aGlzLm5ldHdvcmtTZXJ2aWNlLmdldEFwcFZlcnNpb24oKTtcbiAgICBpZiAoaXNOaWxPckJsYW5rKHJlbW90ZVZlcnNpb24pKSB7XG4gICAgICBpZiAocHJvZHVjdGlvbiAmJiAhc2lsZW50KSBjb25zb2xlLmVycm9yKCdbcGxhdGZvcm1dIENhbm5vdCBsb2FkIHJlbW90ZSBhcHAgdmVyc2lvbi4gU2tpcHBpbmcgdmVyc2lvbiBjaGVjaycpO1xuICAgICAgdGhpcy5jaGVja0FwcFZlcnNpb25UaW1lcj8udW5zdWJzY3JpYmUoKTsgLy8gU3RvcCB0aW1lciBpZiBleGlzdHNcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoVmVyc2lvblV0aWxzLmlzQ29tcGF0aWJsZShyZW1vdGVWZXJzaW9uLCBhY3R1YWxWZXJzaW9uKSkge1xuICAgICAgaWYgKCFzaWxlbnQpIGNvbnNvbGUuaW5mbyhgW3BsYXRmb3JtXSBDaGVja2luZyByZW1vdGUgYXBwIHZlcnNpb24gW09LXSB7cmVtb3RlOiAnJHtyZW1vdGVWZXJzaW9ufScsIGFjdHVhbDogJyR7YWN0dWFsVmVyc2lvbn0nfWApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIElmIG5ld2VyIHZlcnNpb24gZXhpc3RzXG4gICAgbGV0IHJlbG9hZFBhdGggPSBsb2NhdGlvbi5ocmVmLnJlcGxhY2UoL1smP112ZXJzaW9uPVteJl0qL2dpLCAnJyk7IC8vIFJlbW92ZSBvbGQgdmVyc2lvbiBpbiBxdWVyeSBwYXJhbXNcbiAgICByZWxvYWRQYXRoICs9IHJlbG9hZFBhdGguaW5kZXhPZignPycpID09PSAtMSA/ICc/JyA6ICcmJzsgLy8gQWRkIHF1ZXJ5IHBhcmFtIHNlcGFyYXRvclxuICAgIHJlbG9hZFBhdGggKz0gJ3ZlcnNpb249JyArIHJlbW90ZVZlcnNpb247IC8vIEFkZCB2ZXJzaW9uICh0byBhdm9pZCBhIHJlbG9hZCBpbmZpbml0ZSBsb29wKVxuXG4gICAgLy8gQWxyZWFkeSB0cnkgdG8gcmVsb2FkLCBidXQgdmVyc2lvbiBzdGlsbCBiYWRcbiAgICBpZiAocmVsb2FkUGF0aCA9PT0gbG9jYXRpb24uaHJlZikge1xuICAgICAgaWYgKGNhbkF1dG9SZWxvYWQpXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgYFtwbGF0Zm9ybV0gUmVsb2FkZWQgcGFnZSBmYWlsZWQsIGJlY2F1c2UgdmVyc2lvbiBzdGlsbCBtaXNtYXRjaCEgUGxlYXNlIGNoZWNrIHZlcnNpb24uYXBwdXAgZmlsZSAoZXhwZWN0ZWQgYXBwIHZlcnNpb246ICR7YWN0dWFsVmVyc2lvbn0pYFxuICAgICAgICApO1xuICAgICAgLy8gU3RvcCB0aW1lciwgdG8gYXZvaWQgaW5maW5pdGUgbG9vcFxuICAgICAgdGhpcy5jaGVja0FwcFZlcnNpb25UaW1lcj8udW5zdWJzY3JpYmUoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zb2xlLndhcm4oYFtwbGF0Zm9ybV0gTW9yZSByZWNlbnQgdmVyc2lvbiBkZXRlY3RlZCAocmVtb3RlOiAke3JlbW90ZVZlcnNpb259LCBhY3R1YWw6ICR7YWN0dWFsVmVyc2lvbn1gKTtcblxuICAgIC8vIEF1dG8gcmVsb2FkXG4gICAgaWYgKGNhbkF1dG9SZWxvYWQpIHtcbiAgICAgIGNvbnNvbGUuaW5mbygnW3BsYXRmb3JtXSBXaWxsIHJlbG9hZGluZyBhdCAnICsgcmVsb2FkUGF0aCk7XG4gICAgICBsb2NhdGlvbi5ocmVmID0gcmVsb2FkUGF0aDtcbiAgICAgIC8vIEFwcCBzdG9wXG4gICAgfVxuICAgIC8vIEFzayB1c2VyIHRvIHJlbG9hZFxuICAgIGVsc2Uge1xuICAgICAgLy8gU3RvcCB0aW1lciwgdG8gYXZvaWQgaW5maW5pdGUgbG9vcFxuICAgICAgdGhpcy5jaGVja0FwcFZlcnNpb25UaW1lcj8udW5zdWJzY3JpYmUoKTtcblxuICAgICAgLy8gRGlzcGxheSBhIHJlbG9hZCB0b2FzdFxuICAgICAgYXdhaXQgdGhpcy5zaG93VG9hc3Qoe1xuICAgICAgICBtZXNzYWdlOiAnQ09ORklSTS5SRUxPQURfQVBQJyxcbiAgICAgICAgbWVzc2FnZVBhcmFtczogeyB2ZXJzaW9uOiByZW1vdGVWZXJzaW9uLCBuYW1lOiB0aGlzLmVudmlyb25tZW50Lm5hbWUgfSxcbiAgICAgICAgdHlwZTogJ2luZm8nLFxuICAgICAgICBkdXJhdGlvbjogLTEsXG4gICAgICAgIHNob3dDbG9zZUJ1dHRvbjogdHJ1ZSxcbiAgICAgICAgYnV0dG9uczogW1xuICAgICAgICAgIC8vIFJlbG9hZCBidXR0b25cbiAgICAgICAgICB7XG4gICAgICAgICAgICB0ZXh0OiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdDT01NT04uQlROX1VQREFURScpLFxuICAgICAgICAgICAgc2lkZTogJ2VuZCcsXG4gICAgICAgICAgICBoYW5kbGVyOiAoKSA9PiB7XG4gICAgICAgICAgICAgIGxvY2F0aW9uLmhyZWYgPSByZWxvYWRQYXRoO1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBzaG93VG9hc3Qob3B0czogU2hvd1RvYXN0T3B0aW9ucyk6IFByb21pc2U8SFRNTElvblRvYXN0RWxlbWVudD4ge1xuICAgIGlmICghdGhpcy50b2FzdENvbnRyb2xsZXIpIHRocm93IG5ldyBFcnJvcihcIk1pc3NpbmcgdG9hc3RDb250cm9sbGVyIGluIGNvbXBvbmVudCdzIGNvbnN0cnVjdG9yXCIpO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT5cbiAgICAgIFRvYXN0cy5zaG93KHRoaXMudG9hc3RDb250cm9sbGVyLCB0aGlzLnRyYW5zbGF0ZSwge1xuICAgICAgICAuLi5vcHRzLFxuICAgICAgICBvbldpbGxQcmVzZW50OiAodCkgPT4gcmVzb2x2ZSh0KSxcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBvblN0YXJ0dXBFcnJvcihlcnIpIHtcbiAgICBjb25zb2xlLmVycm9yKCdbcGxhdGZvcm1dIEZhaWxlZCBzdGFydGluZyB0aGUgcGxhdGZvcm0hICcgKyBKU09OLnN0cmluZ2lmeShlcnIpKTtcbiAgICBsZXQgbWVzc2FnZSA9IChlcnIgJiYgZXJyLm1lc3NhZ2UpIHx8IGVycjtcbiAgICBjb25zdCBkZXRhaWxzTWVzc2FnZSA9IGVyciAmJiAoKGVyci5kZXRhaWxzICYmIGVyci5kZXRhaWxzLm1lc3NhZ2UpIHx8IGVyci5kZXRhaWxzKTtcbiAgICAvLyBTZXQgc3BlY2lmaWMgZXJyb3Igd2hlbiBGaXJlZm94IGlzIGluIHByaXZhdGUgbW9kZSBvciBoaXN0b3J5IG5ldmVyIHJlbWVtYmVyZWQgKHNlZSBNYW50aXMgSWZyZW1lciAjNTY0NDEpXG4gICAgaWYgKGVyci5jb2RlID09PSAxMSAmJiB0aGlzLmNka1BsYXRmb3JtLkZJUkVGT1gpIHtcbiAgICAgIG1lc3NhZ2UgPSAnRVJST1IuRklSRUZPWF9OT19TVE9SQUdFJztcbiAgICB9XG4gICAgaWYgKHRoaXMudHJhbnNsYXRlKSB7XG4gICAgICBtZXNzYWdlID0gYXdhaXQgdGhpcy50cmFuc2xhdGUuaW5zdGFudChtZXNzYWdlKTtcbiAgICAgIGlmIChlcnIgJiYgZXJyLmNvZGUpIHtcbiAgICAgICAgbWVzc2FnZSArPSBgIHtjb2RlOiAke2Vyci5jb2RlfX1gO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBtZXNzYWdlID0gYEZhdGFsIGVycm9yOiBQbGVhc2UgY29udGFjdCB5b3VyIGFkbWluaXN0cmF0b3IuXFxuXFxue2NvZGU6ICR7KGVyciAmJiBlcnIuY29kZSkgfHwgJ251bGwnfSwgbWVzc2FnZTogXCIke21lc3NhZ2V9XCJ9YDtcbiAgICB9XG4gICAgaWYgKHRoaXMudG9hc3RDb250cm9sbGVyKSB7XG4gICAgICBpZiAoZGV0YWlsc01lc3NhZ2UpIHtcbiAgICAgICAgbWVzc2FnZSArPSBgPGJyLz48c21hbGw+JHtkZXRhaWxzTWVzc2FnZX08L3NtYWxsPmA7XG4gICAgICB9XG4gICAgICBhd2FpdCB0aGlzLnNob3dUb2FzdCh7XG4gICAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICAgIGR1cmF0aW9uOiAtMSxcbiAgICAgICAgc2hvd0Nsb3NlQnV0dG9uOiB0cnVlLFxuICAgICAgICBtZXNzYWdlLFxuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmICh3aW5kb3cpIHtcbiAgICAgIGlmIChkZXRhaWxzTWVzc2FnZSkge1xuICAgICAgICBtZXNzYWdlICs9IGBcXG5cXG57Y2F1c2U6IFwiJHtkZXRhaWxzTWVzc2FnZX1cIn1gO1xuICAgICAgfVxuICAgICAgd2luZG93LmFsZXJ0KG1lc3NhZ2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmVycm9yKG1lc3NhZ2UpO1xuICAgICAgaWYgKGVyciAmJiBlcnIuZGV0YWlscykgY29uc29sZS5lcnJvcignY2F1c2UnLCBlcnIuZGV0YWlscyk7XG4gICAgfVxuICB9XG59XG4iXX0=
|
|
@@ -23294,6 +23294,7 @@ class PlatformService extends StartableService {
|
|
|
23294
23294
|
_capacitor;
|
|
23295
23295
|
_android;
|
|
23296
23296
|
_ios;
|
|
23297
|
+
busySubject = new BehaviorSubject(true);
|
|
23297
23298
|
constructor(ionicPlatform, cdkPlatform, cdkClipboard, toastController, translate, dateAdapter, entitiesStorage, settings, networkService, accountService, configService, cache, audioProvider, environment, loggingService, downloader) {
|
|
23298
23299
|
super(ionicPlatform);
|
|
23299
23300
|
this.ionicPlatform = ionicPlatform;
|
|
@@ -23472,6 +23473,19 @@ class PlatformService extends StartableService {
|
|
|
23472
23473
|
return this.onStartupError(err);
|
|
23473
23474
|
}
|
|
23474
23475
|
}
|
|
23476
|
+
/**
|
|
23477
|
+
* Used to show a backdrop when platform is busy (e.g. from the app.component.ts)
|
|
23478
|
+
*/
|
|
23479
|
+
markAsBusy() {
|
|
23480
|
+
if (!this.busySubject.value) {
|
|
23481
|
+
this.busySubject.next(true);
|
|
23482
|
+
}
|
|
23483
|
+
}
|
|
23484
|
+
markAsNotBusy() {
|
|
23485
|
+
if (this.busySubject.value) {
|
|
23486
|
+
this.busySubject.next(false);
|
|
23487
|
+
}
|
|
23488
|
+
}
|
|
23475
23489
|
async open(url, opts) {
|
|
23476
23490
|
console.info(`[platform] Opening link: ${url}`);
|
|
23477
23491
|
if (this._mobile && this._capacitor) {
|