@sumaris-net/ngx-components 18.2.25 → 18.2.27
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 +4 -0
- package/esm2022/src/app/core/install/install-upgrade-card.component.mjs +32 -11
- package/esm2022/src/app/core/peer/select-peer.modal.mjs +159 -18
- package/esm2022/src/app/core/peer/select-peer.module.mjs +11 -5
- package/esm2022/src/app/core/services/config/core.config.mjs +6 -1
- package/esm2022/src/app/core/services/model/node-feature.model.mjs +31 -0
- package/esm2022/src/app/core/services/model/peer.model.mjs +23 -3
- package/esm2022/src/app/core/services/network.service.mjs +4 -8
- package/esm2022/src/app/core/services/network.utils.mjs +1 -1
- package/esm2022/src/app/shared/rx-state/rx-state.decorators.mjs +2 -2
- package/esm2022/src/environments/environment.class.mjs +4 -1
- package/esm2022/src/environments/environment.mjs +3 -1
- package/fesm2022/sumaris-net.ngx-components.mjs +638 -434
- package/fesm2022/sumaris-net.ngx-components.mjs.map +1 -1
- package/package.json +1 -1
- package/src/app/core/peer/select-peer.modal.d.ts +47 -6
- package/src/app/core/peer/select-peer.module.d.ts +3 -1
- package/src/app/core/services/config/core.config.d.ts +1 -0
- package/src/app/core/services/model/node-feature.model.d.ts +14 -0
- package/src/app/core/services/model/peer.model.d.ts +5 -0
- package/src/app/core/services/network.utils.d.ts +2 -0
- package/src/assets/i18n/en-US.json +6 -3
- package/src/assets/i18n/en.json +21 -18
- package/src/assets/i18n/fr.json +14 -11
- package/src/assets/manifest.json +1 -1
- package/src/environments/environment.class.d.ts +2 -0
- package/src/theme/_ngx-components.scss +2 -1
|
@@ -4,20 +4,23 @@ import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http'
|
|
|
4
4
|
import { SelectPeerModal } from './select-peer.modal';
|
|
5
5
|
import { TranslateModule } from '@ngx-translate/core';
|
|
6
6
|
import { AppTextPopoverModule } from '../form/text-popover/text-popover.module';
|
|
7
|
+
import { CorePipesModule } from '../services/pipes/pipes.module';
|
|
8
|
+
import { FormsModule } from '@angular/forms';
|
|
7
9
|
import * as i0 from "@angular/core";
|
|
8
10
|
import * as i1 from "@ngx-translate/core";
|
|
9
11
|
export class AppSelectPeerModule {
|
|
10
12
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: AppSelectPeerModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
11
13
|
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.11", ngImport: i0, type: AppSelectPeerModule, declarations: [
|
|
12
14
|
// Network
|
|
13
|
-
SelectPeerModal], imports: [SharedModule, i1.TranslateModule, AppTextPopoverModule], exports: [TranslateModule,
|
|
15
|
+
SelectPeerModal], imports: [SharedModule, i1.TranslateModule, AppTextPopoverModule, CorePipesModule, FormsModule], exports: [TranslateModule,
|
|
14
16
|
// Components
|
|
15
17
|
SelectPeerModal] });
|
|
16
|
-
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: AppSelectPeerModule, providers: [provideHttpClient(withInterceptorsFromDi())], imports: [SharedModule, TranslateModule.forChild(), AppTextPopoverModule, TranslateModule] });
|
|
18
|
+
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: AppSelectPeerModule, providers: [provideHttpClient(withInterceptorsFromDi())], imports: [SharedModule, TranslateModule.forChild(), AppTextPopoverModule, CorePipesModule, FormsModule, TranslateModule] });
|
|
17
19
|
}
|
|
18
20
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: AppSelectPeerModule, decorators: [{
|
|
19
21
|
type: NgModule,
|
|
20
|
-
args: [{
|
|
22
|
+
args: [{
|
|
23
|
+
declarations: [
|
|
21
24
|
// Network
|
|
22
25
|
SelectPeerModal,
|
|
23
26
|
],
|
|
@@ -25,6 +28,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImpo
|
|
|
25
28
|
TranslateModule,
|
|
26
29
|
// Components
|
|
27
30
|
SelectPeerModal,
|
|
28
|
-
],
|
|
31
|
+
],
|
|
32
|
+
imports: [SharedModule, TranslateModule.forChild(), AppTextPopoverModule, CorePipesModule, FormsModule],
|
|
33
|
+
providers: [provideHttpClient(withInterceptorsFromDi())],
|
|
34
|
+
}]
|
|
29
35
|
}] });
|
|
30
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
36
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LXBlZXIubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9jb3JlL3BlZXIvc2VsZWN0LXBlZXIubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzFELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2pGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDaEYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7O0FBZTdDLE1BQU0sT0FBTyxtQkFBbUI7d0dBQW5CLG1CQUFtQjt5R0FBbkIsbUJBQW1CO1lBWDVCLFVBQVU7WUFDVixlQUFlLGFBT1AsWUFBWSxzQkFBOEIsb0JBQW9CLEVBQUUsZUFBZSxFQUFFLFdBQVcsYUFKcEcsZUFBZTtZQUNmLGFBQWE7WUFDYixlQUFlO3lHQUtOLG1CQUFtQixhQUZuQixDQUFDLGlCQUFpQixDQUFDLHNCQUFzQixFQUFFLENBQUMsQ0FBQyxZQUQ5QyxZQUFZLEVBQUUsZUFBZSxDQUFDLFFBQVEsRUFBRSxFQUFFLG9CQUFvQixFQUFFLGVBQWUsRUFBRSxXQUFXLEVBSnBHLGVBQWU7OzRGQU9OLG1CQUFtQjtrQkFiL0IsUUFBUTttQkFBQztvQkFDUixZQUFZLEVBQUU7d0JBQ1osVUFBVTt3QkFDVixlQUFlO3FCQUNoQjtvQkFDRCxPQUFPLEVBQUU7d0JBQ1AsZUFBZTt3QkFDZixhQUFhO3dCQUNiLGVBQWU7cUJBQ2hCO29CQUNELE9BQU8sRUFBRSxDQUFDLFlBQVksRUFBRSxlQUFlLENBQUMsUUFBUSxFQUFFLEVBQUUsb0JBQW9CLEVBQUUsZUFBZSxFQUFFLFdBQVcsQ0FBQztvQkFDdkcsU0FBUyxFQUFFLENBQUMsaUJBQWlCLENBQUMsc0JBQXNCLEVBQUUsQ0FBQyxDQUFDO2lCQUN6RCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTaGFyZWRNb2R1bGUgfSBmcm9tICcuLi8uLi9zaGFyZWQvc2hhcmVkLm1vZHVsZSc7XG5pbXBvcnQgeyBwcm92aWRlSHR0cENsaWVudCwgd2l0aEludGVyY2VwdG9yc0Zyb21EaSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IFNlbGVjdFBlZXJNb2RhbCB9IGZyb20gJy4vc2VsZWN0LXBlZXIubW9kYWwnO1xuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBBcHBUZXh0UG9wb3Zlck1vZHVsZSB9IGZyb20gJy4uL2Zvcm0vdGV4dC1wb3BvdmVyL3RleHQtcG9wb3Zlci5tb2R1bGUnO1xuaW1wb3J0IHsgQ29yZVBpcGVzTW9kdWxlIH0gZnJvbSAnLi4vc2VydmljZXMvcGlwZXMvcGlwZXMubW9kdWxlJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5ATmdNb2R1bGUoe1xuICBkZWNsYXJhdGlvbnM6IFtcbiAgICAvLyBOZXR3b3JrXG4gICAgU2VsZWN0UGVlck1vZGFsLFxuICBdLFxuICBleHBvcnRzOiBbXG4gICAgVHJhbnNsYXRlTW9kdWxlLFxuICAgIC8vIENvbXBvbmVudHNcbiAgICBTZWxlY3RQZWVyTW9kYWwsXG4gIF0sXG4gIGltcG9ydHM6IFtTaGFyZWRNb2R1bGUsIFRyYW5zbGF0ZU1vZHVsZS5mb3JDaGlsZCgpLCBBcHBUZXh0UG9wb3Zlck1vZHVsZSwgQ29yZVBpcGVzTW9kdWxlLCBGb3Jtc01vZHVsZV0sXG4gIHByb3ZpZGVyczogW3Byb3ZpZGVIdHRwQ2xpZW50KHdpdGhJbnRlcmNlcHRvcnNGcm9tRGkoKSldLFxufSlcbmV4cG9ydCBjbGFzcyBBcHBTZWxlY3RQZWVyTW9kdWxlIHt9XG4iXX0=
|
|
@@ -215,6 +215,11 @@ export const CORE_CONFIG_OPTIONS = Object.freeze({
|
|
|
215
215
|
label: 'CONFIGURATION.OPTIONS.ANDROID_INSTALL_URL',
|
|
216
216
|
type: 'string',
|
|
217
217
|
},
|
|
218
|
+
IOS_INSTALL_URL: {
|
|
219
|
+
key: 'sumaris.ios.install.url',
|
|
220
|
+
label: 'CONFIGURATION.OPTIONS.IOS_INSTALL_URL',
|
|
221
|
+
type: 'string',
|
|
222
|
+
},
|
|
218
223
|
DB_TIMEZONE: {
|
|
219
224
|
key: 'sumaris.persistence.db.timezone',
|
|
220
225
|
label: 'CONFIGURATION.OPTIONS.DB_TIMEZONE',
|
|
@@ -235,4 +240,4 @@ export const CORE_CONFIG_OPTIONS = Object.freeze({
|
|
|
235
240
|
isTransient: true,
|
|
236
241
|
},
|
|
237
242
|
});
|
|
238
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS5jb25maWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2NvcmUvc2VydmljZXMvY29uZmlnL2NvcmUuY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUlBLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUd0RCxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO0lBQy9DLElBQUksRUFBdUI7UUFDekIsR0FBRyxFQUFFLGNBQWM7UUFDbkIsS0FBSyxFQUFFLDRCQUE0QjtRQUNuQyxJQUFJLEVBQUUsUUFBUTtLQUNmO0lBQ0QsT0FBTyxFQUF1QjtRQUM1QixHQUFHLEVBQUUsaUJBQWlCO1FBQ3RCLEtBQUssRUFBRSwrQkFBK0I7UUFDdEMsSUFBSSxFQUFFLFFBQVE7S0FDZjtJQUNELGNBQWMsRUFBdUI7UUFDbkMsR0FBRyxFQUFFLHVCQUF1QjtRQUM1QixLQUFLLEVBQUUsc0NBQXNDO1FBQzdDLElBQUksRUFBRSxNQUFNO1FBQ1osTUFBTSxFQUFFLFdBQVc7S0FDcEI7SUFDRCx1QkFBdUIsRUFBdUI7UUFDNUMsR0FBRyxFQUFFLDhCQUE4QjtRQUNuQyxLQUFLLEVBQUUsOENBQThDO1FBQ3JELElBQUksRUFBRSxNQUFNO1FBQ1osTUFBTSxFQUFFO1lBQ047Z0JBQ0UsR0FBRyxFQUFFLFFBQVE7Z0JBQ2IsS0FBSyxFQUFFLG9DQUFvQzthQUM1QztZQUNEO2dCQUNFLEdBQUcsRUFBRSxNQUFNO2dCQUNYLEtBQUssRUFBRSxrQ0FBa0M7YUFDMUM7WUFDRDtnQkFDRSxHQUFHLEVBQUUsSUFBSTtnQkFDVCxLQUFLLEVBQUUsZ0NBQWdDO2FBQ3hDO1NBQ0Y7S0FDRjtJQUNEOztPQUVHO0lBQ0gsYUFBYTtJQUNiLCtCQUErQixFQUF1QjtRQUNwRCxHQUFHLEVBQUUsc0NBQXNDO1FBQzNDLEtBQUssRUFBRSxxREFBcUQ7UUFDNUQs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LElBQUksRUFBRSxPQUFPO0tBQ2Q7SUFDRCxpQ0FBaUMsRUFBdUI7UUFDdEQsR0FBRyxFQUFFLHlDQUF5QztRQUM5QyxLQUFLLEVBQUUseURBQXlEO1FBQ2hFLElBQUksRUFBRSxPQUFPO0tBQ2Q7SUFDRCxvQ0FBb0MsRUFBdUI7UUFDekQsR0FBRyxFQUFFLDRDQUE0QztRQUNqRCxLQUFLLEVBQUUsNERBQTREO1FBQ25FLElBQUksRUFBRSxPQUFPO0tBQ2Q7SUFDRCxtQkFBbUIsRUFBdUI7UUFDeEMsR0FBRyxFQUFFLDZCQUE2QjtRQUNsQyxLQUFLLEVBQUUsMkNBQTJDO1FBQ2xELElBQUksRUFBRSxRQUFRO0tBQ2Y7SUFDRCxXQUFXLEVBQXVCO1FBQ2hDLEdBQUcsRUFBRSxpQ0FBaUM7UUFDdEMsS0FBSyxFQUFFLG1DQUFtQztRQUMxQyxJQUFJLEVBQUUsUUFBUTtRQUNkLFdBQVcsRUFBRSxJQUFJLEVBQUUsZ0NBQWdDO0tBQ3BEO0lBQ0QsOEJBQThCLEVBQXVCO1FBQ25ELEdBQUcsRUFBRSxzQ0FBc0M7UUFDM0MsS0FBSyxFQUFFLHFEQUFxRDtRQUM1RCxJQUFJLEVBQUUsU0FBUztRQUNmLFlBQVksRUFBRSxJQUFJO0tBQ25CO0lBQ0QsZ0JBQWdCLEVBQXVCO1FBQ3JDLEdBQUcsRUFBRSwwQkFBMEI7UUFDL0IsS0FBSyxFQUFFLHdDQUF3QztRQUMvQyxJQUFJLEVBQUUsU0FBUztRQUNmLFlBQVksRUFBRSxLQUFLO1FBQ25CLFdBQVcsRUFBRSxJQUFJO0tBQ2xCO0NBQ0YsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gVE9ETzogcmVuYW1lIHRvIENPTkZJR19PUFRJT05TX01BUFxuLy8gdGhlbiBkZWNsYXJlIGEgdHlwZSBsaWtlIHRoaXMgOlxuLy8gPiBleHBvcnQgZGVjbGFyZSB0eXBlIENvbmZpZ09wdGlvbnMgPSBrZXkgb2YgQ09ORklHX09QVElPTlNfTUFQXG5pbXBvcnQgeyBGb3JtRmllbGREZWZpbml0aW9uIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL2Zvcm0vZmllbGQubW9kZWwnO1xuaW1wb3J0IHsgQVBQX0xPQ0FMRVMgfSBmcm9tICcuLi9tb2RlbC9zZXR0aW5ncy5tb2RlbCc7XG5pbXBvcnQgeyBBdXRoVG9rZW5UeXBlIH0gZnJvbSAnLi4vbmV0d29yay50eXBlcyc7XG5cbmV4cG9ydCBjb25zdCBDT1JFX0NPTkZJR19PUFRJT05TID0gT2JqZWN0LmZyZWV6ZSh7XG4gIExPR086IDxGb3JtRmllbGREZWZpbml0aW9uPntcbiAgICBrZXk6ICdzdW1hcmlzLmxvZ28nLFxuICAgIGxhYmVsOiAnQ09ORklHVVJBVElPTi5PUFRJT05TLkxPR08nLFxuICAgIHR5cGU6ICdzdHJpbmcnLFxuICB9LFxuICBGQVZJQ09OOiA8Rm9ybUZpZWxkRGVmaW5pdGlvbj57XG4gICAga2V5OiAnc3VtYXJpcy5mYXZpY29uJyxcbiAgICBsYWJlbDogJ0NPTkZJR1VSQVRJT04uT1BUSU9OUy5GQVZJQ09OJyxcbiAgICB0eXBlOiAnc3RyaW5nJyxcbiAgfSxcbiAgREVGQVVMVF9MT0NBTEU6IDxGb3JtRmllbGREZWZpbml0aW9uPntcbiAgICBrZXk6ICdzdW1hcmlzLmRlZmF1bHRMb2NhbGUnLFxuICAgIGxhYmVsOiAnQ09ORklHVVJBVElPTi5PUFRJT05TLkRFRkFVTFRfTE9DQUxFJyxcbiAgICB0eXBlOiAnZW51bScsXG4gICAgdmFsdWVzOiBBUFBfTE9DQUxFUyxcbiAgfSxcbiAgREVGQVVMVF9MQVRfTE9OR19GT1JNQVQ6IDxGb3JtRmllbGREZWZpbml0aW9uPntcbiAgICBrZXk6ICdzdW1hcmlzLmRlZmF1bHRMYXRMb25nRm9ybWF0JyxcbiAgICBsYWJlbDogJ0NPTkZJR1VSQVRJT04uT1BUSU9OUy5ERUZBVUxUX0xBVExPTkdfRk9STUFUJyxcbiAgICB0eXBlOiAnZW51bScsXG4gICAgdmFsdWVzOiBbXG4gICAgICB7XG4gICAgICAgIGtleTogJ0RETU1TUycsXG4gICAgICAgIHZhbHVlOiAnQ09NTU9OLkxBVF9MT05HLkRETU1TU19QTEFDRUhPTERFUicsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBrZXk6ICdERE1NJyxcbiAgICAgICAgdmFsdWU6ICdDT01NT04uTEFUX0xPTkcuRERNTV9QTEFDRUhPTERFUicsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBrZXk6ICdERCcsXG4gICAgICAgIHZhbHVlOiAnQ09NTU9OLkxBVF9MT05HLkREX1BMQUNFSE9MREVSJyxcbiAgICAgIH0sXG4gICAgXSxcbiAgfSxcbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFVzZSBgQUNDT1VOVF9MQVRfTE9OR19GT1JNQVRfRU5BQkxFYCBpbnN0ZWFkXG4gICAqL1xuICAvL0BkZXByZWNhdGVkXG4gIERFRkFVTFRfTEFUX0xPTkdfRk9STUFUX0VOQUJMRUQ6IDxGb3JtRmllbGREZWZpbml0aW9uPntcbiAgICBrZXk6ICdzdW1hcmlzLmRlZmF1bHRMYXRMb25nRm9ybWF0LmVuYWJsZWQnLFxuICAgIGxhYmVsOiAnQ09ORklHVVJBVElPTi5PUFRJT05TLkVOQUJMRV9ERUZBVUxUX0xBVExPTkdfRk9STUFUJyxcbiAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgZGVmYXVsdFZhbHVlOiB0cnVlLCAvLyBJbXBvcnRhbnQsIGZvciBjb21wYXRpYmlsaXR5IHJlYXNvbiBhZnRlciBkZXByZWNhdGlvblxuICB9LFxuICBSRUdJU1RSQVRJT05fRU5BQkxFOiA8Rm9ybUZpZWxkRGVmaW5pdGlvbj57XG4gICAga2V5OiAnc3VtYXJpcy5yZWdpc3RyYXRpb24uZW5hYmxlJyxcbiAgICBsYWJlbDogJ0NPTkZJR1VSQVRJT04uT1BUSU9OUy5IT01FLkVOQUJMRV9SRUdJU1RSQVRJT04nLFxuICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICBkZWZhdWx0VmFsdWU6IHRydWUsXG4gIH0sXG4gIEFVVEhfVE9LRU5fVFlQRTogPEZvcm1GaWVsZERlZmluaXRpb24+e1xuICAgIGtleTogJ3N1bWFyaXMuYXV0aC50b2tlbi50eXBlJyxcbiAgICBsYWJlbDogJ0NPTkZJR1VSQVRJT04uT1BUSU9OUy5BVVRIX1RPS0VOX1RZUEVfUExBQ0VIT0xERVInLFxuICAgIHR5cGU6ICdlbnVtJyxcbiAgICB2YWx1ZXM6IFtcbiAgICAgIHtcbiAgICAgICAga2V5OiA8QXV0aFRva2VuVHlwZT4ndG9rZW4nLFxuICAgICAgICB2YWx1ZTogJ0NPTkZJR1VSQVRJT04uT1BUSU9OUy5BVVRIX1RPS0VOX1RZUEUuVE9LRU4nLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAga2V5OiA8QXV0aFRva2VuVHlwZT4nYmFzaWMnLFxuICAgICAgICB2YWx1ZTogJ0NPTkZJR1VSQVRJT04uT1BUSU9OUy5BVVRIX1RPS0VOX1RZUEUuQkFTSUMnLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAga2V5OiA8QXV0aFRva2VuVHlwZT4nYmFzaWMtYW5kLXRva2VuJyxcbiAgICAgICAgdmFsdWU6ICdDT05GSUdVUkFUSU9OLk9QVElPTlMuQVVUSF9UT0tFTl9UWVBFLkJBU0lDX0FORF9UT0tFTicsXG4gICAgICB9LFxuICAgIF0sXG4gICAgZGVmYXVsdFZhbHVlOiA8QXV0aFRva2VuVHlwZT4ndG9rZW4nLFxuICB9LFxuICBBVVRIX1JFU0VUX1BBU1NXT1JEX0VOQUJMRTogPEZvcm1GaWVsZERlZmluaXRpb24+e1xuICAgIGtleTogJ3N1bWFyaXMuYXV0aC5yZXNldC5lbmFibGUnLFxuICAgIGxhYmVsOiAnQ09ORklHVVJBVElPTi5PUFRJT05TLkhPTUUuQ0hBTkdFX1BBU1NXT1JEJyxcbiAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgZGVmYXVsdFZhbHVlOiB0cnVlLFxuICB9LFxuICBBVVRIX0FQSV9UT0tFTl9FTkFCTEVEOiA8Rm9ybUZpZWxkRGVmaW5pdGlvbj57XG4gICAga2V5OiAnc3VtYXJpcy5hdXRoLmFwaS50b2tlbi5lbmFibGVkJyxcbiAgICBsYWJlbDogJ0NPTkZJR1VSQVRJT04uT1BUSU9OUy5FTkFCTEVfQVVUSF9BUElfVE9LRU5TJyxcbiAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgZGVmYXVsdFZhbHVlOiBmYWxzZSxcbiAgICBpc1RyYW5zaWVudDogdHJ1ZSxcbiAgfSxcbiAgQVVUSF9BUElfVE9LRU5fU0NPUEVfRU5BQkxFRDogPEZvcm1GaWVsZERlZmluaXRpb24+e1xuICAgIGtleTogJ3N1bWFyaXMuYXV0aC5hcGkudG9rZW4uc2NvcGUuZW5hYmxlZCcsXG4gICAgbGFiZWw6ICdDT05GSUdVUkFUSU9OLk9QVElPTlMuRU5BQkxFX0FVVEhfQVBJX1RPS0VOU19TQ09QRScsXG4gICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgIGRlZmF1bHRWYWx1ZTogZmFsc2UsXG4gICAgaXNUcmFuc2llbnQ6IHRydWUsXG4gIH0sXG4gIERFRkFVTFRfQVVUSF9BUElfVE9LRU5fU0NPUEU6IDxGb3JtRmllbGREZWZpbml0aW9uPntcbiAgICBrZXk6ICdzdW1hcmlzLmF1dGguYXBpLnRva2VuLnNjb3BlLmRlZmF1bHQnLFxuICAgIGxhYmVsOiAnQ09ORklHVVJBVElPTi5PUFRJT05TLkRFRkFVTFRfQVVUSF9BUElfVE9LRU5fU0NPUEUnLFxuICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgIGRlZmF1bHRWYWx1ZTogJ3JlYWRfYXBpJyxcbiAgICBpc1RyYW5zaWVudDogdHJ1ZSxcbiAgfSxcbiAgR1JBVkFUQVJfRU5BQkxFOiA8Rm9ybUZpZWxkRGVmaW5pdGlvbj57XG4gICAga2V5OiAnc3VtYXJpcy5ncmF2YXRhci5lbmFibGUnLFxuICAgIGxhYmVsOiAnQ09ORklHVVJBVElPTi5PUFRJT05TLkVOQUJMRV9HUkFWQVRBUicsXG4gICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgIGRlZmF1bHRWYWx1ZTogZmFsc2UsXG4gIH0sXG4gIEdSQVZBVEFSX1VSTDogPEZvcm1GaWVsZERlZmluaXRpb24+e1xuICAgIGtleTogJ3N1bWFyaXMuZ3JhdmF0YXIudXJsJyxcbiAgICBsYWJlbDogJ0NPTkZJR1VSQVRJT04uT1BUSU9OUy5HUkFWQVRBUl9VUkwnLFxuICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgIGRlZmF1bHRWYWx1ZTogJ2h0dHBzOi8vd3d3LmdyYXZhdGFyLmNvbS9hdmF0YXIve21kNX0nLFxuICB9LFxuICBURVNUSU5HOiA8Rm9ybUZpZWxkRGVmaW5pdGlvbj57XG4gICAga2V5OiAnc3VtYXJpcy50ZXN0aW5nLmVuYWJsZScsXG4gICAgbGFiZWw6ICdDT05GSUdVUkFUSU9OLk9QVElPTlMuVEVTVElORycsXG4gICAgdHlwZTogJ2Jvb2xlYW4nLFxuICB9LFxuICBBUFBfTUlOX1ZFUlNJT046IDxGb3JtRmllbGREZWZpbml0aW9uPntcbiAgICBrZXk6ICdzdW1hcmlzLmFwcC52ZXJzaW9uLm1pbicsXG4gICAgbGFiZWw6ICdDT05GSUdVUkFUSU9OLk9QVElPTlMuQVBQX01JTl9WRVJTSU9OJyxcbiAgICB0eXBlOiAnc3RyaW5nJyxcbiAgfSxcbiAgSEVMUF9VUkw6IDxGb3JtRmllbGREZWZpbml0aW9uPntcbiAgICBrZXk6ICdzdW1hcmlzLmhlbHAudXJsJyxcbiAgICBsYWJlbDogJ0NPTkZJR1VSQVRJT04uT1BUSU9OUy5IRUxQX1VSTCcsXG4gICAgdHlwZTogJ3N0cmluZycsXG4gIH0sXG4gIEZPUlVNX1VSTDogPEZvcm1GaWVsZERlZmluaXRpb24+e1xuICAgIGtleTogJ3N1bWFyaXMuZm9ydW0udXJsJyxcbiAgICBsYWJlbDogJ0NPTkZJR1VSQVRJT04uT1BUSU9OUy5GT1JVTV9VUkwnLFxuICAgIHR5cGU6ICdzdHJpbmcnLFxuICB9LFxuICBSRVBPUlRfSVNTVUVfVVJMOiA8Rm9ybUZpZWxkRGVmaW5pdGlvbj57XG4gICAga2V5OiAnc3VtYXJpcy5yZXBvcnRJc3N1ZS51cmwnLFxuICAgIGxhYmVsOiAnQ09ORklHVVJBVElPTi5PUFRJT05TLlJFUE9SVF9JU1NVRV9VUkwnLFxuICAgIHR5cGU6ICdzdHJpbmcnLFxuICB9LFxuICBMT0dPX0xBUkdFOiA8Rm9ybUZpZWxkRGVmaW5pdGlvbj57XG4gICAga2V5OiAnc3VtYXJpcy5sb2dvLmxhcmdlJyxcbiAgICBsYWJlbDogJ0NPTkZJR1VSQVRJT04uT1BUSU9OUy5IT01FLkxPR09fTEFSR0UnLFxuICAgIHR5cGU6ICdzdHJpbmcnLFxuICB9LFxuICBNRU5VX0lURU1TOiA8Rm9ybUZpZWxkRGVmaW5pdGlvbj57XG4gICAga2V5OiAnc3VtYXJpcy5tZW51Lml0ZW1zJyxcbiAgICBsYWJlbDogJ0NPTkZJR1VSQVRJT04uT1BUSU9OUy5NRU5VLklURU1TJyxcbiAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAvLyAtLSBGT1IgREVWXG4gICAgLyosZGVmYXVsdFZhbHVlOiBKU09OLnN0cmluZ2lmeShbXG4gICAgICAgIHt0aXRsZTogXCJJdGVtICMxXCIsIHBhdGg6IFwiL3NldHRpbmdzXCIsIGljb246IFwicGVvcGxlXCIsIGFmdGVyOiBcIk1FTlUuSE9NRVwifSxcbiAgICAgICAge3RpdGxlOiBcIkl0ZW0gIzJcIiwgcGF0aDogXCIvc2V0dGluZ3NcIiwgaWNvbjogXCJwZW9wbGVcIiwgYmVmb3JlOiBcIk1FTlUuTE9HT1VUXCJ9XG4gICAgXSkqL1xuICB9LFxuICBIT01FX1BBUlRORVJTX0RFUEFSVE1FTlRTOiA8Rm9ybUZpZWxkRGVmaW5pdGlvbj57XG4gICAga2V5OiAnc3VtYXJpcy5wYXJ0bmVyLmRlcGFydG1lbnRzJyxcbiAgICBsYWJlbDogJ0NPTkZJR1VSQVRJT04uT1BUSU9OUy5IT01FLlBBUlRORVJfREVQQVJUTUVOVFMnLFxuICAgIHR5cGU6ICdzdHJpbmcnLFxuICB9LFxuICBIT01FX0JBQ0tHUk9VTkRfSU1BR0U6IDxGb3JtRmllbGREZWZpbml0aW9uPntcbiAgICBrZXk6ICdzdW1hcmlzLmJhY2tncm91bmQuaW1hZ2VzJyxcbiAgICBsYWJlbDogJ0NPTkZJR1VSQVRJT04uT1BUSU9OUy5IT01FLkJBQ0tHUk9VTkRfSU1BR0VTJyxcbiAgICB0eXBlOiAnc3RyaW5nJyxcbiAgfSxcbiAgQ09MT1JfUFJJTUFSWTogPEZvcm1GaWVsZERlZmluaXRpb24+e1xuICAgIGtleTogJ3N1bWFyaXMuY29sb3IucHJpbWFyeScsXG4gICAgbGFiZWw6ICdDT05GSUdVUkFUSU9OLk9QVElPTlMuQ09MT1JTLlBSSU1BUlknLFxuICAgIHR5cGU6ICdjb2xvcicsXG4gIH0sXG4gIENPTE9SX1NFQ09OREFSWTogPEZvcm1GaWVsZERlZmluaXRpb24+e1xuICAgIGtleTogJ3N1bWFyaXMuY29sb3Iuc2Vjb25kYXJ5JyxcbiAgICBsYWJlbDogJ0NPTkZJR1VSQVRJT04uT1BUSU9OUy5DT0xPUlMuU0VDT05EQVJZJyxcbiAgICB0eXBlOiAnY29sb3InLFxuICB9LFxuICBDT0xPUl9URVJUSUFSWTogPEZvcm1GaWVsZERlZmluaXRpb24+e1xuICAgIGtleTogJ3N1bWFyaXMuY29sb3IudGVydGlhcnknLFxuICAgIGxhYmVsOiAnQ09ORklHVVJBVElPTi5PUFRJT05TLkNPTE9SUy5URVJUSUFSWScsXG4gICAgdHlwZTogJ2NvbG9yJyxcbiAgfSxcbiAgQ09MT1JfU1VDQ0VTUzogPEZvcm1GaWVsZERlZmluaXRpb24+e1xuICAgIGtleTogJ3N1bWFyaXMuY29sb3Iuc3VjY2VzcycsXG4gICAgbGFiZWw6ICdDT05GSUdVUkFUSU9OLk9QVElPTlMuQ09MT1JTLlNVQ0NFU1MnLFxuICAgIHR5cGU6ICdjb2xvcicsXG4gIH0sXG4gIENPTE9SX1dBUk5JTkc6IDxGb3JtRmllbGREZWZpbml0aW9uPntcbiAgICBrZXk6ICdzdW1hcmlzLmNvbG9yLndhcm5pbmcnLFxuICAgIGxhYmVsOiAnQ09ORklHVVJBVElPTi5PUFRJT05TLkNPTE9SUy5XQVJOSU5HJyxcbiAgICB0eXBlOiAnY29sb3InLFxuICB9LFxuICBDT0xPUl9BQ0NFTlQ6IDxGb3JtRmllbGREZWZpbml0aW9uPntcbiAgICBrZXk6ICdzdW1hcmlzLmNvbG9yLmFjY2VudCcsXG4gICAgbGFiZWw6ICdDT05GSUdVUkFUSU9OLk9QVElPTlMuQ09MT1JTLkFDQ0VOVCcsXG4gICAgdHlwZTogJ2NvbG9yJyxcbiAgfSxcbiAgQ09MT1JfREFOR0VSOiA8Rm9ybUZpZWxkRGVmaW5pdGlvbj57XG4gICAga2V5OiAnc3VtYXJpcy5jb2xvci5kYW5nZXInLFxuICAgIGxhYmVsOiAnQ09ORklHVVJBVElPTi5PUFRJT05TLkNPTE9SUy5EQU5HRVInLFxuICAgIHR5cGU6ICdjb2xvcicsXG4gIH0sXG4gIEZPUk1fRklFTERfQkFDS0dST1VORF9DT0xPUjogPEZvcm1GaWVsZERlZmluaXRpb24+e1xuICAgIGtleTogJ3N1bWFyaXMudGhlbWUuZmllbGRCYWNrZ3JvdW5kQ29sb3InLFxuICAgIGxhYmVsOiAnQ09ORklHVVJBVElPTi5PUFRJT05TLkZPUk1fRklFTERfQkFDS0dST1VORF9DT0xPUicsXG4gICAgdHlwZTogJ2NvbG9yJyxcbiAgfSxcbiAgRk9STV9GSUVMRF9GT0NVU19CQUNLR1JPVU5EX0NPTE9SOiA8Rm9ybUZpZWxkRGVmaW5pdGlvbj57XG4gICAga2V5OiAnc3VtYXJpcy50aGVtZS5maWVsZEZvY3VzQmFja2dyb3VuZENvbG9yJyxcbiAgICBsYWJlbDogJ0NPTkZJR1VSQVRJT04uT1BUSU9OUy5GT1JNX0ZJRUxEX0ZPQ1VTX0JBQ0tHUk9VTkRfQ09MT1InLFxuICAgIHR5cGU6ICdjb2xvcicsXG4gIH0sXG4gIEZPUk1fRklFTERfRElTQUJMRURfQkFDS0dST1VORF9DT0xPUjogPEZvcm1GaWVsZERlZmluaXRpb24+e1xuICAgIGtleTogJ3N1bWFyaXMudGhlbWUuZmllbGREaXNhYmxlZEJhY2tncm91bmRDb2xvcicsXG4gICAgbGFiZWw6ICdDT05GSUdVUkFUSU9OLk9QVElPTlMuRk9STV9GSUVMRF9ESVNBQkxFRF9CQUNLR1JPVU5EX0NPTE9SJyxcbiAgICB0eXBlOiAnY29sb3InLFxuICB9LFxuICBBTkRST0lEX0lOU1RBTExfVVJMOiA8Rm9ybUZpZWxkRGVmaW5pdGlvbj57XG4gICAga2V5OiAnc3VtYXJpcy5hbmRyb2lkLmluc3RhbGwudXJsJyxcbiAgICBsYWJlbDogJ0NPTkZJR1VSQVRJT04uT1BUSU9OUy5BTkRST0lEX0lOU1RBTExfVVJMJyxcbiAgICB0eXBlOiAnc3RyaW5nJyxcbiAgfSxcbiAgREJfVElNRVpPTkU6IDxGb3JtRmllbGREZWZpbml0aW9uPntcbiAgICBrZXk6ICdzdW1hcmlzLnBlcnNpc3RlbmNlLmRiLnRpbWV6b25lJyxcbiAgICBsYWJlbDogJ0NPTkZJR1VSQVRJT04uT1BUSU9OUy5EQl9USU1FWk9ORScsXG4gICAgdHlwZTogJ3N0cmluZycsXG4gICAgaXNUcmFuc2llbnQ6IHRydWUsIC8vIE9ubHkgb24gc2VydmVyLCBjYW5ub3QgYmUgc2V0XG4gIH0sXG4gIEFDQ09VTlRfTEFUX0xPTkdfRk9STUFUX0VOQUJMRTogPEZvcm1GaWVsZERlZmluaXRpb24+e1xuICAgIGtleTogJ3N1bWFyaXMuYWNjb3VudC5sYXRMb25nRm9ybWF0LmVuYWJsZScsXG4gICAgbGFiZWw6ICdDT05GSUdVUkFUSU9OLk9QVElPTlMuQUNDT1VOVC5FTkFCTEVfTEFUTE9OR19GT1JNQVQnLFxuICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICBkZWZhdWx0VmFsdWU6IHRydWUsXG4gIH0sXG4gIEFDQ09VTlRfUkVBRE9OTFk6IDxGb3JtRmllbGREZWZpbml0aW9uPntcbiAgICBrZXk6ICdzdW1hcmlzLmFjY291bnQucmVhZE9ubHknLFxuICAgIGxhYmVsOiAnQ09ORklHVVJBVElPTi5PUFRJT05TLkFDQ09VTlQuUkVBRE9OTFknLFxuICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICBkZWZhdWx0VmFsdWU6IGZhbHNlLFxuICAgIGlzVHJhbnNpZW50OiB0cnVlLFxuICB9LFxufSk7XG4iXX0=
|
|
243
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS5jb25maWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2NvcmUvc2VydmljZXMvY29uZmlnL2NvcmUuY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUlBLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUd0RCxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO0lBQy9DLElBQUksRUFBdUI7UUFDekIsR0FBRyxFQUFFLGNBQWM7UUFDbkIsS0FBSyxFQUFFLDRCQUE0QjtRQUNuQyxJQUFJLEVBQUUsUUFBUTtLQUNmO0lBQ0QsT0FBTyxFQUF1QjtRQUM1QixHQUFHLEVBQUUsaUJBQWlCO1FBQ3RCLEtBQUssRUFBRSwrQkFBK0I7UUFDdEMsSUFBSSxFQUFFLFFBQVE7S0FDZjtJQUNELGNBQWMsRUFBdUI7UUFDbkMsR0FBRyxFQUFFLHVCQUF1QjtRQUM1QixLQUFLLEVBQUUsc0NBQXNDO1FBQzdDLElBQUksRUFBRSxNQUFNO1FBQ1osTUFBTSxFQUFFLFdBQVc7S0FDcEI7SUFDRCx1QkFBdUIsRUFBdUI7UUFDNUMsR0FBRyxFQUFFLDhCQUE4QjtRQUNuQyxLQUFLLEVBQUUsOENBQThDO1FBQ3JELElBQUksRUFBRSxNQUFNO1FBQ1osTUFBTSxFQUFFO1lBQ047Z0JBQ0UsR0FBRyxFQUFFLFFBQVE7Z0JBQ2IsS0FBSyxFQUFFLG9DQUFvQzthQUM1QztZQUNEO2dCQUNFLEdBQUcsRUFBRSxNQUFNO2dCQUNYLEtBQUssRUFBRSxrQ0FBa0M7YUFDMUM7WUFDRDtnQkFDRSxHQUFHLEVBQUUsSUFBSTtnQkFDVCxLQUFLLEVBQUUsZ0NBQWdDO2FBQ3hDO1NBQ0Y7S0FDRjtJQUNEOztPQUVHO0lBQ0gsYUFBYTtJQUNiLCtCQUErQixFQUF1QjtRQUNwRCxHQUFHLEVBQUUsc0NBQXNDO1FBQzNDLEtBQUssRUFBRSxxREFBcUQ7UUFDNUQs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LElBQUksRUFBRSxPQUFPO0tBQ2Q7SUFDRCxpQ0FBaUMsRUFBdUI7UUFDdEQsR0FBRyxFQUFFLHlDQUF5QztRQUM5QyxLQUFLLEVBQUUseURBQXlEO1FBQ2hFLElBQUksRUFBRSxPQUFPO0tBQ2Q7SUFDRCxvQ0FBb0MsRUFBdUI7UUFDekQsR0FBRyxFQUFFLDRDQUE0QztRQUNqRCxLQUFLLEVBQUUsNERBQTREO1FBQ25FLElBQUksRUFBRSxPQUFPO0tBQ2Q7SUFDRCxtQkFBbUIsRUFBdUI7UUFDeEMsR0FBRyxFQUFFLDZCQUE2QjtRQUNsQyxLQUFLLEVBQUUsMkNBQTJDO1FBQ2xELElBQUksRUFBRSxRQUFRO0tBQ2Y7SUFDRCxlQUFlLEVBQXVCO1FBQ3BDLEdBQUcsRUFBRSx5QkFBeUI7UUFDOUIsS0FBSyxFQUFFLHVDQUF1QztRQUM5QyxJQUFJLEVBQUUsUUFBUTtLQUNmO0lBQ0QsV0FBVyxFQUF1QjtRQUNoQyxHQUFHLEVBQUUsaUNBQWlDO1FBQ3RDLEtBQUssRUFBRSxtQ0FBbUM7UUFDMUMsSUFBSSxFQUFFLFFBQVE7UUFDZCxXQUFXLEVBQUUsSUFBSSxFQUFFLGdDQUFnQztLQUNwRDtJQUNELDhCQUE4QixFQUF1QjtRQUNuRCxHQUFHLEVBQUUsc0NBQXNDO1FBQzNDLEtBQUssRUFBRSxxREFBcUQ7UUFDNUQsSUFBSSxFQUFFLFNBQVM7UUFDZixZQUFZLEVBQUUsSUFBSTtLQUNuQjtJQUNELGdCQUFnQixFQUF1QjtRQUNyQyxHQUFHLEVBQUUsMEJBQTBCO1FBQy9CLEtBQUssRUFBRSx3Q0FBd0M7UUFDL0MsSUFBSSxFQUFFLFNBQVM7UUFDZixZQUFZLEVBQUUsS0FBSztRQUNuQixXQUFXLEVBQUUsSUFBSTtLQUNsQjtDQUNGLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIFRPRE86IHJlbmFtZSB0byBDT05GSUdfT1BUSU9OU19NQVBcbi8vIHRoZW4gZGVjbGFyZSBhIHR5cGUgbGlrZSB0aGlzIDpcbi8vID4gZXhwb3J0IGRlY2xhcmUgdHlwZSBDb25maWdPcHRpb25zID0ga2V5IG9mIENPTkZJR19PUFRJT05TX01BUFxuaW1wb3J0IHsgRm9ybUZpZWxkRGVmaW5pdGlvbiB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9mb3JtL2ZpZWxkLm1vZGVsJztcbmltcG9ydCB7IEFQUF9MT0NBTEVTIH0gZnJvbSAnLi4vbW9kZWwvc2V0dGluZ3MubW9kZWwnO1xuaW1wb3J0IHsgQXV0aFRva2VuVHlwZSB9IGZyb20gJy4uL25ldHdvcmsudHlwZXMnO1xuXG5leHBvcnQgY29uc3QgQ09SRV9DT05GSUdfT1BUSU9OUyA9IE9iamVjdC5mcmVlemUoe1xuICBMT0dPOiA8Rm9ybUZpZWxkRGVmaW5pdGlvbj57XG4gICAga2V5OiAnc3VtYXJpcy5sb2dvJyxcbiAgICBsYWJlbDogJ0NPTkZJR1VSQVRJT04uT1BUSU9OUy5MT0dPJyxcbiAgICB0eXBlOiAnc3RyaW5nJyxcbiAgfSxcbiAgRkFWSUNPTjogPEZvcm1GaWVsZERlZmluaXRpb24+e1xuICAgIGtleTogJ3N1bWFyaXMuZmF2aWNvbicsXG4gICAgbGFiZWw6ICdDT05GSUdVUkFUSU9OLk9QVElPTlMuRkFWSUNPTicsXG4gICAgdHlwZTogJ3N0cmluZycsXG4gIH0sXG4gIERFRkFVTFRfTE9DQUxFOiA8Rm9ybUZpZWxkRGVmaW5pdGlvbj57XG4gICAga2V5OiAnc3VtYXJpcy5kZWZhdWx0TG9jYWxlJyxcbiAgICBsYWJlbDogJ0NPTkZJR1VSQVRJT04uT1BUSU9OUy5ERUZBVUxUX0xPQ0FMRScsXG4gICAgdHlwZTogJ2VudW0nLFxuICAgIHZhbHVlczogQVBQX0xPQ0FMRVMsXG4gIH0sXG4gIERFRkFVTFRfTEFUX0xPTkdfRk9STUFUOiA8Rm9ybUZpZWxkRGVmaW5pdGlvbj57XG4gICAga2V5OiAnc3VtYXJpcy5kZWZhdWx0TGF0TG9uZ0Zvcm1hdCcsXG4gICAgbGFiZWw6ICdDT05GSUdVUkFUSU9OLk9QVElPTlMuREVGQVVMVF9MQVRMT05HX0ZPUk1BVCcsXG4gICAgdHlwZTogJ2VudW0nLFxuICAgIHZhbHVlczogW1xuICAgICAge1xuICAgICAgICBrZXk6ICdERE1NU1MnLFxuICAgICAgICB2YWx1ZTogJ0NPTU1PTi5MQVRfTE9ORy5ERE1NU1NfUExBQ0VIT0xERVInLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAga2V5OiAnRERNTScsXG4gICAgICAgIHZhbHVlOiAnQ09NTU9OLkxBVF9MT05HLkRETU1fUExBQ0VIT0xERVInLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAga2V5OiAnREQnLFxuICAgICAgICB2YWx1ZTogJ0NPTU1PTi5MQVRfTE9ORy5ERF9QTEFDRUhPTERFUicsXG4gICAgICB9LFxuICAgIF0sXG4gIH0sXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBVc2UgYEFDQ09VTlRfTEFUX0xPTkdfRk9STUFUX0VOQUJMRWAgaW5zdGVhZFxuICAgKi9cbiAgLy9AZGVwcmVjYXRlZFxuICBERUZBVUxUX0xBVF9MT05HX0ZPUk1BVF9FTkFCTEVEOiA8Rm9ybUZpZWxkRGVmaW5pdGlvbj57XG4gICAga2V5OiAnc3VtYXJpcy5kZWZhdWx0TGF0TG9uZ0Zvcm1hdC5lbmFibGVkJyxcbiAgICBsYWJlbDogJ0NPTkZJR1VSQVRJT04uT1BUSU9OUy5FTkFCTEVfREVGQVVMVF9MQVRMT05HX0ZPUk1BVCcsXG4gICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgIGRlZmF1bHRWYWx1ZTogdHJ1ZSwgLy8gSW1wb3J0YW50LCBmb3IgY29tcGF0aWJpbGl0eSByZWFzb24gYWZ0ZXIgZGVwcmVjYXRpb25cbiAgfSxcbiAgUkVHSVNUUkFUSU9OX0VOQUJMRTogPEZvcm1GaWVsZERlZmluaXRpb24+e1xuICAgIGtleTogJ3N1bWFyaXMucmVnaXN0cmF0aW9uLmVuYWJsZScsXG4gICAgbGFiZWw6ICdDT05GSUdVUkFUSU9OLk9QVElPTlMuSE9NRS5FTkFCTEVfUkVHSVNUUkFUSU9OJyxcbiAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgZGVmYXVsdFZhbHVlOiB0cnVlLFxuICB9LFxuICBBVVRIX1RPS0VOX1RZUEU6IDxGb3JtRmllbGREZWZpbml0aW9uPntcbiAgICBrZXk6ICdzdW1hcmlzLmF1dGgudG9rZW4udHlwZScsXG4gICAgbGFiZWw6ICdDT05GSUdVUkFUSU9OLk9QVElPTlMuQVVUSF9UT0tFTl9UWVBFX1BMQUNFSE9MREVSJyxcbiAgICB0eXBlOiAnZW51bScsXG4gICAgdmFsdWVzOiBbXG4gICAgICB7XG4gICAgICAgIGtleTogPEF1dGhUb2tlblR5cGU+J3Rva2VuJyxcbiAgICAgICAgdmFsdWU6ICdDT05GSUdVUkFUSU9OLk9QVElPTlMuQVVUSF9UT0tFTl9UWVBFLlRPS0VOJyxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGtleTogPEF1dGhUb2tlblR5cGU+J2Jhc2ljJyxcbiAgICAgICAgdmFsdWU6ICdDT05GSUdVUkFUSU9OLk9QVElPTlMuQVVUSF9UT0tFTl9UWVBFLkJBU0lDJyxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGtleTogPEF1dGhUb2tlblR5cGU+J2Jhc2ljLWFuZC10b2tlbicsXG4gICAgICAgIHZhbHVlOiAnQ09ORklHVVJBVElPTi5PUFRJT05TLkFVVEhfVE9LRU5fVFlQRS5CQVNJQ19BTkRfVE9LRU4nLFxuICAgICAgfSxcbiAgICBdLFxuICAgIGRlZmF1bHRWYWx1ZTogPEF1dGhUb2tlblR5cGU+J3Rva2VuJyxcbiAgfSxcbiAgQVVUSF9SRVNFVF9QQVNTV09SRF9FTkFCTEU6IDxGb3JtRmllbGREZWZpbml0aW9uPntcbiAgICBrZXk6ICdzdW1hcmlzLmF1dGgucmVzZXQuZW5hYmxlJyxcbiAgICBsYWJlbDogJ0NPTkZJR1VSQVRJT04uT1BUSU9OUy5IT01FLkNIQU5HRV9QQVNTV09SRCcsXG4gICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgIGRlZmF1bHRWYWx1ZTogdHJ1ZSxcbiAgfSxcbiAgQVVUSF9BUElfVE9LRU5fRU5BQkxFRDogPEZvcm1GaWVsZERlZmluaXRpb24+e1xuICAgIGtleTogJ3N1bWFyaXMuYXV0aC5hcGkudG9rZW4uZW5hYmxlZCcsXG4gICAgbGFiZWw6ICdDT05GSUdVUkFUSU9OLk9QVElPTlMuRU5BQkxFX0FVVEhfQVBJX1RPS0VOUycsXG4gICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgIGRlZmF1bHRWYWx1ZTogZmFsc2UsXG4gICAgaXNUcmFuc2llbnQ6IHRydWUsXG4gIH0sXG4gIEFVVEhfQVBJX1RPS0VOX1NDT1BFX0VOQUJMRUQ6IDxGb3JtRmllbGREZWZpbml0aW9uPntcbiAgICBrZXk6ICdzdW1hcmlzLmF1dGguYXBpLnRva2VuLnNjb3BlLmVuYWJsZWQnLFxuICAgIGxhYmVsOiAnQ09ORklHVVJBVElPTi5PUFRJT05TLkVOQUJMRV9BVVRIX0FQSV9UT0tFTlNfU0NPUEUnLFxuICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICBkZWZhdWx0VmFsdWU6IGZhbHNlLFxuICAgIGlzVHJhbnNpZW50OiB0cnVlLFxuICB9LFxuICBERUZBVUxUX0FVVEhfQVBJX1RPS0VOX1NDT1BFOiA8Rm9ybUZpZWxkRGVmaW5pdGlvbj57XG4gICAga2V5OiAnc3VtYXJpcy5hdXRoLmFwaS50b2tlbi5zY29wZS5kZWZhdWx0JyxcbiAgICBsYWJlbDogJ0NPTkZJR1VSQVRJT04uT1BUSU9OUy5ERUZBVUxUX0FVVEhfQVBJX1RPS0VOX1NDT1BFJyxcbiAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICBkZWZhdWx0VmFsdWU6ICdyZWFkX2FwaScsXG4gICAgaXNUcmFuc2llbnQ6IHRydWUsXG4gIH0sXG4gIEdSQVZBVEFSX0VOQUJMRTogPEZvcm1GaWVsZERlZmluaXRpb24+e1xuICAgIGtleTogJ3N1bWFyaXMuZ3JhdmF0YXIuZW5hYmxlJyxcbiAgICBsYWJlbDogJ0NPTkZJR1VSQVRJT04uT1BUSU9OUy5FTkFCTEVfR1JBVkFUQVInLFxuICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICBkZWZhdWx0VmFsdWU6IGZhbHNlLFxuICB9LFxuICBHUkFWQVRBUl9VUkw6IDxGb3JtRmllbGREZWZpbml0aW9uPntcbiAgICBrZXk6ICdzdW1hcmlzLmdyYXZhdGFyLnVybCcsXG4gICAgbGFiZWw6ICdDT05GSUdVUkFUSU9OLk9QVElPTlMuR1JBVkFUQVJfVVJMJyxcbiAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICBkZWZhdWx0VmFsdWU6ICdodHRwczovL3d3dy5ncmF2YXRhci5jb20vYXZhdGFyL3ttZDV9JyxcbiAgfSxcbiAgVEVTVElORzogPEZvcm1GaWVsZERlZmluaXRpb24+e1xuICAgIGtleTogJ3N1bWFyaXMudGVzdGluZy5lbmFibGUnLFxuICAgIGxhYmVsOiAnQ09ORklHVVJBVElPTi5PUFRJT05TLlRFU1RJTkcnLFxuICAgIHR5cGU6ICdib29sZWFuJyxcbiAgfSxcbiAgQVBQX01JTl9WRVJTSU9OOiA8Rm9ybUZpZWxkRGVmaW5pdGlvbj57XG4gICAga2V5OiAnc3VtYXJpcy5hcHAudmVyc2lvbi5taW4nLFxuICAgIGxhYmVsOiAnQ09ORklHVVJBVElPTi5PUFRJT05TLkFQUF9NSU5fVkVSU0lPTicsXG4gICAgdHlwZTogJ3N0cmluZycsXG4gIH0sXG4gIEhFTFBfVVJMOiA8Rm9ybUZpZWxkRGVmaW5pdGlvbj57XG4gICAga2V5OiAnc3VtYXJpcy5oZWxwLnVybCcsXG4gICAgbGFiZWw6ICdDT05GSUdVUkFUSU9OLk9QVElPTlMuSEVMUF9VUkwnLFxuICAgIHR5cGU6ICdzdHJpbmcnLFxuICB9LFxuICBGT1JVTV9VUkw6IDxGb3JtRmllbGREZWZpbml0aW9uPntcbiAgICBrZXk6ICdzdW1hcmlzLmZvcnVtLnVybCcsXG4gICAgbGFiZWw6ICdDT05GSUdVUkFUSU9OLk9QVElPTlMuRk9SVU1fVVJMJyxcbiAgICB0eXBlOiAnc3RyaW5nJyxcbiAgfSxcbiAgUkVQT1JUX0lTU1VFX1VSTDogPEZvcm1GaWVsZERlZmluaXRpb24+e1xuICAgIGtleTogJ3N1bWFyaXMucmVwb3J0SXNzdWUudXJsJyxcbiAgICBsYWJlbDogJ0NPTkZJR1VSQVRJT04uT1BUSU9OUy5SRVBPUlRfSVNTVUVfVVJMJyxcbiAgICB0eXBlOiAnc3RyaW5nJyxcbiAgfSxcbiAgTE9HT19MQVJHRTogPEZvcm1GaWVsZERlZmluaXRpb24+e1xuICAgIGtleTogJ3N1bWFyaXMubG9nby5sYXJnZScsXG4gICAgbGFiZWw6ICdDT05GSUdVUkFUSU9OLk9QVElPTlMuSE9NRS5MT0dPX0xBUkdFJyxcbiAgICB0eXBlOiAnc3RyaW5nJyxcbiAgfSxcbiAgTUVOVV9JVEVNUzogPEZvcm1GaWVsZERlZmluaXRpb24+e1xuICAgIGtleTogJ3N1bWFyaXMubWVudS5pdGVtcycsXG4gICAgbGFiZWw6ICdDT05GSUdVUkFUSU9OLk9QVElPTlMuTUVOVS5JVEVNUycsXG4gICAgdHlwZTogJ3N0cmluZycsXG4gICAgLy8gLS0gRk9SIERFVlxuICAgIC8qLGRlZmF1bHRWYWx1ZTogSlNPTi5zdHJpbmdpZnkoW1xuICAgICAgICB7dGl0bGU6IFwiSXRlbSAjMVwiLCBwYXRoOiBcIi9zZXR0aW5nc1wiLCBpY29uOiBcInBlb3BsZVwiLCBhZnRlcjogXCJNRU5VLkhPTUVcIn0sXG4gICAgICAgIHt0aXRsZTogXCJJdGVtICMyXCIsIHBhdGg6IFwiL3NldHRpbmdzXCIsIGljb246IFwicGVvcGxlXCIsIGJlZm9yZTogXCJNRU5VLkxPR09VVFwifVxuICAgIF0pKi9cbiAgfSxcbiAgSE9NRV9QQVJUTkVSU19ERVBBUlRNRU5UUzogPEZvcm1GaWVsZERlZmluaXRpb24+e1xuICAgIGtleTogJ3N1bWFyaXMucGFydG5lci5kZXBhcnRtZW50cycsXG4gICAgbGFiZWw6ICdDT05GSUdVUkFUSU9OLk9QVElPTlMuSE9NRS5QQVJUTkVSX0RFUEFSVE1FTlRTJyxcbiAgICB0eXBlOiAnc3RyaW5nJyxcbiAgfSxcbiAgSE9NRV9CQUNLR1JPVU5EX0lNQUdFOiA8Rm9ybUZpZWxkRGVmaW5pdGlvbj57XG4gICAga2V5OiAnc3VtYXJpcy5iYWNrZ3JvdW5kLmltYWdlcycsXG4gICAgbGFiZWw6ICdDT05GSUdVUkFUSU9OLk9QVElPTlMuSE9NRS5CQUNLR1JPVU5EX0lNQUdFUycsXG4gICAgdHlwZTogJ3N0cmluZycsXG4gIH0sXG4gIENPTE9SX1BSSU1BUlk6IDxGb3JtRmllbGREZWZpbml0aW9uPntcbiAgICBrZXk6ICdzdW1hcmlzLmNvbG9yLnByaW1hcnknLFxuICAgIGxhYmVsOiAnQ09ORklHVVJBVElPTi5PUFRJT05TLkNPTE9SUy5QUklNQVJZJyxcbiAgICB0eXBlOiAnY29sb3InLFxuICB9LFxuICBDT0xPUl9TRUNPTkRBUlk6IDxGb3JtRmllbGREZWZpbml0aW9uPntcbiAgICBrZXk6ICdzdW1hcmlzLmNvbG9yLnNlY29uZGFyeScsXG4gICAgbGFiZWw6ICdDT05GSUdVUkFUSU9OLk9QVElPTlMuQ09MT1JTLlNFQ09OREFSWScsXG4gICAgdHlwZTogJ2NvbG9yJyxcbiAgfSxcbiAgQ09MT1JfVEVSVElBUlk6IDxGb3JtRmllbGREZWZpbml0aW9uPntcbiAgICBrZXk6ICdzdW1hcmlzLmNvbG9yLnRlcnRpYXJ5JyxcbiAgICBsYWJlbDogJ0NPTkZJR1VSQVRJT04uT1BUSU9OUy5DT0xPUlMuVEVSVElBUlknLFxuICAgIHR5cGU6ICdjb2xvcicsXG4gIH0sXG4gIENPTE9SX1NVQ0NFU1M6IDxGb3JtRmllbGREZWZpbml0aW9uPntcbiAgICBrZXk6ICdzdW1hcmlzLmNvbG9yLnN1Y2Nlc3MnLFxuICAgIGxhYmVsOiAnQ09ORklHVVJBVElPTi5PUFRJT05TLkNPTE9SUy5TVUNDRVNTJyxcbiAgICB0eXBlOiAnY29sb3InLFxuICB9LFxuICBDT0xPUl9XQVJOSU5HOiA8Rm9ybUZpZWxkRGVmaW5pdGlvbj57XG4gICAga2V5OiAnc3VtYXJpcy5jb2xvci53YXJuaW5nJyxcbiAgICBsYWJlbDogJ0NPTkZJR1VSQVRJT04uT1BUSU9OUy5DT0xPUlMuV0FSTklORycsXG4gICAgdHlwZTogJ2NvbG9yJyxcbiAgfSxcbiAgQ09MT1JfQUNDRU5UOiA8Rm9ybUZpZWxkRGVmaW5pdGlvbj57XG4gICAga2V5OiAnc3VtYXJpcy5jb2xvci5hY2NlbnQnLFxuICAgIGxhYmVsOiAnQ09ORklHVVJBVElPTi5PUFRJT05TLkNPTE9SUy5BQ0NFTlQnLFxuICAgIHR5cGU6ICdjb2xvcicsXG4gIH0sXG4gIENPTE9SX0RBTkdFUjogPEZvcm1GaWVsZERlZmluaXRpb24+e1xuICAgIGtleTogJ3N1bWFyaXMuY29sb3IuZGFuZ2VyJyxcbiAgICBsYWJlbDogJ0NPTkZJR1VSQVRJT04uT1BUSU9OUy5DT0xPUlMuREFOR0VSJyxcbiAgICB0eXBlOiAnY29sb3InLFxuICB9LFxuICBGT1JNX0ZJRUxEX0JBQ0tHUk9VTkRfQ09MT1I6IDxGb3JtRmllbGREZWZpbml0aW9uPntcbiAgICBrZXk6ICdzdW1hcmlzLnRoZW1lLmZpZWxkQmFja2dyb3VuZENvbG9yJyxcbiAgICBsYWJlbDogJ0NPTkZJR1VSQVRJT04uT1BUSU9OUy5GT1JNX0ZJRUxEX0JBQ0tHUk9VTkRfQ09MT1InLFxuICAgIHR5cGU6ICdjb2xvcicsXG4gIH0sXG4gIEZPUk1fRklFTERfRk9DVVNfQkFDS0dST1VORF9DT0xPUjogPEZvcm1GaWVsZERlZmluaXRpb24+e1xuICAgIGtleTogJ3N1bWFyaXMudGhlbWUuZmllbGRGb2N1c0JhY2tncm91bmRDb2xvcicsXG4gICAgbGFiZWw6ICdDT05GSUdVUkFUSU9OLk9QVElPTlMuRk9STV9GSUVMRF9GT0NVU19CQUNLR1JPVU5EX0NPTE9SJyxcbiAgICB0eXBlOiAnY29sb3InLFxuICB9LFxuICBGT1JNX0ZJRUxEX0RJU0FCTEVEX0JBQ0tHUk9VTkRfQ09MT1I6IDxGb3JtRmllbGREZWZpbml0aW9uPntcbiAgICBrZXk6ICdzdW1hcmlzLnRoZW1lLmZpZWxkRGlzYWJsZWRCYWNrZ3JvdW5kQ29sb3InLFxuICAgIGxhYmVsOiAnQ09ORklHVVJBVElPTi5PUFRJT05TLkZPUk1fRklFTERfRElTQUJMRURfQkFDS0dST1VORF9DT0xPUicsXG4gICAgdHlwZTogJ2NvbG9yJyxcbiAgfSxcbiAgQU5EUk9JRF9JTlNUQUxMX1VSTDogPEZvcm1GaWVsZERlZmluaXRpb24+e1xuICAgIGtleTogJ3N1bWFyaXMuYW5kcm9pZC5pbnN0YWxsLnVybCcsXG4gICAgbGFiZWw6ICdDT05GSUdVUkFUSU9OLk9QVElPTlMuQU5EUk9JRF9JTlNUQUxMX1VSTCcsXG4gICAgdHlwZTogJ3N0cmluZycsXG4gIH0sXG4gIElPU19JTlNUQUxMX1VSTDogPEZvcm1GaWVsZERlZmluaXRpb24+e1xuICAgIGtleTogJ3N1bWFyaXMuaW9zLmluc3RhbGwudXJsJyxcbiAgICBsYWJlbDogJ0NPTkZJR1VSQVRJT04uT1BUSU9OUy5JT1NfSU5TVEFMTF9VUkwnLFxuICAgIHR5cGU6ICdzdHJpbmcnLFxuICB9LFxuICBEQl9USU1FWk9ORTogPEZvcm1GaWVsZERlZmluaXRpb24+e1xuICAgIGtleTogJ3N1bWFyaXMucGVyc2lzdGVuY2UuZGIudGltZXpvbmUnLFxuICAgIGxhYmVsOiAnQ09ORklHVVJBVElPTi5PUFRJT05TLkRCX1RJTUVaT05FJyxcbiAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICBpc1RyYW5zaWVudDogdHJ1ZSwgLy8gT25seSBvbiBzZXJ2ZXIsIGNhbm5vdCBiZSBzZXRcbiAgfSxcbiAgQUNDT1VOVF9MQVRfTE9OR19GT1JNQVRfRU5BQkxFOiA8Rm9ybUZpZWxkRGVmaW5pdGlvbj57XG4gICAga2V5OiAnc3VtYXJpcy5hY2NvdW50LmxhdExvbmdGb3JtYXQuZW5hYmxlJyxcbiAgICBsYWJlbDogJ0NPTkZJR1VSQVRJT04uT1BUSU9OUy5BQ0NPVU5ULkVOQUJMRV9MQVRMT05HX0ZPUk1BVCcsXG4gICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgIGRlZmF1bHRWYWx1ZTogdHJ1ZSxcbiAgfSxcbiAgQUNDT1VOVF9SRUFET05MWTogPEZvcm1GaWVsZERlZmluaXRpb24+e1xuICAgIGtleTogJ3N1bWFyaXMuYWNjb3VudC5yZWFkT25seScsXG4gICAgbGFiZWw6ICdDT05GSUdVUkFUSU9OLk9QVElPTlMuQUNDT1VOVC5SRUFET05MWScsXG4gICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgIGRlZmF1bHRWYWx1ZTogZmFsc2UsXG4gICAgaXNUcmFuc2llbnQ6IHRydWUsXG4gIH0sXG59KTtcbiJdfQ==
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { __decorate } from "tslib";
|
|
2
|
+
import { EntityClass } from './entity.decorators';
|
|
3
|
+
import { Entity } from './entity.model';
|
|
4
|
+
let NodeFeature = class NodeFeature extends Entity {
|
|
5
|
+
static fromObject;
|
|
6
|
+
label;
|
|
7
|
+
name;
|
|
8
|
+
description;
|
|
9
|
+
logo;
|
|
10
|
+
creationDate;
|
|
11
|
+
statusId;
|
|
12
|
+
validityStatusId;
|
|
13
|
+
asObject(options) {
|
|
14
|
+
return super.asObject(options);
|
|
15
|
+
}
|
|
16
|
+
fromObject(source) {
|
|
17
|
+
super.fromObject(source);
|
|
18
|
+
this.label = source.label;
|
|
19
|
+
this.name = source.name;
|
|
20
|
+
this.description = source.description;
|
|
21
|
+
this.logo = source.logo;
|
|
22
|
+
this.creationDate = source.creationDate;
|
|
23
|
+
this.statusId = source.statusId;
|
|
24
|
+
this.validityStatusId = source.validityStatusId;
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
NodeFeature = __decorate([
|
|
28
|
+
EntityClass({ typename: 'NodeFeatureVO' })
|
|
29
|
+
], NodeFeature);
|
|
30
|
+
export { NodeFeature };
|
|
31
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS1mZWF0dXJlLm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9jb3JlL3NlcnZpY2VzL21vZGVsL25vZGUtZmVhdHVyZS5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQ0EsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2xELE9BQU8sRUFBYSxNQUFNLEVBQXlCLE1BQU0sZ0JBQWdCLENBQUM7QUFHbkUsSUFBTSxXQUFXLEdBQWpCLE1BQU0sV0FBWSxTQUFRLE1BQW1CO0lBQ2xELE1BQU0sQ0FBQyxVQUFVLENBQTJDO0lBRTVELEtBQUssQ0FBUztJQUNkLElBQUksQ0FBUztJQUNiLFdBQVcsQ0FBUztJQUNwQixJQUFJLENBQVM7SUFDYixZQUFZLENBQVM7SUFDckIsUUFBUSxDQUFTO0lBQ2pCLGdCQUFnQixDQUFTO0lBRXpCLFFBQVEsQ0FBQyxPQUErQjtRQUN0QyxPQUFPLEtBQUssQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVELFVBQVUsQ0FBQyxNQUFXO1FBQ3BCLEtBQUssQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDekIsSUFBSSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDO1FBQzFCLElBQUksQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQztRQUN4QixJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUM7UUFDdEMsSUFBSSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxZQUFZLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQztRQUN4QyxJQUFJLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUM7UUFDaEMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQztJQUNsRCxDQUFDO0NBQ0YsQ0FBQTtBQXpCWSxXQUFXO0lBRHZCLFdBQVcsQ0FBQyxFQUFFLFFBQVEsRUFBRSxlQUFlLEVBQUUsQ0FBQztHQUM5QixXQUFXLENBeUJ2QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE1vbWVudCB9IGZyb20gJ21vbWVudC9tb21lbnQnO1xuaW1wb3J0IHsgRW50aXR5Q2xhc3MgfSBmcm9tICcuL2VudGl0eS5kZWNvcmF0b3JzJztcbmltcG9ydCB7IENsb25lYWJsZSwgRW50aXR5LCBFbnRpdHlBc09iamVjdE9wdGlvbnMgfSBmcm9tICcuL2VudGl0eS5tb2RlbCc7XG5cbkBFbnRpdHlDbGFzcyh7IHR5cGVuYW1lOiAnTm9kZUZlYXR1cmVWTycgfSlcbmV4cG9ydCBjbGFzcyBOb2RlRmVhdHVyZSBleHRlbmRzIEVudGl0eTxOb2RlRmVhdHVyZT4gaW1wbGVtZW50cyBDbG9uZWFibGU8Tm9kZUZlYXR1cmU+IHtcbiAgc3RhdGljIGZyb21PYmplY3Q6IChzb3VyY2U6IGFueSwgb3B0cz86IGFueSkgPT4gTm9kZUZlYXR1cmU7XG5cbiAgbGFiZWw6IHN0cmluZztcbiAgbmFtZTogc3RyaW5nO1xuICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICBsb2dvOiBzdHJpbmc7XG4gIGNyZWF0aW9uRGF0ZTogTW9tZW50O1xuICBzdGF0dXNJZDogbnVtYmVyO1xuICB2YWxpZGl0eVN0YXR1c0lkOiBudW1iZXI7XG5cbiAgYXNPYmplY3Qob3B0aW9ucz86IEVudGl0eUFzT2JqZWN0T3B0aW9ucyk6IGFueSB7XG4gICAgcmV0dXJuIHN1cGVyLmFzT2JqZWN0KG9wdGlvbnMpO1xuICB9XG5cbiAgZnJvbU9iamVjdChzb3VyY2U6IGFueSkge1xuICAgIHN1cGVyLmZyb21PYmplY3Qoc291cmNlKTtcbiAgICB0aGlzLmxhYmVsID0gc291cmNlLmxhYmVsO1xuICAgIHRoaXMubmFtZSA9IHNvdXJjZS5uYW1lO1xuICAgIHRoaXMuZGVzY3JpcHRpb24gPSBzb3VyY2UuZGVzY3JpcHRpb247XG4gICAgdGhpcy5sb2dvID0gc291cmNlLmxvZ287XG4gICAgdGhpcy5jcmVhdGlvbkRhdGUgPSBzb3VyY2UuY3JlYXRpb25EYXRlO1xuICAgIHRoaXMuc3RhdHVzSWQgPSBzb3VyY2Uuc3RhdHVzSWQ7XG4gICAgdGhpcy52YWxpZGl0eVN0YXR1c0lkID0gc291cmNlLnZhbGlkaXR5U3RhdHVzSWQ7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -4,6 +4,7 @@ import { __decorate } from "tslib";
|
|
|
4
4
|
import { isNilOrBlank, isNotNil, isNotNilOrBlank, noTrailingSlash } from '../../../shared/functions';
|
|
5
5
|
import { Entity } from './entity.model';
|
|
6
6
|
import { EntityClass } from './entity.decorators';
|
|
7
|
+
import { NodeFeature } from './node-feature.model';
|
|
7
8
|
// @dynamic
|
|
8
9
|
let Peer = class Peer extends Entity {
|
|
9
10
|
static { Peer_1 = this; }
|
|
@@ -35,6 +36,11 @@ let Peer = class Peer extends Entity {
|
|
|
35
36
|
static equals(p1, p2) {
|
|
36
37
|
return p1 && p2 && Peer_1.fromObject(p1).equals(p2);
|
|
37
38
|
}
|
|
39
|
+
static countAllFeatures(peers) {
|
|
40
|
+
return (peers || []).reduce((res, peer) => {
|
|
41
|
+
return res + (peer?.features?.length || 0);
|
|
42
|
+
}, 0);
|
|
43
|
+
}
|
|
38
44
|
dns;
|
|
39
45
|
ipv4;
|
|
40
46
|
ipv6;
|
|
@@ -48,11 +54,16 @@ let Peer = class Peer extends Entity {
|
|
|
48
54
|
softwareVersion;
|
|
49
55
|
label;
|
|
50
56
|
name;
|
|
57
|
+
registrationUri;
|
|
58
|
+
registrationManager;
|
|
59
|
+
features;
|
|
51
60
|
constructor() {
|
|
52
61
|
super(Peer_1.TYPENAME);
|
|
53
62
|
}
|
|
54
63
|
asObject(options) {
|
|
55
|
-
|
|
64
|
+
const target = super.asObject(options);
|
|
65
|
+
target.features = this.features?.map((feature) => feature.asObject(options));
|
|
66
|
+
return target;
|
|
56
67
|
}
|
|
57
68
|
fromObject(source) {
|
|
58
69
|
super.fromObject(source);
|
|
@@ -60,9 +71,18 @@ let Peer = class Peer extends Entity {
|
|
|
60
71
|
this.ipv4 = source.ipv4;
|
|
61
72
|
this.ipv6 = source.ipv6;
|
|
62
73
|
this.port = isNotNil(source.port) ? +source.port : undefined;
|
|
63
|
-
this.pubkey = source.pubkey;
|
|
64
74
|
this.useSsl = source.useSsl || this.port === 443;
|
|
75
|
+
this.pubkey = source.pubkey;
|
|
65
76
|
this.path = source.path || '';
|
|
77
|
+
this.favicon = source.favicon;
|
|
78
|
+
this.status = source.status;
|
|
79
|
+
this.softwareName = source.softwareName;
|
|
80
|
+
this.softwareVersion = source.softwareVersion;
|
|
81
|
+
this.label = source.label || '';
|
|
82
|
+
this.name = source.name || '';
|
|
83
|
+
this.registrationUri = source.registrationUri || '';
|
|
84
|
+
this.registrationManager = source.registrationManager;
|
|
85
|
+
this.features = source.features?.map(NodeFeature.fromObject);
|
|
66
86
|
}
|
|
67
87
|
equals(other) {
|
|
68
88
|
return (
|
|
@@ -90,4 +110,4 @@ Peer = Peer_1 = __decorate([
|
|
|
90
110
|
EntityClass({ typename: 'PeerVO' })
|
|
91
111
|
], Peer);
|
|
92
112
|
export { Peer };
|
|
93
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVlci5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29yZS9zZXJ2aWNlcy9tb2RlbC9wZWVyLm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLG1CQUFtQjs7O0FBRW5CLE9BQU8sRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNyRyxPQUFPLEVBQWEsTUFBTSxFQUF5QixNQUFNLGdCQUFnQixDQUFDO0FBQzFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUVsRCxXQUFXO0FBRUosSUFBTSxJQUFJLEdBQVYsTUFBTSxJQUFLLFNBQVEsTUFBWTs7SUFDcEMsTUFBTSxDQUFDLFVBQVUsQ0FBb0M7SUFFckQsTUFBTSxDQUFDLFFBQVEsQ0FBQyxPQUFlO1FBQzdCLE1BQU0sR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzdCLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztZQUNyQixHQUFHLEVBQUUsR0FBRyxDQUFDLFFBQVE7WUFDakIsSUFBSSxFQUFFLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUk7WUFDbkQsTUFBTSxFQUFFLEdBQUcsQ0FBQyxRQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsSUFBSSxHQUFHLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM1RixJQUFJLEVBQUUsZUFBZSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUM7U0FDcEMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUNELE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBVSxFQUFFLEdBQUcsS0FBZTtRQUN4QyxJ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LENBQUMsTUFBTSxDQUFDO2dCQUM5RCxXQUFXO2dCQUNYLElBQUksQ0FBQyxHQUFHLEtBQUssS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUMxQixDQUFDO0lBQ0osQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBSSxHQUFHO1FBQ0wsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLENBQUM7SUFDdkYsQ0FBQztJQUVELElBQUksV0FBVztRQUNiLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLEVBQUUsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzVILENBQUM7SUFFRCxJQUFJLFNBQVM7UUFDWCxPQUFPLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxJQUFJLENBQUM7SUFDN0MsQ0FBQztDQUNGLENBQUE7QUF4RlksSUFBSTtJQURoQixXQUFXLENBQUMsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLENBQUM7R0FDdkIsSUFBSSxDQXdGaEIiLCJzb3VyY2VzQ29udGVudCI6WyIvKiAtLSBOZXR3b3JrIC0tICovXG5cbmltcG9ydCB7IGlzTmlsT3JCbGFuaywgaXNOb3ROaWwsIGlzTm90TmlsT3JCbGFuaywgbm9UcmFpbGluZ1NsYXNoIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL2Z1bmN0aW9ucyc7XG5pbXBvcnQgeyBDbG9uZWFibGUsIEVudGl0eSwgRW50aXR5QXNPYmplY3RPcHRpb25zIH0gZnJvbSAnLi9lbnRpdHkubW9kZWwnO1xuaW1wb3J0IHsgRW50aXR5Q2xhc3MgfSBmcm9tICcuL2VudGl0eS5kZWNvcmF0b3JzJztcblxuLy8gQGR5bmFtaWNcbkBFbnRpdHlDbGFzcyh7IHR5cGVuYW1lOiAnUGVlclZPJyB9KVxuZXhwb3J0IGNsYXNzIFBlZXIgZXh0ZW5kcyBFbnRpdHk8UGVlcj4gaW1wbGVtZW50cyBDbG9uZWFibGU8UGVlcj4ge1xuICBzdGF0aWMgZnJvbU9iamVjdDogKHNvdXJjZTogYW55LCBvcHRzPzogYW55KSA9PiBQZWVyO1xuXG4gIHN0YXRpYyBwYXJzZVVybChwZWVyVXJsOiBzdHJpbmcpIHtcbiAgICBjb25zdCB1cmwgPSBuZXcgVVJMKHBlZXJVcmwpO1xuICAgIHJldHVybiB0aGlzLmZyb21PYmplY3Qoe1xuICAgICAgZG5zOiB1cmwuaG9zdG5hbWUsXG4gICAgICBwb3J0OiBpc05pbE9yQmxhbmsodXJsLnBvcnQpID8gdW5kZWZpbmVkIDogdXJsLnBvcnQsXG4gICAgICB1c2VTc2w6IHVybC5wcm90b2NvbCAmJiAodXJsLnByb3RvY29sLnN0YXJ0c1dpdGgoJ2h0dHBzJykgfHwgdXJsLnByb3RvY29sLnN0YXJ0c1dpdGgoJ3dzcycpKSxcbiAgICAgIHBhdGg6IG5vVHJhaWxpbmdTbGFzaCh1cmwucGF0aG5hbWUpLFxuICAgIH0pO1xuICB9XG4gIHN0YXRpYyBwYXRoKHBlZXI6IFBlZXIsIC4uLnBhdGhzOiBzdHJpbmdbXSk6IHN0cmluZyB7XG4gICAgaWYgKCFwZWVyKSB0aHJvdyBuZXcgRXJyb3IoXCJNaXNzaW5nIHJlcXVpcmVkIGFyZ3VtZW50ICdwZWVyJyFcIik7XG4gICAgLy8gUmVtb3ZlIHN0YXJ0aW5nIHNsYXNoZXNcbiAgICBwYXRocyA9IChwYXRocyB8fCBbXSlcbiAgICAgIC5tYXAoKHBhdGgpID0+IHtcbiAgICAgICAgaWYgKHBhdGguc3RhcnRzV2l0aCgnLi8nKSkgcmV0dXJuIHBhdGguc3Vic3RyaW5nKDIpO1xuICAgICAgICBpZiAocGF0aC5zdGFydHNXaXRoKCcvJykpIHJldHVybiBwYXRoLnN1YnN0cmluZygxKTtcbiAgICAgICAgcmV0dXJuIHBhdGg7XG4gICAgICB9KVxuICAgICAgLmZpbHRlcihpc05vdE5pbE9yQmxhbmspO1xuICAgIHJldHVybiBbbm9UcmFpbGluZ1NsYXNoKHRoaXMuZnJvbU9iamVjdChwZWVyKS51cmwpXS5jb25jYXQoLi4ucGF0aHMpLmpvaW4oJy8nKTtcbiAgfVxuXG4gIHN0YXRpYyBlcXVhbHMocDE6IFBlZXIsIHAyOiBQZWVyKSB7XG4gICAgcmV0dXJuIHAxICYmIHAyICYmIFBlZXIuZnJvbU9iamVjdChwMSkuZXF1YWxzKHAyKTtcbiAgfVxuXG4gIGRuczogc3RyaW5nO1xuICBpcHY0OiBzdHJpbmc7XG4gIGlwdjY6IHN0cmluZztcbiAgcG9ydDogbnVtYmVyO1xuICB1c2VTc2w6IGJvb2xlYW47XG4gIHB1YmtleTogc3RyaW5nO1xuICBwYXRoPzogc3RyaW5nO1xuXG4gIGZhdmljb246IHN0cmluZztcbiAgc3RhdHVzOiAnVVAnIHwgJ0RPV04nO1xuICBzb2Z0d2FyZU5hbWU6IHN0cmluZztcbiAgc29mdHdhcmVWZXJzaW9uOiBzdHJpbmc7XG4gIGxhYmVsOiBzdHJpbmc7XG4gIG5hbWU6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihQZWVyLlRZUEVOQU1FKTtcbiAgfVxuXG4gIGFzT2JqZWN0KG9wdGlvbnM/OiBFbnRpdHlBc09iamVjdE9wdGlvbnMpOiBhbnkge1xuICAgIHJldHVybiBzdXBlci5hc09iamVjdChvcHRpb25zKTtcbiAgfVxuXG4gIGZyb21PYmplY3Qoc291cmNlOiBhbnkpIHtcbiAgICBzdXBlci5mcm9tT2JqZWN0KHNvdXJjZSk7XG4gICAgdGhpcy5kbnMgPSBzb3VyY2UuZG5zIHx8IHNvdXJjZS5ob3N0O1xuICAgIHRoaXMuaXB2NCA9IHNvdXJjZS5pcHY0O1xuICAgIHRoaXMuaXB2NiA9IHNvdXJjZS5pcHY2O1xuICAgIHRoaXMucG9ydCA9IGlzTm90TmlsKHNvdXJjZS5wb3J0KSA/ICtzb3VyY2UucG9ydCA6IHVuZGVmaW5lZDtcbiAgICB0aGlzLnB1YmtleSA9IHNvdXJjZS5wdWJrZXk7XG4gICAgdGhpcy51c2VTc2wgPSBzb3VyY2UudXNlU3NsIHx8IHRoaXMucG9ydCA9PT0gNDQzO1xuICAgIHRoaXMucGF0aCA9IHNvdXJjZS5wYXRoIHx8ICcnO1xuICB9XG5cbiAgZXF1YWxzKG90aGVyOiBQZWVyKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIC8vIFNhbWUgZW50aXR5IChieSBpZClcbiAgICAgIChpc05vdE5pbCh0aGlzLmlkKSAmJiBpc05vdE5pbChvdGhlci5pZCkgJiYgdGhpcy5pZCA9PT0gb3RoZXIuaWQpIHx8XG4gICAgICAvLyBTYW1lIHB1YmtleSAoaWYgZGVmaW5lZClcbiAgICAgICgoIXRoaXMucHVia2V5IHx8ICFvdGhlci5wdWJrZXkgfHwgdGhpcy5wdWJrZXkgPT09IG90aGVyLnB1YmtleSkgJiZcbiAgICAgICAgLy8gU2FtZSB1cmxcbiAgICAgICAgdGhpcy51cmwgPT09IG90aGVyLnVybClcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgcGVlciBVUkwgKHdpdGhvdXQgdHJhaWxpbmcgc2xhc2gpXG4gICAqL1xuICBnZXQgdXJsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICh0aGlzLnVzZVNzbCA/ICdodHRwczovLycgOiAnaHR0cDovLycpICsgdGhpcy5ob3N0QW5kUG9ydCArICh0aGlzLnBhdGggfHwgJycpO1xuICB9XG5cbiAgZ2V0IGhvc3RBbmRQb3J0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICh0aGlzLmRucyB8fCB0aGlzLmlwdjQgfHwgdGhpcy5pcHY2KSArICh0aGlzLnBvcnQgJiYgdGhpcy5wb3J0ICE9PSA4MCAmJiB0aGlzLnBvcnQgIT09IDQ0MyA/ICc6JyArIHRoaXMucG9ydCA6ICcnKTtcbiAgfVxuXG4gIGdldCByZWFjaGFibGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdHVzICYmIHRoaXMuc3RhdHVzID09PSAnVVAnO1xuICB9XG59XG4iXX0=
|
|
113
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVlci5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29yZS9zZXJ2aWNlcy9tb2RlbC9wZWVyLm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLG1CQUFtQjs7O0FBRW5CLE9BQU8sRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNyRyxPQUFPLEVBQWEsTUFBTSxFQUF5QixNQUFNLGdCQUFnQixDQUFDO0FBQzFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFbkQsV0FBVztBQUVKLElBQU0sSUFBSSxHQUFWLE1BQU0sSUFBSyxTQUFRLE1BQVk7O0lBQ3BDLE1BQU0sQ0FBQyxVQUFVLENBQW9DO0lBRXJELE1BQU0sQ0FBQyxRQUFRLENBQUMsT0FBZTtRQUM3QixNQUFNLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM3QixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUM7WUFDckIsR0FBRyxFQUFFLEdBQUcsQ0FBQyxRQUFRO1lBQ2pCLElBQUksRUFBRSxZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJO1lBQ25ELE1BQU0sRUFBRSxHQUFHLENBQUMsUUFBUSxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLElBQUksR0FBRyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDNUYsSUFBSSxFQUFFLGVBQWUsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDO1NBQ3BDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFDRCxNQUFN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SUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxLQUFLLENBQUMsTUFBTSxDQUFDO2dCQUM5RCxXQUFXO2dCQUNYLElBQUksQ0FBQyxHQUFHLEtBQUssS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUMxQixDQUFDO0lBQ0osQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBSSxHQUFHO1FBQ0wsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLENBQUM7SUFDdkYsQ0FBQztJQUVELElBQUksV0FBVztRQUNiLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLEVBQUUsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzVILENBQUM7SUFFRCxJQUFJLFNBQVM7UUFDWCxPQUFPLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxJQUFJLENBQUM7SUFDN0MsQ0FBQztDQUNGLENBQUE7QUE3R1ksSUFBSTtJQURoQixXQUFXLENBQUMsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLENBQUM7R0FDdkIsSUFBSSxDQTZHaEIiLCJzb3VyY2VzQ29udGVudCI6WyIvKiAtLSBOZXR3b3JrIC0tICovXG5cbmltcG9ydCB7IGlzTmlsT3JCbGFuaywgaXNOb3ROaWwsIGlzTm90TmlsT3JCbGFuaywgbm9UcmFpbGluZ1NsYXNoIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL2Z1bmN0aW9ucyc7XG5pbXBvcnQgeyBDbG9uZWFibGUsIEVudGl0eSwgRW50aXR5QXNPYmplY3RPcHRpb25zIH0gZnJvbSAnLi9lbnRpdHkubW9kZWwnO1xuaW1wb3J0IHsgRW50aXR5Q2xhc3MgfSBmcm9tICcuL2VudGl0eS5kZWNvcmF0b3JzJztcbmltcG9ydCB7IE5vZGVGZWF0dXJlIH0gZnJvbSAnLi9ub2RlLWZlYXR1cmUubW9kZWwnO1xuXG4vLyBAZHluYW1pY1xuQEVudGl0eUNsYXNzKHsgdHlwZW5hbWU6ICdQZWVyVk8nIH0pXG5leHBvcnQgY2xhc3MgUGVlciBleHRlbmRzIEVudGl0eTxQZWVyPiBpbXBsZW1lbnRzIENsb25lYWJsZTxQZWVyPiB7XG4gIHN0YXRpYyBmcm9tT2JqZWN0OiAoc291cmNlOiBhbnksIG9wdHM/OiBhbnkpID0+IFBlZXI7XG5cbiAgc3RhdGljIHBhcnNlVXJsKHBlZXJVcmw6IHN0cmluZykge1xuICAgIGNvbnN0IHVybCA9IG5ldyBVUkwocGVlclVybCk7XG4gICAgcmV0dXJuIHRoaXMuZnJvbU9iamVjdCh7XG4gICAgICBkbnM6IHVybC5ob3N0bmFtZSxcbiAgICAgIHBvcnQ6IGlzTmlsT3JCbGFuayh1cmwucG9ydCkgPyB1bmRlZmluZWQgOiB1cmwucG9ydCxcbiAgICAgIHVzZVNzbDogdXJsLnByb3RvY29sICYmICh1cmwucHJvdG9jb2wuc3RhcnRzV2l0aCgnaHR0cHMnKSB8fCB1cmwucHJvdG9jb2wuc3RhcnRzV2l0aCgnd3NzJykpLFxuICAgICAgcGF0aDogbm9UcmFpbGluZ1NsYXNoKHVybC5wYXRobmFtZSksXG4gICAgfSk7XG4gIH1cbiAgc3RhdGljIHBhdGgocGVlcjogUGVlciwgLi4ucGF0aHM6IHN0cmluZ1tdKTogc3RyaW5nIHtcbiAgICBpZiAoIXBlZXIpIHRocm93IG5ldyBFcnJvcihcIk1pc3NpbmcgcmVxdWlyZWQgYXJndW1lbnQgJ3BlZXInIVwiKTtcbiAgICAvLyBSZW1vdmUgc3RhcnRpbmcgc2xhc2hlc1xuICAgIHBhdGhzID0gKHBhdGhzIHx8IFtdKVxuICAgICAgLm1hcCgocGF0aCkgPT4ge1xuICAgICAgICBpZiAocGF0aC5zdGFydHNXaXRoKCcuLycpKSByZXR1cm4gcGF0aC5zdWJzdHJpbmcoMik7XG4gICAgICAgIGlmIChwYXRoLnN0YXJ0c1dpdGgoJy8nKSkgcmV0dXJuIHBhdGguc3Vic3RyaW5nKDEpO1xuICAgICAgICByZXR1cm4gcGF0aDtcbiAgICAgIH0pXG4gICAgICAuZmlsdGVyKGlzTm90TmlsT3JCbGFuayk7XG4gICAgcmV0dXJuIFtub1RyYWlsaW5nU2xhc2godGhpcy5mcm9tT2JqZWN0KHBlZXIpLnVybCldLmNvbmNhdCguLi5wYXRocykuam9pbignLycpO1xuICB9XG5cbiAgc3RhdGljIGVxdWFscyhwMTogUGVlciwgcDI6IFBlZXIpIHtcbiAgICByZXR1cm4gcDEgJiYgcDIgJiYgUGVlci5mcm9tT2JqZWN0KHAxKS5lcXVhbHMocDIpO1xuICB9XG4gIHN0YXRpYyBjb3VudEFsbEZlYXR1cmVzKHBlZXJzOiBQZWVyW10pOiBudW1iZXIge1xuICAgIHJldHVybiAocGVlcnMgfHwgW10pLnJlZHVjZSgocmVzLCBwZWVyKSA9PiB7XG4gICAgICByZXR1cm4gcmVzICsgKHBlZXI/LmZlYXR1cmVzPy5sZW5ndGggfHwgMCk7XG4gICAgfSwgMCk7XG4gIH1cblxuICBkbnM6IHN0cmluZztcbiAgaXB2NDogc3RyaW5nO1xuICBpcHY2OiBzdHJpbmc7XG4gIHBvcnQ6IG51bWJlcjtcbiAgdXNlU3NsOiBib29sZWFuO1xuICBwdWJrZXk6IHN0cmluZztcbiAgcGF0aD86IHN0cmluZztcblxuICBmYXZpY29uOiBzdHJpbmc7XG4gIHN0YXR1czogJ1VQJyB8ICdET1dOJztcbiAgc29mdHdhcmVOYW1lOiBzdHJpbmc7XG4gIHNvZnR3YXJlVmVyc2lvbjogc3RyaW5nO1xuICBsYWJlbDogc3RyaW5nO1xuICBuYW1lOiBzdHJpbmc7XG4gIHJlZ2lzdHJhdGlvblVyaT86IHN0cmluZztcbiAgcmVnaXN0cmF0aW9uTWFuYWdlcj86IHN0cmluZztcbiAgZmVhdHVyZXM/OiBOb2RlRmVhdHVyZVtdO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKFBlZXIuVFlQRU5BTUUpO1xuICB9XG5cbiAgYXNPYmplY3Qob3B0aW9ucz86IEVudGl0eUFzT2JqZWN0T3B0aW9ucyk6IGFueSB7XG4gICAgY29uc3QgdGFyZ2V0ID0gc3VwZXIuYXNPYmplY3Qob3B0aW9ucyk7XG4gICAgdGFyZ2V0LmZlYXR1cmVzID0gdGhpcy5mZWF0dXJlcz8ubWFwKChmZWF0dXJlKSA9PiBmZWF0dXJlLmFzT2JqZWN0KG9wdGlvbnMpKTtcbiAgICByZXR1cm4gdGFyZ2V0O1xuICB9XG5cbiAgZnJvbU9iamVjdChzb3VyY2U6IGFueSkge1xuICAgIHN1cGVyLmZyb21PYmplY3Qoc291cmNlKTtcbiAgICB0aGlzLmRucyA9IHNvdXJjZS5kbnMgfHwgc291cmNlLmhvc3Q7XG4gICAgdGhpcy5pcHY0ID0gc291cmNlLmlwdjQ7XG4gICAgdGhpcy5pcHY2ID0gc291cmNlLmlwdjY7XG4gICAgdGhpcy5wb3J0ID0gaXNOb3ROaWwoc291cmNlLnBvcnQpID8gK3NvdXJjZS5wb3J0IDogdW5kZWZpbmVkO1xuICAgIHRoaXMudXNlU3NsID0gc291cmNlLnVzZVNzbCB8fCB0aGlzLnBvcnQgPT09IDQ0MztcbiAgICB0aGlzLnB1YmtleSA9IHNvdXJjZS5wdWJrZXk7XG4gICAgdGhpcy5wYXRoID0gc291cmNlLnBhdGggfHwgJyc7XG5cbiAgICB0aGlzLmZhdmljb24gPSBzb3VyY2UuZmF2aWNvbjtcbiAgICB0aGlzLnN0YXR1cyA9IHNvdXJjZS5zdGF0dXM7XG4gICAgdGhpcy5zb2Z0d2FyZU5hbWUgPSBzb3VyY2Uuc29mdHdhcmVOYW1lO1xuICAgIHRoaXMuc29mdHdhcmVWZXJzaW9uID0gc291cmNlLnNvZnR3YXJlVmVyc2lvbjtcbiAgICB0aGlzLmxhYmVsID0gc291cmNlLmxhYmVsIHx8ICcnO1xuICAgIHRoaXMubmFtZSA9IHNvdXJjZS5uYW1lIHx8ICcnO1xuICAgIHRoaXMucmVnaXN0cmF0aW9uVXJpID0gc291cmNlLnJlZ2lzdHJhdGlvblVyaSB8fCAnJztcbiAgICB0aGlzLnJlZ2lzdHJhdGlvbk1hbmFnZXIgPSBzb3VyY2UucmVnaXN0cmF0aW9uTWFuYWdlcjtcblxuICAgIHRoaXMuZmVhdHVyZXMgPSBzb3VyY2UuZmVhdHVyZXM/Lm1hcChOb2RlRmVhdHVyZS5mcm9tT2JqZWN0KTtcbiAgfVxuXG4gIGVxdWFscyhvdGhlcjogUGVlcik6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICAvLyBTYW1lIGVudGl0eSAoYnkgaWQpXG4gICAgICAoaXNOb3ROaWwodGhpcy5pZCkgJiYgaXNOb3ROaWwob3RoZXIuaWQpICYmIHRoaXMuaWQgPT09IG90aGVyLmlkKSB8fFxuICAgICAgLy8gU2FtZSBwdWJrZXkgKGlmIGRlZmluZWQpXG4gICAgICAoKCF0aGlzLnB1YmtleSB8fCAhb3RoZXIucHVia2V5IHx8IHRoaXMucHVia2V5ID09PSBvdGhlci5wdWJrZXkpICYmXG4gICAgICAgIC8vIFNhbWUgdXJsXG4gICAgICAgIHRoaXMudXJsID09PSBvdGhlci51cmwpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIHBlZXIgVVJMICh3aXRob3V0IHRyYWlsaW5nIHNsYXNoKVxuICAgKi9cbiAgZ2V0IHVybCgpOiBzdHJpbmcge1xuICAgIHJldHVybiAodGhpcy51c2VTc2wgPyAnaHR0cHM6Ly8nIDogJ2h0dHA6Ly8nKSArIHRoaXMuaG9zdEFuZFBvcnQgKyAodGhpcy5wYXRoIHx8ICcnKTtcbiAgfVxuXG4gIGdldCBob3N0QW5kUG9ydCgpOiBzdHJpbmcge1xuICAgIHJldHVybiAodGhpcy5kbnMgfHwgdGhpcy5pcHY0IHx8IHRoaXMuaXB2NikgKyAodGhpcy5wb3J0ICYmIHRoaXMucG9ydCAhPT0gODAgJiYgdGhpcy5wb3J0ICE9PSA0NDMgPyAnOicgKyB0aGlzLnBvcnQgOiAnJyk7XG4gIH1cblxuICBnZXQgcmVhY2hhYmxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnN0YXR1cyAmJiB0aGlzLnN0YXR1cyA9PT0gJ1VQJztcbiAgfVxufVxuIl19
|
|
@@ -359,22 +359,18 @@ export class NetworkService extends StartableObservableService {
|
|
|
359
359
|
}
|
|
360
360
|
async showSelectPeerModal(opts) {
|
|
361
361
|
opts = opts || {};
|
|
362
|
-
const
|
|
363
|
-
const peers$ = $onRefresh.pipe(mergeMap((_) => this.getDefaultPeers()), map((peers) => peers || []));
|
|
362
|
+
const peers = await this.getDefaultPeers();
|
|
364
363
|
const modal = await this.modalCtrl.create({
|
|
365
364
|
component: SelectPeerModal,
|
|
366
365
|
componentProps: {
|
|
367
|
-
|
|
368
|
-
peers: peers$,
|
|
366
|
+
defaultPeers: peers,
|
|
369
367
|
...opts,
|
|
370
368
|
},
|
|
371
369
|
keyboardClose: true,
|
|
372
370
|
showBackdrop: true,
|
|
373
371
|
});
|
|
374
372
|
await modal.present();
|
|
375
|
-
$onRefresh.emit();
|
|
376
373
|
const { data } = await modal.onWillDismiss();
|
|
377
|
-
$onRefresh.complete();
|
|
378
374
|
return (data && data) || undefined;
|
|
379
375
|
}
|
|
380
376
|
async clearCache(opts) {
|
|
@@ -406,7 +402,7 @@ export class NetworkService extends StartableObservableService {
|
|
|
406
402
|
// No peer in settings: ask user to choose
|
|
407
403
|
while (!peer) {
|
|
408
404
|
console.debug('[network] No peer defined. Asking user to choose a peer.');
|
|
409
|
-
peer = await this.showSelectPeerModal({ allowSelectDownPeer: false });
|
|
405
|
+
peer = await this.showSelectPeerModal({ allowSelectDownPeer: false, title: 'NETWORK.PEER.SELECT_MODAL.TITLE_START', canCancel: false });
|
|
410
406
|
}
|
|
411
407
|
}
|
|
412
408
|
else if (this.online) {
|
|
@@ -628,4 +624,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImpo
|
|
|
628
624
|
}] }, { type: i1.ToastController, decorators: [{
|
|
629
625
|
type: Optional
|
|
630
626
|
}] }] });
|
|
631
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV0d29yay5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9jb3JlL3NlcnZpY2VzL25ldHdvcmsuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRzNFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUcxQyxPQUFPLEVBQTJCLGVBQWUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3JGLE9BQU8sRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDNUUsT0FBTyxFQUF3QixvQkFBb0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3RGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUV4RCxPQUFPLEVBQUUsTUFBTSxFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRXBHLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUzQyxPQUFPLEVBQW9CLE1BQU0sRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBR3BHLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDN0QsT0FBTyxFQUFlLFdBQVcsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQ25GLE9BQU8sRUFBRSwwQkFBMEIsRUFB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Q0FBQztJQUNMLENBQUM7SUFFUyxLQUFLLENBQUMsSUFBSSxDQUFVLElBQXNCLEVBQUUsSUFBUTtRQUM1RCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3BDLElBQUksZUFBZSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDM0IsT0FBTyxDQUFDLElBQUksQ0FBQyw2QkFBNkIsSUFBSSxvQkFBb0IsS0FBSyxDQUFDLE1BQU0sZUFBZSxDQUFDLENBQUM7WUFFL0YsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUNoQixLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUU7Z0JBQ3JCLE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDL0IsSUFBSSxDQUFDLE9BQU87b0JBQUUsT0FBTztnQkFDckIsT0FBTyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLDZCQUE2QixHQUFHLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQzFGLENBQUMsQ0FBQyxDQUNILENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQzt3R0F0c0JVLGNBQWMsa0JBc0RmLFFBQVEscUxBT1IsV0FBVyxhQUNDLG1CQUFtQjs0R0E5RDlCLGNBQWMsY0FERCxNQUFNOzs0RkFDbkIsY0FBYztrQkFEMUIsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUU7OzBCQXVEN0IsTUFBTTsyQkFBQyxRQUFROzswQkFPZixNQUFNOzJCQUFDLFdBQVc7OzBCQUNsQixRQUFROzswQkFBSSxNQUFNOzJCQUFDLG1CQUFtQjs7MEJBQ3RDLFFBQVE7OzBCQUNSLFFBQVE7OzBCQUNSLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFdmVudEVtaXR0ZXIsIEluamVjdCwgSW5qZWN0YWJsZSwgT3B0aW9uYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IFN0b3JhZ2UgfSBmcm9tICdAaW9uaWMvc3RvcmFnZS1hbmd1bGFyJztcbmltcG9ydCB7IFBlZXIgfSBmcm9tICcuL21vZGVsL3BlZXIubW9kZWwnO1xuaW1wb3J0IHsgTG9jYWxTZXR0aW5ncyB9IGZyb20gJy4vbW9kZWwvc2V0dGluZ3MubW9kZWwnO1xuaW1wb3J0IHsgTW9kYWxDb250cm9sbGVyLCBQbGF0Zm9ybSwgVG9hc3RDb250cm9sbGVyIH0gZnJvbSAnQGlvbmljL2FuZ3VsYXInO1xuaW1wb3J0IHsgSVNlbGVjdFBlZXJNb2RhbE9wdGlvbnMsIFNlbGVjdFBlZXJNb2RhbCB9IGZyb20gJy4uL3BlZXIvc2VsZWN0LXBlZXIubW9kYWwnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBmaXJzdFZhbHVlRnJvbSwgU3Vic2NyaXB0aW9uLCB0aW1lciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgTG9jYWxTZXR0aW5nc1NlcnZpY2UsIFNFVFRJTkdTX1NUT1JBR0VfS0VZIH0gZnJvbSAnLi9sb2NhbC1zZXR0aW5ncy5zZXJ2aWNlJztcbmltcG9ydCB7IFNwbGFzaFNjcmVlbiB9IGZyb20gJ0BjYXBhY2l0b3Ivc3BsYXNoLXNjcmVlbic7XG5pbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwSGVhZGVycyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IGVxdWFscywgaXNOb3RFbXB0eUFycmF5LCBpc05vdE5pbE9yQmxhbmssIHNsZWVwLCB0b0Jvb2xlYW4gfSBmcm9tICcuLi8uLi9zaGFyZWQvZnVuY3Rpb25zJztcbmltcG9ydCB7IE5ldHdvcmsgfSBmcm9tICdAYXdlc29tZS1jb3Jkb3ZhLXBsdWdpbnMvbmV0d29yay9uZ3gnO1xuaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ2FjaGVTZXJ2aWNlIH0gZnJvbSAnaW9uaWMtY2FjaGUnO1xuaW1wb3J0IHsgU2hvd1RvYXN0T3B0aW9ucywgVG9hc3RzIH0gZnJvbSAnLi4vLi4vc2hhcmVkL3RvYXN0L3RvYXN0cyc7XG5pbXBvcnQgeyBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZmlsdGVyLCBmaXJzdCwgbWFwLCBtZXJnZU1hcCwgdGFrZVVudGlsLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBPdmVybGF5RXZlbnREZXRhaWwgfSBmcm9tICdAaW9uaWMvY29yZSc7XG5pbXBvcnQgeyBBcHBNYW5pZmVzdCwgTm9kZUluZm8gfSBmcm9tICcuL25ldHdvcmsudXRpbHMnO1xuaW1wb3J0IHsgSHR0cFV0aWxzIH0gZnJvbSAnLi4vLi4vc2hhcmVkL2h0dHAvaHR0cC51dGlscyc7XG5pbXBvcnQgeyBWZXJzaW9uVXRpbHMgfSBmcm9tICcuLi8uLi9zaGFyZWQvdmVyc2lvbi92ZXJzaW9ucyc7XG5pbXBvcnQgeyBFbnZpcm9ubWVudCwgRU5WSVJPTk1FTlQgfSBmcm9tICcuLi8uLi8uLi9lbnZpcm9ubWVudHMvZW52aXJvbm1lbnQuY2xhc3MnO1xuaW1wb3J0IHsgU3RhcnRhYmxlT2JzZXJ2YWJsZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zaGFyZWQvc2VydmljZXMvc3RhcnRhYmxlLW9ic2VydmFibGUtc2VydmljZS5jbGFzcyc7XG5pbXBvcnQgeyBDb25uZWN0aW9uVHlwZSwgZ2V0Q29ubmVjdGlvblR5cGUsIE5ldHdvcmtFdmVudFR5cGUgfSBmcm9tICcuL25ldHdvcmsudHlwZXMnO1xuaW1wb3J0IHsgQVBQX0xPR0dJTkdfU0VSVklDRSB9IGZyb20gJy4uLy4uL3NoYXJlZC9sb2dnaW5nL2xvZ2dpbmctc2VydmljZS5jbGFzcyc7XG5pbXBvcnQgeyBJTG9nZ2VyLCBJTG9nZ2luZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zaGFyZWQvbG9nZ2luZy9sb2dnZXIubW9kZWwnO1xuXG5jb25zdCBOZXR3b3JrUmVmcmVzaFRpbWVyUGVyaW9kID0ge1xuICBNT0JJTEU6IDEwMDAgKiA2MCAqIDEwIC8qIGV2ZXJ5IDEwIG1pbiAqLyxcbiAgREVTS1RPUDogMTAwMCAqIDYwICogNSAvKiBldmVyeSA1IG1pbiAqLyxcbn07XG5cbmV4cG9ydCBjb25zdCBQRUVSX1VSTF9SRUdFWFAgPSAvXihodHRwfGh0dHBzKTpcXC9cXC9bXiBcIj8jQF0rJC87XG5cbmV4cG9ydCBjb25zdCBORVRXT1JLX0RFRkFVTFRfQ09OTkVDVElPTl9USU1FT1VUID0gMTAwMDA7IC8vIDEwcyAtIC8hXFwgc2hvdWxkIGJlIGhpZ2ggKGUuZy4gZm9yIHBvb3IgY29ubmVjdGlvbilcblxuLyogLS0gREVWIG9ubHkgKHRvIGRlYnVnIHJlZnJlc2ggdGltZXIpXG5OZXR3b3JrUmVmcmVzaFRpbWVyUGVyaW9kLk1PQklMRSA9ICAxMDAwO1xuTmV0d29ya1JlZnJlc2hUaW1lclBlcmlvZC5ERVNLVE9QID0gIDEwMDA7ICovXG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgTmV0d29ya1NlcnZpY2UgZXh0ZW5kcyBTdGFydGFibGVPYnNlcnZhYmxlU2VydmljZTxQZWVyLCBQZWVyPiB7XG4gIG9uUGVlckNoYW5nZXMgPSB0aGlzLnN0YXJ0U3ViamVjdC5waXBlKFxuICAgIG1hcCgocGVlcikgPT4gcGVlcj8udXJsKSxcbiAgICBmaWx0ZXIoaXNOb3ROaWxPckJsYW5rKSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZDxzdHJpbmc+KClcbiAgKTtcbiAgb25OZXR3b3JrU3RhdHVzQ2hhbmdlcyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Q29ubmVjdGlvblR5cGU+KG51bGwpO1xuICBvblJlc2V0TmV0d29ya0NhY2hlID0gbmV3IEV2ZW50RW1pdHRlcih0cnVlKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9tb2JpbGU6IGJvb2xlYW47XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xvZ2dlcjogSUxvZ2dlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfbmV0d29yazogTmV0d29yaztcbiAgcHJpdmF0ZSBfdGltZXJTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSByZWFkb25seSBfdGltZXJSZWZyZXNoUGVyaW9kOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3RpbWVyUmVmcmVzaENvbmRpdGlvbjogKCkgPT4gYm9vbGVhbjtcbiAgcHJpdmF0ZSBfZGV2aWNlQ29ubmVjdGlvblR5cGU6IENvbm5lY3Rpb25UeXBlO1xuICBwcml2YXRlIF9mb3JjZU9mZmxpbmU6IGJvb2xlYW47XG4gIHByaXZhdGUgcmVhZG9ubHkgX2Nvbm5lY3Rpb25UaW1lb3V0OiBudW1iZXI7XG5cbiAgcHJpdmF0ZSBfbGlzdGVuZXJzOiB7XG4gICAgW2tleTogc3RyaW5nXTogKChkYXRhPzogYW55KSA9PiBQcm9taXNlPHZvaWQ+KVtdO1xuICB9ID0ge307XG5cbiAgZ2V0IG9ubGluZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5jb25uZWN0aW9uVHlwZSAhPT0gJ25vbmUnO1xuICB9XG5cbiAgZ2V0IG9mZmxpbmUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY29ubmVjdGlvblR5cGUgPT09ICdub25lJztcbiAgfVxuXG4gIGdldCBjb25uZWN0aW9uVHlwZSgpOiBDb25uZWN0aW9uVHlwZSB7XG4gICAgLy8gSWYgZm9yY2Ugb2ZmbGluZTogcmV0dXJuICdub25lJ1xuICAgIHJldHVybiB0aGlzLl9mb3JjZU9mZmxpbmVcbiAgICAgID8gJ25vbmUnXG4gICAgICA6IC8vIEVsc2UsIHJldHVybiBkZXZpY2UgY29ubmVjdGlvbiB0eXBlIChvciB1bmtub3duKVxuICAgICAgICAodGhpcy5zdGFydGVkICYmIHRoaXMuX2RldmljZUNvbm5lY3Rpb25UeXBlKSB8fCAndW5rbm93bic7XG4gIH1cblxuICBnZXQgcGVlcigpOiBQZWVyIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhU3ViamVjdC52YWx1ZT8uY2xvbmUoKTtcbiAgfVxuXG4gIHNldCBwZWVyKHBlZXI6IFBlZXIpIHtcbiAgICBpZiAoIVBlZXIuZXF1YWxzKHRoaXMucGVlciwgcGVlcikpIHtcbiAgICAgIHRoaXMucmVzdGFydChwZWVyKTtcbiAgICB9XG4gIH1cblxuICBnZXQgY29ubmVjdGlvblRpbWVvdXQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fY29ubmVjdGlvblRpbWVvdXQ7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBASW5qZWN0KERPQ1VNRU5UKSBwcml2YXRlIF9kb2N1bWVudDogYW55LFxuICAgIHBsYXRmb3JtOiBQbGF0Zm9ybSxcbiAgICBwcml2YXRlIG1vZGFsQ3RybDogTW9kYWxDb250cm9sbGVyLFxuICAgIHByaXZhdGUgc3RvcmFnZTogU3RvcmFnZSxcbiAgICBwcml2YXRlIHNldHRpbmdzOiBMb2NhbFNldHRpbmdzU2VydmljZSxcbiAgICBwcml2YXRlIGNhY2hlOiBDYWNoZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LFxuICAgIEBJbmplY3QoRU5WSVJPTk1FTlQpIHByb3RlY3RlZCBlbnZpcm9ubWVudDogRW52aXJvbm1lbnQsXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChBUFBfTE9HR0lOR19TRVJWSUNFKSBwcml2YXRlIGxvZ2dpbmdTZXJ2aWNlOiBJTG9nZ2luZ1NlcnZpY2UsXG4gICAgQE9wdGlvbmFsKCkgbmV0d29yazogTmV0d29yayxcbiAgICBAT3B0aW9uYWwoKSBwcml2YXRlIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBAT3B0aW9uYWwoKSBwcml2YXRlIHRvYXN0Q29udHJvbGxlcjogVG9hc3RDb250cm9sbGVyXG4gICkge1xuICAgIHN1cGVyKHBsYXRmb3JtKTtcbiAgICB0aGlzLl9tb2JpbGUgPSB0aGlzLnNldHRpbmdzLm1vYmlsZTtcbiAgICB0aGlzLl9jb25uZWN0aW9uVGltZW91dCA9IGVudmlyb25tZW50LmNvbm5lY3Rpb25UaW1lb3V0IHx8IE5FVFdPUktfREVGQVVMVF9DT05ORUNUSU9OX1RJTUVPVVQ7XG4gICAgdGhpcy5fbG9nZ2VyID0gdGhpcy5sb2dnaW5nU2VydmljZT8uZ2V0TG9nZ2VyKCduZXR3b3JrJyk7XG5cbiAgICBpZiAodGhpcy5fbW9iaWxlKSB7XG4gICAgICB0aGlzLl90aW1lclJlZnJlc2hQZXJpb2QgPSBOZXR3b3JrUmVmcmVzaFRpbWVyUGVyaW9kLk1PQklMRTtcbiAgICAgIHRoaXMuX3RpbWVyUmVmcmVzaENvbmRpdGlvbiA9ICgpID0+IHRoaXMub25saW5lOyAvLyBDaGVjayBvbmx5IHdoZW4gb25saW5lLCBhbmQgc3RvcCB3aGVuIG9mZmxpbmVcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fdGltZXJSZWZyZXNoUGVyaW9kID0gTmV0d29ya1JlZnJlc2hUaW1lclBlcmlvZC5ERVNLVE9QO1xuICAgICAgdGhpcy5fdGltZXJSZWZyZXNoQ29uZGl0aW9uID0gKCkgPT4gdHJ1ZTsgLy8gQWx3YXlzIGNoZWNrXG4gICAgfVxuXG4gICAgLy8gU2F2ZSBuZXR3b3JrIGluc3RhbmNlIG9ubHkgd2hlbiBjb3Jkb3ZhIGlzIHJ1bm5pbmdcbiAgICBpZiAocGxhdGZvcm0uaXMoJ2NvcmRvdmEnKSkge1xuICAgICAgdGhpcy5fbmV0d29yayA9IG5ldHdvcms7XG4gICAgfVxuXG4gICAgdGhpcy5zdGFydFN1YmplY3Quc3Vic2NyaWJlKChwZWVyKSA9PiB0aGlzLm5nT25BZnRlclN0YXJ0KHBlZXIpKTtcblxuICAgIC8vIEZvciBERVYgb25seVxuICAgIHRoaXMuX2RlYnVnID0gIWVudmlyb25tZW50LnByb2R1Y3Rpb247XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXIgdG8gbmV0d29yayBldmVudFxuICAgKlxuICAgKiBAcGFyYW0gZXZlbnRUeXBlXG4gICAqIEBwYXJhbSBjYWxsYmFja1xuICAgKi9cbiAgb248VCA9IGFueT4oZXZlbnRUeXBlOiBOZXR3b3JrRXZlbnRUeXBlLCBjYWxsYmFjazogKGRhdGE/OiBUKSA9PiBQcm9taXNlPGFueT4pOiBTdWJzY3JpcHRpb24ge1xuICAgIHN3aXRjaCAoZXZlbnRUeXBlKSB7XG4gICAgICBjYXNlICdzdGFydCc6XG4gICAgICAgIHJldHVybiB0aGlzLnN0YXJ0U3ViamVjdC5zdWJzY3JpYmUoKCkgPT4gY2FsbGJhY2soKSk7XG5cbiAgICAgIGNhc2UgJ3BlZXJDaGFuZ2VkJzpcbiAgICAgICAgcmV0dXJuIHRoaXMub25QZWVyQ2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4gY2FsbGJhY2soKSk7XG5cbiAgICAgIGNhc2UgJ3N0YXR1c0NoYW5nZWQnOlxuICAgICAgICByZXR1cm4gdGhpcy5vbk5ldHdvcmtTdGF0dXNDaGFuZ2VzLnN1YnNjcmliZSgodHlwZSkgPT4gY2FsbGJhY2sodHlwZSBhcyB1bmtub3duIGFzIFQpKTtcblxuICAgICAgY2FzZSAncmVzZXRDYWNoZSc6XG4gICAgICAgIHJldHVybiB0aGlzLm9uUmVzZXROZXR3b3JrQ2FjaGUuc3Vic2NyaWJlKCgpID0+IGNhbGxiYWNrKCkpO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gdGhpcy5hZGRMaXN0ZW5lcihldmVudFR5cGUsIGNhbGxiYWNrKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyB0cnlPbmxpbmUob3B0cz86IHtcbiAgICBzaG93T2ZmbGluZVRvYXN0PzogYm9vbGVhbjtcbiAgICBzaG93T25saW5lVG9hc3Q/OiBib29sZWFuO1xuICAgIHNob3dMb2FkaW5nVG9hc3Q/OiBib29sZWFuO1xuICAgIGFmdGVyUmV0cnlEZWxheT86IG51bWJlcjtcbiAgICBhZnRlclJldHJ5UHJvbWlzZT86ICgpID0+IFByb21pc2U8YW55PjtcbiAgfSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIC8vIElmIG9mZmxpbmUgbW9kZSBub3QgZm9yY2VkLCBhbmQgZGV2aWNlIHNheXMgdGhlcmUgaXMgbm8gY29ubmVjdGlvbjogc2tpcFxuICAgIGlmICghdGhpcy5fZm9yY2VPZmZsaW5lIHx8IHRoaXMuX2RldmljZUNvbm5lY3Rpb25UeXBlID09PSAnbm9uZScpIHJldHVybiBmYWxzZTtcblxuICAgIC8vIFNIb3cgbG9hZGluZyB0b2FzdFxuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgY29uc3Qgc2hvd0xvYWRpbmdUb2FzdCA9ICFvcHRzIHx8IG9wdHMuc2hvd0xvYWRpbmdUb2FzdCAhPT0gZmFsc2U7XG4gICAgbGV0IGxvYWRpbmdUb2FzdDogSFRNTElvblRvYXN0RWxlbWVudDtcbiAgICBpZiAoc2hvd0xvYWRpbmdUb2FzdCkge1xuICAgICAgYXdhaXQgdGhpcy5zaG93VG9hc3QoeyBtZXNzYWdlOiAnTkVUV09SSy5JTkZPLlJFVFJZX1RPX0NPTk5FQ1QnLCBkdXJhdGlvbjogMTAwMDAsIG9uV2lsbFByZXNlbnQ6ICh0KSA9PiAobG9hZGluZ1RvYXN0ID0gdCkgfSk7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnNvbGUuaW5mbygnW25ldHdvcmtdIENoZWNraW5nIGNvbm5lY3Rpb24gdG8gcG9kLi4uJyk7XG4gICAgICBjb25zdCBzZXR0aW5nczogTG9jYWxTZXR0aW5ncyA9IGF3YWl0IHRoaXMuc2V0dGluZ3MucmVhZHkoKTtcblxuICAgICAgaWYgKCFzZXR0aW5ncy5wZWVyVXJsKSByZXR1cm4gZmFsc2U7IC8vIE5vIHBlZXIgZGVmaW5lLiBTa2lwXG5cbiAgICAgIGNvbnN0IHBlZXIgPSBQZWVyLnBhcnNlVXJsKHNldHRpbmdzLnBlZXJVcmwpO1xuICAgICAgY29uc3QgcGVlckluZm8gPSBhd2FpdCB0aGlzLmNoZWNrUGVlckFsaXZlKHBlZXIpO1xuICAgICAgY29uc3QgcGVlckFsaXZlQW5kQ29tcGF0aWJsZSA9IHBlZXJJbmZvICYmIChhd2FpdCB0aGlzLmNoZWNrUGVlckNvbXBhdGlibGUocGVlckluZm8pKTtcbiAgICAgIGlmIChwZWVyQWxpdmVBbmRDb21wYXRpYmxlKSB7XG4gICAgICAgIC8vIERpc2FibGUgdGhlIG9mZmxpbmUgbW9kZVxuICAgICAgICB0aGlzLnNldEZvcmNlT2ZmbGluZShmYWxzZSk7XG5cbiAgICAgICAgLy8gUmVzdGFydFxuICAgICAgICBhd2FpdCB0aGlzLnJlc3RhcnQocGVlcik7XG5cbiAgICAgICAgLy8gV2FpdCBhIHByb21pc2UsIGJlZm9yZSByZWNoZWNrXG4gICAgICAgIGF3YWl0IHRoaXMuZW1pdCgnYmVmb3JlVHJ5T25saW5lRmluaXNoJywgdGhpcy5vbmxpbmUpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc29sZS5lcnJvcigoZXJyICYmIGVyci5tZXNzYWdlKSB8fCBlcnIpO1xuICAgICAgLy8gQ29udGludWVcbiAgICB9XG5cbiAgICAvLyBDbG9zZSBsb2FkaW5nIHRvYXN0ICh3aXRoIGEgbWluaW1hbCBkaXNwbGF5IGR1cmF0aW9uIG9mIDJzKVxuICAgIGlmIChzaG93TG9hZGluZ1RvYXN0KSB7XG4gICAgICBhd2FpdCBzbGVlcCgyMDAwIC0gKERhdGUubm93KCkgLSBub3cpKTtcbiAgICAgIGlmIChsb2FkaW5nVG9hc3QpIGF3YWl0IGxvYWRpbmdUb2FzdC5kaXNtaXNzKCk7XG4gICAgfVxuXG4gICAgLy8gUmVjaGVjayBuZXR3b3JrIHN0YXR1c1xuICAgIGNvbnN0IG9ubGluZSA9IHRoaXMub25saW5lO1xuXG4gICAgLy8gRGlzcGxheSBhIHRvYXN0IHRvIHVzZXJcbiAgICBpZiAob25saW5lKSB7XG4gICAgICBpZiAoIW9wdHMgfHwgb3B0cy5zaG93T25saW5lVG9hc3QgIT09IGZhbHNlKSB7XG4gICAgICAgIC8vIERpc3BsYXkgdG9hc3QgKHdpdGhvdXQgYXdhaXQsIGJlY2F1c2Ugbm90IG5lZWQgdG8gd2FpdCB0b2FzdCBjbG9zZSBldmVudClcbiAgICAgICAgdGhpcy5zaG93VG9hc3QoeyBtZXNzYWdlOiAnTkVUV09SSy5JTkZPLk9OTElORScsIHR5cGU6ICdpbmZvJyB9KTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKG9wdHMgJiYgb3B0cy5zaG93T2ZmbGluZVRvYXN0ID09PSB0cnVlKSB7XG4gICAgICAvLyBEaXNwbGF5IHRvYXN0ICh3aXRob3V0IGF3YWl0LCBiZWNhdXNlIG5vdCBuZWVkIHRvIHdhaXQgdG9hc3QgY2xvc2UgZXZlbnQpXG4gICAgICByZXR1cm4gdGhpcy5zaG93T2ZmbGluZVRvYXN0KHsgc2hvd1JldHJ5QnV0dG9uOiBmYWxzZSB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5zdGFydGVkICYmIG9ubGluZTtcbiAgfVxuXG4gIGFzeW5jIHNob3dPZmZsaW5lVG9hc3Qob3B0cz86IHtcbiAgICBtZXNzYWdlPzogc3RyaW5nO1xuICAgIHNob3dDbG9zZUJ1dHRvbj86IGJvb2xlYW47XG4gICAgc2hvd1JldHJ5QnV0dG9uPzogYm9vbGVhbjtcbiAgICBzaG93UmV0cnlTdWNjZXNzVG9hc3Q/OiBib29sZWFuO1xuICAgIHNob3dSZXRyeUxvYWRpbmdUb2FzdD86IGJvb2xlYW47XG4gICAgb25SZXRyeVN1Y2Nlc3M/OiAoKSA9PiB2b2lkO1xuICB9KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgaWYgKHRoaXMub25saW5lKSByZXR1cm47IC8vIFNraXAgaWYgb25saW5lXG5cbiAgICAvLyBUb2FzdCB3aXRoIGEgcmV0cnkgYnV0dG9uXG4gICAgaWYgKCFvcHRzIHx8IG9wdHMuc2hvd1JldHJ5QnV0dG9uICE9PSBmYWxzZSkge1xuICAgICAgY29uc3QgdG9hc3RSZXN1bHQgPSBhd2FpdCB0aGlzLnNob3dUb2FzdCh7XG4gICAgICAgIG1lc3NhZ2U6IChvcHRzICYmIG9wdHMubWVzc2FnZSkgfHwgJ0VSUk9SLk5FVFdPUktfUkVRVUlSRUQnLFxuICAgICAgICB0eXBlOiAnd2FybmluZycsXG4gICAgICAgIHNob3dDbG9zZUJ1dHRvbjogdHJ1ZSxcbiAgICAgICAgZHVyYXRpb246IDEwMDAwMCxcbiAgICAgICAgYnV0dG9uczogW1xuICAgICAgICAgIC8vIHJlY29ubmVjdCBidXR0b25cbiAgICAgICAgICB7XG4gICAgICAgICAgICByb2xlOiAncmVmcmVzaCcsXG4gICAgICAgICAgICB0ZXh0OiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdORVRXT1JLLkJUTl9DSEVDS19BTElWRScpLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9KTtcblxuICAgICAgLy8gVXNlciBkb24ndCBjbGljayByZWNvbm5lY3Q6IHJldHVyblxuICAgICAgaWYgKCF0b2FzdFJlc3VsdCB8fCB0b2FzdFJlc3VsdC5yb2xlICE9PSAncmVmcmVzaCcpIHJldHVybiBmYWxzZTtcblxuICAgICAgLy8gaWYgbmV0d29yayBzdGF0ZSBjaGFuZ2VkIHRvIG9ubGluZTogZXhpdCBoZXJlXG4gICAgICBpZiAodGhpcy5vbmxpbmUpIHJldHVybiB0cnVlO1xuXG4gICAgICAvLyBUcnkgdG8gcmVjb25uZWN0XG4gICAgICBjb25zdCBvbmxpbmUgPSBhd2FpdCB0aGlzLnRyeU9ubGluZSh7XG4gICAgICAgIHNob3dPZmZsaW5lVG9hc3Q6IGZhbHNlLFxuICAgICAgICBzaG93T25saW5lVG9hc3Q6IHRvQm9vbGVhbihvcHRzICYmIG9wdHMuc2hvd1JldHJ5U3VjY2Vzc1RvYXN0LCB0cnVlKSxcbiAgICAgICAgc2hvd0xvYWRpbmdUb2FzdDogdG9Cb29sZWFuKG9wdHMgJiYgb3B0cy5zaG93UmV0cnlMb2FkaW5nVG9hc3QsIHRydWUpLFxuICAgICAgfSk7XG4gICAgICBpZiAob25saW5lKSB7XG4gICAgICAgIC8vIENhbGwgc3VjY2VzcyBjYWxsYmFjayAoYXN5bmMpXG4gICAgICAgIGlmIChvcHRzICYmIG9wdHMub25SZXRyeVN1Y2Nlc3MpIHtcbiAgICAgICAgICBzZXRUaW1lb3V0KG9wdHMub25SZXRyeVN1Y2Nlc3MpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBvcHRzID0ge1xuICAgICAgICAuLi5vcHRzLFxuICAgICAgICBzaG93UmV0cnlCdXR0b246IGZhbHNlLFxuICAgICAgICBzaG93Q2xvc2VCdXR0b246IHRydWUsXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIFNpbXBsZSB0b2FzdCwgd2l0aG91dCAnYXdhaXQnLCBiZWNhdXNlIG5vdCBuZWVkIHRvIHdhaXQgdG9hc3QncyBkaXNtaXNzXG4gICAgdGhpcy5zaG93VG9hc3Qoe1xuICAgICAgbWVzc2FnZTogJ0VSUk9SLk5FVFdPUktfUkVRVUlSRUQnLFxuICAgICAgdHlwZTogJ2Vycm9yJyxcbiAgICAgIC4uLm9wdHMsXG4gICAgfSk7XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgdGhlIHBlZXIgaXMgYWxpdmVcbiAgICpcbiAgICogQHBhcmFtIHBlZXJcbiAgICogQHBhcmFtIG9wdHNcbiAgICovXG4gIGFzeW5jIGNoZWNrUGVlckFsaXZlKHBlZXI/OiBzdHJpbmcgfCBQZWVyKTogUHJvbWlzZTxOb2RlSW5mbz4ge1xuICAgIHBlZXIgPSBwZWVyIHx8IHRoaXMucGVlcjtcbiAgICBpZiAoIXBlZXIpIHtcbiAgICAgIGNvbnN0IHNldHRpbmdzOiBMb2NhbFNldHRpbmdzID0gYXdhaXQgdGhpcy5zZXR0aW5ncy5yZWFkeSgpO1xuICAgICAgaWYgKCFzZXR0aW5ncy5wZWVyVXJsKSByZXR1cm4gdW5kZWZpbmVkOyAvLyBObyBwZWVyIGRlZmluZS4gU2tpcFxuICAgICAgcGVlciA9IFBlZXIucGFyc2VVcmwoc2V0dGluZ3MucGVlclVybCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZ2V0Tm9kZUluZm8ocGVlciwgeyBub2NhY2hlOiB0cnVlLCB0aW1lb3V0OiB0aGlzLl9jb25uZWN0aW9uVGltZW91dCB9KTtcbiAgfVxuXG4gIGFzeW5jIGNoZWNrUGVlckNvbXBhdGlibGUocGVlckluZm86IE5vZGVJbmZvLCBvcHRzPzogeyBzaG93VG9hc3Q/OiBib29sZWFuIH0pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBpZiAoIXBlZXJJbmZvKSByZXR1cm4gZmFsc2U7IC8vIFBlZXIgY2Fubm90IGJlIHJlYWNoZWRcbiAgICBpZiAoIXRoaXMuZW52aXJvbm1lbnQucGVlck1pblZlcnNpb24pIHJldHVybiB0cnVlOyAvLyBTa2lwIGNvbXBhdGliaWxpdHkgY2hlY2tcblxuICAgIC8vIENoZWNrIHRoZSBtaW4gcG9kIHZlcnNpb24sIGRlZmluZWQgYnkgdGhlIGFwcFxuICAgIGNvbnN0IGlzQ29tcGF0aWJsZSA9IHBlZXJJbmZvLnNvZnR3YXJlVmVyc2lvbiAmJiBWZXJzaW9uVXRpbHMuaXNDb21wYXRpYmxlKHRoaXMuZW52aXJvbm1lbnQucGVlck1pblZlcnNpb24sIHBlZXJJbmZvLnNvZnR3YXJlVmVyc2lvbik7XG5cbiAgICAvLyBEaXNwbGF5IHRvYXN0LCBpZiBub3QgY29tcGF0aWJsZVxuICAgIGlmICghaXNDb21wYXRpYmxlICYmICghb3B0cyB8fCBvcHRzLnNob3dUb2FzdCAhPT0gZmFsc2UpKSB7XG4gICAgICBhd2FpdCB0aGlzLnNob3dUb2FzdCh7XG4gICAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICAgIG1lc3NhZ2U6ICdORVRXT1JLLkVSUk9SLk5PVF9DT01QQVRJQkxFX1BFRVInLFxuICAgICAgICBtZXNzYWdlUGFyYW1zOiB7XG4gICAgICAgICAgdmVyc2lvbjogdGhpcy5lbnZpcm9ubWVudC5wZWVyTWluVmVyc2lvbixcbiAgICAgICAgfSxcbiAgICAgICAgc2hvd0Nsb3NlQnV0dG9uOiB0cnVlLFxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBpc0NvbXBhdGlibGU7XG4gIH1cblxuICBhc3luYyBnZXROb2RlSW5mbyhwZWVyPzogc3RyaW5nIHwgUGVlciwgb3B0cz86IHsgbm9jYWNoZT86IGJvb2xlYW47IHRpbWVvdXQ/OiBudW1iZXIgfSk6IFByb21pc2U8Tm9kZUluZm8+IHtcbiAgICBjb25zdCBwYXRoID0gdGhpcy5jb21wdXRlUGVlclBhdGgocGVlciwgJy9hcGkvbm9kZS9pbmZvJyk7XG4gICAgdGhpcy5fbG9nZ2VyPy5kZWJ1ZygnZ2V0Tm9kZUluZm8nLCBgR2V0dGluZyAnJHtwYXRofScgLi4uYCk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgZGF0YTogTm9kZUluZm8gPSBhd2FpdCB0aGlzLmdldChwYXRoLCBvcHRzKTtcbiAgICAgIHRoaXMuX2xvZ2dlcj8uZGVidWcoJ2dldE5vZGVJbmZvJywgYFJlc3BvbnNlIG9mICcke3BhdGh9JzpcXG4ke0pTT04uc3RyaW5naWZ5KGRhdGEpfWApO1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zb2xlLmRlYnVnKGBbbmV0d29ya10gRXJyb3Igd2hpbGUgZ2V0dGluZyAnJHtwYXRofSc6ICR7KGVyciAmJiBlcnIubWVzc2FnZSkgfHwgZXJyfWAsIGVycik7XG4gICAgICB0aGlzLl9sb2dnZXI/LmVycm9yKCdnZXROb2RlSW5mbycsIGBFcnJvciB3aGlsZSBnZXR0aW5nICcke3BhdGh9JzogJHtlcnI/Lm1lc3NhZ2UgfHwgJyd9YCk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGdldEFwcE1hbmlmZXN0KHBlZXI/OiBzdHJpbmcgfCBQZWVyLCBvcHRzPzogeyBub2NhY2hlPzogYm9vbGVhbiB9KTogUHJvbWlzZTxBcHBNYW5pZmVzdCB8IHVuZGVmaW5lZD4ge1xuICAgIHRyeSB7XG4gICAgICBsZXQgcGF0aCA9IHRoaXMuY29tcHV0ZVBlZXJQYXRoKHBlZXIsICdtYW5pZmVzdC5qc29uJyk7XG4gICAgICBpZiAob3B0cz8ubm9jYWNoZSkge1xuICAgICAgICBwYXRoICs9ICc/dD0nICsgRGF0ZS5ub3coKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLmdldChwYXRoLCBvcHRzKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGlmICh0aGlzLmVudmlyb25tZW50LnByb2R1Y3Rpb24pXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJbbmV0d29ya10gQ2Fubm90IGxvYWQgZmlsZSAnbWFuaWZlc3QuanNvbicuIFBsZWFzZSBtYWtlIHN1cmUgd2Vic2VydmVyIGNvbmZpZyBhbGxvdyBDT1JTIGFjY2Vzc1wiLCBlcnIpO1xuICAgICAgZWxzZSBjb25zb2xlLmVycm9yKFwiW25ldHdvcmtdIENhbm5vdCBsb2FkIGZpbGUgJ21hbmlmZXN0Lmpzb24nLlwiLCBlcnIpO1xuICAgICAgLy8gQ29udGludWVcbiAgICB9XG4gIH1cblxuICBhc3luYyBnZXRBcHBWZXJzaW9uKHBlZXI/OiBzdHJpbmcgfCBQZWVyLCBvcHRzID0geyBub2NhY2hlOiB0cnVlIH0pOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICAgIHRyeSB7XG4gICAgICBsZXQgcGF0aCA9IHRoaXMuY29tcHV0ZVBlZXJQYXRoKHBlZXIsICd2ZXJzaW9uLmFwcHVwJyk7XG4gICAgICBpZiAob3B0cy5ub2NhY2hlKSB7XG4gICAgICAgIHBhdGggKz0gJz90PScgKyBEYXRlLm5vdygpO1xuICAgICAgfVxuICAgICAgY29uc3QgYXBwVmVyc2lvbjogc3RyaW5nID0gYXdhaXQgdGhpcy5nZXRUZXh0KHBhdGgsIG9wdHMpO1xuICAgICAgaWYgKGlzTm90TmlsT3JCbGFuayhhcHBWZXJzaW9uKSkgcmV0dXJuIGFwcFZlcnNpb247XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBpZiAodGhpcy5lbnZpcm9ubWVudC5wcm9kdWN0aW9uKVxuICAgICAgICBjb25zb2xlLmVycm9yKFwiW25ldHdvcmtdIENhbm5vdCBsb2FkIGZpbGUgJ3ZlcnNpb24uYXBwdXAnLiBQbGVhc2UgbWFrZSBzdXJlIHdlYnNlcnZlciBjb25maWcgYWxsb3cgQ09SUyBhY2Nlc3NcIik7XG4gICAgICBlbHNlIGNvbnNvbGUuZXJyb3IoXCJbbmV0d29ya10gQ2Fubm90IGxvYWQgZmlsZSAndmVyc2lvbi5hcHB1cCcuXCIsIGVycik7XG4gICAgICAvLyBDb250aW51ZVxuICAgIH1cblxuICAgIC8vIFRyeSBsb2FkaW5nIG1hbmlmZXN0Lmpzb25cbiAgICBjb25zdCBtYW5pZmVzdCA9IGF3YWl0IHRoaXMuZ2V0QXBwTWFuaWZlc3QocGVlciwgb3B0cyk7XG4gICAgcmV0dXJuIG1hbmlmZXN0Py52ZXJzaW9uO1xuICB9XG5cbiAgY29tcHV0ZVBlZXJQYXRoKHBlZXI6IHN0cmluZyB8IFBlZXIgfCB1bmRlZmluZWQsIHBhdGg6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcGVlciA9IHBlZXIgfHwgdGhpcy5wZWVyO1xuICAgIGlmICghcGVlcikgcmV0dXJuIHVuZGVmaW5lZDtcblxuICAgIGxldCBwZWVyVXJsID0gcGVlciBpbnN0YW5jZW9mIFBlZXIgPyBwZWVyLnVybCA6IChwZWVyIGFzIHN0cmluZyk7XG5cbiAgICAvLyBSZW1vdmUgdHJhaWxpbmcgc2xhc2hcbiAgICBpZiAocGVlclVybC5lbmRzV2l0aCgnLycpKSB7XG4gICAgICBwZWVyVXJsID0gcGVlclVybC5zdWJzdHIoMCwgcGVlclVybC5sZW5ndGggLSAxKTtcbiAgICB9XG5cbiAgICAvLyBBZGQgZmlyc3QgcGF0aFxuICAgIGlmICghcGF0aC5zdGFydHNXaXRoKCcvJykpIHtcbiAgICAgIHBhdGggPSAnLycgKyBwYXRoO1xuICAgIH1cblxuICAgIC8vIENvbmNhdCBwZWVyIFVSTCBhbmQgcGF0aFxuICAgIHJldHVybiBwZWVyVXJsICsgcGF0aDtcbiAgfVxuXG4gIC8qKlxuICAgKiBBbGxvdyB0byBmb3JjZSBvZmZsaW5lIG1vZGVcbiAgICovXG4gIHNldEZvcmNlT2ZmbGluZShcbiAgICB2YWx1ZT86IGJvb2xlYW4sXG4gICAgb3B0cz86IHtcbiAgICAgIHNob3dUb2FzdD86IGJvb2xlYW47IC8vIERpc3BsYXkgYSB0b2FzdCwgd2hlbiBvZmZsaW5lID9cbiAgICB9XG4gICkge1xuICAgIHZhbHVlID0gdG9Cb29sZWFuKHZhbHVlLCB0cnVlKTtcbiAgICBpZiAodGhpcy5fZm9yY2VPZmZsaW5lICE9PSB2YWx1ZSkge1xuICAgICAgY29uc3QgcHJldmlvdXNDb25uZWN0aW9uVHlwZSA9IHRoaXMuY29ubmVjdGlvblR5cGU7XG4gICAgICB0aGlzLl9mb3JjZU9mZmxpbmUgPSB2YWx1ZTtcbiAgICAgIGNvbnN0IGN1cnJlbnRDb25uZWN0aW9uVHlwZSA9IHRoaXMuY29ubmVjdGlvblR5cGU7XG5cbiAgICAgIGlmIChwcmV2aW91c0Nvbm5lY3Rpb25UeXBlICE9PSBjdXJyZW50Q29ubmVjdGlvblR5cGUpIHtcbiAgICAgICAgY29uc29sZS5pbmZvKGBbbmV0d29ya10gQ29ubmVjdGlvbiBjaGFuZ2VkIHRvIHske2N1cnJlbnRDb25uZWN0aW9uVHlwZX19YCk7XG4gICAgICAgIHRoaXMub25OZXR3b3JrU3RhdHVzQ2hhbmdlcy5uZXh0KGN1cnJlbnRDb25uZWN0aW9uVHlwZSk7XG5cbiAgICAgICAgLy8gT2ZmbGluZSBtb2RlOiBhbGVydCB0aGUgdXNlclxuICAgICAgICBpZiAoY3VycmVudENvbm5lY3Rpb25UeXBlID09PSAnbm9uZScgJiYgKCFvcHRzIHx8IG9wdHMuc2hvd1RvYXN0ICE9PSBmYWxzZSkpIHtcbiAgICAgICAgICB0aGlzLnNob3dUb2FzdCh7IG1lc3NhZ2U6ICdORVRXT1JLLklORk8uT0ZGTElORV9IRUxQJywgdHlwZTogJ3dhcm5pbmcnIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgc2hvd1NlbGVjdFBlZXJNb2RhbChvcHRzPzogUGFydGlhbDxJU2VsZWN0UGVlck1vZGFsT3B0aW9ucz4pOiBQcm9taXNlPFBlZXIgfCB1bmRlZmluZWQ+IHtcbiAgICBvcHRzID0gb3B0cyB8fCB7fTtcblxuICAgIGNvbnN0ICRvblJlZnJlc2ggPSBuZXcgRXZlbnRFbWl0dGVyPEV2ZW50PigpO1xuICAgIGNvbnN0IHBlZXJzJCA9ICRvblJlZnJlc2gucGlwZShcbiAgICAgIG1lcmdlTWFwKChfKSA9PiB0aGlzLmdldERlZmF1bHRQZWVycygpKSxcbiAgICAgIG1hcCgocGVlcnMpID0+IHBlZXJzIHx8IFtdKVxuICAgICk7XG5cbiAgICBjb25zdCBtb2RhbCA9IGF3YWl0IHRoaXMubW9kYWxDdHJsLmNyZWF0ZSh7XG4gICAgICBjb21wb25lbnQ6IFNlbGVjdFBlZXJNb2RhbCxcbiAgICAgIGNvbXBvbmVudFByb3BzOiA8SVNlbGVjdFBlZXJNb2RhbE9wdGlvbnM+e1xuICAgICAgICBvblJlZnJlc2g6ICRvblJlZnJlc2gsXG4gICAgICAgIHBlZXJzOiBwZWVycyQsXG4gICAgICAgIC4uLm9wdHMsXG4gICAgICB9LFxuICAgICAga2V5Ym9hcmRDbG9zZTogdHJ1ZSxcbiAgICAgIHNob3dCYWNrZHJvcDogdHJ1ZSxcbiAgICB9KTtcbiAgICBhd2FpdCBtb2RhbC5wcmVzZW50KCk7XG4gICAgJG9uUmVmcmVzaC5lbWl0KCk7XG5cbiAgICBjb25zdCB7IGRhdGEgfSA9IGF3YWl0IG1vZGFsLm9uV2lsbERpc21pc3MoKTtcbiAgICAkb25SZWZyZXNoLmNvbXBsZXRlKCk7XG5cbiAgICByZXR1cm4gKGRhdGEgJiYgKGRhdGEgYXMgUGVlcikpIHx8IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGFzeW5jIGNsZWFyQ2FjaGUob3B0cz86IHsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3Qgbm93ID0gdGhpcy5fZGVidWcgJiYgRGF0ZS5ub3coKTtcblxuICAgIGNvbnNvbGUuaW5mbygnW25ldHdvcmtdIENsZWFyaW5nIGFsbCBjYWNoZXMuLi4nKTtcbiAgICByZXR1cm4gdGhpcy5jYWNoZVxuICAgICAgLmNsZWFyQWxsKClcbiAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgLy8gRW1pdCBldmVudFxuICAgICAgICBpZiAoKCFvcHRzIHx8IG9wdHMuZW1pdEV2ZW50ICE9PSBmYWxzZSkgJiYgdGhpcy5vblJlc2V0TmV0d29ya0NhY2hlLm9ic2VydmVkKSB7XG4gICAgICAgICAgdGhpcy5vblJlc2V0TmV0d29ya0NhY2hlLmVtaXQoKTtcblxuICAgICAgICAgIC8vIFdhaXQgb2JzZXJ2ZXJzIGNsZWFuIHRoZWlyIGNhY2hlcywgaWYgbmVlZFxuICAgICAgICAgIHJldHVybiBzbGVlcCg1MDApO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcoYFtuZXR3b3JrXSBBbGwgY2FjaGUgY2xlYXJlZCwgaW4gJHtEYXRlLm5vdygpIC0gbm93fW1zYCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIC8qIC0tIHByb3RlY3RlZCBmdW5jdGlvbnMgLS0gKi9cblxuICBwcm90ZWN0ZWQgYXN5bmMgbmdPblN0YXJ0KHBlZXI/OiBQZWVyKTogUHJvbWlzZTxQZWVyPiB7XG4gICAgY29uc29sZS5pbmZvKCdbbmV0d29ya10gU3RhcnRpbmcgbmV0d29yay4uLicpO1xuXG4gICAgLy8gUmVzdG9yaW5nIGxvY2FsIHNldHRpbmdzXG4gICAgcGVlciA9IHBlZXIgfHwgKGF3YWl0IHRoaXMucmVzdG9yZUxvY2FsbHkoKSk7XG5cbiAgICBpZiAoIXBlZXIpIHtcbiAgICAgIC8vIE1ha2Ugc3VyZSB0byBoaWRlIHRoZSBzcGxhc2hzY3JlZW4sIGJlZm9yZSBvcGVuIHRoZSBtb2RhbFxuICAgICAgYXdhaXQgU3BsYXNoU2NyZWVuLmhpZGUoKTtcblxuICAgICAgLy8gTm8gcGVlciBpbiBzZXR0aW5nczogYXNrIHVzZXIgdG8gY2hvb3NlXG4gICAgICB3aGlsZSAoIXBlZXIpIHtcbiAgICAgICAgY29uc29sZS5kZWJ1ZygnW25ldHdvcmtdIE5vIHBlZXIgZGVmaW5lZC4gQXNraW5nIHVzZXIgdG8gY2hvb3NlIGEgcGVlci4nKTtcbiAgICAgICAgcGVlciA9IGF3YWl0IHRoaXMuc2hvd1NlbGVjdFBlZXJNb2RhbCh7IGFsbG93U2VsZWN0RG93blBlZXI6IGZhbHNlIH0pO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodGhpcy5vbmxpbmUpIHtcbiAgICAgIC8vIENoZWNrIGlmIGFsaXZlLiBJZiBub3QsIGZvcmNlIG9mZmxpbmUgbW9kZVxuICAgICAgY29uc3QgYWxpdmUgPSBhd2FpdCB0aGlzLmNoZWNrUGVlckFsaXZlKHBlZXIpO1xuICAgICAgaWYgKCFhbGl2ZSkge1xuICAgICAgICAvLyBQZWVyIG5vdCBhbGl2ZSwgYnV0IHNob3VsZCBiZSBhdCB0aGUgc2FtZSBVUkwsIHJldHJ5aW5nIGVhY2ggMXNcbiAgICAgICAgaWYgKHRoaXMuZW52aXJvbm1lbnQuc2FtZVVybFBlZXIpIHtcbiAgICAgICAgICBjb25zdCByZXRyeU1zID0gdGhpcy5fY29ubmVjdGlvblRpbWVvdXQgPiAwID8gdGhpcy5fY29ubmVjdGlvblRpbWVvdXQgOiAxMDAwO1xuICAgICAgICAgIGF3YWl0IGZpcnN0VmFsdWVGcm9tKFxuICAgICAgICAgICAgdGltZXIocmV0cnlNcywgcmV0cnlNcykucGlwZShcbiAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuc3RvcFN1YmplY3QpLFxuICAgICAgICAgICAgICB0YXAoKCkgPT4gY29uc29sZS53YXJuKGBbbmV0d29yay1zZXJ2aWNlXSBXYWl0aW5nIHBlZXIgYmUgYmUgYWxpdmUsIGF0IHske3BlZXIudXJsfX0gLi4uYCkpLFxuICAgICAgICAgICAgICBtZXJnZU1hcCgoKSA9PiB0aGlzLmNoZWNrUGVlckFsaXZlKHBlZXIpKSxcbiAgICAgICAgICAgICAgZmlsdGVyKChhbGl2ZSkgPT4gISFhbGl2ZSksXG4gICAgICAgICAgICAgIGZpcnN0KClcbiAgICAgICAgICAgIClcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIENvbnRpbnVlLCBpbiBvZmZsaW5lIG1vZGVcbiAgICAgICAgICB0aGlzLnNldEZvcmNlT2ZmbGluZSh0cnVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnNvbGUuaW5mbyhgW25ldHdvcmtdIFN0YXJ0aW5nIHNlcnZpY2UgW09LXSB7cGVlcjogJyR7cGVlci51cmx9Jywgb25saW5lOiAke3RoaXMub25saW5lfX1gKTtcblxuICAgIHJldHVybiBwZWVyO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIG5nT25BZnRlclN0YXJ0KHBlZXI6IFBlZXIpIHtcbiAgICAvLyBXYWl0IHNldHRpbmdzIHN0YXJ0cywgdGhlbiBzYXZlIHBlZXIgaW4gc2V0dGluZ3NcbiAgICBhd2FpdCB0aGlzLnNldHRpbmdzLmFwcGx5KHsgcGVlclVybDogcGVlci51cmwgfSk7XG5cbiAgICB0aGlzLm9uRGV2aWNlQ29ubmVjdGlvbkNoYW5nZWQodGhpcy5fbmV0d29yaz8udHlwZSB8fCAndW5rbm93bicpO1xuXG4gICAgLy8gU3RhcnQgdGhlIHJlZnJlc2ggdGltZXJcbiAgICB0aGlzLnN0YXJ0UmVmcmVzaFRpbWVyKCk7XG5cbiAgICAvLyBMaXN0ZW4gZm9yIGRldmljZSBuZXR3b3JrIGNoYW5nZXNcbiAgICBpZiAodGhpcy5fbmV0d29yaykge1xuICAgICAgdGhpcy5yZWdpc3RlclN1YnNjcmlwdGlvbih0aGlzLl9uZXR3b3JrLm9uRGlzY29ubmVjdCgpLnN1YnNjcmliZSgoKSA9PiB0aGlzLm9uRGV2aWNlQ29ubmVjdGlvbkNoYW5nZWQoJ25vbmUnKSkpO1xuICAgICAgdGhpcy5yZWdpc3RlclN1YnNjcmlwdGlvbih0aGlzLl9uZXR3b3JrLm9uQ29ubmVjdCgpLnN1YnNjcmliZSgoKSA9PiB0aGlzLm9uRGV2aWNlQ29ubmVjdGlvbkNoYW5nZWQodGhpcy5fbmV0d29yay50eXBlKSkpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBuZ09uU3RvcCgpIHtcbiAgICAvLyBTdG9wIHRpbWVyLCBpZiBjYW5ub3QgcmVmcmVzaCBhbnltb3JlXG4gICAgaWYgKHRoaXMuX3RpbWVyUmVmcmVzaENvbmRpdGlvbigpID09PSBmYWxzZSkge1xuICAgICAgdGhpcy5zdG9wUmVmcmVzaFRpbWVyKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRyeSB0byByZXN0b3JlIHBlZXIgZnJvbSB0aGUgbG9jYWwgc3RvcmFnZVxuICAgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIHJlc3RvcmVMb2NhbGx5KCk6IFByb21pc2U8UGVlciB8IHVuZGVmaW5lZD4ge1xuICAgIC8vIEZvcmNlIHVzZSBwcmVkZWZpbmVkIHBlZXIgaWYgcHJvdmlkZWRcbiAgICBpZiAodGhpcy5lbnZpcm9ubWVudC5wZWVyKSB7XG4gICAgICByZXR1cm4gUGVlci5mcm9tT2JqZWN0KHRoaXMuZW52aXJvbm1lbnQucGVlcik7XG4gICAgfVxuXG4gICAgLy8gUmVzdG9yZSBmcm9tIHN0b3JhZ2VcbiAgICBsZXQgc2V0dGluZ3MgPSBhd2FpdCB0aGlzLnN0b3JhZ2UuZ2V0KFNFVFRJTkdTX1NUT1JBR0VfS0VZKTtcbiAgICBzZXR0aW5ncyA9IHR5cGVvZiBzZXR0aW5ncyA9PT0gJ3N0cmluZycgPyBKU09OLnBhcnNlKHNldHRpbmdzKSA6IHNldHRpbmdzO1xuICAgIGlmIChzZXR0aW5ncyAmJiBzZXR0aW5ncy5wZWVyVXJsKSB7XG4gICAgICBjb25zb2xlLmRlYnVnKGBbbmV0d29ya10gVXNlIHBlZXIgeyR7c2V0dGluZ3MucGVlclVybH19IChmb3VuZCBpbiB0aGUgbG9jYWwgc3RvcmFnZSlgKTtcbiAgICAgIHJldHVybiBQZWVyLnBhcnNlVXJsKHNldHRpbmdzLnBlZXJVcmwpO1xuICAgIH1cblxuICAgIC8vIEVsc2UsIHVzZSBkZWZhdWx0IHBlZXIgaW4gZW52LCBpZiBleGlzdHNcbiAgICBpZiAodGhpcy5lbnZpcm9ubWVudC5kZWZhdWx0UGVlcikge1xuICAgICAgcmV0dXJuIFBlZXIuZnJvbU9iamVjdCh0aGlzLmVudmlyb25tZW50LmRlZmF1bHRQZWVyKTtcbiAgICB9XG5cbiAgICAvLyBFbHNlLCBpZiBBcHAgaXMgaG9zdGVkLCB0cnkgdGhlIHdlYnNpdGUgYXMgYSBwZWVyXG4gICAgY29uc3QgbG9jYXRpb24gPSB0aGlzLl9kb2N1bWVudD8ubG9jYXRpb247XG4gICAgaWYgKGxvY2F0aW9uPy5wcm90b2NvbD8uc3RhcnRzV2l0aCgnaHR0cCcpKSB7XG4gICAgICBjb25zdCBob3N0bmFtZSA9IHRoaXMuX2RvY3VtZW50LmxvY2F0aW9uLmhvc3Q7XG4gICAgICBjb25zdCBkZXRlY3RlZFBlZXIgPSBQZWVyLnBhcnNlVXJsKGAke3RoaXMuX2RvY3VtZW50LmxvY2F0aW9uLnByb3RvY29sfSR7aG9zdG5hbWV9JHt0aGlzLmVudmlyb25tZW50LmJhc2VVcmx9YCk7XG5cbiAgICAgIGlmICh0aGlzLmVudmlyb25tZW50LnNhbWVVcmxQZWVyIHx8IChhd2FpdCB0aGlzLmNoZWNrUGVlckFsaXZlKGRldGVjdGVkUGVlcikpKSB7XG4gICAgICAgIHJldHVybiBkZXRlY3RlZFBlZXI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdG9wIHRvIG5ldHdvcmsgc3RhdGVcbiAgICpcbiAgICogQHByb3RlY3RlZFxuICAgKi9cbiAgcHJvdGVjdGVkIHN0b3BSZWZyZXNoVGltZXIoKSB7XG4gICAgaWYgKHRoaXMuX3RpbWVyU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLl90aW1lclN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgdGhpcy5fdGltZXJTdWJzY3JpcHRpb24gPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlZnJlc2ggdGhlIG5ldHdvcmsgc3RhdGVcbiAgICpcbiAgICogQHByb3RlY3RlZFxuICAgKi9cbiAgcHJvdGVjdGVkIHN0YXJ0UmVmcmVzaFRpbWVyKCkge1xuICAgIGlmICh0aGlzLl90aW1lclN1YnNjcmlwdGlvbikgcmV0dXJuOyAvLyBBbHJlYWR5IHJ1bm5pbmc6IHNraXBcblxuICAgIGNvbnNvbGUuaW5mbyhgW25ldHdvcmtdIFN0YXJ0aW5nIHJlZnJlc2ggdGltZXIsIGV2ZXJ5ICR7dGhpcy5fdGltZXJSZWZyZXNoUGVyaW9kfW1zLi4uYCk7XG5cbiAgICBsZXQgbGFzdEluZm86IE5vZGVJbmZvO1xuICAgIHRoaXMuX3RpbWVyU3Vic2NyaXB0aW9uID0gdGltZXIodGhpcy5fdGltZXJSZWZyZXNoUGVyaW9kLCB0aGlzLl90aW1lclJlZnJlc2hQZXJpb2QpXG4gICAgICAucGlwZShcbiAgICAgICAgLy8gU2tpcCBzb21lIHRpbWVyIGV2ZW50IChzZWUgY29uc3RydWN0b3IpXG4gICAgICAgIGZpbHRlcih0aGlzLl90aW1lclJlZnJlc2hDb25kaXRpb24pLFxuXG4gICAgICAgIC8vIENoZWNraW4gaWYgcGVlciBhbGl2ZVxuICAgICAgICB0YXAoKCkgPT4gY29uc29sZS5kZWJ1ZygnW25ldHdvcmtdIENoZWNraW5nIGNvbm5lY3Rpb24gdG8gcG9kLi4uJykpLFxuICAgICAgICBtZXJnZU1hcCgoKSA9PiB0aGlzLmNoZWNrUGVlckFsaXZlKHRoaXMucGVlcikpLFxuXG4gICAgICAgIC8vIEZpbHRlciB0byBrZWVwIG9ubHkgY2hhbmdlc1xuICAgICAgICBmaWx0ZXIoKGluZm8pID0+ICFlcXVhbHMoaW5mbywgbGFzdEluZm8pKSxcbiAgICAgICAgdGFwKChpbmZvKSA9PiAobGFzdEluZm8gPSBpbmZvKSksXG5cbiAgICAgICAgLy8gQ2hlY2sgY29tcGF0aWJpbGl0eVxuICAgICAgICBtZXJnZU1hcCgoaW5mbykgPT4gdGhpcy5jaGVja1BlZXJDb21wYXRpYmxlKGluZm8sIHsgc2hvd1RvYXN0OiB0cnVlIH0pKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoYWxpdmUpID0+IHtcbiAgICAgICAgaWYgKGFsaXZlICYmIHRoaXMub2ZmbGluZSkge1xuICAgICAgICAgIHRoaXMuc2V0Rm9yY2VPZmZsaW5lKGZhbHNlKTtcblxuICAgICAgICAgIC8vIFJlc3RhcnQgdGhlIHNlcnZpY2UgKHRvIGZvcmNlIHJlIGF1dGgpXG4gICAgICAgICAgdGhpcy5yZXN0YXJ0KCk7XG4gICAgICAgIH0gZWxzZSBpZiAoIWFsaXZlICYmIHRoaXMub25saW5lKSB7XG4gICAgICAgICAgdGhpcy5zZXRGb3JjZU9mZmxpbmUodHJ1ZSk7XG5cbiAgICAgICAgICAvLyBTdG9wIHRoZSBzZXJ2aWNlXG4gICAgICAgICAgdGhpcy5zdG9wKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgdGhpcy5fdGltZXJTdWJzY3JpcHRpb24uYWRkKCgpID0+IGNvbnNvbGUuZGVidWcoJ1tuZXR3b3JrXSBSZWZyZXNoIHRpbWVyIHN0b3BwZWQnKSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgZ2V0VGV4dChcbiAgICBwYXRoOiBzdHJpbmcsXG4gICAgb3B0cz86IHtcbiAgICAgIGhlYWRlcnM/OlxuICAgICAgICB8IEh0dHBIZWFkZXJzXG4gICAgICAgIHwge1xuICAgICAgICAgICAgW2hlYWRlcjogc3RyaW5nXTogc3RyaW5nIHwgc3RyaW5nW107XG4gICAgICAgICAgfTtcbiAgICAgIHJlc3BvbnNlVHlwZT86ICd0ZXh0JztcbiAgICAgIG5vY2FjaGU/OiBib29sZWFuO1xuICAgIH1cbiAgKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gSHR0cFV0aWxzLmdldFRleHQodGhpcy5odHRwLCB0aGlzLmdldFVyaShwYXRoKSwgb3B0cyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0PFQ+KFxuICAgIHBhdGg6IHN0cmluZyxcbiAgICBvcHRzPzoge1xuICAgICAgaGVhZGVycz86XG4gICAgICAgIHwgSHR0cEhlYWRlcnNcbiAgICAgICAgfCB7XG4gICAgICAgICAgICBbaGVhZGVyOiBzdHJpbmddOiBzdHJpbmcgfCBzdHJpbmdbXTtcbiAgICAgICAgICB9O1xuICAgICAgcmVzcG9uc2VUeXBlPzogJ2pzb24nO1xuICAgICAgbm9jYWNoZT86IGJvb2xlYW47XG4gICAgICB0aW1lb3V0PzogbnVtYmVyO1xuICAgIH1cbiAgKTogUHJvbWlzZTxUPiB7XG4gICAgcmV0dXJuIEh0dHBVdGlscy5nZXRKc29uPFQ+KHRoaXMuaHR0cCwgdGhpcy5nZXRVcmkocGF0aCksIG9wdHMpO1xuICB9XG5cbiAgLyogLS0gUHJvdGVjdGVkIG1ldGhvZHMgLS0gKi9cblxuICBwcm90ZWN0ZWQgZ2V0VXJpKHBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgbGV0IHVyaSA9IHBhdGg7XG5cbiAgICAvLyBJZiBwYXRoIGlzIG5vdCBhbiBVUkk6IHByZXBlbmQgd2l0aCBwZWVyIFVSTFxuICAgIGlmICghdXJpLnN0YXJ0c1dpdGgoJ2h0dHA6Ly8nKSAmJiAhdXJpLnN0YXJ0c1dpdGgoJ2h0dHBzOi8vJykpIHtcbiAgICAgIGxldCBwZWVyVXJsID0gdGhpcy5wZWVyICYmIHRoaXMucGVlci51cmw7XG5cbiAgICAgIC8vIFJlbW92ZSB0cmFpbGluZyBzbGFzaFxuICAgICAgaWYgKHBlZXJVcmwuZW5kc1dpdGgoJy8nKSkge1xuICAgICAgICBwZWVyVXJsID0gcGVlclVybC5zdWJzdHIoMCwgcGVlclVybC5sZW5ndGggLSAxKTtcbiAgICAgIH1cblxuICAgICAgLy8gQWRkIGZpcnN0IHBhdGhcbiAgICAgIGlmICghcGF0aC5zdGFydHNXaXRoKCcvJykpIHtcbiAgICAgICAgcGF0aCA9ICcvJyArIHBhdGg7XG4gICAgICB9XG5cbiAgICAgIC8vIENyZWF0ZSB0aGUgVVJJOiBjb25jYXQgcGVlciBVUkwgYW5kIHBhdGhcbiAgICAgIHVyaSA9IHBlZXJVcmwgKyBwYXRoO1xuICAgIH1cbiAgICByZXR1cm4gdXJpO1xuICB9XG4gIHByb3RlY3RlZCBvbkRldmljZUNvbm5lY3Rpb25DaGFuZ2VkKGNvbm5lY3Rpb25UeXBlPzogc3RyaW5nKSB7XG4gICAgY29ubmVjdGlvblR5cGUgPSBnZXRDb25uZWN0aW9uVHlwZShjb25uZWN0aW9uVHlwZSk7XG4gICAgaWYgKGNvbm5lY3Rpb25UeXBlICE9PSB0aGlzLl9kZXZpY2VDb25uZWN0aW9uVHlwZSkge1xuICAgICAgdGhpcy5fZGV2aWNlQ29ubmVjdGlvblR5cGUgPSBjb25uZWN0aW9uVHlwZSBhcyBDb25uZWN0aW9uVHlwZTtcblxuICAgICAgLy8gSWYgTk9UICBhbHJlYWR5IGZvcmNlZCBhcyBvZmZsaW5lLCBlbWl0IGV2ZW50XG4gICAgICBpZiAoIXRoaXMuX2ZvcmNlT2ZmbGluZSkge1xuICAgICAgICBjb25zb2xlLmluZm8oYFtuZXR3b3JrXSBDb25uZWN0aW9uIGNoYW5nZWQgdG8geyR7dGhpcy5fZGV2aWNlQ29ubmVjdGlvblR5cGV9fWApO1xuICAgICAgICB0aGlzLm9uTmV0d29ya1N0YXR1c0NoYW5nZXMubmV4dCh0aGlzLl9kZXZpY2VDb25uZWN0aW9uVHlwZSk7XG5cbiAgICAgICAgLy8gQ2hhbmdlIHRvIG9mZmxpbmVcbiAgICAgICAgaWYgKHRoaXMuX2RldmljZUNvbm5lY3Rpb25UeXBlID09PSAnbm9uZScpIHtcbiAgICAgICAgICBpZiAodGhpcy5fbW9iaWxlKSB7XG4gICAgICAgICAgICAvLyBGb3JjZSBvZmZsaW5lIG1vZGVcbiAgICAgICAgICAgIHRoaXMuX2ZvcmNlT2ZmbGluZSA9IHRydWU7XG5cbiAgICAgICAgICAgIC8vIEFsZXJ0IHRoZSB1c2VyXG4gICAgICAgICAgICB0aGlzLnNob3dUb2FzdCh7IG1lc3NhZ2U6ICdORVRXT1JLLklORk8uT0ZGTElORV9IRUxQJywgdHlwZTogJ3dhcm5pbmcnIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBBbGVydCB0aGUgdXNlclxuICAgICAgICAgICAgdGhpcy5zaG93VG9hc3QoeyBtZXNzYWdlOiAnTkVUV09SSy5JTkZPLk9GRkxJTkUnLCB0eXBlOiAnd2FybmluZycgfSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gU3RvcCB0aGUgbmV0d29yayBzZXJ2aWNlXG4gICAgICAgICAgdGhpcy5zdG9wKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IGRlZmF1bHQgcGVlcnMsIGZyb20gZW52aXJvbm1lbnRcbiAgICovXG4gIHByb3RlY3RlZCBhc3luYyBnZXREZWZhdWx0UGVlcnMoKTogUHJvbWlzZTxQZWVyW10+IHtcbiAgICBjb25zdCBwZWVycyA9ICh0aGlzLmVudmlyb25tZW50LmRlZmF1bHRQZWVycyB8fCBbXSkubWFwKFBlZXIuZnJvbU9iamVjdCk7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShwZWVycyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgc2hvd1RvYXN0PFQgPSBhbnk+KG9wdHM6IFNob3dUb2FzdE9wdGlvbnMpOiBQcm9taXNlPE92ZXJsYXlFdmVudERldGFpbDxUPj4ge1xuICAgIHJldHVybiBUb2FzdHMuc2hvdyh0aGlzLnRvYXN0Q29udHJvbGxlciwgdGhpcy50cmFuc2xhdGUsIG9wdHMpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFkZExpc3RlbmVyPFQgPSBhbnk+KG5hbWU6IE5ldHdvcmtFdmVudFR5cGUsIGNhbGxiYWNrOiAoZGF0YT86IFQpID0+IFByb21pc2U8dm9pZD4pOiBTdWJzY3JpcHRpb24ge1xuICAgIHRoaXMuX2xpc3RlbmVyc1tuYW1lXSA9IHRoaXMuX2xpc3RlbmVyc1tuYW1lXSB8fCBbXTtcbiAgICB0aGlzLl9saXN0ZW5lcnNbbmFtZV0ucHVzaChjYWxsYmFjayk7XG5cbiAgICAvLyBXaGVuIHVuc3Vic2NyaWJlLCByZW1vdmUgZnJvbSB0aGUgbGlzdGVuZXJcbiAgICByZXR1cm4gbmV3IFN1YnNjcmlwdGlvbigoKSA9PiB7XG4gICAgICBjb25zdCBpbmRleCA9IHRoaXMuX2xpc3RlbmVyc1tuYW1lXS5pbmRleE9mKGNhbGxiYWNrKTtcbiAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgdGhpcy5fbGlzdGVuZXJzW25hbWVdLnNwbGljZShpbmRleCwgMSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgZW1pdDxUID0gYW55PihuYW1lOiBOZXR3b3JrRXZlbnRUeXBlLCBkYXRhPzogVCkge1xuICAgIGNvbnN0IGhvb2tzID0gdGhpcy5fbGlzdGVuZXJzW25hbWVdO1xuICAgIGlmIChpc05vdEVtcHR5QXJyYXkoaG9va3MpKSB7XG4gICAgICBjb25zb2xlLmluZm8oYFtuZXR3b3JrLXNlcnZpY2VdIFRyaWdnZXIgJHtuYW1lfSBob29rOiBFeGVjdXRpbmcgJHtob29rcy5sZW5ndGh9IGNhbGxiYWNrcy4uLmApO1xuXG4gICAgICByZXR1cm4gUHJvbWlzZS5hbGwoXG4gICAgICAgIGhvb2tzLm1hcCgoY2FsbGJhY2spID0+IHtcbiAgICAgICAgICBjb25zdCBwcm9taXNlID0gY2FsbGJhY2soZGF0YSk7XG4gICAgICAgICAgaWYgKCFwcm9taXNlKSByZXR1cm47XG4gICAgICAgICAgcmV0dXJuIHByb21pc2UuY2F0Y2goKGVycikgPT4gY29uc29sZS5lcnJvcignRXJyb3Igd2hpbGUgZXhlY3V0aW5nIGhvb2sgJyArIG5hbWUsIGVycikpO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
627
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV0d29yay5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9jb3JlL3NlcnZpY2VzL25ldHdvcmsuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRzNFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUcxQyxPQUFPLEVBQTJCLGVBQWUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3JGLE9BQU8sRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDNUUsT0FBTyxFQUF3QixvQkFBb0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3RGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUV4RCxPQUFPLEVBQUUsTUFBTSxFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRXBHLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUzQyxPQUFPLEVBQW9CLE1BQU0sRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBR3BHLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDN0QsT0FBTyxFQUFlLFdBQVcsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQ25GLE9BQU8sRUFBRSwwQkFBMEIsRUFB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QUFDLE1BQU0sZUFBZSxDQUFDLENBQUM7WUFFL0YsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUNoQixLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUU7Z0JBQ3JCLE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDL0IsSUFBSSxDQUFDLE9BQU87b0JBQUUsT0FBTztnQkFDckIsT0FBTyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLDZCQUE2QixHQUFHLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQzFGLENBQUMsQ0FBQyxDQUNILENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQzt3R0E5ckJVLGNBQWMsa0JBc0RmLFFBQVEscUxBT1IsV0FBVyxhQUNDLG1CQUFtQjs0R0E5RDlCLGNBQWMsY0FERCxNQUFNOzs0RkFDbkIsY0FBYztrQkFEMUIsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUU7OzBCQXVEN0IsTUFBTTsyQkFBQyxRQUFROzswQkFPZixNQUFNOzJCQUFDLFdBQVc7OzBCQUNsQixRQUFROzswQkFBSSxNQUFNOzJCQUFDLG1CQUFtQjs7MEJBQ3RDLFFBQVE7OzBCQUNSLFFBQVE7OzBCQUNSLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFdmVudEVtaXR0ZXIsIEluamVjdCwgSW5qZWN0YWJsZSwgT3B0aW9uYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IFN0b3JhZ2UgfSBmcm9tICdAaW9uaWMvc3RvcmFnZS1hbmd1bGFyJztcbmltcG9ydCB7IFBlZXIgfSBmcm9tICcuL21vZGVsL3BlZXIubW9kZWwnO1xuaW1wb3J0IHsgTG9jYWxTZXR0aW5ncyB9IGZyb20gJy4vbW9kZWwvc2V0dGluZ3MubW9kZWwnO1xuaW1wb3J0IHsgTW9kYWxDb250cm9sbGVyLCBQbGF0Zm9ybSwgVG9hc3RDb250cm9sbGVyIH0gZnJvbSAnQGlvbmljL2FuZ3VsYXInO1xuaW1wb3J0IHsgSVNlbGVjdFBlZXJNb2RhbE9wdGlvbnMsIFNlbGVjdFBlZXJNb2RhbCB9IGZyb20gJy4uL3BlZXIvc2VsZWN0LXBlZXIubW9kYWwnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBmaXJzdFZhbHVlRnJvbSwgU3Vic2NyaXB0aW9uLCB0aW1lciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgTG9jYWxTZXR0aW5nc1NlcnZpY2UsIFNFVFRJTkdTX1NUT1JBR0VfS0VZIH0gZnJvbSAnLi9sb2NhbC1zZXR0aW5ncy5zZXJ2aWNlJztcbmltcG9ydCB7IFNwbGFzaFNjcmVlbiB9IGZyb20gJ0BjYXBhY2l0b3Ivc3BsYXNoLXNjcmVlbic7XG5pbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwSGVhZGVycyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IGVxdWFscywgaXNOb3RFbXB0eUFycmF5LCBpc05vdE5pbE9yQmxhbmssIHNsZWVwLCB0b0Jvb2xlYW4gfSBmcm9tICcuLi8uLi9zaGFyZWQvZnVuY3Rpb25zJztcbmltcG9ydCB7IE5ldHdvcmsgfSBmcm9tICdAYXdlc29tZS1jb3Jkb3ZhLXBsdWdpbnMvbmV0d29yay9uZ3gnO1xuaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ2FjaGVTZXJ2aWNlIH0gZnJvbSAnaW9uaWMtY2FjaGUnO1xuaW1wb3J0IHsgU2hvd1RvYXN0T3B0aW9ucywgVG9hc3RzIH0gZnJvbSAnLi4vLi4vc2hhcmVkL3RvYXN0L3RvYXN0cyc7XG5pbXBvcnQgeyBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZmlsdGVyLCBmaXJzdCwgbWFwLCBtZXJnZU1hcCwgdGFrZVVudGlsLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBPdmVybGF5RXZlbnREZXRhaWwgfSBmcm9tICdAaW9uaWMvY29yZSc7XG5pbXBvcnQgeyBBcHBNYW5pZmVzdCwgTm9kZUluZm8gfSBmcm9tICcuL25ldHdvcmsudXRpbHMnO1xuaW1wb3J0IHsgSHR0cFV0aWxzIH0gZnJvbSAnLi4vLi4vc2hhcmVkL2h0dHAvaHR0cC51dGlscyc7XG5pbXBvcnQgeyBWZXJzaW9uVXRpbHMgfSBmcm9tICcuLi8uLi9zaGFyZWQvdmVyc2lvbi92ZXJzaW9ucyc7XG5pbXBvcnQgeyBFbnZpcm9ubWVudCwgRU5WSVJPTk1FTlQgfSBmcm9tICcuLi8uLi8uLi9lbnZpcm9ubWVudHMvZW52aXJvbm1lbnQuY2xhc3MnO1xuaW1wb3J0IHsgU3RhcnRhYmxlT2JzZXJ2YWJsZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zaGFyZWQvc2VydmljZXMvc3RhcnRhYmxlLW9ic2VydmFibGUtc2VydmljZS5jbGFzcyc7XG5pbXBvcnQgeyBDb25uZWN0aW9uVHlwZSwgZ2V0Q29ubmVjdGlvblR5cGUsIE5ldHdvcmtFdmVudFR5cGUgfSBmcm9tICcuL25ldHdvcmsudHlwZXMnO1xuaW1wb3J0IHsgQVBQX0xPR0dJTkdfU0VSVklDRSB9IGZyb20gJy4uLy4uL3NoYXJlZC9sb2dnaW5nL2xvZ2dpbmctc2VydmljZS5jbGFzcyc7XG5pbXBvcnQgeyBJTG9nZ2VyLCBJTG9nZ2luZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zaGFyZWQvbG9nZ2luZy9sb2dnZXIubW9kZWwnO1xuXG5jb25zdCBOZXR3b3JrUmVmcmVzaFRpbWVyUGVyaW9kID0ge1xuICBNT0JJTEU6IDEwMDAgKiA2MCAqIDEwIC8qIGV2ZXJ5IDEwIG1pbiAqLyxcbiAgREVTS1RPUDogMTAwMCAqIDYwICogNSAvKiBldmVyeSA1IG1pbiAqLyxcbn07XG5cbmV4cG9ydCBjb25zdCBQRUVSX1VSTF9SRUdFWFAgPSAvXihodHRwfGh0dHBzKTpcXC9cXC9bXiBcIj8jQF0rJC87XG5cbmV4cG9ydCBjb25zdCBORVRXT1JLX0RFRkFVTFRfQ09OTkVDVElPTl9USU1FT1VUID0gMTAwMDA7IC8vIDEwcyAtIC8hXFwgc2hvdWxkIGJlIGhpZ2ggKGUuZy4gZm9yIHBvb3IgY29ubmVjdGlvbilcblxuLyogLS0gREVWIG9ubHkgKHRvIGRlYnVnIHJlZnJlc2ggdGltZXIpXG5OZXR3b3JrUmVmcmVzaFRpbWVyUGVyaW9kLk1PQklMRSA9ICAxMDAwO1xuTmV0d29ya1JlZnJlc2hUaW1lclBlcmlvZC5ERVNLVE9QID0gIDEwMDA7ICovXG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgTmV0d29ya1NlcnZpY2UgZXh0ZW5kcyBTdGFydGFibGVPYnNlcnZhYmxlU2VydmljZTxQZWVyLCBQZWVyPiB7XG4gIG9uUGVlckNoYW5nZXMgPSB0aGlzLnN0YXJ0U3ViamVjdC5waXBlKFxuICAgIG1hcCgocGVlcikgPT4gcGVlcj8udXJsKSxcbiAgICBmaWx0ZXIoaXNOb3ROaWxPckJsYW5rKSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZDxzdHJpbmc+KClcbiAgKTtcbiAgb25OZXR3b3JrU3RhdHVzQ2hhbmdlcyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Q29ubmVjdGlvblR5cGU+KG51bGwpO1xuICBvblJlc2V0TmV0d29ya0NhY2hlID0gbmV3IEV2ZW50RW1pdHRlcih0cnVlKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9tb2JpbGU6IGJvb2xlYW47XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xvZ2dlcjogSUxvZ2dlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfbmV0d29yazogTmV0d29yaztcbiAgcHJpdmF0ZSBfdGltZXJTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSByZWFkb25seSBfdGltZXJSZWZyZXNoUGVyaW9kOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3RpbWVyUmVmcmVzaENvbmRpdGlvbjogKCkgPT4gYm9vbGVhbjtcbiAgcHJpdmF0ZSBfZGV2aWNlQ29ubmVjdGlvblR5cGU6IENvbm5lY3Rpb25UeXBlO1xuICBwcml2YXRlIF9mb3JjZU9mZmxpbmU6IGJvb2xlYW47XG4gIHByaXZhdGUgcmVhZG9ubHkgX2Nvbm5lY3Rpb25UaW1lb3V0OiBudW1iZXI7XG5cbiAgcHJpdmF0ZSBfbGlzdGVuZXJzOiB7XG4gICAgW2tleTogc3RyaW5nXTogKChkYXRhPzogYW55KSA9PiBQcm9taXNlPHZvaWQ+KVtdO1xuICB9ID0ge307XG5cbiAgZ2V0IG9ubGluZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5jb25uZWN0aW9uVHlwZSAhPT0gJ25vbmUnO1xuICB9XG5cbiAgZ2V0IG9mZmxpbmUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY29ubmVjdGlvblR5cGUgPT09ICdub25lJztcbiAgfVxuXG4gIGdldCBjb25uZWN0aW9uVHlwZSgpOiBDb25uZWN0aW9uVHlwZSB7XG4gICAgLy8gSWYgZm9yY2Ugb2ZmbGluZTogcmV0dXJuICdub25lJ1xuICAgIHJldHVybiB0aGlzLl9mb3JjZU9mZmxpbmVcbiAgICAgID8gJ25vbmUnXG4gICAgICA6IC8vIEVsc2UsIHJldHVybiBkZXZpY2UgY29ubmVjdGlvbiB0eXBlIChvciB1bmtub3duKVxuICAgICAgICAodGhpcy5zdGFydGVkICYmIHRoaXMuX2RldmljZUNvbm5lY3Rpb25UeXBlKSB8fCAndW5rbm93bic7XG4gIH1cblxuICBnZXQgcGVlcigpOiBQZWVyIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhU3ViamVjdC52YWx1ZT8uY2xvbmUoKTtcbiAgfVxuXG4gIHNldCBwZWVyKHBlZXI6IFBlZXIpIHtcbiAgICBpZiAoIVBlZXIuZXF1YWxzKHRoaXMucGVlciwgcGVlcikpIHtcbiAgICAgIHRoaXMucmVzdGFydChwZWVyKTtcbiAgICB9XG4gIH1cblxuICBnZXQgY29ubmVjdGlvblRpbWVvdXQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fY29ubmVjdGlvblRpbWVvdXQ7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBASW5qZWN0KERPQ1VNRU5UKSBwcml2YXRlIF9kb2N1bWVudDogYW55LFxuICAgIHBsYXRmb3JtOiBQbGF0Zm9ybSxcbiAgICBwcml2YXRlIG1vZGFsQ3RybDogTW9kYWxDb250cm9sbGVyLFxuICAgIHByaXZhdGUgc3RvcmFnZTogU3RvcmFnZSxcbiAgICBwcml2YXRlIHNldHRpbmdzOiBMb2NhbFNldHRpbmdzU2VydmljZSxcbiAgICBwcml2YXRlIGNhY2hlOiBDYWNoZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LFxuICAgIEBJbmplY3QoRU5WSVJPTk1FTlQpIHByb3RlY3RlZCBlbnZpcm9ubWVudDogRW52aXJvbm1lbnQsXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChBUFBfTE9HR0lOR19TRVJWSUNFKSBwcml2YXRlIGxvZ2dpbmdTZXJ2aWNlOiBJTG9nZ2luZ1NlcnZpY2UsXG4gICAgQE9wdGlvbmFsKCkgbmV0d29yazogTmV0d29yayxcbiAgICBAT3B0aW9uYWwoKSBwcml2YXRlIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBAT3B0aW9uYWwoKSBwcml2YXRlIHRvYXN0Q29udHJvbGxlcjogVG9hc3RDb250cm9sbGVyXG4gICkge1xuICAgIHN1cGVyKHBsYXRmb3JtKTtcbiAgICB0aGlzLl9tb2JpbGUgPSB0aGlzLnNldHRpbmdzLm1vYmlsZTtcbiAgICB0aGlzLl9jb25uZWN0aW9uVGltZW91dCA9IGVudmlyb25tZW50LmNvbm5lY3Rpb25UaW1lb3V0IHx8IE5FVFdPUktfREVGQVVMVF9DT05ORUNUSU9OX1RJTUVPVVQ7XG4gICAgdGhpcy5fbG9nZ2VyID0gdGhpcy5sb2dnaW5nU2VydmljZT8uZ2V0TG9nZ2VyKCduZXR3b3JrJyk7XG5cbiAgICBpZiAodGhpcy5fbW9iaWxlKSB7XG4gICAgICB0aGlzLl90aW1lclJlZnJlc2hQZXJpb2QgPSBOZXR3b3JrUmVmcmVzaFRpbWVyUGVyaW9kLk1PQklMRTtcbiAgICAgIHRoaXMuX3RpbWVyUmVmcmVzaENvbmRpdGlvbiA9ICgpID0+IHRoaXMub25saW5lOyAvLyBDaGVjayBvbmx5IHdoZW4gb25saW5lLCBhbmQgc3RvcCB3aGVuIG9mZmxpbmVcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fdGltZXJSZWZyZXNoUGVyaW9kID0gTmV0d29ya1JlZnJlc2hUaW1lclBlcmlvZC5ERVNLVE9QO1xuICAgICAgdGhpcy5fdGltZXJSZWZyZXNoQ29uZGl0aW9uID0gKCkgPT4gdHJ1ZTsgLy8gQWx3YXlzIGNoZWNrXG4gICAgfVxuXG4gICAgLy8gU2F2ZSBuZXR3b3JrIGluc3RhbmNlIG9ubHkgd2hlbiBjb3Jkb3ZhIGlzIHJ1bm5pbmdcbiAgICBpZiAocGxhdGZvcm0uaXMoJ2NvcmRvdmEnKSkge1xuICAgICAgdGhpcy5fbmV0d29yayA9IG5ldHdvcms7XG4gICAgfVxuXG4gICAgdGhpcy5zdGFydFN1YmplY3Quc3Vic2NyaWJlKChwZWVyKSA9PiB0aGlzLm5nT25BZnRlclN0YXJ0KHBlZXIpKTtcblxuICAgIC8vIEZvciBERVYgb25seVxuICAgIHRoaXMuX2RlYnVnID0gIWVudmlyb25tZW50LnByb2R1Y3Rpb247XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXIgdG8gbmV0d29yayBldmVudFxuICAgKlxuICAgKiBAcGFyYW0gZXZlbnRUeXBlXG4gICAqIEBwYXJhbSBjYWxsYmFja1xuICAgKi9cbiAgb248VCA9IGFueT4oZXZlbnRUeXBlOiBOZXR3b3JrRXZlbnRUeXBlLCBjYWxsYmFjazogKGRhdGE/OiBUKSA9PiBQcm9taXNlPGFueT4pOiBTdWJzY3JpcHRpb24ge1xuICAgIHN3aXRjaCAoZXZlbnRUeXBlKSB7XG4gICAgICBjYXNlICdzdGFydCc6XG4gICAgICAgIHJldHVybiB0aGlzLnN0YXJ0U3ViamVjdC5zdWJzY3JpYmUoKCkgPT4gY2FsbGJhY2soKSk7XG5cbiAgICAgIGNhc2UgJ3BlZXJDaGFuZ2VkJzpcbiAgICAgICAgcmV0dXJuIHRoaXMub25QZWVyQ2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4gY2FsbGJhY2soKSk7XG5cbiAgICAgIGNhc2UgJ3N0YXR1c0NoYW5nZWQnOlxuICAgICAgICByZXR1cm4gdGhpcy5vbk5ldHdvcmtTdGF0dXNDaGFuZ2VzLnN1YnNjcmliZSgodHlwZSkgPT4gY2FsbGJhY2sodHlwZSBhcyB1bmtub3duIGFzIFQpKTtcblxuICAgICAgY2FzZSAncmVzZXRDYWNoZSc6XG4gICAgICAgIHJldHVybiB0aGlzLm9uUmVzZXROZXR3b3JrQ2FjaGUuc3Vic2NyaWJlKCgpID0+IGNhbGxiYWNrKCkpO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gdGhpcy5hZGRMaXN0ZW5lcihldmVudFR5cGUsIGNhbGxiYWNrKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyB0cnlPbmxpbmUob3B0cz86IHtcbiAgICBzaG93T2ZmbGluZVRvYXN0PzogYm9vbGVhbjtcbiAgICBzaG93T25saW5lVG9hc3Q/OiBib29sZWFuO1xuICAgIHNob3dMb2FkaW5nVG9hc3Q/OiBib29sZWFuO1xuICAgIGFmdGVyUmV0cnlEZWxheT86IG51bWJlcjtcbiAgICBhZnRlclJldHJ5UHJvbWlzZT86ICgpID0+IFByb21pc2U8YW55PjtcbiAgfSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIC8vIElmIG9mZmxpbmUgbW9kZSBub3QgZm9yY2VkLCBhbmQgZGV2aWNlIHNheXMgdGhlcmUgaXMgbm8gY29ubmVjdGlvbjogc2tpcFxuICAgIGlmICghdGhpcy5fZm9yY2VPZmZsaW5lIHx8IHRoaXMuX2RldmljZUNvbm5lY3Rpb25UeXBlID09PSAnbm9uZScpIHJldHVybiBmYWxzZTtcblxuICAgIC8vIFNIb3cgbG9hZGluZyB0b2FzdFxuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgY29uc3Qgc2hvd0xvYWRpbmdUb2FzdCA9ICFvcHRzIHx8IG9wdHMuc2hvd0xvYWRpbmdUb2FzdCAhPT0gZmFsc2U7XG4gICAgbGV0IGxvYWRpbmdUb2FzdDogSFRNTElvblRvYXN0RWxlbWVudDtcbiAgICBpZiAoc2hvd0xvYWRpbmdUb2FzdCkge1xuICAgICAgYXdhaXQgdGhpcy5zaG93VG9hc3QoeyBtZXNzYWdlOiAnTkVUV09SSy5JTkZPLlJFVFJZX1RPX0NPTk5FQ1QnLCBkdXJhdGlvbjogMTAwMDAsIG9uV2lsbFByZXNlbnQ6ICh0KSA9PiAobG9hZGluZ1RvYXN0ID0gdCkgfSk7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnNvbGUuaW5mbygnW25ldHdvcmtdIENoZWNraW5nIGNvbm5lY3Rpb24gdG8gcG9kLi4uJyk7XG4gICAgICBjb25zdCBzZXR0aW5nczogTG9jYWxTZXR0aW5ncyA9IGF3YWl0IHRoaXMuc2V0dGluZ3MucmVhZHkoKTtcblxuICAgICAgaWYgKCFzZXR0aW5ncy5wZWVyVXJsKSByZXR1cm4gZmFsc2U7IC8vIE5vIHBlZXIgZGVmaW5lLiBTa2lwXG5cbiAgICAgIGNvbnN0IHBlZXIgPSBQZWVyLnBhcnNlVXJsKHNldHRpbmdzLnBlZXJVcmwpO1xuICAgICAgY29uc3QgcGVlckluZm8gPSBhd2FpdCB0aGlzLmNoZWNrUGVlckFsaXZlKHBlZXIpO1xuICAgICAgY29uc3QgcGVlckFsaXZlQW5kQ29tcGF0aWJsZSA9IHBlZXJJbmZvICYmIChhd2FpdCB0aGlzLmNoZWNrUGVlckNvbXBhdGlibGUocGVlckluZm8pKTtcbiAgICAgIGlmIChwZWVyQWxpdmVBbmRDb21wYXRpYmxlKSB7XG4gICAgICAgIC8vIERpc2FibGUgdGhlIG9mZmxpbmUgbW9kZVxuICAgICAgICB0aGlzLnNldEZvcmNlT2ZmbGluZShmYWxzZSk7XG5cbiAgICAgICAgLy8gUmVzdGFydFxuICAgICAgICBhd2FpdCB0aGlzLnJlc3RhcnQocGVlcik7XG5cbiAgICAgICAgLy8gV2FpdCBhIHByb21pc2UsIGJlZm9yZSByZWNoZWNrXG4gICAgICAgIGF3YWl0IHRoaXMuZW1pdCgnYmVmb3JlVHJ5T25saW5lRmluaXNoJywgdGhpcy5vbmxpbmUpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc29sZS5lcnJvcigoZXJyICYmIGVyci5tZXNzYWdlKSB8fCBlcnIpO1xuICAgICAgLy8gQ29udGludWVcbiAgICB9XG5cbiAgICAvLyBDbG9zZSBsb2FkaW5nIHRvYXN0ICh3aXRoIGEgbWluaW1hbCBkaXNwbGF5IGR1cmF0aW9uIG9mIDJzKVxuICAgIGlmIChzaG93TG9hZGluZ1RvYXN0KSB7XG4gICAgICBhd2FpdCBzbGVlcCgyMDAwIC0gKERhdGUubm93KCkgLSBub3cpKTtcbiAgICAgIGlmIChsb2FkaW5nVG9hc3QpIGF3YWl0IGxvYWRpbmdUb2FzdC5kaXNtaXNzKCk7XG4gICAgfVxuXG4gICAgLy8gUmVjaGVjayBuZXR3b3JrIHN0YXR1c1xuICAgIGNvbnN0IG9ubGluZSA9IHRoaXMub25saW5lO1xuXG4gICAgLy8gRGlzcGxheSBhIHRvYXN0IHRvIHVzZXJcbiAgICBpZiAob25saW5lKSB7XG4gICAgICBpZiAoIW9wdHMgfHwgb3B0cy5zaG93T25saW5lVG9hc3QgIT09IGZhbHNlKSB7XG4gICAgICAgIC8vIERpc3BsYXkgdG9hc3QgKHdpdGhvdXQgYXdhaXQsIGJlY2F1c2Ugbm90IG5lZWQgdG8gd2FpdCB0b2FzdCBjbG9zZSBldmVudClcbiAgICAgICAgdGhpcy5zaG93VG9hc3QoeyBtZXNzYWdlOiAnTkVUV09SSy5JTkZPLk9OTElORScsIHR5cGU6ICdpbmZvJyB9KTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKG9wdHMgJiYgb3B0cy5zaG93T2ZmbGluZVRvYXN0ID09PSB0cnVlKSB7XG4gICAgICAvLyBEaXNwbGF5IHRvYXN0ICh3aXRob3V0IGF3YWl0LCBiZWNhdXNlIG5vdCBuZWVkIHRvIHdhaXQgdG9hc3QgY2xvc2UgZXZlbnQpXG4gICAgICByZXR1cm4gdGhpcy5zaG93T2ZmbGluZVRvYXN0KHsgc2hvd1JldHJ5QnV0dG9uOiBmYWxzZSB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5zdGFydGVkICYmIG9ubGluZTtcbiAgfVxuXG4gIGFzeW5jIHNob3dPZmZsaW5lVG9hc3Qob3B0cz86IHtcbiAgICBtZXNzYWdlPzogc3RyaW5nO1xuICAgIHNob3dDbG9zZUJ1dHRvbj86IGJvb2xlYW47XG4gICAgc2hvd1JldHJ5QnV0dG9uPzogYm9vbGVhbjtcbiAgICBzaG93UmV0cnlTdWNjZXNzVG9hc3Q/OiBib29sZWFuO1xuICAgIHNob3dSZXRyeUxvYWRpbmdUb2FzdD86IGJvb2xlYW47XG4gICAgb25SZXRyeVN1Y2Nlc3M/OiAoKSA9PiB2b2lkO1xuICB9KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgaWYgKHRoaXMub25saW5lKSByZXR1cm47IC8vIFNraXAgaWYgb25saW5lXG5cbiAgICAvLyBUb2FzdCB3aXRoIGEgcmV0cnkgYnV0dG9uXG4gICAgaWYgKCFvcHRzIHx8IG9wdHMuc2hvd1JldHJ5QnV0dG9uICE9PSBmYWxzZSkge1xuICAgICAgY29uc3QgdG9hc3RSZXN1bHQgPSBhd2FpdCB0aGlzLnNob3dUb2FzdCh7XG4gICAgICAgIG1lc3NhZ2U6IChvcHRzICYmIG9wdHMubWVzc2FnZSkgfHwgJ0VSUk9SLk5FVFdPUktfUkVRVUlSRUQnLFxuICAgICAgICB0eXBlOiAnd2FybmluZycsXG4gICAgICAgIHNob3dDbG9zZUJ1dHRvbjogdHJ1ZSxcbiAgICAgICAgZHVyYXRpb246IDEwMDAwMCxcbiAgICAgICAgYnV0dG9uczogW1xuICAgICAgICAgIC8vIHJlY29ubmVjdCBidXR0b25cbiAgICAgICAgICB7XG4gICAgICAgICAgICByb2xlOiAncmVmcmVzaCcsXG4gICAgICAgICAgICB0ZXh0OiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdORVRXT1JLLkJUTl9DSEVDS19BTElWRScpLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9KTtcblxuICAgICAgLy8gVXNlciBkb24ndCBjbGljayByZWNvbm5lY3Q6IHJldHVyblxuICAgICAgaWYgKCF0b2FzdFJlc3VsdCB8fCB0b2FzdFJlc3VsdC5yb2xlICE9PSAncmVmcmVzaCcpIHJldHVybiBmYWxzZTtcblxuICAgICAgLy8gaWYgbmV0d29yayBzdGF0ZSBjaGFuZ2VkIHRvIG9ubGluZTogZXhpdCBoZXJlXG4gICAgICBpZiAodGhpcy5vbmxpbmUpIHJldHVybiB0cnVlO1xuXG4gICAgICAvLyBUcnkgdG8gcmVjb25uZWN0XG4gICAgICBjb25zdCBvbmxpbmUgPSBhd2FpdCB0aGlzLnRyeU9ubGluZSh7XG4gICAgICAgIHNob3dPZmZsaW5lVG9hc3Q6IGZhbHNlLFxuICAgICAgICBzaG93T25saW5lVG9hc3Q6IHRvQm9vbGVhbihvcHRzICYmIG9wdHMuc2hvd1JldHJ5U3VjY2Vzc1RvYXN0LCB0cnVlKSxcbiAgICAgICAgc2hvd0xvYWRpbmdUb2FzdDogdG9Cb29sZWFuKG9wdHMgJiYgb3B0cy5zaG93UmV0cnlMb2FkaW5nVG9hc3QsIHRydWUpLFxuICAgICAgfSk7XG4gICAgICBpZiAob25saW5lKSB7XG4gICAgICAgIC8vIENhbGwgc3VjY2VzcyBjYWxsYmFjayAoYXN5bmMpXG4gICAgICAgIGlmIChvcHRzICYmIG9wdHMub25SZXRyeVN1Y2Nlc3MpIHtcbiAgICAgICAgICBzZXRUaW1lb3V0KG9wdHMub25SZXRyeVN1Y2Nlc3MpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBvcHRzID0ge1xuICAgICAgICAuLi5vcHRzLFxuICAgICAgICBzaG93UmV0cnlCdXR0b246IGZhbHNlLFxuICAgICAgICBzaG93Q2xvc2VCdXR0b246IHRydWUsXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIFNpbXBsZSB0b2FzdCwgd2l0aG91dCAnYXdhaXQnLCBiZWNhdXNlIG5vdCBuZWVkIHRvIHdhaXQgdG9hc3QncyBkaXNtaXNzXG4gICAgdGhpcy5zaG93VG9hc3Qoe1xuICAgICAgbWVzc2FnZTogJ0VSUk9SLk5FVFdPUktfUkVRVUlSRUQnLFxuICAgICAgdHlwZTogJ2Vycm9yJyxcbiAgICAgIC4uLm9wdHMsXG4gICAgfSk7XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgdGhlIHBlZXIgaXMgYWxpdmVcbiAgICpcbiAgICogQHBhcmFtIHBlZXJcbiAgICogQHBhcmFtIG9wdHNcbiAgICovXG4gIGFzeW5jIGNoZWNrUGVlckFsaXZlKHBlZXI/OiBzdHJpbmcgfCBQZWVyKTogUHJvbWlzZTxOb2RlSW5mbz4ge1xuICAgIHBlZXIgPSBwZWVyIHx8IHRoaXMucGVlcjtcbiAgICBpZiAoIXBlZXIpIHtcbiAgICAgIGNvbnN0IHNldHRpbmdzOiBMb2NhbFNldHRpbmdzID0gYXdhaXQgdGhpcy5zZXR0aW5ncy5yZWFkeSgpO1xuICAgICAgaWYgKCFzZXR0aW5ncy5wZWVyVXJsKSByZXR1cm4gdW5kZWZpbmVkOyAvLyBObyBwZWVyIGRlZmluZS4gU2tpcFxuICAgICAgcGVlciA9IFBlZXIucGFyc2VVcmwoc2V0dGluZ3MucGVlclVybCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZ2V0Tm9kZUluZm8ocGVlciwgeyBub2NhY2hlOiB0cnVlLCB0aW1lb3V0OiB0aGlzLl9jb25uZWN0aW9uVGltZW91dCB9KTtcbiAgfVxuXG4gIGFzeW5jIGNoZWNrUGVlckNvbXBhdGlibGUocGVlckluZm86IE5vZGVJbmZvLCBvcHRzPzogeyBzaG93VG9hc3Q/OiBib29sZWFuIH0pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBpZiAoIXBlZXJJbmZvKSByZXR1cm4gZmFsc2U7IC8vIFBlZXIgY2Fubm90IGJlIHJlYWNoZWRcbiAgICBpZiAoIXRoaXMuZW52aXJvbm1lbnQucGVlck1pblZlcnNpb24pIHJldHVybiB0cnVlOyAvLyBTa2lwIGNvbXBhdGliaWxpdHkgY2hlY2tcblxuICAgIC8vIENoZWNrIHRoZSBtaW4gcG9kIHZlcnNpb24sIGRlZmluZWQgYnkgdGhlIGFwcFxuICAgIGNvbnN0IGlzQ29tcGF0aWJsZSA9IHBlZXJJbmZvLnNvZnR3YXJlVmVyc2lvbiAmJiBWZXJzaW9uVXRpbHMuaXNDb21wYXRpYmxlKHRoaXMuZW52aXJvbm1lbnQucGVlck1pblZlcnNpb24sIHBlZXJJbmZvLnNvZnR3YXJlVmVyc2lvbik7XG5cbiAgICAvLyBEaXNwbGF5IHRvYXN0LCBpZiBub3QgY29tcGF0aWJsZVxuICAgIGlmICghaXNDb21wYXRpYmxlICYmICghb3B0cyB8fCBvcHRzLnNob3dUb2FzdCAhPT0gZmFsc2UpKSB7XG4gICAgICBhd2FpdCB0aGlzLnNob3dUb2FzdCh7XG4gICAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICAgIG1lc3NhZ2U6ICdORVRXT1JLLkVSUk9SLk5PVF9DT01QQVRJQkxFX1BFRVInLFxuICAgICAgICBtZXNzYWdlUGFyYW1zOiB7XG4gICAgICAgICAgdmVyc2lvbjogdGhpcy5lbnZpcm9ubWVudC5wZWVyTWluVmVyc2lvbixcbiAgICAgICAgfSxcbiAgICAgICAgc2hvd0Nsb3NlQnV0dG9uOiB0cnVlLFxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBpc0NvbXBhdGlibGU7XG4gIH1cblxuICBhc3luYyBnZXROb2RlSW5mbyhwZWVyPzogc3RyaW5nIHwgUGVlciwgb3B0cz86IHsgbm9jYWNoZT86IGJvb2xlYW47IHRpbWVvdXQ/OiBudW1iZXIgfSk6IFByb21pc2U8Tm9kZUluZm8+IHtcbiAgICBjb25zdCBwYXRoID0gdGhpcy5jb21wdXRlUGVlclBhdGgocGVlciwgJy9hcGkvbm9kZS9pbmZvJyk7XG4gICAgdGhpcy5fbG9nZ2VyPy5kZWJ1ZygnZ2V0Tm9kZUluZm8nLCBgR2V0dGluZyAnJHtwYXRofScgLi4uYCk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgZGF0YTogTm9kZUluZm8gPSBhd2FpdCB0aGlzLmdldChwYXRoLCBvcHRzKTtcbiAgICAgIHRoaXMuX2xvZ2dlcj8uZGVidWcoJ2dldE5vZGVJbmZvJywgYFJlc3BvbnNlIG9mICcke3BhdGh9JzpcXG4ke0pTT04uc3RyaW5naWZ5KGRhdGEpfWApO1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zb2xlLmRlYnVnKGBbbmV0d29ya10gRXJyb3Igd2hpbGUgZ2V0dGluZyAnJHtwYXRofSc6ICR7KGVyciAmJiBlcnIubWVzc2FnZSkgfHwgZXJyfWAsIGVycik7XG4gICAgICB0aGlzLl9sb2dnZXI/LmVycm9yKCdnZXROb2RlSW5mbycsIGBFcnJvciB3aGlsZSBnZXR0aW5nICcke3BhdGh9JzogJHtlcnI/Lm1lc3NhZ2UgfHwgJyd9YCk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGdldEFwcE1hbmlmZXN0KHBlZXI/OiBzdHJpbmcgfCBQZWVyLCBvcHRzPzogeyBub2NhY2hlPzogYm9vbGVhbiB9KTogUHJvbWlzZTxBcHBNYW5pZmVzdCB8IHVuZGVmaW5lZD4ge1xuICAgIHRyeSB7XG4gICAgICBsZXQgcGF0aCA9IHRoaXMuY29tcHV0ZVBlZXJQYXRoKHBlZXIsICdtYW5pZmVzdC5qc29uJyk7XG4gICAgICBpZiAob3B0cz8ubm9jYWNoZSkge1xuICAgICAgICBwYXRoICs9ICc/dD0nICsgRGF0ZS5ub3coKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLmdldChwYXRoLCBvcHRzKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGlmICh0aGlzLmVudmlyb25tZW50LnByb2R1Y3Rpb24pXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJbbmV0d29ya10gQ2Fubm90IGxvYWQgZmlsZSAnbWFuaWZlc3QuanNvbicuIFBsZWFzZSBtYWtlIHN1cmUgd2Vic2VydmVyIGNvbmZpZyBhbGxvdyBDT1JTIGFjY2Vzc1wiLCBlcnIpO1xuICAgICAgZWxzZSBjb25zb2xlLmVycm9yKFwiW25ldHdvcmtdIENhbm5vdCBsb2FkIGZpbGUgJ21hbmlmZXN0Lmpzb24nLlwiLCBlcnIpO1xuICAgICAgLy8gQ29udGludWVcbiAgICB9XG4gIH1cblxuICBhc3luYyBnZXRBcHBWZXJzaW9uKHBlZXI/OiBzdHJpbmcgfCBQZWVyLCBvcHRzID0geyBub2NhY2hlOiB0cnVlIH0pOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICAgIHRyeSB7XG4gICAgICBsZXQgcGF0aCA9IHRoaXMuY29tcHV0ZVBlZXJQYXRoKHBlZXIsICd2ZXJzaW9uLmFwcHVwJyk7XG4gICAgICBpZiAob3B0cy5ub2NhY2hlKSB7XG4gICAgICAgIHBhdGggKz0gJz90PScgKyBEYXRlLm5vdygpO1xuICAgICAgfVxuICAgICAgY29uc3QgYXBwVmVyc2lvbjogc3RyaW5nID0gYXdhaXQgdGhpcy5nZXRUZXh0KHBhdGgsIG9wdHMpO1xuICAgICAgaWYgKGlzTm90TmlsT3JCbGFuayhhcHBWZXJzaW9uKSkgcmV0dXJuIGFwcFZlcnNpb247XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBpZiAodGhpcy5lbnZpcm9ubWVudC5wcm9kdWN0aW9uKVxuICAgICAgICBjb25zb2xlLmVycm9yKFwiW25ldHdvcmtdIENhbm5vdCBsb2FkIGZpbGUgJ3ZlcnNpb24uYXBwdXAnLiBQbGVhc2UgbWFrZSBzdXJlIHdlYnNlcnZlciBjb25maWcgYWxsb3cgQ09SUyBhY2Nlc3NcIik7XG4gICAgICBlbHNlIGNvbnNvbGUuZXJyb3IoXCJbbmV0d29ya10gQ2Fubm90IGxvYWQgZmlsZSAndmVyc2lvbi5hcHB1cCcuXCIsIGVycik7XG4gICAgICAvLyBDb250aW51ZVxuICAgIH1cblxuICAgIC8vIFRyeSBsb2FkaW5nIG1hbmlmZXN0Lmpzb25cbiAgICBjb25zdCBtYW5pZmVzdCA9IGF3YWl0IHRoaXMuZ2V0QXBwTWFuaWZlc3QocGVlciwgb3B0cyk7XG4gICAgcmV0dXJuIG1hbmlmZXN0Py52ZXJzaW9uO1xuICB9XG5cbiAgY29tcHV0ZVBlZXJQYXRoKHBlZXI6IHN0cmluZyB8IFBlZXIgfCB1bmRlZmluZWQsIHBhdGg6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcGVlciA9IHBlZXIgfHwgdGhpcy5wZWVyO1xuICAgIGlmICghcGVlcikgcmV0dXJuIHVuZGVmaW5lZDtcblxuICAgIGxldCBwZWVyVXJsID0gcGVlciBpbnN0YW5jZW9mIFBlZXIgPyBwZWVyLnVybCA6IChwZWVyIGFzIHN0cmluZyk7XG5cbiAgICAvLyBSZW1vdmUgdHJhaWxpbmcgc2xhc2hcbiAgICBpZiAocGVlclVybC5lbmRzV2l0aCgnLycpKSB7XG4gICAgICBwZWVyVXJsID0gcGVlclVybC5zdWJzdHIoMCwgcGVlclVybC5sZW5ndGggLSAxKTtcbiAgICB9XG5cbiAgICAvLyBBZGQgZmlyc3QgcGF0aFxuICAgIGlmICghcGF0aC5zdGFydHNXaXRoKCcvJykpIHtcbiAgICAgIHBhdGggPSAnLycgKyBwYXRoO1xuICAgIH1cblxuICAgIC8vIENvbmNhdCBwZWVyIFVSTCBhbmQgcGF0aFxuICAgIHJldHVybiBwZWVyVXJsICsgcGF0aDtcbiAgfVxuXG4gIC8qKlxuICAgKiBBbGxvdyB0byBmb3JjZSBvZmZsaW5lIG1vZGVcbiAgICovXG4gIHNldEZvcmNlT2ZmbGluZShcbiAgICB2YWx1ZT86IGJvb2xlYW4sXG4gICAgb3B0cz86IHtcbiAgICAgIHNob3dUb2FzdD86IGJvb2xlYW47IC8vIERpc3BsYXkgYSB0b2FzdCwgd2hlbiBvZmZsaW5lID9cbiAgICB9XG4gICkge1xuICAgIHZhbHVlID0gdG9Cb29sZWFuKHZhbHVlLCB0cnVlKTtcbiAgICBpZiAodGhpcy5fZm9yY2VPZmZsaW5lICE9PSB2YWx1ZSkge1xuICAgICAgY29uc3QgcHJldmlvdXNDb25uZWN0aW9uVHlwZSA9IHRoaXMuY29ubmVjdGlvblR5cGU7XG4gICAgICB0aGlzLl9mb3JjZU9mZmxpbmUgPSB2YWx1ZTtcbiAgICAgIGNvbnN0IGN1cnJlbnRDb25uZWN0aW9uVHlwZSA9IHRoaXMuY29ubmVjdGlvblR5cGU7XG5cbiAgICAgIGlmIChwcmV2aW91c0Nvbm5lY3Rpb25UeXBlICE9PSBjdXJyZW50Q29ubmVjdGlvblR5cGUpIHtcbiAgICAgICAgY29uc29sZS5pbmZvKGBbbmV0d29ya10gQ29ubmVjdGlvbiBjaGFuZ2VkIHRvIHske2N1cnJlbnRDb25uZWN0aW9uVHlwZX19YCk7XG4gICAgICAgIHRoaXMub25OZXR3b3JrU3RhdHVzQ2hhbmdlcy5uZXh0KGN1cnJlbnRDb25uZWN0aW9uVHlwZSk7XG5cbiAgICAgICAgLy8gT2ZmbGluZSBtb2RlOiBhbGVydCB0aGUgdXNlclxuICAgICAgICBpZiAoY3VycmVudENvbm5lY3Rpb25UeXBlID09PSAnbm9uZScgJiYgKCFvcHRzIHx8IG9wdHMuc2hvd1RvYXN0ICE9PSBmYWxzZSkpIHtcbiAgICAgICAgICB0aGlzLnNob3dUb2FzdCh7IG1lc3NhZ2U6ICdORVRXT1JLLklORk8uT0ZGTElORV9IRUxQJywgdHlwZTogJ3dhcm5pbmcnIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgc2hvd1NlbGVjdFBlZXJNb2RhbChvcHRzPzogUGFydGlhbDxJU2VsZWN0UGVlck1vZGFsT3B0aW9ucz4pOiBQcm9taXNlPFBlZXIgfCB1bmRlZmluZWQ+IHtcbiAgICBvcHRzID0gb3B0cyB8fCB7fTtcblxuICAgIGNvbnN0IHBlZXJzID0gYXdhaXQgdGhpcy5nZXREZWZhdWx0UGVlcnMoKTtcbiAgICBjb25zdCBtb2RhbCA9IGF3YWl0IHRoaXMubW9kYWxDdHJsLmNyZWF0ZSh7XG4gICAgICBjb21wb25lbnQ6IFNlbGVjdFBlZXJNb2RhbCxcbiAgICAgIGNvbXBvbmVudFByb3BzOiA8SVNlbGVjdFBlZXJNb2RhbE9wdGlvbnM+e1xuICAgICAgICBkZWZhdWx0UGVlcnM6IHBlZXJzLFxuICAgICAgICAuLi5vcHRzLFxuICAgICAgfSxcbiAgICAgIGtleWJvYXJkQ2xvc2U6IHRydWUsXG4gICAgICBzaG93QmFja2Ryb3A6IHRydWUsXG4gICAgfSk7XG4gICAgYXdhaXQgbW9kYWwucHJlc2VudCgpO1xuXG4gICAgY29uc3QgeyBkYXRhIH0gPSBhd2FpdCBtb2RhbC5vbldpbGxEaXNtaXNzKCk7XG5cbiAgICByZXR1cm4gKGRhdGEgJiYgKGRhdGEgYXMgUGVlcikpIHx8IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGFzeW5jIGNsZWFyQ2FjaGUob3B0cz86IHsgZW1pdEV2ZW50PzogYm9vbGVhbiB9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3Qgbm93ID0gdGhpcy5fZGVidWcgJiYgRGF0ZS5ub3coKTtcblxuICAgIGNvbnNvbGUuaW5mbygnW25ldHdvcmtdIENsZWFyaW5nIGFsbCBjYWNoZXMuLi4nKTtcbiAgICByZXR1cm4gdGhpcy5jYWNoZVxuICAgICAgLmNsZWFyQWxsKClcbiAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgLy8gRW1pdCBldmVudFxuICAgICAgICBpZiAoKCFvcHRzIHx8IG9wdHMuZW1pdEV2ZW50ICE9PSBmYWxzZSkgJiYgdGhpcy5vblJlc2V0TmV0d29ya0NhY2hlLm9ic2VydmVkKSB7XG4gICAgICAgICAgdGhpcy5vblJlc2V0TmV0d29ya0NhY2hlLmVtaXQoKTtcblxuICAgICAgICAgIC8vIFdhaXQgb2JzZXJ2ZXJzIGNsZWFuIHRoZWlyIGNhY2hlcywgaWYgbmVlZFxuICAgICAgICAgIHJldHVybiBzbGVlcCg1MDApO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcoYFtuZXR3b3JrXSBBbGwgY2FjaGUgY2xlYXJlZCwgaW4gJHtEYXRlLm5vdygpIC0gbm93fW1zYCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIC8qIC0tIHByb3RlY3RlZCBmdW5jdGlvbnMgLS0gKi9cblxuICBwcm90ZWN0ZWQgYXN5bmMgbmdPblN0YXJ0KHBlZXI/OiBQZWVyKTogUHJvbWlzZTxQZWVyPiB7XG4gICAgY29uc29sZS5pbmZvKCdbbmV0d29ya10gU3RhcnRpbmcgbmV0d29yay4uLicpO1xuXG4gICAgLy8gUmVzdG9yaW5nIGxvY2FsIHNldHRpbmdzXG4gICAgcGVlciA9IHBlZXIgfHwgKGF3YWl0IHRoaXMucmVzdG9yZUxvY2FsbHkoKSk7XG5cbiAgICBpZiAoIXBlZXIpIHtcbiAgICAgIC8vIE1ha2Ugc3VyZSB0byBoaWRlIHRoZSBzcGxhc2hzY3JlZW4sIGJlZm9yZSBvcGVuIHRoZSBtb2RhbFxuICAgICAgYXdhaXQgU3BsYXNoU2NyZWVuLmhpZGUoKTtcblxuICAgICAgLy8gTm8gcGVlciBpbiBzZXR0aW5nczogYXNrIHVzZXIgdG8gY2hvb3NlXG4gICAgICB3aGlsZSAoIXBlZXIpIHtcbiAgICAgICAgY29uc29sZS5kZWJ1ZygnW25ldHdvcmtdIE5vIHBlZXIgZGVmaW5lZC4gQXNraW5nIHVzZXIgdG8gY2hvb3NlIGEgcGVlci4nKTtcbiAgICAgICAgcGVlciA9IGF3YWl0IHRoaXMuc2hvd1NlbGVjdFBlZXJNb2RhbCh7IGFsbG93U2VsZWN0RG93blBlZXI6IGZhbHNlLCB0aXRsZTogJ05FVFdPUksuUEVFUi5TRUxFQ1RfTU9EQUwuVElUTEVfU1RBUlQnLCBjYW5DYW5jZWw6IGZhbHNlIH0pO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodGhpcy5vbmxpbmUpIHtcbiAgICAgIC8vIENoZWNrIGlmIGFsaXZlLiBJZiBub3QsIGZvcmNlIG9mZmxpbmUgbW9kZVxuICAgICAgY29uc3QgYWxpdmUgPSBhd2FpdCB0aGlzLmNoZWNrUGVlckFsaXZlKHBlZXIpO1xuICAgICAgaWYgKCFhbGl2ZSkge1xuICAgICAgICAvLyBQZWVyIG5vdCBhbGl2ZSwgYnV0IHNob3VsZCBiZSBhdCB0aGUgc2FtZSBVUkwsIHJldHJ5aW5nIGVhY2ggMXNcbiAgICAgICAgaWYgKHRoaXMuZW52aXJvbm1lbnQuc2FtZVVybFBlZXIpIHtcbiAgICAgICAgICBjb25zdCByZXRyeU1zID0gdGhpcy5fY29ubmVjdGlvblRpbWVvdXQgPiAwID8gdGhpcy5fY29ubmVjdGlvblRpbWVvdXQgOiAxMDAwO1xuICAgICAgICAgIGF3YWl0IGZpcnN0VmFsdWVGcm9tKFxuICAgICAgICAgICAgdGltZXIocmV0cnlNcywgcmV0cnlNcykucGlwZShcbiAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuc3RvcFN1YmplY3QpLFxuICAgICAgICAgICAgICB0YXAoKCkgPT4gY29uc29sZS53YXJuKGBbbmV0d29yay1zZXJ2aWNlXSBXYWl0aW5nIHBlZXIgYmUgYmUgYWxpdmUsIGF0IHske3BlZXIudXJsfX0gLi4uYCkpLFxuICAgICAgICAgICAgICBtZXJnZU1hcCgoKSA9PiB0aGlzLmNoZWNrUGVlckFsaXZlKHBlZXIpKSxcbiAgICAgICAgICAgICAgZmlsdGVyKChhbGl2ZSkgPT4gISFhbGl2ZSksXG4gICAgICAgICAgICAgIGZpcnN0KClcbiAgICAgICAgICAgIClcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIENvbnRpbnVlLCBpbiBvZmZsaW5lIG1vZGVcbiAgICAgICAgICB0aGlzLnNldEZvcmNlT2ZmbGluZSh0cnVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnNvbGUuaW5mbyhgW25ldHdvcmtdIFN0YXJ0aW5nIHNlcnZpY2UgW09LXSB7cGVlcjogJyR7cGVlci51cmx9Jywgb25saW5lOiAke3RoaXMub25saW5lfX1gKTtcblxuICAgIHJldHVybiBwZWVyO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIG5nT25BZnRlclN0YXJ0KHBlZXI6IFBlZXIpIHtcbiAgICAvLyBXYWl0IHNldHRpbmdzIHN0YXJ0cywgdGhlbiBzYXZlIHBlZXIgaW4gc2V0dGluZ3NcbiAgICBhd2FpdCB0aGlzLnNldHRpbmdzLmFwcGx5KHsgcGVlclVybDogcGVlci51cmwgfSk7XG5cbiAgICB0aGlzLm9uRGV2aWNlQ29ubmVjdGlvbkNoYW5nZWQodGhpcy5fbmV0d29yaz8udHlwZSB8fCAndW5rbm93bicpO1xuXG4gICAgLy8gU3RhcnQgdGhlIHJlZnJlc2ggdGltZXJcbiAgICB0aGlzLnN0YXJ0UmVmcmVzaFRpbWVyKCk7XG5cbiAgICAvLyBMaXN0ZW4gZm9yIGRldmljZSBuZXR3b3JrIGNoYW5nZXNcbiAgICBpZiAodGhpcy5fbmV0d29yaykge1xuICAgICAgdGhpcy5yZWdpc3RlclN1YnNjcmlwdGlvbih0aGlzLl9uZXR3b3JrLm9uRGlzY29ubmVjdCgpLnN1YnNjcmliZSgoKSA9PiB0aGlzLm9uRGV2aWNlQ29ubmVjdGlvbkNoYW5nZWQoJ25vbmUnKSkpO1xuICAgICAgdGhpcy5yZWdpc3RlclN1YnNjcmlwdGlvbih0aGlzLl9uZXR3b3JrLm9uQ29ubmVjdCgpLnN1YnNjcmliZSgoKSA9PiB0aGlzLm9uRGV2aWNlQ29ubmVjdGlvbkNoYW5nZWQodGhpcy5fbmV0d29yay50eXBlKSkpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBuZ09uU3RvcCgpIHtcbiAgICAvLyBTdG9wIHRpbWVyLCBpZiBjYW5ub3QgcmVmcmVzaCBhbnltb3JlXG4gICAgaWYgKHRoaXMuX3RpbWVyUmVmcmVzaENvbmRpdGlvbigpID09PSBmYWxzZSkge1xuICAgICAgdGhpcy5zdG9wUmVmcmVzaFRpbWVyKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRyeSB0byByZXN0b3JlIHBlZXIgZnJvbSB0aGUgbG9jYWwgc3RvcmFnZVxuICAgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIHJlc3RvcmVMb2NhbGx5KCk6IFByb21pc2U8UGVlciB8IHVuZGVmaW5lZD4ge1xuICAgIC8vIEZvcmNlIHVzZSBwcmVkZWZpbmVkIHBlZXIgaWYgcHJvdmlkZWRcbiAgICBpZiAodGhpcy5lbnZpcm9ubWVudC5wZWVyKSB7XG4gICAgICByZXR1cm4gUGVlci5mcm9tT2JqZWN0KHRoaXMuZW52aXJvbm1lbnQucGVlcik7XG4gICAgfVxuXG4gICAgLy8gUmVzdG9yZSBmcm9tIHN0b3JhZ2VcbiAgICBsZXQgc2V0dGluZ3MgPSBhd2FpdCB0aGlzLnN0b3JhZ2UuZ2V0KFNFVFRJTkdTX1NUT1JBR0VfS0VZKTtcbiAgICBzZXR0aW5ncyA9IHR5cGVvZiBzZXR0aW5ncyA9PT0gJ3N0cmluZycgPyBKU09OLnBhcnNlKHNldHRpbmdzKSA6IHNldHRpbmdzO1xuICAgIGlmIChzZXR0aW5ncyAmJiBzZXR0aW5ncy5wZWVyVXJsKSB7XG4gICAgICBjb25zb2xlLmRlYnVnKGBbbmV0d29ya10gVXNlIHBlZXIgeyR7c2V0dGluZ3MucGVlclVybH19IChmb3VuZCBpbiB0aGUgbG9jYWwgc3RvcmFnZSlgKTtcbiAgICAgIHJldHVybiBQZWVyLnBhcnNlVXJsKHNldHRpbmdzLnBlZXJVcmwpO1xuICAgIH1cblxuICAgIC8vIEVsc2UsIHVzZSBkZWZhdWx0IHBlZXIgaW4gZW52LCBpZiBleGlzdHNcbiAgICBpZiAodGhpcy5lbnZpcm9ubWVudC5kZWZhdWx0UGVlcikge1xuICAgICAgcmV0dXJuIFBlZXIuZnJvbU9iamVjdCh0aGlzLmVudmlyb25tZW50LmRlZmF1bHRQZWVyKTtcbiAgICB9XG5cbiAgICAvLyBFbHNlLCBpZiBBcHAgaXMgaG9zdGVkLCB0cnkgdGhlIHdlYnNpdGUgYXMgYSBwZWVyXG4gICAgY29uc3QgbG9jYXRpb24gPSB0aGlzLl9kb2N1bWVudD8ubG9jYXRpb247XG4gICAgaWYgKGxvY2F0aW9uPy5wcm90b2NvbD8uc3RhcnRzV2l0aCgnaHR0cCcpKSB7XG4gICAgICBjb25zdCBob3N0bmFtZSA9IHRoaXMuX2RvY3VtZW50LmxvY2F0aW9uLmhvc3Q7XG4gICAgICBjb25zdCBkZXRlY3RlZFBlZXIgPSBQZWVyLnBhcnNlVXJsKGAke3RoaXMuX2RvY3VtZW50LmxvY2F0aW9uLnByb3RvY29sfSR7aG9zdG5hbWV9JHt0aGlzLmVudmlyb25tZW50LmJhc2VVcmx9YCk7XG5cbiAgICAgIGlmICh0aGlzLmVudmlyb25tZW50LnNhbWVVcmxQZWVyIHx8IChhd2FpdCB0aGlzLmNoZWNrUGVlckFsaXZlKGRldGVjdGVkUGVlcikpKSB7XG4gICAgICAgIHJldHVybiBkZXRlY3RlZFBlZXI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdG9wIHRvIG5ldHdvcmsgc3RhdGVcbiAgICpcbiAgICogQHByb3RlY3RlZFxuICAgKi9cbiAgcHJvdGVjdGVkIHN0b3BSZWZyZXNoVGltZXIoKSB7XG4gICAgaWYgKHRoaXMuX3RpbWVyU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLl90aW1lclN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgdGhpcy5fdGltZXJTdWJzY3JpcHRpb24gPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlZnJlc2ggdGhlIG5ldHdvcmsgc3RhdGVcbiAgICpcbiAgICogQHByb3RlY3RlZFxuICAgKi9cbiAgcHJvdGVjdGVkIHN0YXJ0UmVmcmVzaFRpbWVyKCkge1xuICAgIGlmICh0aGlzLl90aW1lclN1YnNjcmlwdGlvbikgcmV0dXJuOyAvLyBBbHJlYWR5IHJ1bm5pbmc6IHNraXBcblxuICAgIGNvbnNvbGUuaW5mbyhgW25ldHdvcmtdIFN0YXJ0aW5nIHJlZnJlc2ggdGltZXIsIGV2ZXJ5ICR7dGhpcy5fdGltZXJSZWZyZXNoUGVyaW9kfW1zLi4uYCk7XG5cbiAgICBsZXQgbGFzdEluZm86IE5vZGVJbmZvO1xuICAgIHRoaXMuX3RpbWVyU3Vic2NyaXB0aW9uID0gdGltZXIodGhpcy5fdGltZXJSZWZyZXNoUGVyaW9kLCB0aGlzLl90aW1lclJlZnJlc2hQZXJpb2QpXG4gICAgICAucGlwZShcbiAgICAgICAgLy8gU2tpcCBzb21lIHRpbWVyIGV2ZW50IChzZWUgY29uc3RydWN0b3IpXG4gICAgICAgIGZpbHRlcih0aGlzLl90aW1lclJlZnJlc2hDb25kaXRpb24pLFxuXG4gICAgICAgIC8vIENoZWNraW4gaWYgcGVlciBhbGl2ZVxuICAgICAgICB0YXAoKCkgPT4gY29uc29sZS5kZWJ1ZygnW25ldHdvcmtdIENoZWNraW5nIGNvbm5lY3Rpb24gdG8gcG9kLi4uJykpLFxuICAgICAgICBtZXJnZU1hcCgoKSA9PiB0aGlzLmNoZWNrUGVlckFsaXZlKHRoaXMucGVlcikpLFxuXG4gICAgICAgIC8vIEZpbHRlciB0byBrZWVwIG9ubHkgY2hhbmdlc1xuICAgICAgICBmaWx0ZXIoKGluZm8pID0+ICFlcXVhbHMoaW5mbywgbGFzdEluZm8pKSxcbiAgICAgICAgdGFwKChpbmZvKSA9PiAobGFzdEluZm8gPSBpbmZvKSksXG5cbiAgICAgICAgLy8gQ2hlY2sgY29tcGF0aWJpbGl0eVxuICAgICAgICBtZXJnZU1hcCgoaW5mbykgPT4gdGhpcy5jaGVja1BlZXJDb21wYXRpYmxlKGluZm8sIHsgc2hvd1RvYXN0OiB0cnVlIH0pKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoYWxpdmUpID0+IHtcbiAgICAgICAgaWYgKGFsaXZlICYmIHRoaXMub2ZmbGluZSkge1xuICAgICAgICAgIHRoaXMuc2V0Rm9yY2VPZmZsaW5lKGZhbHNlKTtcblxuICAgICAgICAgIC8vIFJlc3RhcnQgdGhlIHNlcnZpY2UgKHRvIGZvcmNlIHJlIGF1dGgpXG4gICAgICAgICAgdGhpcy5yZXN0YXJ0KCk7XG4gICAgICAgIH0gZWxzZSBpZiAoIWFsaXZlICYmIHRoaXMub25saW5lKSB7XG4gICAgICAgICAgdGhpcy5zZXRGb3JjZU9mZmxpbmUodHJ1ZSk7XG5cbiAgICAgICAgICAvLyBTdG9wIHRoZSBzZXJ2aWNlXG4gICAgICAgICAgdGhpcy5zdG9wKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgdGhpcy5fdGltZXJTdWJzY3JpcHRpb24uYWRkKCgpID0+IGNvbnNvbGUuZGVidWcoJ1tuZXR3b3JrXSBSZWZyZXNoIHRpbWVyIHN0b3BwZWQnKSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgZ2V0VGV4dChcbiAgICBwYXRoOiBzdHJpbmcsXG4gICAgb3B0cz86IHtcbiAgICAgIGhlYWRlcnM/OlxuICAgICAgICB8IEh0dHBIZWFkZXJzXG4gICAgICAgIHwge1xuICAgICAgICAgICAgW2hlYWRlcjogc3RyaW5nXTogc3RyaW5nIHwgc3RyaW5nW107XG4gICAgICAgICAgfTtcbiAgICAgIHJlc3BvbnNlVHlwZT86ICd0ZXh0JztcbiAgICAgIG5vY2FjaGU/OiBib29sZWFuO1xuICAgIH1cbiAgKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gSHR0cFV0aWxzLmdldFRleHQodGhpcy5odHRwLCB0aGlzLmdldFVyaShwYXRoKSwgb3B0cyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0PFQ+KFxuICAgIHBhdGg6IHN0cmluZyxcbiAgICBvcHRzPzoge1xuICAgICAgaGVhZGVycz86XG4gICAgICAgIHwgSHR0cEhlYWRlcnNcbiAgICAgICAgfCB7XG4gICAgICAgICAgICBbaGVhZGVyOiBzdHJpbmddOiBzdHJpbmcgfCBzdHJpbmdbXTtcbiAgICAgICAgICB9O1xuICAgICAgcmVzcG9uc2VUeXBlPzogJ2pzb24nO1xuICAgICAgbm9jYWNoZT86IGJvb2xlYW47XG4gICAgICB0aW1lb3V0PzogbnVtYmVyO1xuICAgIH1cbiAgKTogUHJvbWlzZTxUPiB7XG4gICAgcmV0dXJuIEh0dHBVdGlscy5nZXRKc29uPFQ+KHRoaXMuaHR0cCwgdGhpcy5nZXRVcmkocGF0aCksIG9wdHMpO1xuICB9XG5cbiAgLyogLS0gUHJvdGVjdGVkIG1ldGhvZHMgLS0gKi9cblxuICBwcm90ZWN0ZWQgZ2V0VXJpKHBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgbGV0IHVyaSA9IHBhdGg7XG5cbiAgICAvLyBJZiBwYXRoIGlzIG5vdCBhbiBVUkk6IHByZXBlbmQgd2l0aCBwZWVyIFVSTFxuICAgIGlmICghdXJpLnN0YXJ0c1dpdGgoJ2h0dHA6Ly8nKSAmJiAhdXJpLnN0YXJ0c1dpdGgoJ2h0dHBzOi8vJykpIHtcbiAgICAgIGxldCBwZWVyVXJsID0gdGhpcy5wZWVyICYmIHRoaXMucGVlci51cmw7XG5cbiAgICAgIC8vIFJlbW92ZSB0cmFpbGluZyBzbGFzaFxuICAgICAgaWYgKHBlZXJVcmwuZW5kc1dpdGgoJy8nKSkge1xuICAgICAgICBwZWVyVXJsID0gcGVlclVybC5zdWJzdHIoMCwgcGVlclVybC5sZW5ndGggLSAxKTtcbiAgICAgIH1cblxuICAgICAgLy8gQWRkIGZpcnN0IHBhdGhcbiAgICAgIGlmICghcGF0aC5zdGFydHNXaXRoKCcvJykpIHtcbiAgICAgICAgcGF0aCA9ICcvJyArIHBhdGg7XG4gICAgICB9XG5cbiAgICAgIC8vIENyZWF0ZSB0aGUgVVJJOiBjb25jYXQgcGVlciBVUkwgYW5kIHBhdGhcbiAgICAgIHVyaSA9IHBlZXJVcmwgKyBwYXRoO1xuICAgIH1cbiAgICByZXR1cm4gdXJpO1xuICB9XG4gIHByb3RlY3RlZCBvbkRldmljZUNvbm5lY3Rpb25DaGFuZ2VkKGNvbm5lY3Rpb25UeXBlPzogc3RyaW5nKSB7XG4gICAgY29ubmVjdGlvblR5cGUgPSBnZXRDb25uZWN0aW9uVHlwZShjb25uZWN0aW9uVHlwZSk7XG4gICAgaWYgKGNvbm5lY3Rpb25UeXBlICE9PSB0aGlzLl9kZXZpY2VDb25uZWN0aW9uVHlwZSkge1xuICAgICAgdGhpcy5fZGV2aWNlQ29ubmVjdGlvblR5cGUgPSBjb25uZWN0aW9uVHlwZSBhcyBDb25uZWN0aW9uVHlwZTtcblxuICAgICAgLy8gSWYgTk9UICBhbHJlYWR5IGZvcmNlZCBhcyBvZmZsaW5lLCBlbWl0IGV2ZW50XG4gICAgICBpZiAoIXRoaXMuX2ZvcmNlT2ZmbGluZSkge1xuICAgICAgICBjb25zb2xlLmluZm8oYFtuZXR3b3JrXSBDb25uZWN0aW9uIGNoYW5nZWQgdG8geyR7dGhpcy5fZGV2aWNlQ29ubmVjdGlvblR5cGV9fWApO1xuICAgICAgICB0aGlzLm9uTmV0d29ya1N0YXR1c0NoYW5nZXMubmV4dCh0aGlzLl9kZXZpY2VDb25uZWN0aW9uVHlwZSk7XG5cbiAgICAgICAgLy8gQ2hhbmdlIHRvIG9mZmxpbmVcbiAgICAgICAgaWYgKHRoaXMuX2RldmljZUNvbm5lY3Rpb25UeXBlID09PSAnbm9uZScpIHtcbiAgICAgICAgICBpZiAodGhpcy5fbW9iaWxlKSB7XG4gICAgICAgICAgICAvLyBGb3JjZSBvZmZsaW5lIG1vZGVcbiAgICAgICAgICAgIHRoaXMuX2ZvcmNlT2ZmbGluZSA9IHRydWU7XG5cbiAgICAgICAgICAgIC8vIEFsZXJ0IHRoZSB1c2VyXG4gICAgICAgICAgICB0aGlzLnNob3dUb2FzdCh7IG1lc3NhZ2U6ICdORVRXT1JLLklORk8uT0ZGTElORV9IRUxQJywgdHlwZTogJ3dhcm5pbmcnIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBBbGVydCB0aGUgdXNlclxuICAgICAgICAgICAgdGhpcy5zaG93VG9hc3QoeyBtZXNzYWdlOiAnTkVUV09SSy5JTkZPLk9GRkxJTkUnLCB0eXBlOiAnd2FybmluZycgfSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gU3RvcCB0aGUgbmV0d29yayBzZXJ2aWNlXG4gICAgICAgICAgdGhpcy5zdG9wKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IGRlZmF1bHQgcGVlcnMsIGZyb20gZW52aXJvbm1lbnRcbiAgICovXG4gIHByb3RlY3RlZCBhc3luYyBnZXREZWZhdWx0UGVlcnMoKTogUHJvbWlzZTxQZWVyW10+IHtcbiAgICBjb25zdCBwZWVycyA9ICh0aGlzLmVudmlyb25tZW50LmRlZmF1bHRQZWVycyB8fCBbXSkubWFwKFBlZXIuZnJvbU9iamVjdCk7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShwZWVycyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgc2hvd1RvYXN0PFQgPSBhbnk+KG9wdHM6IFNob3dUb2FzdE9wdGlvbnMpOiBQcm9taXNlPE92ZXJsYXlFdmVudERldGFpbDxUPj4ge1xuICAgIHJldHVybiBUb2FzdHMuc2hvdyh0aGlzLnRvYXN0Q29udHJvbGxlciwgdGhpcy50cmFuc2xhdGUsIG9wdHMpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFkZExpc3RlbmVyPFQgPSBhbnk+KG5hbWU6IE5ldHdvcmtFdmVudFR5cGUsIGNhbGxiYWNrOiAoZGF0YT86IFQpID0+IFByb21pc2U8dm9pZD4pOiBTdWJzY3JpcHRpb24ge1xuICAgIHRoaXMuX2xpc3RlbmVyc1tuYW1lXSA9IHRoaXMuX2xpc3RlbmVyc1tuYW1lXSB8fCBbXTtcbiAgICB0aGlzLl9saXN0ZW5lcnNbbmFtZV0ucHVzaChjYWxsYmFjayk7XG5cbiAgICAvLyBXaGVuIHVuc3Vic2NyaWJlLCByZW1vdmUgZnJvbSB0aGUgbGlzdGVuZXJcbiAgICByZXR1cm4gbmV3IFN1YnNjcmlwdGlvbigoKSA9PiB7XG4gICAgICBjb25zdCBpbmRleCA9IHRoaXMuX2xpc3RlbmVyc1tuYW1lXS5pbmRleE9mKGNhbGxiYWNrKTtcbiAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgdGhpcy5fbGlzdGVuZXJzW25hbWVdLnNwbGljZShpbmRleCwgMSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgZW1pdDxUID0gYW55PihuYW1lOiBOZXR3b3JrRXZlbnRUeXBlLCBkYXRhPzogVCkge1xuICAgIGNvbnN0IGhvb2tzID0gdGhpcy5fbGlzdGVuZXJzW25hbWVdO1xuICAgIGlmIChpc05vdEVtcHR5QXJyYXkoaG9va3MpKSB7XG4gICAgICBjb25zb2xlLmluZm8oYFtuZXR3b3JrLXNlcnZpY2VdIFRyaWdnZXIgJHtuYW1lfSBob29rOiBFeGVjdXRpbmcgJHtob29rcy5sZW5ndGh9IGNhbGxiYWNrcy4uLmApO1xuXG4gICAgICByZXR1cm4gUHJvbWlzZS5hbGwoXG4gICAgICAgIGhvb2tzLm1hcCgoY2FsbGJhY2spID0+IHtcbiAgICAgICAgICBjb25zdCBwcm9taXNlID0gY2FsbGJhY2soZGF0YSk7XG4gICAgICAgICAgaWYgKCFwcm9taXNlKSByZXR1cm47XG4gICAgICAgICAgcmV0dXJuIHByb21pc2UuY2F0Y2goKGVycikgPT4gY29uc29sZS5lcnJvcignRXJyb3Igd2hpbGUgZXhlY3V0aW5nIGhvb2sgJyArIG5hbWUsIGVycikpO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|