barsa-novin-ray-core 2.2.71 → 2.2.72
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/abstract-classes/models.mjs +1 -1
- package/esm2022/lib/abstract-classes/report-base.mjs +2 -1
- package/esm2022/lib/abstract-classes/report-view-base.component.mjs +12 -4
- package/esm2022/lib/abstract-classes/tile-props.mjs +4 -2
- package/esm2022/lib/barsa-novin-ray-core.module.mjs +15 -9
- package/esm2022/lib/constants.mjs +3 -3
- package/esm2022/lib/directives/index.mjs +2 -1
- package/esm2022/lib/directives/splide-slider.directive.mjs +103 -0
- package/esm2022/lib/form/form.component.mjs +8 -7
- package/esm2022/lib/pipes/card-media-size.pipe.mjs +21 -0
- package/esm2022/lib/pipes/index.mjs +2 -1
- package/esm2022/lib/services/ulvmain.service.mjs +8 -1
- package/fesm2022/barsa-novin-ray-core.mjs +160 -18
- package/fesm2022/barsa-novin-ray-core.mjs.map +1 -1
- package/lib/abstract-classes/models.d.ts +8 -0
- package/lib/abstract-classes/report-base.d.ts +2 -1
- package/lib/abstract-classes/report-view-base.component.d.ts +2 -0
- package/lib/abstract-classes/tile-props.d.ts +2 -1
- package/lib/barsa-novin-ray-core.module.d.ts +43 -41
- package/lib/directives/index.d.ts +1 -0
- package/lib/directives/splide-slider.directive.d.ts +38 -0
- package/lib/form/form.component.d.ts +2 -2
- package/lib/pipes/card-media-size.pipe.d.ts +8 -0
- package/lib/pipes/index.d.ts +1 -0
- package/lib/services/ulvmain.service.d.ts +4 -1
- package/package.json +1 -1
|
@@ -52,6 +52,7 @@ export class UlvMainService {
|
|
|
52
52
|
this._selectedSearchPanelSettingsIdSource = new BehaviorSubject('');
|
|
53
53
|
this._defaultSearchPanelSettingsSource = new Subject();
|
|
54
54
|
this._allSearchPanelSettingsSource = new BehaviorSubject([]);
|
|
55
|
+
this._cssBackgroundSource = new BehaviorSubject(null);
|
|
55
56
|
this._hidePagingSource = new BehaviorSubject(false);
|
|
56
57
|
this._openSearchPanelHiddenSettingsSource = new Subject();
|
|
57
58
|
this._openSearchFilesManageSource = new Subject();
|
|
@@ -161,6 +162,12 @@ export class UlvMainService {
|
|
|
161
162
|
get hideSearchpanel() {
|
|
162
163
|
return this._hideSearchapanelSource.getValue();
|
|
163
164
|
}
|
|
165
|
+
get cssBackground$() {
|
|
166
|
+
return this._cssBackgroundSource.asObservable();
|
|
167
|
+
}
|
|
168
|
+
setBackground(cssBackground) {
|
|
169
|
+
return this._cssBackgroundSource.next(cssBackground);
|
|
170
|
+
}
|
|
164
171
|
hidePaging(hide) {
|
|
165
172
|
this._hidePagingSource.next(hide);
|
|
166
173
|
}
|
|
@@ -814,4 +821,4 @@ export class UlvMainService {
|
|
|
814
821
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UlvMainService, decorators: [{
|
|
815
822
|
type: Injectable
|
|
816
823
|
}], ctorParameters: () => [{ type: i1.BbbTranslatePipe }, { type: i2.ApiService }] });
|
|
817
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWx2bWFpbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2Etbm92aW4tcmF5LWNvcmUvc3JjL2xpYi9zZXJ2aWNlcy91bHZtYWluLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBYyxFQUFFLEVBQUUsT0FBTyxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUM3RixPQUFPLEVBQUUsS0FBSyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEgsT0FBTyxFQUNILFFBQVEsRUFFUixtQkFBbUIsRUFRdEIsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQ0gsd0JBQXdCLEVBQ3hCLGlCQUFpQixFQUNqQixjQUFjLEVBQ2Qsc0JBQXNCLEVBQ3RCLGtCQUFrQixFQUNyQixNQUFNLGNBQWMsQ0FBQzs7OztBQUl0QixNQUFNLE9BQU8sY0FBYztJQXVGdkIsWUFBb0IsUUFBMEIsRUFBVSxXQUF1QjtRQUEzRCxhQUFRLEdBQVIsUUFBUSxDQUFrQjtRQUFVLGdCQUFXLEdBQVgsV0FBVyxDQUFZO1FBdEYvRSxxQkFBZ0IsR0FBRyxJQUFJLGVBQWUsQ0FBd0IsRUFBRSxDQUFDLENBQUM7UUErQmxFLHdCQUFtQixHQUFHLElBQUksZUFBZSxDQUFpQyxFQUFFLENBQUMsQ0FBQztRQUM5RSx1QkFBa0IsR0FBRyxJQUFJLGVBQWUsQ0FBZ0QsRUFBRSxDQUFDLENBQUM7UUFLcEYsMEJBQXFCLEdBQUcsSUFBSSxPQUFPLEVBQVUsQ0FBQztRQUM5QywyQkFBc0IsR0FBRyxJQUFJLGVBQWUsQ0FBVSxLQUFLLENBQUMsQ0FBQztRQUM3RCxz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QkFDVCxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7b0JBQ2IsR0FBRyxDQUFDO29CQUNKLFFBQVEsRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFLFNBQVMsSUFBSSxDQUFDLENBQUMsTUFBTSxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLO2lCQUN0RSxDQUFDLENBQUM7YUFDTixDQUNWLEVBQ0QsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FDTixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUNsRyxFQUNELEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQ04sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FDdkcsQ0FDSixDQUFDO1FBQ0YsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFlBQVksRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFD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RSxDQUFDO2dCQUNMLE9BQU87WUFDWCxDQUFDO1lBQ0QsTUFBTSxTQUFTLEdBQW1DLEVBQUUsQ0FBQztZQUNyRCxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO2dCQUMzQixTQUFTLENBQUMsR0FBRyxDQUFDLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDakQsQ0FBQyxDQUFDLENBQUM7WUFDSCxpQkFBaUIsR0FBRyxFQUFFLEdBQUcsaUJBQWlCLEVBQUUsR0FBRyxTQUFTLEVBQUUsQ0FBQztZQUMzRCxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDckQsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDOytHQXI2QlEsY0FBYzttSEFBZCxjQUFjOzs0RkFBZCxjQUFjO2tCQUQxQixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIE9ic2VydmFibGUsIG9mLCBTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgZGVsYXksIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaWx0ZXIsIG1hcCwgc2hhcmVSZXBsYXksIHN3aXRjaE1hcCwgdGFrZVVudGlsLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7XHJcbiAgICBCYXJzYUFwaSxcclxuICAgIE1lbnVJdGVtLFxyXG4gICAgTWV0YW9iamVjdERhdGFNb2RlbCxcclxuICAgIFBhZ2luZ1NldHRpbmcsXHJcbiAgICBTZWFyY2hQYW5lbFNldHRpbmdzLFxyXG4gICAgR2VuZXJhbENvbnRyb2xJbmZvTW9kZWwsXHJcbiAgICBDb2x1bW5JbmZvVHlwZSxcclxuICAgIEZvcm1TZXR0aW5nLFxyXG4gICAgU2hhcmVCdXR0b25zQ2hvaWNlRGVmLFxyXG4gICAgQ2FydGFibGVUZW1wbGF0ZUtleVxyXG59IGZyb20gJy4uL2Fic3RyYWN0LWNsYXNzZXMnO1xyXG5pbXBvcnQge1xyXG4gICAgZXhlY3V0ZVVsdkNvbW1hbmRIYW5kbGVyLFxyXG4gICAgZ2VucmF0ZUlubGluZU1vSWQsXHJcbiAgICBnZXRDb250cm9sTGlzdCxcclxuICAgIEdldERlZmF1bHRNb09iamVjdEluZm8sXHJcbiAgICBnZXROZXdNb0dyaWRFZGl0b3JcclxufSBmcm9tICcuLi9jb25zdGFudHMnO1xyXG5pbXBvcnQgeyBCYmJUcmFuc2xhdGVQaXBlIH0gZnJvbSAnLi4vcGlwZXMnO1xyXG5pbXBvcnQgeyBBcGlTZXJ2aWNlIH0gZnJvbSAnLi9hcGkuc2VydmljZSc7XHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIFVsdk1haW5TZXJ2aWNlIHtcclxuICAgIG1vRGF0YUxpc3RTb3VyY2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PE1ldGFvYmplY3REYXRhTW9kZWxbXT4oW10pO1xyXG4gICAgY29udGV4dCQ6IFN1YnNjcmlwdGlvbjtcclxuICAgIHZpZXdlciQ6IE9ic2VydmFibGU8YW55PjtcclxuICAgIGNvbmRpdGlvbmFsRm9ybWF0cyQ6IE9ic2VydmFibGU8YW55PjtcclxuICAgIGhpZGVUb29sYmFyJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcclxuICAgIG1hc2skOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xyXG4gICAgdml3ZXJNYXNrJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcclxuICAgIHZpc2libGUkOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xyXG4gICAgZW5hYmxlJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcclxuICAgIHJlYWRvbmx5JDogT2JzZXJ2YWJsZTxib29sZWFuPjtcclxuICAgIG1lbnVJdGVtcyQ6IE9ic2VydmFibGU8TWVudUl0ZW1bXT47XHJcbiAgICB0aXRsZSQ6IE9ic2VydmFibGU8eyB0ZXh0OiBzdHJpbmc7IGltYWdlOiBzdHJpbmcgfT47XHJcblxyXG4gICAgc2VhcmNoUGFuZWxVaSQ6IE9ic2VydmFibGU8YW55PjtcclxuICAgIHBhZ2luZ1NldHRpbmckOiBPYnNlcnZhYmxlPFBhZ2luZ1NldHRpbmcgfCBudWxsPjtcclxuICAgIHRvb2xiYXJCdXR0b25zJDogT2JzZXJ2YWJsZTxhbnlbXT47XHJcbiAgICBkZXN0cm95JDogT2JzZXJ2YWJsZTx2b2lkPjtcclxuICAgIG1vRGF0YUxpc3QkOiBPYnNlcnZhYmxlPE1ldGFvYmplY3REYXRhTW9kZWxbXT47XHJcbiAgICByZXBvcnRJZCQ6IE9ic2VydmFibGU8c3RyaW5nPjtcclxuICAgIGFsbG93SW5saW5lRWRpdCQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XHJcbiAgICBpbmxpbmVFZGl0TW9kZSQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XHJcbiAgICBvbmx5SW5saW5lRWRpdCQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XHJcbiAgICBjb250ZXh0OiBhbnk7XHJcbiAgICBvcGVuU2VhcmNoUGFuZWxIaWRkZW5TZXR0aW5ncyQ6IE9ic2VydmFibGU8dm9pZD47XHJcbiAgICBvcGVuU2VhcmNoRmlsZXNNYW5hZ2UkOiBPYnNlcnZhYmxlPHZvaWQ+O1xyXG4gICAgc2VhcmNoUGFuZWxNb0NoYW5nZWQkOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xyXG4gICAgYWxsU2VhcmNoUGFuZWxTZXR0aW5ncyQ6IE9ic2VydmFibGU8U2VhcmNoUGFuZWxTZXR0aW5nc1tdPjtcclxuICAgIGxheW91dEluZm8kOiBPYnNlcnZhYmxlPGFueT47XHJcbiAgICBzZWxlY3RlZFNlYXJjaFBhbmVsU2V0dGluZ3NJZCQ6IE9ic2VydmFibGU8c3RyaW5nPjtcclxuICAgIHNlbGVjdGVkU2VhcmNoUGFuZWxTZXR0aW5ncyQ6IE9ic2VydmFibGU8U2VhcmNoUGFuZWxTZXR0aW5ncyB8IHVuZGVmaW5lZD47XHJcbiAgICBuZXdJbmxpbmVFZGl0TW8kOiBPYnNlcnZhYmxlPE1ldGFvYmplY3REYXRhTW9kZWwgfCBudWxsPjtcclxuICAgIF9jYXJ0YWJsZVRlbXBsYXRlcyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHsgW2tleTogc3RyaW5nXTogRm9ybVNldHRpbmcgfT4oe30pO1xyXG4gICAgX2NhcnRhYmxlQ2hpbGRzTW8kID0gbmV3IEJlaGF2aW9yU3ViamVjdDx7IFtrZXk6IHN0cmluZ106IE1ldGFvYmplY3REYXRhTW9kZWwgfSB8IG51bGw+KHt9KTtcclxuICAgIHNlbGVjdGVkQ291bnQkOiBPYnNlcnZhYmxlPG51bWJlcj47XHJcbiAgICBoaWRlVWx2UGFnZVRpdGxlJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcclxuICAgIHVpVmlld2VyU2VsZWN0b3IkOiBPYnNlcnZhYmxlPHN0cmluZz47XHJcblxyXG4gICAgcHJpdmF0ZSBfc2V0VWlWaWV3ZXJTZWxlY3RvciQgPSBuZXcgU3ViamVjdDxzdHJpbmc+KCk7XHJcbiAgICBwcml2YXRlIF9ncmlkRnJlZUNvbHVtblNpemluZyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcclxuICAgIHByaXZhdGUgX2xheW91dEluZm9Tb3VyY2UgPSBuZXcgU3ViamVjdDxhbnk+KCk7XHJcbiAgICBwcml2YXRlIF9jb250ZXh0U291cmNlID0gbmV3IFN1YmplY3Q8YW55PigpO1xyXG4gICAgcHJpdmF0ZSBfY2FuU2F2ZUdyaWRTZXR0aW5nJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gICAgcHJpdmF0ZSBfaW5EaWFsb2ckID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XHJcbiAgICBwcml2YXRlIF9pc011bHRpU2VsZWN0JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gICAgcHJpdmF0ZSBfZnVsbHNjcmVlbiQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcclxuICAgIHByaXZhdGUgX2NvbmRpdGlvbmFsRm9ybWF0c1NvdXJjZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55W10+KFtdKTtcclxuICAgIHByaXZhdGUgX3JlcG9ydFNvdXJjZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55PihudWxsKTtcclxuICAgIHByaXZhdGUgX3ZpZXdlckNvbnRyb2xTb3VyY2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4obnVsbCk7XHJcbiAgICBwcml2YXRlIF9oaWRlVG9vbGJhclNvdXJjZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSk7XHJcbiAgICBwcml2YXRlIF9vbkRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICAgIHByaXZhdGUgX21hc2tTb3VyY2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcclxuICAgIHByaXZhdGUgX3Nob3dDb250ZXh0TWVudVNvdXJjZSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcbiAgICBwcml2YXRlIF92aWV3ZXJNYXNrU291cmNlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XHJcbiAgICBwcml2YXRlIF92aXNpYmxlU291cmNlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPih0cnVlKTtcclxuICAgIHByaXZhdGUgX2VuYWJsZVNvdXJjZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSk7XHJcbiAgICBwcml2YXRlIF9yZWFkb25seVNvdXJjZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gICAgcHJpdmF0ZSBfbWVudUl0ZW1zU291cmNlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxNZW51SXRlbVtdPihbXSk7XHJcbiAgICBwcml2YXRlIF9vbmx5SW5saW5lRWRpdFNvdXJjZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gICAgcHJpdmF0ZSBfaW5saW5lRWRpdE1vZGVTb3VyY2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcclxuICAgIHByaXZhdGUgX2FsbG93SW5saW5lRWRpdFNvdXJjZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gICAgcHJpdmF0ZSBfY2FydGFibGVLZXlTZXBlcmF0b3IgPSAnQCc7XHJcbiAgICBwcml2YXRlIF90aXRsZVNvdXJjZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8eyB0ZXh0OiBzdHJpbmc7IGltYWdlOiBzdHJpbmcgfT4oe1xyXG4gICAgICAgIHRleHQ6ICcnLFxyXG4gICAgICAgIGltYWdlOiAnJ1xyXG4gICAgfSk7XHJcbiAgICBwcml2YXRlIF9oaWRlVWx2UGFnZVRpdGxlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xyXG5cclxuICAgIHByaXZhdGUgX3NlYXJjaFBhbmVsVWlTb3VyY2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4obnVsbCk7XHJcblxyXG4gICAgcHJpdmF0ZSBfcGFnaW5nU2V0dGluZ1NvdXJjZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8UGFnaW5nU2V0dGluZyB8IG51bGw+KG51bGwpO1xyXG4gICAgcHJpdmF0ZSBfdG9vbGJhckJ1dHRvbnNTb3VyY2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueVtdPihbXSk7XHJcbiAgICBwcml2YXRlIF90b29sYmFyQnV0dG9uc1dvcmtmbG93QnV0dG9ucyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55W10+KFtdKTtcclxuICAgIHByaXZhdGUgX2Rlc3Ryb3lTb3VyY2UgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG4gICAgcHJpdmF0ZSBfZmlyc3RBcHBseUF1dG9tYXRpY2FsbHkgPSB0cnVlO1xyXG4gICAgcHJpdmF0ZSBfY29udHJvbEluZm9zTWV0YW9iamVjdDogR2VuZXJhbENvbnRyb2xJbmZvTW9kZWxbXSA9IFtdO1xyXG4gICAgcHJpdmF0ZSBfc2VsZWN0ZWRTZWFyY2hQYW5lbFNldHRpbmdzSWRTb3VyY2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oJycpO1xyXG4gICAgcHJpdmF0ZSBfZGVmYXVsdFNlYXJjaFBhbmVsU2V0dGluZ3NTb3VyY2UgPSBuZXcgU3ViamVjdDxTZWFyY2hQYW5lbFNldHRpbmdzPigpO1xyXG4gICAgcHJpdmF0ZSBfYWxsU2VhcmNoUGFuZWxTZXR0aW5nc1NvdXJjZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8U2VhcmNoUGFuZWxTZXR0aW5nc1tdPihbXSk7XHJcbiAgICBwcml2YXRlIF9oaWRlUGFnaW5nU291cmNlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XHJcbiAgICBwcml2YXRlIF9vcGVuU2VhcmNoUGFuZWxIaWRkZW5TZXR0aW5nc1NvdXJjZSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcbiAgICBwcml2YXRlIF9vcGVuU2VhcmNoRmlsZXNNYW5hZ2VTb3VyY2UgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG4gICAgcHJpdmF0ZSBfc2VhcmNoUGFuZWxNb0NoYW5nZWRTb3VyY2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcclxuICAgIHByaXZhdGUgX25ld0lubGluZUVkaXRNb1NvdXJjZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8TWV0YW9iamVjdERhdGFNb2RlbCB8IG51bGw+KG51bGwpO1xyXG4gICAgcHJpdmF0ZSBfaGlkZVNlYXJjaGFwYW5lbFNvdXJjZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gICAgcHJpdmF0ZSBfd29ya2Zsb3dTaGFyZUJ1dHRvbnM6IFNoYXJlQnV0dG9uc0Nob2ljZURlZltdID0gW107XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBfYmJiUGlwZTogQmJiVHJhbnNsYXRlUGlwZSwgcHJpdmF0ZSBfYXBpU2VydmljZTogQXBpU2VydmljZSkge1xyXG4gICAgICAgIHRoaXMuY29udGV4dCQgPSB0aGlzLl9jb250ZXh0U291cmNlXHJcbiAgICAgICAgICAgIC5hc09ic2VydmFibGUoKVxyXG4gICAgICAgICAgICAucGlwZShcclxuICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9vbkRlc3Ryb3kkKSxcclxuICAgICAgICAgICAgICAgIHRhcCgoY29udGV4dCkgPT4gKHRoaXMuY29udGV4dCA9IGNvbnRleHQpKSxcclxuICAgICAgICAgICAgICAgIHRhcCgoY29udGV4dCkgPT4gdGhpcy5faW5pdGlhbGl6ZShjb250ZXh0KSksXHJcbiAgICAgICAgICAgICAgICB0YXAoKGNvbnRleHQpID0+IHRoaXMuX2FkZEV2ZW50TGlzdGVuZXIoY29udGV4dCkpXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICAgLnN1YnNjcmliZSgpO1xyXG4gICAgICAgIHRoaXMubmV3SW5saW5lRWRpdE1vJCA9IHRoaXMuX25ld0lubGluZUVkaXRNb1NvdXJjZS5hc09ic2VydmFibGUoKS5waXBlKHRha2VVbnRpbCh0aGlzLl9vbkRlc3Ryb3kkKSk7XHJcbiAgICAgICAgdGhpcy52aWV3ZXIkID0gdGhpcy5fdmlld2VyQ29udHJvbFNvdXJjZS5hc09ic2VydmFibGUoKS5waXBlKHRha2VVbnRpbCh0aGlzLl9vbkRlc3Ryb3kkKSk7XHJcbiAgICAgICAgdGhpcy5jb25kaXRpb25hbEZvcm1hdHMkID0gdGhpcy5fY29uZGl0aW9uYWxGb3JtYXRzU291cmNlLmFzT2JzZXJ2YWJsZSgpLnBpcGUodGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpKTtcclxuICAgICAgICB0aGlzLmhpZGVUb29sYmFyJCA9IHRoaXMuX2hpZGVUb29sYmFyU291cmNlLmFzT2JzZXJ2YWJsZSgpLnBpcGUodGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpKTtcclxuICAgICAgICB0aGlzLm1hc2skID0gdGhpcy5fbWFza1NvdXJjZS5hc09ic2VydmFibGUoKS5waXBlKHRha2VVbnRpbCh0aGlzLl9vbkRlc3Ryb3kkKSk7XHJcbiAgICAgICAgdGhpcy52aXdlck1hc2skID0gdGhpcy5fdmlld2VyTWFza1NvdXJjZS5hc09ic2VydmFibGUoKS5waXBlKHRha2VVbnRpbCh0aGlzLl9vbkRlc3Ryb3kkKSk7XHJcbiAgICAgICAgdGhpcy52aXNpYmxlJCA9IHRoaXMuX3Zpc2libGVTb3VyY2UuYXNPYnNlcnZhYmxlKCkucGlwZSh0YWtlVW50aWwodGhpcy5fb25EZXN0cm95JCkpO1xyXG4gICAgICAgIHRoaXMuZW5hYmxlJCA9IHRoaXMuX2VuYWJsZVNvdXJjZS5hc09ic2VydmFibGUoKS5waXBlKHRha2VVbnRpbCh0aGlzLl9vbkRlc3Ryb3kkKSk7XHJcbiAgICAgICAgdGhpcy5yZWFkb25seSQgPSB0aGlzLl9yZWFkb25seVNvdXJjZS5hc09ic2VydmFibGUoKS5waXBlKHRha2VVbnRpbCh0aGlzLl9vbkRlc3Ryb3kkKSk7XHJcbiAgICAgICAgdGhpcy5oaWRlVWx2UGFnZVRpdGxlJCA9IHRoaXMuX2hpZGVVbHZQYWdlVGl0bGUkLmFzT2JzZXJ2YWJsZSgpLnBpcGUodGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpKTtcclxuICAgICAgICB0aGlzLnVpVmlld2VyU2VsZWN0b3IkID0gdGhpcy5fc2V0VWlWaWV3ZXJTZWxlY3RvciQuYXNPYnNlcnZhYmxlKCk7XHJcbiAgICAgICAgdGhpcy5tZW51SXRlbXMkID0gdGhpcy5fbWVudUl0ZW1zU291cmNlLmFzT2JzZXJ2YWJsZSgpLnBpcGUoXHJcbiAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9vbkRlc3Ryb3kkKSxcclxuICAgICAgICAgICAgZmlsdGVyKChpdGVtcykgPT4gaXRlbXM/Lmxlbmd0aCA+IDApLFxyXG4gICAgICAgICAgICBtYXAoKGl0ZW1zKSA9PiBpdGVtcy5maWx0ZXIoKGMpID0+IGMuaXRlbUlkICE9PSAnRXhwb3J0VG9FeGNlbCcgJiYgYy5pdGVtSWQgIT09ICdEZWxldGUnKSlcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMudGl0bGUkID0gdGhpcy5fdGl0bGVTb3VyY2UuYXNPYnNlcnZhYmxlKCkucGlwZSh0YWtlVW50aWwodGhpcy5fb25EZXN0cm95JCkpO1xyXG5cclxuICAgICAgICB0aGlzLnNlYXJjaFBhbmVsVWkkID0gdGhpcy5fc2VhcmNoUGFuZWxVaVNvdXJjZS5hc09ic2VydmFibGUoKS5waXBlKFxyXG4gICAgICAgICAgICB0YWtlVW50aWwodGhpcy5fb25EZXN0cm95JCksXHJcbiAgICAgICAgICAgIHRhcCgoc2VhcmNoUGFuZWwpID0+IHRoaXMuX2FkZERlZmF1bHRTZWFyY2hQYW5lbFNldHRpbmdzKHNlYXJjaFBhbmVsKSlcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMub3BlblNlYXJjaFBhbmVsSGlkZGVuU2V0dGluZ3MkID0gdGhpcy5fb3BlblNlYXJjaFBhbmVsSGlkZGVuU2V0dGluZ3NTb3VyY2UuYXNPYnNlcnZhYmxlKCk7XHJcbiAgICAgICAgdGhpcy5wYWdpbmdTZXR0aW5nJCA9IHRoaXMuX3BhZ2luZ1NldHRpbmdTb3VyY2UuYXNPYnNlcnZhYmxlKCkucGlwZSh0YWtlVW50aWwodGhpcy5fb25EZXN0cm95JCkpO1xyXG4gICAgICAgIHRoaXMudG9vbGJhckJ1dHRvbnMkID0gY29tYmluZUxhdGVzdChbXHJcbiAgICAgICAgICAgIHRoaXMuX3Rvb2xiYXJCdXR0b25zV29ya2Zsb3dCdXR0b25zLmFzT2JzZXJ2YWJsZSgpLFxyXG4gICAgICAgICAgICB0aGlzLl90b29sYmFyQnV0dG9uc1NvdXJjZS5hc09ic2VydmFibGUoKVxyXG4gICAgICAgIF0pLnBpcGUoXHJcbiAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9vbkRlc3Ryb3kkKSxcclxuICAgICAgICAgICAgbWFwKChbd2ZCdG5zLCBjXSkgPT5cclxuICAgICAgICAgICAgICAgICFjXHJcbiAgICAgICAgICAgICAgICAgICAgPyBbXVxyXG4gICAgICAgICAgICAgICAgICAgIDogW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC4uLndmQnRucyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5jLm1hcCgoZCkgPT4gKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGlkZVRleHQ6IGQuQ29tbWFuZD8uSXNCdWlsdGluICYmIGQuaXRlbUlkICE9PSAnTmV3JyA/IHRydWUgOiBmYWxzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0pKVxyXG4gICAgICAgICAgICAgICAgICAgICAgXVxyXG4gICAgICAgICAgICApLFxyXG4gICAgICAgICAgICBtYXAoKGMpID0+XHJcbiAgICAgICAgICAgICAgICAhYyA/IFtdIDogWy4uLmMuZmlsdGVyKChkKSA9PiAhZC5Db21tYW5kPy5Jc0J1aWx0aW4pLCAuLi5jLmZpbHRlcigoZCkgPT4gZC5Db21tYW5kPy5Jc0J1aWx0aW4pXVxyXG4gICAgICAgICAgICApLFxyXG4gICAgICAgICAgICBtYXAoKGMpID0+XHJcbiAgICAgICAgICAgICAgICBjLnJlZHVjZSgoYWNjLCBiKSA9PiAoYWNjLmxlbmd0aCA+IDAgJiYgYWNjW2FjYy5sZW5ndGggLSAxXVsnMCddICYmIGJbJzAnXSA/IGFjYyA6IFsuLi5hY2MsIGJdKSwgW10pXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuZGVzdHJveSQgPSB0aGlzLl9kZXN0cm95U291cmNlLmFzT2JzZXJ2YWJsZSgpLnBpcGUodGFwKCgpID0+IHRoaXMuX3Vuc2N1YnNjcmliZUNvbnRleHQoKSkpO1xyXG4gICAgICAgIHRoaXMubW9EYXRhTGlzdCQgPSB0aGlzLm1vRGF0YUxpc3RTb3VyY2UuYXNPYnNlcnZhYmxlKCkucGlwZSgpO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRDb3VudCQgPSB0aGlzLm1vRGF0YUxpc3QkLnBpcGUobWFwKChpdGVtcykgPT4gaXRlbXMuZmlsdGVyKChkKSA9PiBkLiRJc0NoZWNrZWQpLmxlbmd0aCkpO1xyXG4gICAgICAgIHRoaXMucmVwb3J0SWQkID0gdGhpcy5fcmVwb3J0U291cmNlLmFzT2JzZXJ2YWJsZSgpLnBpcGUobWFwKChyZXBvcnQpID0+IHJlcG9ydD8uSWQpKTtcclxuXHJcbiAgICAgICAgdGhpcy5hbGxvd0lubGluZUVkaXQkID0gdGhpcy5fYWxsb3dJbmxpbmVFZGl0U291cmNlLmFzT2JzZXJ2YWJsZSgpO1xyXG4gICAgICAgIHRoaXMuaW5saW5lRWRpdE1vZGUkID0gdGhpcy5faW5saW5lRWRpdE1vZGVTb3VyY2UuYXNPYnNlcnZhYmxlKCk7XHJcbiAgICAgICAgdGhpcy5vbmx5SW5saW5lRWRpdCQgPSB0aGlzLl9vbmx5SW5saW5lRWRpdFNvdXJjZS5hc09ic2VydmFibGUoKTtcclxuICAgICAgICB0aGlzLm9wZW5TZWFyY2hGaWxlc01hbmFnZSQgPSB0aGlzLl9vcGVuU2VhcmNoRmlsZXNNYW5hZ2VTb3VyY2UuYXNPYnNlcnZhYmxlKCk7XHJcbiAgICAgICAgdGhpcy5zZWFyY2hQYW5lbE1vQ2hhbmdlZCQgPSB0aGlzLl9zZWFyY2hQYW5lbE1vQ2hhbmdlZFNvdXJjZS5hc09ic2VydmFibGUoKS5waXBlKGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpO1xyXG4gICAgICAgIHRoaXMubGF5b3V0SW5mbyQgPSB0aGlzLl9sYXlvdXRJbmZvU291cmNlLmFzT2JzZXJ2YWJsZSgpLnBpcGUoc2hhcmVSZXBsYXkoMSkpO1xyXG4gICAgICAgIHRoaXMuYWxsU2VhcmNoUGFuZWxTZXR0aW5ncyQgPSBjb21iaW5lTGF0ZXN0KFtcclxuICAgICAgICAgICAgdGhpcy5fYWxsU2VhcmNoUGFuZWxTZXR0aW5nc1NvdXJjZS5hc09ic2VydmFibGUoKSxcclxuICAgICAgICAgICAgdGhpcy5fZGVmYXVsdFNlYXJjaFBhbmVsU2V0dGluZ3NTb3VyY2UuYXNPYnNlcnZhYmxlKClcclxuICAgICAgICBdKS5waXBlKFxyXG4gICAgICAgICAgICBtYXAoKFthbGxTZXR0aW5ncywgZGVmYXVsdFNldHRpbmdzXSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKGRlZmF1bHRTZXR0aW5ncyAmJiBhbGxTZXR0aW5ncykge1xyXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHRTZXR0aW5ncy5Jc0RlZmF1bHQgPSAhYWxsU2V0dGluZ3Muc29tZSgoYykgPT4gYy5Jc0RlZmF1bHQpO1xyXG4gICAgICAgICAgICAgICAgICAgIGFsbFNldHRpbmdzID0gW2RlZmF1bHRTZXR0aW5ncywgLi4uYWxsU2V0dGluZ3NdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGFsbFNldHRpbmdzO1xyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgZGVsYXkoMCksXHJcbiAgICAgICAgICAgIHNoYXJlUmVwbGF5KDEpXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkU2VhcmNoUGFuZWxTZXR0aW5nc0lkJCA9IHRoaXMuX3NlbGVjdGVkU2VhcmNoUGFuZWxTZXR0aW5nc0lkU291cmNlXHJcbiAgICAgICAgICAgIC5hc09ic2VydmFibGUoKVxyXG4gICAgICAgICAgICAucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKTtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkU2VhcmNoUGFuZWxTZXR0aW5ncyQgPSBjb21iaW5lTGF0ZXN0KFtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFNlYXJjaFBhbmVsU2V0dGluZ3NJZCQsXHJcbiAgICAgICAgICAgIHRoaXMuYWxsU2VhcmNoUGFuZWxTZXR0aW5ncyRcclxuICAgICAgICBdKS5waXBlKFxyXG4gICAgICAgICAgICBtYXAoKFtpZCwgc2V0dGluZ3NdKSA9PiBzZXR0aW5ncz8uZmluZCgoYykgPT4gYy5JZCA9PT0gaWQpKSxcclxuICAgICAgICAgICAgc2hhcmVSZXBsYXkoMSlcclxuICAgICAgICApO1xyXG4gICAgfVxyXG4gICAgZ2V0IGhpZGVQYWdpbmckKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9oaWRlUGFnaW5nU291cmNlLmFzT2JzZXJ2YWJsZSgpO1xyXG4gICAgfVxyXG4gICAgZ2V0IHNob3dDb250ZXh0TWVudSQoKTogT2JzZXJ2YWJsZTx2b2lkPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Nob3dDb250ZXh0TWVudVNvdXJjZS5hc09ic2VydmFibGUoKTtcclxuICAgIH1cclxuICAgIGdldCBncmlkRnJlZUNvbHVtblNpemluZyQoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dyaWRGcmVlQ29sdW1uU2l6aW5nJC5hc09ic2VydmFibGUoKTtcclxuICAgIH1cclxuICAgIGdldCBjYW5TYXZlR3JpZFNldHRpbmckKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9jYW5TYXZlR3JpZFNldHRpbmckLmFzT2JzZXJ2YWJsZSgpO1xyXG4gICAgfVxyXG4gICAgZ2V0IGluRGlhbG9nJCgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5faW5EaWFsb2ckLmFzT2JzZXJ2YWJsZSgpO1xyXG4gICAgfVxyXG4gICAgZ2V0IGlzTXVsdGlTZWxlY3QkKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9pc011bHRpU2VsZWN0JC5hc09ic2VydmFibGUoKTtcclxuICAgIH1cclxuICAgIGdldCBmdWxsc2NyZWVuJCgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZnVsbHNjcmVlbiQuYXNPYnNlcnZhYmxlKCk7XHJcbiAgICB9XHJcbiAgICBnZXQgY2FydGFibGVDaGlsZHNNbyQoKTogT2JzZXJ2YWJsZTx7IFtrZXk6IHN0cmluZ106IE1ldGFvYmplY3REYXRhTW9kZWwgfSB8IG51bGw+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fY2FydGFibGVDaGlsZHNNbyQuYXNPYnNlcnZhYmxlKCk7XHJcbiAgICB9XHJcbiAgICBnZXQgY2FydGFibGVUZW1wbGF0ZXMkKCk6IE9ic2VydmFibGU8eyBba2V5OiBzdHJpbmddOiBGb3JtU2V0dGluZyB9IHwgbnVsbD4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9jYXJ0YWJsZVRlbXBsYXRlcyQuYXNPYnNlcnZhYmxlKCk7XHJcbiAgICB9XHJcbiAgICBnZXQgc2VhcmNoUGFuZWxVaSgpOiBhbnkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zZWFyY2hQYW5lbFVpU291cmNlLmdldFZhbHVlKCk7XHJcbiAgICB9XHJcbiAgICBnZXQgcmVwb3J0SWQoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcmVwb3J0U291cmNlLmdldFZhbHVlKCk/LklkO1xyXG4gICAgfVxyXG4gICAgZ2V0IGFsbFNlYXJjaFBhbmVsU2V0dGluZ3MoKTogU2VhcmNoUGFuZWxTZXR0aW5nc1tdIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fYWxsU2VhcmNoUGFuZWxTZXR0aW5nc1NvdXJjZS5nZXRWYWx1ZSgpO1xyXG4gICAgfVxyXG4gICAgZ2V0IGhpZGVTZWFyY2hwYW5lbCQoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2hpZGVTZWFyY2hhcGFuZWxTb3VyY2UuYXNPYnNlcnZhYmxlKCkucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKTtcclxuICAgIH1cclxuICAgIGdldCBoaWRlU2VhcmNocGFuZWwoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2hpZGVTZWFyY2hhcGFuZWxTb3VyY2UuZ2V0VmFsdWUoKTtcclxuICAgIH1cclxuICAgIGhpZGVQYWdpbmcoaGlkZTogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX2hpZGVQYWdpbmdTb3VyY2UubmV4dChoaWRlKTtcclxuICAgIH1cclxuICAgIHNldFVpVmlld2VyQ2xhc3Moc2VsZWN0b3I6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX3NldFVpVmlld2VyU2VsZWN0b3IkLm5leHQoc2VsZWN0b3IpO1xyXG4gICAgfVxyXG4gICAgaGlkZVVsdlRpdGxlUGFnZSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9oaWRlVWx2UGFnZVRpdGxlJC5uZXh0KHRydWUpO1xyXG4gICAgfVxyXG4gICAgc2V0Q2FuU2F2ZUdyaWRTZXR0aW5ncyh2YWw6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9jYW5TYXZlR3JpZFNldHRpbmckLm5leHQodmFsKTtcclxuICAgIH1cclxuICAgIGV4ZWN1dGVUb29sYmFyQnV0dG9uKGl0ZW1JZDogc3RyaW5nLCBvcHRpb25zPzogYW55KTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgYnV0dG9ucyA9IHRoaXMuX3Rvb2xiYXJCdXR0b25zU291cmNlLmdldFZhbHVlKCk7XHJcbiAgICAgICAgaWYgKCFidXR0b25zLmxlbmd0aCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGJ0biA9IGJ1dHRvbnMuZmluZCgoYykgPT4gYy5pdGVtSWQgPT09IGl0ZW1JZCk7XHJcbiAgICAgICAgaWYgKGJ0bikge1xyXG4gICAgICAgICAgICBleGVjdXRlVWx2Q29tbWFuZEhhbmRsZXIoYnRuLCBvcHRpb25zKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBhZGRXb3JrZmxvd0J1dHRvbnNJblRvb2xiYXIoZTogU2hhcmVCdXR0b25zQ2hvaWNlRGVmKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgYXJyT2ZTaGFyZUJ1dHRvbnMgPSB0aGlzLl9jcmVhdGVXb3JrZmxvd1NoYXJlQnV0dG9ucyhlKTtcclxuICAgICAgICBjb25zdCB2YWx1ZSA9IGFyck9mU2hhcmVCdXR0b25zLm1hcCgoYykgPT4gKHtcclxuICAgICAgICAgICAgaWNvbjogJycsXHJcbiAgICAgICAgICAgIHRleHQ6IGMsXHJcbiAgICAgICAgICAgIGl0ZW1JZDogYyxcclxuICAgICAgICAgICAgRGF0YTogbnVsbCxcclxuICAgICAgICAgICAgJFNoYXJlV29ya2Zsb3dCdXR0b25zOiB0cnVlLFxyXG4gICAgICAgICAgICBDb21tYW5kOiB7IF9pc1Zpc2libGU6IHRydWUsIF9pc0VuYWJsZTogdHJ1ZSwgSnNvbkV4dHJhUHJvcDogeyBEZXNpZ246ICdhdHRlbnRpb24nIH0gfSxcclxuICAgICAgICAgICAgaGFuZGxlcjogKGQpID0+IHRoaXMub25Xb3JrZmxvd0J1dHRvbkluVG9vbGJhckNsaWNrKGQpLFxyXG4gICAgICAgICAgICBJc0J1aWx0aW46IGZhbHNlXHJcbiAgICAgICAgfSkpO1xyXG4gICAgICAgIHRoaXMuX3Rvb2xiYXJCdXR0b25zV29ya2Zsb3dCdXR0b25zLm5leHQodmFsdWUpO1xyXG4gICAgfVxyXG4gICAgX2V4Y2x1ZGVXcmFwcGVyRnJvbU1vKG1vOiBNZXRhb2JqZWN0RGF0YU1vZGVsKTogTWV0YW9iamVjdERhdGFNb2RlbCB7XHJcbiAgICAgICAgLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi9cclxuICAgICAgICBjb25zdCB7ICRXcmFwcGVyLCAuLi5uZXdNbyB9ID0gbW87XHJcbiAgICAgICAgcmV0dXJuIG5ld01vO1xyXG4gICAgfVxyXG4gICAgb25Xb3JrZmxvd0J1dHRvbkluVG9vbGJhckNsaWNrKHNoYXJlQnV0dG9uOiB7IHRleHQ6IHN0cmluZyB9KTogdm9pZCB7XHJcbiAgICAgICAgQmFyc2FBcGkuQncuTXNnLk9LQ2FuY2VsKCfYotuM2Kcg2KfYsiDYqtin24zbjNivINmF2YjYp9ix2K8g2qnYp9ix2KrYp9io2YQg2YXYt9mF2KbZhiDZh9iz2KrbjNiv2J8nLCAn2KrYp9uM24zYrycsIChyZXMpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlcyA9PT0gJ29rJykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fd29ya2Zsb3dTaGFyZUJ1dHRvbnMuZm9yRWFjaCgoYykgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNob2ljZURlZiA9IGMuY2hvaWNlTGlzdC5maW5kKChkKSA9PiBkLlRpdGxlID09PSBzaGFyZUJ1dHRvbi50ZXh0KTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY2hvaWNlRGVmKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGMuZm9ybVBhbmVsQ3RybHIuV29ya2Zsb3dUcmFuc2l0aW9uKGNob2ljZURlZiwgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhpcy5fc2V0V29ya2Zsb3dTdGF0ZSgnRmluaXNoJywgW2MubW9dKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAvLyB0aGlzLl9zZXRXb3JrZmxvd1N0YXRlKFxyXG4gICAgICAgICAgICAgICAgLy8gICAgICdQZW5kaW5nJyxcclxuICAgICAgICAgICAgICAgIC8vICAgICB0aGlzLl93b3JrZmxvd1NoYXJlQnV0dG9ucy5tYXAoKGMpID0+IGMubW8pXHJcbiAgICAgICAgICAgICAgICAvLyApO1xyXG4gICAgICAgICAgICAgICAgLy8gY29uc3QgcGFyYW1zID0gdGhpcy5fd29ya2Zsb3dTaGFyZUJ1dHRvbnMubWFwKChjKSA9PiAoe1xyXG4gICAgICAgICAgICAgICAgLy8gICAgIG1vOiB0aGlzLl9leGNsdWRlV3JhcHBlckZyb21NbyhjLm1vLlJlbGF0ZWRNbyksXHJcbiAgICAgICAgICAgICAgICAvLyAgICAgY2hvaWNlRGVmOiBjLmNob2ljZUxpc3QuZmluZCgoZCkgPT4gZC5UaXRsZSA9PT0gc2hhcmVCdXR0b24udGV4dClcclxuICAgICAgICAgICAgICAgIC8vIH0pKTtcclxuICAgICAgICAgICAgICAgIC8vIHRoaXMuX3NldFdvcmtmbG93U3RhdGUoJ1BlbmRpbmcnLCBwYXJhbXMpO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIEJhcnNhQXBpLkNvbW1vbi5BamF4LkdldFNlcnZlckRhdGEoXHJcbiAgICAgICAgICAgICAgICAvLyAgICAgJ1dvcmtmbG93OTQuT25Hcm91cE9mQ2hvaWNlRGVmc1NlbGVjdCcsXHJcbiAgICAgICAgICAgICAgICAvLyAgICAgeyBwYXJhbWV0ZXI6IHsgRGF0YUxpc3Q6IHBhcmFtcyB9IH0sXHJcbiAgICAgICAgICAgICAgICAvLyAgICAgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgLy8gICAgICAgICB0aGlzLl9zZXRXb3JrZmxvd1N0YXRlKCdTdWNjZXNzJywgcGFyYW1zKTtcclxuICAgICAgICAgICAgICAgIC8vICAgICB9LCAvLyBzdWNjZXNzXHJcbiAgICAgICAgICAgICAgICAvLyAgICAgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgLy8gICAgICAgICB0aGlzLl9zZXRXb3JrZmxvd1N0YXRlKCdGYWlsZWQnLCBwYXJhbXMsICfZhdiq2KfYs9mB2KfZhtmHINi52YXZhNuM2KfYqiDZhtin2YXZiNmB2YIg2KjZiNivLicpO1xyXG4gICAgICAgICAgICAgICAgLy8gICAgIH0sIC8vIGZhaWx1cmVcclxuICAgICAgICAgICAgICAgIC8vICAgICBudWxsLFxyXG4gICAgICAgICAgICAgICAgLy8gICAgIHRoaXNcclxuICAgICAgICAgICAgICAgIC8vICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRUaXRsZSh0aXRsZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fdGl0bGVTb3VyY2UubmV4dCh7IHRleHQ6IHRpdGxlLCBpbWFnZTogJycgfSk7XHJcbiAgICB9XHJcbiAgICB0b2dnbGVIaWRlU2VhcmNocGFuZWwodmFsPzogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX2hpZGVTZWFyY2hhcGFuZWxTb3VyY2UubmV4dCh0eXBlb2YgdmFsICE9PSAndW5kZWZpbmVkJyA/IHZhbCA6ICF0aGlzLl9oaWRlU2VhcmNoYXBhbmVsU291cmNlLmdldFZhbHVlKCkpO1xyXG4gICAgfVxyXG4gICAgc2V0Q29udGV4dChjb250ZXh0KTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fY29udGV4dFNvdXJjZS5uZXh0KGNvbnRleHQpO1xyXG4gICAgfVxyXG4gICAgc2V0SW5EaWFsb2codmFsOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5faW5EaWFsb2ckLm5leHQodmFsKTtcclxuICAgIH1cclxuICAgIHNldElzTXVsdGlTZWxlY3QodmFsOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5faXNNdWx0aVNlbGVjdCQubmV4dCh2YWwpO1xyXG4gICAgfVxyXG4gICAgc2V0RnVsbHNjcmVlbih2YWw6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9mdWxsc2NyZWVuJC5uZXh0KHZhbCk7XHJcbiAgICB9XHJcblxyXG4gICAgY3JlYXRlTmV3SW5saW5lTW8oaXNDaGVja2VkOiBib29sZWFuKTogTWV0YW9iamVjdERhdGFNb2RlbCB7XHJcbiAgICAgICAgY29uc3QgY29udGV4dCA9IHRoaXMuY29udGV4dDtcclxuICAgICAgICBjb25zdCBmb3JtU2V0dGluZyA9IGNvbnRleHQuU2V0dGluZy5Gb3JtVGVtcGxhdGU7XHJcbiAgICAgICAgY29uc3QgdHlwZURlZklkID0gY29udGV4dC5TZXR0aW5nLkV4dHJhLlJlcG9ydC5UeXBlRGVmSWQ7XHJcbiAgICAgICAgY29uc3QgbmV3TW8gPSBnZXROZXdNb0dyaWRFZGl0b3IoZm9ybVNldHRpbmcsIHR5cGVEZWZJZCkgYXMgTWV0YW9iamVjdERhdGFNb2RlbDtcclxuICAgICAgICBuZXdNby5JZCA9IGdlbnJhdGVJbmxpbmVNb0lkKCk7XHJcbiAgICAgICAgbmV3TW8uJElzQ2hlY2tlZCA9IGlzQ2hlY2tlZDtcclxuICAgICAgICBuZXdNby4kTmV3SW5saW5lTW8gPSB0cnVlO1xyXG4gICAgICAgIGlmICh0aGlzLl9pc0NvbXBvc2l0ZShjb250ZXh0KSkge1xyXG4gICAgICAgICAgICBjb25zdCByZWxhdGlvbiA9IEJhcnNhQXBpLkNvbW1vbi5VdGlsLlRyeUdldFZhbHVlKHRoaXMuY29udGV4dC5TZXR0aW5nLCAnRXh0cmEuUmVsYXRpb24nKTtcclxuICAgICAgICAgICAgbmV3TW9bcmVsYXRpb24uUGFyZW50RmROYW1lXSA9IHJlbGF0aW9uLlBhcmVudE1vSWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vICB0aGlzLl9uZXdJbmxpbmVFZGl0TW9Tb3VyY2UubmV4dChuZXdNbyk7XHJcbiAgICAgICAgcmV0dXJuIG5ld01vO1xyXG4gICAgfVxyXG4gICAgc2V0TGF5b3V0SW5mbyhsYXlvdXRJbmZvKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fbGF5b3V0SW5mb1NvdXJjZS5uZXh0KGxheW91dEluZm8pO1xyXG4gICAgfVxyXG5cclxuICAgIGRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fb25EZXN0cm95JC5uZXh0KCk7XHJcbiAgICAgICAgdGhpcy5fdW5zY3Vic2NyaWJlQ29udGV4dCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHBhZ2VTaXplQ2hhbmdlZChwYWdlSW5kZXgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmNvbnRleHQuZmlyZUV2ZW50KCdQYWdlQ2hhbmdlJywgdGhpcy5jb250ZXh0LCBwYWdlSW5kZXgpO1xyXG4gICAgfVxyXG5cclxuICAgIHBhZ2VDaGFuZ2VkKHBhZ2VJbmRleCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuY29udGV4dC5jdXJyZW50UGFnZSA9IHBhZ2VJbmRleDtcclxuICAgICAgICB0aGlzLmNvbnRleHQuZmlyZUV2ZW50KCdQYWdlQ2hhbmdlJywgdGhpcy5jb250ZXh0LCBwYWdlSW5kZXgpO1xyXG4gICAgfVxyXG5cclxuICAgIHJlU2V0TW9EYXRhTGlzdChtb0RhdGFMaXN0PzogTWV0YW9iamVjdERhdGFNb2RlbFtdKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgbmV3TW9EYXRhTGlzdCA9IG1vRGF0YUxpc3QgPz8gdGhpcy5tb0RhdGFMaXN0U291cmNlLmdldFZhbHVlKCk7XHJcbiAgICAgICAgdGhpcy5fbW9EYXRhTGlzdENoYW5nZWQoWy4uLm5ld01vRGF0YUxpc3RdKTtcclxuICAgICAgICBpZiAoIXRoaXMuY29udGV4dC5TZXR0aW5nPy5Jc0NhcnRhYmxlUmVwb3J0KSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3Qga2V5T2ZDYXRhYmxlVGVtcGxhdGVzID0gbmV3IFNldDxzdHJpbmc+KCk7XHJcbiAgICAgICAgbmV3TW9EYXRhTGlzdC5mb3JFYWNoKChjKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRwZGZJZCA9IGMuUmVsYXRlZE1vPy4kVHlwZURlZklkO1xyXG4gICAgICAgICAgICBpZiAodHBkZklkKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBrZXkgPSBgJHt0cGRmSWR9JHt0aGlzLl9jYXJ0YWJsZUtleVNlcGVyYXRvcn0ke2MuQ2FydGFibGVTZXR0aW5ncz8uSWQgfHwgJzAnfWA7XHJcbiAgICAgICAgICAgICAgICBrZXlPZkNhdGFibGVUZW1wbGF0ZXMuYWRkKGtleSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICBpZiAoa2V5T2ZDYXRhYmxlVGVtcGxhdGVzLnNpemUgPiAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2xvYWRDYXJ0YWJsZVRlbXBsYXRlKGtleU9mQ2F0YWJsZVRlbXBsYXRlcyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy8gU2VhcmNoIFNldHRpbmcgTWFuYWdlclxyXG4gICAgY2xlYXJTZWFyY2goKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3Qgc2VhcmNoUGFuZWxVaSA9IHRoaXMuc2VhcmNoUGFuZWxVaTtcclxuICAgICAgICBpZiAoIXNlYXJjaFBhbmVsVWkpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBmaWVsZFVpID0gc2VhcmNoUGFuZWxVaS5fZGljdEZpZWxkVWkuJFNlYXJjaCA/PyBzZWFyY2hQYW5lbFVpLl9kaWN0RmllbGRVaS7YrNiz2KrYrNmIO1xyXG4gICAgICAgIGZpZWxkVWkuZmlyZUV2ZW50KCdDbGVhckNsaWNrJyk7XHJcbiAgICB9XHJcbiAgICBzZWFyY2goKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3Qgc2VhcmNoUGFuZWxVaSA9IHRoaXMuc2VhcmNoUGFuZWxVaTtcclxuICAgICAgICBpZiAoIXNlYXJjaFBhbmVsVWkpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgZmllbGRVaSA9IHNlYXJjaFBhbmVsVWkuX2RpY3RGaWVsZFVpLiRTZWFyY2ggPz8gc2VhcmNoUGFuZWxVaS5fZGljdEZpZWxkVWku2KzYs9iq2KzZiDtcclxuICAgICAgICBpZiAoIWZpZWxkVWkpIHtcclxuICAgICAgICAgICAgT2JqZWN0LmtleXMoc2VhcmNoUGFuZWxVaS5fZGljdEZpZWxkVWkpLmZvckVhY2goKGMpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGUgPSBzZWFyY2hQYW5lbFVpLl9kaWN0RmllbGRVaVtjXTtcclxuICAgICAgICAgICAgICAgIGlmIChlLm9yaWdpbmFsWHR5cGUgPT09ICdVaS5TZWFyY2hDb21tYW5kSW5mb1VpJykge1xyXG4gICAgICAgICAgICAgICAgICAgIGZpZWxkVWkgPSBlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGZpZWxkVWkpIHtcclxuICAgICAgICAgICAgZmllbGRVaS5maXJlRXZlbnQoJ1NlYXJjaENsaWNrJyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGdldFZhbHVlSW5saW5lRWRpdCgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5faW5saW5lRWRpdE1vZGVTb3VyY2UuZ2V0VmFsdWUoKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRBbGxvd0lubGluZUVkaXQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FsbG93SW5saW5lRWRpdFNvdXJjZS5nZXRWYWx1ZSgpO1xyXG4gICAgfVxyXG4gICAgc2V0SW5saW5lRWRpdCh2YWx1ZTogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX2lubGluZUVkaXRNb2RlU291cmNlLm5leHQodmFsdWUpO1xyXG4gICAgfVxyXG5cclxuICAgIG9wZW5TZWFyY2hGaWVsZHNIaWRkZW5TZXR0aW5ncygpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9vcGVuU2VhcmNoUGFuZWxIaWRkZW5TZXR0aW5nc1NvdXJjZS5uZXh0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgb3BlblNlYXJjaEZpbGVzTWFuYWdlKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX29wZW5TZWFyY2hGaWxlc01hbmFnZVNvdXJjZS5uZXh0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgc2VhcmNoUGFuZWxNb0NoYW5nZWQoY2hhbmdlOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fc2VhcmNoUGFuZWxNb0NoYW5nZWRTb3VyY2UubmV4dChjaGFuZ2UpO1xyXG4gICAgfVxyXG5cclxuICAgIGxvYWRTZWFyY2hQYW5lbFNldHRpbmdzKCk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLmNvbnRleHQuRm9ybVBhbmVsVWkgfHwgIXRoaXMuX2NhblNhdmVHcmlkU2V0dGluZyQuZ2V0VmFsdWUoKSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucmVwb3J0SWQkXHJcbiAgICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpLFxyXG4gICAgICAgICAgICAgICAgdGFwKChyZXBvcnRJZCkgPT4gdGhpcy5fbG9hZFNlYXJjaFBhbmVsU2V0dGluZ3MocmVwb3J0SWQpKVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuXHJcbiAgICBhZGRTZWFyY2hQYW5lbFNldHRpbmdzKHNlYXJjaFBhbmVsU2V0dGluZ3M6IFNlYXJjaFBhbmVsU2V0dGluZ3MpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBhbGxTZWFyY2hQYW5lbFNldHRpbmdzID0gdGhpcy5fYWxsU2VhcmNoUGFuZWxTZXR0aW5nc1NvdXJjZS5nZXRWYWx1ZSgpO1xyXG4gICAgICAgIGFsbFNlYXJjaFBhbmVsU2V0dGluZ3MucHVzaChzZWFyY2hQYW5lbFNldHRpbmdzKTtcclxuICAgICAgICB0aGlzLl9hbGxTZWFyY2hQYW5lbFNldHRpbmdzU291cmNlLm5leHQoYWxsU2VhcmNoUGFuZWxTZXR0aW5ncyk7XHJcbiAgICB9XHJcbiAgICBzYXZlU2VhcmNoUGFuZWxTZXR0aW5nKHNlbGVjdGVkU2VhcmNoUGFuZWxTZXR0aW5nczogU2VhcmNoUGFuZWxTZXR0aW5ncyk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IHNlYXJjaE1vID0gdGhpcy5nZXRTZWFyY2hQYW5lbE1vKCk7XHJcbiAgICAgICAgY29uc3QgZmllbGRzU2V0dGluZyA9IHRoaXMuZ2V0U2VhcmNoUGFuZWxGaWVsZHNTZXR0aW5nKCk7XHJcbiAgICAgICAgaWYgKCFzZWxlY3RlZFNlYXJjaFBhbmVsU2V0dGluZ3MpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzZWxlY3RlZFNlYXJjaFBhbmVsU2V0dGluZ3MuU2VhcmNoTW8gPSBKU09OLnN0cmluZ2lmeShzZWFyY2hNbyk7XHJcbiAgICAgICAgc2VsZWN0ZWRTZWFyY2hQYW5lbFNldHRpbmdzLkZpZWxkc1NldHRpbmcgPSBKU09OLnN0cmluZ2lmeShmaWVsZHNTZXR0aW5nKTtcclxuICAgICAgICBCYXJzYUFwaS5Cdy5SdW5CbE1ldGhvZChcclxuICAgICAgICAgICAgJ1NhdmVTZWFyY2hQYW5lbFNldHRpbmdzJyxcclxuICAgICAgICAgICAgbmV3IEJhcnNhQXBpLkNvbW1vbi5NZXRhT2JqZWN0V2ViKHtcclxuICAgICAgICAgICAgICAgIElkOiBzZWxlY3RlZFNlYXJjaFBhbmVsU2V0dGluZ3MuSWQsXHJcbiAgICAgICAgICAgICAgICAkQ2FwdGlvbjogc2VsZWN0ZWRTZWFyY2hQYW5lbFNldHRpbmdzLlRpdGxlLFxyXG4gICAgICAgICAgICAgICAgUmVwb3J0SWQ6IHNlbGVjdGVkU2VhcmNoUGFuZWxTZXR0aW5ncy5SZXBvcnQ/LklkLFxyXG4gICAgICAgICAgICAgICAgVGl0bGU6IHNlbGVjdGVkU2VhcmNoUGFuZWxTZXR0aW5ncy5UaXRsZSxcclxuICAgICAgICAgICAgICAgIElzRGVmYXVsdDogc2VsZWN0ZWRTZWFyY2hQYW5lbFNldHRpbmdzLklzRGVmYXVsdCxcclxuICAgICAgICAgICAgICAgIElzUHVibGljOiBzZWxlY3RlZFNlYXJjaFBhbmVsU2V0dGluZ3MuSXNQdWJsaWMsXHJcbiAgICAgICAgICAgICAgICBBcHBseUF1dG9tYXRpY2FsbHk6IHNlbGVjdGVkU2VhcmNoUGFuZWxTZXR0aW5ncy5BcHBseUF1dG9tYXRpY2FsbHksXHJcbiAgICAgICAgICAgICAgICBIaWRlU2VhcmNoUGFuZWw6IHNlbGVjdGVkU2VhcmNoUGFuZWxTZXR0aW5ncy5IaWRlU2VhcmNoUGFuZWwsXHJcbiAgICAgICAgICAgICAgICBTZWFyY2hNbzogc2VsZWN0ZWRTZWFyY2hQYW5lbFNldHRpbmdzLlNlYXJjaE1vLFxyXG4gICAgICAgICAgICAgICAgRmllbGRzU2V0dGluZzogc2VsZWN0ZWRTZWFyY2hQYW5lbFNldHRpbmdzLkZpZWxkc1NldHRpbmdcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIHRydWVcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuc2VhcmNoUGFuZWxNb0NoYW5nZWQoZmFsc2UpO1xyXG4gICAgfVxyXG5cclxuICAgIGFwcGx5U2VhcmNoUGFuZWxTZXR0aW5ncyhzZWFyY2hQYW5lbFNldHRpbmdzOiBTZWFyY2hQYW5lbFNldHRpbmdzIHwgdW5kZWZpbmVkKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3Qgc2VhcmNoUGFuZWxVaSA9IHRoaXMuc2VhcmNoUGFuZWxVaTtcclxuICAgICAgICBpZiAoIXNlYXJjaFBhbmVsU2V0dGluZ3MpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5fZmlyc3RBcHBseUF1dG9tYXRpY2FsbHkgJiYgc2VhcmNoUGFuZWxTZXR0aW5ncy5Jc1ByaW1hcnkpIHtcclxuICAgICAgICAgICAgdGhpcy5fZmlyc3RBcHBseUF1dG9tYXRpY2FsbHkgPSBmYWxzZTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9maXJzdEFwcGx5QXV0b21hdGljYWxseSA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLnJlc2V0U2VhcmNoUGFuZWxTZXR0aW5ncyhzZWFyY2hQYW5lbFVpKTtcclxuICAgICAgICBpZiAoc2VhcmNoUGFuZWxTZXR0aW5ncy5TZWFyY2hNbykge1xyXG4gICAgICAgICAgICBjb25zdCBzZWFyY2hNbyA9IEpTT04ucGFyc2Uoc2VhcmNoUGFuZWxTZXR0aW5ncy5TZWFyY2hNbyk7XHJcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKHNlYXJjaE1vKS5mb3JFYWNoKChjKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBmaWVsZCA9IHNlYXJjaFBhbmVsVWkuX2RpY3RGaWVsZFVpW2NdO1xyXG4gICAgICAgICAgICAgICAgaWYgKGZpZWxkICYmIGMuaW5kZXhPZignJCcpID09PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGZpZWxkLlNldFZhbHVlKHNlYXJjaE1vW2NdKTtcclxuICAgICAgICAgICAgICAgICAgICBzZWFyY2hQYW5lbFVpLk1vLlNldEZWYWx1ZShjLCBzZWFyY2hNb1tjXSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBpZiAoc2VhcmNoUGFuZWxTZXR0aW5ncy5Jc1ByaW1hcnkgJiYgIXNlYXJjaFBhbmVsVWkuU2V0dGluZy5JbW1lZGlhdGVFeGVjdXRlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaFBhbmVsTW9DaGFuZ2VkKGZhbHNlKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoc2VhcmNoUGFuZWxTZXR0aW5ncy5BcHBseUF1dG9tYXRpY2FsbHkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VhcmNoKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gVE9ETyBzZXQgaGlkZGVuIGZpZWxkc1xyXG4gICAgICAgIGlmIChzZWFyY2hQYW5lbFNldHRpbmdzLkZpZWxkc1NldHRpbmcpIHtcclxuICAgICAgICAgICAgY29uc3Qgc2V0dGluZ3MgPSBKU09OLnBhcnNlKHNlYXJjaFBhbmVsU2V0dGluZ3MuRmllbGRzU2V0dGluZyk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0QW5kQXBwbHlTZWFyY2hQYW5lbFNldHRpbmdGaWVsZHNTZXR0aW5nKFxyXG4gICAgICAgICAgICAgICAgdHlwZW9mIHNldHRpbmdzID09PSAnc3RyaW5nJyA/IEpTT04ucGFyc2Uoc2V0dGluZ3MpIDogc2V0dGluZ3NcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zZWFyY2hQYW5lbE1vQ2hhbmdlZChmYWxzZSk7XHJcbiAgICB9XHJcbiAgICBnZXRTZWFyY2hQYW5lbE1vKCk6IE1ldGFvYmplY3REYXRhTW9kZWwge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNlYXJjaFBhbmVsVWkuTW87XHJcbiAgICB9XHJcbiAgICBnZXRTZWFyY2hQYW5lbEZpZWxkc1NldHRpbmcoKTogQXJyYXk8UGFydGlhbDxHZW5lcmFsQ29udHJvbEluZm9Nb2RlbD4+IHtcclxuICAgICAgICBjb25zdCBzZWFyY2hQYW5lbFVpID0gdGhpcy5zZWFyY2hQYW5lbFVpO1xyXG4gICAgICAgIGNvbnN0IGZpZWxkczogQXJyYXk8R2VuZXJhbENvbnRyb2xJbmZvTW9kZWw+ID0gc2VhcmNoUGFuZWxVaS5TZXR0aW5nLlZpZXcuQ29udHJvbEluZm8uZmlsdGVyKFxyXG4gICAgICAgICAgICAoYykgPT4gYy5Db250cm9sTmFtZSAhPT0gJyRTZWFyY2gnICYmIGMuQ29udHJvbE5hbWUgIT09ICfYrNiz2KrYrNmIJ1xyXG4gICAgICAgICk7XHJcbiAgICAgICAgY29uc3QgZmllbGRzU2V0dGluZyA9IGZpZWxkcy5tYXAoKGMpID0+ICh7XHJcbiAgICAgICAgICAgIE5hbWU6IGMuQ29udHJvbE5hbWUsXHJcbiAgICAgICAgICAgIENhcHRpb246IGMuQ29udHJvbEZpZWxkQ2FwdGlvblRyYW5zbGF0ZWQsXHJcbiAgICAgICAgICAgIEhpZGRlbjogc2VhcmNoUGFuZWxVaS5fZGljdEZpZWxkVWlbYy5Db250cm9sTmFtZV0uU2V0dGluZy5Jc1Zpc2libGUgPT09IGZhbHNlID8gdHJ1ZSA6IGZhbHNlLFxyXG4gICAgICAgICAgICBJc01hbmRhdG9yeTogYy5Jc01hbmRhdG9yeVxyXG4gICAgICAgIH0pKTtcclxuICAgICAgICByZXR1cm4gZmllbGRzU2V0dGluZztcclxuICAgIH1cclxuICAgIHNldEFuZEFwcGx5U2VhcmNoUGFuZWxTZXR0aW5nRmllbGRzU2V0dGluZyhmaWVsZHNTZXR0aW5nOiBDb2x1bW5JbmZvVHlwZVtdKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3Qgc2VhcmNoUGFuZWxVaSA9IHRoaXMuc2VhcmNoUGFuZWxVaTtcclxuICAgICAgICBmaWVsZHNTZXR0aW5nLmZvckVhY2goKGMpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgZmllbGQgPSBzZWFyY2hQYW5lbFVpLl9kaWN0RmllbGRVaVtjLk5hbWVdO1xyXG4gICAgICAgICAgICBpZiAoZmllbGQpIHtcclxuICAgICAgICAgICAgICAgIHNlYXJjaFBhbmVsVWkuZmlyZUV2ZW50KCdDaGFuZ2VGaWVsZFZpc2libGUnLCBmaWVsZC5TZXR0aW5nLkNvbnRyb2xGaWVsZENhcHRpb24sICFjLkhpZGRlbik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIHVwZGF0ZVNlYXJjaFBhbmVsU2V0dGluZ3MoYWxsU2VhcmNoUGFuZWxTZXR0aW5nczogU2VhcmNoUGFuZWxTZXR0aW5nc1tdKTogdm9pZCB7XHJcbiAgICAgICAgYWxsU2VhcmNoUGFuZWxTZXR0aW5ncyA9IGFsbFNlYXJjaFBhbmVsU2V0dGluZ3MuZmlsdGVyKChjKSA9PiAhYy5Jc1ByaW1hcnkgJiYgIWMuSXNEZWxldGVkKTtcclxuICAgICAgICB0aGlzLl9hbGxTZWFyY2hQYW5lbFNldHRpbmdzU291cmNlLm5leHQoYWxsU2VhcmNoUGFuZWxTZXR0aW5ncyk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVtb3ZlU2VhcmNoUGFuZWxTZXR0aW5ncyhzZWFyY2hQYW5lbFNldHRpbmdzSWQ6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IGFsbFNlYXJjaFBhbmVsU2V0dGluZ3MgPSB0aGlzLl9hbGxTZWFyY2hQYW5lbFNldHRpbmdzU291cmNlLmdldFZhbHVlKCk7XHJcbiAgICAgICAgYWxsU2VhcmNoUGFuZWxTZXR0aW5ncy5maWx0ZXIoKGMpID0+IGMuSWQgIT09IHNlYXJjaFBhbmVsU2V0dGluZ3NJZCk7XHJcbiAgICAgICAgdGhpcy5fYWxsU2VhcmNoUGFuZWxTZXR0aW5nc1NvdXJjZS5uZXh0KGFsbFNlYXJjaFBhbmVsU2V0dGluZ3MpO1xyXG4gICAgfVxyXG5cclxuICAgIGNoYW5nZVNlbGVjdGVkU2VhcmNoUGFuZWwoc2VsZWN0ZWRTZWFyY2hQYW5lbFNldHRpbmdzSWQ6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX3NlbGVjdGVkU2VhcmNoUGFuZWxTZXR0aW5nc0lkU291cmNlLm5leHQoc2VsZWN0ZWRTZWFyY2hQYW5lbFNldHRpbmdzSWQpO1xyXG4gICAgfVxyXG5cclxuICAgIGxvYWRNZXRhQ29uZGl0aW9uc0NvbnRyb2xJbmZvcyh0eXBlRGVmSWQ6IHN0cmluZywgZmllbGREYk5hbWVzOiBzdHJpbmdbXSk6IE9ic2VydmFibGU8R2VuZXJhbENvbnRyb2xJbmZvTW9kZWxbXT4ge1xyXG4gICAgICAgIGNvbnN0IG1vID0gR2V0RGVmYXVsdE1vT2JqZWN0SW5mbyh0eXBlRGVmSWQpO1xyXG4gICAgICAgIHJldHVybiBvZih0aGlzLl9jb250cm9sSW5mb3NNZXRhb2JqZWN0KS5waXBlKFxyXG4gICAgICAgICAgICBzd2l0Y2hNYXAoKGNvbnRyb2xzSW5mbykgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKGNvbnRyb2xzSW5mby5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9mKGNvbnRyb2xzSW5mbyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZ2V0Q29udHJvbExpc3QobW8sIGZpZWxkRGJOYW1lcywgdHJ1ZSwgZmFsc2UpO1xyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgdGFwKChjb250cm9sc0luZm86IEdlbmVyYWxDb250cm9sSW5mb01vZGVsW10pID0+ICh0aGlzLl9jb250cm9sSW5mb3NNZXRhb2JqZWN0ID0gY29udHJvbHNJbmZvKSlcclxuICAgICAgICApO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIF9jcmVhdGVXb3JrZmxvd1NoYXJlQnV0dG9ucyhlOiBTaGFyZUJ1dHRvbnNDaG9pY2VEZWYpOiBzdHJpbmdbXSB7XHJcbiAgICAgICAgbGV0IHNoYXJlQnV0dG9uczogc3RyaW5nW10gPSBbXTtcclxuICAgICAgICBpZiAoZS5hZGQpIHtcclxuICAgICAgICAgICAgdGhpcy5fd29ya2Zsb3dTaGFyZUJ1dHRvbnMucHVzaChlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLl93b3JrZmxvd1NoYXJlQnV0dG9ucyA9IHRoaXMuX3dvcmtmbG93U2hhcmVCdXR0b25zLmZpbHRlcigoYykgPT4gYy5tby5JZCAhPT0gZS5tby5JZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdGhpcy5fd29ya2Zsb3dTaGFyZUJ1dHRvbnMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBbXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gdGhpcy5fd29ya2Zsb3dTaGFyZUJ1dHRvbnMgPSB0aGlzLl93b3JrZmxvd1NoYXJlQnV0dG9ucy5maWx0ZXIoKGMpID0+IGMubW8/LiRJc0NoZWNrZWQpO1xyXG4gICAgICAgIGlmICh0aGlzLl93b3JrZmxvd1NoYXJlQnV0dG9ucy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHNoYXJlQnV0dG9ucyA9IHRoaXMuX3dvcmtmbG93U2hhcmVCdXR0b25zWzBdLmNob2ljZUxpc3QubWFwKChkKSA9PiBkLlRpdGxlKTtcclxuICAgICAgICAgICAgY29uc3QgdW5TaGFyZUJ1dHRvbnM6IHN0cmluZ1tdID0gW107XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgdGhpcy5fd29ya2Zsb3dTaGFyZUJ1dHRvbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLl93b3JrZmxvd1NoYXJlQnV0dG9uc1tpXTtcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgc2hhcmVCdXR0b25zLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0uY2hvaWNlTGlzdC5tYXAoKGQpID0+IGQuVGl0bGUpLmluZGV4T2Yoc2hhcmVCdXR0b25zW2pdKSA8IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdW5TaGFyZUJ1dHRvbnMucHVzaChzaGFyZUJ1dHRvbnNbal0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBzaGFyZUJ1dHRvbnMgPSBzaGFyZUJ1dHRvbnMuZmlsdGVyKChjKSA9PiB1blNoYXJlQnV0dG9ucy5pbmRleE9mKGMpID09PSAtMSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBzaGFyZUJ1dHRvbnM7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgX2luaXRDcmVhdGVOZXdJbmxpbmVNbyhjb250ZXh0KTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCFjb250ZXh0KSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgZm9ybVNldHRpbmcgPSBjb250ZXh0LlNldHRpbmcuRm9ybVRlbXBsYXRlO1xyXG4gICAgICAgIGlmIChmb3JtU2V0dGluZykge1xyXG4gICAgICAgICAgICB0aGlzLmNyZWF0ZU5ld0lubGluZU1vKGZhbHNlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIF9pc0NvbXBvc2l0ZShjb250ZXh0KTogYm9vbGVhbiB7XHJcbiAgICAgICAgY29uc3QgcmVsYXRpb25UeXBlID0gQmFyc2FBcGkuQ29tbW9uLlV0aWwuVHJ5R2V0VmFsdWUoY29udGV4dC5TZXR0aW5nLCAnRXh0cmEuUmVsYXRpb24uUmVsYXRpb25UeXBlJyk7XHJcbiAgICAgICAgcmV0dXJuIHJlbGF0aW9uVHlwZSA9PT0gQmFyc2FBcGkuQ29tbW9uLkVudW1zLlJlbGF0aW9uVHlwZS5Db21wb3NpdGlvbjtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBfYWRkRXZlbnRMaXN0ZW5lcihjb250ZXh0OiBhbnkpOiB2b2lkIHtcclxuICAgICAgICBjb250ZXh0Lm9uKHtcclxuICAgICAgICAgICAgc2NvcGU6IHRoaXMsXHJcbiAgICAgICAgICAgIFNob3dDb250ZXh0TWVudTogdGhpcy5fc2hvd0NvbnRleHRNZW51LFxyXG4gICAgICAgICAgICBNYXNrQ2hhbmdlZDogdGhpcy5fbWFza0NoYW5nZWQsXHJcbiAgICAgICAgICAgIFZpZXdlck1hc2tDaGFuZ2VkOiB0aGlzLl92aWV3ZXJNYXNrQ2hhbmdlZCxcclxuICAgICAgICAgICAgVmlld2VyQ29udHJvbENoYW5nZWQ6IHRoaXMuX3ZpZXdlckNvbnRyb2xDaGFuZ2VkLFxyXG4gICAgICAgICAgICBWaXNpYmxlQ2hhbmdlZDogdGhpcy5fdmlzaWJsZUNoYW5nZWQsXHJcbiAgICAgICAgICAgIFJlYWRvbmx5Q2hhbmdlZDogdGhpcy5fcmVhZG9ubHlDaGFuZ2VkLFxyXG4gICAgICAgICAgICBNZW51SXRlbXNDaGFuZ2VkOiB0aGlzLl9tZW51SXRlbXNDaGFuZ2VkLFxyXG4gICAgICAgICAgICBUaXRsZUNoYW5nZWQ6IHRoaXMuX3RpdGxlQ2hhbmdlZCxcclxuICAgICAgICAgICAgU2VhcmNoUGFuZWxDaGFuZ2VkOiB0aGlzLl9zZWFyY2hQYW5lbENoYW5nZWQsXHJcbiAgICAgICAgICAgIFBhZ2luZ1NldHRpbmdDaGFuZ2VkOiB0aGlzLl9wYWdpbmdTZXR0aW5nQ2hhbmdlZCxcclxuICAgICAgICAgICAgVG9vbGJhckJ1dHRvbnNDaGFuZ2VkOiB0aGlzLl90b29sYmFyQnV0dG9uc0NoYW5nZWQsXHJcbiAgICAgICAgICAgIEVuYWJsZUNoYW5nZWQ6IHRoaXMuX2VuYWJsZUNoYW5nZWQsXHJcbiAgICAgICAgICAgIERlc3Ryb3k6IHRoaXMuX2Rlc3Ryb3lDaGFuZ2VkLFxyXG4gICAgICAgICAgICBFeGl0SW5saW5lRWRpdDogdGhpcy5fZXhpc3RJbmxpbmVFZGl0XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIF9pbml0aWFsaXplKGNvbnRleHQ6IGFueSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX2luaXRDYXJ0YWJsZXNGb3JtVGVtcGxhdGUoY29udGV4dCk7XHJcbiAgICAgICAgdGhpcy5faW5pdENvbmRpdGlvbmFsRm9ybWF0cyhjb250ZXh0KTtcclxuICAgICAgICB0aGlzLl9pbml0QWxsb3dJbmxpbmVFZGl0KGNvbnRleHQpO1xyXG4gICAgICAgIHRoaXMuX2luaXRPbmx5SW5saW5lRWRpdChjb250ZXh0KTtcclxuICAgICAgICB0aGlzLl9pbml0SW5saW5lRWRpdE1vZGUoY29udGV4dCk7XHJcbiAgICAgICAgdGhpcy5faW5pdFJlcG9ydChjb250ZXh0KTtcclxuICAgICAgICB0aGlzLl9pbml0Vmlld2VyQ29udHJvbChjb250ZXh0KTtcclxuICAgICAgICB0aGlzLl9pbml0SGlkZVRvb2xiYXIoY29udGV4dCk7XHJcbiAgICAgICAgdGhpcy5faW5pdFRvb2xiYXJCdXR0b25zKGNvbnRleHQpO1xyXG4gICAgICAgIHRoaXMuX2luaXRWaXNpYmxlKGNvbnRleHQpO1xyXG4gICAgICAgIHRoaXMuX2luaXRFbmFibGUoY29udGV4dCk7XHJcbiAgICAgICAgdGhpcy5faW5pdFRpdGxlKGNvbnRleHQpO1xyXG4gICAgICAgIHRoaXMuX2luaXRSZWFkb25seShjb250ZXh0KTtcclxuICAgICAgICB0aGlzLl9pbml0TW9EYXRhTGlzdChjb250ZXh0KTtcclxuICAgICAgICB0aGlzLl9pbml0UGFnaW5nU2V0dGluZyhjb250ZXh0KTtcclxuICAgICAgICB0aGlzLl9pbml0TWVudUl0ZW1zKGNvbnRleHQpO1xyXG4gICAgICAgIHRoaXMuX2luaXRTZWFyY2hwYW5lbChjb250ZXh0KTtcclxuICAgICAgICB0aGlzLl9pbml0Q3JlYXRlTmV3SW5saW5lTW8oY29udGV4dCk7XHJcbiAgICAgICAgdGhpcy5faW5pdEdyaWRGcmVlQ29sdW1uU2l6aW5nKGNvbnRleHQpO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIF9pbml0R3JpZEZyZWVDb2x1bW5TaXppbmcoY29udGV4dCk6IHZvaWQge1xyXG4gICAgICAgIGlmIChjb250ZXh0ICYmIGNvbnRleHQuU2V0dGluZy5WaWV3Py5HcmlkX0ZyZWVDb2x1bW5TaXppbmcpIHtcclxuICAgICAgICAgICAgdGhpcy5fZ3JpZEZyZWVDb2x1bW5TaXppbmckLm5leHQoY29udGV4dC5TZXR0aW5nLlZpZXc/LkdyaWRfRnJlZUNvbHVtblNpemluZyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIF9pbml0Q2FydGFibGVzRm9ybVRlbXBsYXRlKGNvbnRleHQpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBjYXJ0YWJsZVRlbXBsYXRlcyA9IGNvbnRleHQuU2V0dGluZy5DYXJ0YWJsZVRlbXBsYXRlcztcclxuICAgICAgICBpZiAoY2FydGFibGVUZW1wbGF0ZXMpIHtcclxuICAgICAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGNhcnRhYmxlVGVtcGxhdGVzKTtcclxuICAgICAgICAgICAga2V5cy5mb3JFYWNoKChrZXkpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgY2FydGFibGVUZW1wbGF0ZXNba2V5XSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgICAgICAgICBjYXJ0YWJsZVRlbXBsYXRlc1trZXldID0gQmFyc2FBcGkuRXh0LmRlY29kZShjYXJ0YWJsZVRlbXBsYXRlc1trZXldKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHRoaXMuX2NhcnRhYmxlVGVtcGxhdGVzJC5uZXh0KGNhcnRhYmxlVGVtcGxhdGVzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fY2FydGFibGVDaGlsZHNNbyhjb250ZXh0KTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBfaW5pdFNlYXJjaHBhbmVsKGNvbnRleHQpOiB2b2lkIHtcclxuICAgICAgICBpZiAoY29udGV4dCAmJiBjb250ZXh0Ll9zZWFyY2hQYW5lbENvbnRyb2wpIHtcclxuICAgICAgICAgICAgdGhpcy5fc2VhcmNoUGFuZWxDaGFuZ2VkKGNvbnRleHQuX3NlYXJjaFBhbmVsQ29udHJvbCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBfaW5pdENvbmRpdGlvbmFsRm9ybWF0cyhjb250ZXh0KTogdm9pZCB7XHJcbiAgICAgICAgaWYgKGNvbnRleHQgJiYgY29udGV4dC5TZXR0aW5nLlZpZXc/LkNvbmRpdGlvbmFsRm9ybWF0cykge1xyXG4gICAgICAgICAgICB0aGlzLl9jb25kaXRpb25hbEZvcm1hdHNDaGFuZ2VkKGNvbnRleHQuU2V0dGluZy5WaWV3Py5Db25kaXRpb25hbEZvcm1hdHMpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgX2luaXRNZW51SXRlbXMoY29udGV4dCk6IHZvaWQge1xyXG4gICAgICAgIGlmIChjb250ZXh0ICYmIGNvbnRleHQubWVudUl0ZW1zKSB7XHJcbiAgICAgICAgICAgIC8vIGNvbnN0IG5ld0l0ZW1zID0gY29udGV4dC5tZW51SXRlbXM7XHJcbiAgICAgICAgICAgIHRoaXMuX21lbnVJdGVtc0NoYW5nZWQoY29udGV4dC5tZW51SXRlbXMpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgX2luaXRSZXBvcnQoY29udGV4dCk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IHJlcG9ydCA9IEJhcnNhQXBpLkNvbW1vbi5VdGlsLlRyeUdldFZhbHVlKGNvbnRleHQsICdTZXR0aW5nLkV4dHJhLlJlcG9ydCcsIFtdKTtcclxuICAgICAgICB0aGlzLl9yZXBvcnRTb3VyY2UubmV4dChyZXBvcnQpO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBfaW5pdE1vRGF0YUxpc3QoY29udGV4dCk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IG1vRGF0YUxpc3QgPSBCYXJzYUFwaS5Db21tb24uVXRpbC5UcnlHZXRWYWx1ZShjb250ZXh0LCAnU2V0dGluZy5EYXRhLk1vRGF0YUxpc3QnLCBbXSk7XHJcbiAgICAgICAgdGhpcy5fbW9EYXRhTGlzdENoYW5nZWQobW9EYXRhTGlzdCk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgX2NhcnRhYmxlQ2hpbGRzTW8oY29udGV4dCk6IHZvaWQge1xyXG4gICAgICAgIGlmIChjb250ZXh0LlNldHRpbmcuQ2FydGFibGVDaGlsZHNNbykge1xyXG4gICAgICAgICAgICB0aGlzLl9jYXJ0YWJsZUNoaWxkc01vJC5uZXh0KGNvbnRleHQuU2V0dGluZy5DYXJ0YWJsZUNoaWxkc01vKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIF9pbml0UGFnaW5nU2V0dGluZyhjb250ZXh0KTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgcGFnaW5nU2V0dGluZyA9IEJhcnNhQXBpLkNvbW1vbi5VdGlsLlRyeUdldFZhbHVlKGNvbnRleHQsICdTZXR0aW5nLkRhdGEuUGFnaW5nJywgbnVsbCk7XHJcbiAgICAgICAgdGhpcy5fcGFnaW5nU2V0dGluZ0NoYW5nZWQocGFnaW5nU2V0dGluZyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIF9pbml0VGl0bGUoY29udGV4dCk6IHZvaWQge1xyXG4gICAgICAgIGxldCB0aXRsZSA9IEJhcnNhQXBpLkNvbW1vbi5VdGlsLlRyeUdldFZhbHVlKGNvbnRleHQsICd0aXRsZScsIG51bGwpO1xyXG4gICAgICAgIGlmICh0aXRsZSA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICB0aXRsZSA9IEJhcnNhQXBpLkNvbW1vbi5VdGlsLlRyeUdldFZhbHVlKGNvbnRleHQsICdTZXR0aW5nLkV4dHJhLlJlcG9ydC5DYXB0aW9uJywgJycpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl90aXRsZUNoYW5nZWQoeyB0ZXh0OiB0aXRsZSwgaW1hZ2U6ICcnIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBfaW5pdFJlYWRvbmx5KGNvbnRleHQpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCByZWFkb25seSA9IGNvbnRleHQucmVhZG9ubHkgPT09IHRydWUgPyB0cnVlIDogZmFsc2U7XHJcbiAgICAgICAgdGhpcy5fcmVhZG9ubHlDaGFuZ2VkKHJlYWRvbmx5KTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgX2luaXRFbmFibGUoY29udGV4dCk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IGVuYWJsZSA9IGNvbnRleHQuZW5hYmxlID09PSBmYWxzZSA/IGZhbHNlIDogdHJ1ZTtcclxuICAgICAgICB0aGlzLl9lbmFibGVDaGFuZ2VkKGVuYWJsZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIF9pbml0VmlzaWJsZShjb250ZXh0KTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgdmlzaWJsZSA9IGNvbnRleHQuU2V0dGluZy5Jc1Zpc2libGUgPT09IGZhbHNlID8gZmFsc2UgOiB0cnVlO1xyXG4gICAgICAgIHRoaXMuX3Zpc2libGVDaGFuZ2VkKHZpc2libGUpO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBfaW5pdFRvb2xiYXJCdXR0b25zKGNvbnRleHQpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBidXR0b25zID0gY29udGV4dC50bGJCdXR0b25zO1xyXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGJ1dHRvbnMpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3Rvb2xiYXJCdXR0b25zQ2hhbmdlZChidXR0b25zKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIF9pbml0SW5saW5lRWRpdE1vZGUoY29udGV4dCk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IGlubGluZUVkaXRNb2RlOiBib29sZWFuID0gY29udGV4dC5TZXR0aW5nPy5WaWV3Py5BdXRvSW5saW5lRWRpdDtcclxuICAgICAgICB0aGlzLl9pbmxpbmVFZGl0TW9kZVNvdXJjZS5uZXh0KGlubGluZUVkaXRNb2RlKTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgX2luaXRBbGxvd0lubGluZUVkaXQoY29udGV4dCk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IGFsbG93SW5saW5lRWRpdDogYm9vbGVhbiA9IGNvbnRleHQuU2V0dGluZz8uVmlldz8uQWxsb3dJbmxpbmVFZGl0O1xyXG4gICAgICAgIGNvbnN0IGFsbG93RWRpdCA9IGNvbnRleHQuU2V0dGluZy5FeHRyYT8uRGVmYXVsdENvbW1hbmRzQWNjZXNzPy5FZGl0O1xyXG4gICAgICAgIHRoaXMuX2FsbG93SW5saW5lRWRpdFNvdXJjZS5uZXh0KGFsbG93SW5saW5lRWRpdCAmJiBhbGxvd0VkaXQpO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBfaW5pdE9ubHlJbmxpbmVFZGl0KGNvbnRleHQpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBvbmx5SW5saW5lRWRpdDogYm9vbGVhbiA9IGNvbnRleHQuU2V0dGluZz8uVmlldz8uT25seUlubGluZUVkaXQ7XHJcbiAgICAgICAgdGhpcy5fb25seUlubGluZUVkaXRTb3VyY2UubmV4dChvbmx5SW5saW5lRWRpdCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIF9pbml0Vmlld2VyQ29udHJvbChjb250ZXh0KTogdm9pZCB7XHJcbiAgICAgICAgY29uc3Qgdmlld2VyQ29udHJvbCA9IGNvbnRleHQudmlld2VyQ29udHJvbDtcclxuICAgICAgICBpZiAodmlld2VyQ29udHJvbCkge1xyXG4gICAgICAgICAgICB0aGlzLl92aWV3ZXJDb250cm9sQ2hhbmdlZCh2aWV3ZXJDb250cm9sKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIF9pbml0SGlkZVRvb2xiYXIoY29udGV4dCk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IGhpZGVUb29sYmFyID0gQmFyc2FBcGkuQ29tbW9uLlV0aWwuVHJ5R2V0VmFsdWUoY29udGV4dCwgJ1NldHRpbmcuRXh0cmEuUmVwb3J0LkhpZGVUb29sYmFyJywgZmFsc2UpO1xyXG4gICAgICAgIHRoaXMuX2hpZGVUb29sYmFyU291cmNlLm5leHQoaGlkZVRvb2xiYXIpO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBfdW5zY3Vic2NyaWJlQ29udGV4dCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmNvbnRleHQudW4oJ1Nob3dDb250ZXh0TWVudScsIHRoaXMuX3Nob3dDb250ZXh0TWVudSk7XHJcbiAgICAgICAgdGhpcy5jb250ZXh0LnVuKCdNYXNrQ2hhbmdlZCcsIHRoaXMuX21hc2tDaGFuZ2VkKTtcclxuICAgICAgICB0aGlzLmNvbnRleHQudW4oJ1ZpZXdlckNvbnRyb2xDaGFuZ2VkJywgdGhpcy5fdmlld2VyQ29udHJvbENoYW5nZWQpO1xyXG4gICAgICAgIHRoaXMuY29udGV4dC51bignVmlld2VyTWFza0NoYW5nZWQnLCB0aGlzLl92aWV3ZXJNYXNrQ2hhbmdlZCk7XHJcbiAgICAgICAgdGhpcy5jb250ZXh0LnVuKCdWaXNpYmxlQ2hhbmdlZCcsIHRoaXMuX3Zpc2libGVDaGFuZ2VkKTtcclxuICAgICAgICB0aGlzLmNvbnRleHQudW4oJ1JlYWRvbmx5Q2hhbmdlZCcsIHRoaXMuX3JlYWRvbmx5Q2hhbmdlZCk7XHJcbiAgICAgICAgdGhpcy5jb250ZXh0LnVuKCdNZW51SXRlbXNDaGFuZ2VkJywgdGhpcy5fbWVudUl0ZW1zQ2hhbmdlZCk7XHJcbiAgICAgICAgdGhpcy5jb250ZXh0LnVuKCdUaXRsZUNoYW5nZWQnLCB0aGlzLl90aXRsZUNoYW5nZWQpO1xyXG4gICAgICAgIHRoaXMuY29udGV4dC51bignUGFnaW5nU2V0dGluZ0NoYW5nZWQnLCB0aGlzLl9wYWdpbmdTZXR0aW5nQ2hhbmdlZCk7XHJcbiAgICAgICAgdGhpcy5jb250ZXh0LnVuKCdUb29sYmFyQnV0dG9uc0NoYW5nZWQnLCB0aGlzLl90b29sYmFyQnV0dG9uc0NoYW5nZWQpO1xyXG4gICAgICAgIHRoaXMuY29udGV4dC51bignRW5hYmxlQ2hhbmdlZCcsIHRoaXMuX2VuYWJsZUNoYW5nZWQpO1xyXG4gICAgICAgIHRoaXMuY29udGV4dC51bignRGVzdHJveScsIHRoaXMuX2Rlc3Ryb3lDaGFuZ2VkKTtcclxuICAgICAgICB0aGlzLmNvbnRleHQudW4oJ0V4aXRJbmxpbmVFZGl0JywgdGhpcy5fZXhpc3RJbmxpbmVFZGl0KTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBfY29uZGl0aW9uYWxGb3JtYXRzQ2hhbmdlZChjb25kaXRpb25hbEZvcm1hdHM6IGFueSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX2NvbmRpdGlvbmFsRm9ybWF0c1NvdXJjZS5uZXh0KGNvbmRpdGlvbmFsRm9ybWF0cyk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgX21vRGF0YUxpc3RDaGFuZ2VkKG1vRGF0YUxpc3QpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLm1vRGF0YUxpc3RTb3VyY2UubmV4dChtb0RhdGFMaXN0KTtcclxuICAgICAgICBpZiAodGhpcy5jb250ZXh0KSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2NhcnRhYmxlQ2hpbGRzTW8odGhpcy5jb250ZXh0KTtcclxuICAgICAgICAgICAgdGhpcy5faW5pdENhcnRhYmxlc0Zvcm1UZW1wbGF0ZSh0aGlzLmNvbnRleHQpO1xyXG4gICAgICAgICAgICB0aGlzLl9jaGVja0NhcnRhYmxlV29ya2Zsb3dTaGFyZUJ1dHRvbnMobW9EYXRhTGlzdCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIF9jaGVja0NhcnRhYmxlV29ya2Zsb3dTaGFyZUJ1dHRvbnMobW9EYXRhTGlzdDogTWV0YW9iamVjdERhdGFNb2RlbFtdKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgaGFzU2VsZWN0ZWQgPSBtb0RhdGFMaXN0LnNvbWUoKGMpID0+IGMuJElzQ2hlY2tlZCk7XHJcbiAgICAgICAgY29uc3QgbW9JZHMgPSBtb0RhdGFMaXN0Lm1hcCgoYykgPT4gYy5JZCk7XHJcbiAgICAgICAgdGhpcy5fd29ya2Zsb3dTaGFyZUJ1dHRvbnMgPSB0aGlzLl93b3JrZmxvd1NoYXJlQnV0dG9ucy5maWx0ZXIoKGMpID0+IG1vSWRzLmluZGV4T2YoYy5tby5JZCkgPiAtMSk7XHJcbiAgICAgICAgaWYgKCFoYXNTZWxlY3RlZCkge1xyXG4gICAgICAgICAgICB0aGlzLl90b29sYmFyQnV0dG9uc1dvcmtmbG93QnV0dG9ucy5uZXh0KFtdKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIF92aWV3ZXJDb250cm9sQ2hhbmdlZCh2aWV3ZXJDb250cm9sKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fdmlld2VyQ29udHJvbFNvdXJjZS5uZXh0KHZpZXdlckNvbnRyb2wpO1xyXG4gICAgICAgIHRoaXMuX2luaXRDb25kaXRpb25hbEZvcm1hdHModGhpcy5jb250ZXh0KTtcclxuICAgICAgICB0aGlzLl9pbml0SW5saW5lRWRpdE1vZGUodGhpcy5jb250ZXh0KTtcclxuICAgICAgICB0aGlzLl9pbml0QWxsb3dJbmxpbmVFZGl0KHRoaXMuY29udGV4dCk7XHJcbiAgICAgICAgdGhpcy5faW5pdE9ubHlJbmxpbmVFZGl0KHRoaXMuY29udGV4dCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIF9tYXNrQ2hhbmdlZChtYXNrOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fbWFza1NvdXJjZS5uZXh0KG1hc2spO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIF9zaG93Q29udGV4dE1lbnUoeHkpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9zaG93Q29udGV4dE1lbnVTb3VyY2UubmV4dCh4eSk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgX3ZpZXdlck1hc2tDaGFuZ2VkKHZpZXdlck1hc2s6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl92aWV3ZXJNYXNrU291cmNlLm5leHQodmlld2VyTWFzayk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIF9yZWFkb25seUNoYW5nZWQocmVhZG9ubHk6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9yZWFkb25seVNvdXJjZS5uZXh0KHJlYWRvbmx5KTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgX3Zpc2libGVDaGFuZ2VkKHZpZXdlck1hc2s6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl92aXNpYmxlU291cmNlLm5leHQodmlld2VyTWFzayk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgX3JlbW92ZUV4dHJhTWVudUl0ZW1zKG1lbnVJdGVtczogTWVudUl0ZW1bXSk6IE1lbnVJdGVtW10ge1xyXG4gICAgICAgIGlmICghbWVudUl0ZW1zKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBbXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgbmV3SXRlbXMgPSBtZW51SXRlbXMuZmlsdGVyKFxyXG4gICAgICAgICAgICAoYykgPT4gYy5pdGVtSWQgIT09ICdEZWxldGUnICYmIGMuaXRlbUlkICE9PSAnQWRkVG9MaXN0JyAmJiBjLml0ZW1JZCAhPT0gJ1JlbW92ZUZyb21MaXN0J1xyXG4gICAgICAgICk7XHJcbiAgICAgICAgcmV0dXJuIG5ld0l0ZW1zO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIF9tZW51SXRlbXNDaGFuZ2VkKG1lbnVJdGVtczogYW55W10pOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBuZXdNZW51SXRlbXMgPSB0aGlzLl9yZW1vdmVFeHRyYU1lbnVJdGVtcyhtZW51SXRlbXMpO1xyXG4gICAgICAgIHRoaXMuX21lbnVJdGVtc1NvdXJjZS5uZXh0KG5ld01lbnVJdGVtcyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIF90aXRsZUNoYW5nZWQodGl0bGVPYmo6IHsgdGV4dDogc3RyaW5nOyBpbWFnZTogc3RyaW5nIH0pOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl90aXRsZVNvdXJjZS5uZXh0KHRpdGxlT2JqKTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgX3NlYXJjaFBhbmVsQ2hhbmdlZChzZWFyY2hQYW5lbDogYW55KTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fc2VhcmNoUGFuZWxVaVNvdXJjZS5uZXh0KHNlYXJjaFBhbmVsKTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgX3BhZ2luZ1NldHRpbmdDaGFuZ2VkKHBhZ2VpbmdTZXR0aW5nOiBhbnkpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9wYWdpbmdTZXR0aW5nU291cmNlLm5leHQocGFnZWluZ1NldHRpbmcpO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBfdG9vbGJhckJ1dHRvbnNDaGFuZ2VkKGJ1dHRvbnM6IGFueVtdKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fdG9vbGJhckJ1dHRvbnNTb3VyY2UubmV4dChidXR0b25zKTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgX2VuYWJsZUNoYW5nZWQoZW5hYmxlOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fZW5hYmxlU291cmNlLm5leHQoZW5hYmxlKTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgX2Rlc3Ryb3lDaGFuZ2VkKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX2Rlc3Ryb3lTb3VyY2UubmV4dCgpO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIF9leGlzdElubGluZUVkaXQoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5faW5saW5lRWRpdE1vZGVTb3VyY2UubmV4dChmYWxzZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIF9hZGREZWZhdWx0U2VhcmNoUGFuZWxTZXR0aW5ncyhzZWFyY2hQYW5lbDogYW55KTogdm9pZCB7XHJcbiAgICAgICAgY29uc3Qgc2VhcmNoTW8gPSBKU09OLnN0cmluZ2lmeShzZWFyY2hQYW5lbD8uTW8gPz8gbmV3IE1ldGFvYmplY3REYXRhTW9kZWwoKSk7XHJcbiAgICAgICAgY29uc3QgU3RhbmRhcmRUZXh0ID0gdGhpcy5fYmJiUGlwZS50cmFuc2Zvcm0oJ1N0YW5kYXJkJyk7XHJcbiAgICAgICAgY29uc3Qgc3RhbmRhcmRTZXR0aW5ncyA9IHtcclxuICAgICAgICAgICAgSWQ6ICcnLFxyXG4gICAgICAgICAgICAkQ2FwdGlvbjogU3RhbmRhcmRUZXh0LFxyXG4gICAgICAgICAgICBJc1N0YW5kYXJkOiB0cnVlLFxyXG4gICAgICAgICAgICBJc0RlZmF1bHQ6IHRydWUsXHJcbiAgICAgICAgICAgIElzUHVibGljOiB0cnVlLFxyXG4gICAgICAgICAgICBJc1ByaW1hcnk6IHRydWUsXHJcbiAgICAgICAgICAgIEFwcGx5QXV0b21hdGljYWxseTogdHJ1ZSxcclxuICAgICAgICAgICAgSGlkZVNlYXJjaFBhbmVsOiBmYWxzZSxcclxuICAgICAgICAgICAgVGl0bGU6IFN0YW5kYXJkVGV4dCxcclxuICAgICAgICAgICAgU2VhcmNoTW86IHNlYXJjaE1vLFxyXG4gICAgICAgICAgICBSZXBvcnRJZDogJydcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMuX2RlZmF1bHRTZWFyY2hQYW5lbFNldHRpbmdzU291cmNlLm5leHQoc3RhbmRhcmRTZXR0aW5ncyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIF9sb2FkU2VhcmNoUGFuZWxTZXR0aW5ncyhyZXBvcnRJZCk6IHZvaWQge1xyXG4gICAgICAgIEJhcnNhQXBpLkJ3LlJ1bkJsTWV0aG9kQXN5bmMoe1xyXG4gICAgICAgICAgICBQYXJhbWV0ZXJzOiBbcmVwb3J0SWRdLFxyXG4gICAgICAgICAgICBNZXRob2Q6ICdMb2FkQWxsVXNlclNlYXJjaFBhbmVsU2V0dGluZ3MnLFxyXG4gICAgICAgICAgICBTdWNjZXNzRm46IChhbGxTZWFyY2hQYW5lbFNldHRpbmdzKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShhbGxTZWFyY2hQYW5lbFNldHRpbmdzKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGFsbFNlYXJjaFBhbmVsU2V0dGluZ3MgPSBCYXJzYUFwaS5Cdy5fdW53cmFwKGFsbFNlYXJjaFBhbmVsU2V0dGluZ3MpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2FsbFNlYXJjaFBhbmVsU2V0dGluZ3NTb3VyY2UubmV4dChhbGxTZWFyY2hQYW5lbFNldHRpbmdzKTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBkZWZhdWx0U2VhcmNoID0gYWxsU2VhcmNoUGFuZWxTZXR0aW5ncy5maW5kKChjKSA9PiBjLklzRGVmYXVsdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRlZmF1bHRTZWFyY2gpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2VsZWN0ZWRTZWFyY2hQYW5lbFNldHRpbmdzSWRTb3VyY2UubmV4dChkZWZhdWx0U2VhcmNoLklkKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIEZhaWxGbjogKCkgPT4ge31cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCByZXNldFNlYXJjaFBhbmVsU2V0dGluZ3Moc2VhcmNoUGFuZWxVaSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuY2xlYXJTZWFyY2goKTtcclxuICAgICAgICBjb25zdCBmaWVsZFVpID0gc2VhcmNoUGFuZWxVaS5fZGljdEZpZWxkVWk7XHJcbiAgICAgICAgY29uc3QgY2hhbmdlZCA9IHNlYXJjaFBhbmVsVWkuTW8uR2V0Q2hhbmdlZE9iamVjdCgpO1xyXG4gICAgICAgIE9iamVjdC5rZXlzKGNoYW5nZWQpLmZvckVhY2goKGMpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgZmllbGQgPSBzZWFyY2hQYW5lbFVpLl9kaWN0RmllbGRVaVtjXTtcclxuICAgICAgICAgICAgaWYgKGZpZWxkKSB7XHJcbiAgICAgICAgICAgICAgICBmaWVsZC5TZXRWYWx1ZShudWxsKTtcclxuICAgICAgICAgICAgICAgIHNlYXJjaFBhbmVsVWkuTW8uU2V0RlZhbHVlKGMsIG51bGwpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHNlYXJjaFBhbmVsVWkuTW8uU2V0U3RhdGUoJ05ldycpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIE9iamVjdC5rZXlzKGZpZWxkVWkpLmZvckVhY2goKGMpID0+IHtcclxuICAgICAgICAgICAgaWYgKGMgIT09ICckU2VhcmNoJyAmJiBmaWVsZFVpW2NdLkxheW91dENvbnRyb2wpIHtcclxuICAgICAgICAgICAgICAgIHNlYXJjaFBhbmVsVWkuZmlyZUV2ZW50KCdDaGFuZ2VGaWVsZFZpc2libGUnLCBmaWVsZFVpW2NdLlNldHRpbmcuQ29udHJvbEZpZWxkQ2FwdGlvbiwgdHJ1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBfbG9hZENhcnRhYmxlVGVtcGxhdGUoa2V5T2ZDYXJ0YWJsZVRlbXBsYXRlczogU2V0PHN0cmluZz4pOiB2b2lkIHtcclxuICAgICAgICBsZXQgY2FydGFibGVUZW1wbGF0ZXMgPSB0aGlzLl9jYXJ0YWJsZVRlbXBsYXRlcyQuZ2V0VmFsdWUoKTtcclxuICAgICAgICBpZiAoIWNhcnRhYmxlVGVtcGxhdGVzKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3Qga2V5czogQ2FydGFibGVUZW1wbGF0ZUtleVtdID0gW107XHJcblxyXG4gICAgICAgIGtleU9mQ2FydGFibGVUZW1wbGF0ZXMuZm9yRWFjaCgoa2V5KSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlcyA9IGtleS5zcGxpdCh0aGlzLl9jYXJ0YWJsZUtleVNlcGVyYXRvcik7XHJcbiAgICAgICAgICAgIGlmICghY2FydGFibGVUZW1wbGF0ZXNba2V5XSkge1xyXG4gICAgICAgICAgICAgICAga2V5cy5wdXNoKHsgVHlwZURlZklkOiB2YWx1ZXNbMF0sIFNldHRpbmdzSWQ6IHZhbHVlc1sxXSB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmIChrZXlzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX2FwaVNlcnZpY2UuR2V0Q2FydGFibGVUZW1wbGF0ZShrZXlzKS5zdWJzY3JpYmUoKGMpID0+IHtcclxuICAgICAgICAgICAgaWYgKCFjKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgdGVtcGxhdGVzOiB7IFtrZXk6IHN0cmluZ106IEZvcm1TZXR0aW5nIH0gPSB7fTtcclxuICAgICAgICAgICAgT2JqZWN0LmtleXMoYykuZm9yRWFjaCgoY0lkKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZXNbY0lkXSA9IEJhcnNhQXBpLkV4dC5kZWNvZGUoY1tjSWRdKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGNhcnRhYmxlVGVtcGxhdGVzID0geyAuLi5jYXJ0YWJsZVRlbXBsYXRlcywgLi4udGVtcGxhdGVzIH07XHJcbiAgICAgICAgICAgIHRoaXMuX2NhcnRhYmxlVGVtcGxhdGVzJC5uZXh0KGNhcnRhYmxlVGVtcGxhdGVzKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxufVxyXG4iXX0=
|
|
824
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWx2bWFpbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2Etbm92aW4tcmF5LWNvcmUvc3JjL2xpYi9zZXJ2aWNlcy91bHZtYWluLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBYyxFQUFFLEVBQUUsT0FBTyxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUM3RixPQUFPLEVBQUUsS0FBSyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEgsT0FBTyxFQUNILFFBQVEsRUFFUixtQkFBbUIsRUFTdEIsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQ0gsd0JBQXdCLEVBQ3hCLGlCQUFpQixFQUNqQixjQUFjLEVBQ2Qsc0JBQXNCLEVBQ3RCLGtCQUFrQixFQUNyQixNQUFNLGNBQWMsQ0FBQzs7OztBQUl0QixNQUFNLE9BQU8sY0FBYztJQXdGdkIsWUFBb0IsUUFBMEIsRUFBVSxXQUF1QjtRQUEzRCxhQUFRLEdBQVIsUUFBUSxDQUFrQjtRQUFVLGdCQUFXLEdBQVgsV0FBVyxDQUFZO1FBdkYvRSxxQkFBZ0IsR0FBRyxJQUFJLGVBQWUsQ0FBd0IsRUFBRSxDQUFDLENBQUM7UUErQmxFLHdCQUFtQixHQUFHLElBQUksZUFBZSxDQUFpQyxFQUFFLENBQUMsQ0FBQztRQUM5RSx1QkFBa0IsR0FBRyxJQUFJLGVBQWUsQ0FBZ0QsRUFBRSxDQUFDLENBQUM7UUFLcEYsMEJBQXFCLEdBQUcsSUFBSSxPQUFPLEVBQVUsQ0FBQztRQUM5QywyQkFBc0IsR0FBRyxJQUFJLGVBQWUsQ0FBVSxLQUFLLENBQUMsQ0FBQztRQUM3RCxzQkFBaUIsR0FBRyxJQUFJLE9BQU8sRUFBTyxDQUFDO1FBQ3ZDLG1CQUFjLEdBQUcsSUFBSSxPQUFPLEVBQU8sQ0FBQztRQUNwQyx5QkFBb0IsR0FBRyxJQUFJLGVBQWUsQ0FBVSxLQUFLLENBQUMsQ0FBQztRQUMzRCxlQUFVLEdBQUcsSUFBSSxlQUFlLENBQVUsS0FBSyxDQUFDLENBQUM7UUFDakQsb0JBQWUsR0FBRyxJQUFJLGVBQWUsQ0FBVSxLQUFLLENBQUMsQ0FBQztRQUN0RCxpQkFBWSxHQUFHLElBQUksZUFBZSxDQUFVLEtBQUssQ0FBQyxDQUFDO1FBQ25ELDhCQUF5QixHQUFHLElBQUksZUFBZSxDQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQzNELGtCQUFhLEdBQUcsSUFBSSxlQUFlLENBQU0sSUFBSSxDQUFDLENBQUM7UUFDL0MseUJBQW9CLEdBQUcsSUFBSSxlQUFlLENBQU0sSUFBSSxDQUFDLENBQUM7UUFDdEQsdUJBQWtCLEdBQUcsSUFBSSxlQUFlLENBQVUsSUFBSSxDQUFDLENBQUM7UUFDeEQsZ0JBQVcsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO1FBQ2xDLGdCQUFXLEdBQUcsSUFBSSxlQUFlLENBQVUsS0FBSyxDQUFDLENBQUM7UUFDbEQsMkJBQXNCLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQUM3QyxzQkFBaUIsR0FBRyxJQUFJLGVBQWUsQ0FBVSxLQUFLLENBQUMsQ0FBQztRQUN4RCxtQkFBYyxHQUFHLElBQUksZUFBZSxDQUFVLElBQUksQ0FBQyxDQUFDO1FBQ3BELGtCQUFhLEdBQUcsSUFBSSxlQUFlLENBQVUsSUFBSSxDQUFDLENBQUM7UUFDbkQsb0JBQWUsR0FBRyxJQUFJLGVBQWUsQ0FBVSxLQUFLLENBQUMsQ0FBQztRQUN0RCxxQkFBZ0IsR0FBRyxJQUFJLGVBQWUsQ0FBYSxFQUFFLENBQUMsQ0FBQztRQUN2RCwwQkFBcUIsR0FBRyxJQUFJLGVBQWUsQ0FBVSxLQUFLLENBQUMsQ0FBQztRQUM1RCwwQkFBcUIsR0FBRyxJQUFJLGVBQWUsQ0FBVSxLQUFLLENBQUMsQ0FBQztRQUM1RCwyQkFBc0IsR0FBRyxJQUFJLGVBQWUsQ0FBVSxLQUFLLENBQUMsQ0FBQztRQUM3RCwwQkFBcUIsR0FBRyxHQUFHLENBQUM7UUFDNUIsaUJBQVksR0FBRyxJQUFJLGVBQWUsQ0FBa0M7WUFDeEUsSUFBSSxFQUFFLEVBQUU7WUFDUixLQUFLLEVBQUUsRUFBRTtTQUNaLENBQUMsQ0FBQztRQUNLLHVCQUFrQixHQUFHLElBQUksZUFBZSxDQUFVLEtBQUssQ0FBQyxDQUFDO1FBRXpELHlCQUFvQixHQUFHLElBQUksZUFBZSxDQUFNLElBQUksQ0FBQyxDQUFDO1FBRXRELHlCQUFvQixHQUFHLElBQUksZUFBZSxDQUF1QixJQUFJLENBQUMsQ0FBQztRQUN2RSwwQkFBcUIsR0FBRyxJQUFJLGVBQWUsQ0FBUSxFQUFFLENBQUMsQ0FBQztRQUN2RCxtQ0FBOEIsR0FBRyxJQUFJLGVBQWUsQ0FBUSxFQUFFLENBQUMsQ0FBQztRQUNoRSxtQkFBYyxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUFDckMsNkJBQXdCLEdBQUcsSUFBSSxDQUFDO1FBQ2hDLDRCQUF1QixHQUE4QixFQUFFLENBQUM7UUFDeEQseUNBQW9DLEdBQUcsSUFBSSxlQUFlLENBQVMsRUFBRSxDQUFDLENBQUM7UUFDdkUsc0NBQWlDLEdBQUcsSUFBSSxPQUFPLEVBQXVCLENBQUM7UUFDdkUsa0NBQTZCLEdBQUcsSUFBSSxlQUFlLENBQXdCLEVBQUUsQ0FBQyxDQUFDO1FBQy9FLHlCQUFvQixHQUFHLElBQUksZUFBZSxDQUF1QixJQUFJLENBQUMsQ0FBQztRQUN2RSxzQkFBaUIsR0FBRyxJQUFJLGVBQWUsQ0FBVSxLQUFLLENBQUMsQ0FBQztRQUN4RCx5Q0FBb0MsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO1FBQzNELGlDQUE0QixHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUFDbkQsZ0NBQTJCLEdBQUcsSUFBSSxlQUFlLENBQVUsS0FBSyxDQUFDLENBQUM7UUFDbEUsMkJBQXNCLEdBQUcsSUFBSSxlQUFlLENBQTZCLElBQUksQ0FBQyxDQUFDO1FBQy9FLDRCQUF1QixHQUFHLElBQUksZUFBZSxDQUFVLEtBQUssQ0FBQyxDQUFDO1FBQzlELDBCQUFxQixHQUE0QixFQUFFLENBQUM7UUFHeEQsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsY0FBYzthQUM5QixZQUFZLEVBQUU7YUFDZCxJQUFJLENBQ0QsU0FBUyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsRUFDM0IsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDLENBQUMsRUFDMUMsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQzNDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQ3BEO2FBQ0EsU0FBUyxFQUFFLENBQUM7UUFDakIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO1FBQ3JHLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFlBQVksRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7UUFDMUYsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO1FBQzNHLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFlBQVksRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7UUFDN0YsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7UUFDL0UsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsWUFBWSxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztRQUMxRixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWSxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztRQUNyRixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztRQUNuRixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsWUFBWSxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztRQUN2RixJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFlBQVksRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7UUFDbEcsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNuRSxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxJQUFJLENBQ3ZELFNBQVMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQzNCLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLE1BQU0sR0FBRyxDQUFDLENBQUMsRUFDcEMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxLQUFLLGVBQWUsSUFBSSxDQUFDLENBQUMsTUFBTSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQzdGLENBQUM7UUFDRixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztRQUVqRixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxJQUFJLENBQy9ELFNBQVMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQzNCLEdBQUcsQ0FBQyxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLDhCQUE4QixDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQ3pFLENBQUM7UUFDRixJQUFJLENBQUMsOEJBQThCLEdBQUcsSUFBSSxDQUFDLG9DQUFvQyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQy9GLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFlBQVksRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7UUFDakcsSUFBSSxDQUFDLGVBQWUsR0FBRyxhQUFhLENBQUM7WUFDakMsSUFBSSxDQUFDLDhCQUE4QixDQUFDLFlBQVksRUFBRTtZQUNsRCxJQUFJLENBQUMscUJBQXFCLENBQUMsWUFBWSxFQUFFO1NBQzVDLENBQUMsQ0FBQyxJQUFJLENBQ0gsU0FBUyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsRUFDM0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUNoQixDQUFDLENBQUM7WUFDRSxDQUFDLENBQUMsRUFBRTtZQUNKLENBQUMsQ0FBQztnQkFDSSxHQUFHLE1BQU07Z0JBQ1QsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO29CQUNiLEdBQUcsQ0FBQztvQkFDSixRQUFRLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxTQUFTLElBQUksQ0FBQyxDQUFDLE1BQU0sS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSztpQkFDdEUsQ0FBQyxDQUFDO2FBQ04sQ0FDVixFQUNELEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQ04sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FDbEcsRUFDRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUNOLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQ3ZHLENBQ0osQ0FBQztRQUNGLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNoRyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUMvRCxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDdEcsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBRXJGLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDbkUsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDakUsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDakUsSUFBSSxDQUFDLHNCQUFzQixHQUFHLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUMvRSxJQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDLDJCQUEyQixDQUFDLFlBQVksRUFBRSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDLENBQUM7UUFDMUcsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsWUFBWSxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzlFLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxhQUFhLENBQUM7WUFDekMsSUFBSSxDQUFDLDZCQUE2QixDQUFDLFlBQVksRUFBRTtZQUNqRCxJQUFJLENBQUMsaUNBQWlDLENBQUMsWUFBWSxFQUFFO1NBQ3hELENBQUMsQ0FBQyxJQUFJLENBQ0gsR0FBRyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsZUFBZSxDQUFDLEVBQUUsRUFBRTtZQUNuQyxJQUFJLGVBQWUsSUFBSSxXQUFXLEVBQUUsQ0FBQztnQkFDakMsZUFBZSxDQUFDLFNBQVMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDbEUsV0FBVyxHQUFHLENBQUMsZUFBZSxFQUFFLEdBQUcsV0FBVyxDQUFDLENBQUM7WUFDcEQsQ0FBQztZQUNELE9BQU8sV0FBVyxDQUFDO1FBQ3ZCLENBQUMsQ0FBQyxFQUNGLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFDUixXQUFXLENBQUMsQ0FBQyxDQUFDLENBQ2pCLENBQUM7UUFDRixJQUFJLENBQUMsOEJBQThCLEdBQUcsSUFBSSxDQUFDLG9DQUFvQzthQUMxRSxZQUFZLEVBQUU7YUFDZCxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQyxDQUFDO1FBQ2xDLElBQUksQ0FBQyw0QkFBNEIsR0FBRyxhQUFhLENBQUM7WUFDOUMsSUFBSSxDQUFDLDhCQUE4QjtZQUNuQyxJQUFJLENBQUMsdUJBQXVCO1NBQy9CLENBQUMsQ0FBQyxJQUFJLENBQ0gsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsUUFBUSxDQUFDLEVBQUUsRUFBRSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsRUFDM0QsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUNqQixDQUFDO0lBQ04sQ0FBQztJQUNELElBQUksV0FBVztRQUNYLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ2pELENBQUM7SUFDRCxJQUFJLGdCQUFnQjtRQUNoQixPQUFPLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN0RCxDQUFDO0lBQ0QsSUFBSSxxQkFBcUI7UUFDckIsT0FBTyxJQUFJLENBQUMsc0JBQXNCLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDdEQsQ0FBQztJQUNELElBQUksbUJBQW1CO1FBQ25CLE9BQU8sSUFBSSxDQUFDLG9CQUFvQixDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3BELENBQUM7SUFDRCxJQUFJLFNBQVM7UUFDVCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDMUMsQ0FBQztJQUNELElBQUksY0FBYztRQUNkLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUMvQyxDQUFDO0lBQ0QsSUFBSSxXQUFXO1FBQ1gsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzVDLENBQUM7SUFDRCxJQUFJLGlCQUFpQjtRQUNqQixPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUNsRCxDQUFDO0lBQ0QsSUFBSSxrQkFBa0I7UUFDbEIsT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDbkQsQ0FBQztJQUNELElBQUksYUFBYTtRQUNiLE9BQU8sSUFBSSxDQUFDLG9CQUFvQixDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2hELENBQUM7SUFDRCxJQUFJLFFBQVE7UUFDUixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQzdDLENBQUM7SUFDRCxJQUFJLHNCQUFzQjtRQUN0QixPQUFPLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUN6RCxDQUFDO0lBQ0QsSUFBSSxnQkFBZ0I7UUFDaEIsT0FBTyxJQUFJLENBQUMsdUJBQXVCLENBQUMsWUFBWSxFQUFFLENBQUMsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUMsQ0FBQztJQUNwRixDQUFDO0lBQ0QsSUFBSSxlQUFlO1FBQ2YsT0FBTyxJQUFJLENBQUMsdUJBQXVCLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDbkQsQ0FBQztJQUNELElBQUksY0FBYztRQUNkLE9BQU8sSUFBSSxDQUFDLG9CQUFvQixDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3BELENBQUM7SUFDRCxhQUFhLENBQUMsYUFBNEI7UUFDdEMsT0FBTyxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFDRCxVQUFVLENBQUMsSUFBYTtRQUNwQixJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFDRCxnQkFBZ0IsQ0FBQyxRQUFnQjtRQUM3QixJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFDRCxnQkFBZ0I7UUFDWixJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFDRCxzQkFBc0IsQ0FBQyxHQUFZO1FBQy9CLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUNELG9CQUFvQixDQUFDLE1BQWMsRUFBRSxPQUFhO1FBQzlDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUN0RCxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2xCLE9BQU87UUFDWCxDQUFDO1FBQ0QsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sS0FBSyxNQUFNLENBQUMsQ0FBQztRQUNyRCxJQUFJLEdBQUcsRUFBRSxDQUFDO1lBQ04sd0JBQXdCLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQzNDLENBQUM7SUFDTCxDQUFDO0lBQ0QsMkJBQTJCLENBQUMsQ0FBd0I7UUFDaEQsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsMkJBQTJCLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDOUQsTUFBTSxLQUFLLEdBQUcsaUJBQWlCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ3hDLElBQUksRUFBRSxFQUFFO1lBQ1IsSUFBSSxFQUFFLENBQUM7WUFDUCxNQUFNLEVBQUUsQ0FBQztZQUNULElBQUksRUFBRSxJQUFJO1lBQ1YscUJBQXFCLEVBQUUsSUFBSTtZQUMzQixPQUFPLEVBQUUsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxFQUFFO1lBQ3RGLE9BQU8sRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLDhCQUE4QixDQUFDLENBQUMsQ0FBQztZQUN0RCxTQUFTLEVBQUUsS0FBSztTQUNuQixDQUFDLENBQUMsQ0FBQztRQUNKLElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUNELHFCQUFxQixDQUFDLEVBQXVCO1FBQ3pDLG1DQUFtQztRQUNuQyxNQUFNLEVBQUUsUUFBUSxFQUFFLEdBQUcsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDO1FBQ2xDLE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7SUFDRCw4QkFBOEIsQ0FBQyxXQUE2QjtRQUN4RCxRQUFRLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMseUNBQXlDLEVBQUUsT0FBTyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDakYsSUFBSSxHQUFHLEtBQUssSUFBSSxFQUFFLENBQUM7Z0JBQ2YsSUFBSSxDQUFDLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO29CQUNyQyxNQUFNLFNBQVMsR0FBRyxDQUFDLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQ3pFLElBQUksU0FBUyxFQUFFLENBQUM7d0JBQ1osQ0FBQyxDQUFDLGNBQWMsQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLEVBQUUsR0FBRyxFQUFFOzRCQUNoRCw0Q0FBNEM7d0JBQ2hELENBQUMsQ0FBQyxDQUFDO29CQUNQLENBQUM7Z0JBQ0wsQ0FBQyxDQUFDLENBQUM7Z0JBQ0gsMEJBQTBCO2dCQUMxQixpQkFBaUI7Z0JBQ2pCLGtEQUFrRDtnQkFDbEQsS0FBSztnQkFDTCwwREFBMEQ7Z0JBQzFELHNEQUFzRDtnQkFDdEQsd0VBQXdFO2dCQUN4RSxPQUFPO2dCQUNQLDZDQUE2QztnQkFFN0Msc0NBQXNDO2dCQUN0Qyw4Q0FBOEM7Z0JBQzlDLDJDQUEyQztnQkFDM0MsY0FBYztnQkFDZCxxREFBcUQ7Z0JBQ3JELG9CQUFvQjtnQkFDcEIsY0FBYztnQkFDZCxtRkFBbUY7Z0JBQ25GLG9CQUFvQjtnQkFDcEIsWUFBWTtnQkFDWixXQUFXO2dCQUNYLEtBQUs7WUFDVCxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsUUFBUSxDQUFDLEtBQWE7UUFDbEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFDRCxxQkFBcUIsQ0FBQyxHQUFhO1FBQy9CLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDbkgsQ0FBQztJQUNELFVBQVUsQ0FBQyxPQUFPO1FBQ2QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUNELFdBQVcsQ0FBQyxHQUFZO1FBQ3BCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFDRCxnQkFBZ0IsQ0FBQyxHQUFZO1FBQ3pCLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFDRCxhQUFhLENBQUMsR0FBWTtRQUN0QixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQsaUJBQWlCLENBQUMsU0FBa0I7UUFDaEMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztRQUM3QixNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQztRQUNqRCxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDO1FBQ3pELE1BQU0sS0FBSyxHQUFHLGtCQUFrQixDQUFDLFdBQVcsRUFBRSxTQUFTLENBQXdCLENBQUM7UUFDaEYsS0FBSyxDQUFDLEVBQUUsR0FBRyxpQkFBaUIsRUFBRSxDQUFDO1FBQy9CLEtBQUssQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDO1FBQzdCLEtBQUssQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1FBQzFCLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQzdCLE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1lBQzFGLEtBQUssQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLEdBQUcsUUFBUSxDQUFDLFVBQVUsQ0FBQztRQUN2RCxDQUFDO1FBQ0QsNENBQTRDO1FBQzVDLE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7SUFDRCxhQUFhLENBQUMsVUFBVTtRQUNwQixJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFFRCxPQUFPO1FBQ0gsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztJQUNoQyxDQUFDO0lBRUQsZUFBZSxDQUFDLFNBQVM7UUFDckIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDbEUsQ0FBQztJQUVELFdBQVcsQ0FBQyxTQUFTO1FBQ2pCLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxHQUFHLFNBQVMsQ0FBQztRQUNyQyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUMsQ0FBQztJQUNsRSxDQUFDO0lBRUQsZUFBZSxDQUFDLFVBQWtDO1FBQzlDLE1BQU0sYUFBYSxHQUFHLFVBQVUsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDckUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUMsR0FBRyxhQUFhLENBQUMsQ0FBQyxDQUFDO1FBQzVDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxDQUFDO1lBQzFDLE9BQU87UUFDWCxDQUFDO1FBQ0QsTUFBTSxxQkFBcUIsR0FBRyxJQUFJLEdBQUcsRUFBVSxDQUFDO1FBQ2hELGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUN4QixNQUFNLE1BQU0sR0FBRyxDQUFDLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQztZQUN2QyxJQUFJLE1BQU0sRUFBRSxDQUFDO2dCQUNULE1BQU0sR0FBRyxHQUFHLEdBQUcsTUFBTSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxDQUFDLENBQUMsZ0JBQWdCLEVBQUUsRUFBRSxJQUFJLEdBQUcsRUFBRSxDQUFDO2dCQUNyRixxQkFBcUIsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDbkMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxxQkFBcUIsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDakMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLHFCQUFxQixDQUFDLENBQUM7UUFDdEQsQ0FBQztJQUNMLENBQUM7SUFDRCx5QkFBeUI7SUFDekIsV0FBVztRQUNQLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7UUFDekMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ2pCLE9BQU87UUFDWCxDQUFDO1FBQ0QsTUFBTSxPQUFPLEdBQUcsYUFBYSxDQUFDLFlBQVksQ0FBQyxPQUFPLElBQUksYUFBYSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUM7UUFDdkYsT0FBTyxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBQ0QsTUFBTTtRQUNGLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7UUFDekMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ2pCLE9BQU87UUFDWCxDQUFDO1FBQ0QsSUFBSSxPQUFPLEdBQUcsYUFBYSxDQUFDLFlBQVksQ0FBQyxPQUFPLElBQUksYUFBYSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUM7UUFDckYsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ1gsTUFBTSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7Z0JBQ2xELE1BQU0sQ0FBQyxHQUFHLGFBQWEsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3hDLElBQUksQ0FBQyxDQUFDLGFBQWEsS0FBSyx3QkFBd0IsRUFBRSxDQUFDO29CQUMvQyxPQUFPLEdBQUcsQ0FBQyxDQUFDO2dCQUNoQixDQUFDO1lBQ0wsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDO1FBQ0QsSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUNWLE9BQU8sQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDckMsQ0FBQztJQUNMLENBQUM7SUFFRCxrQkFBa0I7UUFDZCxPQUFPLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNqRCxDQUFDO0lBRUQsa0JBQWtCO1FBQ2QsT0FBTyxJQUFJLENBQUMsc0JBQXNCLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDbEQsQ0FBQztJQUNELGFBQWEsQ0FBQyxLQUFjO1FBQ3hCLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVELDhCQUE4QjtRQUMxQixJQUFJLENBQUMsb0NBQW9DLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDckQsQ0FBQztJQUVELHFCQUFxQjtRQUNqQixJQUFJLENBQUMsNEJBQTRCLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDN0MsQ0FBQztJQUVELG9CQUFvQixDQUFDLE1BQWU7UUFDaEMsSUFBSSxDQUFDLDJCQUEyQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRUQsdUJBQXVCO1FBQ25CLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLElBQUksQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQztZQUNwRSxPQUFPO1FBQ1gsQ0FBQztRQUNELElBQUksQ0FBQyxTQUFTO2FBQ1QsSUFBSSxDQUNELFNBQVMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQzNCLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQzdEO2FBQ0EsU0FBUyxFQUFFLENBQUM7SUFDckIsQ0FBQztJQUVELHNCQUFzQixDQUFDLG1CQUF3QztRQUMzRCxNQUFNLHNCQUFzQixHQUFHLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUM3RSxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUNqRCxJQUFJLENBQUMsNkJBQTZCLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLENBQUM7SUFDcEUsQ0FBQztJQUNELHNCQUFzQixDQUFDLDJCQUFnRDtRQUNuRSxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUN6QyxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsMkJBQTJCLEVBQUUsQ0FBQztRQUN6RCxJQUFJLENBQUMsMkJBQTJCLEVBQUUsQ0FBQztZQUMvQixPQUFPO1FBQ1gsQ0FBQztRQUNELDJCQUEyQixDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2hFLDJCQUEyQixDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQzFFLFFBQVEsQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUNuQix5QkFBeUIsRUFDekIsSUFBSSxRQUFRLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQztZQUM5QixFQUFFLEVBQUUsMkJBQTJCLENBQUMsRUFBRTtZQUNsQyxRQUFRLEVBQUUsMkJBQTJCLENBQUMsS0FBSztZQUMzQyxRQUFRLEVBQUUsMkJBQTJCLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDaEQsS0FBSyxFQUFFLDJCQUEyQixDQUFDLEtBQUs7WUFDeEMsU0FBUyxFQUFFLDJCQUEyQixDQUFDLFNBQVM7WUFDaEQsUUFBUSxFQUFFLDJCQUEyQixDQUFDLFFBQVE7WUFDOUMsa0JBQWtCLEVBQUUsMkJBQTJCLENBQUMsa0JBQWtCO1lBQ2xFLGVBQWUsRUFBRSwyQkFBMkIsQ0FBQyxlQUFlO1lBQzVELFFBQVEsRUFBRSwyQkFBMkIsQ0FBQyxRQUFRO1lBQzlDLGFBQWEsRUFBRSwyQkFBMkIsQ0FBQyxhQUFhO1NBQzNELENBQUMsRUFDRixJQUFJLENBQ1AsQ0FBQztRQUNGLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQsd0JBQXdCLENBQUMsbUJBQW9EO1FBQ3pFLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7UUFDekMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7WUFDdkIsT0FBTztRQUNYLENBQUM7UUFDRCxJQUFJLElBQUksQ0FBQyx3QkFBd0IsSUFBSSxtQkFBbUIsQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNqRSxJQUFJLENBQUMsd0JBQXdCLEdBQUcsS0FBSyxDQUFDO1lBQ3RDLE9BQU87UUFDWCxDQUFDO1FBQ0QsSUFBSSxDQUFDLHdCQUF3QixHQUFHLEtBQUssQ0FBQztRQUV0QyxJQUFJLENBQUMsd0JBQXdCLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDN0MsSUFBSSxtQkFBbUIsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUMvQixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLG1CQUFtQixDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzFELE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7Z0JBQ2hDLE1BQU0sS0FBSyxHQUFHLGFBQWEsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzVDLElBQUksS0FBSyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQztvQkFDakMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDNUIsYUFBYSxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUMvQyxDQUFDO1lBQ0wsQ0FBQyxDQUFDLENBQUM7WUFDSCxJQUFJLG1CQUFtQixDQUFDLFNBQVMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztnQkFDM0UsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNqQyxPQUFPO1lBQ1gsQ0FBQztZQUNELElBQUksbUJBQW1CLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztnQkFDekMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2xCLENBQUM7UUFDTCxDQUFDO1FBQ0QseUJBQXlCO1FBQ3pCLElBQUksbUJBQW1CLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDcEMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUMvRCxJQUFJLENBQUMsMENBQTBDLENBQzNDLE9BQU8sUUFBUSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUNqRSxDQUFDO1FBQ04sQ0FBQztRQUNELElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBQ0QsZ0JBQWdCO1FBQ1osT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQztJQUNqQyxDQUFDO0lBQ0QsMkJBQTJCO1FBQ3ZCLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7UUFDekMsTUFBTSxNQUFNLEdBQW1DLGFBQWEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQ3hGLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxLQUFLLFNBQVMsSUFBSSxDQUFDLENBQUMsV0FBVyxLQUFLLE9BQU8sQ0FDbEUsQ0FBQztRQUNGLE1BQU0sYUFBYSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDckMsSUFBSSxFQUFFLENBQUMsQ0FBQyxXQUFXO1lBQ25CLE9BQU8sRUFBRSxDQUFDLENBQUMsNkJBQTZCO1lBQ3hDLE1BQU0sRUFBRSxhQUFhLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxPQUFPLENBQUMsU0FBUyxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLO1lBQzVGLFdBQVcsRUFBRSxDQUFDLENBQUMsV0FBVztTQUM3QixDQUFDLENBQUMsQ0FBQztRQUNKLE9BQU8sYUFBYSxDQUFDO0lBQ3pCLENBQUM7SUFDRCwwQ0FBMEMsQ0FBQyxhQUErQjtRQUN0RSxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDO1FBQ3pDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUN4QixNQUFNLEtBQUssR0FBRyxhQUFhLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNqRCxJQUFJLEtBQUssRUFBRSxDQUFDO2dCQUNSLGFBQWEsQ0FBQyxTQUFTLENBQUMsb0JBQW9CLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNoRyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBQ0QseUJBQXlCLENBQUMsc0JBQTZDO1FBQ25FLHNCQUFzQixHQUFHLHNCQUFzQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxJQUFJLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzVGLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsQ0FBQztJQUNwRSxDQUFDO0lBRUQseUJBQXlCLENBQUMscUJBQTZCO1FBQ25ELE1BQU0sc0JBQXNCLEdBQUcsSUFBSSxDQUFDLDZCQUE2QixDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzdFLHNCQUFzQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxxQkFBcUIsQ0FBQyxDQUFDO1FBQ3JFLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsQ0FBQztJQUNwRSxDQUFDO0lBRUQseUJBQXlCLENBQUMsNkJBQXFDO1FBQzNELElBQUksQ0FBQyxvQ0FBb0MsQ0FBQyxJQUFJLENBQUMsNkJBQTZCLENBQUMsQ0FBQztJQUNsRixDQUFDO0lBRUQsOEJBQThCLENBQUMsU0FBaUIsRUFBRSxZQUFzQjtRQUNwRSxNQUFNLEVBQUUsR0FBRyxzQkFBc0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM3QyxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxJQUFJLENBQ3hDLFNBQVMsQ0FBQyxDQUFDLFlBQVksRUFBRSxFQUFFO1lBQ3ZCLElBQUksWUFBWSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDMUIsT0FBTyxFQUFFLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDNUIsQ0FBQztZQUNELE9BQU8sY0FBYyxDQUFDLEVBQUUsRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3pELENBQUMsQ0FBQyxFQUNGLEdBQUcsQ0FBQyxDQUFDLFlBQXVDLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLHVCQUF1QixHQUFHLFlBQVksQ0FBQyxDQUFDLENBQ2xHLENBQUM7SUFDTixDQUFDO0lBQ1MsMkJBQTJCLENBQUMsQ0FBd0I7UUFDMUQsSUFBSSxZQUFZLEdBQWEsRUFBRSxDQUFDO1FBQ2hDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ1IsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN2QyxDQUFDO2FBQU0sQ0FBQztZQUNKLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQy9GLENBQUM7UUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ3JDLE9BQU8sRUFBRSxDQUFDO1FBQ2QsQ0FBQztRQUNELDJGQUEyRjtRQUMzRixJQUFJLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDeEMsWUFBWSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDNUUsTUFBTSxjQUFjLEdBQWEsRUFBRSxDQUFDO1lBQ3BDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7Z0JBQ3pELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDM0MsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFlBQVksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztvQkFDM0MsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQzt3QkFDbkUsY0FBYyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDekMsQ0FBQztnQkFDTCxDQUFDO1lBQ0wsQ0FBQztZQUNELFlBQVksR0FBRyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDaEYsQ0FBQztRQUNELE9BQU8sWUFBWSxDQUFDO0lBQ3hCLENBQUM7SUFDUyxzQkFBc0IsQ0FBQyxPQUFPO1FBQ3BDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNYLE9BQU87UUFDWCxDQUFDO1FBQ0QsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUM7UUFDakQsSUFBSSxXQUFXLEVBQUUsQ0FBQztZQUNkLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNsQyxDQUFDO0lBQ0wsQ0FBQztJQUVTLFlBQVksQ0FBQyxPQUFPO1FBQzFCLE1BQU0sWUFBWSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLDZCQUE2QixDQUFDLENBQUM7UUFDdEcsT0FBTyxZQUFZLEtBQUssUUFBUSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQztJQUMzRSxDQUFDO0lBQ1MsaUJBQWlCLENBQUMsT0FBWTtRQUNwQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ1AsS0FBSyxFQUFFLElBQUk7WUFDWCxlQUFlLEVBQUUsSUFBSSxDQUFDLGdCQUFnQjtZQUN0QyxXQUFXLEVBQUUsSUFBSSxDQUFDLFlBQVk7WUFDOUIsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLGtCQUFrQjtZQUMxQyxvQkFBb0IsRUFBRSxJQUFJLENBQUMscUJBQXFCO1lBQ2hELGNBQWMsRUFBRSxJQUFJLENBQUMsZUFBZTtZQUNwQyxlQUFlLEVBQUUsSUFBSSxDQUFDLGdCQUFnQjtZQUN0QyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsaUJBQWlCO1lBQ3hDLFlBQVksRUFBRSxJQUFJLENBQUMsYUFBYTtZQUNoQyxrQkFBa0IsRUFBRSxJQUFJLENBQUMsbUJBQW1CO1lBQzVDLG9CQUFvQixFQUFFLElBQUksQ0FBQyxxQkFBcUI7WUFDaEQscUJBQXFCLEVBQUUsSUFBSSxDQUFDLHNCQUFzQjtZQUNsRCxhQUFhLEVBQUUsSUFBSSxDQUFDLGNBQWM7WUFDbEMsT0FBTyxFQUFFLElBQUksQ0FBQyxlQUFlO1lBQzdCLGNBQWMsRUFBRSxJQUFJLENBQUMsZ0JBQWdCO1NBQ3hDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFUyxXQUFXLENBQUMsT0FBWTtRQUM5QixJQUFJLENBQUMsMEJBQTBCLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDekMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3RDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNuQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDbEMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDMUIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMvQixJQUFJLENBQUMsbUJBQW1CLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDbEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMzQixJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzFCLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDekIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM1QixJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzlCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNqQyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzdCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMvQixJQUFJLENBQUMsc0JBQXNCLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDckMsSUFBSSxDQUFDLHlCQUF5QixDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFDUyx5QkFBeUIsQ0FBQyxPQUFPO1FBQ3ZDLElBQUksT0FBTyxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLHFCQUFxQixFQUFFLENBQUM7WUFDekQsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxxQkFBcUIsQ0FBQyxDQUFDO1FBQ2xGLENBQUM7SUFDTCxDQUFDO0lBQ1MsMEJBQTBCLENBQUMsT0FBTztRQUN4QyxNQUFNLGlCQUFpQixHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUM7UUFDNUQsSUFBSSxpQkFBaUIsRUFBRSxDQUFDO1lBQ3BCLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztZQUM1QyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7Z0JBQ2pCLElBQUksT0FBTyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsS0FBSyxRQUFRLEVBQUUsQ0FBQztvQkFDN0MsaUJBQWlCLENBQUMsR0FBRyxDQUFDLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFDekUsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ3JELENBQUM7UUFDRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUNTLGdCQUFnQixDQUFDLE9BQU87UUFDOUIsSUFBSSxPQUFPLElBQUksT0FBTyxDQUFDLG1CQUFtQixFQUFFLENBQUM7WUFDekMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBQzFELENBQUM7SUFDTCxDQUFDO0lBRVMsdUJBQXVCLENBQUMsT0FBTztRQUNyQyxJQUFJLE9BQU8sSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxrQkFBa0IsRUFBRSxDQUFDO1lBQ3RELElBQUksQ0FBQywwQkFBMEIsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO1FBQzlFLENBQUM7SUFDTCxDQUFDO0lBRVMsY0FBYyxDQUFDLE9BQU87UUFDNUIsSUFBSSxPQUFPLElBQUksT0FBTyxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQy9CLHNDQUFzQztZQUN0QyxJQUFJLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzlDLENBQUM7SUFDTCxDQUFDO0lBRVMsV0FBVyxDQUFDLE9BQU87UUFDekIsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNyRixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRVMsZUFBZSxDQUFDLE9BQU87UUFDN0IsTUFBTSxVQUFVLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUM1RixJQUFJLENBQUMsa0JBQWtCLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUNTLGlCQUFpQixDQUFDLE9BQU87UUFDL0IsSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDbkMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDbkUsQ0FBQztJQUNMLENBQUM7SUFFUyxrQkFBa0IsQ0FBQyxPQUFPO1FBQ2hDLE1BQU0sYUFBYSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDN0YsSUFBSSxDQUFDLHFCQUFxQixDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFUyxVQUFVLENBQUMsT0FBTztRQUN4QixJQUFJLEtBQUssR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNyRSxJQUFJLEtBQUssS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUNqQixLQUFLLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUMxRixDQUFDO1FBQ0QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUVTLGFBQWEsQ0FBQyxPQUFPO1FBQzNCLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxRQUFRLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztRQUMxRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVTLFdBQVcsQ0FBQyxPQUFPO1FBQ3pCLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxNQUFNLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUN2RCxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFUyxZQUFZLENBQUMsT0FBTztRQUMxQixNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLFNBQVMsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQ25FLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVTLG1CQUFtQixDQUFDLE9BQU87UUFDakMsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQztRQUNuQyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUN6QixJQUFJLENBQUMsc0JBQXNCLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDekMsQ0FBQztJQUNMLENBQUM7SUFFUyxtQkFBbUIsQ0FBQyxPQUFPO1FBQ2pDLE1BQU0sY0FBYyxHQUFZLE9BQU8sQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLGNBQWMsQ0FBQztRQUN0RSxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFFUyxvQkFBb0IsQ0FBQyxPQUFPO1FBQ2xDLE1BQU0sZUFBZSxHQUFZLE9BQU8sQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLGVBQWUsQ0FBQztRQUN4RSxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxxQkFBcUIsRUFBRSxJQUFJLENBQUM7UUFDckUsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxlQUFlLElBQUksU0FBUyxDQUFDLENBQUM7SUFDbkUsQ0FBQztJQUVTLG1CQUFtQixDQUFDLE9BQU87UUFDakMsTUFBTSxjQUFjLEdBQVksT0FBTyxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsY0FBYyxDQUFDO1FBQ3RFLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUVTLGtCQUFrQixDQUFDLE9BQU87UUFDaEMsTUFBTSxhQUFhLEdBQUcsT0FBTyxDQUFDLGFBQWEsQ0FBQztRQUM1QyxJQUFJLGFBQWEsRUFBRSxDQUFDO1lBQ2hCLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUM5QyxDQUFDO0lBQ0wsQ0FBQztJQUVTLGdCQUFnQixDQUFDLE9BQU87UUFDOUIsTUFBTSxXQUFXLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxrQ0FBa0MsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUN6RyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFUyxvQkFBb0I7UUFDMUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDMUQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNsRCxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxzQkFBc0IsRUFBRSxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQztRQUNwRSxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxtQkFBbUIsRUFBRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUM5RCxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDeEQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDMUQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDNUQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNwRCxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxzQkFBc0IsRUFBRSxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQztRQUNwRSxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyx1QkFBdUIsRUFBRSxJQUFJLENBQUMsc0JBQXNCLENBQUMsQ0FBQztRQUN0RSxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ3RELElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDakQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUNTLDBCQUEwQixDQUFDLGtCQUF1QjtRQUN4RCxJQUFJLENBQUMseUJBQXlCLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUNTLGtCQUFrQixDQUFDLFVBQVU7UUFDbkMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN2QyxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNmLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDckMsSUFBSSxDQUFDLDBCQUEwQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUM5QyxJQUFJLENBQUMsa0NBQWtDLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDeEQsQ0FBQztJQUNMLENBQUM7SUFDUyxrQ0FBa0MsQ0FBQyxVQUFpQztRQUMxRSxNQUFNLFdBQVcsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDekQsTUFBTSxLQUFLLEdBQUcsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzFDLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNuRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDZixJQUFJLENBQUMsOEJBQThCLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2pELENBQUM7SUFDTCxDQUFDO0lBRVMscUJBQXFCLENBQUMsYUFBYTtRQUN6QyxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQzlDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDM0MsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN2QyxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3hDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVTLFlBQVksQ0FBQyxJQUFhO1FBQ2hDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFDUyxnQkFBZ0IsQ0FBQyxFQUFFO1FBQ3pCLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUNTLGtCQUFrQixDQUFDLFVBQW1CO1FBQzVDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUVTLGdCQUFnQixDQUFDLFFBQWlCO1FBQ3hDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFFUyxlQUFlLENBQUMsVUFBbUI7UUFDekMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUNTLHFCQUFxQixDQUFDLFNBQXFCO1FBQ2pELElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNiLE9BQU8sRUFBRSxDQUFDO1FBQ2QsQ0FBQztRQUNELE1BQU0sUUFBUSxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQzdCLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxLQUFLLFFBQVEsSUFBSSxDQUFDLENBQUMsTUFBTSxLQUFLLFdBQVcsSUFBSSxDQUFDLENBQUMsTUFBTSxLQUFLLGdCQUFnQixDQUM1RixDQUFDO1FBQ0YsT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQztJQUNTLGlCQUFpQixDQUFDLFNBQWdCO1FBQ3hDLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMzRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFUyxhQUFhLENBQUMsUUFBeUM7UUFDN0QsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVTLG1CQUFtQixDQUFDLFdBQWdCO1FBQzFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVTLHFCQUFxQixDQUFDLGNBQW1CO1FBQy9DLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUVTLHNCQUFzQixDQUFDLE9BQWM7UUFDM0MsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRVMsY0FBYyxDQUFDLE1BQWU7UUFDcEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVTLGVBQWU7UUFDckIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBQ1MsZ0JBQWdCO1FBQ3RCLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVTLDhCQUE4QixDQUFDLFdBQWdCO1FBQ3JELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFLEVBQUUsSUFBSSxJQUFJLG1CQUFtQixFQUFFLENBQUMsQ0FBQztRQUM5RSxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN6RCxNQUFNLGdCQUFnQixHQUFHO1lBQ3JCLEVBQUUsRUFBRSxFQUFFO1lBQ04sUUFBUSxFQUFFLFlBQVk7WUFDdEIsVUFBVSxFQUFFLElBQUk7WUFDaEIsU0FBUyxFQUFFLElBQUk7WUFDZixRQUFRLEVBQUUsSUFBSTtZQUNkLFNBQVMsRUFBRSxJQUFJO1lBQ2Ysa0JBQWtCLEVBQUUsSUFBSTtZQUN4QixlQUFlLEVBQUUsS0FBSztZQUN0QixLQUFLLEVBQUUsWUFBWTtZQUNuQixRQUFRLEVBQUUsUUFBUTtZQUNsQixRQUFRLEVBQUUsRUFBRTtTQUNmLENBQUM7UUFDRixJQUFJLENBQUMsaUNBQWlDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDbEUsQ0FBQztJQUVTLHdCQUF3QixDQUFDLFFBQVE7UUFDdkMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQztZQUN6QixVQUFVLEVBQUUsQ0FBQyxRQUFRLENBQUM7WUFDdEIsTUFBTSxFQUFFLGdDQUFnQztZQUN4QyxTQUFTLEVBQUUsQ0FBQyxzQkFBc0IsRUFBRSxFQUFFO2dCQUNsQyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsc0JBQXNCLENBQUMsRUFBRSxDQUFDO29CQUN4QyxzQkFBc0IsR0FBRyxRQUFRLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO29CQUNyRSxJQUFJLENBQUMsNkJBQTZCLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLENBQUM7b0JBQ2hFLE1BQU0sYUFBYSxHQUFHLHNCQUFzQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDO29CQUN0RSxJQUFJLGFBQWEsRUFBRSxDQUFDO3dCQUNoQixJQUFJLENBQUMsb0NBQW9DLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUMsQ0FBQztvQkFDckUsQ0FBQztnQkFDTCxDQUFDO1lBQ0wsQ0FBQztZQUNELE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRSxDQUFDO1NBQ25CLENBQUMsQ0FBQztJQUNQLENBQUM7SUFDUyx3QkFBd0IsQ0FBQyxhQUFhO1FBQzVDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNuQixNQUFNLE9BQU8sR0FBRyxhQUFhLENBQUMsWUFBWSxDQUFDO1FBQzNDLE1BQU0sT0FBTyxHQUFHLGFBQWEsQ0FBQyxFQUFFLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUNwRCxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQy9CLE1BQU0sS0FBSyxHQUFHLGFBQWEsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDNUMsSUFBSSxLQUFLLEVBQUUsQ0FBQztnQkFDUixLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNyQixhQUFhLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDeEMsQ0FBQztZQUNELGFBQWEsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3JDLENBQUMsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUMvQixJQUFJLENBQUMsS0FBSyxTQUFTLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQWEsRUFBRSxDQUFDO2dCQUM5QyxhQUFhLENBQUMsU0FBUyxDQUFDLG9CQUFvQixFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsbUJBQW1CLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDaEcsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUNTLHFCQUFxQixDQUFDLHNCQUFtQztRQUMvRCxJQUFJLGlCQUFpQixHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUM1RCxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUNyQixPQUFPO1FBQ1gsQ0FBQztRQUNELE1BQU0sSUFBSSxHQUEwQixFQUFFLENBQUM7UUFFdkMsc0JBQXNCLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDbkMsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQztZQUNyRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDMUIsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDL0QsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3BCLE9BQU87UUFDWCxDQUFDO1FBQ0QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUN2RCxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQ0wsT0FBTztZQUNYLENBQUM7WUFDRCxNQUFNLFNBQVMsR0FBbUMsRUFBRSxDQUFDO1lBQ3JELE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7Z0JBQzNCLFNBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUNqRCxDQUFDLENBQUMsQ0FBQztZQUNILGlCQUFpQixHQUFHLEVBQUUsR0FBRyxpQkFBaUIsRUFBRSxHQUFHLFNBQVMsRUFBRSxDQUFDO1lBQzNELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUNyRCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7K0dBNTZCUSxjQUFjO21IQUFkLGNBQWM7OzRGQUFkLGNBQWM7a0JBRDFCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgT2JzZXJ2YWJsZSwgb2YsIFN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBkZWxheSwgZGlzdGluY3RVbnRpbENoYW5nZWQsIGZpbHRlciwgbWFwLCBzaGFyZVJlcGxheSwgc3dpdGNoTWFwLCB0YWtlVW50aWwsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHtcclxuICAgIEJhcnNhQXBpLFxyXG4gICAgTWVudUl0ZW0sXHJcbiAgICBNZXRhb2JqZWN0RGF0YU1vZGVsLFxyXG4gICAgUGFnaW5nU2V0dGluZyxcclxuICAgIFNlYXJjaFBhbmVsU2V0dGluZ3MsXHJcbiAgICBHZW5lcmFsQ29udHJvbEluZm9Nb2RlbCxcclxuICAgIENvbHVtbkluZm9UeXBlLFxyXG4gICAgRm9ybVNldHRpbmcsXHJcbiAgICBTaGFyZUJ1dHRvbnNDaG9pY2VEZWYsXHJcbiAgICBDYXJ0YWJsZVRlbXBsYXRlS2V5LFxyXG4gICAgQ3NzQmFja2dyb3VuZFxyXG59IGZyb20gJy4uL2Fic3RyYWN0LWNsYXNzZXMnO1xyXG5pbXBvcnQge1xyXG4gICAgZXhlY3V0ZVVsdkNvbW1hbmRIYW5kbGVyLFxyXG4gICAgZ2VucmF0ZUlubGluZU1vSWQsXHJcbiAgICBnZXRDb250cm9sTGlzdCxcclxuICAgIEdldERlZmF1bHRNb09iamVjdEluZm8sXHJcbiAgICBnZXROZXdNb0dyaWRFZGl0b3JcclxufSBmcm9tICcuLi9jb25zdGFudHMnO1xyXG5pbXBvcnQgeyBCYmJUcmFuc2xhdGVQaXBlIH0gZnJvbSAnLi4vcGlwZXMnO1xyXG5pbXBvcnQgeyBBcGlTZXJ2aWNlIH0gZnJvbSAnLi9hcGkuc2VydmljZSc7XHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIFVsdk1haW5TZXJ2aWNlIHtcclxuICAgIG1vRGF0YUxpc3RTb3VyY2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PE1ldGFvYmplY3REYXRhTW9kZWxbXT4oW10pO1xyXG4gICAgY29udGV4dCQ6IFN1YnNjcmlwdGlvbjtcclxuICAgIHZpZXdlciQ6IE9ic2VydmFibGU8YW55PjtcclxuICAgIGNvbmRpdGlvbmFsRm9ybWF0cyQ6IE9ic2VydmFibGU8YW55PjtcclxuICAgIGhpZGVUb29sYmFyJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcclxuICAgIG1hc2skOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xyXG4gICAgdml3ZXJNYXNrJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcclxuICAgIHZpc2libGUkOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xyXG4gICAgZW5hYmxlJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcclxuICAgIHJlYWRvbmx5JDogT2JzZXJ2YWJsZTxib29sZWFuPjtcclxuICAgIG1lbnVJdGVtcyQ6IE9ic2VydmFibGU8TWVudUl0ZW1bXT47XHJcbiAgICB0aXRsZSQ6IE9ic2VydmFibGU8eyB0ZXh0OiBzdHJpbmc7IGltYWdlOiBzdHJpbmcgfT47XHJcblxyXG4gICAgc2VhcmNoUGFuZWxVaSQ6IE9ic2VydmFibGU8YW55PjtcclxuICAgIHBhZ2luZ1NldHRpbmckOiBPYnNlcnZhYmxlPFBhZ2luZ1NldHRpbmcgfCBudWxsPjtcclxuICAgIHRvb2xiYXJCdXR0b25zJDogT2JzZXJ2YWJsZTxhbnlbXT47XHJcbiAgICBkZXN0cm95JDogT2JzZXJ2YWJsZTx2b2lkPjtcclxuICAgIG1vRGF0YUxpc3QkOiBPYnNlcnZhYmxlPE1ldGFvYmplY3REYXRhTW9kZWxbXT47XHJcbiAgICByZXBvcnRJZCQ6IE9ic2VydmFibGU8c3RyaW5nPjtcclxuICAgIGFsbG93SW5saW5lRWRpdCQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XHJcbiAgICBpbmxpbmVFZGl0TW9kZSQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XHJcbiAgICBvbmx5SW5saW5lRWRpdCQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XHJcbiAgICBjb250ZXh0OiBhbnk7XHJcbiAgICBvcGVuU2VhcmNoUGFuZWxIaWRkZW5TZXR0aW5ncyQ6IE9ic2VydmFibGU8dm9pZD47XHJcbiAgICBvcGVuU2VhcmNoRmlsZXNNYW5hZ2UkOiBPYnNlcnZhYmxlPHZvaWQ+O1xyXG4gICAgc2VhcmNoUGFuZWxNb0NoYW5nZWQkOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xyXG4gICAgYWxsU2VhcmNoUGFuZWxTZXR0aW5ncyQ6IE9ic2VydmFibGU8U2VhcmNoUGFuZWxTZXR0aW5nc1tdPjtcclxuICAgIGxheW91dEluZm8kOiBPYnNlcnZhYmxlPGFueT47XHJcbiAgICBzZWxlY3RlZFNlYXJjaFBhbmVsU2V0dGluZ3NJZCQ6IE9ic2VydmFibGU8c3RyaW5nPjtcclxuICAgIHNlbGVjdGVkU2VhcmNoUGFuZWxTZXR0aW5ncyQ6IE9ic2VydmFibGU8U2VhcmNoUGFuZWxTZXR0aW5ncyB8IHVuZGVmaW5lZD47XHJcbiAgICBuZXdJbmxpbmVFZGl0TW8kOiBPYnNlcnZhYmxlPE1ldGFvYmplY3REYXRhTW9kZWwgfCBudWxsPjtcclxuICAgIF9jYXJ0YWJsZVRlbXBsYXRlcyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHsgW2tleTogc3RyaW5nXTogRm9ybVNldHRpbmcgfT4oe30pO1xyXG4gICAgX2NhcnRhYmxlQ2hpbGRzTW8kID0gbmV3IEJlaGF2aW9yU3ViamVjdDx7IFtrZXk6IHN0cmluZ106IE1ldGFvYmplY3REYXRhTW9kZWwgfSB8IG51bGw+KHt9KTtcclxuICAgIHNlbGVjdGVkQ291bnQkOiBPYnNlcnZhYmxlPG51bWJlcj47XHJcbiAgICBoaWRlVWx2UGFnZVRpdGxlJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcclxuICAgIHVpVmlld2VyU2VsZWN0b3IkOiBPYnNlcnZhYmxlPHN0cmluZz47XHJcblxyXG4gICAgcHJpdmF0ZSBfc2V0VWlWaWV3ZXJTZWxlY3RvciQgPSBuZXcgU3ViamVjdDxzdHJpbmc+KCk7XHJcbiAgICBwcml2YXRlIF9ncmlkRnJlZUNvbHVtblNpemluZyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcclxuICAgIHByaXZhdGUgX2xheW91dEluZm9Tb3VyY2UgPSBuZXcgU3ViamVjdDxhbnk+KCk7XHJcbiAgICBwcml2YXRlIF9jb250ZXh0U291cmNlID0gbmV3IFN1YmplY3Q8YW55PigpO1xyXG4gICAgcHJpdmF0ZSBfY2FuU2F2ZUdyaWRTZXR0aW5nJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gICAgcHJpdmF0ZSBfaW5EaWFsb2ckID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XHJcbiAgICBwcml2YXRlIF9pc011bHRpU2VsZWN0JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gICAgcHJpdmF0ZSBfZnVsbHNjcmVlbiQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcclxuICAgIHByaXZhdGUgX2NvbmRpdGlvbmFsRm9ybWF0c1NvdXJjZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55W10+KFtdKTtcclxuICAgIHByaXZhdGUgX3JlcG9ydFNvdXJjZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55PihudWxsKTtcclxuICAgIHByaXZhdGUgX3ZpZXdlckNvbnRyb2xTb3VyY2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4obnVsbCk7XHJcbiAgICBwcml2YXRlIF9oaWRlVG9vbGJhclNvdXJjZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSk7XHJcbiAgICBwcml2YXRlIF9vbkRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICAgIHByaXZhdGUgX21hc2tTb3VyY2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcclxuICAgIHByaXZhdGUgX3Nob3dDb250ZXh0TWVudVNvdXJjZSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcbiAgICBwcml2YXRlIF92aWV3ZXJNYXNrU291cmNlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XHJcbiAgICBwcml2YXRlIF92aXNpYmxlU291cmNlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPih0cnVlKTtcclxuICAgIHByaXZhdGUgX2VuYWJsZVNvdXJjZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSk7XHJcbiAgICBwcml2YXRlIF9yZWFkb25seVNvdXJjZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gICAgcHJpdmF0ZSBfbWVudUl0ZW1zU291cmNlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxNZW51SXRlbVtdPihbXSk7XHJcbiAgICBwcml2YXRlIF9vbmx5SW5saW5lRWRpdFNvdXJjZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gICAgcHJpdmF0ZSBfaW5saW5lRWRpdE1vZGVTb3VyY2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcclxuICAgIHByaXZhdGUgX2FsbG93SW5saW5lRWRpdFNvdXJjZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gICAgcHJpdmF0ZSBfY2FydGFibGVLZXlTZXBlcmF0b3IgPSAnQCc7XHJcbiAgICBwcml2YXRlIF90aXRsZVNvdXJjZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8eyB0ZXh0OiBzdHJpbmc7IGltYWdlOiBzdHJpbmcgfT4oe1xyXG4gICAgICAgIHRleHQ6ICcnLFxyXG4gICAgICAgIGltYWdlOiAnJ1xyXG4gICAgfSk7XHJcbiAgICBwcml2YXRlIF9oaWRlVWx2UGFnZVRpdGxlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xyXG5cclxuICAgIHByaXZhdGUgX3NlYXJjaFBhbmVsVWlTb3VyY2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4obnVsbCk7XHJcblxyXG4gICAgcHJpdmF0ZSBfcGFnaW5nU2V0dGluZ1NvdXJjZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8UGFnaW5nU2V0dGluZyB8IG51bGw+KG51bGwpO1xyXG4gICAgcHJpdmF0ZSBfdG9vbGJhckJ1dHRvbnNTb3VyY2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueVtdPihbXSk7XHJcbiAgICBwcml2YXRlIF90b29sYmFyQnV0dG9uc1dvcmtmbG93QnV0dG9ucyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55W10+KFtdKTtcclxuICAgIHByaXZhdGUgX2Rlc3Ryb3lTb3VyY2UgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG4gICAgcHJpdmF0ZSBfZmlyc3RBcHBseUF1dG9tYXRpY2FsbHkgPSB0cnVlO1xyXG4gICAgcHJpdmF0ZSBfY29udHJvbEluZm9zTWV0YW9iamVjdDogR2VuZXJhbENvbnRyb2xJbmZvTW9kZWxbXSA9IFtdO1xyXG4gICAgcHJpdmF0ZSBfc2VsZWN0ZWRTZWFyY2hQYW5lbFNldHRpbmdzSWRTb3VyY2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oJycpO1xyXG4gICAgcHJpdmF0ZSBfZGVmYXVsdFNlYXJjaFBhbmVsU2V0dGluZ3NTb3VyY2UgPSBuZXcgU3ViamVjdDxTZWFyY2hQYW5lbFNldHRpbmdzPigpO1xyXG4gICAgcHJpdmF0ZSBfYWxsU2VhcmNoUGFuZWxTZXR0aW5nc1NvdXJjZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8U2VhcmNoUGFuZWxTZXR0aW5nc1tdPihbXSk7XHJcbiAgICBwcml2YXRlIF9jc3NCYWNrZ3JvdW5kU291cmNlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxDc3NCYWNrZ3JvdW5kIHwgbnVsbD4obnVsbCk7XHJcbiAgICBwcml2YXRlIF9oaWRlUGFnaW5nU291cmNlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XHJcbiAgICBwcml2YXRlIF9vcGVuU2VhcmNoUGFuZWxIaWRkZW5TZXR0aW5nc1NvdXJjZSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcbiAgICBwcml2YXRlIF9vcGVuU2VhcmNoRmlsZXNNYW5hZ2VTb3VyY2UgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG4gICAgcHJpdmF0ZSBfc2VhcmNoUGFuZWxNb0NoYW5nZWRTb3VyY2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcclxuICAgIHByaXZhdGUgX25ld0lubGluZUVkaXRNb1NvdXJjZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8TWV0YW9iamVjdERhdGFNb2RlbCB8IG51bGw+KG51bGwpO1xyXG4gICAgcHJpdmF0ZSBfaGlkZVNlYXJjaGFwYW5lbFNvdXJjZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gICAgcHJpdmF0ZSBfd29ya2Zsb3dTaGFyZUJ1dHRvbnM6IFNoYXJlQnV0dG9uc0Nob2ljZURlZltdID0gW107XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBfYmJiUGlwZTogQmJiVHJhbnNsYXRlUGlwZSwgcHJpdmF0ZSBfYXBpU2VydmljZTogQXBpU2VydmljZSkge1xyXG4gICAgICAgIHRoaXMuY29udGV4dCQgPSB0aGlzLl9jb250ZXh0U291cmNlXHJcbiAgICAgICAgICAgIC5hc09ic2VydmFibGUoKVxyXG4gICAgICAgICAgICAucGlwZShcclxuICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9vbkRlc3Ryb3kkKSxcclxuICAgICAgICAgICAgICAgIHRhcCgoY29udGV4dCkgPT4gKHRoaXMuY29udGV4dCA9IGNvbnRleHQpKSxcclxuICAgICAgICAgICAgICAgIHRhcCgoY29udGV4dCkgPT4gdGhpcy5faW5pdGlhbGl6ZShjb250ZXh0KSksXHJcbiAgICAgICAgICAgICAgICB0YXAoKGNvbnRleHQpID0+IHRoaXMuX2FkZEV2ZW50TGlzdGVuZXIoY29udGV4dCkpXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICAgLnN1YnNjcmliZSgpO1xyXG4gICAgICAgIHRoaXMubmV3SW5saW5lRWRpdE1vJCA9IHRoaXMuX25ld0lubGluZUVkaXRNb1NvdXJjZS5hc09ic2VydmFibGUoKS5waXBlKHRha2VVbnRpbCh0aGlzLl9vbkRlc3Ryb3kkKSk7XHJcbiAgICAgICAgdGhpcy52aWV3ZXIkID0gdGhpcy5fdmlld2VyQ29udHJvbFNvdXJjZS5hc09ic2VydmFibGUoKS5waXBlKHRha2VVbnRpbCh0aGlzLl9vbkRlc3Ryb3kkKSk7XHJcbiAgICAgICAgdGhpcy5jb25kaXRpb25hbEZvcm1hdHMkID0gdGhpcy5fY29uZGl0aW9uYWxGb3JtYXRzU291cmNlLmFzT2JzZXJ2YWJsZSgpLnBpcGUodGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpKTtcclxuICAgICAgICB0aGlzLmhpZGVUb29sYmFyJCA9IHRoaXMuX2hpZGVUb29sYmFyU291cmNlLmFzT2JzZXJ2YWJsZSgpLnBpcGUodGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpKTtcclxuICAgICAgICB0aGlzLm1hc2skID0gdGhpcy5fbWFza1NvdXJjZS5hc09ic2VydmFibGUoKS5waXBlKHRha2VVbnRpbCh0aGlzLl9vbkRlc3Ryb3kkKSk7XHJcbiAgICAgICAgdGhpcy52aXdlck1hc2skID0gdGhpcy5fdmlld2VyTWFza1NvdXJjZS5hc09ic2VydmFibGUoKS5waXBlKHRha2VVbnRpbCh0aGlzLl9vbkRlc3Ryb3kkKSk7XHJcbiAgICAgICAgdGhpcy52aXNpYmxlJCA9IHRoaXMuX3Zpc2libGVTb3VyY2UuYXNPYnNlcnZhYmxlKCkucGlwZSh0YWtlVW50aWwodGhpcy5fb25EZXN0cm95JCkpO1xyXG4gICAgICAgIHRoaXMuZW5hYmxlJCA9IHRoaXMuX2VuYWJsZVNvdXJjZS5hc09ic2VydmFibGUoKS5waXBlKHRha2VVbnRpbCh0aGlzLl9vbkRlc3Ryb3kkKSk7XHJcbiAgICAgICAgdGhpcy5yZWFkb25seSQgPSB0aGlzLl9yZWFkb25seVNvdXJjZS5hc09ic2VydmFibGUoKS5waXBlKHRha2VVbnRpbCh0aGlzLl9vbkRlc3Ryb3kkKSk7XHJcbiAgICAgICAgdGhpcy5oaWRlVWx2UGFnZVRpdGxlJCA9IHRoaXMuX2hpZGVVbHZQYWdlVGl0bGUkLmFzT2JzZXJ2YWJsZSgpLnBpcGUodGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpKTtcclxuICAgICAgICB0aGlzLnVpVmlld2VyU2VsZWN0b3IkID0gdGhpcy5fc2V0VWlWaWV3ZXJTZWxlY3RvciQuYXNPYnNlcnZhYmxlKCk7XHJcbiAgICAgICAgdGhpcy5tZW51SXRlbXMkID0gdGhpcy5fbWVudUl0ZW1zU291cmNlLmFzT2JzZXJ2YWJsZSgpLnBpcGUoXHJcbiAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9vbkRlc3Ryb3kkKSxcclxuICAgICAgICAgICAgZmlsdGVyKChpdGVtcykgPT4gaXRlbXM/Lmxlbmd0aCA+IDApLFxyXG4gICAgICAgICAgICBtYXAoKGl0ZW1zKSA9PiBpdGVtcy5maWx0ZXIoKGMpID0+IGMuaXRlbUlkICE9PSAnRXhwb3J0VG9FeGNlbCcgJiYgYy5pdGVtSWQgIT09ICdEZWxldGUnKSlcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMudGl0bGUkID0gdGhpcy5fdGl0bGVTb3VyY2UuYXNPYnNlcnZhYmxlKCkucGlwZSh0YWtlVW50aWwodGhpcy5fb25EZXN0cm95JCkpO1xyXG5cclxuICAgICAgICB0aGlzLnNlYXJjaFBhbmVsVWkkID0gdGhpcy5fc2VhcmNoUGFuZWxVaVNvdXJjZS5hc09ic2VydmFibGUoKS5waXBlKFxyXG4gICAgICAgICAgICB0YWtlVW50aWwodGhpcy5fb25EZXN0cm95JCksXHJcbiAgICAgICAgICAgIHRhcCgoc2VhcmNoUGFuZWwpID0+IHRoaXMuX2FkZERlZmF1bHRTZWFyY2hQYW5lbFNldHRpbmdzKHNlYXJjaFBhbmVsKSlcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMub3BlblNlYXJjaFBhbmVsSGlkZGVuU2V0dGluZ3MkID0gdGhpcy5fb3BlblNlYXJjaFBhbmVsSGlkZGVuU2V0dGluZ3NTb3VyY2UuYXNPYnNlcnZhYmxlKCk7XHJcbiAgICAgICAgdGhpcy5wYWdpbmdTZXR0aW5nJCA9IHRoaXMuX3BhZ2luZ1NldHRpbmdTb3VyY2UuYXNPYnNlcnZhYmxlKCkucGlwZSh0YWtlVW50aWwodGhpcy5fb25EZXN0cm95JCkpO1xyXG4gICAgICAgIHRoaXMudG9vbGJhckJ1dHRvbnMkID0gY29tYmluZUxhdGVzdChbXHJcbiAgICAgICAgICAgIHRoaXMuX3Rvb2xiYXJCdXR0b25zV29ya2Zsb3dCdXR0b25zLmFzT2JzZXJ2YWJsZSgpLFxyXG4gICAgICAgICAgICB0aGlzLl90b29sYmFyQnV0dG9uc1NvdXJjZS5hc09ic2VydmFibGUoKVxyXG4gICAgICAgIF0pLnBpcGUoXHJcbiAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9vbkRlc3Ryb3kkKSxcclxuICAgICAgICAgICAgbWFwKChbd2ZCdG5zLCBjXSkgPT5cclxuICAgICAgICAgICAgICAgICFjXHJcbiAgICAgICAgICAgICAgICAgICAgPyBbXVxyXG4gICAgICAgICAgICAgICAgICAgIDogW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC4uLndmQnRucyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5jLm1hcCgoZCkgPT4gKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGlkZVRleHQ6IGQuQ29tbWFuZD8uSXNCdWlsdGluICYmIGQuaXRlbUlkICE9PSAnTmV3JyA/IHRydWUgOiBmYWxzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0pKVxyXG4gICAgICAgICAgICAgICAgICAgICAgXVxyXG4gICAgICAgICAgICApLFxyXG4gICAgICAgICAgICBtYXAoKGMpID0+XHJcbiAgICAgICAgICAgICAgICAhYyA/IFtdIDogWy4uLmMuZmlsdGVyKChkKSA9PiAhZC5Db21tYW5kPy5Jc0J1aWx0aW4pLCAuLi5jLmZpbHRlcigoZCkgPT4gZC5Db21tYW5kPy5Jc0J1aWx0aW4pXVxyXG4gICAgICAgICAgICApLFxyXG4gICAgICAgICAgICBtYXAoKGMpID0+XHJcbiAgICAgICAgICAgICAgICBjLnJlZHVjZSgoYWNjLCBiKSA9PiAoYWNjLmxlbmd0aCA+IDAgJiYgYWNjW2FjYy5sZW5ndGggLSAxXVsnMCddICYmIGJbJzAnXSA/IGFjYyA6IFsuLi5hY2MsIGJdKSwgW10pXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuZGVzdHJveSQgPSB0aGlzLl9kZXN0cm95U291cmNlLmFzT2JzZXJ2YWJsZSgpLnBpcGUodGFwKCgpID0+IHRoaXMuX3Vuc2N1YnNjcmliZUNvbnRleHQoKSkpO1xyXG4gICAgICAgIHRoaXMubW9EYXRhTGlzdCQgPSB0aGlzLm1vRGF0YUxpc3RTb3VyY2UuYXNPYnNlcnZhYmxlKCkucGlwZSgpO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRDb3VudCQgPSB0aGlzLm1vRGF0YUxpc3QkLnBpcGUobWFwKChpdGVtcykgPT4gaXRlbXMuZmlsdGVyKChkKSA9PiBkLiRJc0NoZWNrZWQpLmxlbmd0aCkpO1xyXG4gICAgICAgIHRoaXMucmVwb3J0SWQkID0gdGhpcy5fcmVwb3J0U291cmNlLmFzT2JzZXJ2YWJsZSgpLnBpcGUobWFwKChyZXBvcnQpID0+IHJlcG9ydD8uSWQpKTtcclxuXHJcbiAgICAgICAgdGhpcy5hbGxvd0lubGluZUVkaXQkID0gdGhpcy5fYWxsb3dJbmxpbmVFZGl0U291cmNlLmFzT2JzZXJ2YWJsZSgpO1xyXG4gICAgICAgIHRoaXMuaW5saW5lRWRpdE1vZGUkID0gdGhpcy5faW5saW5lRWRpdE1vZGVTb3VyY2UuYXNPYnNlcnZhYmxlKCk7XHJcbiAgICAgICAgdGhpcy5vbmx5SW5saW5lRWRpdCQgPSB0aGlzLl9vbmx5SW5saW5lRWRpdFNvdXJjZS5hc09ic2VydmFibGUoKTtcclxuICAgICAgICB0aGlzLm9wZW5TZWFyY2hGaWxlc01hbmFnZSQgPSB0aGlzLl9vcGVuU2VhcmNoRmlsZXNNYW5hZ2VTb3VyY2UuYXNPYnNlcnZhYmxlKCk7XHJcbiAgICAgICAgdGhpcy5zZWFyY2hQYW5lbE1vQ2hhbmdlZCQgPSB0aGlzLl9zZWFyY2hQYW5lbE1vQ2hhbmdlZFNvdXJjZS5hc09ic2VydmFibGUoKS5waXBlKGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpO1xyXG4gICAgICAgIHRoaXMubGF5b3V0SW5mbyQgPSB0aGlzLl9sYXlvdXRJbmZvU291cmNlLmFzT2JzZXJ2YWJsZSgpLnBpcGUoc2hhcmVSZXBsYXkoMSkpO1xyXG4gICAgICAgIHRoaXMuYWxsU2VhcmNoUGFuZWxTZXR0aW5ncyQgPSBjb21iaW5lTGF0ZXN0KFtcclxuICAgICAgICAgICAgdGhpcy5fYWxsU2VhcmNoUGFuZWxTZXR0aW5nc1NvdXJjZS5hc09ic2VydmFibGUoKSxcclxuICAgICAgICAgICAgdGhpcy5fZGVmYXVsdFNlYXJjaFBhbmVsU2V0dGluZ3NTb3VyY2UuYXNPYnNlcnZhYmxlKClcclxuICAgICAgICBdKS5waXBlKFxyXG4gICAgICAgICAgICBtYXAoKFthbGxTZXR0aW5ncywgZGVmYXVsdFNldHRpbmdzXSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKGRlZmF1bHRTZXR0aW5ncyAmJiBhbGxTZXR0aW5ncykge1xyXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHRTZXR0aW5ncy5Jc0RlZmF1bHQgPSAhYWxsU2V0dGluZ3Muc29tZSgoYykgPT4gYy5Jc0RlZmF1bHQpO1xyXG4gICAgICAgICAgICAgICAgICAgIGFsbFNldHRpbmdzID0gW2RlZmF1bHRTZXR0aW5ncywgLi4uYWxsU2V0dGluZ3NdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGFsbFNldHRpbmdzO1xyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgZGVsYXkoMCksXHJcbiAgICAgICAgICAgIHNoYXJlUmVwbGF5KDEpXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkU2VhcmNoUGFuZWxTZXR0aW5nc0lkJCA9IHRoaXMuX3NlbGVjdGVkU2VhcmNoUGFuZWxTZXR0aW5nc0lkU291cmNlXHJcbiAgICAgICAgICAgIC5hc09ic2VydmFibGUoKVxyXG4gICAgICAgICAgICAucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKTtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkU2VhcmNoUGFuZWxTZXR0aW5ncyQgPSBjb21iaW5lTGF0ZXN0KFtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFNlYXJjaFBhbmVsU2V0dGluZ3NJZCQsXHJcbiAgICAgICAgICAgIHRoaXMuYWxsU2VhcmNoUGFuZWxTZXR0aW5ncyRcclxuICAgICAgICBdKS5waXBlKFxyXG4gICAgICAgICAgICBtYXAoKFtpZCwgc2V0dGluZ3NdKSA9PiBzZXR0aW5ncz8uZmluZCgoYykgPT4gYy5JZCA9PT0gaWQpKSxcclxuICAgICAgICAgICAgc2hhcmVSZXBsYXkoMSlcclxuICAgICAgICApO1xyXG4gICAgfVxyXG4gICAgZ2V0IGhpZGVQYWdpbmckKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9oaWRlUGFnaW5nU291cmNlLmFzT2JzZXJ2YWJsZSgpO1xyXG4gICAgfVxyXG4gICAgZ2V0IHNob3dDb250ZXh0TWVudSQoKTogT2JzZXJ2YWJsZTx2b2lkPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Nob3dDb250ZXh0TWVudVNvdXJjZS5hc09ic2VydmFibGUoKTtcclxuICAgIH1cclxuICAgIGdldCBncmlkRnJlZUNvbHVtblNpemluZyQoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dyaWRGcmVlQ29sdW1uU2l6aW5nJC5hc09ic2VydmFibGUoKTtcclxuICAgIH1cclxuICAgIGdldCBjYW5TYXZlR3JpZFNldHRpbmckKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9jYW5TYXZlR3JpZFNldHRpbmckLmFzT2JzZXJ2YWJsZSgpO1xyXG4gICAgfVxyXG4gICAgZ2V0IGluRGlhbG9nJCgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5faW5EaWFsb2ckLmFzT2JzZXJ2YWJsZSgpO1xyXG4gICAgfVxyXG4gICAgZ2V0IGlzTXVsdGlTZWxlY3QkKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9pc011bHRpU2VsZWN0JC5hc09ic2VydmFibGUoKTtcclxuICAgIH1cclxuICAgIGdldCBmdWxsc2NyZWVuJCgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZnVsbHNjcmVlbiQuYXNPYnNlcnZhYmxlKCk7XHJcbiAgICB9XHJcbiAgICBnZXQgY2FydGFibGVDaGlsZHNNbyQoKTogT2JzZXJ2YWJsZTx7IFtrZXk6IHN0cmluZ106IE1ldGFvYmplY3REYXRhTW9kZWwgfSB8IG51bGw+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fY2FydGFibGVDaGlsZHNNbyQuYXNPYnNlcnZhYmxlKCk7XHJcbiAgICB9XHJcbiAgICBnZXQgY2FydGFibGVUZW1wbGF0ZXMkKCk6IE9ic2VydmFibGU8eyBba2V5OiBzdHJpbmddOiBGb3JtU2V0dGluZyB9IHwgbnVsbD4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9jYXJ0YWJsZVRlbXBsYXRlcyQuYXNPYnNlcnZhYmxlKCk7XHJcbiAgICB9XHJcbiAgICBnZXQgc2VhcmNoUGFuZWxVaSgpOiBhbnkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9zZWFyY2hQYW5lbFVpU291cmNlLmdldFZhbHVlKCk7XHJcbiAgICB9XHJcbiAgICBnZXQgcmVwb3J0SWQoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcmVwb3J0U291cmNlLmdldFZhbHVlKCk/LklkO1xyXG4gICAgfVxyXG4gICAgZ2V0IGFsbFNlYXJjaFBhbmVsU2V0dGluZ3MoKTogU2VhcmNoUGFuZWxTZXR0aW5nc1tdIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fYWxsU2VhcmNoUGFuZWxTZXR0aW5nc1NvdXJjZS5nZXRWYWx1ZSgpO1xyXG4gICAgfVxyXG4gICAgZ2V0IGhpZGVTZWFyY2hwYW5lbCQoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2hpZGVTZWFyY2hhcGFuZWxTb3VyY2UuYXNPYnNlcnZhYmxlKCkucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKTtcclxuICAgIH1cclxuICAgIGdldCBoaWRlU2VhcmNocGFuZWwoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2hpZGVTZWFyY2hhcGFuZWxTb3VyY2UuZ2V0VmFsdWUoKTtcclxuICAgIH1cclxuICAgIGdldCBjc3NCYWNrZ3JvdW5kJCgpOiBPYnNlcnZhYmxlPENzc0JhY2tncm91bmQgfCBudWxsPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Nzc0JhY2tncm91bmRTb3VyY2UuYXNPYnNlcnZhYmxlKCk7XHJcbiAgICB9XHJcbiAgICBzZXRCYWNrZ3JvdW5kKGNzc0JhY2tncm91bmQ6IENzc0JhY2tncm91bmQpOiB2b2lkIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fY3NzQmFja2dyb3VuZFNvdXJjZS5uZXh0KGNzc0JhY2tncm91bmQpO1xyXG4gICAgfVxyXG4gICAgaGlkZVBhZ2luZyhoaWRlOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5faGlkZVBhZ2luZ1NvdXJjZS5uZXh0KGhpZGUpO1xyXG4gICAgfVxyXG4gICAgc2V0VWlWaWV3ZXJDbGFzcyhzZWxlY3Rvcjogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fc2V0VWlWaWV3ZXJTZWxlY3RvciQubmV4dChzZWxlY3Rvcik7XHJcbiAgICB9XHJcbiAgICBoaWRlVWx2VGl0bGVQYWdlKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX2hpZGVVbHZQYWdlVGl0bGUkLm5leHQodHJ1ZSk7XHJcbiAgICB9XHJcbiAgICBzZXRDYW5TYXZlR3JpZFNldHRpbmdzKHZhbDogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX2NhblNhdmVHcmlkU2V0dGluZyQubmV4dCh2YWwpO1xyXG4gICAgfVxyXG4gICAgZXhlY3V0ZVRvb2xiYXJCdXR0b24oaXRlbUlkOiBzdHJpbmcsIG9wdGlvbnM/OiBhbnkpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBidXR0b25zID0gdGhpcy5fdG9vbGJhckJ1dHRvbnNTb3VyY2UuZ2V0VmFsdWUoKTtcclxuICAgICAgICBpZiAoIWJ1dHRvbnMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgYnRuID0gYnV0dG9ucy5maW5kKChjKSA9PiBjLml0ZW1JZCA9PT0gaXRlbUlkKTtcclxuICAgICAgICBpZiAoYnRuKSB7XHJcbiAgICAgICAgICAgIGV4ZWN1dGVVbHZDb21tYW5kSGFuZGxlcihidG4sIG9wdGlvbnMpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGFkZFdvcmtmbG93QnV0dG9uc0luVG9vbGJhcihlOiBTaGFyZUJ1dHRvbnNDaG9pY2VEZWYpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBhcnJPZlNoYXJlQnV0dG9ucyA9IHRoaXMuX2NyZWF0ZVdvcmtmbG93U2hhcmVCdXR0b25zKGUpO1xyXG4gICAgICAgIGNvbnN0IHZhbHVlID0gYXJyT2ZTaGFyZUJ1dHRvbnMubWFwKChjKSA9PiAoe1xyXG4gICAgICAgICAgICBpY29uOiAnJyxcclxuICAgICAgICAgICAgdGV4dDogYyxcclxuICAgICAgICAgICAgaXRlbUlkOiBjLFxyXG4gICAgICAgICAgICBEYXRhOiBudWxsLFxyXG4gICAgICAgICAgICAkU2hhcmVXb3JrZmxvd0J1dHRvbnM6IHRydWUsXHJcbiAgICAgICAgICAgIENvbW1hbmQ6IHsgX2lzVmlzaWJsZTogdHJ1ZSwgX2lzRW5hYmxlOiB0cnVlLCBKc29uRXh0cmFQcm9wOiB7IERlc2lnbjogJ2F0dGVudGlvbicgfSB9LFxyXG4gICAgICAgICAgICBoYW5kbGVyOiAoZCkgPT4gdGhpcy5vbldvcmtmbG93QnV0dG9uSW5Ub29sYmFyQ2xpY2soZCksXHJcbiAgICAgICAgICAgIElzQnVpbHRpbjogZmFsc2VcclxuICAgICAgICB9KSk7XHJcbiAgICAgICAgdGhpcy5fdG9vbGJhckJ1dHRvbnNXb3JrZmxvd0J1dHRvbnMubmV4dCh2YWx1ZSk7XHJcbiAgICB9XHJcbiAgICBfZXhjbHVkZVdyYXBwZXJGcm9tTW8obW86IE1ldGFvYmplY3REYXRhTW9kZWwpOiBNZXRhb2JqZWN0RGF0YU1vZGVsIHtcclxuICAgICAgICAvKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtdmFycyAqL1xyXG4gICAgICAgIGNvbnN0IHsgJFdyYXBwZXIsIC4uLm5ld01vIH0gPSBtbztcclxuICAgICAgICByZXR1cm4gbmV3TW87XHJcbiAgICB9XHJcbiAgICBvbldvcmtmbG93QnV0dG9uSW5Ub29sYmFyQ2xpY2soc2hhcmVCdXR0b246IHsgdGV4dDogc3RyaW5nIH0pOiB2b2lkIHtcclxuICAgICAgICBCYXJzYUFwaS5Cdy5Nc2cuT0tDYW5jZWwoJ9ii24zYpyDYp9iyINiq2KfbjNuM2K8g2YXZiNin2LHYryDaqdin2LHYqtin2KjZhCDZhdi32YXYptmGINmH2LPYqtuM2K/YnycsICfYqtin24zbjNivJywgKHJlcykgPT4ge1xyXG4gICAgICAgICAgICBpZiAocmVzID09PSAnb2snKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl93b3JrZmxvd1NoYXJlQnV0dG9ucy5mb3JFYWNoKChjKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hvaWNlRGVmID0gYy5jaG9pY2VMaXN0LmZpbmQoKGQpID0+IGQuVGl0bGUgPT09IHNoYXJlQnV0dG9uLnRleHQpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjaG9pY2VEZWYpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYy5mb3JtUGFuZWxDdHJsci5Xb3JrZmxvd1RyYW5zaXRpb24oY2hvaWNlRGVmLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGlzLl9zZXRXb3JrZmxvd1N0YXRlKCdGaW5pc2gnLCBbYy5tb10pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIC8vIHRoaXMuX3NldFdvcmtmbG93U3RhdGUoXHJcbiAgICAgICAgICAgICAgICAvLyAgICAgJ1BlbmRpbmcnLFxyXG4gICAgICAgICAgICAgICAgLy8gICAgIHRoaXMuX3dvcmtmbG93U2hhcmVCdXR0b25zLm1hcCgoYykgPT4gYy5tbylcclxuICAgICAgICAgICAgICAgIC8vICk7XHJcbiAgICAgICAgICAgICAgICAvLyBjb25zdCBwYXJhbXMgPSB0aGlzLl93b3JrZmxvd1NoYXJlQnV0dG9ucy5tYXAoKGMpID0+ICh7XHJcbiAgICAgICAgICAgICAgICAvLyAgICAgbW86IHRoaXMuX2V4Y2x1ZGVXcmFwcGVyRnJvbU1vKGMubW8uUmVsYXRlZE1vKSxcclxuICAgICAgICAgICAgICAgIC8vICAgICBjaG9pY2VEZWY6IGMuY2hvaWNlTGlzdC5maW5kKChkKSA9PiBkLlRpdGxlID09PSBzaGFyZUJ1dHRvbi50ZXh0KVxyXG4gICAgICAgICAgICAgICAgLy8gfSkpO1xyXG4gICAgICAgICAgICAgICAgLy8gdGhpcy5fc2V0V29ya2Zsb3dTdGF0ZSgnUGVuZGluZycsIHBhcmFtcyk7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gQmFyc2FBcGkuQ29tbW9uLkFqYXguR2V0U2VydmVyRGF0YShcclxuICAgICAgICAgICAgICAgIC8vICAgICAnV29ya2Zsb3c5NC5Pbkdyb3VwT2ZDaG9pY2VEZWZzU2VsZWN0JyxcclxuICAgICAgICAgICAgICAgIC8vICAgICB7IHBhcmFtZXRlcjogeyBEYXRhTGlzdDogcGFyYW1zIH0gfSxcclxuICAgICAgICAgICAgICAgIC8vICAgICAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgIHRoaXMuX3NldFdvcmtmbG93U3RhdGUoJ1N1Y2Nlc3MnLCBwYXJhbXMpO1xyXG4gICAgICAgICAgICAgICAgLy8gICAgIH0sIC8vIHN1Y2Nlc3NcclxuICAgICAgICAgICAgICAgIC8vICAgICAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgIHRoaXMuX3NldFdvcmtmbG93U3RhdGUoJ0ZhaWxlZCcsIHBhcmFtcywgJ9mF2KrYp9iz2YHYp9mG2Ycg2LnZhdmE24zYp9iqINmG2KfZhdmI2YHZgiDYqNmI2K8uJyk7XHJcbiAgICAgICAgICAgICAgICAvLyAgICAgfSwgLy8gZmFpbHVyZVxyXG4gICAgICAgICAgICAgICAgLy8gICAgIG51bGwsXHJcbiAgICAgICAgICAgICAgICAvLyAgICAgdGhpc1xyXG4gICAgICAgICAgICAgICAgLy8gKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHNldFRpdGxlKHRpdGxlOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl90aXRsZVNvdXJjZS5uZXh0KHsgdGV4dDogdGl0bGUsIGltYWdlOiAnJyB9KTtcclxuICAgIH1cclxuICAgIHRvZ2dsZUhpZGVTZWFyY2hwYW5lbCh2YWw/OiBib29sZWFuKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5faGlkZVNlYXJjaGFwYW5lbFNvdXJjZS5uZXh0KHR5cGVvZiB2YWwgIT09ICd1bmRlZmluZWQnID8gdmFsIDogIXRoaXMuX2hpZGVTZWFyY2hhcGFuZWxTb3VyY2UuZ2V0VmFsdWUoKSk7XHJcbiAgICB9XHJcbiAgICBzZXRDb250ZXh0KGNvbnRleHQpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9jb250ZXh0U291cmNlLm5leHQoY29udGV4dCk7XHJcbiAgICB9XHJcbiAgICBzZXRJbkRpYWxvZyh2YWw6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9pbkRpYWxvZyQubmV4dCh2YWwpO1xyXG4gICAgfVxyXG4gICAgc2V0SXNNdWx0aVNlbGVjdCh2YWw6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9pc011bHRpU2VsZWN0JC5uZXh0KHZhbCk7XHJcbiAgICB9XHJcbiAgICBzZXRGdWxsc2NyZWVuKHZhbDogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX2Z1bGxzY3JlZW4kLm5leHQodmFsKTtcclxuICAgIH1cclxuXHJcbiAgICBjcmVhdGVOZXdJbmxpbmVNbyhpc0NoZWNrZWQ6IGJvb2xlYW4pOiBNZXRhb2JqZWN0RGF0YU1vZGVsIHtcclxuICAgICAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5jb250ZXh0O1xyXG4gICAgICAgIGNvbnN0IGZvcm1TZXR0aW5nID0gY29udGV4dC5TZXR0aW5nLkZvcm1UZW1wbGF0ZTtcclxuICAgICAgICBjb25zdCB0eXBlRGVmSWQgPSBjb250ZXh0LlNldHRpbmcuRXh0cmEuUmVwb3J0LlR5cGVEZWZJZDtcclxuICAgICAgICBjb25zdCBuZXdNbyA9IGdldE5ld01vR3JpZEVkaXRvcihmb3JtU2V0dGluZywgdHlwZURlZklkKSBhcyBNZXRhb2JqZWN0RGF0YU1vZGVsO1xyXG4gICAgICAgIG5ld01vLklkID0gZ2VucmF0ZUlubGluZU1vSWQoKTtcclxuICAgICAgICBuZXdNby4kSXNDaGVja2VkID0gaXNDaGVja2VkO1xyXG4gICAgICAgIG5ld01vLiROZXdJbmxpbmVNbyA9IHRydWU7XHJcbiAgICAgICAgaWYgKHRoaXMuX2lzQ29tcG9zaXRlKGNvbnRleHQpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlbGF0aW9uID0gQmFyc2FBcGkuQ29tbW9uLlV0aWwuVHJ5R2V0VmFsdWUodGhpcy5jb250ZXh0LlNldHRpbmcsICdFeHRyYS5SZWxhdGlvbicpO1xyXG4gICAgICAgICAgICBuZXdNb1tyZWxhdGlvbi5QYXJlbnRGZE5hbWVdID0gcmVsYXRpb24uUGFyZW50TW9JZDtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gIHRoaXMuX25ld0lubGluZUVkaXRNb1NvdXJjZS5uZXh0KG5ld01vKTtcclxuICAgICAgICByZXR1cm4gbmV3TW87XHJcbiAgICB9XHJcbiAgICBzZXRMYXlvdXRJbmZvKGxheW91dEluZm8pOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9sYXlvdXRJbmZvU291cmNlLm5leHQobGF5b3V0SW5mbyk7XHJcbiAgICB9XHJcblxyXG4gICAgZGVzdHJveSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9vbkRlc3Ryb3kkLm5leHQoKTtcclxuICAgICAgICB0aGlzLl91bnNjdWJzY3JpYmVDb250ZXh0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgcGFnZVNpemVDaGFuZ2VkKHBhZ2VJbmRleCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuY29udGV4dC5maXJlRXZlbnQoJ1BhZ2VDaGFuZ2UnLCB0aGlzLmNvbnRleHQsIHBhZ2VJbmRleCk7XHJcbiAgICB9XHJcblxyXG4gICAgcGFnZUNoYW5nZWQocGFnZUluZGV4KTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5jb250ZXh0LmN1cnJlbnRQYWdlID0gcGFnZUluZGV4O1xyXG4gICAgICAgIHRoaXMuY29udGV4dC5maXJlRXZlbnQoJ1BhZ2VDaGFuZ2UnLCB0aGlzLmNvbnRleHQsIHBhZ2VJbmRleCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVTZXRNb0RhdGFMaXN0KG1vRGF0YUxpc3Q/OiBNZXRhb2JqZWN0RGF0YU1vZGVsW10pOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBuZXdNb0RhdGFMaXN0ID0gbW9EYXRhTGlzdCA/PyB0aGlzLm1vRGF0YUxpc3RTb3VyY2UuZ2V0VmFsdWUoKTtcclxuICAgICAgICB0aGlzLl9tb0RhdGFMaXN0Q2hhbmdlZChbLi4ubmV3TW9EYXRhTGlzdF0pO1xyXG4gICAgICAgIGlmICghdGhpcy5jb250ZXh0LlNldHRpbmc/LklzQ2FydGFibGVSZXBvcnQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBrZXlPZkNhdGFibGVUZW1wbGF0ZXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcclxuICAgICAgICBuZXdNb0RhdGFMaXN0LmZvckVhY2goKGMpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgdHBkZklkID0gYy5SZWxhdGVkTW8/LiRUeXBlRGVmSWQ7XHJcbiAgICAgICAgICAgIGlmICh0cGRmSWQpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGtleSA9IGAke3RwZGZJZH0ke3RoaXMuX2NhcnRhYmxlS2V5U2VwZXJhdG9yfSR7Yy5DYXJ0YWJsZVNldHRpbmdzPy5JZCB8fCAnMCd9YDtcclxuICAgICAgICAgICAgICAgIGtleU9mQ2F0YWJsZVRlbXBsYXRlcy5hZGQoa2V5KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmIChrZXlPZkNhdGFibGVUZW1wbGF0ZXMuc2l6ZSA+IDApIHtcclxuICAgICAgICAgICAgdGhpcy5fbG9hZENhcnRhYmxlVGVtcGxhdGUoa2V5T2ZDYXRhYmxlVGVtcGxhdGVzKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvLyBTZWFyY2ggU2V0dGluZyBNYW5hZ2VyXHJcbiAgICBjbGVhclNlYXJjaCgpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBzZWFyY2hQYW5lbFVpID0gdGhpcy5zZWFyY2hQYW5lbFVpO1xyXG4gICAgICAgIGlmICghc2VhcmNoUGFuZWxVaSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGZpZWxkVWkgPSBzZWFyY2hQYW5lbFVpLl9kaWN0RmllbGRVaS4kU2VhcmNoID8/IHNlYXJjaFBhbmVsVWkuX2RpY3RGaWVsZFVpLtis2LPYqtis2Yg7XHJcbiAgICAgICAgZmllbGRVaS5maXJlRXZlbnQoJ0NsZWFyQ2xpY2snKTtcclxuICAgIH1cclxuICAgIHNlYXJjaCgpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBzZWFyY2hQYW5lbFVpID0gdGhpcy5zZWFyY2hQYW5lbFVpO1xyXG4gICAgICAgIGlmICghc2VhcmNoUGFuZWxVaSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBmaWVsZFVpID0gc2VhcmNoUGFuZWxVaS5fZGljdEZpZWxkVWkuJFNlYXJjaCA/PyBzZWFyY2hQYW5lbFVpLl9kaWN0RmllbGRVaS7YrNiz2KrYrNmIO1xyXG4gICAgICAgIGlmICghZmllbGRVaSkge1xyXG4gICAgICAgICAgICBPYmplY3Qua2V5cyhzZWFyY2hQYW5lbFVpLl9kaWN0RmllbGRVaSkuZm9yRWFjaCgoYykgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZSA9IHNlYXJjaFBhbmVsVWkuX2RpY3RGaWVsZFVpW2NdO1xyXG4gICAgICAgICAgICAgICAgaWYgKGUub3JpZ2luYWxYdHlwZSA9PT0gJ1VpLlNlYXJjaENvbW1hbmRJbmZvVWknKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZmllbGRVaSA9IGU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZmllbGRVaSkge1xyXG4gICAgICAgICAgICBmaWVsZFVpLmZpcmVFdmVudCgnU2VhcmNoQ2xpY2snKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0VmFsdWVJbmxpbmVFZGl0KCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9pbmxpbmVFZGl0TW9kZVNvdXJjZS5nZXRWYWx1ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEFsbG93SW5saW5lRWRpdCgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fYWxsb3dJbmxpbmVFZGl0U291cmNlLmdldFZhbHVlKCk7XHJcbiAgICB9XHJcbiAgICBzZXRJbmxpbmVFZGl0KHZhbHVlOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5faW5saW5lRWRpdE1vZGVTb3VyY2UubmV4dCh2YWx1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgb3BlblNlYXJjaEZpZWxkc0hpZGRlblNldHRpbmdzKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX29wZW5TZWFyY2hQYW5lbEhpZGRlblNldHRpbmdzU291cmNlLm5leHQoKTtcclxuICAgIH1cclxuXHJcbiAgICBvcGVuU2VhcmNoRmlsZXNNYW5hZ2UoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fb3BlblNlYXJjaEZpbGVzTWFuYWdlU291cmNlLm5leHQoKTtcclxuICAgIH1cclxuXHJcbiAgICBzZWFyY2hQYW5lbE1vQ2hhbmdlZChjaGFuZ2U6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9zZWFyY2hQYW5lbE1vQ2hhbmdlZFNvdXJjZS5uZXh0KGNoYW5nZSk7XHJcbiAgICB9XHJcblxyXG4gICAgbG9hZFNlYXJjaFBhbmVsU2V0dGluZ3MoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuY29udGV4dC5Gb3JtUGFuZWxVaSB8fCAhdGhpcy5fY2FuU2F2ZUdyaWRTZXR0aW5nJC5nZXRWYWx1ZSgpKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5yZXBvcnRJZCRcclxuICAgICAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5fb25EZXN0cm95JCksXHJcbiAgICAgICAgICAgICAgICB0YXAoKHJlcG9ydElkKSA9PiB0aGlzLl9sb2FkU2VhcmNoUGFuZWxTZXR0aW5ncyhyZXBvcnRJZCkpXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICAgLnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGFkZFNlYXJjaFBhbmVsU2V0dGluZ3Moc2VhcmNoUGFuZWxTZXR0aW5nczogU2VhcmNoUGFuZWxTZXR0aW5ncyk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IGFsbFNlYXJjaFBhbmVsU2V0dGluZ3MgPSB0aGlzLl9hbGxTZWFyY2hQYW5lbFNldHRpbmdzU291cmNlLmdldFZhbHVlKCk7XHJcbiAgICAgICAgYWxsU2VhcmNoUGFuZWxTZXR0aW5ncy5wdXNoKHNlYXJjaFBhbmVsU2V0dGluZ3MpO1xyXG4gICAgICAgIHRoaXMuX2FsbFNlYXJjaFBhbmVsU2V0dGluZ3NTb3VyY2UubmV4dChhbGxTZWFyY2hQYW5lbFNldHRpbmdzKTtcclxuICAgIH1cclxuICAgIHNhdmVTZWFyY2hQYW5lbFNldHRpbmcoc2VsZWN0ZWRTZWFyY2hQYW5lbFNldHRpbmdzOiBTZWFyY2hQYW5lbFNldHRpbmdzKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3Qgc2VhcmNoTW8gPSB0aGlzLmdldFNlYXJjaFBhbmVsTW8oKTtcclxuICAgICAgICBjb25zdCBmaWVsZHNTZXR0aW5nID0gdGhpcy5nZXRTZWFyY2hQYW5lbEZpZWxkc1NldHRpbmcoKTtcclxuICAgICAgICBpZiAoIXNlbGVjdGVkU2VhcmNoUGFuZWxTZXR0aW5ncykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHNlbGVjdGVkU2VhcmNoUGFuZWxTZXR0aW5ncy5TZWFyY2hNbyA9IEpTT04uc3RyaW5naWZ5KHNlYXJjaE1vKTtcclxuICAgICAgICBzZWxlY3RlZFNlYXJjaFBhbmVsU2V0dGluZ3MuRmllbGRzU2V0dGluZyA9IEpTT04uc3RyaW5naWZ5KGZpZWxkc1NldHRpbmcpO1xyXG4gICAgICAgIEJhcnNhQXBpLkJ3LlJ1bkJsTWV0aG9kKFxyXG4gICAgICAgICAgICAnU2F2ZVNlYXJjaFBhbmVsU2V0dGluZ3MnLFxyXG4gICAgICAgICAgICBuZXcgQmFyc2FBcGkuQ29tbW9uLk1ldGFPYmplY3RXZWIoe1xyXG4gICAgICAgICAgICAgICAgSWQ6IHNlbGVjdGVkU2VhcmNoUGFuZWxTZXR0aW5ncy5JZCxcclxuICAgICAgICAgICAgICAgICRDYXB0aW9uOiBzZWxlY3RlZFNlYXJjaFBhbmVsU2V0dGluZ3MuVGl0bGUsXHJcbiAgICAgICAgICAgICAgICBSZXBvcnRJZDogc2VsZWN0ZWRTZWFyY2hQYW5lbFNldHRpbmdzLlJlcG9ydD8uSWQsXHJcbiAgICAgICAgICAgICAgICBUaXRsZTogc2VsZWN0ZWRTZWFyY2hQYW5lbFNldHRpbmdzLlRpdGxlLFxyXG4gICAgICAgICAgICAgICAgSXNEZWZhdWx0OiBzZWxlY3RlZFNlYXJjaFBhbmVsU2V0dGluZ3MuSXNEZWZhdWx0LFxyXG4gICAgICAgICAgICAgICAgSXNQdWJsaWM6IHNlbGVjdGVkU2VhcmNoUGFuZWxTZXR0aW5ncy5Jc1B1YmxpYyxcclxuICAgICAgICAgICAgICAgIEFwcGx5QXV0b21hdGljYWxseTogc2VsZWN0ZWRTZWFyY2hQYW5lbFNldHRpbmdzLkFwcGx5QXV0b21hdGljYWxseSxcclxuICAgICAgICAgICAgICAgIEhpZGVTZWFyY2hQYW5lbDogc2VsZWN0ZWRTZWFyY2hQYW5lbFNldHRpbmdzLkhpZGVTZWFyY2hQYW5lbCxcclxuICAgICAgICAgICAgICAgIFNlYXJjaE1vOiBzZWxlY3RlZFNlYXJjaFBhbmVsU2V0dGluZ3MuU2VhcmNoTW8sXHJcbiAgICAgICAgICAgICAgICBGaWVsZHNTZXR0aW5nOiBzZWxlY3RlZFNlYXJjaFBhbmVsU2V0dGluZ3MuRmllbGRzU2V0dGluZ1xyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgdHJ1ZVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5zZWFyY2hQYW5lbE1vQ2hhbmdlZChmYWxzZSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXBwbHlTZWFyY2hQYW5lbFNldHRpbmdzKHNlYXJjaFBhbmVsU2V0dGluZ3M6IFNlYXJjaFBhbmVsU2V0dGluZ3MgfCB1bmRlZmluZWQpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBzZWFyY2hQYW5lbFVpID0gdGhpcy5zZWFyY2hQYW5lbFVpO1xyXG4gICAgICAgIGlmICghc2VhcmNoUGFuZWxTZXR0aW5ncykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLl9maXJzdEFwcGx5QXV0b21hdGljYWxseSAmJiBzZWFyY2hQYW5lbFNldHRpbmdzLklzUHJpbWFyeSkge1xyXG4gICAgICAgICAgICB0aGlzLl9maXJzdEFwcGx5QXV0b21hdGljYWxseSA9IGZhbHNlO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX2ZpcnN0QXBwbHlBdXRvbWF0aWNhbGx5ID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMucmVzZXRTZWFyY2hQYW5lbFNldHRpbmdzKHNlYXJjaFBhbmVsVWkpO1xyXG4gICAgICAgIGlmIChzZWFyY2hQYW5lbFNldHRpbmdzLlNlYXJjaE1vKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNlYXJjaE1vID0gSlNPTi5wYXJzZShzZWFyY2hQYW5lbFNldHRpbmdzLlNlYXJjaE1vKTtcclxuICAgICAgICAgICAgT2JqZWN0LmtleXMoc2VhcmNoTW8pLmZvckVhY2goKGMpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGZpZWxkID0gc2VhcmNoUGFuZWxVaS5fZGljdEZpZWxkVWlbY107XHJcbiAgICAgICAgICAgICAgICBpZiAoZmllbGQgJiYgYy5pbmRleE9mKCckJykgPT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZmllbGQuU2V0VmFsdWUoc2VhcmNoTW9bY10pO1xyXG4gICAgICAgICAgICAgICAgICAgIHNlYXJjaFBhbmVsVWkuTW8uU2V0RlZhbHVlKGMsIHNlYXJjaE1vW2NdKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGlmIChzZWFyY2hQYW5lbFNldHRpbmdzLklzUHJpbWFyeSAmJiAhc2VhcmNoUGFuZWxVaS5TZXR0aW5nLkltbWVkaWF0ZUV4ZWN1dGUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VhcmNoUGFuZWxNb0NoYW5nZWQoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChzZWFyY2hQYW5lbFNldHRpbmdzLkFwcGx5QXV0b21hdGljYWxseSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWFyY2goKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBUT0RPIHNldCBoaWRkZW4gZmllbGRzXHJcbiAgICAgICAgaWYgKHNlYXJjaFBhbmVsU2V0dGluZ3MuRmllbGRzU2V0dGluZykge1xyXG4gICAgICAgICAgICBjb25zdCBzZXR0aW5ncyA9IEpTT04ucGFyc2Uoc2VhcmNoUGFuZWxTZXR0aW5ncy5GaWVsZHNTZXR0aW5nKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRBbmRBcHBseVNlYXJjaFBhbmVsU2V0dGluZ0ZpZWxkc1NldHRpbmcoXHJcbiAgICAgICAgICAgICAgICB0eXBlb2Ygc2V0dGluZ3MgPT09ICdzdHJpbmcnID8gSlNPTi5wYXJzZShzZXR0aW5ncykgOiBzZXR0aW5nc1xyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNlYXJjaFBhbmVsTW9DaGFuZ2VkKGZhbHNlKTtcclxuICAgIH1cclxuICAgIGdldFNlYXJjaFBhbmVsTW8oKTogTWV0YW9iamVjdERhdGFNb2RlbCB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VhcmNoUGFuZWxVaS5NbztcclxuICAgIH1cclxuICAgIGdldFNlYXJjaFBhbmVsRmllbGRzU2V0dGluZygpOiBBcnJheTxQYXJ0aWFsPEdlbmVyYWxDb250cm9sSW5mb01vZGVsPj4ge1xyXG4gICAgICAgIGNvbnN0IHNlYXJjaFBhbmVsVWkgPSB0aGlzLnNlYXJjaFBhbmVsVWk7XHJcbiAgICAgICAgY29uc3QgZmllbGRzOiBBcnJheTxHZW5lcmFsQ29udHJvbEluZm9Nb2RlbD4gPSBzZWFyY2hQYW5lbFVpLlNldHRpbmcuVmlldy5Db250cm9sSW5mby5maWx0ZXIoXHJcbiAgICAgICAgICAgIChjKSA9PiBjLkNvbnRyb2xOYW1lICE9PSAnJFNlYXJjaCcgJiYgYy5Db250cm9sTmFtZSAhPT0gJ9is2LPYqtis2YgnXHJcbiAgICAgICAgKTtcclxuICAgICAgICBjb25zdCBmaWVsZHNTZXR0aW5nID0gZmllbGRzLm1hcCgoYykgPT4gKHtcclxuICAgICAgICAgICAgTmFtZTogYy5Db250cm9sTmFtZSxcclxuICAgICAgICAgICAgQ2FwdGlvbjogYy5Db250cm9sRmllbGRDYXB0aW9uVHJhbnNsYXRlZCxcclxuICAgICAgICAgICAgSGlkZGVuOiBzZWFyY2hQYW5lbFVpLl9kaWN0RmllbGRVaVtjLkNvbnRyb2xOYW1lXS5TZXR0aW5nLklzVmlzaWJsZSA9PT0gZmFsc2UgPyB0cnVlIDogZmFsc2UsXHJcbiAgICAgICAgICAgIElzTWFuZGF0b3J5OiBjLklzTWFuZGF0b3J5XHJcbiAgICAgICAgfSkpO1xyXG4gICAgICAgIHJldHVybiBmaWVsZHNTZXR0aW5nO1xyXG4gICAgfVxyXG4gICAgc2V0QW5kQXBwbHlTZWFyY2hQYW5lbFNldHRpbmdGaWVsZHNTZXR0aW5nKGZpZWxkc1NldHRpbmc6IENvbHVtbkluZm9UeXBlW10pOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBzZWFyY2hQYW5lbFVpID0gdGhpcy5zZWFyY2hQYW5lbFVpO1xyXG4gICAgICAgIGZpZWxkc1NldHRpbmcuZm9yRWFjaCgoYykgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBmaWVsZCA9IHNlYXJjaFBhbmVsVWkuX2RpY3RGaWVsZFVpW2MuTmFtZV07XHJcbiAgICAgICAgICAgIGlmIChmaWVsZCkge1xyXG4gICAgICAgICAgICAgICAgc2VhcmNoUGFuZWxVaS5maXJlRXZlbnQoJ0NoYW5nZUZpZWxkVmlzaWJsZScsIGZpZWxkLlNldHRpbmcuQ29udHJvbEZpZWxkQ2FwdGlvbiwgIWMuSGlkZGVuKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgdXBkYXRlU2VhcmNoUGFuZWxTZXR0aW5ncyhhbGxTZWFyY2hQYW5lbFNldHRpbmdzOiBTZWFyY2hQYW5lbFNldHRpbmdzW10pOiB2b2lkIHtcclxuICAgICAgICBhbGxTZWFyY2hQYW5lbFNldHRpbmdzID0gYWxsU2VhcmNoUGFuZWxTZXR0aW5ncy5maWx0ZXIoKGMpID0+ICFjLklzUHJpbWFyeSAmJiAhYy5Jc0RlbGV0ZWQpO1xyXG4gICAgICAgIHRoaXMuX2FsbFNlYXJjaFBhbmVsU2V0dGluZ3NTb3VyY2UubmV4dChhbGxTZWFyY2hQYW5lbFNldHRpbmdzKTtcclxuICAgIH1cclxuXHJcbiAgICByZW1vdmVTZWFyY2hQYW5lbFNldHRpbmdzKHNlYXJjaFBhbmVsU2V0dGluZ3NJZDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgYWxsU2VhcmNoUGFuZWxTZXR0aW5ncyA9IHRoaXMuX2FsbFNlYXJjaFBhbmVsU2V0dGluZ3NTb3VyY2UuZ2V0VmFsdWUoKTtcclxuICAgICAgICBhbGxTZWFyY2hQYW5lbFNldHRpbmdzLmZpbHRlcigoYykgPT4gYy5JZCAhPT0gc2VhcmNoUGFuZWxTZXR0aW5nc0lkKTtcclxuICAgICAgICB0aGlzLl9hbGxTZWFyY2hQYW5lbFNldHRpbmdzU291cmNlLm5leHQoYWxsU2VhcmNoUGFuZWxTZXR0aW5ncyk7XHJcbiAgICB9XHJcblxyXG4gICAgY2hhbmdlU2VsZWN0ZWRTZWFyY2hQYW5lbChzZWxlY3RlZFNlYXJjaFBhbmVsU2V0dGluZ3NJZDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fc2VsZWN0ZWRTZWFyY2hQYW5lbFNldHRpbmdzSWRTb3VyY2UubmV4dChzZWxlY3RlZFNlYXJjaFBhbmVsU2V0dGluZ3NJZCk7XHJcbiAgICB9XHJcblxyXG4gICAgbG9hZE1ldGFDb25kaXRpb25zQ29udHJvbEluZm9zKHR5cGVEZWZJZDogc3RyaW5nLCBmaWVsZERiTmFtZXM6IHN0cmluZ1tdKTogT2JzZXJ2YWJsZTxHZW5lcmFsQ29udHJvbEluZm9Nb2RlbFtdPiB7XHJcbiAgICAgICAgY29uc3QgbW8gPSBHZXREZWZhdWx0TW9PYmplY3RJbmZvKHR5cGVEZWZJZCk7XHJcbiAgICAgICAgcmV0dXJuIG9mKHRoaXMuX2NvbnRyb2xJbmZvc01ldGFvYmplY3QpLnBpcGUoXHJcbiAgICAgICAgICAgIHN3aXRjaE1hcCgoY29udHJvbHNJbmZvKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoY29udHJvbHNJbmZvLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2YoY29udHJvbHNJbmZvKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiBnZXRDb250cm9sTGlzdChtbywgZmllbGREYk5hbWVzLCB0cnVlLCBmYWxzZSk7XHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICB0YXAoKGNvbnRyb2xzSW5mbzogR2VuZXJhbENvbnRyb2xJbmZvTW9kZWxbXSkgPT4gKHRoaXMuX2NvbnRyb2xJbmZvc01ldGFvYmplY3QgPSBjb250cm9sc0luZm8pKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgX2NyZWF0ZVdvcmtmbG93U2hhcmVCdXR0b25zKGU6IFNoYXJlQnV0dG9uc0Nob2ljZURlZik6IHN0cmluZ1tdIHtcclxuICAgICAgICBsZXQgc2hhcmVCdXR0b25zOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgICAgIGlmIChlLmFkZCkge1xyXG4gICAgICAgICAgICB0aGlzLl93b3JrZmxvd1NoYXJlQnV0dG9ucy5wdXNoKGUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3dvcmtmbG93U2hhcmVCdXR0b25zID0gdGhpcy5fd29ya2Zsb3dTaGFyZUJ1dHRvbnMuZmlsdGVyKChjKSA9PiBjLm1vLklkICE9PSBlLm1vLklkKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCF0aGlzLl93b3JrZmxvd1NoYXJlQnV0dG9ucy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyB0aGlzLl93b3JrZmxvd1NoYXJlQnV0dG9ucyA9IHRoaXMuX3dvcmtmbG93U2hhcmVCdXR0b25zLmZpbHRlcigoYykgPT4gYy5tbz8uJElzQ2hlY2tlZCk7XHJcbiAgICAgICAgaWYgKHRoaXMuX3dvcmtmbG93U2hhcmVCdXR0b25zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgc2hhcmVCdXR0b25zID0gdGhpcy5fd29ya2Zsb3dTaGFyZUJ1dHRvbnNbMF0uY2hvaWNlTGlzdC5tYXAoKGQpID0+IGQuVGl0bGUpO1xyXG4gICAgICAgICAgICBjb25zdCB1blNoYXJlQnV0dG9uczogc3RyaW5nW10gPSBbXTtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCB0aGlzLl93b3JrZmxvd1NoYXJlQnV0dG9ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMuX3dvcmtmbG93U2hhcmVCdXR0b25zW2ldO1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBzaGFyZUJ1dHRvbnMubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbS5jaG9pY2VMaXN0Lm1hcCgoZCkgPT4gZC5UaXRsZSkuaW5kZXhPZihzaGFyZUJ1dHRvbnNbal0pIDwgMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB1blNoYXJlQnV0dG9ucy5wdXNoKHNoYXJlQnV0dG9uc1tqXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHNoYXJlQnV0dG9ucyA9IHNoYXJlQnV0dG9ucy5maWx0ZXIoKGMpID0+IHVuU2hhcmVCdXR0b25zLmluZGV4T2YoYykgPT09IC0xKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHNoYXJlQnV0dG9ucztcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBfaW5pdENyZWF0ZU5ld0lubGluZU1vKGNvbnRleHQpOiB2b2lkIHtcclxuICAgICAgICBpZiAoIWNvbnRleHQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBmb3JtU2V0dGluZyA9IGNvbnRleHQuU2V0dGluZy5Gb3JtVGVtcGxhdGU7XHJcbiAgICAgICAgaWYgKGZvcm1TZXR0aW5nKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlTmV3SW5saW5lTW8oZmFsc2UpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgX2lzQ29tcG9zaXRlKGNvbnRleHQpOiBib29sZWFuIHtcclxuICAgICAgICBjb25zdCByZWxhdGlvblR5cGUgPSBCYXJzYUFwaS5Db21tb24uVXRpbC5UcnlHZXRWYWx1ZShjb250ZXh0LlNldHRpbmcsICdFeHRyYS5SZWxhdGlvbi5SZWxhdGlvblR5cGUnKTtcclxuICAgICAgICByZXR1cm4gcmVsYXRpb25UeXBlID09PSBCYXJzYUFwaS5Db21tb24uRW51bXMuUmVsYXRpb25UeXBlLkNvbXBvc2l0aW9uO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIF9hZGRFdmVudExpc3RlbmVyKGNvbnRleHQ6IGFueSk6IHZvaWQge1xyXG4gICAgICAgIGNvbnRleHQub24oe1xyXG4gICAgICAgICAgICBzY29wZTogdGhpcyxcclxuICAgICAgICAgICAgU2hvd0NvbnRleHRNZW51OiB0aGlzLl9zaG93Q29udGV4dE1lbnUsXHJcbiAgICAgICAgICAgIE1hc2tDaGFuZ2VkOiB0aGlzLl9tYXNrQ2hhbmdlZCxcclxuICAgICAgICAgICAgVmlld2VyTWFza0NoYW5nZWQ6IHRoaXMuX3ZpZXdlck1hc2tDaGFuZ2VkLFxyXG4gICAgICAgICAgICBWaWV3ZXJDb250cm9sQ2hhbmdlZDogdGhpcy5fdmlld2VyQ29udHJvbENoYW5nZWQsXHJcbiAgICAgICAgICAgIFZpc2libGVDaGFuZ2VkOiB0aGlzLl92aXNpYmxlQ2hhbmdlZCxcclxuICAgICAgICAgICAgUmVhZG9ubHlDaGFuZ2VkOiB0aGlzLl9yZWFkb25seUNoYW5nZWQsXHJcbiAgICAgICAgICAgIE1lbnVJdGVtc0NoYW5nZWQ6IHRoaXMuX21lbnVJdGVtc0NoYW5nZWQsXHJcbiAgICAgICAgICAgIFRpdGxlQ2hhbmdlZDogdGhpcy5fdGl0bGVDaGFuZ2VkLFxyXG4gICAgICAgICAgICBTZWFyY2hQYW5lbENoYW5nZWQ6IHRoaXMuX3NlYXJjaFBhbmVsQ2hhbmdlZCxcclxuICAgICAgICAgICAgUGFnaW5nU2V0dGluZ0NoYW5nZWQ6IHRoaXMuX3BhZ2luZ1NldHRpbmdDaGFuZ2VkLFxyXG4gICAgICAgICAgICBUb29sYmFyQnV0dG9uc0NoYW5nZWQ6IHRoaXMuX3Rvb2xiYXJCdXR0b25zQ2hhbmdlZCxcclxuICAgICAgICAgICAgRW5hYmxlQ2hhbmdlZDogdGhpcy5fZW5hYmxlQ2hhbmdlZCxcclxuICAgICAgICAgICAgRGVzdHJveTogdGhpcy5fZGVzdHJveUNoYW5nZWQsXHJcbiAgICAgICAgICAgIEV4aXRJbmxpbmVFZGl0OiB0aGlzLl9leGlzdElubGluZUVkaXRcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgX2luaXRpYWxpemUoY29udGV4dDogYW55KTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5faW5pdENhcnRhYmxlc0Zvcm1UZW1wbGF0ZShjb250ZXh0KTtcclxuICAgICAgICB0aGlzLl9pbml0Q29uZGl0aW9uYWxGb3JtYXRzKGNvbnRleHQpO1xyXG4gICAgICAgIHRoaXMuX2luaXRBbGxvd0lubGluZUVkaXQoY29udGV4dCk7XHJcbiAgICAgICAgdGhpcy5faW5pdE9ubHlJbmxpbmVFZGl0KGNvbnRleHQpO1xyXG4gICAgICAgIHRoaXMuX2luaXRJbmxpbmVFZGl0TW9kZShjb250ZXh0KTtcclxuICAgICAgICB0aGlzLl9pbml0UmVwb3J0KGNvbnRleHQpO1xyXG4gICAgICAgIHRoaXMuX2luaXRWaWV3ZXJDb250cm9sKGNvbnRleHQpO1xyXG4gICAgICAgIHRoaXMuX2luaXRIaWRlVG9vbGJhcihjb250ZXh0KTtcclxuICAgICAgICB0aGlzLl9pbml0VG9vbGJhckJ1dHRvbnMoY29udGV4dCk7XHJcbiAgICAgICAgdGhpcy5faW5pdFZpc2libGUoY29udGV4dCk7XHJcbiAgICAgICAgdGhpcy5faW5pdEVuYWJsZShjb250ZXh0KTtcclxuICAgICAgICB0aGlzLl9pbml0VGl0bGUoY29udGV4dCk7XHJcbiAgICAgICAgdGhpcy5faW5pdFJlYWRvbmx5KGNvbnRleHQpO1xyXG4gICAgICAgIHRoaXMuX2luaXRNb0RhdGFMaXN0KGNvbnRleHQpO1xyXG4gICAgICAgIHRoaXMuX2luaXRQYWdpbmdTZXR0aW5nKGNvbnRleHQpO1xyXG4gICAgICAgIHRoaXMuX2luaXRNZW51SXRlbXMoY29udGV4dCk7XHJcbiAgICAgICAgdGhpcy5faW5pdFNlYXJjaHBhbmVsKGNvbnRleHQpO1xyXG4gICAgICAgIHRoaXMuX2luaXRDcmVhdGVOZXdJbmxpbmVNbyhjb250ZXh0KTtcclxuICAgICAgICB0aGlzLl9pbml0R3JpZEZyZWVDb2x1bW5TaXppbmcoY29udGV4dCk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgX2luaXRHcmlkRnJlZUNvbHVtblNpemluZyhjb250ZXh0KTogdm9pZCB7XHJcbiAgICAgICAgaWYgKGNvbnRleHQgJiYgY29udGV4dC5TZXR0aW5nLlZpZXc/LkdyaWRfRnJlZUNvbHVtblNpemluZykge1xyXG4gICAgICAgICAgICB0aGlzLl9ncmlkRnJlZUNvbHVtblNpemluZyQubmV4dChjb250ZXh0LlNldHRpbmcuVmlldz8uR3JpZF9GcmVlQ29sdW1uU2l6aW5nKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgX2luaXRDYXJ0YWJsZXNGb3JtVGVtcGxhdGUoY29udGV4dCk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IGNhcnRhYmxlVGVtcGxhdGVzID0gY29udGV4dC5TZXR0aW5nLkNhcnRhYmxlVGVtcGxhdGVzO1xyXG4gICAgICAgIGlmIChjYXJ0YWJsZVRlbXBsYXRlcykge1xyXG4gICAgICAgICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoY2FydGFibGVUZW1wbGF0ZXMpO1xyXG4gICAgICAgICAgICBrZXlzLmZvckVhY2goKGtleSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjYXJ0YWJsZVRlbXBsYXRlc1trZXldID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhcnRhYmxlVGVtcGxhdGVzW2tleV0gPSBCYXJzYUFwaS5FeHQuZGVjb2RlKGNhcnRhYmxlVGVtcGxhdGVzW2tleV0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgdGhpcy5fY2FydGFibGVUZW1wbGF0ZXMkLm5leHQoY2FydGFibGVUZW1wbGF0ZXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9jYXJ0YWJsZUNoaWxkc01vKGNvbnRleHQpO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIF9pbml0U2VhcmNocGFuZWwoY29udGV4dCk6IHZvaWQge1xyXG4gICAgICAgIGlmIChjb250ZXh0ICYmIGNvbnRleHQuX3NlYXJjaFBhbmVsQ29udHJvbCkge1xyXG4gICAgICAgICAgICB0aGlzLl9zZWFyY2hQYW5lbENoYW5nZWQoY29udGV4dC5fc2VhcmNoUGFuZWxDb250cm9sKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIF9pbml0Q29uZGl0aW9uYWxGb3JtYXRzKGNvbnRleHQpOiB2b2lkIHtcclxuICAgICAgICBpZiAoY29udGV4dCAmJiBjb250ZXh0LlNldHRpbmcuVmlldz8uQ29uZGl0aW9uYWxGb3JtYXRzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2NvbmRpdGlvbmFsRm9ybWF0c0NoYW5nZWQoY29udGV4dC5TZXR0aW5nLlZpZXc/LkNvbmRpdGlvbmFsRm9ybWF0cyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBfaW5pdE1lbnVJdGVtcyhjb250ZXh0KTogdm9pZCB7XHJcbiAgICAgICAgaWYgKGNvbnRleHQgJiYgY29udGV4dC5tZW51SXRlbXMpIHtcclxuICAgICAgICAgICAgLy8gY29uc3QgbmV3SXRlbXMgPSBjb250ZXh0Lm1lbnVJdGVtcztcclxuICAgICAgICAgICAgdGhpcy5fbWVudUl0ZW1zQ2hhbmdlZChjb250ZXh0Lm1lbnVJdGVtcyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBfaW5pdFJlcG9ydChjb250ZXh0KTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgcmVwb3J0ID0gQmFyc2FBcGkuQ29tbW9uLlV0aWwuVHJ5R2V0VmFsdWUoY29udGV4dCwgJ1NldHRpbmcuRXh0cmEuUmVwb3J0JywgW10pO1xyXG4gICAgICAgIHRoaXMuX3JlcG9ydFNvdXJjZS5uZXh0KHJlcG9ydCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIF9pbml0TW9EYXRhTGlzdChjb250ZXh0KTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgbW9EYXRhTGlzdCA9IEJhcnNhQXBpLkNvbW1vbi5VdGlsLlRyeUdldFZhbHVlKGNvbnRleHQsICdTZXR0aW5nLkRhdGEuTW9EYXRhTGlzdCcsIFtdKTtcclxuICAgICAgICB0aGlzLl9tb0RhdGFMaXN0Q2hhbmdlZChtb0RhdGFMaXN0KTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBfY2FydGFibGVDaGlsZHNNbyhjb250ZXh0KTogdm9pZCB7XHJcbiAgICAgICAgaWYgKGNvbnRleHQuU2V0dGluZy5DYXJ0YWJsZUNoaWxkc01vKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2NhcnRhYmxlQ2hpbGRzTW8kLm5leHQoY29udGV4dC5TZXR0aW5nLkNhcnRhYmxlQ2hpbGRzTW8pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgX2luaXRQYWdpbmdTZXR0aW5nKGNvbnRleHQpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBwYWdpbmdTZXR0aW5nID0gQmFyc2FBcGkuQ29tbW9uLlV0aWwuVHJ5R2V0VmFsdWUoY29udGV4dCwgJ1NldHRpbmcuRGF0YS5QYWdpbmcnLCBudWxsKTtcclxuICAgICAgICB0aGlzLl9wYWdpbmdTZXR0aW5nQ2hhbmdlZChwYWdpbmdTZXR0aW5nKTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgX2luaXRUaXRsZShjb250ZXh0KTogdm9pZCB7XHJcbiAgICAgICAgbGV0IHRpdGxlID0gQmFyc2FBcGkuQ29tbW9uLlV0aWwuVHJ5R2V0VmFsdWUoY29udGV4dCwgJ3RpdGxlJywgbnVsbCk7XHJcbiAgICAgICAgaWYgKHRpdGxlID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRpdGxlID0gQmFyc2FBcGkuQ29tbW9uLlV0aWwuVHJ5R2V0VmFsdWUoY29udGV4dCwgJ1NldHRpbmcuRXh0cmEuUmVwb3J0LkNhcHRpb24nLCAnJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX3RpdGxlQ2hhbmdlZCh7IHRleHQ6IHRpdGxlLCBpbWFnZTogJycgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIF9pbml0UmVhZG9ubHkoY29udGV4dCk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IHJlYWRvbmx5ID0gY29udGV4dC5yZWFkb25seSA9PT0gdHJ1ZSA/IHRydWUgOiBmYWxzZTtcclxuICAgICAgICB0aGlzLl9yZWFkb25seUNoYW5nZWQocmVhZG9ubHkpO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBfaW5pdEVuYWJsZShjb250ZXh0KTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgZW5hYmxlID0gY29udGV4dC5lbmFibGUgPT09IGZhbHNlID8gZmFsc2UgOiB0cnVlO1xyXG4gICAgICAgIHRoaXMuX2VuYWJsZUNoYW5nZWQoZW5hYmxlKTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgX2luaXRWaXNpYmxlKGNvbnRleHQpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCB2aXNpYmxlID0gY29udGV4dC5TZXR0aW5nLklzVmlzaWJsZSA9PT0gZmFsc2UgPyBmYWxzZSA6IHRydWU7XHJcbiAgICAgICAgdGhpcy5fdmlzaWJsZUNoYW5nZWQodmlzaWJsZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIF9pbml0VG9vbGJhckJ1dHRvbnMoY29udGV4dCk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IGJ1dHRvbnMgPSBjb250ZXh0LnRsYkJ1dHRvbnM7XHJcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYnV0dG9ucykpIHtcclxuICAgICAgICAgICAgdGhpcy5fdG9vbGJhckJ1dHRvbnNDaGFuZ2VkKGJ1dHRvbnMpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgX2luaXRJbmxpbmVFZGl0TW9kZShjb250ZXh0KTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgaW5saW5lRWRpdE1vZGU6IGJvb2xlYW4gPSBjb250ZXh0LlNldHRpbmc/LlZpZXc/LkF1dG9JbmxpbmVFZGl0O1xyXG4gICAgICAgIHRoaXMuX2lubGluZUVkaXRNb2RlU291cmNlLm5leHQoaW5saW5lRWRpdE1vZGUpO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBfaW5pdEFsbG93SW5saW5lRWRpdChjb250ZXh0KTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgYWxsb3dJbmxpbmVFZGl0OiBib29sZWFuID0gY29udGV4dC5TZXR0aW5nPy5WaWV3Py5BbGxvd0lubGluZUVkaXQ7XHJcbiAgICAgICAgY29uc3QgYWxsb3dFZGl0ID0gY29udGV4dC5TZXR0aW5nLkV4dHJhPy5EZWZhdWx0Q29tbWFuZHNBY2Nlc3M/LkVkaXQ7XHJcbiAgICAgICAgdGhpcy5fYWxsb3dJbmxpbmVFZGl0U291cmNlLm5leHQoYWxsb3dJbmxpbmVFZGl0ICYmIGFsbG93RWRpdCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIF9pbml0T25seUlubGluZUVkaXQoY29udGV4dCk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IG9ubHlJbmxpbmVFZGl0OiBib29sZWFuID0gY29udGV4dC5TZXR0aW5nPy5WaWV3Py5Pbmx5SW5saW5lRWRpdDtcclxuICAgICAgICB0aGlzLl9vbmx5SW5saW5lRWRpdFNvdXJjZS5uZXh0KG9ubHlJbmxpbmVFZGl0KTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgX2luaXRWaWV3ZXJDb250cm9sKGNvbnRleHQpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCB2aWV3ZXJDb250cm9sID0gY29udGV4dC52aWV3ZXJDb250cm9sO1xyXG4gICAgICAgIGlmICh2aWV3ZXJDb250cm9sKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3ZpZXdlckNvbnRyb2xDaGFuZ2VkKHZpZXdlckNvbnRyb2wpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgX2luaXRIaWRlVG9vbGJhcihjb250ZXh0KTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgaGlkZVRvb2xiYXIgPSBCYXJzYUFwaS5Db21tb24uVXRpbC5UcnlHZXRWYWx1ZShjb250ZXh0LCAnU2V0dGluZy5FeHRyYS5SZXBvcnQuSGlkZVRvb2xiYXInLCBmYWxzZSk7XHJcbiAgICAgICAgdGhpcy5faGlkZVRvb2xiYXJTb3VyY2UubmV4dChoaWRlVG9vbGJhcik7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIF91bnNjdWJzY3JpYmVDb250ZXh0KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuY29udGV4dC51bignU2hvd0NvbnRleHRNZW51JywgdGhpcy5fc2hvd0NvbnRleHRNZW51KTtcclxuICAgICAgICB0aGlzLmNvbnRleHQudW4oJ01hc2tDaGFuZ2VkJywgdGhpcy5fbWFza0NoYW5nZWQpO1xyXG4gICAgICAgIHRoaXMuY29udGV4dC51bignVmlld2VyQ29udHJvbENoYW5nZWQnLCB0aGlzLl92aWV3ZXJDb250cm9sQ2hhbmdlZCk7XHJcbiAgICAgICAgdGhpcy5jb250ZXh0LnVuKCdWaWV3ZXJNYXNrQ2hhbmdlZCcsIHRoaXMuX3ZpZXdlck1hc2tDaGFuZ2VkKTtcclxuICAgICAgICB0aGlzLmNvbnRleHQudW4oJ1Zpc2libGVDaGFuZ2VkJywgdGhpcy5fdmlzaWJsZUNoYW5nZWQpO1xyXG4gICAgICAgIHRoaXMuY29udGV4dC51bignUmVhZG9ubHlDaGFuZ2VkJywgdGhpcy5fcmVhZG9ubHlDaGFuZ2VkKTtcclxuICAgICAgICB0aGlzLmNvbnRleHQudW4oJ01lbnVJdGVtc0NoYW5nZWQnLCB0aGlzLl9tZW51SXRlbXNDaGFuZ2VkKTtcclxuICAgICAgICB0aGlzLmNvbnRleHQudW4oJ1RpdGxlQ2hhbmdlZCcsIHRoaXMuX3RpdGxlQ2hhbmdlZCk7XHJcbiAgICAgICAgdGhpcy5jb250ZXh0LnVuKCdQYWdpbmdTZXR0aW5nQ2hhbmdlZCcsIHRoaXMuX3BhZ2luZ1NldHRpbmdDaGFuZ2VkKTtcclxuICAgICAgICB0aGlzLmNvbnRleHQudW4oJ1Rvb2xiYXJCdXR0b25zQ2hhbmdlZCcsIHRoaXMuX3Rvb2xiYXJCdXR0b25zQ2hhbmdlZCk7XHJcbiAgICAgICAgdGhpcy5jb250ZXh0LnVuKCdFbmFibGVDaGFuZ2VkJywgdGhpcy5fZW5hYmxlQ2hhbmdlZCk7XHJcbiAgICAgICAgdGhpcy5jb250ZXh0LnVuKCdEZXN0cm95JywgdGhpcy5fZGVzdHJveUNoYW5nZWQpO1xyXG4gICAgICAgIHRoaXMuY29udGV4dC51bignRXhpdElubGluZUVkaXQnLCB0aGlzLl9leGlzdElubGluZUVkaXQpO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIF9jb25kaXRpb25hbEZvcm1hdHNDaGFuZ2VkKGNvbmRpdGlvbmFsRm9ybWF0czogYW55KTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fY29uZGl0aW9uYWxGb3JtYXRzU291cmNlLm5leHQoY29uZGl0aW9uYWxGb3JtYXRzKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBfbW9EYXRhTGlzdENoYW5nZWQobW9EYXRhTGlzdCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMubW9EYXRhTGlzdFNvdXJjZS5uZXh0KG1vRGF0YUxpc3QpO1xyXG4gICAgICAgIGlmICh0aGlzLmNvbnRleHQpIHtcclxuICAgICAgICAgICAgdGhpcy5fY2FydGFibGVDaGlsZHNNbyh0aGlzLmNvbnRleHQpO1xyXG4gICAgICAgICAgICB0aGlzLl9pbml0Q2FydGFibGVzRm9ybVRlbXBsYXRlKHRoaXMuY29udGV4dCk7XHJcbiAgICAgICAgICAgIHRoaXMuX2NoZWNrQ2FydGFibGVXb3JrZmxvd1NoYXJlQnV0dG9ucyhtb0RhdGFMaXN0KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgX2NoZWNrQ2FydGFibGVXb3JrZmxvd1NoYXJlQnV0dG9ucyhtb0RhdGFMaXN0OiBNZXRhb2JqZWN0RGF0YU1vZGVsW10pOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBoYXNTZWxlY3RlZCA9IG1vRGF0YUxpc3Quc29tZSgoYykgPT4gYy4kSXNDaGVja2VkKTtcclxuICAgICAgICBjb25zdCBtb0lkcyA9IG1vRGF0YUxpc3QubWFwKChjKSA9PiBjLklkKTtcclxuICAgICAgICB0aGlzLl93b3JrZmxvd1NoYXJlQnV0dG9ucyA9IHRoaXMuX3dvcmtmbG93U2hhcmVCdXR0b25zLmZpbHRlcigoYykgPT4gbW9JZHMuaW5kZXhPZihjLm1vLklkKSA+IC0xKTtcclxuICAgICAgICBpZiAoIWhhc1NlbGVjdGVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3Rvb2xiYXJCdXR0b25zV29ya2Zsb3dCdXR0b25zLm5leHQoW10pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgX3ZpZXdlckNvbnRyb2xDaGFuZ2VkKHZpZXdlckNvbnRyb2wpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl92aWV3ZXJDb250cm9sU291cmNlLm5leHQodmlld2VyQ29udHJvbCk7XHJcbiAgICAgICAgdGhpcy5faW5pdENvbmRpdGlvbmFsRm9ybWF0cyh0aGlzLmNvbnRleHQpO1xyXG4gICAgICAgIHRoaXMuX2luaXRJbmxpbmVFZGl0TW9kZSh0aGlzLmNvbnRleHQpO1xyXG4gICAgICAgIHRoaXMuX2luaXRBbGxvd0lubGluZUVkaXQodGhpcy5jb250ZXh0KTtcclxuICAgICAgICB0aGlzLl9pbml0T25seUlubGluZUVkaXQodGhpcy5jb250ZXh0KTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgX21hc2tDaGFuZ2VkKG1hc2s6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9tYXNrU291cmNlLm5leHQobWFzayk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgX3Nob3dDb250ZXh0TWVudSh4eSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX3Nob3dDb250ZXh0TWVudVNvdXJjZS5uZXh0KHh5KTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBfdmlld2VyTWFza0NoYW5nZWQodmlld2VyTWFzazogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX3ZpZXdlck1hc2tTb3VyY2UubmV4dCh2aWV3ZXJNYXNrKTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgX3JlYWRvbmx5Q2hhbmdlZChyZWFkb25seTogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX3JlYWRvbmx5U291cmNlLm5leHQocmVhZG9ubHkpO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBfdmlzaWJsZUNoYW5nZWQodmlld2VyTWFzazogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX3Zpc2libGVTb3VyY2UubmV4dCh2aWV3ZXJNYXNrKTtcclxuICAgIH1cclxuICAgIHByb3RlY3RlZCBfcmVtb3ZlRXh0cmFNZW51SXRlbXMobWVudUl0ZW1zOiBNZW51SXRlbVtdKTogTWVudUl0ZW1bXSB7XHJcbiAgICAgICAgaWYgKCFtZW51SXRlbXMpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBuZXdJdGVtcyA9IG1lbnVJdGVtcy5maWx0ZXIoXHJcbiAgICAgICAgICAgIChjKSA9PiBjLml0ZW1JZCAhPT0gJ0RlbGV0ZScgJiYgYy5pdGVtSWQgIT09ICdBZGRUb0xpc3QnICYmIGMuaXRlbUlkICE9PSAnUmVtb3ZlRnJvbUxpc3QnXHJcbiAgICAgICAgKTtcclxuICAgICAgICByZXR1cm4gbmV3SXRlbXM7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgX21lbnVJdGVtc0NoYW5nZWQobWVudUl0ZW1zOiBhbnlbXSk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IG5ld01lbnVJdGVtcyA9IHRoaXMuX3JlbW92ZUV4dHJhTWVudUl0ZW1zKG1lbnVJdGVtcyk7XHJcbiAgICAgICAgdGhpcy5fbWVudUl0ZW1zU291cmNlLm5leHQobmV3TWVudUl0ZW1zKTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgX3RpdGxlQ2hhbmdlZCh0aXRsZU9iajogeyB0ZXh0OiBzdHJpbmc7IGltYWdlOiBzdHJpbmcgfSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX3RpdGxlU291cmNlLm5leHQodGl0bGVPYmopO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBfc2VhcmNoUGFuZWxDaGFuZ2VkKHNlYXJjaFBhbmVsOiBhbnkpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9zZWFyY2hQYW5lbFVpU291cmNlLm5leHQoc2VhcmNoUGFuZWwpO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBfcGFnaW5nU2V0dGluZ0NoYW5nZWQocGFnZWluZ1NldHRpbmc6IGFueSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX3BhZ2luZ1NldHRpbmdTb3VyY2UubmV4dChwYWdlaW5nU2V0dGluZyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIF90b29sYmFyQnV0dG9uc0NoYW5nZWQoYnV0dG9uczogYW55W10pOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl90b29sYmFyQnV0dG9uc1NvdXJjZS5uZXh0KGJ1dHRvbnMpO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBfZW5hYmxlQ2hhbmdlZChlbmFibGU6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9lbmFibGVTb3VyY2UubmV4dChlbmFibGUpO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBfZGVzdHJveUNoYW5nZWQoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fZGVzdHJveVNvdXJjZS5uZXh0KCk7XHJcbiAgICB9XHJcbiAgICBwcm90ZWN0ZWQgX2V4aXN0SW5saW5lRWRpdCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9pbmxpbmVFZGl0TW9kZVNvdXJjZS5uZXh0KGZhbHNlKTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgX2FkZERlZmF1bHRTZWFyY2hQYW5lbFNldHRpbmdzKHNlYXJjaFBhbmVsOiBhbnkpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBzZWFyY2hNbyA9IEpTT04uc3RyaW5naWZ5KHNlYXJjaFBhbmVsPy5NbyA/PyBuZXcgTWV0YW9iamVjdERhdGFNb2RlbCgpKTtcclxuICAgICAgICBjb25zdCBTdGFuZGFyZFRleHQgPSB0aGlzLl9iYmJQaXBlLnRyYW5zZm9ybSgnU3RhbmRhcmQnKTtcclxuICAgICAgICBjb25zdCBzdGFuZGFyZFNldHRpbmdzID0ge1xyXG4gICAgICAgICAgICBJZDogJycsXHJcbiAgICAgICAgICAgICRDYXB0aW9uOiBTdGFuZGFyZFRleHQsXHJcbiAgICAgICAgICAgIElzU3RhbmRhcmQ6IHRydWUsXHJcbiAgICAgICAgICAgIElzRGVmYXVsdDogdHJ1ZSxcclxuICAgICAgICAgICAgSXNQdWJsaWM6IHRydWUsXHJcbiAgICAgICAgICAgIElzUHJpbWFyeTogdHJ1ZSxcclxuICAgICAgICAgICAgQXBwbHlBdXRvbWF0aWNhbGx5OiB0cnVlLFxyXG4gICAgICAgICAgICBIaWRlU2VhcmNoUGFuZWw6IGZhbHNlLFxyXG4gICAgICAgICAgICBUaXRsZTogU3RhbmRhcmRUZXh0LFxyXG4gICAgICAgICAgICBTZWFyY2hNbzogc2VhcmNoTW8sXHJcbiAgICAgICAgICAgIFJlcG9ydElkOiAnJ1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5fZGVmYXVsdFNlYXJjaFBhbmVsU2V0dGluZ3NTb3VyY2UubmV4dChzdGFuZGFyZFNldHRpbmdzKTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgX2xvYWRTZWFyY2hQYW5lbFNldHRpbmdzKHJlcG9ydElkKTogdm9pZCB7XHJcbiAgICAgICAgQmFyc2FBcGkuQncuUnVuQmxNZXRob2RBc3luYyh7XHJcbiAgICAgICAgICAgIFBhcmFtZXRlcnM6IFtyZXBvcnRJZF0sXHJcbiAgICAgICAgICAgIE1ldGhvZDogJ0xvYWRBbGxVc2VyU2VhcmNoUGFuZWxTZXR0aW5ncycsXHJcbiAgICAgICAgICAgIFN1Y2Nlc3NGbjogKGFsbFNlYXJjaFBhbmVsU2V0dGluZ3MpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGFsbFNlYXJjaFBhbmVsU2V0dGluZ3MpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYWxsU2VhcmNoUGFuZWxTZXR0aW5ncyA9IEJhcnNhQXBpLkJ3Ll91bndyYXAoYWxsU2VhcmNoUGFuZWxTZXR0aW5ncyk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fYWxsU2VhcmNoUGFuZWxTZXR0aW5nc1NvdXJjZS5uZXh0KGFsbFNlYXJjaFBhbmVsU2V0dGluZ3MpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRlZmF1bHRTZWFyY2ggPSBhbGxTZWFyY2hQYW5lbFNldHRpbmdzLmZpbmQoKGMpID0+IGMuSXNEZWZhdWx0KTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZGVmYXVsdFNlYXJjaCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zZWxlY3RlZFNlYXJjaFBhbmVsU2V0dGluZ3NJZFNvdXJjZS5uZXh0KGRlZmF1bHRTZWFyY2guSWQpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgRmFpbEZuOiAoKSA9PiB7fVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIHJlc2V0U2VhcmNoUGFuZWxTZXR0aW5ncyhzZWFyY2hQYW5lbFVpKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5jbGVhclNlYXJjaCgpO1xyXG4gICAgICAgIGNvbnN0IGZpZWxkVWkgPSBzZWFyY2hQYW5lbFVpLl9kaWN0RmllbGRVaTtcclxuICAgICAgICBjb25zdCBjaGFuZ2VkID0gc2VhcmNoUGFuZWxVaS5Nby5HZXRDaGFuZ2VkT2JqZWN0KCk7XHJcbiAgICAgICAgT2JqZWN0LmtleXMoY2hhbmdlZCkuZm9yRWFjaCgoYykgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBmaWVsZCA9IHNlYXJjaFBhbmVsVWkuX2RpY3RGaWVsZFVpW2NdO1xyXG4gICAgICAgICAgICBpZiAoZmllbGQpIHtcclxuICAgICAgICAgICAgICAgIGZpZWxkLlNldFZhbHVlKG51bGwpO1xyXG4gICAgICAgICAgICAgICAgc2VhcmNoUGFuZWxVaS5Nby5TZXRGVmFsdWUoYywgbnVsbCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgc2VhcmNoUGFuZWxVaS5Nby5TZXRTdGF0ZSgnTmV3Jyk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgT2JqZWN0LmtleXMoZmllbGRVaSkuZm9yRWFjaCgoYykgPT4ge1xyXG4gICAgICAgICAgICBpZiAoYyAhPT0gJyRTZWFyY2gnICYmIGZpZWxkVWlbY10uTGF5b3V0Q29udHJvbCkge1xyXG4gICAgICAgICAgICAgICAgc2VhcmNoUGFuZWxVaS5maXJlRXZlbnQoJ0NoYW5nZUZpZWxkVmlzaWJsZScsIGZpZWxkVWlbY10uU2V0dGluZy5Db250cm9sRmllbGRDYXB0aW9uLCB0cnVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgcHJvdGVjdGVkIF9sb2FkQ2FydGFibGVUZW1wbGF0ZShrZXlPZkNhcnRhYmxlVGVtcGxhdGVzOiBTZXQ8c3RyaW5nPik6IHZvaWQge1xyXG4gICAgICAgIGxldCBjYXJ0YWJsZVRlbXBsYXRlcyA9IHRoaXMuX2NhcnRhYmxlVGVtcGxhdGVzJC5nZXRWYWx1ZSgpO1xyXG4gICAgICAgIGlmICghY2FydGFibGVUZW1wbGF0ZXMpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBrZXlzOiBDYXJ0YWJsZVRlbXBsYXRlS2V5W10gPSBbXTtcclxuXHJcbiAgICAgICAga2V5T2ZDYXJ0YWJsZVRlbXBsYXRlcy5mb3JFYWNoKChrZXkpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgdmFsdWVzID0ga2V5LnNwbGl0KHRoaXMuX2NhcnRhYmxlS2V5U2VwZXJhdG9yKTtcclxuICAgICAgICAgICAgaWYgKCFjYXJ0YWJsZVRlbXBsYXRlc1trZXldKSB7XHJcbiAgICAgICAgICAgICAgICBrZXlzLnB1c2goeyBUeXBlRGVmSWQ6IHZhbHVlc1swXSwgU2V0dGluZ3NJZDogdmFsdWVzWzFdIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaWYgKGtleXMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fYXBpU2VydmljZS5HZXRDYXJ0YWJsZVRlbXBsYXRlKGtleXMpLnN1YnNjcmliZSgoYykgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIWMpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCB0ZW1wbGF0ZXM6IHsgW2tleTogc3RyaW5nXTogRm9ybVNldHRpbmcgfSA9IHt9O1xyXG4gICAgICAgICAgICBPYmplY3Qua2V5cyhjKS5mb3JFYWNoKChjSWQpID0+IHtcclxuICAgICAgICAgICAgICAgIHRlbXBsYXRlc1tjSWRdID0gQmFyc2FBcGkuRXh0LmRlY29kZShjW2NJZF0pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgY2FydGFibGVUZW1wbGF0ZXMgPSB7IC4uLmNhcnRhYmxlVGVtcGxhdGVzLCAuLi50ZW1wbGF0ZXMgfTtcclxuICAgICAgICAgICAgdGhpcy5fY2FydGFibGVUZW1wbGF0ZXMkLm5leHQoY2FydGFibGVUZW1wbGF0ZXMpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
|