@smartbit4all/ng-client 3.3.243 → 3.4.0-alpha
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/esm2020/lib/smart-form/services/smartform.service.mjs +14 -6
- package/esm2020/lib/smart-form/smartform.component.mjs +4 -1
- package/esm2020/lib/smart-form/smartform.form-model.mjs +1 -1
- package/esm2020/lib/smart-form/smartform.model.mjs +1 -1
- package/esm2020/lib/smart-form/validators/validator-provider.mjs +44 -0
- package/esm2020/lib/smart-form/widgets/smartformwidget/smartformwidget.component.mjs +3 -1
- package/esm2020/lib/smart-validation/named-validator.service.mjs +122 -0
- package/esm2020/lib/smart-validation/projects.mjs +4 -0
- package/esm2020/lib/smart-validation/smart-validation.module.mjs +24 -0
- package/esm2020/lib/smart-validation/smart-validation.types.mjs +4 -0
- package/esm2020/lib/view-context/api/model/componentConstraint.mjs +1 -1
- package/esm2020/lib/view-context/api/model/models.mjs +2 -1
- package/esm2020/lib/view-context/api/model/namedValidator.mjs +19 -0
- package/esm2020/lib/view-context/smart-view-context.module.mjs +1 -1
- package/esm2020/projects.mjs +2 -1
- package/fesm2015/smartbit4all-ng-client.mjs +183 -7
- package/fesm2015/smartbit4all-ng-client.mjs.map +1 -1
- package/fesm2020/smartbit4all-ng-client.mjs +178 -6
- package/fesm2020/smartbit4all-ng-client.mjs.map +1 -1
- package/lib/smart-form/services/smartform.service.d.ts +4 -1
- package/lib/smart-form/smartform.form-model.d.ts +2 -2
- package/lib/smart-form/smartform.model.d.ts +6 -0
- package/lib/smart-form/validators/validator-provider.d.ts +16 -0
- package/lib/smart-validation/named-validator.service.d.ts +17 -0
- package/lib/smart-validation/projects.d.ts +3 -0
- package/lib/smart-validation/smart-validation.module.d.ts +8 -0
- package/lib/smart-validation/smart-validation.types.d.ts +12 -0
- package/lib/view-context/api/model/componentConstraint.d.ts +6 -0
- package/lib/view-context/api/model/models.d.ts +1 -0
- package/lib/view-context/api/model/namedValidator.d.ts +26 -0
- package/package.json +1 -1
- package/projects.d.ts +1 -0
- package/smartbit4all-ng-client-3.4.0-alpha.tgz +0 -0
- package/smartbit4all-ng-client-3.3.243.tgz +0 -0
|
@@ -170,6 +170,7 @@ export class SmartformwidgetComponent {
|
|
|
170
170
|
}
|
|
171
171
|
let validators = [];
|
|
172
172
|
if (this.widgetInstance.validators) {
|
|
173
|
+
console.log(this.widgetInstance.validators);
|
|
173
174
|
validators = this.widgetInstance.validators?.map((validator) => {
|
|
174
175
|
return validator.validator;
|
|
175
176
|
});
|
|
@@ -565,6 +566,7 @@ export class SmartformwidgetComponent {
|
|
|
565
566
|
}
|
|
566
567
|
for (let index = 0; index < Object.keys(this.form.controls[widgetInstance.key].errors).length; index++) {
|
|
567
568
|
const errorKey = Object.keys(this.form.controls[widgetInstance.key].errors)[index];
|
|
569
|
+
console.log('error key', errorKey);
|
|
568
570
|
let customValidatorOnWidget = widgetInstance.validators?.filter((validator) => validator.name === errorKey);
|
|
569
571
|
if (customValidatorOnWidget && customValidatorOnWidget.length) {
|
|
570
572
|
errorMessage = customValidatorOnWidget[0].errorMessage;
|
|
@@ -782,4 +784,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
|
|
|
782
784
|
type: ViewChild,
|
|
783
785
|
args: ['timeInput']
|
|
784
786
|
}] } });
|
|
785
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRmb3Jtd2lkZ2V0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NtYXJ0LW5nLWNsaWVudC9zcmMvbGliL3NtYXJ0LWZvcm0vd2lkZ2V0cy9zbWFydGZvcm13aWRnZXQvc21hcnRmb3Jtd2lkZ2V0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NtYXJ0LW5nLWNsaWVudC9zcmMvbGliL3NtYXJ0LWZvcm0vd2lkZ2V0cy9zbWFydGZvcm13aWRnZXQvc21hcnRmb3Jtd2lkZ2V0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDckQsT0FBTyxFQUVMLHVCQUF1QixFQUV2QixTQUFTLEVBR1QsS0FBSyxFQUlMLFNBQVMsRUFDVCxZQUFZLEVBQ1osZ0JBQWdCLEVBQ2hCLGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsV0FBVyxFQUEwQixVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUlqRixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3hDLE9BQU8sTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUU1QixPQUFPLEVBQWMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRzVGLE9BQU8sRUFDTCx3QkFBd0IsRUFDeEIsbUJBQW1CLEVBQ25CLDJCQUEyQixHQUM1QixNQUFNLHdCQUF3QixDQUFDO0FBR2hDLE9BQU8sRUFDTCxvQ0FBb0MsR0FJckMsTUFBTSx1QkFBdUIsQ0FBQztBQUMvQixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxtREFBbUQsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFdEYsTUFBTSxPQUFPLG1CQUFtQjs7QUFDaEIsMEJBQU0sR0FBRyxLQUFLLENBQUM7QUFVL0IsTUFBTSxPQUFPLHdCQUF3QjtJQW1EbkMsWUFDVSxPQUF5QixFQUN6QixTQUFrQyxFQUNsQyxTQUF1QixFQUN4QixjQUFpQztRQUhoQyxZQUFPLEdBQVAsT0FBTyxDQUFrQjtRQUN6QixjQUFTLEdBQVQsU0FBUyxDQUF5QjtRQUNsQyxjQUFTLEdBQVQsU0FBUyxDQUFjO1FBQ3hCLG1CQUFjLEdBQWQsY0FBYyxDQUFtQjtRQXREbEMsY0FBUyxHQUFrQixJQUFJLE9BQU8sRUFBRSxDQUFDO1FBRWpELGlCQUFZLEdBQVksSUFBSSxDQUFDO1FBUzdCLHdCQUFtQixHQUFHLG1CQUFtQixDQUFDO1FBUTFDLGFBQVEsR0FBWSxLQUFLLENBQUM7UUFXMUIsZ0JBQVcsR0FBVyxFQUFFLENBQUM7UUFJekIsbUJBQWMsR0FBWSxLQUFLLENBQUM7UUFFaEMseUJBQW9CLEdBQVksS0FBSyxDQUFDO1FBRXRDLDRCQUF1QixHQUFHLDJCQUEyQixDQUFDO1FBUXRELHNCQUFpQixHQUFpQjtZQUNoQyxPQUFPLEVBQUUsS0FBSztTQUNmLENBQUM7UUFzR0Ysb0JBQWUsR0FBWSxLQUFLLENBQUM7UUFZakMsZUFBVSxHQUFZLEtBQUssQ0FBQztRQWtUNUIsY0FBUyxHQUFHLElBQUksQ0FBQztRQUNSLHVCQUFrQixHQUFHLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBVSxDQUFDO1FBQzdDLDRCQUF1QixHQUFHLEVBQVcsQ0FBQztJQS9aNUMsQ0FBQztJQUVKLFFBQVE7UUFDTixJQUNFLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxLQUFLLG1CQUFtQixDQUFDLFNBQVM7WUFDMUQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLEVBQzdCO1lBQ0EsSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyx5QkFBeUIsQ0FDcEUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQzlCLENBQUM7U0FDSDtRQUNELElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUNwRSxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUM1QyxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQzFELElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQzVDLENBQUMsQ0FBQyxDQUFDO1FBQ0gsMkNBQTJDO1FBQzNDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQzFDLElBQ0UsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEtBQUssbUJBQW1CLENBQUMsU0FBUztZQUMxRCxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsRUFDN0I7WUFDQSxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxFQUFFLGVBQWUsRUFBRTtnQkFDbEQsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLEtBQUssQ0FBTSxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUMsQ0FBQzthQUNyRjtZQUNELElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsU0FBVSxDQUFDLGdCQUFnQixDQUFDLENBQUMsWUFBWTtpQkFDN0UsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7aUJBQy9CLFNBQVMsQ0FBQyxDQUFDLEtBQVUsRUFBRSxFQUFFO2dCQUN4QixJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxLQUFLLG1CQUFtQixDQUFDLFNBQVMsRUFBRTtvQkFDOUQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFVLENBQUMsY0FBYzt3QkFDM0MsSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFVLENBQUMscUJBQXFCLENBQUMsS0FBSyxDQUFDLENBQUM7aUJBQy9EO1lBQ0gsQ0FBQyxDQUFDLENBQUM7U0FDTjtRQUVELElBQ0UsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEtBQUssbUJBQW1CLENBQUMsVUFBVTtZQUMzRCxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsRUFDN0I7WUFDQSxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxhQUFjLENBQUMsSUFBSSxDQUM3QyxTQUFTLENBQUMsRUFBRSxDQUFDLEVBQ2IsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUN6QyxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUMxQixDQUFDO1NBQ0g7UUFFRCxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxLQUFLLG1CQUFtQixDQUFDLGNBQWMsRUFBRTtZQUNuRSxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSyxDQUFDLENBQUM7WUFDOUQsSUFBSSxPQUFPO2dCQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztZQUNuRCxNQUFNLEdBQUcsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBRTdDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsb0NBQW9DLENBQUM7WUFDL0MsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDaEM7UUFFRCxJQUFJLFlBQVksR0FBYSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxDQUNqRSxDQUFDLEdBQVcsRUFBRSxFQUFFLENBQ2QsR0FBRyxLQUFLLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxVQUFVLENBQUMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQ25GLENBQUM7UUFFRixZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBVyxFQUFFLEVBQUU7WUFDL0IsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsWUFBWTtpQkFDakMsSUFBSSxDQUFDLG9CQUFvQixFQUFFLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztpQkFDdkQsU0FBUyxDQUFDLENBQUMsS0FBYSxFQUFFLEVBQUU7Z0JBQzNCLElBQ0UsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEtBQUssbUJBQW1CLENBQUMsZ0JBQWdCO29CQUNqRSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksS0FBSyxtQkFBbUIsQ0FBQyxpQkFBaUIsRUFDbEU7b0JBQ0EsTUFBTSxXQUFXLEdBQTZCO3dCQUM1QyxHQUFHO3dCQUNILEtBQUs7d0JBQ0wsSUFBSSxFQUNGLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxLQUFLLG1CQUFtQixDQUFDLE1BQU07NEJBQ3ZELElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxLQUFLLG1CQUFtQixDQUFDLGVBQWU7NEJBQ2hFLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxLQUFLLG1CQUFtQixDQUFDLFlBQVk7NEJBQzNELENBQUMsQ0FBQyxXQUFXOzRCQUNiLENBQUMsQ0FBQyxPQUFPO3FCQUNkLENBQUM7b0JBRUYsSUFBSSxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztpQkFDakQ7WUFDSCxDQUFDLENBQUMsQ0FBQztRQUNQLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGVBQWUsQ0FBQyxHQUFXO1FBQ3pCLEdBQUcsQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBRXJDLElBQUksTUFBTSxHQUFHLDJFQUEyRSxDQUFDO1FBQ3pGLElBQUksS0FBSyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFOUIsT0FBTyxLQUFLLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0lBQzNELENBQUM7SUFJRCxJQUFJLGNBQWM7UUFDaEIsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDO0lBQzlCLENBQUM7SUFDRCxJQUFJLGNBQWMsQ0FBQyxjQUF1QjtRQUN4QyxJQUFJLENBQUMsZUFBZSxHQUFHLGNBQWMsQ0FBQztRQUN0QyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUU7WUFDM0QsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7UUFDL0IsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBT0QsZ0JBQWdCLENBQUMsS0FBVTtRQUN6QixLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7UUFFeEIsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzdFLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxLQUFVO1FBQ3pCLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUV4QixJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDdkMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3RGLENBQUM7SUFFRCxlQUFlO1FBQ2IsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksS0FBSyxtQkFBbUIsQ0FBQyxTQUFTLEVBQUU7WUFDOUQsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUN0RCxJQUFJLENBQUMsb0JBQXFCLEVBQzFCLElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxFQUM3QixJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FDMUIsQ0FBQztTQUNIO1FBRUQsSUFDRSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksS0FBSyxtQkFBbUIsQ0FBQyxnQkFBZ0I7WUFDakUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEtBQUssbUJBQW1CLENBQUMsWUFBWSxFQUM3RDtZQUNBLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUNoRSxDQUFDLGNBQThCLEVBQUUsRUFBRSxDQUFDLGNBQWMsQ0FBQyxTQUFTLEtBQUssVUFBVSxDQUFDLFFBQVEsQ0FDckYsQ0FBQztZQUVGLElBQUksSUFBSSxDQUFDO1lBQ1QsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRTtnQkFDN0IsSUFBSSxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDL0MsSUFBSSxJQUFJLEdBQUcsbUJBQW1CLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDN0UsSUFBSSxHQUFHLEdBQUcsbUJBQW1CLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztnQkFDaEYsSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztnQkFDMUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUN6QyxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNwRSxJQUFJLGVBQWUsRUFBRTtvQkFDbkIsZUFBZSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO2lCQUNyRDthQUNGO2lCQUFNO2dCQUNMLElBQUksR0FBRyxFQUFFLENBQUM7YUFDWDtZQUVELElBQUksVUFBVSxHQUFrQixFQUFFLENBQUM7WUFDbkMsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsRUFBRTtnQkFDbEMsVUFBVSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFNBQXlCLEVBQUUsRUFBRTtvQkFDN0UsT0FBTyxTQUFTLENBQUMsU0FBUyxDQUFDO2dCQUM3QixDQUFDLENBQUMsQ0FBQzthQUNKO1lBRUQsTUFBTSxlQUFlLEdBQUcsSUFBSSxXQUFXLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1lBRTFELElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLEVBQUU7Z0JBQ2xDLGVBQWUsQ0FBQyxPQUFPLEVBQUUsQ0FBQzthQUMzQjtZQUVELElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLE9BQU8sRUFBRSxlQUFlLENBQUMsQ0FBQztZQUV6RSxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztZQUV2QixJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUksQ0FBQyxDQUFDLFlBQVk7aUJBQ3RELElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2lCQUMvQixTQUFTLENBQUMsQ0FBQyxPQUFZLEVBQUUsRUFBRTtnQkFDMUIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ2xDLENBQUMsQ0FBQyxDQUFDO1lBQ0wsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUMsWUFBWTtpQkFDL0QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7aUJBQy9CLFNBQVMsQ0FBQyxDQUFDLFNBQWlCLEVBQUUsRUFBRTtnQkFDL0IsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ3BDLENBQUMsQ0FBQyxDQUFDO1NBQ047SUFDSCxDQUFDO0lBRUQsaUJBQWlCLENBQUMsT0FBWTtRQUM1QixNQUFNLGFBQWEsR0FBRyxRQUFRLENBQUMsYUFBYSxLQUFLLElBQUksQ0FBQyxjQUFjLEVBQUUsYUFBYSxDQUFDO1FBQ3BGLE1BQU0sYUFBYSxHQUFHLFFBQVEsQ0FBQyxhQUFhLEtBQUssSUFBSSxDQUFDLGNBQWMsRUFBRSxhQUFhLENBQUM7UUFDcEYsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFJLENBQUMsQ0FBQztRQUNyRSxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQztRQUU5RSxJQUNFLENBQUMsSUFBSSxDQUFDLG9CQUFvQjtZQUMxQixlQUFlLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUM7WUFDakQsQ0FBQyxPQUFPLEVBQ1I7WUFDQSxlQUFlLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3RELGVBQWUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDOUI7YUFBTSxJQUNMLENBQUMsSUFBSSxDQUFDLG9CQUFvQjtZQUMxQixDQUFDLGVBQWUsQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQztZQUNsRCxPQUFPLEVBQ1A7WUFDQSxlQUFlLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUVuRCxJQUFJLGVBQWUsQ0FBQyxLQUFLLEtBQUssRUFBRSxFQUFFO2dCQUNoQyxlQUFlLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUNwQyxlQUFlLENBQUMsZUFBZSxFQUFFLENBQUM7YUFDbkM7U0FDRjtRQUVELElBQUksQ0FBQyxPQUFPLElBQUksYUFBYSxJQUFJLGFBQWEsRUFBRTtZQUM5QyxPQUFPO1NBQ1I7UUFFRCxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFDdkIsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUM7WUFDNUIsT0FBTztTQUNSO1FBRUQsTUFBTSxTQUFTLEdBQUcsZUFBZSxDQUFDLEtBQUssSUFBSSxPQUFPLENBQUM7UUFDbkQsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7UUFFM0IsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksS0FBSyxtQkFBbUIsQ0FBQyxnQkFBZ0IsRUFBRTtZQUNyRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsZUFBZSxFQUFFLE9BQU8sRUFBRSxTQUFTLENBQUMsQ0FBQztZQUM3RCxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssR0FBRyxlQUFlLENBQUMsS0FBSyxDQUFDO1NBQ25EO0lBQ0gsQ0FBQztJQUVELGlCQUFpQixDQUFDLFNBQWlCO1FBQ2pDLE1BQU0sU0FBUyxHQUFHLFFBQVEsQ0FBQyxhQUFhLEtBQUssSUFBSSxDQUFDLGNBQWMsRUFBRSxhQUFhLENBQUM7UUFDaEYsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFJLENBQUMsQ0FBQztRQUNyRSxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQztRQUU5RSxJQUNFLENBQUMsSUFBSSxDQUFDLG9CQUFvQjtZQUMxQixlQUFlLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUM7WUFDakQsQ0FBQyxTQUFTLEVBQ1Y7WUFDQSxlQUFlLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3RELGVBQWUsQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQztTQUN2RDthQUFNLElBQ0wsQ0FBQyxJQUFJLENBQUMsb0JBQW9CO1lBQzFCLENBQUMsZUFBZSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDO1lBQ2xELFNBQVMsRUFDVDtZQUNBLGVBQWUsQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQ3BEO1FBRUQsSUFBSSxTQUFTLEVBQUU7WUFDYixPQUFPO1NBQ1I7UUFFRCxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFDdkIsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUM7WUFDNUIsT0FBTztTQUNSO1FBRUQsSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNkLElBQUksZUFBZSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLEVBQUU7Z0JBQ3JELGVBQWUsQ0FBQyxXQUFXLEVBQUUsQ0FBQzthQUMvQjtZQUNELE9BQU87U0FDUjtRQUVELElBQUksT0FBTyxHQUFHLGVBQWUsQ0FBQyxLQUFLLENBQUM7UUFFcEMsSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNaLE9BQU87U0FDUjtRQUVELElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO1FBQzNCLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEtBQUssbUJBQW1CLENBQUMsZ0JBQWdCLEVBQUU7WUFDckUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGVBQWUsRUFBRSxPQUFPLEVBQUUsU0FBUyxDQUFDLENBQUM7U0FDOUQ7SUFDSCxDQUFDO0lBRU8sa0JBQWtCLENBQUMsZUFBb0IsRUFBRSxPQUFZLEVBQUUsU0FBaUI7UUFDOUUsSUFBSSxPQUFPLEVBQUU7WUFDWCxJQUFJLElBQUksR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNyQyxJQUFJLEdBQUcsR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNwQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ25CLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDcEIsZUFBZSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUNuQztJQUNILENBQUM7SUFFRCxPQUFPO1FBQ0wsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksS0FBSyxtQkFBbUIsQ0FBQyxnQkFBZ0IsRUFBRTtZQUNyRSxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQzlFO1FBQ0QsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBRUQsU0FBUztRQUNQLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO1FBRTNCLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUMzRCxJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQztRQUM5QixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCx3QkFBd0IsQ0FBQyxLQUFVO1FBQ2pDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFO1lBQ3hCLElBQUksQ0FBQyxZQUFZLEdBQUcsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDO1NBQ3hDO0lBQ0gsQ0FBQztJQUVELFVBQVU7UUFDUixPQUFPLGlCQUFpQixDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ25FLENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFO1lBQzlCLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxHQUFHO2dCQUMxQixZQUFZLEVBQUUsRUFBRTtnQkFDaEIsZUFBZSxFQUFFLEVBQUU7Z0JBQ25CLEtBQUssRUFBRSxFQUFFO2FBQ1YsQ0FBQztTQUNIO1FBRUQsSUFBSSxDQUFDLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLFVBQVUsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFO1lBQ3RGLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxJQUFJLENBQUM7U0FDaEY7UUFDRCxPQUFPLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2xFLENBQUM7SUFFRCxlQUFlO1FBQ2IsSUFBSSxZQUFZLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRTtZQUN2QyxPQUFPLGlCQUFpQixDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1NBQ3ZFO1FBRUQsT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQsYUFBYTtRQUNYLElBQUksWUFBWSxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFDdkMsT0FBTyxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsQ0FBQztTQUN0RTtRQUVELE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILDhCQUE4QixDQUFDLE1BQXFCO1FBQ2xELElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEtBQUssbUJBQW1CLENBQUMsU0FBUyxFQUFFO1lBQzlELE9BQU87U0FDUjtRQUVELElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsRUFBRTtZQUNsQyxPQUFPO1NBQ1I7UUFFRCx5RkFBeUY7UUFDekYsNERBQTREO1FBQzVELE1BQU0sU0FBUyxHQUFXLElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztRQUM1RCxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxJQUFJLFNBQVMsRUFBRTtZQUNuQyxPQUFPO1NBQ1I7UUFFRCxNQUFNLGFBQWEsR0FBVyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQztRQUN4RixJQUFJLGFBQWEsR0FBRyxDQUFDLEVBQUU7WUFDckIsSUFBSSxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUM7U0FDaEU7SUFDSCxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7O09BV0c7SUFDSCw2QkFBNkI7UUFDM0IsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksS0FBSyxtQkFBbUIsQ0FBQyxTQUFTLEVBQUU7WUFDOUQsT0FBTyxDQUFDLENBQUMsQ0FBQztTQUNYO1FBRUQsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxFQUFFO1lBQ2xDLE9BQU8sQ0FBQyxDQUFDLENBQUM7U0FDWDtRQUVELHlGQUF5RjtRQUN6Riw0REFBNEQ7UUFDNUQsTUFBTSxTQUFTLEdBQVcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO1FBQzVELElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNkLDBDQUEwQztZQUMxQyxPQUFPLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxNQUFNLENBQUM7U0FDNUQ7UUFFRCxvQ0FBb0M7UUFDcEMsT0FBTyxTQUFTLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO0lBQzlFLENBQUM7SUFNRCxHQUFHLENBQUMsS0FBd0I7UUFDMUIsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksS0FBSyxtQkFBbUIsQ0FBQyxnQkFBZ0IsRUFBRTtZQUNyRSxPQUFPO1NBQ1I7UUFFRCxNQUFNLEtBQUssR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDekMsSUFBSSxJQUFJLENBQUMsc0JBQXNCLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDdEMsTUFBTSxXQUFXLEdBQTZCO2dCQUM1QyxHQUFHLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHO2dCQUM1QixLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLO2dCQUN4RCxJQUFJLEVBQUUsV0FBVzthQUNsQixDQUFDO1lBQ0YsSUFBSSxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztTQUNqRDtRQUVELHdCQUF3QjtRQUN4QixLQUFLLENBQUMsU0FBVSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDOUQsQ0FBQztJQUVELE1BQU0sQ0FBQyxLQUEyQjtRQUNoQyxJQUNFLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxLQUFLLG1CQUFtQixDQUFDLGdCQUFnQjtZQUNqRSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksS0FBSyxtQkFBbUIsQ0FBQyxpQkFBaUIsRUFDbEU7WUFDQSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7WUFFL0UsSUFBSSxLQUFLLElBQUksQ0FBQyxFQUFFO2dCQUNkLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQ25FLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztnQkFDckUsTUFBTSxXQUFXLEdBQTZCO29CQUM1QyxHQUFHLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHO29CQUM1QixLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLO29CQUN4RCxJQUFJLEVBQUUsV0FBVztpQkFDbEIsQ0FBQztnQkFDRixJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO2FBQ2pEO1NBQ0Y7SUFDSCxDQUFDO0lBRUQsUUFBUSxDQUFDLEtBQW1DLEVBQUUsY0FBb0M7UUFDaEYsSUFBSSxLQUFLLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUM7UUFDbkMsSUFBSSxJQUFJLENBQUMsc0JBQXNCLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDdEMsSUFDRSxjQUFjLENBQUMsSUFBSSxLQUFLLG1CQUFtQixDQUFDLGdCQUFnQjtnQkFDNUQsY0FBYyxDQUFDLElBQUksS0FBSyxtQkFBbUIsQ0FBQyxpQkFBaUIsRUFDN0Q7Z0JBQ0EsTUFBTSxXQUFXLEdBQTZCO29CQUM1QyxHQUFHLEVBQUUsY0FBYyxDQUFDLEdBQUc7b0JBQ3ZCLEtBQUssRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSztvQkFDbkQsSUFBSSxFQUFFLFdBQVc7aUJBQ2xCLENBQUM7Z0JBQ0YsSUFBSSxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQzthQUNqRDtTQUNGO0lBQ0gsQ0FBQztJQUVPLHNCQUFzQixDQUFDLEtBQWE7UUFDMUMsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksS0FBSyxtQkFBbUIsQ0FBQyxnQkFBZ0IsRUFBRTtZQUNyRSxPQUFPLEtBQUssQ0FBQztTQUNkO1FBRUQsSUFBSSxLQUFLLEVBQUU7WUFDVCxJQUNFLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTO2dCQUM1QixJQUFJLENBQUMsY0FBYyxDQUFDLEtBQU0sQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUM7Z0JBQ3BFLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLEVBQzlCO2dCQUNBLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRTtvQkFDdEQsSUFBSSxNQUFNLEdBQUcsSUFBSSxLQUFLLEVBQVUsQ0FBQztvQkFDakMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDO29CQUNuQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFDN0QsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO2lCQUN0RTtnQkFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQzlELElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztnQkFDckUsT0FBTyxJQUFJLENBQUM7YUFDYjtTQUNGO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsWUFBWTtRQUNWLElBQ0UsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEtBQUssbUJBQW1CLENBQUMsU0FBUztZQUMxRCxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksS0FBSyxtQkFBbUIsQ0FBQyxTQUFTO1lBQzFELElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxLQUFLLG1CQUFtQixDQUFDLFlBQVksRUFDN0Q7WUFDQSxPQUFPLEVBQUUsQ0FBQztTQUNYO1FBQ0QsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsS0FBSyxTQUFTLEVBQUU7WUFDL0MsT0FBTyxlQUFlLENBQUM7U0FDeEI7YUFBTSxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxLQUFLLHdCQUF3QixDQUFDLEdBQUcsRUFBRTtZQUN6RSxPQUFPLGVBQWUsQ0FBQztTQUN4QjthQUFNO1lBQ0wsT0FBTyxlQUFlLENBQUM7U0FDeEI7SUFDSCxDQUFDO0lBRUQsb0NBQW9DO1FBQ2xDLE9BQU8sb0NBQW9DLENBQUM7SUFDOUMsQ0FBQztJQUVELE9BQU87UUFDTCxPQUFPLG1CQUFtQixDQUFDO0lBQzdCLENBQUM7SUFFRCxjQUFjLENBQUMsTUFBNEI7UUFDekMsSUFBSSxNQUFNLENBQUMsSUFBSSxLQUFLLG1CQUFtQixDQUFDLFNBQVMsRUFBRTtZQUNqRCxPQUFPLEVBQUUsQ0FBQztTQUNYO1FBQ0QsSUFBSSxNQUFNLENBQUMsS0FBSyxLQUFLLEVBQUUsRUFBRTtZQUN2QixPQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUM7U0FDckI7UUFDRCxJQUFJLFVBQVUsR0FBRyxLQUFLLENBQUM7UUFDdkIsSUFDRSxNQUFNLENBQUMsSUFBSSxLQUFLLG1CQUFtQixDQUFDLEtBQUs7WUFDekMsTUFBTSxDQUFDLElBQUksS0FBSyxtQkFBbUIsQ0FBQyxJQUFJO1lBQ3hDLE1BQU0sQ0FBQyxJQUFJLEtBQUssbUJBQW1CLENBQUMsTUFBTTtZQUMxQyxNQUFNLENBQUMsSUFBSSxLQUFLLG1CQUFtQixDQUFDLFNBQVM7WUFDN0MsTUFBTSxDQUFDLElBQUksS0FBSyxtQkFBbUIsQ0FBQyxhQUFhO1lBQ2pELE1BQU0sQ0FBQyxJQUFJLEtBQUssbUJBQW1CLENBQUMsS0FBSztZQUN6QyxNQUFNLENBQUMsSUFBSSxLQUFLLG1CQUFtQixDQUFDLEdBQUc7WUFDdkMsTUFBTSxDQUFDLElBQUksS0FBSyxtQkFBbUIsQ0FBQyxPQUFPO1lBQzNDLE1BQU0sQ0FBQyxJQUFJLEtBQUssbUJBQW1CLENBQUMsTUFBTTtZQUMxQyxNQUFNLENBQUMsSUFBSSxLQUFLLG1CQUFtQixDQUFDLFNBQVMsRUFDN0M7WUFDQSxVQUFVLEdBQUcsTUFBTSxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1NBQy9GO2FBQU0sSUFBSSxNQUFNLENBQUMsSUFBSSxLQUFLLG1CQUFtQixDQUFDLEtBQUssRUFBRTtZQUNwRCxVQUFVLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7U0FDbkQ7UUFDRCxPQUFPLEdBQUcsTUFBTSxDQUFDLEtBQUssR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7SUFDcEQsQ0FBQztJQUVELFlBQVksQ0FBQyxLQUFjO1FBQ3pCLElBQUksU0FBUyxHQUFHLEtBQUssSUFBSSxFQUFFLENBQUM7UUFDNUIsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLHVCQUF1QixDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFTyxlQUFlO1FBQ3JCLElBQUksS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNsQixJQUNFLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxLQUFLLG1CQUFtQixDQUFDLFNBQVM7WUFDMUQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEtBQUssbUJBQW1CLENBQUMsS0FBSztZQUN0RCxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksS0FBSyxtQkFBbUIsQ0FBQyxJQUFJO1lBQ3JELElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxLQUFLLG1CQUFtQixDQUFDLE1BQU07WUFDdkQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEtBQUssbUJBQW1CLENBQUMsU0FBUztZQUMxRCxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksS0FBSyxtQkFBbUIsQ0FBQyxhQUFhO1lBQzlELElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxLQUFLLG1CQUFtQixDQUFDLEtBQUs7WUFDdEQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEtBQUssbUJBQW1CLENBQUMsR0FBRztZQUNwRCxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksS0FBSyxtQkFBbUIsQ0FBQyxPQUFPO1lBQ3hELElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxLQUFLLG1CQUFtQixDQUFDLE1BQU07WUFDdkQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEtBQUssbUJBQW1CLENBQUMsU0FBUztZQUMxRCxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksS0FBSyxtQkFBbUIsQ0FBQyxjQUFjLEVBQy9EO1lBQ0EsSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUMsU0FBeUIsRUFBRSxFQUFFO2dCQUNwRSxJQUFJLFNBQVMsQ0FBQyxTQUFTLElBQUksVUFBVSxDQUFDLFFBQVE7b0JBQUUsS0FBSyxHQUFHLElBQUksQ0FBQztZQUMvRCxDQUFDLENBQUMsQ0FBQztTQUNKO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRU0sY0FBYyxDQUFDLE1BQTRCLEVBQUUsU0FBeUI7UUFDM0UsSUFDRSxNQUFNLENBQUMsSUFBSSxLQUFLLG1CQUFtQixDQUFDLFNBQVM7WUFDN0MsTUFBTSxDQUFDLElBQUksS0FBSyxtQkFBbUIsQ0FBQyxLQUFLO1lBQ3pDLE1BQU0sQ0FBQyxJQUFJLEtBQUssbUJBQW1CLENBQUMsY0FBYyxFQUNsRDtZQUNBLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUU7Z0JBQzNFLElBQUksUUFBUSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU8sQ0FBQyxDQUFDLE1BQU07b0JBQ3ZFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsS0FBSzt3QkFDckMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsT0FBTzs0QkFDdEMsU0FBUzs0QkFDVCxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxNQUFNLENBQUUsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQzlELENBQUMsQ0FBQyxLQUFLLENBQUM7Z0JBQ1YsSUFDRSxDQUFDLFNBQVMsSUFBSSxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO29CQUN6QyxDQUFDLFNBQVMsSUFBSSxRQUFRLElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQzNEO29CQUNBLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO29CQUNyQixJQUFJLENBQUMsUUFBUSxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUM7aUJBQ2hDO3FCQUFNLElBQUksQ0FBQyxRQUFRLElBQUksU0FBUyxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssU0FBUyxDQUFDLElBQUksRUFBRTtvQkFDckUsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7b0JBQ3RCLElBQUksQ0FBQyxRQUFRLEdBQUcsU0FBUyxDQUFDO2lCQUMzQjtxQkFBTTtvQkFDTCxRQUFRLEdBQUcsS0FBSyxDQUFDO2lCQUNsQjtnQkFDRCxPQUFPLFFBQVEsQ0FBQzthQUNqQjtTQUNGO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsZUFBZSxDQUFDLGNBQW9DO1FBQ2xELElBQUksWUFBb0IsQ0FBQztRQUN6QixJQUFJLFNBQTZCLENBQUM7UUFDbEMsSUFBSSxjQUFrQyxDQUFDO1FBQ3ZDLElBQUksU0FBeUIsQ0FBQztRQUM5QixJQUNFLGNBQWMsQ0FBQyxJQUFJLEtBQUssbUJBQW1CLENBQUMsU0FBUztZQUNyRCxjQUFjLENBQUMsSUFBSSxLQUFLLG1CQUFtQixDQUFDLEtBQUs7WUFDakQsY0FBYyxDQUFDLElBQUksS0FBSyxtQkFBbUIsQ0FBQyxTQUFTO1lBQ3JELGNBQWMsQ0FBQyxJQUFJLEtBQUssbUJBQW1CLENBQUMsYUFBYTtZQUN6RCxjQUFjLENBQUMsSUFBSSxLQUFLLG1CQUFtQixDQUFDLEtBQUs7WUFDakQsY0FBYyxDQUFDLElBQUksS0FBSyxtQkFBbUIsQ0FBQyxHQUFHO1lBQy9DLGNBQWMsQ0FBQyxJQUFJLEtBQUssbUJBQW1CLENBQUMsT0FBTztZQUNuRCxjQUFjLENBQUMsSUFBSSxLQUFLLG1CQUFtQixDQUFDLE1BQU07WUFDbEQsY0FBYyxDQUFDLElBQUksS0FBSyxtQkFBbUIsQ0FBQyxTQUFTO1lBQ3JELGNBQWMsQ0FBQyxJQUFJLEtBQUssbUJBQW1CLENBQUMsY0FBYyxFQUMxRDtZQUNBLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUU7Z0JBQzNGLElBQ0UsSUFBSSxDQUFDLFFBQVE7b0JBQ2IsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFPLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVMsQ0FBQyxFQUNyRjtvQkFDQSxJQUFJLENBQUMsUUFBUSxHQUFHLFNBQVMsQ0FBQztpQkFDM0I7Z0JBQ0QsS0FDRSxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQ2IsS0FBSyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU8sQ0FBQyxDQUFDLE1BQU0sRUFDMUUsS0FBSyxFQUFFLEVBQ1A7b0JBQ0EsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQ3BGLElBQUksdUJBQXVCLEdBQUcsY0FBYyxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQzdELENBQUMsU0FBeUIsRUFBRSxFQUFFLENBQUMsU0FBUyxDQUFDLElBQUksS0FBSyxRQUFRLENBQzNELENBQUM7b0JBQ0YsSUFBSSx1QkFBdUIsSUFBSSx1QkFBdUIsQ0FBQyxNQUFNLEVBQUU7d0JBQzdELFlBQVksR0FBRyx1QkFBdUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFhLENBQUM7d0JBQ3hELFNBQVMsR0FBRyx1QkFBdUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7d0JBQzVDLGNBQWMsR0FBRyx1QkFBdUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7d0JBQ3RELFNBQVMsR0FBRyx1QkFBdUIsQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFDdkMsTUFBTTtxQkFDUDtvQkFDRCxJQUFJLHFCQUFxQixHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLENBQ3BFLENBQUMsU0FBeUIsRUFBRSxFQUFFLENBQUMsU0FBUyxDQUFDLElBQUksS0FBSyxRQUFRLENBQzNELENBQUM7b0JBQ0YsSUFBSSxxQkFBcUIsSUFBSSxxQkFBcUIsQ0FBQyxNQUFNLEVBQUU7d0JBQ3pELFlBQVksR0FBRyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFhLENBQUM7d0JBQ3RELFNBQVMsR0FBRyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFDckMsTUFBTTtxQkFDUDtpQkFDRjthQUNGO1lBRUQsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLGNBQWMsRUFBRSxTQUFVLENBQUMsRUFBRTtnQkFDbkQsY0FBYyxDQUFDLEtBQUssR0FBRyxZQUFhLENBQUM7Z0JBQ3JDLGNBQWMsQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO2dCQUNyQyxjQUFjLENBQUMsY0FBYyxHQUFHLGNBQWMsQ0FBQztnQkFDL0MsT0FBTyxJQUFJLENBQUM7YUFDYjtZQUVELElBQUksY0FBYyxDQUFDLGtCQUFrQixFQUFFO2dCQUNyQyxjQUFjLENBQUMsS0FBSyxHQUFHLGNBQWMsQ0FBQyxrQkFBa0IsQ0FBQztnQkFDekQsY0FBYyxDQUFDLFNBQVMsR0FBRyxjQUFjLENBQUMsZUFBZSxDQUFDO2dCQUMxRCxjQUFjLENBQUMsY0FBYyxHQUFHLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQztnQkFDaEUsT0FBTyxJQUFJLENBQUM7YUFDYjtZQUVELGNBQWMsQ0FBQyxLQUFLLEdBQUcsU0FBUyxDQUFDO1NBQ2xDO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQscUJBQXFCLENBQUMsS0FBYTtRQUNqQyxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxLQUFLLG1CQUFtQixDQUFDLFNBQVMsRUFBRTtZQUM5RCxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLGNBQWMsSUFBSSxLQUFLLEVBQUU7Z0JBQ3pELE9BQU8sbUJBQW1CLEtBQUssRUFBRSxDQUFDO2FBQ25DO1NBQ0Y7UUFDRCxPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRCw0QkFBNEI7UUFDMUIsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksS0FBSyxtQkFBbUIsQ0FBQyxTQUFTLEVBQUU7WUFDOUQsT0FBTyxFQUFFLENBQUM7U0FDWDtRQUNELElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFVLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDdEUsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFVLENBQUMsZUFBZSxHQUFHLENBQUMsRUFBRTtZQUM5RCxPQUFPLHlCQUF5QixJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVUsQ0FBQyxlQUFlLEdBQUcsQ0FBQyxFQUFFLENBQUM7U0FDdEY7UUFDRCxPQUFPLHlCQUF5QixLQUFLLEVBQUUsQ0FBQztJQUMxQyxDQUFDO0lBQ0QsdUJBQXVCO1FBQ3JCLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEtBQUssbUJBQW1CLENBQUMsU0FBUyxFQUFFO1lBQzlELE9BQU8sRUFBRSxDQUFDO1NBQ1g7UUFDRCxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsU0FBVSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ3RFLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsU0FBVSxDQUFDLGVBQWUsR0FBRyxDQUFDLEVBQUU7WUFDOUQsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVUsQ0FBQyxxQkFBcUIsQ0FDekQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFVLENBQUMsZUFBZSxHQUFHLENBQUMsQ0FDbkQsQ0FBQztTQUNIO1FBQ0QsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVUsQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNyRSxDQUFDO0lBRUQsTUFBTSxDQUFDLEtBQVk7UUFDakIsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksS0FBSyxtQkFBbUIsQ0FBQyxhQUFhLEVBQUU7WUFDbEUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7U0FDcEU7SUFDSCxDQUFDO0lBRUQsYUFBYSxDQUFDLFVBQWU7UUFDM0IsUUFBUSxVQUFVLENBQUMsSUFBSSxFQUFFO1lBQ3ZCLEtBQUssUUFBUTtnQkFDWCxPQUFPLFlBQVksQ0FBQztZQUN0QixLQUFLLE1BQU07Z0JBQ1QsT0FBTyxpQkFBaUIsQ0FBQztZQUMzQixLQUFLLFFBQVE7Z0JBQ1gsT0FBTyxtQkFBbUIsQ0FBQztZQUM3QixLQUFLLFNBQVM7Z0JBQ1osT0FBTyxvQkFBb0IsQ0FBQztZQUM5QixLQUFLLE1BQU07Z0JBQ1QsT0FBTyxpQkFBaUIsQ0FBQztZQUMzQixLQUFLLFVBQVU7Z0JBQ2IsT0FBTyxjQUFjLENBQUM7WUFDeEIsS0FBSyxLQUFLO2dCQUNSLE9BQU8sU0FBUyxDQUFDO1lBQ25CO2dCQUNFLE9BQU8sQ0FBQyxHQUFHLENBQUMsc0NBQXNDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO2dCQUNyRSxPQUFPLFlBQVksQ0FBQztTQUN2QjtJQUNILENBQUM7SUFFRCxVQUFVLENBQUMsVUFBZTtRQUN4QixPQUFPLENBQ0wsVUFBVSxDQUFDLElBQUksS0FBSyxNQUFNLElBQUksVUFBVSxDQUFDLElBQUksS0FBSyxVQUFVLElBQUksVUFBVSxDQUFDLElBQUksS0FBSyxLQUFLLENBQzFGLENBQUM7SUFDSixDQUFDO0lBRUQsZUFBZSxDQUFDLFFBQXFCO1FBQ25DLElBQUksUUFBUSxDQUFDLFFBQVEsRUFBRTtZQUNyQixRQUFRLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUN0QzthQUFNO1lBQ0wsUUFBUSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDakM7SUFDSCxDQUFDO0lBRU8sT0FBTyxDQUFDLEtBQWlCO1FBQy9CLElBQUksV0FBVyxHQUFJLEtBQUssQ0FBQyxNQUEyQixFQUFFLEtBQUssQ0FBQztRQUM1RCxJQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQztRQUUvQixJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ2hCLFdBQVcsR0FBRyxFQUFFLENBQUM7WUFDakIsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7U0FDaEM7UUFDRCxXQUFXLEdBQUcsV0FBVyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBRXhDLElBQ0UsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEtBQUssbUJBQW1CLENBQUMsVUFBVTtZQUMzRCxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsRUFDN0I7WUFDQSxNQUFNLE1BQU0sR0FBcUIsV0FBVztnQkFDMUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQXNCLEVBQUUsRUFBRSxDQUM5RCxNQUFNLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FDakQ7Z0JBQ0gsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDO1lBQ2xDLElBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtnQkFDckUsc0VBQXNFO2dCQUN0RSxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLGtCQUFrQixDQUFDO2FBQ3BFO2lCQUFNO2dCQUNMLGlFQUFpRTtnQkFDakUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEdBQUcsU0FBUyxDQUFDO2FBQ3ZDO1lBQ0QsT0FBTyxNQUFNLENBQUM7U0FDZjtRQUVELE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVELFVBQVUsQ0FBQyxDQUFjO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELHFCQUFxQixDQUFDLFFBQWUsRUFBRSxHQUFXO1FBQy9DLElBQUksQ0FBQyxjQUE4QixDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFZLEVBQUUsRUFBRTtZQUNwRSxJQUFJLEtBQUssQ0FBQyxJQUFJLElBQUksUUFBUSxDQUFDLElBQUk7Z0JBQUUsT0FBTyxRQUFRLENBQUMsWUFBWSxDQUFDOztnQkFDekQsT0FBTyxRQUFRLENBQUMsSUFBSSxDQUFDO1FBQzVCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELHFCQUFxQixDQUFDLGNBQW1CO1FBQ3ZDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUksQ0FBQyxFQUFFLGNBQWMsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNqRyxDQUFDO0lBRUQsWUFBWSxDQUFDLEVBQU8sRUFBRSxFQUFPO1FBQzNCLFNBQVMsT0FBTyxDQUFDLEdBQVE7WUFDdkIsSUFBSSxHQUFHLElBQUksT0FBTyxHQUFHLEtBQUssUUFBUSxFQUFFO2dCQUNsQyxPQUFPLEdBQUcsQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDO2FBQ3RDO1lBQ0QsT0FBTyxHQUFHLENBQUM7UUFDYixDQUFDO1FBQ0QsdUNBQXVDO1FBQ3ZDLG1GQUFtRjtRQUVuRixJQUFJLEVBQUUsR0FBRyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDckIsSUFBSSxFQUFFLEdBQUcsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3JCLE9BQU8sU0FBUyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUMzQixDQUFDO0lBRUQsV0FBVyxDQUFDLEdBQVE7UUFDbEIsSUFBSSxHQUFHLElBQUksT0FBTyxHQUFHLEtBQUssUUFBUSxFQUFFO1lBQ2xDLE9BQU8sR0FBRyxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUM7U0FDdEM7UUFDRCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFFRCxlQUFlLENBQUMsUUFBYTtRQUMzQixPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3JCLElBQUksQ0FBQyxjQUE4QixDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUN2RixDQUFDO0lBRUQsZ0JBQWdCO1FBQ2QsSUFDRSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksSUFBSSxtQkFBbUIsQ0FBQyxVQUFVO1lBQzFELElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxJQUFJLG1CQUFtQixDQUFDLGlCQUFpQixFQUNqRTtZQUNBLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLEtBQUssU0FBUyxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxLQUFLLElBQUksQ0FBQztTQUM5RjtRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELGFBQWEsQ0FBQyxLQUFVO1FBQ3RCLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLEtBQUssSUFBSSxFQUFFO1lBQ3hFLElBQUksTUFBTSxJQUFJLEtBQUssRUFBRTtnQkFDbkIsT0FBTyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7YUFDdEI7WUFDRCxJQUFJLGNBQWMsSUFBSSxLQUFLLEVBQUU7Z0JBQzNCLE9BQU8sS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDO2FBQzlCO1NBQ0Y7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7O3FIQXg0QlUsd0JBQXdCO3lHQUF4Qix3QkFBd0IsdWJBMEJHLGdCQUFnQiw0WkFrQnhDLHdCQUF3QixnRENqR3hDLHNod0RBdzRDQSxxcEVEbjFDYSx3QkFBd0I7MkZBQXhCLHdCQUF3QjtrQkFQcEMsU0FBUzsrQkFDRSxpQkFBaUIsaUJBR1osaUJBQWlCLENBQUMsSUFBSSxtQkFDcEIsdUJBQXVCLENBQUMsTUFBTTt3TUFPdEMsSUFBSTtzQkFBWixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyx3QkFBd0I7c0JBQWhDLEtBQUs7Z0JBTWtCLGNBQWM7c0JBQXJDLFNBQVM7dUJBQUMsV0FBVztnQkFXdEIsb0JBQW9CO3NCQURuQixTQUFTO3VCQUFDLGlCQUFpQixFQUFFLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFO2dCQU85QixLQUFLO3NCQUE5QixTQUFTO3VCQUFDLGFBQWE7Z0JBU0YsT0FBTztzQkFBNUIsU0FBUzt1QkFBQyxTQUFTO2dCQUdwQixpQkFBaUI7c0JBRGhCLFlBQVk7dUJBQUMsd0JBQXdCO2dCQXlIZCxjQUFjO3NCQUFyQyxTQUFTO3VCQUFDLFdBQVc7Z0JBQ0UsY0FBYztzQkFBckMsU0FBUzt1QkFBQyxXQUFXIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ09NTUEsIEVOVEVSIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2tleWNvZGVzJztcclxuaW1wb3J0IHtcclxuICBBZnRlclZpZXdJbml0LFxyXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIENvbXBvbmVudCxcclxuICBDb21wb25lbnRSZWYsXHJcbiAgRWxlbWVudFJlZixcclxuICBJbnB1dCxcclxuICBPbkRlc3Ryb3ksXHJcbiAgT25Jbml0LFxyXG4gIFF1ZXJ5TGlzdCxcclxuICBWaWV3Q2hpbGQsXHJcbiAgVmlld0NoaWxkcmVuLFxyXG4gIFZpZXdDb250YWluZXJSZWYsXHJcbiAgVmlld0VuY2Fwc3VsYXRpb24sXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIFZhbGlkYXRvckZuLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBNYXRBdXRvY29tcGxldGVTZWxlY3RlZEV2ZW50IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYXV0b2NvbXBsZXRlJztcclxuaW1wb3J0IHsgTWF0Q2hpcElucHV0RXZlbnQgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jaGlwcyc7XHJcbmltcG9ydCB7IERvbVNhbml0aXplciwgU2FmZUh0bWwgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcclxuaW1wb3J0IHsgZGVlcEVxdWFsIH0gZnJvbSAnZmFzdC1lcXVhbHMnO1xyXG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XHJcbmltcG9ydCB7IENvbnRlbnRDaGFuZ2UsIFF1aWxsRWRpdG9yQ29tcG9uZW50LCBRdWlsbE1vZHVsZXMgfSBmcm9tICduZ3gtcXVpbGwnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0LCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgbWFwLCBzdGFydFdpdGgsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBDb21wb25lbnRGYWN0b3J5U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2NvbXBvbmVudC1mYWN0b3J5LXNlcnZpY2UvcHJvamVjdHMnO1xyXG5pbXBvcnQgeyBVaUFjdGlvblRvb2xiYXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi92aWV3LWNvbnRleHQvc21hcnQtdWktYWN0aW9uL3VpLWFjdGlvbi10b29sYmFyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7XHJcbiAgU21hcnRGb3JtV2lkZ2V0RGlyZWN0aW9uLFxyXG4gIFNtYXJ0Rm9ybVdpZGdldFR5cGUsXHJcbiAgU21hcnRXaWRnZXRIaW50UG9zaXRpb25FbnVtLFxyXG59IGZyb20gJy4uLy4uL2FwaS9tb2RlbC9tb2RlbHMnO1xyXG5pbXBvcnQgeyBTbWFydEZvcm1TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc21hcnRmb3JtLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTbWFydEJ1dHRvbiwgU21hcnRGb3JtV2lkZ2V0LCBTbWFydEl0ZW0sIFNtYXJ0TWF0cml4IH0gZnJvbSAnLi4vLi4vc21hcnRmb3JtLmZvcm0tbW9kZWwnO1xyXG5pbXBvcnQge1xyXG4gIFNtYXJ0Rm9ybVRleHRGaWVsZEJ1dHRvbkljb25Qb3NpdGlvbixcclxuICBTbWFydFZhbGlkYXRvcixcclxuICBTb3BoaXN0aWNhdGVkVmFsdWVDaGFuZ2UsXHJcbiAgVmFsdWUsXHJcbn0gZnJvbSAnLi4vLi4vc21hcnRmb3JtLm1vZGVsJztcclxuaW1wb3J0IHsgU21hcnRTdHlsZVV0aWxpdHkgfSBmcm9tICcuLi8uLi8uLi92aWV3LWNvbnRleHQvdXRpbGl0eS9zbWFydC1zdHlsZS11dGlsaXR5JztcclxuXHJcbmV4cG9ydCBjbGFzcyBTbWFydFdpZGdldFNldHRpbmdzIHtcclxuICBwdWJsaWMgc3RhdGljIHVzZVV0YyA9IGZhbHNlO1xyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3NtYXJ0Zm9ybXdpZGdldCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3NtYXJ0Zm9ybXdpZGdldC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vc21hcnRmb3Jtd2lkZ2V0LmNvbXBvbmVudC5jc3MnXSxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgU21hcnRmb3Jtd2lkZ2V0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIEFmdGVyVmlld0luaXQge1xyXG4gIHByaXZhdGUgX2Rlc3Ryb3kkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3QoKTtcclxuXHJcbiAgaGlkZVBhc3N3b3JkOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgQElucHV0KCkgZm9ybSE6IEZvcm1Hcm91cDtcclxuICBASW5wdXQoKSB3aWRnZXRJbnN0YW5jZSE6IFNtYXJ0Rm9ybVdpZGdldDxhbnk+O1xyXG4gIEBJbnB1dCgpIG9uQmx1cj86IFN1YmplY3Q8YW55PjtcclxuICBASW5wdXQoKSBvblZhbHVlQ2hhbmdlPzogU3ViamVjdDxhbnk+O1xyXG4gIEBJbnB1dCgpIGxhYmVsQ29sb3I/OiBzdHJpbmc7XHJcbiAgQElucHV0KCkgc29waGlzdGljYXRlZFZhbHVlQ2hhbmdlITogU3ViamVjdDxTb3BoaXN0aWNhdGVkVmFsdWVDaGFuZ2U+O1xyXG5cclxuICBzbWFydEZvcm1XaWRnZXRUeXBlID0gU21hcnRGb3JtV2lkZ2V0VHlwZTtcclxuXHJcbiAgY2Fwc09uOiBhbnk7XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ2NoaXBJbnB1dCcpIGNoaXBJbnB1dENoaWxkPzogRWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50PjtcclxuXHJcbiAgZmlsdGVyZWRWYWx1ZUxpc3Q/OiBPYnNlcnZhYmxlPHN0cmluZ1tdIHwgdW5kZWZpbmVkPjtcclxuXHJcbiAgaGFzRXJyb3I6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBlcnJvcktleT86IHN0cmluZztcclxuXHJcbiAgaW5kaWNhdG9ySXRlbXM/OiBhbnlbXTtcclxuXHJcbiAgLy8gY3VzdG9tQ29tcG9uZW50XHJcbiAgQFZpZXdDaGlsZCgnY3VzdG9tQ29tcG9uZW50JywgeyByZWFkOiBWaWV3Q29udGFpbmVyUmVmIH0pXHJcbiAgY3VzdG9tQ29tcG9uZW50VmNSZWY/OiBWaWV3Q29udGFpbmVyUmVmO1xyXG4gIGN1c3RvbUNvbXBvbmVudFJlZj86IENvbXBvbmVudFJlZjxhbnk+O1xyXG5cclxuICBmaWx0ZXJlZE9wdGlvbnM/OiBPYnNlcnZhYmxlPFNtYXJ0SXRlbTxhbnk+W10+O1xyXG4gIHRvSGlnaGxpZ2h0OiBzdHJpbmcgPSAnJztcclxuXHJcbiAgQFZpZXdDaGlsZCgncXVpbGxFZGl0b3InKSBxdWlsbD86IFF1aWxsRWRpdG9yQ29tcG9uZW50O1xyXG5cclxuICBpc0VudGVyUHJlc3NlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBpc0RhdGVQaWNrZXJSZXF1aXJlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBTbWFydFdpZGdldEhpbnRQb3NpdGlvbiA9IFNtYXJ0V2lkZ2V0SGludFBvc2l0aW9uRW51bTtcclxuXHJcbiAgLy8gdG9vbGJhclxyXG4gIEBWaWV3Q2hpbGQoJ3Rvb2xiYXInKSB0b29sYmFyPzogVWlBY3Rpb25Ub29sYmFyQ29tcG9uZW50O1xyXG5cclxuICBAVmlld0NoaWxkcmVuKFNtYXJ0Zm9ybXdpZGdldENvbXBvbmVudClcclxuICBjaGlsZHJlbldpZGdldHNRTD86IFF1ZXJ5TGlzdDxTbWFydGZvcm13aWRnZXRDb21wb25lbnQ+O1xyXG5cclxuICBlbXB0eVF1aWxsVG9vbGJhcjogUXVpbGxNb2R1bGVzID0ge1xyXG4gICAgdG9vbGJhcjogZmFsc2UsXHJcbiAgfTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHNlcnZpY2U6IFNtYXJ0Rm9ybVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGNmU2VydmljZTogQ29tcG9uZW50RmFjdG9yeVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHNhbml0aXplcjogRG9tU2FuaXRpemVyLFxyXG4gICAgcHVibGljIGNoYW5nZURldGVjdG9yOiBDaGFuZ2VEZXRlY3RvclJlZlxyXG4gICkge31cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMud2lkZ2V0SW5zdGFuY2UudHlwZSA9PT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5DT05UQUlORVIgJiZcclxuICAgICAgdGhpcy53aWRnZXRJbnN0YW5jZS52YWx1ZUxpc3RcclxuICAgICkge1xyXG4gICAgICB0aGlzLndpZGdldEluc3RhbmNlLnZhbHVlTGlzdCA9IHRoaXMuc2VydmljZS5maWx0ZXJXaWRnZXRzQnlWaXNpYmlsaXR5KFxyXG4gICAgICAgIHRoaXMud2lkZ2V0SW5zdGFuY2UudmFsdWVMaXN0XHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmZvcm0udmFsdWVDaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgdGhpcy5nZXRFcnJvck1lc3NhZ2UodGhpcy53aWRnZXRJbnN0YW5jZSk7XHJcbiAgICB9KTtcclxuICAgIHRoaXMub25CbHVyPy5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCkpLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgIHRoaXMuZ2V0RXJyb3JNZXNzYWdlKHRoaXMud2lkZ2V0SW5zdGFuY2UpO1xyXG4gICAgfSk7XHJcbiAgICAvLyBoYW5kbGUgaW5pdGlhbCBlcnJvciBtZXNzYWdlIGZyb20gc2VydmVyXHJcbiAgICB0aGlzLmdldEVycm9yTWVzc2FnZSh0aGlzLndpZGdldEluc3RhbmNlKTtcclxuICAgIGlmIChcclxuICAgICAgdGhpcy53aWRnZXRJbnN0YW5jZS50eXBlID09PSBTbWFydEZvcm1XaWRnZXRUeXBlLklORElDQVRPUiAmJlxyXG4gICAgICB0aGlzLndpZGdldEluc3RhbmNlLmluZGljYXRvclxyXG4gICAgKSB7XHJcbiAgICAgIGlmICh0aGlzLndpZGdldEluc3RhbmNlLmluZGljYXRvcj8uaW5kaWNhdG9yTGVuZ3RoKSB7XHJcbiAgICAgICAgdGhpcy5pbmRpY2F0b3JJdGVtcyA9IG5ldyBBcnJheTxhbnk+KHRoaXMud2lkZ2V0SW5zdGFuY2UuaW5kaWNhdG9yLmluZGljYXRvckxlbmd0aCk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5mb3JtLmNvbnRyb2xzW3RoaXMud2lkZ2V0SW5zdGFuY2UuaW5kaWNhdG9yIS5pbmRpY2F0ZVByb3BlcnR5XS52YWx1ZUNoYW5nZXNcclxuICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKHZhbHVlOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmICh0aGlzLndpZGdldEluc3RhbmNlLnR5cGUgPT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuSU5ESUNBVE9SKSB7XHJcbiAgICAgICAgICAgIHRoaXMud2lkZ2V0SW5zdGFuY2UuaW5kaWNhdG9yIS5pbmRpY2F0b3JWYWx1ZSA9XHJcbiAgICAgICAgICAgICAgdGhpcy53aWRnZXRJbnN0YW5jZS5pbmRpY2F0b3IhLmNoYW5nZUluZGljYXRvclN0YXR1cyh2YWx1ZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLndpZGdldEluc3RhbmNlLnR5cGUgPT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuVEVYVF9GSUVMRCAmJlxyXG4gICAgICB0aGlzLndpZGdldEluc3RhbmNlLnNlbGVjdGlvblxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuZmlsdGVyZWRPcHRpb25zID0gdGhpcy5vblZhbHVlQ2hhbmdlIS5waXBlKFxyXG4gICAgICAgIHN0YXJ0V2l0aCgnJyksXHJcbiAgICAgICAgbWFwKCh2YWx1ZSkgPT4gdGhpcy5fZmlsdGVyKHZhbHVlIHx8ICcnKSksXHJcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLndpZGdldEluc3RhbmNlLnR5cGUgPT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuWU9VVFVCRV9QTEFZRVIpIHtcclxuICAgICAgbGV0IHZpZGVvSWQgPSB0aGlzLnBhcnNlWW91dHViZVVybCh0aGlzLndpZGdldEluc3RhbmNlLmxpbmshKTtcclxuICAgICAgaWYgKHZpZGVvSWQpIHRoaXMud2lkZ2V0SW5zdGFuY2UudmlkZW9JZCA9IHZpZGVvSWQ7XHJcbiAgICAgIGNvbnN0IHRhZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpO1xyXG5cclxuICAgICAgdGFnLnNyYyA9ICdodHRwczovL3d3dy55b3V0dWJlLmNvbS9pZnJhbWVfYXBpJztcclxuICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0YWcpO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBmb3JtQ29udHJvbHM6IHN0cmluZ1tdID0gT2JqZWN0LmtleXModGhpcy5mb3JtLmNvbnRyb2xzKS5maWx0ZXIoXHJcbiAgICAgIChrZXk6IHN0cmluZykgPT5cclxuICAgICAgICBrZXkgPT09IHRoaXMud2lkZ2V0SW5zdGFuY2Uua2V5IHx8IGtleS5zdGFydHNXaXRoKGAke3RoaXMud2lkZ2V0SW5zdGFuY2Uua2V5fS5gKVxyXG4gICAgKTtcclxuXHJcbiAgICBmb3JtQ29udHJvbHMubWFwKChrZXk6IHN0cmluZykgPT4ge1xyXG4gICAgICB0aGlzLmZvcm0uY29udHJvbHNba2V5XS52YWx1ZUNoYW5nZXNcclxuICAgICAgICAucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLCB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKHZhbHVlOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgdGhpcy53aWRnZXRJbnN0YW5jZS50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLlRFWFRfRklFTERfQ0hJUFMgJiZcclxuICAgICAgICAgICAgdGhpcy53aWRnZXRJbnN0YW5jZS50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLlRFWFRfRklFTERfTE9PS1VQXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgY29uc3QgdmFsdWVDaGFuZ2U6IFNvcGhpc3RpY2F0ZWRWYWx1ZUNoYW5nZSA9IHtcclxuICAgICAgICAgICAgICBrZXksXHJcbiAgICAgICAgICAgICAgdmFsdWUsXHJcbiAgICAgICAgICAgICAga2luZDpcclxuICAgICAgICAgICAgICAgIHRoaXMud2lkZ2V0SW5zdGFuY2UudHlwZSA9PT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5TRUxFQ1QgfHxcclxuICAgICAgICAgICAgICAgIHRoaXMud2lkZ2V0SW5zdGFuY2UudHlwZSA9PT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5TRUxFQ1RfTVVMVElQTEUgfHxcclxuICAgICAgICAgICAgICAgIHRoaXMud2lkZ2V0SW5zdGFuY2UudHlwZSA9PT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5SQURJT19CVVRUT05cclxuICAgICAgICAgICAgICAgICAgPyAnc2VsZWN0aW9uJ1xyXG4gICAgICAgICAgICAgICAgICA6ICdiYXNpYycsXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICB0aGlzLnNvcGhpc3RpY2F0ZWRWYWx1ZUNoYW5nZS5uZXh0KHZhbHVlQ2hhbmdlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcGFyc2VZb3V0dWJlVXJsKHVybDogc3RyaW5nKSB7XHJcbiAgICB1cmwucmVwbGFjZSgnL3Nob3J0cy8nLCAnL3dhdGNoP3Y9Jyk7XHJcblxyXG4gICAgdmFyIHJlZ0V4cCA9IC9eLiooKHlvdXR1LmJlXFwvKXwodlxcLyl8KFxcL3VcXC9cXHdcXC8pfChlbWJlZFxcLyl8KHdhdGNoXFw/KSlcXD8/dj89PyhbXiMmP10qKS4qLztcclxuICAgIHZhciBtYXRjaCA9IHVybC5tYXRjaChyZWdFeHApO1xyXG5cclxuICAgIHJldHVybiBtYXRjaCAmJiBtYXRjaFs3XS5sZW5ndGggPT0gMTEgPyBtYXRjaFs3XSA6IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgX2hhc0p1c3RDaGFuZ2VkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIGdldCBoYXNKdXN0Q2hhbmdlZCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9oYXNKdXN0Q2hhbmdlZDtcclxuICB9XHJcbiAgc2V0IGhhc0p1c3RDaGFuZ2VkKGhhc0p1c3RDaGFuZ2VkOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl9oYXNKdXN0Q2hhbmdlZCA9IGhhc0p1c3RDaGFuZ2VkO1xyXG4gICAgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgMjUwKSkudGhlbigoKSA9PiB7XHJcbiAgICAgIHRoaXMuX2hhc0p1c3RDaGFuZ2VkID0gZmFsc2U7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGhhc0NyZWF0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgQFZpZXdDaGlsZCgnZGF0ZUlucHV0JykgZGF0ZUlucHV0Q2hpbGQ/OiBFbGVtZW50UmVmO1xyXG4gIEBWaWV3Q2hpbGQoJ3RpbWVJbnB1dCcpIHRpbWVJbnB1dENoaWxkPzogRWxlbWVudFJlZjtcclxuXHJcbiAgb25EYXRlUGlja2VyQmx1cihldmVudDogYW55KTogdm9pZCB7XHJcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuXHJcbiAgICB0aGlzLm9uQmx1cj8ubmV4dCh0aGlzLndpZGdldEluc3RhbmNlKTtcclxuICAgIHRoaXMuaGFuZGxlRGF0ZUNoYW5nZWQodGhpcy5mb3JtLmNvbnRyb2xzW3RoaXMud2lkZ2V0SW5zdGFuY2Uua2V5IV0udmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgb25UaW1lUGlja2VyQmx1cihldmVudDogYW55KTogdm9pZCB7XHJcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuXHJcbiAgICB0aGlzLm9uQmx1cj8ubmV4dCh0aGlzLndpZGdldEluc3RhbmNlKTtcclxuICAgIHRoaXMuaGFuZGxlVGltZUNoYW5nZWQodGhpcy5mb3JtLmNvbnRyb2xzW2Ake3RoaXMud2lkZ2V0SW5zdGFuY2Uua2V5fS10aW1lYF0udmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMud2lkZ2V0SW5zdGFuY2UudHlwZSA9PT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5DT01QT05FTlQpIHtcclxuICAgICAgdGhpcy5jdXN0b21Db21wb25lbnRSZWYgPSB0aGlzLmNmU2VydmljZS5jcmVhdGVDb21wb25lbnQoXHJcbiAgICAgICAgdGhpcy5jdXN0b21Db21wb25lbnRWY1JlZiEsXHJcbiAgICAgICAgdGhpcy53aWRnZXRJbnN0YW5jZS5jb21wb25lbnQsXHJcbiAgICAgICAgdGhpcy53aWRnZXRJbnN0YW5jZS5pbnB1dFxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChcclxuICAgICAgdGhpcy53aWRnZXRJbnN0YW5jZS50eXBlID09PSBTbWFydEZvcm1XaWRnZXRUeXBlLkRBVEVfVElNRV9QSUNLRVIgfHxcclxuICAgICAgdGhpcy53aWRnZXRJbnN0YW5jZS50eXBlID09PSBTbWFydEZvcm1XaWRnZXRUeXBlLk1PTlRIX1BJQ0tFUlxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuaXNEYXRlUGlja2VyUmVxdWlyZWQgPSAhIXRoaXMud2lkZ2V0SW5zdGFuY2UudmFsaWRhdG9ycz8uc29tZShcclxuICAgICAgICAoc21hcnRWYWxpZGF0b3I6IFNtYXJ0VmFsaWRhdG9yKSA9PiBzbWFydFZhbGlkYXRvci52YWxpZGF0b3IgPT09IFZhbGlkYXRvcnMucmVxdWlyZWRcclxuICAgICAgKTtcclxuXHJcbiAgICAgIGxldCB0aW1lO1xyXG4gICAgICBpZiAodGhpcy53aWRnZXRJbnN0YW5jZS52YWx1ZSkge1xyXG4gICAgICAgIGxldCBkYXRlID0gbmV3IERhdGUodGhpcy53aWRnZXRJbnN0YW5jZS52YWx1ZSk7XHJcbiAgICAgICAgbGV0IGhvdXIgPSBTbWFydFdpZGdldFNldHRpbmdzLnVzZVV0YyA/IGRhdGUuZ2V0VVRDSG91cnMoKSA6IGRhdGUuZ2V0SG91cnMoKTtcclxuICAgICAgICBsZXQgbWluID0gU21hcnRXaWRnZXRTZXR0aW5ncy51c2VVdGMgPyBkYXRlLmdldFVUQ01pbnV0ZXMoKSA6IGRhdGUuZ2V0TWludXRlcygpO1xyXG4gICAgICAgIHRpbWUgPSBTdHJpbmcoaG91cikucGFkU3RhcnQoMiwgJzAnKSArICc6JyArIFN0cmluZyhtaW4pLnBhZFN0YXJ0KDIsICcwJyk7XHJcbiAgICAgICAgdGhpcy53aWRnZXRJbnN0YW5jZS52YWx1ZSA9IG1vbWVudChkYXRlKTtcclxuICAgICAgICBjb25zdCBkYXRlRm9ybUNvbnRyb2wgPSB0aGlzLmZvcm0uY29udHJvbHNbdGhpcy53aWRnZXRJbnN0YW5jZS5rZXldO1xyXG4gICAgICAgIGlmIChkYXRlRm9ybUNvbnRyb2wpIHtcclxuICAgICAgICAgIGRhdGVGb3JtQ29udHJvbC5zZXRWYWx1ZSh0aGlzLndpZGdldEluc3RhbmNlLnZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGltZSA9ICcnO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBsZXQgdmFsaWRhdG9yczogVmFsaWRhdG9yRm5bXSA9IFtdO1xyXG4gICAgICBpZiAodGhpcy53aWRnZXRJbnN0YW5jZS52YWxpZGF0b3JzKSB7XHJcbiAgICAgICAgdmFsaWRhdG9ycyA9IHRoaXMud2lkZ2V0SW5zdGFuY2UudmFsaWRhdG9ycz8ubWFwKCh2YWxpZGF0b3I6IFNtYXJ0VmFsaWRhdG9yKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gdmFsaWRhdG9yLnZhbGlkYXRvcjtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgdGltZUZvcm1Db250cm9sID0gbmV3IEZvcm1Db250cm9sKHRpbWUsIHZhbGlkYXRvcnMpO1xyXG5cclxuICAgICAgaWYgKHRoaXMud2lkZ2V0SW5zdGFuY2UuaXNEaXNhYmxlZCkge1xyXG4gICAgICAgIHRpbWVGb3JtQ29udHJvbC5kaXNhYmxlKCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuZm9ybS5hZGRDb250cm9sKGAke3RoaXMud2lkZ2V0SW5zdGFuY2Uua2V5fS10aW1lYCwgdGltZUZvcm1Db250cm9sKTtcclxuXHJcbiAgICAgIHRoaXMuaGFzQ3JlYXRlZCA9IHRydWU7XHJcblxyXG4gICAgICB0aGlzLmZvcm0uY29udHJvbHNbdGhpcy53aWRnZXRJbnN0YW5jZS5rZXkhXS52YWx1ZUNoYW5nZXNcclxuICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKF9tb21lbnQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5oYW5kbGVEYXRlQ2hhbmdlZChfbW9tZW50KTtcclxuICAgICAgICB9KTtcclxuICAgICAgdGhpcy5mb3JtLmNvbnRyb2xzW2Ake3RoaXMud2lkZ2V0SW5zdGFuY2Uua2V5fS10aW1lYF0udmFsdWVDaGFuZ2VzXHJcbiAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSlcclxuICAgICAgICAuc3Vic2NyaWJlKCh0aW1lVmFsdWU6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgdGhpcy5oYW5kbGVUaW1lQ2hhbmdlZCh0aW1lVmFsdWUpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaGFuZGxlRGF0ZUNoYW5nZWQoX21vbWVudDogYW55KTogdm9pZCB7XHJcbiAgICBjb25zdCBpc0RhdGVGb2N1c2VkID0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PT0gdGhpcy5kYXRlSW5wdXRDaGlsZD8ubmF0aXZlRWxlbWVudDtcclxuICAgIGNvbnN0IGlzVGltZUZvY3VzZWQgPSBkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSB0aGlzLnRpbWVJbnB1dENoaWxkPy5uYXRpdmVFbGVtZW50O1xyXG4gICAgY29uc3QgZGF0ZUZvcm1Db250cm9sID0gdGhpcy5mb3JtLmNvbnRyb2xzW3RoaXMud2lkZ2V0SW5zdGFuY2Uua2V5IV07XHJcbiAgICBjb25zdCB0aW1lRm9ybUNvbnRyb2wgPSB0aGlzLmZvcm0uY29udHJvbHNbYCR7dGhpcy53aWRnZXRJbnN0YW5jZS5rZXl9LXRpbWVgXTtcclxuXHJcbiAgICBpZiAoXHJcbiAgICAgICF0aGlzLmlzRGF0ZVBpY2tlclJlcXVpcmVkICYmXHJcbiAgICAgIHRpbWVGb3JtQ29udHJvbC5oYXNWYWxpZGF0b3IoVmFsaWRhdG9ycy5yZXF1aXJlZCkgJiZcclxuICAgICAgIV9tb21lbnRcclxuICAgICkge1xyXG4gICAgICB0aW1lRm9ybUNvbnRyb2wucmVtb3ZlVmFsaWRhdG9ycyhWYWxpZGF0b3JzLnJlcXVpcmVkKTtcclxuICAgICAgdGltZUZvcm1Db250cm9sLnNldFZhbHVlKCcnKTtcclxuICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICF0aGlzLmlzRGF0ZVBpY2tlclJlcXVpcmVkICYmXHJcbiAgICAgICF0aW1lRm9ybUNvbnRyb2wuaGFzVmFsaWRhdG9yKFZhbGlkYXRvcnMucmVxdWlyZWQpICYmXHJcbiAgICAgIF9tb21lbnRcclxuICAgICkge1xyXG4gICAgICB0aW1lRm9ybUNvbnRyb2wuYWRkVmFsaWRhdG9ycyhWYWxpZGF0b3JzLnJlcXVpcmVkKTtcclxuXHJcbiAgICAgIGlmICh0aW1lRm9ybUNvbnRyb2wudmFsdWUgPT09ICcnKSB7XHJcbiAgICAgICAgdGltZUZvcm1Db250cm9sLnNldFZhbHVlKHVuZGVmaW5lZCk7XHJcbiAgICAgICAgdGltZUZvcm1Db250cm9sLm1hcmtBc1VudG91Y2hlZCgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFfbW9tZW50IHx8IGlzRGF0ZUZvY3VzZWQgfHwgaXNUaW1lRm9jdXNlZCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuaGFzSnVzdENoYW5nZWQpIHtcclxuICAgICAgdGhpcy5oYXNKdXN0Q2hhbmdlZCA9IGZhbHNlO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdGltZVZhbHVlID0gdGltZUZvcm1Db250cm9sLnZhbHVlIHx8ICcwMDowMCc7XHJcbiAgICB0aGlzLmhhc0p1c3RDaGFuZ2VkID0gdHJ1ZTtcclxuXHJcbiAgICBpZiAodGhpcy53aWRnZXRJbnN0YW5jZS50eXBlID09PSBTbWFydEZvcm1XaWRnZXRUeXBlLkRBVEVfVElNRV9QSUNLRVIpIHtcclxuICAgICAgdGhpcy5zZXREYXRlRm9ybUNvbnRyb2woZGF0ZUZvcm1Db250cm9sLCBfbW9tZW50LCB0aW1lVmFsdWUpO1xyXG4gICAgICB0aGlzLndpZGdldEluc3RhbmNlLnZhbHVlID0gZGF0ZUZvcm1Db250cm9sLnZhbHVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaGFuZGxlVGltZUNoYW5nZWQodGltZVZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGNvbnN0IGlzRm9jdXNlZCA9IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IHRoaXMudGltZUlucHV0Q2hpbGQ/Lm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICBjb25zdCBkYXRlRm9ybUNvbnRyb2wgPSB0aGlzLmZvcm0uY29udHJvbHNbdGhpcy53aWRnZXRJbnN0YW5jZS5rZXkhXTtcclxuICAgIGNvbnN0IHRpbWVGb3JtQ29udHJvbCA9IHRoaXMuZm9ybS5jb250cm9sc1tgJHt0aGlzLndpZGdldEluc3RhbmNlLmtleX0tdGltZWBdO1xyXG5cclxuICAgIGlmIChcclxuICAgICAgIXRoaXMuaXNEYXRlUGlja2VyUmVxdWlyZWQgJiZcclxuICAgICAgZGF0ZUZvcm1Db250cm9sLmhhc1ZhbGlkYXRvcihWYWxpZGF0b3JzLnJlcXVpcmVkKSAmJlxyXG4gICAgICAhdGltZVZhbHVlXHJcbiAgICApIHtcclxuICAgICAgZGF0ZUZvcm1Db250cm9sLnJlbW92ZVZhbGlkYXRvcnMoVmFsaWRhdG9ycy5yZXF1aXJlZCk7XHJcbiAgICAgIGRhdGVGb3JtQ29udHJvbC5zZXRWYWx1ZShkYXRlRm9ybUNvbnRyb2wudmFsdWUgPz8gJycpO1xyXG4gICAgfSBlbHNlIGlmIChcclxuICAgICAgIXRoaXMuaXNEYXRlUGlja2VyUmVxdWlyZWQgJiZcclxuICAgICAgIWRhdGVGb3JtQ29udHJvbC5oYXNWYWxpZGF0b3IoVmFsaWRhdG9ycy5yZXF1aXJlZCkgJiZcclxuICAgICAgdGltZVZhbHVlXHJcbiAgICApIHtcclxuICAgICAgZGF0ZUZvcm1Db250cm9sLnNldFZhbGlkYXRvcnMoVmFsaWRhdG9ycy5yZXF1aXJlZCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGlzRm9jdXNlZCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuaGFzSnVzdENoYW5nZWQpIHtcclxuICAgICAgdGhpcy5oYXNKdXN0Q2hhbmdlZCA9IGZhbHNlO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF0aW1lVmFsdWUpIHtcclxuICAgICAgaWYgKHRpbWVGb3JtQ29udHJvbC5oYXNWYWxpZGF0b3IoVmFsaWRhdG9ycy5yZXF1aXJlZCkpIHtcclxuICAgICAgICB0aW1lRm9ybUNvbnRyb2wubWFya0FzRGlydHkoKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IF9tb21lbnQgPSBkYXRlRm9ybUNvbnRyb2wudmFsdWU7XHJcblxyXG4gICAgaWYgKCFfbW9tZW50KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmhhc0p1c3RDaGFuZ2VkID0gdHJ1ZTtcclxuICAgIGlmICh0aGlzLndpZGdldEluc3RhbmNlLnR5cGUgPT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuREFURV9USU1FX1BJQ0tFUikge1xyXG4gICAgICB0aGlzLnNldERhdGVGb3JtQ29udHJvbChkYXRlRm9ybUNvbnRyb2wsIF9tb21lbnQsIHRpbWVWYWx1ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldERhdGVGb3JtQ29udHJvbChkYXRlRm9ybUNvbnRyb2w6IGFueSwgX21vbWVudDogYW55LCB0aW1lVmFsdWU6IHN0cmluZykge1xyXG4gICAgaWYgKF9tb21lbnQpIHtcclxuICAgICAgbGV0IGhvdXIgPSB0aW1lVmFsdWUuc3Vic3RyaW5nKDAsIDIpO1xyXG4gICAgICBsZXQgbWluID0gdGltZVZhbHVlLnN1YnN0cmluZygzLCA1KTtcclxuICAgICAgX21vbWVudC5ob3VyKGhvdXIpO1xyXG4gICAgICBfbW9tZW50Lm1pbnV0ZShtaW4pO1xyXG4gICAgICBkYXRlRm9ybUNvbnRyb2wuc2V0VmFsdWUoX21vbWVudCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRUaW1lKCk6IHN0cmluZyB7XHJcbiAgICBpZiAodGhpcy53aWRnZXRJbnN0YW5jZS50eXBlID09PSBTbWFydEZvcm1XaWRnZXRUeXBlLkRBVEVfVElNRV9QSUNLRVIpIHtcclxuICAgICAgcmV0dXJuIHRoaXMud2lkZ2V0SW5zdGFuY2UudmFsdWUudG9JU09TdHJpbmcoKS5zcGxpdCgnVCcpWzFdLnN1YnN0cmluZygwLCA1KTtcclxuICAgIH1cclxuICAgIHJldHVybiAnJztcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5fZGVzdHJveSQubmV4dCgpO1xyXG4gICAgdGhpcy5fZGVzdHJveSQuY29tcGxldGUoKTtcclxuICB9XHJcblxyXG4gIG9uS2V5ZG93bigpOiB2b2lkIHtcclxuICAgIHRoaXMuaXNFbnRlclByZXNzZWQgPSB0cnVlO1xyXG5cclxuICAgIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIDUwMCkpLnRoZW4oKCkgPT4ge1xyXG4gICAgICB0aGlzLmlzRW50ZXJQcmVzc2VkID0gZmFsc2U7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHRvZ2dsZVBhc3N3b3JkVmlzaWJpbGl0eShldmVudDogYW55KTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuaXNFbnRlclByZXNzZWQpIHtcclxuICAgICAgdGhpcy5oaWRlUGFzc3dvcmQgPSAhdGhpcy5oaWRlUGFzc3dvcmQ7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXROZ0NsYXNzKCk6IHsgW2NsYXNzTmFtZTogc3RyaW5nXTogYm9vbGVhbiB9IHtcclxuICAgIHJldHVybiBTbWFydFN0eWxlVXRpbGl0eS5nZXROZ0NsYXNzZXModGhpcy53aWRnZXRJbnN0YW5jZS5zdHlsZSk7XHJcbiAgfVxyXG5cclxuICBnZXRTdHlsZSgpOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB8IG51bWJlciB9IHtcclxuICAgIGlmICghdGhpcy53aWRnZXRJbnN0YW5jZS5zdHlsZSkge1xyXG4gICAgICB0aGlzLndpZGdldEluc3RhbmNlLnN0eWxlID0ge1xyXG4gICAgICAgIGNsYXNzZXNUb0FkZDogW10sXHJcbiAgICAgICAgY2xhc3Nlc1RvUmVtb3ZlOiBbXSxcclxuICAgICAgICBzdHlsZToge30sXHJcbiAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCEoJ3dpZHRoJyBpbiB0aGlzLndpZGdldEluc3RhbmNlLnN0eWxlLnN0eWxlKSAmJiAnbWluV2lkdGgnIGluIHRoaXMud2lkZ2V0SW5zdGFuY2UpIHtcclxuICAgICAgdGhpcy53aWRnZXRJbnN0YW5jZS5zdHlsZS5zdHlsZVsnd2lkdGgnXSA9IGAke3RoaXMud2lkZ2V0SW5zdGFuY2UubWluV2lkdGh9cHhgO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIFNtYXJ0U3R5bGVVdGlsaXR5LmdldE5nU3R5bGVzKHRoaXMud2lkZ2V0SW5zdGFuY2Uuc3R5bGUpO1xyXG4gIH1cclxuXHJcbiAgZ2V0TGFiZWxOZ0NsYXNzKCk6IHsgW2NsYXNzTmFtZTogc3RyaW5nXTogYm9vbGVhbiB9IHtcclxuICAgIGlmICgnbGFiZWxTdHlsZScgaW4gdGhpcy53aWRnZXRJbnN0YW5jZSkge1xyXG4gICAgICByZXR1cm4gU21hcnRTdHlsZVV0aWxpdHkuZ2V0TmdDbGFzc2VzKHRoaXMud2lkZ2V0SW5zdGFuY2UubGFiZWxTdHlsZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHt9O1xyXG4gIH1cclxuXHJcbiAgZ2V0TGFiZWxTdHlsZSgpOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB8IG51bWJlciB9IHtcclxuICAgIGlmICgnbGFiZWxTdHlsZScgaW4gdGhpcy53aWRnZXRJbnN0YW5jZSkge1xyXG4gICAgICByZXR1cm4gU21hcnRTdHlsZVV0aWxpdHkuZ2V0TmdTdHlsZXModGhpcy53aWRnZXRJbnN0YW5jZS5sYWJlbFN0eWxlKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4ge307XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDaGFuZ2UgaGFuZGxlciBmb3IgdGhlIHBvdGVudGlhbGx5IHByZXNlbnQgUXVpbGwgZWRpdG9yLCBlbmZvcmNpbmcgbWF4IGxlbmd0aCBsaW1pdHMgaWZcclxuICAgKiBuZWNlc3NhcnkuXHJcbiAgICpcclxuICAgKiBAcGFyYW0gY2hhbmdlIHRoZSB7QGxpbmsgQ29udGVudENoYW5nZX0gdGhlIFF1aWxsIGVkaXRvciBlbWl0c1xyXG4gICAqIEByZXR1cm5zIHtAY29kZSB2b2lkfVxyXG4gICAqL1xyXG4gIG9uUmljaFRleHRFZGl0b3JDb250ZW50Q2hhbmdlZChjaGFuZ2U6IENvbnRlbnRDaGFuZ2UpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLndpZGdldEluc3RhbmNlLnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuUklDSF9URVhUKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRoaXMud2lkZ2V0SW5zdGFuY2UubWF4TGVuZ3RoKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyB3ZSBhcmUgcGVybWl0dGVkIGEgbnVtYmVyIG9uZSBncmVhdGVyIHRoYW4gdGhlIHJlcXVlc3RlZDogVGhlIHF1aWxsIGVkaXRvciBjb250YWlucyBhblxyXG4gICAgLy8gdW5yZW1vdmFibGUgbmV3LWxpbmUgY2hhcmFjdGVyIGF0IHRoZSBlbmQgb2YgaXRzIGNvbnRlbnQuXHJcbiAgICBjb25zdCBtYXhMZW5ndGg6IG51bWJlciA9IHRoaXMud2lkZ2V0SW5zdGFuY2UubWF4TGVuZ3RoICsgMTtcclxuICAgIGlmIChjaGFuZ2UudGV4dC5sZW5ndGggPD0gbWF4TGVuZ3RoKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBpbnNlcnRPcENvdW50OiBudW1iZXIgPSBjaGFuZ2UuZGVsdGEub3BzPy5maWx0ZXIoKGl0KSA9PiAhIWl0Lmluc2VydCkubGVuZ3RoID8/IDA7XHJcbiAgICBpZiAoaW5zZXJ0T3BDb3VudCA+IDApIHtcclxuICAgICAgdGhpcy5xdWlsbD8ucXVpbGxFZGl0b3Iuc2V0Q29udGVudHMoY2hhbmdlLm9sZERlbHRhLCAnc2lsZW50Jyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDYWxjdWxhdGVzIHRoZSBudW1iZXIgb2YgcmVtYWluaW5nIHVzZXItc3BhY2UgY2hhcmFjdGVycyBhbGxvd2VkIHRvIGJlIGVudGVyZWQgaW50byB0aGUgUXVpbGxcclxuICAgKiBlZGl0b3IuXHJcbiAgICpcclxuICAgKiA8cD5cclxuICAgKiBUaGUgcmVhbCBsZW5ndGggb2YgdGhlIGVkaXRvcidzIGNvbnRlbnQgbWF5IGJlIG11Y2ggbG9uZ2VyIC0gYXMgaXQgaXMgcGVyc2lzdGVkIGFzIGFuIEhUTUxcclxuICAgKiBkb2N1bWVudCBmcmFnbWVudCBiZWhpbmQgdGhlIHNjZW5lcy4gVGhpcyBtZXRob2QgaXMgY29uY2VybmVkIGJ5IHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyB0aGVcclxuICAgKiB1c2VyIHBlcmNlaXZlcy5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHRoZSB7QGxpbmsgbnVtYmVyfSBvZiByZW1haW5pbmcgcGVybWl0dGVkIGNoYXJhY3RlcnMgdGhlIHVzZXIgbWF5IGlucHV0LCBvciB7QGNvZGUgLTF9XHJcbiAgICogICAgICAgICAgaWYgdGhlIGxlZXdheSBpcyBub3QgaW50ZXJwcmV0ZWQgaW4gdGhlIGNvbXBvbmVudCdzIGN1cnJlbnQgc3RhdGVcclxuICAgKi9cclxuICBnZXRSaWNoVGV4dEVkaXRvckxlbmd0aExlZXdheSgpOiBudW1iZXIge1xyXG4gICAgaWYgKHRoaXMud2lkZ2V0SW5zdGFuY2UudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5SSUNIX1RFWFQpIHtcclxuICAgICAgcmV0dXJuIC0xO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghdGhpcy53aWRnZXRJbnN0YW5jZS5tYXhMZW5ndGgpIHtcclxuICAgICAgcmV0dXJuIC0xO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIHdlIGFyZSBwZXJtaXR0ZWQgYSBudW1iZXIgb25lIGdyZWF0ZXIgdGhhbiB0aGUgcmVxdWVzdGVkOiBUaGUgcXVpbGwgZWRpdG9yIGNvbnRhaW5zIGFuXHJcbiAgICAvLyB1bnJlbW92YWJsZSBuZXctbGluZSBjaGFyYWN0ZXIgYXQgdGhlIGVuZCBvZiBpdHMgY29udGVudC5cclxuICAgIGNvbnN0IG1heExlbmd0aDogbnVtYmVyID0gdGhpcy53aWRnZXRJbnN0YW5jZS5tYXhMZW5ndGggKyAxO1xyXG4gICAgaWYgKHRoaXMucXVpbGwpIHtcclxuICAgICAgLy8gdGhpcyBpcyB0aGUgaW50ZW5kZWQgcGF0aCAodXNlciBpbnB1dCk6XHJcbiAgICAgIHJldHVybiBtYXhMZW5ndGggLSB0aGlzLnF1aWxsLnF1aWxsRWRpdG9yLmdldFRleHQoKS5sZW5ndGg7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gZmFsbGJhY2sgdG8gdGhlIHJhdyBIVE1MIGNvbnRlbnQ6XHJcbiAgICByZXR1cm4gbWF4TGVuZ3RoIC0gdGhpcy5mb3JtLmNvbnRyb2xzW3RoaXMud2lkZ2V0SW5zdGFuY2Uua2V5XS52YWx1ZS5sZW5ndGg7XHJcbiAgfVxyXG5cclxuICBhZGRPbkJsdXIgPSB0cnVlO1xyXG4gIHJlYWRvbmx5IHNlcGFyYXRvcktleXNDb2RlcyA9IFtFTlRFUiwgQ09NTUFdIGFzIGNvbnN0O1xyXG4gIHJlYWRvbmx5IGVtcHR5U2VwYXJhdG9yS2V5c0NvZGVzID0gW10gYXMgY29uc3Q7XHJcblxyXG4gIGFkZChldmVudDogTWF0Q2hpcElucHV0RXZlbnQpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLndpZGdldEluc3RhbmNlLnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuVEVYVF9GSUVMRF9DSElQUykge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdmFsdWUgPSAoZXZlbnQudmFsdWUgfHwgJycpLnRyaW0oKTtcclxuICAgIGlmICh0aGlzLnNldFRleHRGaWVsZENoaXBzVmFsdWUodmFsdWUpKSB7XHJcbiAgICAgIGNvbnN0IHZhbHVlQ2hhbmdlOiBTb3BoaXN0aWNhdGVkVmFsdWVDaGFuZ2UgPSB7XHJcbiAgICAgICAga2V5OiB0aGlzLndpZGdldEluc3RhbmNlLmtleSxcclxuICAgICAgICB2YWx1ZTogdGhpcy5mb3JtLmNvbnRyb2xzW3RoaXMud2lkZ2V0SW5zdGFuY2Uua2V5XS52YWx1ZSxcclxuICAgICAgICBraW5kOiAnc2VsZWN0aW9uJyxcclxuICAgICAgfTtcclxuICAgICAgdGhpcy5zb3BoaXN0aWNhdGVkVmFsdWVDaGFuZ2UubmV4dCh2YWx1ZUNoYW5nZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQ2xlYXIgdGhlIGlucHV0IHZhbHVlXHJcbiAgICBldmVudC5jaGlwSW5wdXQhLmNsZWFyKCk7XHJcbiAgICB0aGlzLmZvcm0uY29udHJvbHNbdGhpcy53aWRnZXRJbnN0YW5jZS5rZXldLm1hcmtBc1RvdWNoZWQoKTtcclxuICB9XHJcblxyXG4gIHJlbW92ZSh2YWx1ZTogU21hcnRGb3JtV2lkZ2V0PGFueT4pOiB2b2lkIHtcclxuICAgIGlmIChcclxuICAgICAgdGhpcy53aWRnZXRJbnN0YW5jZS50eXBlID09PSBTbWFydEZvcm1XaWRnZXRUeXBlLlRFWFRfRklFTERfQ0hJUFMgfHxcclxuICAgICAgdGhpcy53aWRnZXRJbnN0YW5jZS50eXBlID09PSBTbWFydEZvcm1XaWRnZXRUeXBlLlRFWFRfRklFTERfTE9PS1VQXHJcbiAgICApIHtcclxuICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmZvcm0uY29udHJvbHNbdGhpcy53aWRnZXRJbnN0YW5jZS5rZXldLnZhbHVlLmluZGV4T2YodmFsdWUpO1xyXG5cclxuICAgICAgaWYgKGluZGV4ID49IDApIHtcclxuICAgICAgICB0aGlzLmZvcm0uY29udHJvbHNbdGhpcy53aWRnZXRJbnN0YW5jZS5rZXldLnZhbHVlLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgdGhpcy5mb3JtLmNvbnRyb2xzW3RoaXMud2lkZ2V0SW5zdGFuY2Uua2V5XS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICAgICAgY29uc3QgdmFsdWVDaGFuZ2U6IFNvcGhpc3RpY2F0ZWRWYWx1ZUNoYW5nZSA9IHtcclxuICAgICAgICAgIGtleTogdGhpcy53aWRnZXRJbnN0YW5jZS5rZXksXHJcbiAgICAgICAgICB2YWx1ZTogdGhpcy5mb3JtLmNvbnRyb2xzW3RoaXMud2lkZ2V0SW5zdGFuY2Uua2V5XS52YWx1ZSxcclxuICAgICAgICAgIGtpbmQ6ICdzZWxlY3Rpb24nLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5zb3BoaXN0aWNhdGVkVmFsdWVDaGFuZ2UubmV4dCh2YWx1ZUNoYW5nZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNlbGVjdGVkKGV2ZW50OiBNYXRBdXRvY29tcGxldGVTZWxlY3RlZEV2ZW50LCB3aWRnZXRJbnN0YW5jZTogU21hcnRGb3JtV2lkZ2V0PGFueT4pOiB2b2lkIHtcclxuICAgIGxldCB2YWx1ZSA9IGV2ZW50Lm9wdGlvbi52aWV3VmFsdWU7XHJcbiAgICBpZiAodGhpcy5zZXRUZXh0RmllbGRDaGlwc1ZhbHVlKHZhbHVlKSkge1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgd2lkZ2V0SW5zdGFuY2UudHlwZSA9PT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5URVhUX0ZJRUxEX0NISVBTIHx8XHJcbiAgICAgICAgd2lkZ2V0SW5zdGFuY2UudHlwZSA9PT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5URVhUX0ZJRUxEX0xPT0tVUFxyXG4gICAgICApIHtcclxuICAgICAgICBjb25zdCB2YWx1ZUNoYW5nZTogU29waGlzdGljYXRlZFZhbHVlQ2hhbmdlID0ge1xyXG4gICAgICAgICAga2V5OiB3aWRnZXRJbnN0YW5jZS5rZXksXHJcbiAgICAgICAgICB2YWx1ZTogdGhpcy5mb3JtLmNvbnRyb2xzW3dpZGdldEluc3RhbmNlLmtleV0udmFsdWUsXHJcbiAgICAgICAgICBraW5kOiAnc2VsZWN0aW9uJyxcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMuc29waGlzdGljYXRlZFZhbHVlQ2hhbmdlLm5leHQodmFsdWVDaGFuZ2UpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldFRleHRGaWVsZENoaXBzVmFsdWUodmFsdWU6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHRoaXMud2lkZ2V0SW5zdGFuY2UudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5URVhUX0ZJRUxEX0NISVBTKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodmFsdWUpIHtcclxuICAgICAgaWYgKFxyXG4gICAgICAgICh0aGlzLndpZGdldEluc3RhbmNlLm1heFZhbHVlcyAmJlxyXG4gICAgICAgICAgdGhpcy53aWRnZXRJbnN0YW5jZS52YWx1ZSEubGVuZ3RoIDwgdGhpcy53aWRnZXRJbnN0YW5jZS5tYXhWYWx1ZXMpIHx8XHJcbiAgICAgICAgIXRoaXMud2lkZ2V0SW5zdGFuY2UubWF4VmFsdWVzXHJcbiAgICAgICkge1xyXG4gICAgICAgIGlmICghdGhpcy5mb3JtLmNvbnRyb2xzW3RoaXMud2lkZ2V0SW5zdGFuY2Uua2V5XS52YWx1ZSkge1xyXG4gICAgICAgICAgbGV0IHZhbHVlcyA9IG5ldyBBcnJheTxPYmplY3Q+KCk7XHJcbiAgICAgICAgICB0aGlzLndpZGdldEluc3RhbmNlLnZhbHVlID0gdmFsdWVzO1xyXG4gICAgICAgICAgdGhpcy5mb3JtLmNvbnRyb2xzW3RoaXMud2lkZ2V0SW5zdGFuY2Uua2V5XS5zZXRWYWx1ZSh2YWx1ZXMpO1xyXG4gICAgICAgICAgdGhpcy5mb3JtLmNvbnRyb2xzW3RoaXMud2lkZ2V0SW5zdGFuY2Uua2V5XS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZm9ybS5jb250cm9sc1t0aGlzLndpZGdldEluc3RhbmNlLmtleV0udmFsdWUucHVzaCh2YWx1ZSk7XHJcbiAgICAgICAgdGhpcy5mb3JtLmNvbnRyb2xzW3RoaXMud2lkZ2V0SW5zdGFuY2Uua2V5XS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIGdldERpcmVjdGlvbigpOiBzdHJpbmcge1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLndpZGdldEluc3RhbmNlLnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuQ09OVEFJTkVSICYmXHJcbiAgICAgIHRoaXMud2lkZ2V0SW5zdGFuY2UudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5DSEVDS19CT1ggJiZcclxuICAgICAgdGhpcy53aWRnZXRJbnN0YW5jZS50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLlJBRElPX0JVVFRPTlxyXG4gICAgKSB7XHJcbiAgICAgIHJldHVybiAnJztcclxuICAgIH1cclxuICAgIGlmICh0aGlzLndpZGdldEluc3RhbmNlLmRpcmVjdGlvbiA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHJldHVybiAnZGlyZWN0aW9uLXJvdyc7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMud2lkZ2V0SW5zdGFuY2UuZGlyZWN0aW9uID09PSBTbWFydEZvcm1XaWRnZXREaXJlY3Rpb24uQ09MKSB7XHJcbiAgICAgIHJldHVybiAnZGlyZWN0aW9uLWNvbCc7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gJ2RpcmVjdGlvbi1yb3cnO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc21hcnRGb3JtVGV4dEZpZWxkQnV0dG9uSWNvblBvc2l0aW9uKCk6IHR5cGVvZiBTbWFydEZvcm1UZXh0RmllbGRCdXR0b25JY29uUG9zaXRpb24ge1xyXG4gICAgcmV0dXJuIFNtYXJ0Rm9ybVRleHRGaWVsZEJ1dHRvbkljb25Qb3NpdGlvbjtcclxuICB9XHJcblxyXG4gIGdldFR5cGUoKTogdHlwZW9mIFNtYXJ0Rm9ybVdpZGdldFR5cGUge1xyXG4gICAgcmV0dXJuIFNtYXJ0Rm9ybVdpZGdldFR5cGU7XHJcbiAgfVxyXG5cclxuICBnZXRXaWRnZXRMYWJlbCh3aWRnZXQ6IFNtYXJ0Rm9ybVdpZGdldDxhbnk+KTogc3RyaW5nIHtcclxuICAgIGlmICh3aWRnZXQudHlwZSA9PT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5DT05UQUlORVIpIHtcclxuICAgICAgcmV0dXJuICcnO1xyXG4gICAgfVxyXG4gICAgaWYgKHdpZGdldC5sYWJlbCA9PT0gJycpIHtcclxuICAgICAgcmV0dXJuIHdpZGdldC5sYWJlbDtcclxuICAgIH1cclxuICAgIGxldCBpc1JlcXVpcmVkID0gZmFsc2U7XHJcbiAgICBpZiAoXHJcbiAgICAgIHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLkxBQkVMICYmXHJcbiAgICAgIHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLlRJTUUgJiZcclxuICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuVE9HR0xFICYmXHJcbiAgICAgIHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLklORElDQVRPUiAmJlxyXG4gICAgICB3aWRnZXQudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5GSUxFX1VQTE9BREVSICYmXHJcbiAgICAgIHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLklNQUdFICYmXHJcbiAgICAgIHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLlNWRyAmJlxyXG4gICAgICB3aWRnZXQudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5ESVZJREVSICYmXHJcbiAgICAgIHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLkJVVFRPTiAmJlxyXG4gICAgICB3aWRnZXQudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5DT01QT05FTlRcclxuICAgICkge1xyXG4gICAgICBpc1JlcXVpcmVkID0gd2lkZ2V0LnZhbGlkYXRvcnM/Lmxlbmd0aCA/IHRoaXMuZmllbGRJc1JlcXVpcmVkKCkgJiYgISF3aWRnZXQuc2hvd0xhYmVsIDogZmFsc2U7XHJcbiAgICB9IGVsc2UgaWYgKHdpZGdldC50eXBlID09PSBTbWFydEZvcm1XaWRnZXRUeXBlLkxBQkVMKSB7XHJcbiAgICAgIGlzUmVxdWlyZWQgPSB3aWRnZXQubWFya0FzUmVxdWlyZWQgPyB0cnVlIDogZmFsc2U7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYCR7d2lkZ2V0LmxhYmVsfSR7aXNSZXF1aXJlZCA/ICcgKicgOiAnJ31gO1xyXG4gIH1cclxuXHJcbiAgZ2V0V2lkZ2V0U3ZnKHZhbHVlPzogc3RyaW5nKTogU2FmZUh0bWwgfCBudWxsIHtcclxuICAgIGxldCBzYWZlVmFsdWUgPSB2YWx1ZSA/PyAnJztcclxuICAgIHJldHVybiB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0SHRtbChzYWZlVmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBmaWVsZElzUmVxdWlyZWQoKTogYm9vbGVhbiB7XHJcbiAgICBsZXQgdmFsdWUgPSBmYWxzZTtcclxuICAgIGlmIChcclxuICAgICAgdGhpcy53aWRnZXRJbnN0YW5jZS50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLkNPTlRBSU5FUiAmJlxyXG4gICAgICB0aGlzLndpZGdldEluc3RhbmNlLnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuTEFCRUwgJiZcclxuICAgICAgdGhpcy53aWRnZXRJbnN0YW5jZS50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLlRJTUUgJiZcclxuICAgICAgdGhpcy53aWRnZXRJbnN0YW5jZS50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLlRPR0dMRSAmJlxyXG4gICAgICB0aGlzLndpZGdldEluc3RhbmNlLnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuSU5ESUNBVE9SICYmXHJcbiAgICAgIHRoaXMud2lkZ2V0SW5zdGFuY2UudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5GSUxFX1VQTE9BREVSICYmXHJcbiAgICAgIHRoaXMud2lkZ2V0SW5zdGFuY2UudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5JTUFHRSAmJlxyXG4gICAgICB0aGlzLndpZGdldEluc3RhbmNlLnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuU1ZHICYmXHJcbiAgICAgIHRoaXMud2lkZ2V0SW5zdGFuY2UudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5ESVZJREVSICYmXHJcbiAgICAgIHRoaXMud2lkZ2V0SW5zdGFuY2UudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5CVVRUT04gJiZcclxuICAgICAgdGhpcy53aWRnZXRJbnN0YW5jZS50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLkNPTVBPTkVOVCAmJlxyXG4gICAgICB0aGlzLndpZGdldEluc3RhbmNlLnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuWU9VVFVCRV9QTEFZRVJcclxuICAgICkge1xyXG4gICAgICB0aGlzLndpZGdldEluc3RhbmNlLnZhbGlkYXRvcnM/LmZvckVhY2goKHZhbGlkYXRvcjogU21hcnRWYWxpZGF0b3IpID0+IHtcclxuICAgICAgICBpZiAodmFsaWRhdG9yLnZhbGlkYXRvciA9PSBWYWxpZGF0b3JzLnJlcXVpcmVkKSB2YWx1ZSA9IHRydWU7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGhhc0N1c3RvbUVycm9yKHdpZGdldDogU21hcnRGb3JtV2lkZ2V0PGFueT4sIHZhbGlkYXRvcjogU21hcnRWYWxpZGF0b3IpOiBib29sZWFuIHtcclxuICAgIGlmIChcclxuICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuQ09OVEFJTkVSICYmXHJcbiAgICAgIHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLkxBQkVMICYmXHJcbiAgICAgIHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLllPVVRVQkVfUExBWUVSXHJcbiAgICApIHtcclxuICAgICAgaWYgKHRoaXMuZm9ybS5jb250cm9sc1t3aWRnZXQua2V5XSAmJiB0aGlzLmZvcm0uY29udHJvbHNbd2lkZ2V0LmtleV0uZXJyb3JzKSB7XHJcbiAgICAgICAgbGV0IGhhc0Vycm9yID0gT2JqZWN0LmtleXModGhpcy5mb3JtLmNvbnRyb2xzW3dpZGdldC5rZXldLmVycm9ycyEpLmxlbmd0aFxyXG4gICAgICAgICAgPyB0aGlzLmZvcm0uY29udHJvbHNbd2lkZ2V0LmtleV0/LmRpcnR5IHx8XHJcbiAgICAgICAgICAgICh0aGlzLmZvcm0uY29udHJvbHNbd2lkZ2V0LmtleV0/LnRvdWNoZWQgJiZcclxuICAgICAgICAgICAgICB2YWxpZGF0b3IgJiZcclxuICAgICAgICAgICAgICAodGhpcy5mb3JtLmNvbnRyb2xzW3dpZGdldC5rZXldPy5lcnJvcnMpIVt2YWxpZGF0b3IubmFtZV0pXHJcbiAgICAgICAgICA6IGZhbHNlO1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgICh2YWxpZGF0b3IgJiYgaGFzRXJyb3IgJiYgIXRoaXMuZXJyb3JLZXkpIHx8XHJcbiAgICAgICAgICAodmFsaWRhdG9yICYmIGhhc0Vycm9yICYmIHRoaXMuZXJyb3JLZXkgPT09IHZhbGlkYXRvci5uYW1lKVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgdGhpcy5oYXNFcnJvciA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLmVycm9yS2V5ID0gdmFsaWRhdG9yLm5hbWU7XHJcbiAgICAgICAgfSBlbHNlIGlmICghaGFzRXJyb3IgJiYgdmFsaWRhdG9yICYmIHRoaXMuZXJyb3JLZXkgPT09IHZhbGlkYXRvci5uYW1lKSB7XHJcbiAgICAgICAgICB0aGlzLmhhc0Vycm9yID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLmVycm9yS2V5ID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBoYXNFcnJvciA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gaGFzRXJyb3I7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIGdldEVycm9yTWVzc2FnZSh3aWRnZXRJbnN0YW5jZTogU21hcnRGb3JtV2lkZ2V0PGFueT4pOiBib29sZWFuIHtcclxuICAgIGxldCBlcnJvck1lc3NhZ2U6IHN0cmluZztcclxuICAgIGxldCBlcnJvckljb246IHN0cmluZyB8IHVuZGVmaW5lZDtcclxuICAgIGxldCBlcnJvckljb25Db2xvcjogc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG4gICAgbGV0IHZhbGlkYXRvcjogU21hcnRWYWxpZGF0b3I7XHJcbiAgICBpZiAoXHJcbiAgICAgIHdpZGdldEluc3RhbmNlLnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuQ09OVEFJTkVSICYmXHJcbiAgICAgIHdpZGdldEluc3RhbmNlLnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuTEFCRUwgJiZcclxuICAgICAgd2lkZ2V0SW5zdGFuY2UudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5JTkRJQ0FUT1IgJiZcclxuICAgICAgd2lkZ2V0SW5zdGFuY2UudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5GSUxFX1VQTE9BREVSICYmXHJcbiAgICAgIHdpZGdldEluc3RhbmNlLnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuSU1BR0UgJiZcclxuICAgICAgd2lkZ2V0SW5zdGFuY2UudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5TVkcgJiZcclxuICAgICAgd2lkZ2V0SW5zdGFuY2UudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5ESVZJREVSICYmXHJcbiAgICAgIHdpZGdldEluc3RhbmNlLnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuQlVUVE9OICYmXHJcbiAgICAgIHdpZGdldEluc3RhbmNlLnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuQ09NUE9ORU5UICYmXHJcbiAgICAgIHdpZGdldEluc3RhbmNlLnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuWU9VVFVCRV9QTEFZRVJcclxuICAgICkge1xyXG4gICAgICBpZiAodGhpcy5mb3JtLmNvbnRyb2xzW3dpZGdldEluc3RhbmNlLmtleV0gJiYgdGhpcy5mb3JtLmNvbnRyb2xzW3dpZGdldEluc3RhbmNlLmtleV0uZXJyb3JzKSB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgdGhpcy5lcnJvcktleSAmJlxyXG4gICAgICAgICAgIU9iamVjdC5rZXlzKHRoaXMuZm9ybS5jb250cm9sc1t3aWRnZXRJbnN0YW5jZS5rZXldLmVycm9ycyEpLmluY2x1ZGVzKHRoaXMuZXJyb3JLZXkhKVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgdGhpcy5lcnJvcktleSA9IHVuZGVmaW5lZDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yIChcclxuICAgICAgICAgIGxldCBpbmRleCA9IDA7XHJcbiAgICAgICAgICBpbmRleCA8IE9iamVjdC5rZXlzKHRoaXMuZm9ybS5jb250cm9sc1t3aWRnZXRJbnN0YW5jZS5rZXldLmVycm9ycyEpLmxlbmd0aDtcclxuICAgICAgICAgIGluZGV4KytcclxuICAgICAgICApIHtcclxuICAgICAgICAgIGNvbnN0IGVycm9yS2V5ID0gT2JqZWN0LmtleXModGhpcy5mb3JtLmNvbnRyb2xzW3dpZGdldEluc3RhbmNlLmtleV0uZXJyb3JzISlbaW5kZXhdO1xyXG4gICAgICAgICAgbGV0IGN1c3RvbVZhbGlkYXRvck9uV2lkZ2V0ID0gd2lkZ2V0SW5zdGFuY2UudmFsaWRhdG9ycz8uZmlsdGVyKFxyXG4gICAgICAgICAgICAodmFsaWRhdG9yOiBTbWFydFZhbGlkYXRvcikgPT4gdmFsaWRhdG9yLm5hbWUgPT09IGVycm9yS2V5XHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgaWYgKGN1c3RvbVZhbGlkYXRvck9uV2lkZ2V0ICYmIGN1c3RvbVZhbGlkYXRvck9uV2lkZ2V0Lmxlbmd0aCkge1xyXG4gICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBjdXN0b21WYWxpZGF0b3JPbldpZGdldFswXS5lcnJvck1lc3NhZ2UhO1xyXG4gICAgICAgICAgICBlcnJvckljb24gPSBjdXN0b21WYWxpZGF0b3JPbldpZGdldFswXS5pY29uO1xyXG4gICAgICAgICAgICBlcnJvckljb25Db2xvciA9IGN1c3RvbVZhbGlkYXRvck9uV2lkZ2V0WzBdLmljb25Db2xvcjtcclxuICAgICAgICAgICAgdmFsaWRhdG9yID0gY3VzdG9tVmFsaWRhdG9yT25XaWRnZXRbMF07XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgbGV0IGN1c3RvbVZhbGlkYXRvck9uRm9ybSA9IHRoaXMuc2VydmljZS5zbWFydEZvcm0/LnZhbGlkYXRvcnM/LmZpbHRlcihcclxuICAgICAgICAgICAgKHZhbGlkYXRvcjogU21hcnRWYWxpZGF0b3IpID0+IHZhbGlkYXRvci5uYW1lID09PSBlcnJvcktleVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGlmIChjdXN0b21WYWxpZGF0b3JPbkZvcm0gJiYgY3VzdG9tVmFsaWRhdG9yT25Gb3JtLmxlbmd0aCkge1xyXG4gICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBjdXN0b21WYWxpZGF0b3JPbkZvcm1bMF0uZXJyb3JNZXNzYWdlITtcclxuICAgICAgICAgICAgdmFsaWRhdG9yID0gY3VzdG9tVmFsaWRhdG9yT25Gb3JtWzBdO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLmhhc0N1c3RvbUVycm9yKHdpZGdldEluc3RhbmNlLCB2YWxpZGF0b3IhKSkge1xyXG4gICAgICAgIHdpZGdldEluc3RhbmNlLmVycm9yID0gZXJyb3JNZXNzYWdlITtcclxuICAgICAgICB3aWRnZXRJbnN0YW5jZS5lcnJvckljb24gPSBlcnJvckljb247XHJcbiAgICAgICAgd2lkZ2V0SW5zdGFuY2UuZXJyb3JJY29uQ29sb3IgPSBlcnJvckljb25Db2xvcjtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHdpZGdldEluc3RhbmNlLnNlcnZlckVycm9yTWVzc2FnZSkge1xyXG4gICAgICAgIHdpZGdldEluc3RhbmNlLmVycm9yID0gd2lkZ2V0SW5zdGFuY2Uuc2VydmVyRXJyb3JNZXNzYWdlO1xyXG4gICAgICAgIHdpZGdldEluc3RhbmNlLmVycm9ySWNvbiA9IHdpZGdldEluc3RhbmNlLnNlcnZlckVycm9ySWNvbjtcclxuICAgICAgICB3aWRnZXRJbnN0YW5jZS5lcnJvckljb25Db2xvciA9IHdpZGdldEluc3RhbmNlLnNlcnZlckVycm9yQ29sb3I7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHdpZGdldEluc3RhbmNlLmVycm9yID0gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgZ2V0SW5kaWNhdG9ySXRlbUNsYXNzKGluZGV4OiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgaWYgKHRoaXMud2lkZ2V0SW5zdGFuY2UudHlwZSA9PT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5JTkRJQ0FUT1IpIHtcclxuICAgICAgaWYgKHRoaXMud2lkZ2V0SW5zdGFuY2UuaW5kaWNhdG9yLmluZGljYXRvclZhbHVlID49IGluZGV4KSB7XHJcbiAgICAgICAgcmV0dXJuIGBzbWFydC1pbmRpY2F0b3ItJHtpbmRleH1gO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gJyc7XHJcbiAgfVxyXG5cclxuICBnZXRJbmRpY2F0b3JTdGF0dXNMYWJlbENvbG9yKCk6IHN0cmluZyB7XHJcbiAgICBpZiAodGhpcy53aWRnZXRJbnN0YW5jZS50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLklORElDQVRPUikge1xyXG4gICAgICByZXR1cm4gJyc7XHJcbiAgICB9XHJcbiAgICBsZXQgdmFsdWUgPSBNYXRoLmZsb29yKHRoaXMud2lkZ2V0SW5zdGFuY2UuaW5kaWNhdG9yIS5pbmRpY2F0b3JWYWx1ZSk7XHJcbiAgICBpZiAodmFsdWUgPiB0aGlzLndpZGdldEluc3RhbmNlLmluZGljYXRvciEuaW5kaWNhdG9yTGVuZ3RoIC0gMSkge1xyXG4gICAgICByZXR1cm4gYHNtYXJ0LWluZGljYXRvci1sYWJlbC0ke3RoaXMud2lkZ2V0SW5zdGFuY2UuaW5kaWNhdG9yIS5pbmRpY2F0b3JMZW5ndGggLSAxfWA7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYHNtYXJ0LWluZGljYXRvci1sYWJlbC0ke3ZhbHVlfWA7XHJcbiAgfVxyXG4gIGdldEluZGljYXRvclN0YXR1c0xhYmVsKCk6IHN0cmluZyB7XHJcbiAgICBpZiAodGhpcy53aWRnZXRJbnN0YW5jZS50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLklORElDQVRPUikge1xyXG4gICAgICByZXR1cm4gJyc7XHJcbiAgICB9XHJcbiAgICBsZXQgdmFsdWUgPSBNYXRoLmZsb29yKHRoaXMud2lkZ2V0SW5zdGFuY2UuaW5kaWNhdG9yIS5pbmRpY2F0b3JWYWx1ZSk7XHJcbiAgICBpZiAodmFsdWUgPiB0aGlzLndpZGdldEluc3RhbmNlLmluZGljYXRvciEuaW5kaWNhdG9yTGVuZ3RoIC0gMSkge1xyXG4gICAgICByZXR1cm4gdGhpcy53aWRnZXRJbnN0YW5jZS5pbmRpY2F0b3IhLmluZGljYXRvclN0YXR1c0xhYmVsc1tcclxuICAgICAgICB0aGlzLndpZGdldEluc3RhbmNlLmluZGljYXRvciEuaW5kaWNhdG9yTGVuZ3RoIC0gMVxyXG4gICAgICBdO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMud2lkZ2V0SW5zdGFuY2UuaW5kaWNhdG9yIS5pbmRpY2F0b3JTdGF0dXNMYWJlbHNbdmFsdWVdO1xyXG4gIH1cclxuXHJcbiAgdXBsb2FkKGZpbGVzOiBhbnlbXSk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMud2lkZ2V0SW5zdGFuY2UudHlwZSA9PT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5GSUxFX1VQTE9BREVSKSB7XHJcbiAgICAgIHRoaXMud2lkZ2V0SW5zdGFuY2UudXBsb2FkQ2FsbGJhY2sodGhpcy53aWRnZXRJbnN0YW5jZS5rZXksIGZpbGVzKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldEJ1dHRvblR5cGUoZGVzY3JpcHRvcjogYW55KTogc3RyaW5nIHtcclxuICAgIHN3aXRjaCAoZGVzY3JpcHRvci50eXBlKSB7XHJcbiAgICAgIGNhc2UgJ05PUk1BTCc6XHJcbiAgICAgICAgcmV0dXJuICdtYXQtYnV0dG9uJztcclxuICAgICAgY2FzZSAnRkxBVCc6XHJcbiAgICAgICAgcmV0dXJuICdtYXQtZmxhdC1idXR0b24nO1xyXG4gICAgICBjYXNlICdSQUlTRUQnOlxyXG4gICAgICAgIHJldHVybiAnbWF0LXJhaXNlZC1idXR0b24nO1xyXG4gICAgICBjYXNlICdTVFJPS0VEJzpcclxuICAgICAgICByZXR1cm4gJ21hdC1zdHJva2VkLWJ1dHRvbic7XHJcbiAgICAgIGNhc2UgJ0lDT04nOlxyXG4gICAgICAgIHJldHVybiAnbWF0LWljb24tYnV0dG9uJztcclxuICAgICAgY2FzZSAnTUlOSV9GQUInOlxyXG4gICAgICAgIHJldHVybiAnbWF0LW1pbmktZmFiJztcclxuICAgICAgY2FzZSAnRkFCJzpcclxuICAgICAgICByZXR1cm4gJ21hdC1mYWInO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGNvbnNvbGUubG9nKGBVbmhhbmRsZWQgYWN0aW9uIGJ1dHRvbiB0eXBlIGNhc2U6ICR7ZGVzY3JpcHRvci50eXBlfWApO1xyXG4gICAgICAgIHJldHVybiBgbWF0LWJ1dHRvbmA7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpc09ubHlJY29uKGRlc2NyaXB0b3I6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgZGVzY3JpcHRvci50eXBlID09PSAnSUNPTicgfHwgZGVzY3JpcHRvci50eXBlID09PSAnTUlOSV9GQUInIHx8IGRlc2NyaXB0b3IudHlwZSA9PT0gJ0ZBQidcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBvbkJ1dHRvbkNsaWNrZWQoaW5zdGFuY2U6IFNtYXJ0QnV0dG9uKTogdm9pZCB7XHJcbiAgICBpZiAoaW5zdGFuY2UudWlBY3Rpb24pIHtcclxuICAgICAgaW5zdGFuY2UuY2FsbGJhY2soaW5zdGFuY2UudWlBY3Rpb24pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaW5zdGFuY2UuY2FsbGJhY2soaW5zdGFuY2Uua2V5KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2ZpbHRlcih2YWx1ZTogSW5wdXRFdmVudCk6IFNtYXJ0SXRlbTxhbnk+W10ge1xyXG4gICAgbGV0IGZpbHRlclZhbHVlID0gKHZhbHVlLnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KT8udmFsdWU7XHJcbiAgICB0aGlzLnRvSGlnaGxpZ2h0ID0gZmlsdGVyVmFsdWU7XHJcblxyXG4gICAgaWYgKCFmaWx0ZXJWYWx1ZSkge1xyXG4gICAgICBmaWx0ZXJWYWx1ZSA9ICcnO1xyXG4gICAgICB0aGlzLnRvSGlnaGxpZ2h0ID0gZmlsdGVyVmFsdWU7XHJcbiAgICB9XHJcbiAgICBmaWx0ZXJWYWx1ZSA9IGZpbHRlclZhbHVlLnRvTG93ZXJDYXNlKCk7XHJcblxyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLndpZGdldEluc3RhbmNlLnR5cGUgPT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuVEVYVF9GSUVMRCAmJlxyXG4gICAgICB0aGlzLndpZGdldEluc3RhbmNlLnZhbHVlTGlzdFxyXG4gICAgKSB7XHJcbiAgICAgIGNvbnN0IHJlc3VsdDogU21hcnRJdGVtPGFueT5bXSA9IGZpbHRlclZhbHVlXHJcbiAgICAgICAgPyB0aGlzLndpZGdldEluc3RhbmNlLnZhbHVlTGlzdC5maWx0ZXIoKG9wdGlvbjogU21hcnRJdGVtPGFueT4pID0+XHJcbiAgICAgICAgICAgIG9wdGlvbi5sYWJlbC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGZpbHRlclZhbHVlKVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgIDogdGhpcy53aWRnZXRJbnN0YW5jZS52YWx1ZUxpc3Q7XHJcbiAgICAgIGlmIChyZXN1bHQubGVuZ3RoID09PSAwICYmIHRoaXMud2lkZ2V0SW5zdGFuY2UudmFsdWVMaXN0Lmxlbmd0aCAhPT0gMCkge1xyXG4gICAgICAgIC8vIHRoZXJlIGNvdWxkIGJlIHZhbHVlcyBhZnRlciB0aGUgZmlsdGVyIG9wZXJhdGlvbiBidXQgd2UgZm91bmQgbm9uZTpcclxuICAgICAgICB0aGlzLndpZGdldEluc3RhbmNlLmVycm9yID0gdGhpcy53aWRnZXRJbnN0YW5jZS5maWx0ZXJFcnJvck1lc3NhZ2U7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gd2UgZWl0aGVyIGZvdW5kIHZhbHVlcywgb3IgdGhlcmUgd2VyZSBubyB2YWx1ZXMgdG8gYmVnaW4gd2l0aDpcclxuICAgICAgICB0aGlzLndpZGdldEluc3RhbmNlLmVycm9yID0gdW5kZWZpbmVkO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIFtdO1xyXG4gIH1cclxuXHJcbiAgZGF0ZUZpbHRlcihkOiBEYXRlIHwgbnVsbCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICBnZXRNYXRyaXhEaXNwbGF5VmFsdWUocXVlc3Rpb246IFZhbHVlLCBrZXk6IHN0cmluZykge1xyXG4gICAgKHRoaXMud2lkZ2V0SW5zdGFuY2UgYXMgU21hcnRNYXRyaXgpLnZhbHVlW2tleV0uZmluZCgodmFsdWU6IFZhbHVlKSA9PiB7XHJcbiAgICAgIGlmICh2YWx1ZS5jb2RlID09IHF1ZXN0aW9uLmNvZGUpIHJldHVybiBxdWVzdGlvbi5kaXNwbGF5VmFsdWU7XHJcbiAgICAgIGVsc2UgcmV0dXJuIHF1ZXN0aW9uLmNvZGU7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGhhbmRsZVllYXJNb250aFBpY2tlZCh5ZWFyTW9udGhWYWx1ZTogYW55KSB7XHJcbiAgICB0aGlzLnNldERhdGVGb3JtQ29udHJvbCh0aGlzLmZvcm0uY29udHJvbHNbdGhpcy53aWRnZXRJbnN0YW5jZS5rZXkhXSwgeWVhck1vbnRoVmFsdWUsICcwMDowMCcpO1xyXG4gIH1cclxuXHJcbiAgY29tcGFyZUl0ZW1zKG8xOiBhbnksIG8yOiBhbnkpOiBib29sZWFuIHtcclxuICAgIGZ1bmN0aW9uIGNvbnZlcnQob2JqOiBhbnkpOiBhbnkge1xyXG4gICAgICBpZiAob2JqICYmIHR5cGVvZiBvYmogPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgcmV0dXJuIG9iai5yZXBsYWNlKC9cXC52WzAtOV0rJC8sICcnKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gb2JqO1xyXG4gICAgfVxyXG4gICAgLy8gY2FsbGluZyB0aGlzLnRydW5jYXRlVXJpIGRpZG4ndCB3b3JrXHJcbiAgICAvLyBUT0RPOiB1c2Ugd2lkZ2V0LnNlbGVjdGlvbi5wYXJhbWV0ZXIgZm9yIGlnbm9yZVVyaVZlcnNpb24gLyBzdHJpY3RVcmlDb21wYXJpc29uO1xyXG5cclxuICAgIGxldCB2MSA9IGNvbnZlcnQobzEpO1xyXG4gICAgbGV0IHYyID0gY29udmVydChvMik7XHJcbiAgICByZXR1cm4gZGVlcEVxdWFsKHYxLCB2Mik7XHJcbiAgfVxyXG5cclxuICB0cnVuY2F0ZVVyaSh1cmk6IGFueSk6IGFueSB7XHJcbiAgICBpZiAodXJpICYmIHR5cGVvZiB1cmkgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgIHJldHVybiB1cmkucmVwbGFjZSgvXFwudlswLTldKyQvLCAnJyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdXJpO1xyXG4gIH1cclxuXHJcbiAgcmVtb3ZlTWF0cml4Um93KHF1ZXN0aW9uOiBhbnkpOiB2b2lkIHtcclxuICAgIGNvbnNvbGUubG9nKHF1ZXN0aW9uKTtcclxuICAgICh0aGlzLndpZGdldEluc3RhbmNlIGFzIFNtYXJ0TWF0cml4KS5idXR0b24/LmNhbGxiYWNrKHRoaXMud2lkZ2V0SW5zdGFuY2UsIHF1ZXN0aW9uKTtcclxuICB9XHJcblxyXG4gIGlzVG9vbGJhclByZXNlbnQoKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMud2lkZ2V0SW5zdGFuY2UudHlwZSA9PSBTbWFydEZvcm1XaWRnZXRUeXBlLlRFWFRfRklFTEQgfHxcclxuICAgICAgdGhpcy53aWRnZXRJbnN0YW5jZS50eXBlID09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuVEVYVF9GSUVMRF9MT09LVVBcclxuICAgICkge1xyXG4gICAgICByZXR1cm4gdGhpcy53aWRnZXRJbnN0YW5jZS50b29sYmFySWQgIT09IHVuZGVmaW5lZCAmJiB0aGlzLndpZGdldEluc3RhbmNlLnRvb2xiYXJJZCAhPT0gbnVsbDtcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIGdldENoaXBzVmFsdWUodmFsdWU6IGFueSk6IGFueSB7XHJcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgdmFsdWUgIT09IG51bGwpIHtcclxuICAgICAgaWYgKCduYW1lJyBpbiB2YWx1ZSkge1xyXG4gICAgICAgIHJldHVybiB2YWx1ZVsnbmFtZSddO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICgnZGlzcGxheVZhbHVlJyBpbiB2YWx1ZSkge1xyXG4gICAgICAgIHJldHVybiB2YWx1ZVsnZGlzcGxheVZhbHVlJ107XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB2YWx1ZTtcclxuICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cImNvbnRhaW5lclwiIFtmb3JtR3JvdXBdPVwiZm9ybVwiPlxyXG4gIDxkaXZcclxuICAgIFtuZ0NsYXNzXT1cIndpZGdldEluc3RhbmNlLmNzc0NsYXNzID8/ICcnXCJcclxuICAgIGNsYXNzPVwiY29udGFpbmVyXCJcclxuICAgICpuZ0lmPVwid2lkZ2V0SW5zdGFuY2UuaXNWaXNpYmxlID09PSB1bmRlZmluZWQgPyB0cnVlIDogd2lkZ2V0SW5zdGFuY2UuaXNWaXNpYmxlXCJcclxuICA+XHJcbiAgICA8ZGl2ICpuZ0lmPVwid2lkZ2V0SW5zdGFuY2UudHlwZSA9PT0gc21hcnRGb3JtV2lkZ2V0VHlwZS5DT05UQUlORVJcIiBbbmdDbGFzc109XCJnZXREaXJlY3Rpb24oKVwiPlxyXG4gICAgICA8c21hcnRmb3Jtd2lkZ2V0XHJcbiAgICAgICAgKm5nRm9yPVwibGV0IHdpZGdldCBvZiB3aWRnZXRJbnN0YW5jZS52YWx1ZUxpc3RcIlxyXG4gICAgICAgIFtmb3JtXT1cImZvcm1cIlxyXG4gICAgICAgIFt3aWRnZXRJbnN0YW5jZV09XCJ3aWRnZXRcIlxyXG4gICAgICAgIGNsYXNzPVwiY29udGFpbmVyLWl0ZW1cIlxyXG4gICAgICAgIFtuZ0NsYXNzXT1cIndpZGdldC5jc3NDbGFzcyA/PyAnJ1wiXHJcbiAgICAgICAgW29uQmx1cl09XCJvbkJsdXJcIlxyXG4gICAgICAgIFtvblZhbHVlQ2hhbmdlXT1cIm9uVmFsdWVDaGFuZ2VcIlxyXG4gICAgICAgIFtzb3BoaXN0aWNhdGVkVmFsdWVDaGFuZ2VdPVwic29waGlzdGljYXRlZFZhbHVlQ2hhbmdlXCJcclxuICAgICAgICBjbGFzcz1cInt7IHdpZGdldC5rZXkgfX1cIlxyXG4gICAgICAgIFtsYWJlbENvbG9yXT1cImxhYmVsQ29sb3JcIlxyXG4gICAgICA+PC9zbWFydGZvcm13aWRnZXQ+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2XHJcbiAgICAgIChjYXBzTG9jayk9XCJjYXBzT24gPSAkZXZlbnRcIlxyXG4gICAgICAqbmdJZj1cIndpZGdldEluc3RhbmNlLnR5cGUgPT09IHNtYXJ0Rm9ybVdpZGdldFR5cGUuVEVYVF9GSUVMRFwiXHJcbiAgICAgIGNsYXNzPVwid2lkZ2V0Q29udGFpbmVyXCJcclxuICAgID5cclxuICAgICAgPGRpdiBjbGFzcz1cImxhYmVsQ29udGFpbmVyXCIgKm5nSWY9XCJ3aWRnZXRJbnN0YW5jZS5zaG93TGFiZWxcIj5cclxuICAgICAgICA8aDRcclxuICAgICAgICAgIGNsYXNzPVwie3sgbGFiZWxDb2xvciB9fSBzbWFydC1mb3JtLXdpZGdldC1sYWJlbCB7eyB3aWRnZXRJbnN0YW5jZS5jc3NMYWJlbENsYXNzID8/ICcnIH19XCJcclxuICAgICAgICAgIFtuZ0NsYXNzXT1cImdldExhYmVsTmdDbGFzcygpXCJcclxuICAgICAgICAgIFtuZ1N0eWxlXT1cImdldExhYmVsU3R5bGUoKVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAge3sgZ2V0V2lkZ2V0TGFiZWwod2lkZ2V0SW5zdGFuY2UpIH19XHJcbiAgICAgICAgPC9oND5cclxuICAgICAgICA8bWF0LWhpbnQgKm5nSWY9XCJ3aWRnZXRJbnN0YW5jZT8uaGludD8ucG9zaXRpb24gPT09IFNtYXJ0V2lkZ2V0SGludFBvc2l0aW9uLkxBQkVMXCI+e3tcclxuICAgICAgICAgIHdpZGdldEluc3RhbmNlLmhpbnQ/LnRleHRcclxuICAgICAgICB9fTwvbWF0LWhpbnQ+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8bWF0LWZvcm0tZmllbGRcclxuICAgICAgICBjbGFzcz1cImlucHV0IHRleHRGaWVsZCB3aWRnZXRDb250ZW50IHt7IHdpZGdldEluc3RhbmNlLmNzc0NsYXNzID8/ICcnIH19XCJcclxuICAgICAgICBbbmdDbGFzc109XCJnZXROZ0NsYXNzKClcIlxyXG4gICAgICAgIFtuZ1N0eWxlXT1cImdldFN0eWxlKClcIlxyXG4gICAgICAgIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxtYXQtbGFiZWxcclxuICAgICAgICAgIGNsYXNzPVwibGFiZWxcIlxyXG4gICAgICAgICAgW25nQ2xhc3NdPVwid2lkZ2V0SW5zdGFuY2UuY3NzTGFiZWxDbGFzcyA/PyAnJ1wiXHJcbiAgICAgICAgICAqbmdJZj1cIiF3aWRnZXRJbnN0YW5jZS5zaG93TGFiZWxcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIHt7IGdldFdpZGdldExhYmVsKHdpZGdldEluc3RhbmNlKSB9fVxyXG4gICAgICAgIDwvbWF0LWxhYmVsPlxyXG5cclxuICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICpuZ0lmPVwiIXdpZGdldEluc3RhbmNlLnNlbGVjdGlvblwiXHJcbiAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cIndpZGdldEluc3RhbmNlLmtleVwiXHJcbiAgICAgICAgICBbaWRdPVwid2lkZ2V0SW5zdGFuY2Uua2V5XCJcclxuICAgICAgICAgIFthdHRyLmlucHV0bW9kZV09XCJcclxuICAgICAgICAgICAgd2lkZ2V0SW5zdGFuY2UuaW5wdXRNb2RlID8gd2lkZ2V0SW5zdGFuY2UuaW5wdXRNb2RlLnRvTG9jYWxlTG93ZXJDYXNlKCkgOiAndGV4dCdcclxuICAgICAgICAgIFwiXHJcbiAgICAgICAgICBbdHlwZV09XCInc3RyaW5nJ1wiXHJcbiAgICAgICAgICBbdmFsdWVdPVwid2lkZ2V0SW5zdGFuY2UudmFsdWVcIlxyXG4gICAgICAgICAgW3JlYWRvbmx5XT1cIndpZGdldEluc3RhbmNlLmlzUmVhZG9ubHlcIlxyXG4gICAgICAgICAgcGxhY2Vob2xkZXI9XCJ7eyB3aWRnZXRJbnN0YW5jZS5wbGFjZWhvbGRlciB9fVwiXHJcbiAgICAgICAgICBtYXRJbnB1dFxyXG4gICAgICAgICAgKGJsdXIpPVwib25CbHVyPy5uZXh0KCRldmVudClcIlxyXG4gICAgICAgICAgKGlucHV0KT1cIm9uVmFsdWVDaGFuZ2U/Lm5leHQoJGV2ZW50KVwiXHJcbiAgICAgICAgICB0eXBlPVwie3sgd2lkZ2V0SW5zdGFuY2UuaXNQYXNzd29yZCA/IChoaWRlUGFzc3dvcmQgPyAncGFzc3dvcmQnIDogJ3RleHQnKSA6ICcnIH19XCJcclxuICAgICAgICAgIFttYXNrXT1cIndpZGdldEluc3RhbmNlLm1hc2sgPz8gJydcIlxyXG4gICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwib25LZXlkb3duKClcIlxyXG4gICAgICAgICAgbWF4bGVuZ3RoPVwie3sgd2lkZ2V0SW5zdGFuY2UubWF4TGVuZ3RoIH19XCJcclxuICAgICAgICAvPlxyXG4gICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgKm5nSWY9XCJ3aWRnZXRJbnN0YW5jZS5zZWxlY3Rpb25cIlxyXG4gICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJ3aWRnZXRJbnN0YW5jZS5rZXlcIlxyXG4gICAgICAgICAgW2lkXT1cIndpZGdldEluc3RhbmNlLmtleVwiXHJcbiAgICAgICAgICBbdHlwZV09XCInc3RyaW5nJ1wiXHJcbiAgICAgICAgICBbdmFsdWVdPVwid2lkZ2V0SW5zdGFuY2UudmFsdWVcIlxyXG4gICAgICAgICAgW3JlYWRvbmx5XT1cIndpZGdldEluc3RhbmNlLmlzUmVhZG9ubHlcIlxyXG4gICAgICAgICAgcGxhY2Vob2xkZXI9XCJ7eyB3aWRnZXRJbnN0YW5jZS5wbGFjZWhvbGRlciB9fVwiXHJcbiAgICAgICAgICBtYXRJbnB1dFxyXG4gICAgICAgICAgKGJsdXIpPVwib25CbHVyPy5uZXh0KCRldmVudClcIlxyXG4gICAgICAgICAgKGlucHV0KT1cIm9uVmFsdWVDaGFuZ2U/Lm5leHQoJGV2ZW50KVwiXHJcbiAgICAgICAgICB0eXBlPVwie3sgd2lkZ2V0SW5zdGFuY2UuaXNQYXNzd29yZCA/ICdwYXNzd29yZCcgOiAnJyB9fVwiXHJcbiAgICAgICAgICBbbWF0QXV0b2NvbXBsZXRlXT1cInRleHRGaWVsZEF1dG9cIlxyXG4gICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwib25LZXlkb3duKClcIlxyXG4gICAgICAgIC8+XHJcbiAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgKm5nSWY9XCJ3aWRnZXRJbnN0YW5jZS5pc1Bhc3N3b3JkXCJcclxuICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxyXG4gICAgICAgICAgbWF0U3VmZml4XHJcbiAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlUGFzc3dvcmRWaXNpYmlsaXR5KCRldmVudClcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxtYXQtaWNvbj57eyBoaWRlUGFzc3dvcmQgPyAndmlzaWJpbGl0eV9vZmYnIDogJ3Zpc2liaWxpdHknIH19PC9tYXQtaWNvbj5cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8bWF0LWF1dG9jb21wbGV0ZSAjdGV4dEZpZWxkQXV0bz1cIm1hdEF1dG9jb21wbGV0ZVwiPlxyXG4gICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBmaWx0ZXJlZE9wdGlvbnMgfCBhc3luY1wiIFt2YWx1ZV09XCJvcHRpb24ubGFiZWxcIj5cclxuICAgICAgICAgICAgPHNwYW4gW2lubmVySFRNTF09XCJvcHRpb24ubGFiZWwgfCBoaWdobGlnaHQgOiB0b0hpZ2hsaWdodFwiPjwvc3Bhbj5cclxuICAgICAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgICAgICA8L21hdC1hdXRvY29tcGxldGU+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXQtZXJyb3JcIiAqbmdJZj1cImNhcHNPbiAmJiB3aWRnZXRJbnN0YW5jZS5pc1Bhc3N3b3JkXCI+XHJcbiAgICAgICAgICB7eyB3aWRnZXRJbnN0YW5jZS5jYXBzTG9ja1dhcm5pbmcgfX1cclxuICAgICAgICA8L3NwYW4+XHJcblxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwibWF0LWVycm9yXCI+XHJcbiAgICAgICAgICB7eyB3aWRnZXRJbnN0YW5jZS5lcnJvciB9fVxyXG4gICAgICAgIDwvc3Bhbj5cclxuXHJcbiAgICAgICAgPHNwYW4gbWF0UHJlZml4PlxyXG4gICAgICAgICAgPHNtYXJ0LWljb25cclxuICAgICAgICAgICAgKm5nSWY9XCJjYXBzT24gJiYgd2lkZ2V0SW5zdGFuY2UuaXNQYXNzd29yZFwiXHJcbiAgICAgICAgICAgIFtpY29uXT1cIndpZGdldEluc3RhbmNlLmNhcHNMb2NrV2FybmluZ0ljb24gPz8gJ2tleWJvYXJkX2NhcHNsb2NrJ1wiXHJcbiAgICAgICAgICAgIGNvbG9yPVwid2FyblwiXHJcbiAgICAgICAgICA+PC9zbWFydC1pY29uPlxyXG4gICAgICAgICAgPHNtYXJ0LWljb25cclxuICAgICAgICAgICAgKm5nSWY9XCJ3aWRnZXRJbnN0YW5jZS5pY29uICYmIHdpZGdldEluc3RhbmNlLmljb25Qb3NpdGlvbiA9PT0gJ1BSRSdcIlxyXG4gICAgICAgICAgICBbaWNvbl09XCJ3aWRnZXRJbnN0YW5jZS5pY29uXCJcclxuICAgICAgICAgICAgW2NvbG9yXT1cIndpZGdldEluc3RhbmNlLmljb25Db2xvciA/PyAncHJpbWFyeSdcIlxyXG4gICAgICAgICAgPjwvc21hcnQtaWNvbj5cclxuICAgICAgICAgIHt7IHdpZGdldEluc3RhbmNlLnByZWZpeCB9fVxyXG4gICAgICAgIDwvc3Bhbj5cclxuICAgICAgICA8c3BhbiBtYXRTdWZmaXg+XHJcbiAgICAgICAgICB7eyB3aWRnZXRJbnN0YW5jZS5zdWZmaXggfX1cclxuICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgPHNtYXJ0LWljb25cclxuICAgICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICAgIHdpZGdldEluc3RhbmNlLmljb24gJiZcclxuICAgICAgICAgICAgKCF3aWRnZXRJbnN0YW5jZS5pY29uUG9zaXRpb24gfHwgd2lkZ2V0SW5zdGFuY2UuaWNvblBvc2l0aW9uID09PSAnUE9TVCcpXHJcbiAgICAgICAgICBcIlxyXG4gICAgICAgICAgW2ljb25dPVwid2lkZ2V0SW5zdGFuY2UuaWNvblwiXHJcbiAgICAgICAgICBbY29sb3JdPVwid2lkZ2V0SW5zdGFuY2UuaWNvbkNvbG9yID8/ICdwcmltYXJ5J1wiXHJcbiAgICAgICAgICBtYXRTdWZmaXhcclxuICAgICAgICA+PC9zbWFydC1pY29uPlxyXG4gICAgICAgIDxzbWFydC1pY29uXHJcbiAgICAgICAgICAqbmdJZj1cIndpZGdldEluc3RhbmNlLmVycm9yICYmIHdpZGdldEluc3RhbmNlLmVycm9ySWNvblwiXHJcbiAgICAgICAgICBbaWNvbl09XCJ3aWRnZXRJbnN0YW5jZS5lcnJvckljb25cIlxyXG4gICAgICAgICAgW2NvbG9yXT1cIndpZGdldEluc3RhbmNlLmVycm9ySWNvbkNvbG9yID8/ICd3YXJuJ1wiXHJcbiAgICAgICAgICBtYXRTdWZmaXhcclxuICAgICAgICA+PC9zbWFydC1pY29uPlxyXG5cclxuICAgICAgICA8c21hcnQtdWktYWN0aW9uLXRvb2xiYXJcclxuICAgICAgICAgICN0b29sYmFyXHJcbiAgICAgICAgICAqbmdJZj1cImlzVG9vbGJhclByZXNlbnQoKVwiXHJcbiAgICAgICAgICBtYXRTdWZmaXhcclxuICAgICAgICAgIFtpZF09XCJ3aWRnZXRJbnN0YW5jZS50b29sYmFySWRcIlxyXG4gICAgICAgID48L3NtYXJ0LXVpLWFjdGlvbi10b29sYmFyPlxyXG4gICAgICAgIDxidXR0b25cclxuICAgICAgICAgICpuZ0lmPVwid2lkZ2V0SW5zdGFuY2UudGV4dEZpZWxkQnV0dG9uXCJcclxuICAgICAgICAgIG1hdFN1ZmZpeFxyXG4gICAgICAgICAgbWF0LWJ1dHRvblxyXG4gICAgICAgICAgY29sb3I9XCJ7eyB3aWRnZXRJbnN0YW5jZS50ZXh0RmllbGRCdXR0b24uY29sb3IgfX1cIlxyXG4gICAgICAgICAgKGNsaWNrKT1cIndpZGdldEluc3RhbmNlLnRleHRGaWVsZEJ1dHRvbi5jYWxsYmFjayh3aWRnZXRJbnN0YW5jZSlcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxzbWFydC1pY29uXHJcbiAgICAgICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgd2lkZ2V0SW5zdGFuY2UudGV4dEZpZWxkQnV0dG9uLmljb25Qb3NpdGlvbiA9PT1cclxuICAgICAgICAgICAgICAgIHNtYXJ0Rm9ybVRleHRGaWVsZEJ1dHRvbkljb25Qb3NpdGlvbigpLlBSRSAmJiB3aWRnZXRJbnN0YW5jZS50ZXh0RmllbGRCdXR0b24uaWNvblxyXG4gICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICBbaWNvbl09XCJ3aWRnZXRJbnN0YW5jZS50ZXh0RmllbGRCdXR0b24uaWNvblwiXHJcbiAgICAgICAgICAgIFtjb2xvcl09XCJ3aWRnZXRJbnN0YW5jZS50ZXh0RmllbGRCdXR0b24uaWNvbkNvbG9yXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgIDwvc21hcnQtaWNvbj5cclxuICAgICAgICAgIHt7IHdpZGdldEluc3RhbmNlLnRleHRGaWVsZEJ1dHRvbi5sYWJlbCB9fVxyXG4gICAgICAgICAgPHNtYXJ0LWljb25cclxuICAgICAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICAgICB3aWRnZXRJbnN0YW5jZS50ZXh0RmllbGRCdXR0b24uaWNvblBvc2l0aW9uID09PVxyXG4gICAgICAgICAgICAgICAgc21hcnRGb3JtVGV4dEZpZWxkQnV0dG9uSWNvblBvc2l0aW9uKCkuUE9TVCAmJiB3aWRnZXRJbnN0YW5jZS50ZXh0RmllbGRCdXR0b24uaWNvblxyXG4gICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICBbaWNvbl09XCJ3aWRnZXRJbnN0YW5jZS50ZXh0RmllbGRCdXR0b24uaWNvblwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICA8L3NtYXJ0LWljb24+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPG1hdC1oaW50XHJcbiAgICAgICAgICAqbmdJZj1cIndpZGdldEluc3RhbmNlLnNob3dDaGFyYWN0ZXJMaW1pdFN1ZmZpeCAmJiB3aWRnZXRJbnN0YW5jZS5tYXhMZW5ndGhcIlxyXG4gICAgICAgICAgbWF0U3VmZml4XHJcbiAgICAgICAgICBhbGlnbj1cImVuZFwiXHJcbiAgICAgICAgICA+e3sgd2lkZ2V0SW5zdGFuY2UubWF4TGVuZ3RoIC0gZm9ybS5jb250cm9sc1t3aWRnZXRJbnN0YW5jZS5rZXldLnZhbHVlLmxlbmd0aCB9fTwvbWF0LWhpbnRcclxuICAgICAgICA+XHJcbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgIDxtYXQtaGludFxyXG4gICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICAhd2lkZ2V0SW5zdGFuY2U/LmhpbnQgfHwgd2lkZ2V0SW5zdGFuY2U/LmhpbnQ/LnBvc2l0aW9uID09PSBTbWFydFdpZGdldEhpbnRQb3NpdGlvbi5JTlBVVFxyXG4gICAgICAgIFwiXHJcbiAgICAgICAgPnt7IHdpZGdldEluc3RhbmNlLmhpbnQ/LnRleHQgfX08L21hdC1oaW50XHJcbiAgICAgID5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXZcclxuICAgICAgKm5nSWY9XCJ3aWRnZXRJbnN0YW5jZS50eXBlID09PSBzbWFydEZvcm1XaWRnZXRUeXBlLlRFWFRfRklFTERfTlVNQkVSXCJcclxuICAgICAgY2xhc3M9XCJ3aWRnZXRDb250YWluZXJcIlxyXG4gICAgPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwibGFiZWxDb250YWluZXJcIiAqbmdJZj1cIndpZGdldEluc3RhbmNlLnNob3dMYWJlbFwiPlxyXG4gICAgICAgIDxoNFxyXG4gICAgICAgICAgY2xhc3M9XCJ7eyBsYWJlbENvbG9yIH19IHNtYXJ0LWZvcm0td2lkZ2V0LWxhYmVsIHt7IHdpZGdldEluc3RhbmNlLmNzc0xhYmVsQ2xhc3MgPz8gJycgfX1cIlxyXG4gICAgICAgICAgW25nQ2xhc3NdPVwiZ2V0TGFiZWxOZ0NsYXNzKClcIlxyXG4gICAgICAgICAgW25nU3R5bGVdPVwiZ2V0TGFiZWxTdHlsZSgpXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICB7eyBnZXRXaWRnZXRMYWJlbCh3aWRnZXRJbnN0YW5jZSkgfX1cclxuICAgICAgICA8L2g0PlxyXG4gICAgICAgIDxtYXQtaGludCAqbmdJZj1cIndpZGdldEluc3RhbmNlPy5oaW50Py5wb3NpdGlvbiA9PT0gU21hcnRXaWRnZXRIaW50UG9zaXRpb24uTEFCRUxcIj57e1xyXG4gICAgICAgICAgd2lkZ2V0SW5zdGFuY2UuaGludD8udGV4dFxyXG4gICAgICAgIH19PC9tYXQtaGludD5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxtYXQtZm9ybS1maWVsZFxyXG4gICAgICAgIGNsYXNzPVwiaW5wdXQgdGV4dEZpZWxkIHdpZGdldENvbnRlbnQge3sgd2lkZ2V0SW5zdGFuY2UuY3NzQ2xhc3MgPz8gJycgfX1cIlxyXG4gICAgICAgIFtuZ0NsYXNzXT1cImdldE5nQ2xhc3MoKVwiXHJcbiAgICAgICAgW25nU3R5bGVdPVwiZ2V0U3R5bGUoKVwiXHJcbiAgICAgICAgYXBwZWFyYW5jZT1cIm91dGxpbmVcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPG1hdC1sYWJlbFxyXG4gICAgICAgICAgY2xhc3M9XCJsYWJlbFwiXHJcbiAgICAgICAgICBbbmdDbGFzc109XCJ3aWRnZXRJbnN0YW5jZS5jc3NMYWJlbENsYXNzID8/ICcnXCJcclxuICAgICAgICAgICpuZ0lmPVwiIXdpZGdldEluc3RhbmNlLnNob3dMYWJlbFwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAge3sgZ2V0V2lkZ2V0TGFiZWwod2lkZ2V0SW5zdGFuY2UpIH19XHJcbiAgICAgICAgPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cIndpZGdldEluc3RhbmNlLmtleVwiXHJcbiAgICAgICAgICBbaWRdPVwid2lkZ2V0SW5zdGFuY2Uua2V5XCJcclxuICAgICAgICAgIFt2YWx1ZV09XCJ3aWRnZXRJbnN0YW5jZS52YWx1ZVwiXHJcbiAgICAgICAgICBbcmVhZG9ubHldPVwid2lkZ2V0SW5zdGFuY2UuaXNSZWFkb25seVwiXHJcbiAgICAgICAgICBbdHlwZV09XCInbnVtYmVyJ1wiXHJcbiAgICAgICAgICBwbGFjZWhvbGRlcj1cInt7IHdpZGdldEluc3RhbmNlLnBsYWNlaG9sZGVyIH19XCJcclxuICAgICAgICAgIFttaW5dPVwid2lkZ2V0SW5zdGFuY2UubWluVmFsdWVzID8/IG51bGxcIlxyXG4gICAgICAgICAgW21heF09XCJ3aWRnZXRJbnN0YW5jZS5tYXhWYWx1ZXMgPz8gbnVsbFwiXHJcbiAgICAgICAgICBtYXRJbnB1dFxyXG4gICAgICAgICAgKGJsdXIpPVwib25CbHVyPy5uZXh0KCRldmVudClcIlxyXG4gICAgICAgICAgKGlucHV0KT1cIm9uVmFsdWVDaGFuZ2U/Lm5leHQoJGV2ZW50KVwiXHJcbiAgICAgICAgLz5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdC1lcnJvclwiPlxyXG4gICAgICAgICAge3sgd2lkZ2V0SW5zdGFuY2UuZXJyb3IgfX1cclxuICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgPHNwYW4gbWF0UHJlZml4PlxyXG4gICAgICAgICAge3sgd2lkZ2V0SW5zdGFuY2UucHJlZml4IH19XHJcbiAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgIDxzcGFuIG1hdFN1ZmZpeD5cclxuICAgICAgICAgIHt7IHdpZGdldEluc3RhbmNlLnN1ZmZpeCB9fVxyXG4gICAgICAgIDwvc3Bhbj5cclxuICAgICAgICA8c21hcnQtaWNvbiAqbmdJZj1cIndpZGdldEluc3RhbmNlLmljb25cIiBbaWNvbl09XCJ3aWRnZXRJbnN0YW5jZS5pY29uXCIgbWF0U3VmZml4PlxyXG4gICAgICAgIDwvc21hcnQtaWNvbj5cclxuICAgICAgICA8c21hcnQtaWNvblxyXG4gICAgICAgICAgKm5nSWY9XCJ3aWRnZXRJbnN0YW5jZS5lcnJvciAmJiB3aWRnZXRJbnN0YW5jZS5lcnJvckljb25cIlxyXG4gICAgICAgICAgW2ljb25dPVwid2lkZ2V0SW5zdGFuY2UuZXJyb3JJY29uXCJcclxuICAgICAgICAgIFtjb2xvcl09XCJ3aWRnZXRJbnN0YW5jZS5lcnJvckljb25Db2xvciA/PyAnd2FybidcIlxyXG4gICAgICAgICAgbWF0U3VmZml4XHJcbiAgICAgICAgPjwvc21hcnQtaWNvbj5cclxuICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAqbmdJZj1cIndpZGdldEluc3RhbmNlLnRleHRGaWVsZEJ1dHRvblwiXHJcbiAgICAgICAgICBtYXRTdWZmaXhcclxuICAgICAgICAgIG1hdC1idXR0b25cclxuICAgICAgICAgIGNvbG9yPVwie3sgd2lkZ2V0SW5zdGFuY2UudGV4dEZpZWxkQnV0dG9uLmNvbG9yIH19XCJcclxuICAgICAgICAgIChjbGljayk9XCJ3aWRnZXRJbnN0YW5jZS50ZXh0RmllbGRCdXR0b24uY2FsbGJhY2sod2lkZ2V0SW5zdGFuY2UpXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8c21hcnQtaWNvblxyXG4gICAgICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgIHdpZGdldEluc3RhbmNlLnRleHRGaWVsZEJ1dHRvbi5pY29uUG9zaXRpb24gPT09XHJcbiAgICAgICAgICAgICAgICBzbWFydEZvcm1UZXh0RmllbGRCdXR0b25JY29uUG9zaXRpb24oKS5QUkUgJiYgd2lkZ2V0SW5zdGFuY2UudGV4dEZpZWxkQnV0dG9uLmljb25cclxuICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgW2ljb25dPVwid2lkZ2V0SW5zdGFuY2UudGV4dEZpZWxkQnV0dG9uLmljb25cIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgPC9zbWFydC1pY29uPlxyXG4gICAgICAgICAge3sgd2lkZ2V0SW5zdGFuY2UudGV4dEZpZWxkQnV0dG9uLmxhYmVsIH19XHJcbiAgICAgICAgICA8c21hcnQtaWNvblxyXG4gICAgICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgIHdpZGdldEluc3RhbmNlLnRleHRGaWVsZEJ1dHRvbi5pY29uUG9zaXRpb24gPT09XHJcbiAgICAgICAgICAgICAgICBzbWFydEZvcm1UZXh0RmllbGRCdXR0b25JY29uUG9zaXRpb24oKS5QT1NUICYmIHdpZGdldEluc3RhbmNlLnRleHRGaWVsZEJ1dHRvbi5pY29uXHJcbiAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgIFtpY29uXT1cIndpZGdldEluc3RhbmNlLnRleHRGaWVsZEJ1dHRvbi5pY29uXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgIDwvc21hcnQtaWNvbj5cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXZcclxuICAgICAgKm5nSWY9XCJ3aWRnZXRJbnN0YW5jZS50eXBlID09PSBzbWFydEZvcm1XaWRnZXRUeXBlLlRFWFRfRklFTERfQ0hJUFNcIlxyXG4gICAgICBjbGFzcz1cIndpZGdldENvbnRhaW5lclwiXHJcbiAgICA+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJsYWJlbENvbnRhaW5lclwiICpuZ0lmPVwid2lkZ2V0SW5zdGFuY2Uuc2hvd0xhYmVsXCI+XHJcbiAgICAgICAgPGg0XHJcbiAgICAgICAgICBjbGFzcz1cInt7IGxhYmVsQ29sb3IgfX0gc21hcnQtZm9ybS13aWRnZXQtbGFiZWwge3sgd2lkZ2V0SW5zdGFuY2UuY3NzTGFiZWxDbGFzcyA/PyAnJyB9fVwiXHJcbiAgICAgICAgICBbbmdDbGFzc109XCJnZXRMYWJlbE5nQ2xhc3MoKVwiXHJcbiAgICAgICAgICBbbmdTdHlsZV09XCJnZXRMYWJlbFN0eWxlKClcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIHt7IGdldFdpZGdldExhYmVsKHdpZGdldEluc3RhbmNlKSB9fVxyXG4gICAgICAgIDwvaDQ+XHJcbiAgICAgICAgPG1hdC1oaW50ICpuZ0lmPVwid2lkZ2V0SW5zdGFuY2U/LmhpbnQ/LnBvc2l0aW9uID09PSBTbWFydFdpZGdldEhpbnRQb3NpdGlvbi5MQUJFTFwiPnt7XHJcbiAgICAgICAgICB3aWRnZXRJbnN0YW5jZS5oaW50Py50ZXh0XHJcbiAgICAgICAgfX08L21hdC1oaW50PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPG1hdC1mb3JtLWZpZWxkXHJcbiAgICAgICAgY2xhc3M9XCJpbnB1dCB3aWRnZXRDb250ZW50IHt7IHdpZGdldEluc3RhbmNlLmNzc0NsYXNzID8/ICcnIH19XCJcclxuICAgICAgICBbbmdDbGFzc109XCJnZXROZ0NsYXNzKClcIlxyXG4gICAgICAgIFtuZ1N0eWxlXT1cImdldFN0eWxlKClcIlxyXG4gICAgICAgIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxtYXQtbGFiZWxcclxuICAgICAgICAgIGNsYXNzPVwibGFiZWxcIlxyXG4gICAgICAgICAgW25nQ2xhc3NdPVwid2lkZ2V0SW5zdGFuY2UuY3NzTGFiZWxDbGFzcyA/PyAnJ1wiXHJcbiAgICAgICAgICAqbmdJZj1cIiF3aWRnZXRJbnN0YW5jZS5zaG93TGFiZWxcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIHt7IGdldFdpZGdldExhYmVsKHdpZGdldEluc3RhbmNlKSB9fVxyXG4gICAgICAgIDwvbWF0LWxhYmVsPlxyXG4gICAgICAgIDxtYXQtY2hpcC1saXN0ICNjaGlwTGlzdCBhcmlhLWxhYmVsPVwie3sgd2lkZ2V0SW5zdGFuY2UubGFiZWwgfX1cIj5cclxuICAgICAgICAgIDxtYXQtY2hpcFxyXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwid2lkZ2V0SW5zdGFuY2UuaXNEaXNhYmxlZFwiXHJcbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCB2YWx1ZSBvZiB3aWRnZXRJbnN0YW5jZS52YWx1ZVwiXHJcbiAgICAgICAgICAgIChyZW1vdmVkKT1cInJlbW92ZSh2YWx1ZSlcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICB7eyB2YWx1ZSB9fVxyXG4gICAgICAgICAgICA8YnV0dG9uIG1hdENoaXBSZW1vdmU+XHJcbiAgICAgICAgICAgICAgPG1hdC1pY29uPmNhbmNlbDwvbWF0LWljb24+XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPC9tYXQtY2hpcD5cclxuICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAjY2hpcElucHV0XHJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwie3sgd2lkZ2V0SW5zdGFuY2UucGxhY2Vob2xkZXIgfX1cIlxyXG4gICAgICAgICAgICBbbWF0Q2hpcElucHV0Rm9yXT1cImNoaXBMaXN0XCJcclxuICAgICAgICAgICAgW21hdENoaXBJbnB1dFNlcGFyYXRvcktleUNvZGVzXT1cInNlcGFyYXRvcktleXNDb2Rlc1wiXHJcbiAgICAgICAgICAgIFttYXRDaGlwSW5wdXRBZGRPbkJsdXJdPVwiYWRkT25CbHVyXCJcclxuICAgICAgICAgICAgW3JlYWRvbmx5XT1cIndpZGdldEluc3RhbmNlLmlzUmVhZG9ubHlcIlxyXG4gICAgICAgICAgICBbbWF0QXV0b2NvbXBsZXRlXT1cImNoaXBBdXRvXCJcclxuICAgICAgICAgICAgKG1hdENoaXBJbnB1dFRva2VuRW5kKT1cImFkZCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgKGJsdXIpPVwib25CbHVyPy5uZXh0KCRldmVudClcIlxyXG4gICAgICAgICAgICAoaW5wdXQpPVwib25WYWx1ZUNoYW5nZT8ubmV4dCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cIndpZGdldEluc3RhbmNlLmlzRGlzYWJsZWRcIlxyXG4gICAgICAgICAgLz5cclxuICAgICAgICAgIDxtYXQtYXV0b2NvbXBsZXRlXHJcbiAgICAgICAgICAgICNjaGlwQXV0bz1cIm1hdEF1dG9jb21wbGV0ZVwiXHJcbiAgICAgICAgICAgIChvcHRpb25TZWxlY3RlZCk9XCJzZWxlY3RlZCgkZXZlbnQsIHdpZGdldEluc3RhbmNlKVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxtYXQtb3B0aW9uXHJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIndpZGdldEluc3RhbmNlLmlzRGlzYWJsZWRcIlxyXG4gICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIHdpZGdldEluc3RhbmNlLnZhbHVlTGlzdFwiXHJcbiAgICAgICAgICAgICAgW3ZhbHVlXT1cIml0ZW0udmFsdWVcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAge3sgaXRlbS5sYWJlbCB9fVxyXG4gICAgICAgICAgICA8L21hdC1vcHRpb24+XHJcbiAgICAgICAgICA8L21hdC1hdXRvY29tcGxldGU+XHJcbiAgICAgICAgPC9tYXQtY2hpcC1saXN0PlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwibWF0LWVycm9yXCI+XHJcbiAgICAgICAgICB7eyB3aWRnZXRJbnN0YW5jZS5lcnJvciB9fVxyXG4gICAgICAgIDwvc3Bhbj5cclxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXZcclxuICAgICAgKm5nSWY9XCJ3aWRnZXRJbnN0YW5jZS50eXBlID09PSBzbWFydEZvcm1XaWRnZXRUeXBlLlRFWFRfRklFTERfTE9PS1VQXCJcclxuICAgICAgY2xhc3M9XCJ3aWRnZXRDb250YWluZXJcIlxyXG4gICAgPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwibGFiZWxDb250YWluZXJcIiAqbmdJZj1cIndpZGdldEluc3RhbmNlLnNob3dMYWJlbFwiPlxyXG4gICAgICAgIDxoNFxyXG4gICAgICAgICAgY2xhc3M9XCJ7eyBsYWJlbENvbG9yIH19IHNtYXJ0LWZvcm0td2lkZ2V0LWxhYmVsIHt7IHdpZGdldEluc3RhbmNlLmNzc0xhYmVsQ2xhc3MgPz8gJycgfX1cIlxyXG4gICAgICAgICAgW25nQ2xhc3NdPVwiZ2V0TGFiZWxOZ0NsYXNzKClcIlxyXG4gICAgICAgICAgW25nU3R5bGVdPVwiZ2V0TGFiZWxTdHlsZSgpXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICB7eyBnZXRXaWRnZXRMYWJlbCh3aWRnZXRJbnN0YW5jZSkgfX1cclxuICAgICAgICA8L2g0PlxyXG4gICAgICAgIDxtYXQtaGludCAqbmdJZj1cIndpZGdldEluc3RhbmNlPy5oaW50Py5wb3NpdGlvbiA9PT0gU21hcnRXaWRnZXRIaW50UG9zaXRpb24uTEFCRUxcIj57e1xyXG4gICAgICAgICAgd2lkZ2V0SW5zdGFuY2UuaGludD8udGV4dFxyXG4gICAgICAgIH19PC9tYXQtaGludD5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxtYXQtZm9ybS1maWVsZFxyXG4gICAgICAgIGNsYXNzPVwiaW5wdXQgd2lkZ2V0Q29udGVudCB7eyB3aWRnZXRJbnN0YW5jZS5jc3NDbGFzcyA/PyAnJyB9fVwiXHJcbiAgICAgICAgW25nQ2xhc3NdPVwiZ2V0TmdDbGFzcygpXCJcclxuICAgICAgICBbbmdTdHlsZV09XCJnZXRTdHlsZSgpXCJcclxuICAgICAgICBhcHBlYXJhbmNlPVwib3V0bGluZVwiXHJcbiAgICAgID5cclxuICAgICAgICA8bWF0LWxhYmVsXHJcbiAgICAgICAgICBjbGFzcz1cImxhYmVsXCJcclxuICAgICAgICAgIFtuZ0NsYXNzXT1cIndpZGdldEluc3RhbmNlLmNzc0xhYmVsQ2xhc3MgPz8gJydcIlxyXG4gICAgICAgICAgKm5nSWY9XCIhd2lkZ2V0SW5zdGFuY2Uuc2hvd0xhYmVsXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICB7eyBnZXRXaWRnZXRMYWJlbCh3aWRnZXRJbnN0YW5jZSkgfX1cclxuICAgICAgICA8L21hdC1sYWJlbD5cclxuICAgICAgICA8bWF0LWNoaXAtbGlzdCAjY2hpcExpc3RMb29rdXAgYXJpYS1sYWJlbD1cInt7IHdpZGdldEluc3RhbmNlLmxhYmVsIH19XCI+XHJcbiAgICAgICAgICA8bWF0LWNoaXBcclxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cIndpZGdldEluc3RhbmNlLmlzRGlzYWJsZWRcIlxyXG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgdmFsdWUgb2Ygd2lkZ2V0SW5zdGFuY2UudmFsdWVcIlxyXG4gICAgICAgICAgICAocmVtb3ZlZCk9XCJyZW1vdmUodmFsdWUpXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAge3sgZ2V0Q2hpcHNWYWx1ZSh2YWx1ZSkgfX1cclxuICAgICAgICAgICAgPGJ1dHRvbiBtYXRDaGlwUmVtb3ZlPlxyXG4gICAgICAgICAgICAgIDxtYXQtaWNvbj5jYW5jZWw8L21hdC1pY29uPlxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDwvbWF0LWNoaXA+XHJcbiAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJ7eyB3aWRnZXRJbnN0YW5jZS5wbGFjZWhvbGRlciB9fVwiXHJcbiAgICAgICAgICAgIFttYXRDaGlwSW5wdXRGb3JdPVwiY2hpcExpc3RMb29rdXBcIlxyXG4gICAgICAgICAgICBbbWF0Q2hpcElucHV0U2VwYXJhdG9yS2V5Q29kZXNdPVwiZW1wdHlTZXBhcmF0b3JLZXlzQ29kZXNcIlxyXG4gICAgICAgICAgICBbbWF0Q2hpcElucHV0QWRkT25CbHVyXT1cImZhbHNlXCJcclxuICAgICAgICAgICAgW3JlYWRvbmx5XT1cInRydWVcIlxyXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwid2lkZ2V0SW5zdGFuY2UuaXNEaXNhYmxlZFwiXHJcbiAgICAgICAgICAvPlxyXG4gICAgICAgIDwvbWF0LWNoaXAtbGlzdD5cclxuICAgICAgICA8c21hcnQtdWktYWN0aW9uLXRvb2xiYXJcclxuICAgICAgICAgICN0b29sYmFyXHJcbiAgICAgICAgICAqbmdJZj1cImlzVG9vbGJhclByZXNlbnQoKVwiXHJcbiAgICAgICAgICBtYXRTdWZmaXhcclxuICAgICAgICAgIFtpZF09XCJ3aWRnZXRJbnN0YW5jZS50b29sYmFySWRcIlxyXG4gICAgICAgID48L3NtYXJ0LXVpLWFjdGlvbi10b29sYmFyPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwibWF0LWVycm9yXCI+XHJcbiAgICAgICAgICB7eyB3aWRnZXRJbnN0YW5jZS5lcnJvciB9fVxyXG4gICAgICAgIDwvc3Bhbj5cclxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgKm5nSWY9XCJ3aWRnZXRJbnN0YW5jZS50eXBlID09PSBzbWFydEZvcm1XaWRnZXRUeXBlLlRFWFRfQk9YXCIgY2xhc3M9XCJ3aWRnZXRDb250YWluZXJcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImxhYmVsQ29udGFpbmVyXCIgKm5nSWY9XCJ3aWRnZXRJbnN0YW5jZS5zaG93TGFiZWxcIj5cclxuICAgICAgICA8aDRcclxuICAgICAgICAgIGNsYXNzPVwie3sgbGFiZWxDb2xvciB9fSBzbWFydC1mb3JtLXdpZGdldC1sYWJlbCB7eyB3aWRnZXRJbnN0YW5jZS5jc3NMYWJlbENsYXNzID8/ICcnIH19XCJcclxuICAgICAgICAgIFtuZ0NsYXNzXT1cImdldExhYmVsTmdDbGFzcygpXCJcclxuICAgICAgICAgIFtuZ1N0eWxlXT1cImdldExhYmVsU3R5bGUoKVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAge3sgZ2V0V2lkZ2V0TGFiZWwod2lkZ2V0SW5zdGFuY2UpIH19XHJcbiAgICAgICAgPC9oND5cclxuICAgICAgICA8bWF0LWhpbnQgKm5nSWY9XCJ3aWRnZXRJbnN0YW5jZT8uaGludD8ucG9zaXRpb24gPT09IFNtYXJ0V2lkZ2V0SGludFBvc2l0aW9uLkxBQkVMXCI+e3tcclxuICAgICAgICAgIHdpZGdldEluc3RhbmNlLmhpbnQ/LnRleHRcclxuICAgICAgICB9fTwvbWF0LWhpbnQ+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8bWF0LWZvcm0tZmllbGRcclxuICAgICAgICBjbGFzcz1cImlucHV0IHdpZGdldENvbnRlbnQge3sgd2lkZ2V0SW5zdGFuY2UuY3NzQ2xhc3MgPz8gJycgfX1cIlxyXG4gICAgICAgIFtuZ0NsYXNzXT1cImdldE5nQ2xhc3MoKVwiXHJcbiAgICAgICAgW25nU3R5bGVdPVwiZ2V0U3R5bGUoKVwiXHJcbiAgICAgICAgYXBwZWFyYW5jZT1cIm91dGxpbmVcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPG1hdC1sYWJlbFxyXG4gICAgICAgICAgY2xhc3M9XCJsYWJlbFwiXHJcbiAgICAgICAgICBbbmdDbGFzc109XCJ3aWRnZXRJbnN0YW5jZS5jc3NMYWJlbENsYXNzID8/ICcnXCJcclxuICAgICAgICAgICpuZ0lmPVwiIXdpZGdldEluc3RhbmNlLnNob3dMYWJlbFwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAge3sgZ2V0V2lkZ2V0TGFiZWwod2lkZ2V0SW5zdGFuY2UpIH19XHJcbiAgICAgICAgPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgPHRleHRhcmVhXHJcbiAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cIndpZGdldEluc3RhbmNlLmtleVwiXHJcbiAgICAgICAgICBbaWRdPVwid2lkZ2V0SW5zdGFuY2Uua2V5XCJcclxuICAgICAgICAgIFt0eXBlXT1cIidzdHJpbmcnXCJcclxuICAgICAgICAgIFt2YWx1ZV09XCJ3aWRnZXRJbnN0YW5jZS52YWx1ZVwiXHJcbiAgICAgICAgICBbcmVhZG9ubHldPVwid2lkZ2V0SW5zdGFuY2UuaXNSZWFkb25seVwiXHJcbiAgICAgICAgICBwbGFjZWhvbGRlcj1cInt7IHdpZGdldEluc3RhbmNlLnBsYWNlaG9sZGVyIH19XCJcclxuICAgICAgICAgIG1hdElucHV0XHJcbiAgICAgICAgICAoYmx1cik9XCJvbkJsdXI/Lm5leHQoJGV2ZW50KVwiXHJcbiAgICAgICAgICBtYXhsZW5ndGg9XCJ7eyB3aWRnZXRJbnN0YW5jZS5tYXhMZW5ndGggfX1cIlxyXG4gICAgICAgID48L3RleHRhcmVhPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwibWF0LWVycm9yXCI+XHJcbiAgICAgICAgICB7eyB3aWRnZXRJbnN0YW5jZS5lcnJvciB9fVxyXG4gICAgICAgIDwvc3Bhbj5cclxuICAgICAgICA8c21hcnQtaWNvblxyXG4gICAgICAgICAgKm5nSWY9XCJ3aWRnZXRJbnN0YW5jZS5lcnJvciAmJiB3aWRnZXRJbnN0YW5jZS5lcnJvckljb25cIlxyXG4gICAgICAgICAgW2ljb25dPVwid2lkZ2V0SW5zdGFuY2UuZXJyb3JJY29uXCJcclxuICAgICAgICAgIFtjb2xvcl09XCJ3aWRnZXRJbnN0YW5jZS5lcnJvckljb25Db2xvciA/PyAnd2FybidcIlxyXG4gICAgICAgICAgbWF0U3VmZml4XHJcbiAgICAgICAgPjwvc21hcnQtaWNvbj5cclxuICAgICAgICA8bWF0LWhpbnRcclxuICAgICAgICAgICpuZ0lmPVwid2lkZ2V0SW5zdGFuY2Uuc2hvd0NoYXJhY3RlckxpbWl0U3VmZml4ICYmIHdpZGdldEluc3RhbmNlLm1heExlbmd0aFwiXHJcbiAgICAgICAgICBtYXRTdWZmaXhcclxuICAgICAgICAgIGFsaWduPVwiZW5kXCJcclxuICAgICAgICAgID57eyB3aWRnZXRJbnN0YW5jZS5tYXhMZW5ndGggLSBmb3JtLmNvbnRyb2xzW3dpZGdldEluc3RhbmNlLmtleV0udmFsdWUubGVuZ3RoIH19PC9tYXQtaGludFxyXG4gICAgICAgID5cclxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgPG1hdC1oaW50XHJcbiAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICF3aWRnZXRJbnN0YW5jZS5oaW50IHx8IHdpZGdldEluc3RhbmNlLmhpbnQ/LnBvc2l0aW9uID09PSBTbWFydFdpZGdldEhpbnRQb3NpdGlvbi5JTlBVVFxyXG4gICAgICAgIFwiXHJcbiAgICAgICAgPnt7IHdpZGdldEluc3RhbmNlLmhpbnQ/LnRleHQgfX08L21hdC1oaW50XHJcbiAgICAgID5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgKm5nSWY9XCJ3aWRnZXRJbnN0YW5jZS50eXBlID09PSBzbWFydEZvcm1XaWRnZXRUeXBlLkNIRUNLX0JPWFwiIGNsYXNzPVwid2lkZ2V0Q29udGFpbmVyXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJsYWJlbENvbnRhaW5lclwiICpuZ0lmPVwid2lkZ2V0SW5zdGFuY2Uuc2hvd0xhYmVsXCI+XHJcbiAgICAgICAgPGg0XHJcbiAgICAgICAgICBjbGFzcz1cInt7IGxhYmVsQ29sb3IgfX0gc21hcnQtZm9ybS13aWRnZXQtbGFiZWwge3sgd2lkZ2V0SW5zdGFuY2UuY3NzTGFiZWxDbGFzcyA/PyAnJyB9fVwiXHJcbiAgICAgICAgICBbbmdDbGFzc109XCJnZXRMYWJlbE5nQ2xhc3MoKVwiXHJcbiAgICAgICAgICBbbmdTdHlsZV09XCJnZXRMYWJlbFN0eWxlKClcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIHt7IGdldFdpZGdldExhYmVsKHdpZGdldEluc3RhbmNlKSB9fVxyXG4gICAgICAgIDwvaDQ+XHJcbiAgICAgICAgPG1hdC1oaW50ICpuZ0lmPVwid2lkZ2V0SW5zdGFuY2U/LmhpbnQ/LnBvc2l0aW9uID09PSBTbWFydFdpZGdldEhpbnRQb3NpdGlvbi5MQUJFTFwiPnt7XHJcbiAgICAgICAgICB3aWRnZXRJbnN0YW5jZS5oaW50Py50ZXh0XHJcbiAgICAgICAgfX08L21hdC1oaW50PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdlxyXG4gICAgICAgIGNsYXNzPVwiaW5wdXQgY2hlY2tib3ggd2lkZ2V0Q29udGVudCB7eyB3aWRnZXRJbnN0YW5jZS5jc3NDbGFzcyA/PyAnJyB9fVwiXHJcbiAgICAgICAgW25nQ2xhc3NdPVwiZ2V0TmdDbGFzcygpXCJcclxuICAgICAgICBbbmdTdHlsZV09XCJnZXRTdHlsZSgpXCJcclxuICAgICAgICBhcHBlYXJhbmNlPVwib3V0bGluZVwiXHJcbiAgICAgID5cclxuICAgICAgICA8bWF0LWxhYmVsIGNsYXNzPVwicmFkaW9MYWJlbFwiICpuZ0lmPVwiIXdpZGdldEluc3RhbmNlLnNob3dMYWJlbFwiPlxyXG4gICAgICAgICAge3sgZ2V0V2lkZ2V0TGFiZWwod2lkZ2V0SW5zdGFuY2UpIH19XHJcbiAgICAgICAgPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgPHNlY3Rpb24gY2xhc3M9XCJjaGVja2JveC1zZWN0aW9uXCIgW25nQ2xhc3NdPVwiZ2V0RGlyZWN0aW9uKClcIj5cclxuICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgY2xhc3M9XCJjaGVja2JveC1pdGVtLWNvbnRhaW5lclwiXHJcbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCBjaGVja2JveCBvZiB3aWRnZXRJbnN0YW5jZS52YWx1ZUxpc3Q7IGxldCBpID0gaW5kZXhcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8aW1nXHJcbiAgICAgICAgICAgICAgKm5nSWY9XCJjaGVja2JveC5pbWFnZVVybFwiXHJcbiAgICAgICAgICAgICAgdGl0bGU9XCJ7eyB3aWRnZXRJbnN0YW5jZS5rZXkgfX1cIlxyXG4gICAgICAgICAgICAgIGNsYXNzPVwiY2hlY2tib3gtaXRlbS1pbWFnZVwiXHJcbiAgICAgICAgICAgICAgW3NyY109XCJjaGVja2JveC5pbWFnZVVybFwiXHJcbiAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgIDxtYXQtY2hlY2tib3hcclxuICAgICAgICAgICAgICBjbGFzcz1cInNlbGVjYXRibGVPYmplY3RcIlxyXG4gICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInt7IHdpZGdldEluc3RhbmNlLmtleSB9fVwiXHJcbiAgICAgICAgICAgICAgW25nTW9kZWxdPVwiY2hlY2tib3gudmFsdWVcIlxyXG4gICAgICAgICAgICAgIChjaGFuZ2UpPVwib25WYWx1ZUNoYW5nZT8ubmV4dChjaGVja2JveClcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAge3sgY2hlY2tib3gubGFiZWwgfX1cclxuICAgICAgICAgICAgPC9tYXQtY2hlY2tib3g+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJyYWRpby1lcnJvclwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdC1lcnJvclwiPlxyXG4gICAgICAgICAgICAgIHt7IHdpZGdldEluc3RhbmNlLmVycm9yIH19XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPHNtYXJ0LWljb25cclxuICAgICAgICAgICAgICAqbmdJZj1cIndpZGdldEluc3RhbmNlLmVycm9yICYmIHdpZGdldEluc3RhbmNlLmVycm9ySWNvblwiXHJcbiAgICAgICAgICAgICAgW2ljb25dPVwid2lkZ2V0SW5zdGFuY2UuZXJyb3JJY29uXCJcclxuICAgICAgICAgICAgICBbY29sb3JdPVwid2lkZ2V0SW5zdGFuY2UuZXJyb3JJY29uQ29sb3IgPz8gJ3dhcm4nXCJcclxuICAgICAgICAgICAgPjwvc21hcnQtaWNvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvc2VjdGlvbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgKm5nSWY9XCJ3aWRnZXRJbnN0YW5jZS50eXBlID09PSBzbWFydEZvcm1XaWRnZXRUeXBlLkNIRUNLX0JPWF8yXCIgY2xhc3M9XCJ3aWRnZXRDb250YWluZXJcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImxhYmVsQ29udGFpbmVyXCIgKm5nSWY9XCJ3aWRnZXRJbnN0YW5jZS5zaG93TGFiZWxcIj5cclxuICAgICAgICA8aDRcclxuICAgICAgICAgIGNsYXNzPVwie3sgbGFiZWxDb2xvciB9fSBzbWFydC1mb3JtLXdpZGdldC1sYWJlbCB7eyB3aWRnZXRJbnN0YW5jZS5jc3NMYWJlbENsYXNzIH19XCJcclxuICAgICAgICAgIFtuZ0NsYXNzXT1cImdldExhYmVsTmdDbGFzcygpXCJcclxuICAgICAgICAgIFtuZ1N0eWxlXT1cImdldExhYmVsU3R5bGUoKVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAge3sgZ2V0V2lkZ2V0TGFiZWwod2lkZ2V0SW5zdGFuY2UpIH19XHJcbiAgICAgICAgPC9oND5cclxuICAgICAgICA8bWF0LWhpbnQgKm5nSWY9XCJ3aWRnZXRJbnN0YW5jZT8uaGludD8ucG9zaXRpb24gPT09IFNtYXJ0V2lkZ2V0SGludFBvc2l0aW9uLkxBQkVMXCI+e3tcclxuICAgICAgICAgIHdpZGdldEluc3RhbmNlLmhpbnQ/LnRleHRcclxuICAgICAgICB9fTwvbWF0LWhpbnQ+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2XHJcbiAgICAgICAgY2xhc3M9XCJpbnB1dCBjaGVja2JveCB3aWRnZXRDb250ZW50IHt7IHdpZGdldEluc3RhbmNlLmNzc0NsYXNzID8/ICcnIH19XCJcclxuICAgICAgICBbbmdDbGFzc109XCJnZXROZ0NsYXNzKClcIlxyXG4gICAgICAgIFtuZ1N0eWxlXT1cImdldFN0eWxlKClcIlxyXG4gICAgICAgIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxtYXQtbGFiZWwgY2xhc3M9XCJyYWRpb0xhYmVsXCIgKm5nSWY9XCIhd2lkZ2V0SW5zdGFuY2Uuc2hvd0xhYmVsXCI+XHJcbiAgICAgICAgICB7eyBnZXRXaWRnZXRMYWJlbCh3aWRnZXRJbnN0YW5jZSkgfX1cclxuICAgICAgICA8L21hdC1sYWJlbD5cclxuICAgICAgICA8c2VjdGlvbiBjbGFzcz1cImNoZWNrYm94LXNlY3Rpb25cIiBbbmdDbGFzc109XCJnZXREaXJlY3Rpb24oKVwiPlxyXG4gICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICBjbGFzcz1cImNoZWNrYm94LWl0ZW0tY29udGFpbmVyXCJcclxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IGNoZWNrYm94IG9mIHdpZGdldEluc3RhbmNlLnZhbHVlTGlzdDsgbGV0IGkgPSBpbmRleFwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxpbWdcclxuICAgICAgICAgICAgICAqbmdJZj1cImNoZWNrYm94LmltYWdlVXJsXCJcclxuICAgICAgICAgICAgICB0aXRsZT1cInt7IHdpZGdldEluc3RhbmNlLmtleSB9fVwiXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJjaGVja2JveC1pdGVtLWltYWdlXCJcclxuICAgICAgICAgICAgICBbc3JjXT1cImNoZWNrYm94LmltYWdlVXJsXCJcclxuICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgPG1hdC1jaGVja2JveFxyXG4gICAgICAgICAgICAgIGNsYXNzPVwic2VsZWNhdGJsZU9iamVjdFwiXHJcbiAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwie3sgd2lkZ2V0SW5zdGFuY2Uua2V5ICsgJy4nICsgY2hlY2tib3gua2V5IH19XCJcclxuICAgICAgICAgICAgICBbdmFsdWVdPVwiY2hlY2tib3gudmFsdWVcIlxyXG4gICAgICAgICAgICAgIChjaGFuZ2UpPVwib25WYWx1ZUNoYW5nZT8ubmV4dChjaGVja2JveClcIlxyXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJ3aWRnZXRJbnN0YW5jZS5pc0Rpc2FibGVkIVwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICB7eyBjaGVja2JveC5sYWJlbCB9fVxyXG4gICAgICAgICAgICA8L21hdC1jaGVja2JveD5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJhZGlvLWVycm9yXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0LWVycm9yXCI+XHJcbiAgICAgICAgICAgICAge3sgd2lkZ2V0SW5zdGFuY2UuZXJyb3IgfX1cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICA8c21hcnQtaWNvblxyXG4gICAgICAgICAgICAgICpuZ0lmPVwid2lkZ2V0SW5zdGFuY2UuZXJyb3IgJiYgd2lkZ2V0SW5zdGFuY2UuZXJyb3JJY29uXCJcclxuICAgICAgICAgICAgICBbaWNvbl09XCJ3aWRnZXRJbnN0YW5jZS5lcnJvckljb25cIlxyXG4gICAgICAgICAgICAgIFtjb2xvcl09XCJ3aWRnZXRJbnN0YW5jZS5lcnJvckljb25Db2xvciA/PyAnd2FybidcIlxyXG4gICAgICAgICAgICA+PC9zbWFydC1pY29uPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9zZWN0aW9uPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgKm5nSWY9XCJ3aWRnZXRJbnN0YW5jZS50eXBlID09PSBzbWFydEZvcm1XaWRnZXRUeXBlLlJBRElPX0JVVFRPTlwiIGNsYXNzPVwid2lkZ2V0Q29udGFpbmVyXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJsYWJlbENvbnRhaW5lclwiICpuZ0lmPVwid2lkZ2V0SW5zdGFuY2Uuc2hvd0xhYmVsXCI+XHJcbiAgICAgICAgPGg0XHJcbiAgICAgICAgICBjbGFzcz1cInt7IGxhYmVsQ29sb3IgfX0gc21hcnQtZm9ybS13aWRnZXQtbGFiZWwge3sgd2lkZ2V0SW5zdGFuY2UuY3NzTGFiZWxDbGFzcyB9fVwiXHJcbiAgICAgICAgICBbbmdDbGFzc109XCJnZXRMYWJlbE5nQ2xhc3MoKVwiXHJcbiAgICAgICAgICBbbmdTdHlsZV09XCJnZXRMYWJlbFN0eWxlKClcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIHt7IGdldFdpZGdldExhYmVsKHdpZGdldEluc3RhbmNlKSB9fVxyXG4gICAgICAgIDwvaDQ+XHJcbiAgICAgICAgPG1hdC1oaW50ICpuZ0lmPVwid2lkZ2V0SW5zdGFuY2U/LmhpbnQ/LnBvc2l0aW9uID09PSBTbWFydFdpZGdldEhpbnRQb3NpdGlvbi5MQUJFTFwiPnt7XHJcbiAgICAgICAgICB3aWRnZXRJbnN0YW5jZS5oaW50Py50ZXh0XHJcbiAgICAgICAgfX08L21hdC1oaW50PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPG1hdC1yYWRpby1ncm91cFxyXG4gICAgICAgIGNsYXNzPVwiaW5wdXQgcmFkaW8tc2VjdGlvbiB3aWRnZXRDb250ZW50IHt7IHdpZGdldEluc3RhbmNlLmNzc0NsYXNzID8/ICcnIH19XCJcclxuICAgICAgICBbbmdDbGFzc109XCJnZXROZ0NsYXNzKClcIlxyXG4gICAgICAgIFtuZ1N0eWxlXT1cImdldFN0eWxlKClcIlxyXG4gICAgICAgIGFyaWEtbGFiZWw9XCJ7eyB3aWRnZXRJbnN0YW5jZS5sYWJlbCB9fVwiXHJcbiAgICAgICAgYXBwZWFyYW5jZT1cIm91dGxpbmVcIlxyXG4gICAgICAgIGZvcm1Db250cm9sTmFtZT1cInt7IHdpZGdldEluc3RhbmNlLmtleSB9fVwiXHJcbiAgICAgID5cclxuICAgICAgICA8bWF0LWxhYmVsIGNsYXNzPVwicmFkaW9MYWJlbFwiICpuZ0lmPVwiIXdpZGdldEluc3RhbmNlLnNob3dMYWJlbFwiPlxyXG4gICAgICAgICAge3sgZ2V0V2lkZ2V0TGFiZWwod2lkZ2V0SW5zdGFuY2UpIH19XHJcbiAgICAgICAgPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgPGRpdiBbbmdDbGFzc109XCJnZXREaXJlY3Rpb24oKVwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJhZGlvLWl0ZW0tY29udGFpbmVyXCIgKm5nRm9yPVwibGV0IHJhZGlvIG9mIHdpZGdldEluc3RhbmNlLnZhbHVlTGlzdFwiPlxyXG4gICAgICAgICAgICA8aW1nXHJcbiAgICAgICAgICAgICAgKm5nSWY9XCJyYWRpby5pbWFnZVVybFwiXHJcbiAgICAgICAgICAgICAgdGl0bGU9XCJ7eyB3aWRnZXRJbnN0YW5jZS5rZXkgfX1cIlxyXG4gICAgICAgICAgICAgIGNsYXNzPVwicmFkaW8taXRlbS1pbWFnZVwiXHJcbiAgICAgICAgICAgICAgW3NyY109XCJyYWRpby5pbWFnZVVybFwiXHJcbiAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgIDxtYXQtcmFkaW8tYnV0dG9uXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJzZWxlY2F0YmxlT2JqZWN0XCJcclxuICAgICAgICAgICAgICB2YWx1ZT1cInt7IHJhZGlvLnZhbHVlIH19XCJcclxuICAgICAgICAgICAgICBbbmdDbGFzc109XCJnZXREaXJlY3Rpb24oKVwiXHJcbiAgICAgICAgICAgICAgKGNoYW5nZSk9XCJvblZhbHVlQ2hhbmdlPy5uZXh0KHJhZGlvLnZhbHVlKVwiXHJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIndpZGdldEluc3RhbmNlLmlzRGlzYWJsZWRcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAge3sgcmFkaW8ubGFiZWwgfX1cclxuICAgICAgICAgICAgPC9tYXQtcmFkaW8tYnV0dG9uPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicmFkaW8tZXJyb3JcIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXQtZXJyb3JcIj5cclxuICAgICAgICAgICAgICB7eyB3aWRnZXRJbnN0YW5jZS5lcnJvciB9fVxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDxzbWFydC1pY29uXHJcbiAgICAgICAgICAgICAgKm5nSWY9XCJ3aWRnZXRJbnN0YW5jZS5lcnJvciAmJiB3aWRnZXRJbnN0YW5jZS5lcnJvckljb25cIlxyXG4gICAgICAgICAgICAgIFtpY29uXT1cIndpZGdldEluc3RhbmNlLmVycm9ySWNvblwiXHJcbiAgICAgICAgICAgICAgW2NvbG9yXT1cIndpZGdldEluc3RhbmNlLmVycm9ySWNvbkNvbG9yID8/ICd3YXJuJ1wiXHJcbiAgICAgICAgICAgID48L3NtYXJ0LWljb24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9tYXQtcmFkaW8tZ3JvdXA+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2XHJcbiAgICAgICpuZ0lmPVwid2lkZ2V0SW5zdGFuY2UudHlwZSA9PT0gc21hcnRGb3JtV2lkZ2V0VHlwZS5EQVRFX1BJQ0tFUlwiXHJcbiAgICAgIGNsYXNzPVwiZGF0ZVBpY2tlciB3aWRnZXRDb250YWluZXJcIlxyXG4gICAgPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwibGFiZWxDb250YWluZXJcIiAqbmdJZj1cIndpZGdldEluc3RhbmNlLnNob3dMYWJlbFwiPlxyXG4gICAgICAgIDxoNFxyXG4gICAgICAgICAgY2xhc3M9XCJ7eyBsYWJlbENvbG9yIH19IHNtYXJ0LWZvcm0td2lkZ2V0LWxhYmVsIHt7IHdpZGdldEluc3RhbmNlLmNzc0xhYmVsQ2xhc3MgPz8gJycgfX1cIlxyXG4gICAgICAgICAgW25nQ2xhc3NdPVwiZ2V0TGFiZWxOZ0NsYXNzKClcIlxyXG4gICAgICAgICAgW25nU3R5bGVdPVwiZ2V0TGFiZWxTdHlsZSgpXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICB7eyBnZXRXaWRnZXRMYWJlbCh3aWRnZXRJbnN0YW5jZSkgfX1cclxuICAgICAgICA8L2g0PlxyXG4gICAgICAgIDxtYXQtaGludCAqbmdJZj1cIndpZGdldEluc3RhbmNlPy5oaW50Py5wb3NpdGlvbiA9PT0gU21hcnRXaWRnZXRIaW50UG9zaXRpb24uTEFCRUxcIj57e1xyXG4gICAgICAgICAgd2lkZ2V0SW5zdGFuY2UuaGludD8udGV4dFxyXG4gICAgICAgIH19PC9tYXQtaGludD5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxtYXQtZm9ybS1maWVsZFxyXG4gICAgICAgIGNsYXNzPVwiaW5wdXQgd2lkZ2V0Q29udGVudCBkYXRlIHt7IHdpZGdldEluc3RhbmNlLmNzc0NsYXNzID8/ICcnIH19XCJcclxuICAgICAgICBbbmdDbGFzc109XCJnZXROZ0NsYXNzKClcIlxyXG4gICAgICAgIFtuZ1N0eWxlXT1cImdldFN0eWxlKClcIlxyXG4gICAgICAgIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxtYXQtbGFiZWxcclxuICAgICAgICAgIGNsYXNzPVwibGFiZWxcIlxyXG4gICAgICAgICAgW25nQ2xhc3NdPVwid2lkZ2V0SW5zdGFuY2UuY3NzTGFiZWxDbGFzcyA/PyAnJ1wiXHJcbiAgICAgICAgICAqbmdJZj1cIiF3aWRnZXRJbnN0YW5jZS5zaG93TGFiZWxcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIHt7IGdldFdpZGdldExhYmVsKHdpZGdldEluc3RhbmNlKSB9fVxyXG4gICAgICAgIDwvbWF0LWxhYmVsPlxyXG4gICAgICAgIDxtYXQtZGF0ZXBpY2tlci10b2dnbGUgbWF0U3VmZml4IFtmb3JdPVwicGlja2VyXCI+PC9tYXQtZGF0ZXBpY2tlci10b2dnbGU+XHJcbiAgICAgICAgPG1hdC1kYXRlcGlja2VyICNwaWNrZXIgKGNsb3NlZCk9XCJvbkJsdXI/Lm5leHQod2lkZ2V0SW5zdGFuY2UpXCI+PC9tYXQtZGF0ZXBpY2tlcj5cclxuICAgICAgICA8aW5wdXRcclxuICAgICAgICAgIG1hdElucHV0XHJcbiAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cIndpZGdldEluc3RhbmNlLmtleVwiXHJcbiAgICAgICAgICBbaWRdPVwid2lkZ2V0SW5zdGFuY2Uua2V5XCJcclxuICAgICAgICAgIFt2YWx1ZV09XCJ3aWRnZXRJbnN0YW5jZS52YWx1ZVwiXHJcbiAgICAgICAgICBbbWluXT1cIndpZGdldEluc3RhbmNlLm1pbkRhdGUgPz8gbnVsbFwiXHJcbiAgICAgICAgICBbbWF4XT1cIndpZGdldEluc3RhbmNlLm1heERhdGUgPz8gbnVsbFwiXHJcbiAgICAgICAgICBwbGFjZWhvbGRlcj1cInt7IHdpZGdldEluc3RhbmNlLnBsYWNlaG9sZGVyIH19XCJcclxuICAgICAgICAgIFttYXREYXRlcGlja2VyXT1cInBpY2tlclwiXHJcbiAgICAgICAgICAoYmx1cik9XCJvbkJsdXI/Lm5leHQod2lkZ2V0SW5zdGFuY2UpXCJcclxuICAgICAgICAgIChkYXRlQ2hhbmdlKT1cIm9uVmFsdWVDaGFuZ2U/Lm5leHQod2lkZ2V0SW5zdGFuY2UpXCJcclxuICAgICAgICAgIFttYXREYXRlcGlja2VyRmlsdGVyXT1cIndpZGdldEluc3RhbmNlLmZpbHRlciA/PyBkYXRlRmlsdGVyXCJcclxuICAgICAgICAvPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwibWF0LWVycm9yXCI+XHJcbiAgICAgICAgICB7eyB3aWRnZXRJbnN0YW5jZS5lcnJvciB9fVxyXG4gICAgICAgIDwvc3Bhbj5cclxuICAgICAgICA8c21hcnQtaWNvblxyXG4gICAgICAgICAgKm5nSWY9XCJ3aWRnZXRJbnN0YW5jZS5lcnJvciAmJiB3aWRnZXRJbnN0YW5jZS5lcnJvckljb25cIlxyXG4gICAgICAgICAgW2ljb25dPVwid2lkZ2V0SW5zdGFuY2UuZXJyb3JJY29uXCJcclxuICAgICAgICAgIFtjb2xvcl09XCJ3aWRnZXRJbnN0YW5jZS5lcnJvckljb25Db2xvciA/PyAnd2FybidcIlxyXG4gICAgICAgICAgbWF0U3VmZml4XHJcbiAgICAgICAgPjwvc21hcnQtaWNvbj5cclxuICAgICAgICA8bWF0LWhpbnQ+XHJcbiAgICAgICAgICB7eyB3aWRnZXRJbnN0YW5jZS5kYXRlRm9ybWF0SGludCB9fVxyXG4gICAgICAgIDwvbWF0LWhpbnQ+XHJcbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8IS0tIDxkaXZcclxuICAgICAgKm5nSWY9XCJ3aWRnZXRJbnN0YW5jZS50eXBlID09PSBzbWFydEZvcm1XaWRnZXRUeXBlLkRBVEVfVElNRV9QSUNLRVJcIlxyXG4gICAgICBjbGFzcz1cIndpZGdldENvbnRhaW5lclwiXHJcbiAgICA+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJsYWJlbENvbnRhaW5lclwiICpuZ0lmPVwid2lkZ2V0SW5zdGFuY2Uuc2hvd0xhYmVsXCI+XHJcbiAgICAgICAgPGg0IGNsYXNzPVwie3sgbGFiZWxDb2xvciB9fSBzbWFydC1mb3JtLXdpZGdldC1sYWJlbFwiPlxyXG4gICAgICAgICAge3sgZ2V0V2lkZ2V0TGFiZWwod2lkZ2V0SW5zdGFuY2UpIH19XHJcbiAgICAgICAgPC9oND5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxtYXQtZm9ybS1maWVsZFxyXG4gICAgICAgIGNsYXNzPVwiaW5wdXQgd2lkZ2V0Q29udGVudFwiXHJcbiAgICAgICAgW25nQ2xhc3NdPVwid2lkZ2V0SW5zdGFuY2UuY3NzQ2xhc3MgPz8gJydcIlxyXG4gICAgICAgIFtuZ1N0eWxlXT1cInsgd2lkdGg6IHdpZGdldEluc3RhbmNlLm1pbldpZHRoICsgJ3B4JyB9XCJcclxuICAgICAgICBhcHBlYXJhbmNlPVwib3V0bGluZVwiXHJcbiAgICAgID5cclxuICAgICAgICA8bWF0LWxhYmVsXHJcbiAgICAgICAgICBjbGFzcz1cImxhYmVsXCJcclxuICAgICAgICAgIFtuZ0NsYXNzXT1cIndpZGdldEluc3RhbmNlLmNzc0xhYmVsQ2xhc3MgPz8gJydcIlxyXG4gICAgICAgICAgKm5nSWY9XCIhd2lkZ2V0SW5zdGFuY2Uuc2hvd0xhYmVsXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICB7eyBnZXRXaWRnZXRMYWJlbCh3aWRnZXRJbnN0YW5jZSkgfX1cclxuICAgICAgICA8L21hdC1sYWJlbD5cclxuICAgICAgICA8bWF0LWRhdGVwaWNrZXItdG9nZ2xlIG1hdFN1ZmZpeCBbZm9yXT1cIiRhbnkocGlja2VyKVwiPjwvbWF0LWRhdGVwaWNrZXItdG9nZ2xlPlxyXG4gICAgICAgIDxuZ3gtbWF0LWRhdGV0aW1lLXBpY2tlclxyXG4gICAgICAgICAgI3BpY2tlclxyXG4gICAgICAgICAgW3Nob3dTcGlubmVyc109XCJ0cnVlXCJcclxuICAgICAgICAgIFtzaG93U2Vjb25kc109XCJmYWxzZVwiXHJcbiAgICAgICAgICBbc3RlcEhvdXJdPVwiMVwiXHJcbiAgICAgICAgICBbc3RlcE1pbnV0ZV09XCIxXCJcclxuICAgICAgICAgIFtzdGVwU2Vjb25kXT1cIjEwXCJcclxuICAgICAgICAgIFt0b3VjaFVpXT1cImZhbHNlXCJcclxuICAgICAgICAgIFtjb2xvcl09XCIncHJpbWFyeSdcIlxyXG4gICAgICAgICAgW2VuYWJsZU1lcmlkaWFuXT1cImZhbHNlXCJcclxuICAgICAgICAgIFtkaXNhYmxlTWludXRlXT1cImZhbHNlXCJcclxuICAgICAgICAgIFtoaWRlVGltZV09XCJmYWxzZVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgIDwvbmd4LW1hdC1kYXRldGltZS1waWNrZXI+XHJcbiAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICBtYXRJbnB1dFxyXG4gICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJ3aWRnZXRJbnN0YW5jZS5rZXlcIlxyXG4gICAgICAgICAgW2lkXT1cIndpZGdldEluc3RhbmNlLmtleVwiXHJcbiAgICAgICAgICBbdmFsdWVdPVwid2lkZ2V0SW5zdGFuY2UudmFsdWVcIlxyXG4gICAgICAgICAgcGxhY2Vob2xkZXI9XCJ7eyB3aWRnZXRJbnN0YW5jZS5wbGFjZWhvbGRlciB9fVwiXHJcbiAgICAgICAgICBbbmd4TWF0RGF0ZXRpbWVQaWNrZXJdPVwicGlja2VyXCJcclxuICAgICAgICAgIFtuZ3hNYXREYXRldGltZVBpY2tlckZpbHRlcl09XCJ3aWRnZXRJbnN0YW5jZS5maWx0ZXIgPz8gZGF0ZUZpbHRlclwiXHJcbiAgICAgICAgICAoYmx1cik9XCJvbkJsdXI/Lm5leHQod2lkZ2V0SW5zdGFuY2UpXCJcclxuICAgICAgICAvPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwibWF0LWVycm9yXCI+XHJcbiAgICAgICAgICB7eyB3aWRnZXRJbnN0YW5jZS5lcnJvciB9fVxyXG4gICAgICAgIDwvc3Bhbj5cclxuICAgICAgICA8c21hcnQtaWNvblxyXG4gICAgICAgICAgKm5nSWY9XCJ3aWRnZXRJbnN0YW5jZS5lcnJvciAmJiB3aWRnZXRJbnN0YW5jZS5lcnJvckljb25cIlxyXG4gICAgICAgICAgW2ljb25dPVwid2lkZ2V0SW5zdGFuY2UuZXJyb3JJY29uXCJcclxuICAgICAgICAgIFtjb2xvcl09XCJ3aWRnZXRJbnN0YW5jZS5lcnJvckljb25Db2xvciA/PyAnd2FybidcIlxyXG4gICAgICAgICAgbWF0U3VmZml4XHJcbiAgICAgICAgPjwvc21hcnQtaWNvbj5cclxuICAgICAgICA8bWF0LWhpbnQ+XHJcbiAgICAgICAgICB7eyB3aWRnZXRJbnN0YW5jZS5kYXRlRm9ybWF0SGludCB9fVxyXG4gICAgICAgIDwvbWF0LWhpbnQ+XHJcbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICA8L2Rpdj4gLS0+XHJcblxyXG4gICAgPGRpdlxyXG4gICAgICAqbmdJZj1cIndpZGdldEluc3RhbmNlLnR5cGUgPT09IHNtYXJ0Rm9ybVdpZGdldFR5cGUuREFURV9USU1FX1BJQ0tFUlwiXHJcbiAgICAgIGNsYXNzPVwid2lkZ2V0Q29udGFpbmVyXCJcclxuICAgID5cclxuICAgICAgPGRpdiBjbGFzcz1cImxhYmVsQ29udGFpbmVyXCIgKm5nSWY9XCJ3aWRnZXRJbnN0YW5jZS5zaG93TGFiZWxcIj5cclxuICAgICAgICA8aDRcclxuICAgICAgICAgIGNsYXNzPVwie3sgbGFiZWxDb2xvciB9fSBzbWFydC1mb3JtLXdpZGdldC1sYWJlbCB7eyB3aWRnZXRJbnN0YW5jZS5jc3NMYWJlbENsYXNzID8/ICcnIH19XCJcclxuICAgICAgICAgIFtuZ0NsYXNzXT1cImdldExhYmVsTmdDbGFzcygpXCJcclxuICAgICAgICAgIFtuZ1N0eWxlXT1cImdldExhYmVsU3R5bGUoKVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAge3sgZ2V0V2lkZ2V0TGFiZWwod2lkZ2V0SW5zdGFuY2UpIH19XHJcbiAgICAgICAgPC9oND5cclxuICAgICAgICA8bWF0LWhpbnQgKm5nSWY9XCJ3aWRnZXRJbnN0YW5jZT8uaGludD8ucG9zaXRpb24gPT09IFNtYXJ0V2lkZ2V0SGludFBvc2l0aW9uLkxBQkVMXCI+e3tcclxuICAgICAgICAgIHdpZGdldEluc3RhbmNlLmhpbnQ/LnRleHRcclxuICAgICAgICB9fTwvbWF0LWhpbnQ+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZGF0ZVRpbWVQaWNrZXJDb250YWluZXJcIj5cclxuICAgICAgICA8bWF0LWZvcm0tZmllbGRcclxuICAgICAgICAgIGNsYXNzPVwiaW5wdXQgd2lkZ2V0Q29udGVudCBkYXRlIHt7IHdpZGdldEluc3RhbmNlLmNzc0NsYXNzID8/ICcnIH19XCJcclxuICAgICAgICAgIFtuZ0NsYXNzXT1cImdldE5nQ2xhc3MoKVwiXHJcbiAgICAgICAgICBbbmdTdHlsZV09XCJnZXRTdHlsZSgpXCJcclxuICAgICAgICAgIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8bWF0LWxhYmVsXHJcbiAgICAgICAgICAgIGNsYXNzPVwibGFiZWxcIlxyXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ3aWRnZXRJbnN0YW5jZS5jc3NMYWJlbENsYXNzID8/ICcnXCJcclxuICAgICAgICAgICAgKm5nSWY9XCIhd2lkZ2V0SW5zdGFuY2Uuc2hvd0xhYmVsXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAge3sgZ2V0V2lkZ2V0TGFiZWwod2lkZ2V0SW5zdGFuY2UpIH19XHJcbiAgICAgICAgICA8L21hdC1sYWJlbD5cclxuICAgICAgICAgIDxtYXQtZGF0ZXBpY2tlci10b2dnbGUgbWF0U3VmZml4IFtmb3JdPVwicGlja2VyXCI+PC9tYXQtZGF0ZXBpY2tlci10b2dnbGU+XHJcbiAgICAgICAgICA8bWF0LWRhdGVwaWNrZXIgI3BpY2tlciAoY2xvc2VkKT1cIm9uQmx1cj8ubmV4dCh3aWRnZXRJbnN0YW5jZSlcIj48L21hdC1kYXRlcGlja2VyPlxyXG4gICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICNkYXRlSW5wdXRcclxuICAgICAgICAgICAgbWF0SW5wdXRcclxuICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJ3aWRnZXRJbnN0YW5jZS5rZXlcIlxyXG4gICAgICAgICAgICBbaWRdPVwid2lkZ2V0SW5zdGFuY2Uua2V5XCJcclxuICAgICAgICAgICAgW3ZhbHVlXT1cIndpZGdldEluc3RhbmNlLnZhbHVlXCJcclxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJ7eyB3aWRnZXRJbnN0YW5jZS5wbGFjZWhvbGRlciB9fVwiXHJcbiAgICAgICAgICAgIFttYXREYXRlcGlja2VyXT1cInBpY2tlclwiXHJcbiAgICAgICAgICAgIChibHVyKT1cIm9uRGF0ZVBpY2tlckJsdXIoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgIChkYXRlQ2hhbmdlKT1cIm9uVmFsdWVDaGFuZ2U/Lm5leHQod2lkZ2V0SW5zdGFuY2UpXCJcclxuICAgICAgICAgICAgW21hdERhdGVwaWNrZXJGaWx0ZXJdPVwid2lkZ2V0SW5zdGFuY2UuZmlsdGVyID8/IGRhdGVGaWx0ZXJcIlxyXG4gICAgICAgICAgLz5cclxuXHJcbiAgICAgICAgICA8c21hcnQtaWNvblxyXG4gICAgICAgICAgICAqbmdJZj1cIndpZGdldEluc3RhbmNlLmVycm9yICYmIHdpZGdldEluc3RhbmNlLmVycm9ySWNvblwiXHJcbiAgICAgICAgICAgIFtpY29uXT1cIndpZGdldEluc3RhbmNlLmVycm9ySWNvblwiXHJcbiAgICAgICAgICAgIFtjb2xvcl09XCJ3aWRnZXRJbnN0YW5jZS5lcnJvckljb25Db2xvciA/PyAnd2FybidcIlxyXG4gICAgICAgICAgICBtYXRTdWZmaXhcclxuICAgICAgICAgID48L3NtYXJ0LWljb24+XHJcbiAgICAgICAgICA8bWF0LWhpbnQ+XHJcbiAgICAgICAgICAgIHt7IHdpZGdldEluc3RhbmNlLmRhdGVGb3JtYXRIaW50IH19XHJcbiAgICAgICAgICA8L21hdC1oaW50PlxyXG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkXHJcbiAgICAgICAgICAqbmdJZj1cImhhc0NyZWF0ZWRcIlxyXG4gICAgICAgICAgY2xhc3M9XCJpbnB1dCB3aWRnZXRDb250ZW50IHRpbWVcIlxyXG4gICAgICAgICAgW25nQ2xhc3NdPVwid2lkZ2V0SW5zdGFuY2UuY3NzQ2xhc3MgPz8gJydcIlxyXG4gICAgICAgICAgW25nU3R5bGVdPVwieyB3aWR0aDogd2lkZ2V0SW5zdGFuY2UubWluV2lkdGggKyAncHgnIH1cIlxyXG4gICAgICAgICAgYXBwZWFyYW5jZT1cIm91dGxpbmVcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAjdGltZUlucHV0XHJcbiAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwid2lkZ2V0SW5zdGFuY2Uua2V5ICsgJy10aW1lJ1wiXHJcbiAgICAgICAgICAgIFtpZF09XCJ3aWRnZXRJbnN0YW5jZS5rZXlcIlxyXG4gICAgICAgICAgICBbdHlwZV09XCIndGltZSdcIlxyXG4gICAgICAgICAgICBwbGFjZWhvbGRlcj1cInt7IHdpZGdldEluc3RhbmNlLnBsYWNlaG9sZGVyIH19XCJcclxuICAgICAgICAgICAgKGJsdXIpPVwib25UaW1lUGlja2VyQmx1cigkZXZlbnQpXCJcclxuICAgICAgICAgICAgbWF0SW5wdXRcclxuICAgICAgICAgIC8+XHJcbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdC1lcnJvclwiPlxyXG4gICAgICAgICAge3sgd2lkZ2V0SW5zdGFuY2UuZXJyb3IgfX1cclxuICAgICAgICA8L3NwYW4+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGRpdiAqbmdJZj1cIndpZGdldEluc3RhbmNlLnR5cGUgPT09IHNtYXJ0Rm9ybVdpZGdldFR5cGUuU0VMRUNUXCIgY2xhc3M9XCJ3aWRnZXRDb250YWluZXJcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImxhYmVsQ29udGFpbmVyXCIgKm5nSWY9XCJ3aWRnZXRJbnN0YW5jZS5zaG93TGFiZWxcIj5cclxuICAgICAgICA8aDRcclxuICAgICAgICAgIGNsYXNzPVwie3sgbGFiZWxDb2xvciB9fSBzbWFydC1mb3JtLXdpZGdldC1sYWJlbCB7eyB3aWRnZXRJbnN0YW5jZS5jc3NMYWJlbENsYXNzID8/ICcnIH19XCJcclxuICAgICAgICAgIFtuZ0NsYXNzXT1cImdldExhYmVsTmdDbGFzcygpXCJcclxuICAgICAgICAgIFtuZ1N0eWxlXT1cImdldExhYmVsU3R5bGUoKVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAge3sgZ2V0V2lkZ2V0TGFiZWwod2lkZ2V0SW5zdGFuY2UpIH19XHJcbiAgICAgICAgPC9oND5cclxuICAgICAgICA8bWF0LWhpbnQgKm5nSWY9XCJ3aWRnZXRJbnN0YW5jZT8uaGludD8ucG9zaXRpb24gPT09IFNtYXJ0V2lkZ2V0SGludFBvc2l0aW9uLkxBQkVMXCI+e3tcclxuICAgICAgICAgIHdpZGdldEluc3RhbmNlLmhpbnQ/LnRleHRcclxuICAgICAgICB9fTwvbWF0LWhpbnQ+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8bWF0LWZvcm0tZmllbGRcclxuICAgICAgICBjbGFzcz1cImlucHV0IHdpZGdldENvbnRlbnQge3sgd2lkZ2V0SW5zdGFuY2UuY3NzQ2xhc3MgPz8gJycgfX1cIlxyXG4gICAgICAgIFtuZ0NsYXNzXT1cImdldE5nQ2xhc3MoKVwiXHJcbiAgICAgICAgW25nU3R5bGVdPVwiZ2V0U3R5bGUoKVwiXHJcbiAgICAgICAgYXBwZWFyYW5jZT1cIm91dGxpbmVcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPG1hdC1sYWJlbFxyXG4gICAgICAgICAgY2xhc3M9XCJsYWJlbFwiXHJcbiAgICAgICAgICBbbmdDbGFzc109XCJ3aWRnZXRJbnN0YW5jZS5jc3NMYWJlbENsYXNzID8/ICcnXCJcclxuICAgICAgICAgICpuZ0lmPVwiIXdpZGdldEluc3RhbmNlLnNob3dMYWJlbFwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAge3sgZ2V0V2lkZ2V0TGFiZWwod2lkZ2V0SW5zdGFuY2UpIH19XHJcbiAgICAgICAgPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgPG1hdC1zZWxlY3RcclxuICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwid2lkZ2V0SW5zdGFuY2Uua2V5XCJcclxuICAgICAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwib25WYWx1ZUNoYW5nZT8ubmV4dCgkZXZlbnQudmFsdWUpXCJcclxuICAgICAgICAgIChjbG9zZWQpPVwib25CbHVyPy5uZXh0KHdpZGdldEluc3RhbmNlKVwiXHJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwid2lkZ2V0SW5zdGFuY2UuaXNEaXNhYmxlZCFcIlxyXG4gICAgICAgICAgW2NvbXBhcmVXaXRoXT1cIlxyXG4gICAgICAgICAgICB3aWRnZXRJbnN0YW5jZS5jb21wYXJlV2l0aCA9PSBudWxsID8gY29tcGFyZUl0ZW1zIDogd2lkZ2V0SW5zdGFuY2UuY29tcGFyZVdpdGhcclxuICAgICAgICAgIFwiXHJcbiAgICAgICAgICBwbGFjZWhvbGRlcj1cInt7IHdpZGdldEluc3RhbmNlLnBsYWNlaG9sZGVyID8gd2lkZ2V0SW5zdGFuY2UucGxhY2Vob2xkZXIgOiAnJyB9fVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIHdpZGdldEluc3RhbmNlLnZhbHVlTGlzdFwiPlxyXG4gICAgICAgICAgICA8bWF0LW9wdGdyb3VwXHJcbiAgICAgICAgICAgICAgKm5nSWY9XCJvcHRpb24udHlwZSA9PT0gZ2V0VHlwZSgpLklURU1fR1JPVVBcIlxyXG4gICAgICAgICAgICAgIFtsYWJlbF09XCJvcHRpb24ubGFiZWxcIlxyXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJvcHRpb24uaXNEaXNhYmxlZFwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8bWF0LW9wdGlvblxyXG4gICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGlubmVyT3B0aW9uIG9mIG9wdGlvbi52YWx1ZUxpc3RcIlxyXG4gICAgICAgICAgICAgICAgW3ZhbHVlXT1cImlubmVyT3B0aW9uLnZhbHVlXCJcclxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpbm5lck9wdGlvbi5pc0Rpc2FibGVkXCJcclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8c21hcnQtaWNvblxyXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cImlubmVyT3B0aW9uLmljb25cIlxyXG4gICAgICAgICAgICAgICAgICBbaWNvbl09XCJpbm5lck9wdGlvbi5pY29uXCJcclxuICAgICAgICAgICAgICAgICAgW2NvbG9yXT1cImlubmVyT3B0aW9uLmljb25Db2xvclwiXHJcbiAgICAgICAgICAgICAgICA+PC9zbWFydC1pY29uPlxyXG4gICAgICAgICAgICAgICAge3sgaW5uZXJPcHRpb24ubGFiZWwgfX1cclxuICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgIDwvbWF0LW9wdGdyb3VwPlxyXG4gICAgICAgICAgICA8bWF0LW9wdGlvblxyXG4gICAgICAgICAgICAgICpuZ0lmPVwib3B0aW9uLnR5cGUgPT09IGdldFR5cGUoKS5JVEVNXCJcclxuICAgICAgICAgICAgICBbdmFsdWVdPVwib3B0aW9uLnZhbHVlXCJcclxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwib3B0aW9uLmlzRGlzYWJsZWRcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgPHNtYXJ0LWljb25cclxuICAgICAgICAgICAgICAgICpuZ0lmPVwib3B0aW9uLmljb25cIlxyXG4gICAgICAgICAgICAgICAgW2ljb25dPVwib3B0aW9uLmljb25cIlxyXG4gICAgICAgICAgICAgICAgW2NvbG9yXT1cIm9wdGlvbi5pY29uQ29sb3JcIlxyXG4gICAgICAgICAgICAgID48L3NtYXJ0LWljb25cclxuICAgICAgICAgICAgICA+e3sgb3B0aW9uLmxhYmVsIH19PC9tYXQtb3B0aW9uXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdC1lcnJvclwiPlxyXG4gICAgICAgICAge3sgd2lkZ2V0SW5zdGFuY2UuZXJyb3IgfX1cclxuICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgPHNtYXJ0LWljb25cclxuICAgICAgICAgICpuZ0lmPVwid2lkZ2V0SW5zdGFuY2UuZXJyb3IgJiYgd2lkZ2V0SW5zdGFuY2UuZXJyb3JJY29uXCJcclxuICAgICAgICAgIFtpY29uXT1cIndpZGdldEluc3RhbmNlLmVycm9ySWNvblwiXHJcbiAgICAgICAgICBbY29sb3JdPVwid2lkZ2V0SW5zdGFuY2UuZXJyb3JJY29uQ29sb3IgPz8gJ3dhcm4nXCJcclxuICAgICAgICAgIG1hdFN1ZmZpeFxyXG4gICAgICAgID48L3NtYXJ0LWljb24+XHJcbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgIDxtYXQtaGludFxyXG4gICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICAhd2lkZ2V0SW5zdGFuY2U/LmhpbnQgfHwgd2lkZ2V0SW5zdGFuY2U/LmhpbnQ/LnBvc2l0aW9uID09PSBTbWFydFdpZGdldEhpbnRQb3NpdGlvbi5JTlBVVFxyXG4gICAgICAgIFwiXHJcbiAgICAgICAgPnt7IHdpZGdldEluc3RhbmNlLmhpbnQ/LnRleHQgfX08L21hdC1oaW50XHJcbiAgICAgID5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXZcclxuICAgICAgKm5nSWY9XCJ3aWRnZXRJbnN0YW5jZS50eXBlID09PSBzbWFydEZvcm1XaWRnZXRUeXBlLlNFTEVDVF9NVUxUSVBMRVwiXHJcbiAgICAgIGNsYXNzPVwid2lkZ2V0Q29udGFpbmVyXCJcclxuICAgID5cclxuICAgICAgPGRpdiBjbGFzcz1cImxhYmVsQ29udGFpbmVyXCIgKm5nSWY9XCJ3aWRnZXRJbnN0YW5jZS5zaG93TGFiZWxcIj5cclxuICAgICAgICA8aDRcclxuICAgICAgICAgIGNsYXNzPVwie3sgbGFiZWxDb2xvciB9fSBzbWFydC1mb3JtLXdpZGdldC1sYWJlbCB7eyB3aWRnZXRJbnN0YW5jZS5jc3NMYWJlbENsYXNzID8/ICcnIH19XCJcclxuICAgICAgICAgIFtuZ0NsYXNzXT1cImdldExhYmVsTmdDbGFzcygpXCJcclxuICAgICAgICAgIFtuZ1N0eWxlXT1cImdldExhYmVsU3R5bGUoKVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAge3sgZ2V0V2lkZ2V0TGFiZWwod2lkZ2V0SW5zdGFuY2UpIH19XHJcbiAgICAgICAgPC9oND5cclxuICAgICAgICA8bWF0LWhpbnQgKm5nSWY9XCJ3aWRnZXRJbnN0YW5jZT8uaGludD8ucG9zaXRpb24gPT09IFNtYXJ0V2lkZ2V0SGludFBvc2l0aW9uLkxBQkVMXCI+e3tcclxuICAgICAgICAgIHdpZGdldEluc3RhbmNlLmhpbnQ/LnRleHRcclxuICAgICAgICB9fTwvbWF0LWhpbnQ+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8bWF0LWZvcm0tZmllbGRcclxuICAgICAgICBjbGFzcz1cImlucHV0IHdpZGdldENvbnRlbnQge3sgd2lkZ2V0SW5zdGFuY2UuY3NzQ2xhc3MgPz8gJycgfX1cIlxyXG4gICAgICAgIFtuZ0NsYXNzXT1cImdldE5nQ2xhc3MoKVwiXHJcbiAgICAgICAgW25nU3R5bGVdPVwiZ2V0U3R5bGUoKVwiXHJcbiAgICAgICAgYXBwZWFyYW5jZT1cIm91dGxpbmVcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPG1hdC1sYWJlbFxyXG4gICAgICAgICAgY2xhc3M9XCJsYWJlbFwiXHJcbiAgICAgICAgICBbbmdDbGFzc109XCJ3aWRnZXRJbnN0YW5jZS5jc3NMYWJlbENsYXNzID8/ICcnXCJcclxuICAgICAgICAgICpuZ0lmPVwiIXdpZGdldEluc3RhbmNlLnNob3dMYWJlbFwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAge3sgZ2V0V2lkZ2V0TGFiZWwod2lkZ2V0SW5zdGFuY2UpIH19XHJcbiAgICAgICAgPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgPG1hdC1zZWxlY3RcclxuICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwid2lkZ2V0SW5zdGFuY2Uua2V5XCJcclxuICAgICAgICAgIG11bHRpcGxlXHJcbiAgICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uVmFsdWVDaGFuZ2U/Lm5leHQoJGV2ZW50LnZhbHVlKVwiXHJcbiAgICAgICAgICAoY2xvc2VkKT1cIm9uQmx1cj8ubmV4dCh3aWRnZXRJbnN0YW5jZSlcIlxyXG4gICAgICAgICAgW2Rpc2FibGVkXT1cIndpZGdldEluc3RhbmNlLmlzRGlzYWJsZWQhXCJcclxuICAgICAgICAgIFtjb21wYXJlV2l0aF09XCJcclxuICAgICAgICAgICAgd2lkZ2V0SW5zdGFuY2UuY29tcGFyZVdpdGggPT0gbnVsbCA/IGNvbXBhcmVJdGVtcyA6IHdpZGdldEluc3RhbmNlLmNvbXBhcmVXaXRoXHJcbiAgICAgICAgICBcIlxyXG4gICAgICAgICAgcGxhY2Vob2xkZXI9XCJ7eyB3aWRnZXRJbnN0YW5jZS5wbGFjZWhvbGRlciA/IHdpZGdldEluc3RhbmNlLnBsYWNlaG9sZGVyIDogJycgfX1cIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IG9wdGlvbiBvZiB3aWRnZXRJbnN0YW5jZS52YWx1ZUxpc3RcIj5cclxuICAgICAgICAgICAgPG1hdC1vcHRncm91cFxyXG4gICAgICAgICAgICAgICpuZ0lmPVwib3B0aW9uLnR5cGUgPT09IGdldFR5cGUoKS5JVEVNX0dST1VQXCJcclxuICAgICAgICAgICAgICBbbGFiZWxdPVwib3B0aW9uLmxhYmVsXCJcclxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwib3B0aW9uLmlzRGlzYWJsZWRcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgPG1hdC1vcHRpb25cclxuICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBpbm5lck9wdGlvbiBvZiBvcHRpb24udmFsdWVMaXN0XCJcclxuICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJpbm5lck9wdGlvbi52YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaW5uZXJPcHRpb24uaXNEaXNhYmxlZFwiXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPHNtYXJ0LWljb25cclxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJpbm5lck9wdGlvbi5pY29uXCJcclxuICAgICAgICAgICAgICAgICAgW2ljb25dPVwiaW5uZXJPcHRpb24uaWNvblwiXHJcbiAgICAgICAgICAgICAgICAgIFtjb2xvcl09XCJpbm5lck9wdGlvbi5pY29uQ29sb3JcIlxyXG4gICAgICAgICAgICAgICAgPjwvc21hcnQtaWNvblxyXG4gICAgICAgICAgICAgICAgPnt7IGlubmVyT3B0aW9uLmxhYmVsIH19PC9tYXQtb3B0aW9uXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICA8L21hdC1vcHRncm91cD5cclxuICAgICAgICAgICAgPG1hdC1vcHRpb25cclxuICAgICAgICAgICAgICAqbmdJZj1cIm9wdGlvbi50eXBlID09PSBnZXRUeXBlKCkuSVRFTVwiXHJcbiAgICAgICAgICAgICAgW3ZhbHVlXT1cIm9wdGlvbi52YWx1ZVwiXHJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIm9wdGlvbi5pc0Rpc2FibGVkXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDxzbWFydC1pY29uXHJcbiAgICAgICAgICAgICAgICAqbmdJZj1cIm9wdGlvbi5pY29uXCJcclxuICAgICAgICAgICAgICAgIFtpY29uXT1cIm9wdGlvbi5pY29uXCJcclxuICAgICAgICAgICAgICAgIFtjb2xvcl09XCJvcHRpb24uaWNvbkNvbG9yXCJcclxuICAgICAgICAgICAgICA+PC9zbWFydC1pY29uXHJcbiAgICAgICAgICAgICAgPnt7IG9wdGlvbi5sYWJlbCB9fTwvbWF0LW9wdGlvblxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXQtZXJyb3JcIj5cclxuICAgICAgICAgIHt7IHdpZGdldEluc3RhbmNlLmVycm9yIH19XHJcbiAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgIDxzbWFydC1pY29uXHJcbiAgICAgICAgICAqbmdJZj1cIndpZGdldEluc3RhbmNlLmVycm9yICYmIHdpZGdldEluc3RhbmNlLmVycm9ySWNvblwiXHJcbiAgICAgICAgICBbaWNvbl09XCJ3aWRnZXRJbnN0YW5jZS5lcnJvckljb25cIlxyXG4gICAgICAgICAgW2NvbG9yXT1cIndpZGdldEluc3RhbmNlLmVycm9ySWNvbkNvbG9yID8/ICd3YXJuJ1wiXHJcbiAgICAgICAgICBtYXRTdWZmaXhcclxuICAgICAgICA+PC9zbWFydC1pY29uPlxyXG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICA8bWF0LWhpbnRcclxuICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgIXdpZGdldEluc3RhbmNlPy5oaW50IHx8IHdpZGdldEluc3RhbmNlPy5oaW50Py5wb3NpdGlvbiA9PT0gU21hcnRXaWRnZXRIaW50UG9zaXRpb24uSU5QVVRcclxuICAgICAgICBcIlxyXG4gICAgICAgID57eyB3aWRnZXRJbnN0YW5jZS5oaW50Py50ZXh0IH19PC9tYXQtaGludFxyXG4gICAgICA+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2XHJcbiAgICAgICpuZ0lmPVwid2lkZ2V0SW5zdGFuY2UudHlwZSA9PT0gc21hcnRGb3JtV2lkZ2V0VHlwZS5MQUJFTFwiXHJcbiAgICAgIGNsYXNzPVwibGFiZWwgd2lkZ2V0Q29udGFpbmVyXCJcclxuICAgICAgW25nU3R5bGVdPVwieyB3aWR0aDogd2lkZ2V0SW5zdGFuY2UubWluV2lkdGggKyAncHgnIH1cIlxyXG4gICAgPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwibGFiZWwtdGl0bGUgbGFiZWxDb250YWluZXJcIiBbbmdDbGFzc109XCJ3aWRnZXRJbnN0YW5jZS5jc3NDbGFzcyA/PyAnJ1wiPlxyXG4gICAgICAgIDxoNFxyXG4gICAgICAgICAgY2xhc3M9XCJ7eyBsYWJlbENvbG9yIH19IHNtYXJ0LWZvcm0td2lkZ2V0LWxhYmVsIHt7IHdpZGdldEluc3RhbmNlLmNzc0NsYXNzID8/ICcnIH19XCJcclxuICAgICAgICAgIFtuZ0NsYXNzXT1cImdldE5nQ2xhc3MoKVwiXHJcbiAgICAgICAgICBbbmdTdHlsZV09XCJnZXRTdHlsZSgpXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICB7eyBnZXRXaWRnZXRMYWJlbCh3aWRnZXRJbnN0YW5jZSkgfX1cclxuICAgICAgICA8L2g0PlxyXG4gICAgICAgIDxwPnt7IHdpZGdldEluc3RhbmNlLndpZGdldERlc2NyaXB0aW9uIH19PC9wPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgKm5nSWY9XCJ3aWRnZXRJbnN0YW5jZS50eXBlID09PSBzbWFydEZvcm1XaWRnZXRUeXBlLlRJTUVcIiBjbGFzcz1cIndpZGdldENvbnRhaW5lclwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwibGFiZWxDb250YWluZXJcIiAqbmdJZj1cIndpZGdldEluc3RhbmNlLnNob3dMYWJlbFwiPlxyXG4gICAgICAgIDxoNFxyXG4gICAgICAgICAgY2xhc3M9XCJ7eyBsYWJlbENvbG9yIH19IHNtYXJ0LWZvcm0td2lkZ2V0LWxhYmVsIHt7IHdpZGdldEluc3RhbmNlLmNzc0xhYmVsQ2xhc3MgPz8gJycgfX1cIlxyXG4gICAgICAgICAgW25nQ2xhc3NdPVwiZ2V0TGFiZWxOZ0NsYXNzKClcIlxyXG4gICAgICAgICAgW25nU3R5bGVdPVwiZ2V0TGFiZWxTdHlsZSgpXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICB7eyBnZXRXaWRnZXRMYWJlbCh3aWRnZXRJbnN0YW5jZSkgfX1cclxuICAgICAgICA8L2g0PlxyXG4gICAgICAgIDxtYXQtaGludCAqbmdJZj1cIndpZGdldEluc3RhbmNlPy5oaW50Py5wb3NpdGlvbiA9PT0gU21hcnRXaWRnZXRIaW50UG9zaXRpb24uTEFCRUxcIj57e1xyXG4gICAgICAgICAgd2lkZ2V0SW5zdGFuY2UuaGludD8udGV4dFxyXG4gICAgICAgIH19PC9tYXQtaGludD5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxtYXQtZm9ybS1maWVsZFxyXG4gICAgICAgIGNsYXNzPVwiaW5wdXQgd2lkZ2V0Q29udGVudCB0aW1lIHt7IHdpZGdldEluc3RhbmNlLmNzc0NsYXNzID8/ICcnIH19XCJcclxuICAgICAgICBbbmdDbGFzc109XCJnZXROZ0NsYXNzKClcIlxyXG4gICAgICAgIFtuZ1N0eWxlXT1cImdldFN0eWxlKClcIlxyXG4gICAgICAgIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxtYXQtbGFiZWxcclxuICAgICAgICAgIGNsYXNzPVwibGFiZWxcIlxyXG4gICAgICAgICAgW25nQ2xhc3NdPVwid2lkZ2V0SW5zdGFuY2UuY3NzTGFiZWxDbGFzcyA/PyAnJ1wiXHJcbiAgICAgICAgICAqbmdJZj1cIiF3aWRnZXRJbnN0YW5jZS5zaG93TGFiZWxcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIHt7IGdldFdpZGdldExhYmVsKHdpZGdldEluc3RhbmNlKSB9fVxyXG4gICAgICAgIDwvbWF0LWxhYmVsPlxyXG4gICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJ3aWRnZXRJbnN0YW5jZS5rZXlcIlxyXG4gICAgICAgICAgW2lkXT1cIndpZGdldEluc3RhbmNlLmtleVwiXHJcbiAgICAgICAgICBbdHlwZV09XCIndGltZSdcIlxyXG4gICAgICAgICAgW3ZhbHVlXT1cImdldFRpbWUoKVwiXHJcbiAgICAgICAgICBwbGFjZWhvbGRlcj1cInt7IHdpZGdldEluc3RhbmNlLnBsYWNlaG9sZGVyIH19XCJcclxuICAgICAgICAgIG1hdElucHV0XHJcbiAgICAgICAgICAoYmx1cik9XCJvbkJsdXI/Lm5leHQod2lkZ2V0SW5zdGFuY2UpXCJcclxuICAgICAgICAvPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwibWF0LWVycm9yXCI+XHJcbiAgICAgICAgICB7eyB3aWRnZXRJbnN0YW5jZS5lcnJvciB9fVxyXG4gICAgICAgIDwvc3Bhbj5cclxuICAgICAgICA8c21hcnQtaWNvblxyXG4gICAgICAgICAgKm5nSWY9XCJ3aWRnZXRJbnN0YW5jZS5lcnJvciAmJiB3aWRnZXRJbnN0YW5jZS5lcnJvckljb25cIlxyXG4gICAgICAgICAgW2ljb25dPVwid2lkZ2V0SW5zdGFuY2UuZXJyb3JJY29uXCJcclxuICAgICAgICAgIFtjb2xvcl09XCJ3aWRnZXRJbnN0YW5jZS5lcnJvckljb25Db2xvciA/PyAnd2FybidcIlxyXG4gICAgICAgICAgbWF0U3VmZml4XHJcbiAgICAgICAgPjwvc21hcnQtaWNvbj5cclxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgKm5nSWY9XCJ3aWRnZXRJbnN0YW5jZS50eXBlID09PSBzbWFydEZvcm1XaWRnZXRUeXBlLlRPR0dMRVwiIGNsYXNzPVwid2lkZ2V0Q29udGFpbmVyXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJsYWJlbENvbnRhaW5lclwiICpuZ0lmPVwid2lkZ2V0SW5zdGFuY2Uuc2hvd0xhYmVsXCI+XHJcbiAgICAgICAgPGg0XHJcbiAgICAgICAgICBjbGFzcz1cInt7IGxhYmVsQ29sb3IgfX0gc21hcnQtZm9ybS13aWRnZXQtbGFiZWwge3sgd2lkZ2V0SW5zdGFuY2UuY3NzTGFiZWxDbGFzcyA/PyAnJyB9fVwiXHJcbiAgICAgICAgICBbbmdDbGFzc109XCJnZXRMYWJlbE5nQ2xhc3MoKVwiXHJcbiAgICAgICAgICBbbmdTdHlsZV09XCJnZXRMYWJlbFN0eWxlKClcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIHt7IGdldFdpZGdldExhYmVsKHdpZGdldEluc3RhbmNlKSB9fVxyXG4gICAgICAgIDwvaDQ+XHJcbiAgICAgICAgPG1hdC1oaW50ICpuZ0lmPVwid2lkZ2V0SW5zdGFuY2U/LmhpbnQ/LnBvc2l0aW9uID09PSBTbWFydFdpZGdldEhpbnRQb3NpdGlvbi5MQUJFTFwiPnt7XHJcbiAgICAgICAgICB3aWRnZXRJbnN0YW5jZS5oaW50Py50ZXh0XHJcbiAgICAgICAgfX08L21hdC1oaW50PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdlxyXG4gICAgICAgIGNsYXNzPVwid2lkZ2V0Q29udGVudCAge3sgd2lkZ2V0SW5zdGFuY2UuY3NzQ2xhc3MgPz8gJycgfX1cIlxyXG4gICAgICAgIFtuZ0NsYXNzXT1cImdldE5nQ2xhc3MoKVwiXHJcbiAgICAgICAgW25nU3R5bGVdPVwiZ2V0U3R5bGUoKVwiXHJcbiAgICAgID5cclxuICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZVxyXG4gICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwie3sgd2lkZ2V0SW5zdGFuY2Uua2V5IH19XCJcclxuICAgICAgICAgIHZhbHVlPVwie3sgd2lkZ2V0SW5zdGFuY2UudmFsdWUgfX1cIlxyXG4gICAgICAgICAgKGNoYW5nZSk9XCJvblZhbHVlQ2hhbmdlPy5uZXh0KCRldmVudClcIlxyXG4gICAgICAgICAgW2xhYmVsUG9zaXRpb25dPVwid2lkZ2V0SW5zdGFuY2UudG9nZ2xlTGFiZWxQb3NpdGlvbiA/PyAnYmVmb3JlJ1wiXHJcbiAgICAgICAgICA+e3sgIXdpZGdldEluc3RhbmNlLnNob3dMYWJlbCA/IHdpZGdldEluc3RhbmNlLmxhYmVsIDogJycgfX08L21hdC1zbGlkZS10b2dnbGVcclxuICAgICAgICA+PHNwYW4gY2xhc3M9XCJtYXQtZXJyb3JcIj5cclxuICAgICAgICAgIHt7IHdpZGdldEluc3RhbmNlLmVycm9yIH19XHJcbiAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgIDxzbWFydC1pY29uXHJcbiAgICAgICAgICAqbmdJZj1cIndpZGdldEluc3RhbmNlLmVycm9yICYmIHdpZGdldEluc3RhbmNlLmVycm9ySWNvblwiXHJcbiAgICAgICAgICBbaWNvbl09XCJ3aWRnZXRJbnN0YW5jZS5lcnJvckljb25cIlxyXG4gICAgICAgICAgW2NvbG9yXT1cIndpZGdldEluc3RhbmNlLmVycm9ySWNvbkNvbG9yID8/ICd3YXJuJ1wiXHJcbiAgICAgICAgPjwvc21hcnQtaWNvbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2ICpuZ0lmPVwid2lkZ2V0SW5zdGFuY2UudHlwZSA9PT0gc21hcnRGb3JtV2lkZ2V0VHlwZS5JTkRJQ0FUT1JcIiBjbGFzcz1cIndpZGdldENvbnRhaW5lclwiPlxyXG4gICAgICA8aDRcclxuICAgICAgICAqbmdJZj1cIndpZGdldEluc3RhbmNlLnNob3dMYWJlbFwiXHJcbiAgICAgICAgY2xhc3M9XCJ7eyBsYWJlbENvbG9yIH19IGxhYmVsQ29udGFpbmVyIHt7IHdpZGdldEluc3RhbmNlLmNzc0xhYmVsQ2xhc3MgPz8gJycgfX1cIlxyXG4gICAgICAgIFtuZ0NsYXNzXT1cImdldExhYmVsTmdDbGFzcygpXCJcclxuICAgICAgICBbbmdTdHlsZV09XCJnZXRMYWJlbFN0eWxlKClcIlxyXG4gICAgICA+XHJcbiAgICAgICAge3sgZ2V0V2lkZ2V0TGFiZWwod2lkZ2V0SW5zdGFuY2UpIH19XHJcbiAgICAgIDwvaDQ+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJzbWFydEluZGljYXRvciB3aWRnZXRDb250ZW50XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImluZGljYXRvckl0ZW1zIHt7IHdpZGdldEluc3RhbmNlLmNzc0NsYXNzID8/ICcnIH19XCIgW25nQ2xhc3NdPVwiZ2V0TmdDbGFzcygpXCI+XHJcbiAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIGluZGljYXRvckl0ZW1zOyBsZXQgaSA9IGluZGV4XCJcclxuICAgICAgICAgICAgY2xhc3M9XCJpbmRpY2F0b3JJdGVtXCJcclxuICAgICAgICAgICAgW25nQ2xhc3NdPVwiZ2V0SW5kaWNhdG9ySXRlbUNsYXNzKGkpXCJcclxuICAgICAgICAgID48L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8cCBbbmdDbGFzc109XCJnZXRJbmRpY2F0b3JTdGF0dXNMYWJlbENvbG9yKClcIj5cclxuICAgICAgICAgIHt7IGdldEluZGljYXRvclN0YXR1c0xhYmVsKCkgfX1cclxuICAgICAgICA8L3A+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGRpdiAqbmdJZj1cIndpZGdldEluc3RhbmNlLnR5cGUgPT09IHNtYXJ0Rm9ybVdpZGdldFR5cGUuRklMRV9VUExPQURFUlwiIGNsYXNzPVwid2lkZ2V0Q29udGFpbmVyXCI+XHJcbiAgICAgIDxoNFxyXG4gICAgICAgICpuZ0lmPVwid2lkZ2V0SW5zdGFuY2Uuc2hvd0xhYmVsXCJcclxuICAgICAgICBjbGFzcz1cImxhYmVsQ29udGFpbmVyIHt7IGxhYmVsQ29sb3IgfX0ge3sgd2lkZ2V0SW5zdGFuY2UuY3NzTGFiZWxDbGFzcyA/PyAnJyB9fVwiXHJcbiAgICAgICAgW25nQ2xhc3NdPVwiZ2V0TGFiZWxOZ0NsYXNzKClcIlxyXG4gICAgICAgIFtuZ1N0eWxlXT1cImdldExhYmVsU3R5bGUoKVwiXHJcbiAgICAgID5cclxuICAgICAgICB7eyBnZXRXaWRnZXRMYWJlbCh3aWRnZXRJbnN0YW5jZSkgfX1cclxuICAgICAgPC9oND5cclxuICAgICAgPHNtYXJ0ZmlsZXVwbG9hZGVyXHJcbiAgICAgICAgY2xhc3M9XCJ3aWRnZXRDb250ZW50IHt7IHdpZGdldEluc3RhbmNlLmNzc0NsYXNzID8/ICcnIH19XCJcclxuICAgICAgICBbbmdDbGFzc109XCJnZXROZ0NsYXNzKClcIlxyXG4gICAgICAgIFtuZ1N0eWxlXT1cImdldFN0eWxlKClcIlxyXG4gICAgICAgIFt1cGxvYWRDYWxsYmFja109XCJ1cGxvYWQuYmluZCh0aGlzKVwiXHJcbiAgICAgICAgW2ZpbGVGb3JtYXRzXT1cIndpZGdldEluc3RhbmNlLmZpbGVGb3JtYXRzXCJcclxuICAgICAgICBbbWF4U2l6ZU1iXT1cIndpZGdldEluc3RhbmNlLm1heFNpemVNYlwiXHJcbiAgICAgICAgW2kxOG5dPVwid2lkZ2V0SW5zdGFuY2UuaTE4blwiXHJcbiAgICAgID48L3NtYXJ0ZmlsZXVwbG9hZGVyPlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGRpdiAqbmdJZj1cIndpZGdldEluc3RhbmNlLnR5cGUgPT09IHNtYXJ0Rm9ybVdpZGdldFR5cGUuSU1BR0VcIiBjbGFzcz1cIndpZGdldENvbnRhaW5lclwiPlxyXG4gICAgICA8aDRcclxuICAgICAgICAqbmdJZj1cIndpZGdldEluc3RhbmNlLnNob3dMYWJlbFwiXHJcbiAgICAgICAgY2xhc3M9XCJsYWJlbENvbnRhaW5lciB7eyBsYWJlbENvbG9yIH19IHt7IHdpZGdldEluc3RhbmNlLmNzc0xhYmVsQ2xhc3MgPz8gJycgfX1cIlxyXG4gICAgICAgIFtuZ0NsYXNzXT1cImdldExhYmVsTmdDbGFzcygpXCJcclxuICAgICAgICBbbmdTdHlsZV09XCJnZXRMYWJlbFN0eWxlKClcIlxyXG4gICAgICA+XHJcbiAgICAgICAge3sgZ2V0V2lkZ2V0TGFiZWwod2lkZ2V0SW5zdGFuY2UpIH19XHJcbiAgICAgIDwvaDQ+XHJcbiAgICAgIDxpbWdcclxuICAgICAgICBjbGFzcz1cIndpZGdldENvbnRlbnQge3sgd2lkZ2V0SW5zdGFuY2UuaW1hZ2VDc3MgPz8gJycgfX1cIlxyXG4gICAgICAgIHRpdGxlPVwie3sgd2lkZ2V0SW5zdGFuY2Uua2V5IH19XCJcclxuICAgICAgICBbbmdDbGFzc109XCJnZXROZ0NsYXNzKClcIlxyXG4gICAgICAgIFtuZ1N0eWxlXT1cImdldFN0eWxlKClcIlxyXG4gICAgICAgIFtzcmNdPVwid2lkZ2V0SW5zdGFuY2UudmFsdWVcIlxyXG4gICAgICAvPlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGRpdiAqbmdJZj1cIndpZGdldEluc3RhbmNlLnR5cGUgPT09IHNtYXJ0Rm9ybVdpZGdldFR5cGUuU1ZHXCIgY2xhc3M9XCJ3aWRnZXRDb250YWluZXJcIj5cclxuICAgICAgPGg0XHJcbiAgICAgICAgKm5nSWY9XCJ3aWRnZXRJbnN0YW5jZS5zaG93TGFiZWxcIlxyXG4gICAgICAgIGNsYXNzPVwibGFiZWxDb250YWluZXIge3sgbGFiZWxDb2xvciB9fSB7eyB3aWRnZXRJbnN0YW5jZS5jc3NMYWJlbENsYXNzID8/ICcnIH19XCJcclxuICAgICAgICBbbmdDbGFzc109XCJnZXRMYWJlbE5nQ2xhc3MoKVwiXHJcbiAgICAgICAgW25nU3R5bGVdPVwiZ2V0TGFiZWxTdHlsZSgpXCJcclxuICAgICAgPlxyXG4gICAgICAgIHt7IGdldFdpZGdldExhYmVsKHdpZGdldEluc3RhbmNlKSB9fVxyXG4gICAgICA8L2g0PlxyXG4gICAgICA8ZGl2XHJcbiAgICAgICAgY2xhc3M9XCJ3aWRnZXRDb250ZW50IHt7IHdpZGdldEluc3RhbmNlLmNzc0NsYXNzID8/ICcnIH19XCJcclxuICAgICAgICBbaW5uZXJIVE1MXT1cImdldFdpZGdldFN2Zyh3aWRnZXRJbnN0YW5jZS52YWx1ZSlcIlxyXG4gICAgICAgIFtuZ0NsYXNzXT1cImdldE5nQ2xhc3MoKVwiXHJcbiAgICAgICAgW25nU3R5bGVdPVwiZ2V0U3R5bGUoKVwiXHJcbiAgICAgID48L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgKm5nSWY9XCJ3aWRnZXRJbnN0YW5jZS50eXBlID09PSBzbWFydEZvcm1XaWRnZXRUeXBlLkRJVklERVJcIiBjbGFzcz1cIndpZGdldENvbnRhaW5lclwiPlxyXG4gICAgICA8aHJcclxuICAgICAgICBjbGFzcz1cInNtYXJ0RGl2aWRlciB7eyB3aWRnZXRJbnN0YW5jZS5jc3NDbGFzcyA/PyAnJyB9fVwiXHJcbiAgICAgICAgW25nQ2xhc3NdPVwiZ2V0TmdDbGFzcygpXCJcclxuICAgICAgICBbbmdTdHlsZV09XCJnZXRTdHlsZSgpXCJcclxuICAgICAgLz5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgKm5nSWY9XCJ3aWRnZXRJbnN0YW5jZS50eXBlID09PSBzbWFydEZvcm1XaWRnZXRUeXBlLkJVVFRPTlwiIGNsYXNzPVwid2lkZ2V0Q29udGFpbmVyXCI+XHJcbiAgICAgIDxoNFxyXG4gICAgICAgICpuZ0lmPVwid2lkZ2V0SW5zdGFuY2Uuc2hvd0xhYmVsXCJcclxuICAgICAgICBjbGFzcz1cImxhYmVsQ29udGFpbmVyIHt7IGxhYmVsQ29sb3IgfX0ge3sgd2lkZ2V0SW5zdGFuY2UuY3NzTGFiZWxDbGFzcyA/PyAnJyB9fVwiXHJcbiAgICAgICAgW25nQ2xhc3NdPVwiZ2V0TGFiZWxOZ0NsYXNzKClcIlxyXG4gICAgICAgIFtuZ1N0eWxlXT1cImdldExhYmVsU3R5bGUoKVwiXHJcbiAgICAgID5cclxuICAgICAgICB7eyBnZXRXaWRnZXRMYWJlbCh3aWRnZXRJbnN0YW5jZSkgfX1cclxuICAgICAgPC9oND5cclxuICAgICAgPGRpdlxyXG4gICAgICAgIGNsYXNzPVwid2lkZ2V0Q29udGVudCB7eyB3aWRnZXRJbnN0YW5jZS5jc3NDbGFzcyA/PyAnJyB9fVwiXHJcbiAgICAgICAgW25nQ2xhc3NdPVwiZ2V0TmdDbGFzcygpXCJcclxuICAgICAgICBbbmdTdHlsZV09XCJnZXRTdHlsZSgpXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxidXR0b25cclxuICAgICAgICAgIG1hdC1idXR0b25cclxuICAgICAgICAgIFtuZ0NsYXNzXT1cImdldEJ1dHRvblR5cGUod2lkZ2V0SW5zdGFuY2UudWlBY3Rpb25EZXNjcmlwdG9yKVwiXHJcbiAgICAgICAgICBbY29sb3JdPVwid2lkZ2V0SW5zdGFuY2UudWlBY3Rpb25EZXNjcmlwdG9yPy5jb2xvclwiXHJcbiAgICAgICAgICAoY2xpY2spPVwib25CdXR0b25DbGlja2VkKHdpZGdldEluc3RhbmNlKVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAqbmdJZj1cImlzT25seUljb24od2lkZ2V0SW5zdGFuY2UudWlBY3Rpb25EZXNjcmlwdG9yKTsgdGhlbiBpY29uT25seTsgZWxzZSB0ZXh0XCJcclxuICAgICAgICAgID48L2Rpdj5cclxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjaWNvbk9ubHk+XHJcbiAgICAgICAgICAgIDxzbWFydC1pY29uXHJcbiAgICAgICAgICAgICAgKm5nSWY9XCJ3aWRnZXRJbnN0YW5jZS51aUFjdGlvbkRlc2NyaXB0b3I/Lmljb25cIlxyXG4gICAgICAgICAgICAgIFtpY29uXT1cIndpZGdldEluc3RhbmNlLnVpQWN0aW9uRGVzY3JpcHRvciEuaWNvbiFcIlxyXG4gICAgICAgICAgICAgIFtjb2xvcl09XCJcclxuICAgICAgICAgICAgICAgIHdpZGdldEluc3RhbmNlLnVpQWN0aW9uRGVzY3JpcHRvcj8uaWNvbkNvbG9yID8/XHJcbiAgICAgICAgICAgICAgICB3aWRnZXRJbnN0YW5jZS51aUFjdGlvbkRlc2NyaXB0b3I/LmNvbG9yXHJcbiAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgPjwvc21hcnQtaWNvbj5cclxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICA8bmctdGVtcGxhdGUgI3RleHQ+XHJcbiAgICAgICAgICAgIDxzbWFydC1pY29uXHJcbiAgICAgICAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICAgICAgIHdpZGdldEluc3RhbmNlLnVpQWN0aW9uRGVzY3JpcHRvcj8uaWNvbiAmJlxyXG4gICAgICAgICAgICAgICAgd2lkZ2V0SW5zdGFuY2UudWlBY3Rpb25EZXNjcmlwdG9yPy5pY29uUG9zaXRpb24gPT09ICdQUkUnXHJcbiAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICBbaWNvbl09XCJ3aWRnZXRJbnN0YW5jZS51aUFjdGlvbkRlc2NyaXB0b3IhLmljb24hXCJcclxuICAgICAgICAgICAgICBbY29sb3JdPVwiXHJcbiAgICAgICAgICAgICAgICB3aWRnZXRJbnN0YW5jZS51aUFjdGlvbkRlc2NyaXB0b3I/Lmljb25Db2xvciA/P1xyXG4gICAgICAgICAgICAgICAgd2lkZ2V0SW5zdGFuY2UudWlBY3Rpb25EZXNjcmlwdG9yPy5jb2xvclxyXG4gICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgID48L3NtYXJ0LWljb24+XHJcbiAgICAgICAgICAgIHt7IHdpZGdldEluc3RhbmNlLnVpQWN0aW9uRGVzY3JpcHRvcj8udGl0bGUgfX1cclxuICAgICAgICAgICAgPHNtYXJ0LWljb25cclxuICAgICAgICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgICAgd2lkZ2V0SW5zdGFuY2UudWlBY3Rpb25EZXNjcmlwdG9yPy5pY29uICYmXHJcbiAgICAgICAgICAgICAgICB3aWRnZXRJbnN0YW5jZS51aUFjdGlvbkRlc2NyaXB0b3I/Lmljb25Qb3NpdGlvbiA9PT0gJ1BPU1QnXHJcbiAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICBbaWNvbl09XCJ3aWRnZXRJbnN0YW5jZS51aUFjdGlvbkRlc2NyaXB0b3IhLmljb24hXCJcclxuICAgICAgICAgICAgICBbY29sb3JdPVwiXHJcbiAgICAgICAgICAgICAgICB3aWRnZXRJbnN0YW5jZS51aUFjdGlvbkRlc2NyaXB0b3I/Lmljb25Db2xvciA/P1xyXG4gICAgICAgICAgICAgICAgd2lkZ2V0SW5zdGFuY2UudWlBY3Rpb25EZXNjcmlwdG9yPy5jb2xvclxyXG4gICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgID48L3NtYXJ0LWljb24+XHJcbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJ3aWRnZXRDb250YWluZXJcIj5cclxuICAgICAgPGg0XHJcbiAgICAgICAgY2xhc3M9XCJsYWJlbENvbnRhaW5lclwiXHJcbiAgICAgICAgKm5nSWY9XCJ3aWRnZXRJbnN0YW5jZS50eXBlID09PSBzbWFydEZvcm1XaWRnZXRUeXBlLkNPTVBPTkVOVCAmJiB3aWRnZXRJbnN0YW5jZS5zaG93TGFiZWxcIlxyXG4gICAgICAgIGNsYXNzPVwie3sgbGFiZWxDb2xvciB9fVwiXHJcbiAgICAgID5cclxuICAgICAgICB7eyBnZXRXaWRnZXRMYWJlbCh3aWRnZXRJbnN0YW5jZSkgfX1cclxuICAgICAgPC9oND5cclxuICAgICAgPGRpdiBjbGFzcz1cIndpZGdldENvbnRlbnRcIj5cclxuICAgICAgICA8bmctdGVtcGxhdGUgI2N1c3RvbUNvbXBvbmVudD48L25nLXRlbXBsYXRlPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgKm5nSWY9XCJ3aWRnZXRJbnN0YW5jZS50eXBlID09PSBzbWFydEZvcm1XaWRnZXRUeXBlLlJJQ0hfVEVYVFwiIGNsYXNzPVwid2lkZ2V0Q29udGFpbmVyXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJsYWJlbENvbnRhaW5lclwiPlxyXG4gICAgICAgIDxoNCAqbmdJZj1cIndpZGdldEluc3RhbmNlLnNob3dMYWJlbFwiIGNsYXNzPVwie3sgbGFiZWxDb2xvciB9fVwiPlxyXG4gICAgICAgICAge3sgZ2V0V2lkZ2V0TGFiZWwod2lkZ2V0SW5zdGFuY2UpIH19XHJcbiAgICAgICAgPC9oND5cclxuICAgICAgICA8bWF0LWhpbnQgKm5nSWY9XCJ3aWRnZXRJbnN0YW5jZT8uaGludD8ucG9zaXRpb24gPT09IFNtYXJ0V2lkZ2V0SGludFBvc2l0aW9uLkxBQkVMXCI+e3tcclxuICAgICAgICAgIHdpZGdldEluc3RhbmNlLmhpbnQ/LnRleHRcclxuICAgICAgICB9fTwvbWF0LWhpbnQ+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwid2lkZ2V0Q29udGVudFwiPlxyXG4gICAgICAgIDxxdWlsbC1lZGl0b3JcclxuICAgICAgICAgICNxdWlsbEVkaXRvclxyXG4gICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJ3aWRnZXRJbnN0YW5jZS5rZXlcIlxyXG4gICAgICAgICAgW2lkXT1cIndpZGdldEluc3RhbmNlLmtleVwiXHJcbiAgICAgICAgICBbbW9kdWxlc109XCJ3aWRnZXRJbnN0YW5jZS5pc0Rpc2FibGVkID8gZW1wdHlRdWlsbFRvb2xiYXIgOiB3aWRnZXRJbnN0YW5jZS5xdWlsbE1vZHVsZXNcIlxyXG4gICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIndpZGdldEluc3RhbmNlLnBsYWNlaG9sZGVyXCJcclxuICAgICAgICAgIFtyZWFkT25seV09XCJ3aWRnZXRJbnN0YW5jZS5pc1JlYWRvbmx5XCJcclxuICAgICAgICAgIFttYXhMZW5ndGhdPVwid2lkZ2V0SW5zdGFuY2UubWF4TGVuZ3RoXCJcclxuICAgICAgICAgIChvbkNvbnRlbnRDaGFuZ2VkKT1cIm9uUmljaFRleHRFZGl0b3JDb250ZW50Q2hhbmdlZCgkZXZlbnQpXCJcclxuICAgICAgICA+PC9xdWlsbC1lZGl0b3I+XHJcbiAgICAgICAgPG1hdC1oaW50XHJcbiAgICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgICAhd2lkZ2V0SW5zdGFuY2U/LmhpbnQgfHxcclxuICAgICAgICAgICAgd2lkZ2V0SW5zdGFuY2U/LmhpbnQ/LnBvc2l0aW9uID09PSBTbWFydFdpZGdldEhpbnRQb3NpdGlvbi5JTlBVVFxyXG4gICAgICAgICAgXCJcclxuICAgICAgICAgID57eyB3aWRnZXRJbnN0YW5jZS5oaW50Py50ZXh0IH19PC9tYXQtaGludFxyXG4gICAgICAgID5cclxuICAgICAgICA8bWF0LWhpbnRcclxuICAgICAgICAgICpuZ0lmPVwid2lkZ2V0SW5zdGFuY2Uuc2hvd0NoYXJhY3RlckxpbWl0U3VmZml4ICYmIHdpZGdldEluc3RhbmNlLm1heExlbmd0aFwiXHJcbiAgICAgICAgICBtYXRTdWZmaXhcclxuICAgICAgICAgIGFsaWduPVwiZW5kXCJcclxuICAgICAgICAgIGNsYXNzPVwicmljaC10ZXh0LWVkaXRvci1sZWV3YXktY291bnRlclwiXHJcbiAgICAgICAgICA+e3sgZ2V0UmljaFRleHRFZGl0b3JMZW5ndGhMZWV3YXkoKSB9fTwvbWF0LWhpbnRcclxuICAgICAgICA+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGRpdiAqbmdJZj1cIndpZGdldEluc3RhbmNlLnR5cGUgPT09IHNtYXJ0Rm9ybVdpZGdldFR5cGUuU09SVEFCTEVcIiBjbGFzcz1cIndpZGdldENvbnRhaW5lclwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwibGFiZWxDb250YWluZXJcIj5cclxuICAgICAgICA8aDQgKm5nSWY9XCJ3aWRnZXRJbnN0YW5jZS5zaG93TGFiZWxcIiBjbGFzcz1cInt7IGxhYmVsQ29sb3IgfX1cIj5cclxuICAgICAgICAgIHt7IGdldFdpZGdldExhYmVsKHdpZGdldEluc3RhbmNlKSB9fVxyXG4gICAgICAgIDwvaDQ+XHJcbiAgICAgICAgPG1hdC1oaW50ICpuZ0lmPVwid2lkZ2V0SW5zdGFuY2U/LmhpbnQ/LnBvc2l0aW9uID09PSBTbWFydFdpZGdldEhpbnRQb3NpdGlvbi5MQUJFTFwiPnt7XHJcbiAgICAgICAgICB3aWRnZXRJbnN0YW5jZS5oaW50Py50ZXh0XHJcbiAgICAgICAgfX08L21hdC1oaW50PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cIndpZGdldENvbnRlbnRcIj5cclxuICAgICAgICA8bGliLXNvcnRhYmxlLXdpZGdldFxyXG4gICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJ3aWRnZXRJbnN0YW5jZS5rZXlcIlxyXG4gICAgICAgICAgW3dpZGdldEluc3RhbmNlXT1cIndpZGdldEluc3RhbmNlXCJcclxuICAgICAgICA+PC9saWItc29ydGFibGUtd2lkZ2V0PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgKm5nSWY9XCJ3aWRnZXRJbnN0YW5jZS50eXBlID09PSBzbWFydEZvcm1XaWRnZXRUeXBlLk1BVFJJWFwiIGNsYXNzPVwid2lkZ2V0Q29udGFpbmVyXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwibGFiZWxDb250YWluZXJcIj5cclxuICAgICAgPGg0ICpuZ0lmPVwid2lkZ2V0SW5zdGFuY2Uuc2hvd0xhYmVsXCIgY2xhc3M9XCJ7eyBsYWJlbENvbG9yIH19XCI+XHJcbiAgICAgICAge3sgZ2V0V2lkZ2V0TGFiZWwod2lkZ2V0SW5zdGFuY2UpIH19XHJcbiAgICAgIDwvaDQ+XHJcbiAgICAgIDxtYXQtaGludCAqbmdJZj1cIndpZGdldEluc3RhbmNlPy5oaW50Py5wb3NpdGlvbiA9PT0gU21hcnRXaWRnZXRIaW50UG9zaXRpb24uTEFCRUxcIj57e1xyXG4gICAgICAgIHdpZGdldEluc3RhbmNlLmhpbnQ/LnRleHRcclxuICAgICAgfX08L21hdC1oaW50PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPHRhYmxlIGNsYXNzPVwibWF0cml4VGFibGUgd2lkZ2V0Q29udGVudFwiPlxyXG4gICAgICA8dHI+XHJcbiAgICAgICAgPHRoPjwvdGg+XHJcbiAgICAgICAgPHRoIGNsYXNzPVwib3B0aW9uTGFiZWxcIiAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIHdpZGdldEluc3RhbmNlLnZhbHVlLmNvbHVtbnNcIj5cclxuICAgICAgICAgIHt7IG9wdGlvbi5kaXNwbGF5VmFsdWUgfX1cclxuICAgICAgICA8L3RoPlxyXG4gICAgICA8L3RyPlxyXG4gICAgICA8dHIgKm5nRm9yPVwibGV0IHF1ZXN0aW9uIG9mIHdpZGdldEluc3RhbmNlLnZhbHVlLnJvd3M7IGxldCBpID0gaW5kZXhcIj5cclxuICAgICAgICA8dGggY2xhc3M9XCJxdWVzdGlvbkxhYmVsXCI+XHJcbiAgICAgICAgICA8bGFiZWw+e3sgcXVlc3Rpb24uZGlzcGxheVZhbHVlIH19PC9sYWJlbD5cclxuICAgICAgICA8L3RoPlxyXG5cclxuICAgICAgICA8dGQgY2xhc3M9XCJzZWxlY3RUZFwiICpuZ0Zvcj1cImxldCBvcHRpb24gb2Ygd2lkZ2V0SW5zdGFuY2UudmFsdWUuY29sdW1uczsgbGV0IGogPSBpbmRleFwiPlxyXG4gICAgICAgICAgPG1hdC1yYWRpby1ncm91cFxyXG4gICAgICAgICAgICAqbmdJZj1cIiF3aWRnZXRJbnN0YW5jZS5pc011bHRpcGxlXCJcclxuICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJ3aWRnZXRJbnN0YW5jZS5rZXkgKyAnLicgKyBxdWVzdGlvbi5jb2RlXCJcclxuICAgICAgICAgICAgW25hbWVdPVwiJ3EnICsgaVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxtYXQtcmFkaW8tYnV0dG9uIFt2YWx1ZV09XCJvcHRpb24uY29kZVwiPiA8L21hdC1yYWRpby1idXR0b24+XHJcbiAgICAgICAgICA8L21hdC1yYWRpby1ncm91cD5cclxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJ3aWRnZXRJbnN0YW5jZS5pc011bHRpcGxlXCI+XHJcbiAgICAgICAgICAgIDxtYXQtY2hlY2tib3hcclxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cIndpZGdldEluc3RhbmNlLmtleSArICcuZGF0YS4nICsgcXVlc3Rpb24uY29kZSArICcuJyArIG9wdGlvbi5jb2RlXCJcclxuICAgICAgICAgICAgICBbdmFsdWVdPVwid2lkZ2V0SW5zdGFuY2UudmFsdWVbJ2RhdGEnXVtxdWVzdGlvbi5jb2RlXVtvcHRpb24uY29kZV1cIlxyXG4gICAgICAgICAgICAgIFtjaGVja2VkXT1cInRydWVcIlxyXG4gICAgICAgICAgICA+PC9tYXQtY2hlY2tib3g+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L3RkPlxyXG4gICAgICAgIDxiciAvPlxyXG4gICAgICAgIDxidXR0b24gKm5nSWY9XCJ3aWRnZXRJbnN0YW5jZS5idXR0b25cIiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cInJlbW92ZU1hdHJpeFJvdyhxdWVzdGlvbilcIlxyXG4gICAgICAgICAgPjxzbWFydC1pY29uIGljb249XCJjbG9zZVwiPjwvc21hcnQtaWNvblxyXG4gICAgICAgID48L2J1dHRvbj5cclxuICAgICAgPC90cj5cclxuICAgIDwvdGFibGU+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiAqbmdJZj1cIndpZGdldEluc3RhbmNlLnR5cGUgPT09IHNtYXJ0Rm9ybVdpZGdldFR5cGUuWU9VVFVCRV9QTEFZRVJcIiBjbGFzcz1cIndpZGdldENvbnRhaW5lclwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImxhYmVsQ29udGFpbmVyXCI+XHJcbiAgICAgIDxoNFxyXG4gICAgICAgICpuZ0lmPVwid2lkZ2V0SW5zdGFuY2Uuc2hvd0xhYmVsXCJcclxuICAgICAgICBjbGFzcz1cInt7IGxhYmVsQ29sb3IgfX0ge3sgd2lkZ2V0SW5zdGFuY2UuY3NzTGFiZWxDbGFzcyB9fVwiXHJcbiAgICAgICAgW25nQ2xhc3NdPVwiZ2V0TGFiZWxOZ0NsYXNzKClcIlxyXG4gICAgICAgIFtuZ1N0eWxlXT1cImdldExhYmVsU3R5bGUoKVwiXHJcbiAgICAgID5cclxuICAgICAgICB7eyBnZXRXaWRnZXRMYWJlbCh3aWRnZXRJbnN0YW5jZSkgfX1cclxuICAgICAgPC9oND5cclxuICAgICAgPG1hdC1oaW50ICpuZ0lmPVwid2lkZ2V0SW5zdGFuY2U/LmhpbnQ/LnBvc2l0aW9uID09PSBTbWFydFdpZGdldEhpbnRQb3NpdGlvbi5MQUJFTFwiPnt7XHJcbiAgICAgICAgd2lkZ2V0SW5zdGFuY2UuaGludD8udGV4dFxyXG4gICAgICB9fTwvbWF0LWhpbnQ+XHJcbiAgICA8L2Rpdj5cclxuICAgIDx5b3V0dWJlLXBsYXllclxyXG4gICAgICBbbmdDbGFzc109XCJnZXROZ0NsYXNzKClcIlxyXG4gICAgICBbbmdTdHlsZV09XCJnZXRTdHlsZSgpXCJcclxuICAgICAgdmlkZW9JZD1cInt7IHdpZGdldEluc3RhbmNlLnZpZGVvSWQgfX1cIlxyXG4gICAgICBbd2lkdGhdPVwid2lkZ2V0SW5zdGFuY2Uud2lkdGhcIlxyXG4gICAgICBbaGVpZ2h0XT1cIndpZGdldEluc3RhbmNlLmhlaWdodFwiXHJcbiAgICAgIFtzdGFydFNlY29uZHNdPVwid2lkZ2V0SW5zdGFuY2Uuc3RhcnRTZWNvbmRzXCJcclxuICAgICAgW2VuZFNlY29uZHNdPVwid2lkZ2V0SW5zdGFuY2UuZW5kU2Vjb25kc1wiXHJcbiAgICA+PC95b3V0dWJlLXBsYXllcj5cclxuICAgIDxtYXQtaGludFxyXG4gICAgICAqbmdJZj1cIlxyXG4gICAgICAgICF3aWRnZXRJbnN0YW5jZT8uaGludCB8fCB3aWRnZXRJbnN0YW5jZT8uaGludD8ucG9zaXRpb24gPT09IFNtYXJ0V2lkZ2V0SGludFBvc2l0aW9uLklOUFVUXHJcbiAgICAgIFwiXHJcbiAgICAgID57eyB3aWRnZXRJbnN0YW5jZS5oaW50Py50ZXh0IH19PC9tYXQtaGludFxyXG4gICAgPlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgKm5nSWY9XCJ3aWRnZXRJbnN0YW5jZS50eXBlID09PSBzbWFydEZvcm1XaWRnZXRUeXBlLk1PTlRIX1BJQ0tFUlwiIGNsYXNzPVwid2lkZ2V0Q29udGFpbmVyXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwibGFiZWxDb250YWluZXJcIiAqbmdJZj1cIndpZGdldEluc3RhbmNlLnNob3dMYWJlbFwiPlxyXG4gICAgICA8aDQgY2xhc3M9XCJ7eyBsYWJlbENvbG9yIH19IHNtYXJ0LWZvcm0td2lkZ2V0LWxhYmVsXCI+XHJcbiAgICAgICAge3sgZ2V0V2lkZ2V0TGFiZWwod2lkZ2V0SW5zdGFuY2UpIH19XHJcbiAgICAgIDwvaDQ+XHJcbiAgICAgIDxtYXQtaGludCAqbmdJZj1cIndpZGdldEluc3RhbmNlPy5oaW50Py5wb3NpdGlvbiA9PT0gU21hcnRXaWRnZXRIaW50UG9zaXRpb24uTEFCRUxcIj57e1xyXG4gICAgICAgIHdpZGdldEluc3RhbmNlLmhpbnQ/LnRleHRcclxuICAgICAgfX08L21hdC1oaW50PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8bGliLXNtYXJ0LW1vbnRoLXBpY2tlclxyXG4gICAgICBbd2lkZ2V0SW5zdGFuY2VdPVwid2lkZ2V0SW5zdGFuY2VcIlxyXG4gICAgICAodmFsdWVDaGFuZ2UpPVwiaGFuZGxlWWVhck1vbnRoUGlja2VkKCRldmVudClcIlxyXG4gICAgPjwvbGliLXNtYXJ0LW1vbnRoLXBpY2tlcj5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcbiJdfQ==
|
|
787
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRmb3Jtd2lkZ2V0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NtYXJ0LW5nLWNsaWVudC9zcmMvbGliL3NtYXJ0LWZvcm0vd2lkZ2V0cy9zbWFydGZvcm13aWRnZXQvc21hcnRmb3Jtd2lkZ2V0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NtYXJ0LW5nLWNsaWVudC9zcmMvbGliL3NtYXJ0LWZvcm0vd2lkZ2V0cy9zbWFydGZvcm13aWRnZXQvc21hcnRmb3Jtd2lkZ2V0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDckQsT0FBTyxFQUVMLHVCQUF1QixFQUV2QixTQUFTLEVBR1QsS0FBSyxFQUlMLFNBQVMsRUFDVCxZQUFZLEVBQ1osZ0JBQWdCLEVBQ2hCLGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsV0FBVyxFQUEwQixVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUlqRixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3hDLE9BQU8sTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUU1QixPQUFPLEVBQWMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRzVGLE9BQU8sRUFDTCx3QkFBd0IsRUFDeEIsbUJBQW1CLEVBQ25CLDJCQUEyQixHQUM1QixNQUFNLHdCQUF3QixDQUFDO0FBR2hDLE9BQU8sRUFDTCxvQ0FBb0MsR0FJckMsTUFBTSx1QkFBdUIsQ0FBQztBQUMvQixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxtREFBbUQsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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O3NCQURuQixTQUFTO3VCQUFDLGlCQUFpQixFQUFFLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFO2dCQU85QixLQUFLO3NCQUE5QixTQUFTO3VCQUFDLGFBQWE7Z0JBU0YsT0FBTztzQkFBNUIsU0FBUzt1QkFBQyxTQUFTO2dCQUdwQixpQkFBaUI7c0JBRGhCLFlBQVk7dUJBQUMsd0JBQXdCO2dCQXlIZCxjQUFjO3NCQUFyQyxTQUFTO3VCQUFDLFdBQVc7Z0JBQ0UsY0FBYztzQkFBckMsU0FBUzt1QkFBQyxXQUFXIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ09NTUEsIEVOVEVSIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2tleWNvZGVzJztcclxuaW1wb3J0IHtcclxuICBBZnRlclZpZXdJbml0LFxyXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIENvbXBvbmVudCxcclxuICBDb21wb25lbnRSZWYsXHJcbiAgRWxlbWVudFJlZixcclxuICBJbnB1dCxcclxuICBPbkRlc3Ryb3ksXHJcbiAgT25Jbml0LFxyXG4gIFF1ZXJ5TGlzdCxcclxuICBWaWV3Q2hpbGQsXHJcbiAgVmlld0NoaWxkcmVuLFxyXG4gIFZpZXdDb250YWluZXJSZWYsXHJcbiAgVmlld0VuY2Fwc3VsYXRpb24sXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIFZhbGlkYXRvckZuLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBNYXRBdXRvY29tcGxldGVTZWxlY3RlZEV2ZW50IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYXV0b2NvbXBsZXRlJztcclxuaW1wb3J0IHsgTWF0Q2hpcElucHV0RXZlbnQgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jaGlwcyc7XHJcbmltcG9ydCB7IERvbVNhbml0aXplciwgU2FmZUh0bWwgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcclxuaW1wb3J0IHsgZGVlcEVxdWFsIH0gZnJvbSAnZmFzdC1lcXVhbHMnO1xyXG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XHJcbmltcG9ydCB7IENvbnRlbnRDaGFuZ2UsIFF1aWxsRWRpdG9yQ29tcG9uZW50LCBRdWlsbE1vZHVsZXMgfSBmcm9tICduZ3gtcXVpbGwnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0LCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgbWFwLCBzdGFydFdpdGgsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBDb21wb25lbnRGYWN0b3J5U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2NvbXBvbmVudC1mYWN0b3J5LXNlcnZpY2UvcHJvamVjdHMnO1xyXG5pbXBvcnQgeyBVaUFjdGlvblRvb2xiYXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi92aWV3LWNvbnRleHQvc21hcnQtdWktYWN0aW9uL3VpLWFjdGlvbi10b29sYmFyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7XHJcbiAgU21hcnRGb3JtV2lkZ2V0RGlyZWN0aW9uLFxyXG4gIFNtYXJ0Rm9ybVdpZGdldFR5cGUsXHJcbiAgU21hcnRXaWRnZXRIaW50UG9zaXRpb25FbnVtLFxyXG59IGZyb20gJy4uLy4uL2FwaS9tb2RlbC9tb2RlbHMnO1xyXG5pbXBvcnQgeyBTbWFydEZvcm1TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc21hcnRmb3JtLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTbWFydEJ1dHRvbiwgU21hcnRGb3JtV2lkZ2V0LCBTbWFydEl0ZW0sIFNtYXJ0TWF0cml4IH0gZnJvbSAnLi4vLi4vc21hcnRmb3JtLmZvcm0tbW9kZWwnO1xyXG5pbXBvcnQge1xyXG4gIFNtYXJ0Rm9ybVRleHRGaWVsZEJ1dHRvbkljb25Qb3NpdGlvbixcclxuICBTbWFydFZhbGlkYXRvcixcclxuICBTb3BoaXN0aWNhdGVkVmFsdWVDaGFuZ2UsXHJcbiAgVmFsdWUsXHJcbn0gZnJvbSAnLi4vLi4vc21hcnRmb3JtLm1vZGVsJztcclxuaW1wb3J0IHsgU21hcnRTdHlsZVV0aWxpdHkgfSBmcm9tICcuLi8uLi8uLi92aWV3LWNvbnRleHQvdXRpbGl0eS9zbWFydC1zdHlsZS11dGlsaXR5JztcclxuXHJcbmV4cG9ydCBjbGFzcyBTbWFydFdpZGdldFNldHRpbmdzIHtcclxuICBwdWJsaWMgc3RhdGljIHVzZVV0YyA9IGZhbHNlO1xyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3NtYXJ0Zm9ybXdpZGdldCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3NtYXJ0Zm9ybXdpZGdldC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vc21hcnRmb3Jtd2lkZ2V0LmNvbXBvbmVudC5jc3MnXSxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgU21hcnRmb3Jtd2lkZ2V0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIEFmdGVyVmlld0luaXQge1xyXG4gIHByaXZhdGUgX2Rlc3Ryb3kkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3QoKTtcclxuXHJcbiAgaGlkZVBhc3N3b3JkOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgQElucHV0KCkgZm9ybSE6IEZvcm1Hcm91cDtcclxuICBASW5wdXQoKSB3aWRnZXRJbnN0YW5jZSE6IFNtYXJ0Rm9ybVdpZGdldDxhbnk+O1xyXG4gIEBJbnB1dCgpIG9uQmx1cj86IFN1YmplY3Q8YW55PjtcclxuICBASW5wdXQoKSBvblZhbHVlQ2hhbmdlPzogU3ViamVjdDxhbnk+O1xyXG4gIEBJbnB1dCgpIGxhYmVsQ29sb3I/OiBzdHJpbmc7XHJcbiAgQElucHV0KCkgc29waGlzdGljYXRlZFZhbHVlQ2hhbmdlITogU3ViamVjdDxTb3BoaXN0aWNhdGVkVmFsdWVDaGFuZ2U+O1xyXG5cclxuICBzbWFydEZvcm1XaWRnZXRUeXBlID0gU21hcnRGb3JtV2lkZ2V0VHlwZTtcclxuXHJcbiAgY2Fwc09uOiBhbnk7XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ2NoaXBJbnB1dCcpIGNoaXBJbnB1dENoaWxkPzogRWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50PjtcclxuXHJcbiAgZmlsdGVyZWRWYWx1ZUxpc3Q/OiBPYnNlcnZhYmxlPHN0cmluZ1tdIHwgdW5kZWZpbmVkPjtcclxuXHJcbiAgaGFzRXJyb3I6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBlcnJvcktleT86IHN0cmluZztcclxuXHJcbiAgaW5kaWNhdG9ySXRlbXM/OiBhbnlbXTtcclxuXHJcbiAgLy8gY3VzdG9tQ29tcG9uZW50XHJcbiAgQFZpZXdDaGlsZCgnY3VzdG9tQ29tcG9uZW50JywgeyByZWFkOiBWaWV3Q29udGFpbmVyUmVmIH0pXHJcbiAgY3VzdG9tQ29tcG9uZW50VmNSZWY/OiBWaWV3Q29udGFpbmVyUmVmO1xyXG4gIGN1c3RvbUNvbXBvbmVudFJlZj86IENvbXBvbmVudFJlZjxhbnk+O1xyXG5cclxuICBmaWx0ZXJlZE9wdGlvbnM/OiBPYnNlcnZhYmxlPFNtYXJ0SXRlbTxhbnk+W10+O1xyXG4gIHRvSGlnaGxpZ2h0OiBzdHJpbmcgPSAnJztcclxuXHJcbiAgQFZpZXdDaGlsZCgncXVpbGxFZGl0b3InKSBxdWlsbD86IFF1aWxsRWRpdG9yQ29tcG9uZW50O1xyXG5cclxuICBpc0VudGVyUHJlc3NlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBpc0RhdGVQaWNrZXJSZXF1aXJlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBTbWFydFdpZGdldEhpbnRQb3NpdGlvbiA9IFNtYXJ0V2lkZ2V0SGludFBvc2l0aW9uRW51bTtcclxuXHJcbiAgLy8gdG9vbGJhclxyXG4gIEBWaWV3Q2hpbGQoJ3Rvb2xiYXInKSB0b29sYmFyPzogVWlBY3Rpb25Ub29sYmFyQ29tcG9uZW50O1xyXG5cclxuICBAVmlld0NoaWxkcmVuKFNtYXJ0Zm9ybXdpZGdldENvbXBvbmVudClcclxuICBjaGlsZHJlbldpZGdldHNRTD86IFF1ZXJ5TGlzdDxTbWFydGZvcm13aWRnZXRDb21wb25lbnQ+O1xyXG5cclxuICBlbXB0eVF1aWxsVG9vbGJhcjogUXVpbGxNb2R1bGVzID0ge1xyXG4gICAgdG9vbGJhcjogZmFsc2UsXHJcbiAgfTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHNlcnZpY2U6IFNtYXJ0Rm9ybVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGNmU2VydmljZTogQ29tcG9uZW50RmFjdG9yeVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHNhbml0aXplcjogRG9tU2FuaXRpemVyLFxyXG4gICAgcHVibGljIGNoYW5nZURldGVjdG9yOiBDaGFuZ2VEZXRlY3RvclJlZlxyXG4gICkge31cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMud2lkZ2V0SW5zdGFuY2UudHlwZSA9PT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5DT05UQUlORVIgJiZcclxuICAgICAgdGhpcy53aWRnZXRJbnN0YW5jZS52YWx1ZUxpc3RcclxuICAgICkge1xyXG4gICAgICB0aGlzLndpZGdldEluc3RhbmNlLnZhbHVlTGlzdCA9IHRoaXMuc2VydmljZS5maWx0ZXJXaWRnZXRzQnlWaXNpYmlsaXR5KFxyXG4gICAgICAgIHRoaXMud2lkZ2V0SW5zdGFuY2UudmFsdWVMaXN0XHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmZvcm0udmFsdWVDaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgdGhpcy5nZXRFcnJvck1lc3NhZ2UodGhpcy53aWRnZXRJbnN0YW5jZSk7XHJcbiAgICB9KTtcclxuICAgIHRoaXMub25CbHVyPy5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCkpLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgIHRoaXMuZ2V0RXJyb3JNZXNzYWdlKHRoaXMud2lkZ2V0SW5zdGFuY2UpO1xyXG4gICAgfSk7XHJcbiAgICAvLyBoYW5kbGUgaW5pdGlhbCBlcnJvciBtZXNzYWdlIGZyb20gc2VydmVyXHJcbiAgICB0aGlzLmdldEVycm9yTWVzc2FnZSh0aGlzLndpZGdldEluc3RhbmNlKTtcclxuICAgIGlmIChcclxuICAgICAgdGhpcy53aWRnZXRJbnN0YW5jZS50eXBlID09PSBTbWFydEZvcm1XaWRnZXRUeXBlLklORElDQVRPUiAmJlxyXG4gICAgICB0aGlzLndpZGdldEluc3RhbmNlLmluZGljYXRvclxyXG4gICAgKSB7XHJcbiAgICAgIGlmICh0aGlzLndpZGdldEluc3RhbmNlLmluZGljYXRvcj8uaW5kaWNhdG9yTGVuZ3RoKSB7XHJcbiAgICAgICAgdGhpcy5pbmRpY2F0b3JJdGVtcyA9IG5ldyBBcnJheTxhbnk+KHRoaXMud2lkZ2V0SW5zdGFuY2UuaW5kaWNhdG9yLmluZGljYXRvckxlbmd0aCk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5mb3JtLmNvbnRyb2xzW3RoaXMud2lkZ2V0SW5zdGFuY2UuaW5kaWNhdG9yIS5pbmRpY2F0ZVByb3BlcnR5XS52YWx1ZUNoYW5nZXNcclxuICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKHZhbHVlOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmICh0aGlzLndpZGdldEluc3RhbmNlLnR5cGUgPT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuSU5ESUNBVE9SKSB7XHJcbiAgICAgICAgICAgIHRoaXMud2lkZ2V0SW5zdGFuY2UuaW5kaWNhdG9yIS5pbmRpY2F0b3JWYWx1ZSA9XHJcbiAgICAgICAgICAgICAgdGhpcy53aWRnZXRJbnN0YW5jZS5pbmRpY2F0b3IhLmNoYW5nZUluZGljYXRvclN0YXR1cyh2YWx1ZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLndpZGdldEluc3RhbmNlLnR5cGUgPT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuVEVYVF9GSUVMRCAmJlxyXG4gICAgICB0aGlzLndpZGdldEluc3RhbmNlLnNlbGVjdGlvblxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuZmlsdGVyZWRPcHRpb25zID0gdGhpcy5vblZhbHVlQ2hhbmdlIS5waXBlKFxyXG4gICAgICAgIHN0YXJ0V2l0aCgnJyksXHJcbiAgICAgICAgbWFwKCh2YWx1ZSkgPT4gdGhpcy5fZmlsdGVyKHZhbHVlIHx8ICcnKSksXHJcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLndpZGdldEluc3RhbmNlLnR5cGUgPT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuWU9VVFVCRV9QTEFZRVIpIHtcclxuICAgICAgbGV0IHZpZGVvSWQgPSB0aGlzLnBhcnNlWW91dHViZVVybCh0aGlzLndpZGdldEluc3RhbmNlLmxpbmshKTtcclxuICAgICAgaWYgKHZpZGVvSWQpIHRoaXMud2lkZ2V0SW5zdGFuY2UudmlkZW9JZCA9IHZpZGVvSWQ7XHJcbiAgICAgIGNvbnN0IHRhZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpO1xyXG5cclxuICAgICAgdGFnLnNyYyA9ICdodHRwczovL3d3dy55b3V0dWJlLmNvbS9pZnJhbWVfYXBpJztcclxuICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0YWcpO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBmb3JtQ29udHJvbHM6IHN0cmluZ1tdID0gT2JqZWN0LmtleXModGhpcy5mb3JtLmNvbnRyb2xzKS5maWx0ZXIoXHJcbiAgICAgIChrZXk6IHN0cmluZykgPT5cclxuICAgICAgICBrZXkgPT09IHRoaXMud2lkZ2V0SW5zdGFuY2Uua2V5IHx8IGtleS5zdGFydHNXaXRoKGAke3RoaXMud2lkZ2V0SW5zdGFuY2Uua2V5fS5gKVxyXG4gICAgKTtcclxuXHJcbiAgICBmb3JtQ29udHJvbHMubWFwKChrZXk6IHN0cmluZykgPT4ge1xyXG4gICAgICB0aGlzLmZvcm0uY29udHJvbHNba2V5XS52YWx1ZUNoYW5nZXNcclxuICAgICAgICAucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLCB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKHZhbHVlOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgdGhpcy53aWRnZXRJbnN0YW5jZS50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLlRFWFRfRklFTERfQ0hJUFMgJiZcclxuICAgICAgICAgICAgdGhpcy53aWRnZXRJbnN0YW5jZS50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLlRFWFRfRklFTERfTE9PS1VQXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgY29uc3QgdmFsdWVDaGFuZ2U6IFNvcGhpc3RpY2F0ZWRWYWx1ZUNoYW5nZSA9IHtcclxuICAgICAgICAgICAgICBrZXksXHJcbiAgICAgICAgICAgICAgdmFsdWUsXHJcbiAgICAgICAgICAgICAga2luZDpcclxuICAgICAgICAgICAgICAgIHRoaXMud2lkZ2V0SW5zdGFuY2UudHlwZSA9PT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5TRUxFQ1QgfHxcclxuICAgICAgICAgICAgICAgIHRoaXMud2lkZ2V0SW5zdGFuY2UudHlwZSA9PT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5TRUxFQ1RfTVVMVElQTEUgfHxcclxuICAgICAgICAgICAgICAgIHRoaXMud2lkZ2V0SW5zdGFuY2UudHlwZSA9PT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5SQURJT19CVVRUT05cclxuICAgICAgICAgICAgICAgICAgPyAnc2VsZWN0aW9uJ1xyXG4gICAgICAgICAgICAgICAgICA6ICdiYXNpYycsXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICB0aGlzLnNvcGhpc3RpY2F0ZWRWYWx1ZUNoYW5nZS5uZXh0KHZhbHVlQ2hhbmdlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcGFyc2VZb3V0dWJlVXJsKHVybDogc3RyaW5nKSB7XHJcbiAgICB1cmwucmVwbGFjZSgnL3Nob3J0cy8nLCAnL3dhdGNoP3Y9Jyk7XHJcblxyXG4gICAgdmFyIHJlZ0V4cCA9IC9eLiooKHlvdXR1LmJlXFwvKXwodlxcLyl8KFxcL3VcXC9cXHdcXC8pfChlbWJlZFxcLyl8KHdhdGNoXFw/KSlcXD8/dj89PyhbXiMmP10qKS4qLztcclxuICAgIHZhciBtYXRjaCA9IHVybC5tYXRjaChyZWdFeHApO1xyXG5cclxuICAgIHJldHVybiBtYXRjaCAmJiBtYXRjaFs3XS5sZW5ndGggPT0gMTEgPyBtYXRjaFs3XSA6IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgX2hhc0p1c3RDaGFuZ2VkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIGdldCBoYXNKdXN0Q2hhbmdlZCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9oYXNKdXN0Q2hhbmdlZDtcclxuICB9XHJcbiAgc2V0IGhhc0p1c3RDaGFuZ2VkKGhhc0p1c3RDaGFuZ2VkOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl9oYXNKdXN0Q2hhbmdlZCA9IGhhc0p1c3RDaGFuZ2VkO1xyXG4gICAgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgMjUwKSkudGhlbigoKSA9PiB7XHJcbiAgICAgIHRoaXMuX2hhc0p1c3RDaGFuZ2VkID0gZmFsc2U7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGhhc0NyZWF0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgQFZpZXdDaGlsZCgnZGF0ZUlucHV0JykgZGF0ZUlucHV0Q2hpbGQ/OiBFbGVtZW50UmVmO1xyXG4gIEBWaWV3Q2hpbGQoJ3RpbWVJbnB1dCcpIHRpbWVJbnB1dENoaWxkPzogRWxlbWVudFJlZjtcclxuXHJcbiAgb25EYXRlUGlja2VyQmx1cihldmVudDogYW55KTogdm9pZCB7XHJcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuXHJcbiAgICB0aGlzLm9uQmx1cj8ubmV4dCh0aGlzLndpZGdldEluc3RhbmNlKTtcclxuICAgIHRoaXMuaGFuZGxlRGF0ZUNoYW5nZWQodGhpcy5mb3JtLmNvbnRyb2xzW3RoaXMud2lkZ2V0SW5zdGFuY2Uua2V5IV0udmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgb25UaW1lUGlja2VyQmx1cihldmVudDogYW55KTogdm9pZCB7XHJcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuXHJcbiAgICB0aGlzLm9uQmx1cj8ubmV4dCh0aGlzLndpZGdldEluc3RhbmNlKTtcclxuICAgIHRoaXMuaGFuZGxlVGltZUNoYW5nZWQodGhpcy5mb3JtLmNvbnRyb2xzW2Ake3RoaXMud2lkZ2V0SW5zdGFuY2Uua2V5fS10aW1lYF0udmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMud2lkZ2V0SW5zdGFuY2UudHlwZSA9PT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5DT01QT05FTlQpIHtcclxuICAgICAgdGhpcy5jdXN0b21Db21wb25lbnRSZWYgPSB0aGlzLmNmU2VydmljZS5jcmVhdGVDb21wb25lbnQoXHJcbiAgICAgICAgdGhpcy5jdXN0b21Db21wb25lbnRWY1JlZiEsXHJcbiAgICAgICAgdGhpcy53aWRnZXRJbnN0YW5jZS5jb21wb25lbnQsXHJcbiAgICAgICAgdGhpcy53aWRnZXRJbnN0YW5jZS5pbnB1dFxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChcclxuICAgICAgdGhpcy53aWRnZXRJbnN0YW5jZS50eXBlID09PSBTbWFydEZvcm1XaWRnZXRUeXBlLkRBVEVfVElNRV9QSUNLRVIgfHxcclxuICAgICAgdGhpcy53aWRnZXRJbnN0YW5jZS50eXBlID09PSBTbWFydEZvcm1XaWRnZXRUeXBlLk1PTlRIX1BJQ0tFUlxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuaXNEYXRlUGlja2VyUmVxdWlyZWQgPSAhIXRoaXMud2lkZ2V0SW5zdGFuY2UudmFsaWRhdG9ycz8uc29tZShcclxuICAgICAgICAoc21hcnRWYWxpZGF0b3I6IFNtYXJ0VmFsaWRhdG9yKSA9PiBzbWFydFZhbGlkYXRvci52YWxpZGF0b3IgPT09IFZhbGlkYXRvcnMucmVxdWlyZWRcclxuICAgICAgKTtcclxuXHJcbiAgICAgIGxldCB0aW1lO1xyXG4gICAgICBpZiAodGhpcy53aWRnZXRJbnN0YW5jZS52YWx1ZSkge1xyXG4gICAgICAgIGxldCBkYXRlID0gbmV3IERhdGUodGhpcy53aWRnZXRJbnN0YW5jZS52YWx1ZSk7XHJcbiAgICAgICAgbGV0IGhvdXIgPSBTbWFydFdpZGdldFNldHRpbmdzLnVzZVV0YyA/IGRhdGUuZ2V0VVRDSG91cnMoKSA6IGRhdGUuZ2V0SG91cnMoKTtcclxuICAgICAgICBsZXQgbWluID0gU21hcnRXaWRnZXRTZXR0aW5ncy51c2VVdGMgPyBkYXRlLmdldFVUQ01pbnV0ZXMoKSA6IGRhdGUuZ2V0TWludXRlcygpO1xyXG4gICAgICAgIHRpbWUgPSBTdHJpbmcoaG91cikucGFkU3RhcnQoMiwgJzAnKSArICc6JyArIFN0cmluZyhtaW4pLnBhZFN0YXJ0KDIsICcwJyk7XHJcbiAgICAgICAgdGhpcy53aWRnZXRJbnN0YW5jZS52YWx1ZSA9IG1vbWVudChkYXRlKTtcclxuICAgICAgICBjb25zdCBkYXRlRm9ybUNvbnRyb2wgPSB0aGlzLmZvcm0uY29udHJvbHNbdGhpcy53aWRnZXRJbnN0YW5jZS5rZXldO1xyXG4gICAgICAgIGlmIChkYXRlRm9ybUNvbnRyb2wpIHtcclxuICAgICAgICAgIGRhdGVGb3JtQ29udHJvbC5zZXRWYWx1ZSh0aGlzLndpZGdldEluc3RhbmNlLnZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGltZSA9ICcnO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBsZXQgdmFsaWRhdG9yczogVmFsaWRhdG9yRm5bXSA9IFtdO1xyXG4gICAgICBpZiAodGhpcy53aWRnZXRJbnN0YW5jZS52YWxpZGF0b3JzKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2codGhpcy53aWRnZXRJbnN0YW5jZS52YWxpZGF0b3JzKTtcclxuICAgICAgICB2YWxpZGF0b3JzID0gdGhpcy53aWRnZXRJbnN0YW5jZS52YWxpZGF0b3JzPy5tYXAoKHZhbGlkYXRvcjogU21hcnRWYWxpZGF0b3IpID0+IHtcclxuICAgICAgICAgIHJldHVybiB2YWxpZGF0b3IudmFsaWRhdG9yO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCB0aW1lRm9ybUNvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2wodGltZSwgdmFsaWRhdG9ycyk7XHJcblxyXG4gICAgICBpZiAodGhpcy53aWRnZXRJbnN0YW5jZS5pc0Rpc2FibGVkKSB7XHJcbiAgICAgICAgdGltZUZvcm1Db250cm9sLmRpc2FibGUoKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5mb3JtLmFkZENvbnRyb2woYCR7dGhpcy53aWRnZXRJbnN0YW5jZS5rZXl9LXRpbWVgLCB0aW1lRm9ybUNvbnRyb2wpO1xyXG5cclxuICAgICAgdGhpcy5oYXNDcmVhdGVkID0gdHJ1ZTtcclxuXHJcbiAgICAgIHRoaXMuZm9ybS5jb250cm9sc1t0aGlzLndpZGdldEluc3RhbmNlLmtleSFdLnZhbHVlQ2hhbmdlc1xyXG4gICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCkpXHJcbiAgICAgICAgLnN1YnNjcmliZSgoX21vbWVudDogYW55KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmhhbmRsZURhdGVDaGFuZ2VkKF9tb21lbnQpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB0aGlzLmZvcm0uY29udHJvbHNbYCR7dGhpcy53aWRnZXRJbnN0YW5jZS5rZXl9LXRpbWVgXS52YWx1ZUNoYW5nZXNcclxuICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKHRpbWVWYWx1ZTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmhhbmRsZVRpbWVDaGFuZ2VkKHRpbWVWYWx1ZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBoYW5kbGVEYXRlQ2hhbmdlZChfbW9tZW50OiBhbnkpOiB2b2lkIHtcclxuICAgIGNvbnN0IGlzRGF0ZUZvY3VzZWQgPSBkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSB0aGlzLmRhdGVJbnB1dENoaWxkPy5uYXRpdmVFbGVtZW50O1xyXG4gICAgY29uc3QgaXNUaW1lRm9jdXNlZCA9IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IHRoaXMudGltZUlucHV0Q2hpbGQ/Lm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICBjb25zdCBkYXRlRm9ybUNvbnRyb2wgPSB0aGlzLmZvcm0uY29udHJvbHNbdGhpcy53aWRnZXRJbnN0YW5jZS5rZXkhXTtcclxuICAgIGNvbnN0IHRpbWVGb3JtQ29udHJvbCA9IHRoaXMuZm9ybS5jb250cm9sc1tgJHt0aGlzLndpZGdldEluc3RhbmNlLmtleX0tdGltZWBdO1xyXG5cclxuICAgIGlmIChcclxuICAgICAgIXRoaXMuaXNEYXRlUGlja2VyUmVxdWlyZWQgJiZcclxuICAgICAgdGltZUZvcm1Db250cm9sLmhhc1ZhbGlkYXRvcihWYWxpZGF0b3JzLnJlcXVpcmVkKSAmJlxyXG4gICAgICAhX21vbWVudFxyXG4gICAgKSB7XHJcbiAgICAgIHRpbWVGb3JtQ29udHJvbC5yZW1vdmVWYWxpZGF0b3JzKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xyXG4gICAgICB0aW1lRm9ybUNvbnRyb2wuc2V0VmFsdWUoJycpO1xyXG4gICAgfSBlbHNlIGlmIChcclxuICAgICAgIXRoaXMuaXNEYXRlUGlja2VyUmVxdWlyZWQgJiZcclxuICAgICAgIXRpbWVGb3JtQ29udHJvbC5oYXNWYWxpZGF0b3IoVmFsaWRhdG9ycy5yZXF1aXJlZCkgJiZcclxuICAgICAgX21vbWVudFxyXG4gICAgKSB7XHJcbiAgICAgIHRpbWVGb3JtQ29udHJvbC5hZGRWYWxpZGF0b3JzKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xyXG5cclxuICAgICAgaWYgKHRpbWVGb3JtQ29udHJvbC52YWx1ZSA9PT0gJycpIHtcclxuICAgICAgICB0aW1lRm9ybUNvbnRyb2wuc2V0VmFsdWUodW5kZWZpbmVkKTtcclxuICAgICAgICB0aW1lRm9ybUNvbnRyb2wubWFya0FzVW50b3VjaGVkKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAoIV9tb21lbnQgfHwgaXNEYXRlRm9jdXNlZCB8fCBpc1RpbWVGb2N1c2VkKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5oYXNKdXN0Q2hhbmdlZCkge1xyXG4gICAgICB0aGlzLmhhc0p1c3RDaGFuZ2VkID0gZmFsc2U7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB0aW1lVmFsdWUgPSB0aW1lRm9ybUNvbnRyb2wudmFsdWUgfHwgJzAwOjAwJztcclxuICAgIHRoaXMuaGFzSnVzdENoYW5nZWQgPSB0cnVlO1xyXG5cclxuICAgIGlmICh0aGlzLndpZGdldEluc3RhbmNlLnR5cGUgPT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuREFURV9USU1FX1BJQ0tFUikge1xyXG4gICAgICB0aGlzLnNldERhdGVGb3JtQ29udHJvbChkYXRlRm9ybUNvbnRyb2wsIF9tb21lbnQsIHRpbWVWYWx1ZSk7XHJcbiAgICAgIHRoaXMud2lkZ2V0SW5zdGFuY2UudmFsdWUgPSBkYXRlRm9ybUNvbnRyb2wudmFsdWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBoYW5kbGVUaW1lQ2hhbmdlZCh0aW1lVmFsdWU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgY29uc3QgaXNGb2N1c2VkID0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PT0gdGhpcy50aW1lSW5wdXRDaGlsZD8ubmF0aXZlRWxlbWVudDtcclxuICAgIGNvbnN0IGRhdGVGb3JtQ29udHJvbCA9IHRoaXMuZm9ybS5jb250cm9sc1t0aGlzLndpZGdldEluc3RhbmNlLmtleSFdO1xyXG4gICAgY29uc3QgdGltZUZvcm1Db250cm9sID0gdGhpcy5mb3JtLmNvbnRyb2xzW2Ake3RoaXMud2lkZ2V0SW5zdGFuY2Uua2V5fS10aW1lYF07XHJcblxyXG4gICAgaWYgKFxyXG4gICAgICAhdGhpcy5pc0RhdGVQaWNrZXJSZXF1aXJlZCAmJlxyXG4gICAgICBkYXRlRm9ybUNvbnRyb2wuaGFzVmFsaWRhdG9yKFZhbGlkYXRvcnMucmVxdWlyZWQpICYmXHJcbiAgICAgICF0aW1lVmFsdWVcclxuICAgICkge1xyXG4gICAgICBkYXRlRm9ybUNvbnRyb2wucmVtb3ZlVmFsaWRhdG9ycyhWYWxpZGF0b3JzLnJlcXVpcmVkKTtcclxuICAgICAgZGF0ZUZvcm1Db250cm9sLnNldFZhbHVlKGRhdGVGb3JtQ29udHJvbC52YWx1ZSA/PyAnJyk7XHJcbiAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAhdGhpcy5pc0RhdGVQaWNrZXJSZXF1aXJlZCAmJlxyXG4gICAgICAhZGF0ZUZvcm1Db250cm9sLmhhc1ZhbGlkYXRvcihWYWxpZGF0b3JzLnJlcXVpcmVkKSAmJlxyXG4gICAgICB0aW1lVmFsdWVcclxuICAgICkge1xyXG4gICAgICBkYXRlRm9ybUNvbnRyb2wuc2V0VmFsaWRhdG9ycyhWYWxpZGF0b3JzLnJlcXVpcmVkKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoaXNGb2N1c2VkKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5oYXNKdXN0Q2hhbmdlZCkge1xyXG4gICAgICB0aGlzLmhhc0p1c3RDaGFuZ2VkID0gZmFsc2U7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRpbWVWYWx1ZSkge1xyXG4gICAgICBpZiAodGltZUZvcm1Db250cm9sLmhhc1ZhbGlkYXRvcihWYWxpZGF0b3JzLnJlcXVpcmVkKSkge1xyXG4gICAgICAgIHRpbWVGb3JtQ29udHJvbC5tYXJrQXNEaXJ0eSgpO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgX21vbWVudCA9IGRhdGVGb3JtQ29udHJvbC52YWx1ZTtcclxuXHJcbiAgICBpZiAoIV9tb21lbnQpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuaGFzSnVzdENoYW5nZWQgPSB0cnVlO1xyXG4gICAgaWYgKHRoaXMud2lkZ2V0SW5zdGFuY2UudHlwZSA9PT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5EQVRFX1RJTUVfUElDS0VSKSB7XHJcbiAgICAgIHRoaXMuc2V0RGF0ZUZvcm1Db250cm9sKGRhdGVGb3JtQ29udHJvbCwgX21vbWVudCwgdGltZVZhbHVlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0RGF0ZUZvcm1Db250cm9sKGRhdGVGb3JtQ29udHJvbDogYW55LCBfbW9tZW50OiBhbnksIHRpbWVWYWx1ZTogc3RyaW5nKSB7XHJcbiAgICBpZiAoX21vbWVudCkge1xyXG4gICAgICBsZXQgaG91ciA9IHRpbWVWYWx1ZS5zdWJzdHJpbmcoMCwgMik7XHJcbiAgICAgIGxldCBtaW4gPSB0aW1lVmFsdWUuc3Vic3RyaW5nKDMsIDUpO1xyXG4gICAgICBfbW9tZW50LmhvdXIoaG91cik7XHJcbiAgICAgIF9tb21lbnQubWludXRlKG1pbik7XHJcbiAgICAgIGRhdGVGb3JtQ29udHJvbC5zZXRWYWx1ZShfbW9tZW50KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFRpbWUoKTogc3RyaW5nIHtcclxuICAgIGlmICh0aGlzLndpZGdldEluc3RhbmNlLnR5cGUgPT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuREFURV9USU1FX1BJQ0tFUikge1xyXG4gICAgICByZXR1cm4gdGhpcy53aWRnZXRJbnN0YW5jZS52YWx1ZS50b0lTT1N0cmluZygpLnNwbGl0KCdUJylbMV0uc3Vic3RyaW5nKDAsIDUpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuICcnO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLl9kZXN0cm95JC5uZXh0KCk7XHJcbiAgICB0aGlzLl9kZXN0cm95JC5jb21wbGV0ZSgpO1xyXG4gIH1cclxuXHJcbiAgb25LZXlkb3duKCk6IHZvaWQge1xyXG4gICAgdGhpcy5pc0VudGVyUHJlc3NlZCA9IHRydWU7XHJcblxyXG4gICAgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgNTAwKSkudGhlbigoKSA9PiB7XHJcbiAgICAgIHRoaXMuaXNFbnRlclByZXNzZWQgPSBmYWxzZTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgdG9nZ2xlUGFzc3dvcmRWaXNpYmlsaXR5KGV2ZW50OiBhbnkpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5pc0VudGVyUHJlc3NlZCkge1xyXG4gICAgICB0aGlzLmhpZGVQYXNzd29yZCA9ICF0aGlzLmhpZGVQYXNzd29yZDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldE5nQ2xhc3MoKTogeyBbY2xhc3NOYW1lOiBzdHJpbmddOiBib29sZWFuIH0ge1xyXG4gICAgcmV0dXJuIFNtYXJ0U3R5bGVVdGlsaXR5LmdldE5nQ2xhc3Nlcyh0aGlzLndpZGdldEluc3RhbmNlLnN0eWxlKTtcclxuICB9XHJcblxyXG4gIGdldFN0eWxlKCk6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIHwgbnVtYmVyIH0ge1xyXG4gICAgaWYgKCF0aGlzLndpZGdldEluc3RhbmNlLnN0eWxlKSB7XHJcbiAgICAgIHRoaXMud2lkZ2V0SW5zdGFuY2Uuc3R5bGUgPSB7XHJcbiAgICAgICAgY2xhc3Nlc1RvQWRkOiBbXSxcclxuICAgICAgICBjbGFzc2VzVG9SZW1vdmU6IFtdLFxyXG4gICAgICAgIHN0eWxlOiB7fSxcclxuICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoISgnd2lkdGgnIGluIHRoaXMud2lkZ2V0SW5zdGFuY2Uuc3R5bGUuc3R5bGUpICYmICdtaW5XaWR0aCcgaW4gdGhpcy53aWRnZXRJbnN0YW5jZSkge1xyXG4gICAgICB0aGlzLndpZGdldEluc3RhbmNlLnN0eWxlLnN0eWxlWyd3aWR0aCddID0gYCR7dGhpcy53aWRnZXRJbnN0YW5jZS5taW5XaWR0aH1weGA7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gU21hcnRTdHlsZVV0aWxpdHkuZ2V0TmdTdHlsZXModGhpcy53aWRnZXRJbnN0YW5jZS5zdHlsZSk7XHJcbiAgfVxyXG5cclxuICBnZXRMYWJlbE5nQ2xhc3MoKTogeyBbY2xhc3NOYW1lOiBzdHJpbmddOiBib29sZWFuIH0ge1xyXG4gICAgaWYgKCdsYWJlbFN0eWxlJyBpbiB0aGlzLndpZGdldEluc3RhbmNlKSB7XHJcbiAgICAgIHJldHVybiBTbWFydFN0eWxlVXRpbGl0eS5nZXROZ0NsYXNzZXModGhpcy53aWRnZXRJbnN0YW5jZS5sYWJlbFN0eWxlKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4ge307XHJcbiAgfVxyXG5cclxuICBnZXRMYWJlbFN0eWxlKCk6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIHwgbnVtYmVyIH0ge1xyXG4gICAgaWYgKCdsYWJlbFN0eWxlJyBpbiB0aGlzLndpZGdldEluc3RhbmNlKSB7XHJcbiAgICAgIHJldHVybiBTbWFydFN0eWxlVXRpbGl0eS5nZXROZ1N0eWxlcyh0aGlzLndpZGdldEluc3RhbmNlLmxhYmVsU3R5bGUpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB7fTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENoYW5nZSBoYW5kbGVyIGZvciB0aGUgcG90ZW50aWFsbHkgcHJlc2VudCBRdWlsbCBlZGl0b3IsIGVuZm9yY2luZyBtYXggbGVuZ3RoIGxpbWl0cyBpZlxyXG4gICAqIG5lY2Vzc2FyeS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSBjaGFuZ2UgdGhlIHtAbGluayBDb250ZW50Q2hhbmdlfSB0aGUgUXVpbGwgZWRpdG9yIGVtaXRzXHJcbiAgICogQHJldHVybnMge0Bjb2RlIHZvaWR9XHJcbiAgICovXHJcbiAgb25SaWNoVGV4dEVkaXRvckNvbnRlbnRDaGFuZ2VkKGNoYW5nZTogQ29udGVudENoYW5nZSk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMud2lkZ2V0SW5zdGFuY2UudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5SSUNIX1RFWFQpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghdGhpcy53aWRnZXRJbnN0YW5jZS5tYXhMZW5ndGgpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIHdlIGFyZSBwZXJtaXR0ZWQgYSBudW1iZXIgb25lIGdyZWF0ZXIgdGhhbiB0aGUgcmVxdWVzdGVkOiBUaGUgcXVpbGwgZWRpdG9yIGNvbnRhaW5zIGFuXHJcbiAgICAvLyB1bnJlbW92YWJsZSBuZXctbGluZSBjaGFyYWN0ZXIgYXQgdGhlIGVuZCBvZiBpdHMgY29udGVudC5cclxuICAgIGNvbnN0IG1heExlbmd0aDogbnVtYmVyID0gdGhpcy53aWRnZXRJbnN0YW5jZS5tYXhMZW5ndGggKyAxO1xyXG4gICAgaWYgKGNoYW5nZS50ZXh0Lmxlbmd0aCA8PSBtYXhMZW5ndGgpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGluc2VydE9wQ291bnQ6IG51bWJlciA9IGNoYW5nZS5kZWx0YS5vcHM/LmZpbHRlcigoaXQpID0+ICEhaXQuaW5zZXJ0KS5sZW5ndGggPz8gMDtcclxuICAgIGlmIChpbnNlcnRPcENvdW50ID4gMCkge1xyXG4gICAgICB0aGlzLnF1aWxsPy5xdWlsbEVkaXRvci5zZXRDb250ZW50cyhjaGFuZ2Uub2xkRGVsdGEsICdzaWxlbnQnKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENhbGN1bGF0ZXMgdGhlIG51bWJlciBvZiByZW1haW5pbmcgdXNlci1zcGFjZSBjaGFyYWN0ZXJzIGFsbG93ZWQgdG8gYmUgZW50ZXJlZCBpbnRvIHRoZSBRdWlsbFxyXG4gICAqIGVkaXRvci5cclxuICAgKlxyXG4gICAqIDxwPlxyXG4gICAqIFRoZSByZWFsIGxlbmd0aCBvZiB0aGUgZWRpdG9yJ3MgY29udGVudCBtYXkgYmUgbXVjaCBsb25nZXIgLSBhcyBpdCBpcyBwZXJzaXN0ZWQgYXMgYW4gSFRNTFxyXG4gICAqIGRvY3VtZW50IGZyYWdtZW50IGJlaGluZCB0aGUgc2NlbmVzLiBUaGlzIG1ldGhvZCBpcyBjb25jZXJuZWQgYnkgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIHRoZVxyXG4gICAqIHVzZXIgcGVyY2VpdmVzLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMgdGhlIHtAbGluayBudW1iZXJ9IG9mIHJlbWFpbmluZyBwZXJtaXR0ZWQgY2hhcmFjdGVycyB0aGUgdXNlciBtYXkgaW5wdXQsIG9yIHtAY29kZSAtMX1cclxuICAgKiAgICAgICAgICBpZiB0aGUgbGVld2F5IGlzIG5vdCBpbnRlcnByZXRlZCBpbiB0aGUgY29tcG9uZW50J3MgY3VycmVudCBzdGF0ZVxyXG4gICAqL1xyXG4gIGdldFJpY2hUZXh0RWRpdG9yTGVuZ3RoTGVld2F5KCk6IG51bWJlciB7XHJcbiAgICBpZiAodGhpcy53aWRnZXRJbnN0YW5jZS50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLlJJQ0hfVEVYVCkge1xyXG4gICAgICByZXR1cm4gLTE7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF0aGlzLndpZGdldEluc3RhbmNlLm1heExlbmd0aCkge1xyXG4gICAgICByZXR1cm4gLTE7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gd2UgYXJlIHBlcm1pdHRlZCBhIG51bWJlciBvbmUgZ3JlYXRlciB0aGFuIHRoZSByZXF1ZXN0ZWQ6IFRoZSBxdWlsbCBlZGl0b3IgY29udGFpbnMgYW5cclxuICAgIC8vIHVucmVtb3ZhYmxlIG5ldy1saW5lIGNoYXJhY3RlciBhdCB0aGUgZW5kIG9mIGl0cyBjb250ZW50LlxyXG4gICAgY29uc3QgbWF4TGVuZ3RoOiBudW1iZXIgPSB0aGlzLndpZGdldEluc3RhbmNlLm1heExlbmd0aCArIDE7XHJcbiAgICBpZiAodGhpcy5xdWlsbCkge1xyXG4gICAgICAvLyB0aGlzIGlzIHRoZSBpbnRlbmRlZCBwYXRoICh1c2VyIGlucHV0KTpcclxuICAgICAgcmV0dXJuIG1heExlbmd0aCAtIHRoaXMucXVpbGwucXVpbGxFZGl0b3IuZ2V0VGV4dCgpLmxlbmd0aDtcclxuICAgIH1cclxuXHJcbiAgICAvLyBmYWxsYmFjayB0byB0aGUgcmF3IEhUTUwgY29udGVudDpcclxuICAgIHJldHVybiBtYXhMZW5ndGggLSB0aGlzLmZvcm0uY29udHJvbHNbdGhpcy53aWRnZXRJbnN0YW5jZS5rZXldLnZhbHVlLmxlbmd0aDtcclxuICB9XHJcblxyXG4gIGFkZE9uQmx1ciA9IHRydWU7XHJcbiAgcmVhZG9ubHkgc2VwYXJhdG9yS2V5c0NvZGVzID0gW0VOVEVSLCBDT01NQV0gYXMgY29uc3Q7XHJcbiAgcmVhZG9ubHkgZW1wdHlTZXBhcmF0b3JLZXlzQ29kZXMgPSBbXSBhcyBjb25zdDtcclxuXHJcbiAgYWRkKGV2ZW50OiBNYXRDaGlwSW5wdXRFdmVudCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMud2lkZ2V0SW5zdGFuY2UudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5URVhUX0ZJRUxEX0NISVBTKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB2YWx1ZSA9IChldmVudC52YWx1ZSB8fCAnJykudHJpbSgpO1xyXG4gICAgaWYgKHRoaXMuc2V0VGV4dEZpZWxkQ2hpcHNWYWx1ZSh2YWx1ZSkpIHtcclxuICAgICAgY29uc3QgdmFsdWVDaGFuZ2U6IFNvcGhpc3RpY2F0ZWRWYWx1ZUNoYW5nZSA9IHtcclxuICAgICAgICBrZXk6IHRoaXMud2lkZ2V0SW5zdGFuY2Uua2V5LFxyXG4gICAgICAgIHZhbHVlOiB0aGlzLmZvcm0uY29udHJvbHNbdGhpcy53aWRnZXRJbnN0YW5jZS5rZXldLnZhbHVlLFxyXG4gICAgICAgIGtpbmQ6ICdzZWxlY3Rpb24nLFxyXG4gICAgICB9O1xyXG4gICAgICB0aGlzLnNvcGhpc3RpY2F0ZWRWYWx1ZUNoYW5nZS5uZXh0KHZhbHVlQ2hhbmdlKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBDbGVhciB0aGUgaW5wdXQgdmFsdWVcclxuICAgIGV2ZW50LmNoaXBJbnB1dCEuY2xlYXIoKTtcclxuICAgIHRoaXMuZm9ybS5jb250cm9sc1t0aGlzLndpZGdldEluc3RhbmNlLmtleV0ubWFya0FzVG91Y2hlZCgpO1xyXG4gIH1cclxuXHJcbiAgcmVtb3ZlKHZhbHVlOiBTbWFydEZvcm1XaWRnZXQ8YW55Pik6IHZvaWQge1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLndpZGdldEluc3RhbmNlLnR5cGUgPT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuVEVYVF9GSUVMRF9DSElQUyB8fFxyXG4gICAgICB0aGlzLndpZGdldEluc3RhbmNlLnR5cGUgPT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuVEVYVF9GSUVMRF9MT09LVVBcclxuICAgICkge1xyXG4gICAgICBjb25zdCBpbmRleCA9IHRoaXMuZm9ybS5jb250cm9sc1t0aGlzLndpZGdldEluc3RhbmNlLmtleV0udmFsdWUuaW5kZXhPZih2YWx1ZSk7XHJcblxyXG4gICAgICBpZiAoaW5kZXggPj0gMCkge1xyXG4gICAgICAgIHRoaXMuZm9ybS5jb250cm9sc1t0aGlzLndpZGdldEluc3RhbmNlLmtleV0udmFsdWUuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICB0aGlzLmZvcm0uY29udHJvbHNbdGhpcy53aWRnZXRJbnN0YW5jZS5rZXldLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgICAgICBjb25zdCB2YWx1ZUNoYW5nZTogU29waGlzdGljYXRlZFZhbHVlQ2hhbmdlID0ge1xyXG4gICAgICAgICAga2V5OiB0aGlzLndpZGdldEluc3RhbmNlLmtleSxcclxuICAgICAgICAgIHZhbHVlOiB0aGlzLmZvcm0uY29udHJvbHNbdGhpcy53aWRnZXRJbnN0YW5jZS5rZXldLnZhbHVlLFxyXG4gICAgICAgICAga2luZDogJ3NlbGVjdGlvbicsXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLnNvcGhpc3RpY2F0ZWRWYWx1ZUNoYW5nZS5uZXh0KHZhbHVlQ2hhbmdlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2VsZWN0ZWQoZXZlbnQ6IE1hdEF1dG9jb21wbGV0ZVNlbGVjdGVkRXZlbnQsIHdpZGdldEluc3RhbmNlOiBTbWFydEZvcm1XaWRnZXQ8YW55Pik6IHZvaWQge1xyXG4gICAgbGV0IHZhbHVlID0gZXZlbnQub3B0aW9uLnZpZXdWYWx1ZTtcclxuICAgIGlmICh0aGlzLnNldFRleHRGaWVsZENoaXBzVmFsdWUodmFsdWUpKSB7XHJcbiAgICAgIGlmIChcclxuICAgICAgICB3aWRnZXRJbnN0YW5jZS50eXBlID09PSBTbWFydEZvcm1XaWRnZXRUeXBlLlRFWFRfRklFTERfQ0hJUFMgfHxcclxuICAgICAgICB3aWRnZXRJbnN0YW5jZS50eXBlID09PSBTbWFydEZvcm1XaWRnZXRUeXBlLlRFWFRfRklFTERfTE9PS1VQXHJcbiAgICAgICkge1xyXG4gICAgICAgIGNvbnN0IHZhbHVlQ2hhbmdlOiBTb3BoaXN0aWNhdGVkVmFsdWVDaGFuZ2UgPSB7XHJcbiAgICAgICAgICBrZXk6IHdpZGdldEluc3RhbmNlLmtleSxcclxuICAgICAgICAgIHZhbHVlOiB0aGlzLmZvcm0uY29udHJvbHNbd2lkZ2V0SW5zdGFuY2Uua2V5XS52YWx1ZSxcclxuICAgICAgICAgIGtpbmQ6ICdzZWxlY3Rpb24nLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5zb3BoaXN0aWNhdGVkVmFsdWVDaGFuZ2UubmV4dCh2YWx1ZUNoYW5nZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0VGV4dEZpZWxkQ2hpcHNWYWx1ZSh2YWx1ZTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICBpZiAodGhpcy53aWRnZXRJbnN0YW5jZS50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLlRFWFRfRklFTERfQ0hJUFMpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgKHRoaXMud2lkZ2V0SW5zdGFuY2UubWF4VmFsdWVzICYmXHJcbiAgICAgICAgICB0aGlzLndpZGdldEluc3RhbmNlLnZhbHVlIS5sZW5ndGggPCB0aGlzLndpZGdldEluc3RhbmNlLm1heFZhbHVlcykgfHxcclxuICAgICAgICAhdGhpcy53aWRnZXRJbnN0YW5jZS5tYXhWYWx1ZXNcclxuICAgICAgKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmZvcm0uY29udHJvbHNbdGhpcy53aWRnZXRJbnN0YW5jZS5rZXldLnZhbHVlKSB7XHJcbiAgICAgICAgICBsZXQgdmFsdWVzID0gbmV3IEFycmF5PE9iamVjdD4oKTtcclxuICAgICAgICAgIHRoaXMud2lkZ2V0SW5zdGFuY2UudmFsdWUgPSB2YWx1ZXM7XHJcbiAgICAgICAgICB0aGlzLmZvcm0uY29udHJvbHNbdGhpcy53aWRnZXRJbnN0YW5jZS5rZXldLnNldFZhbHVlKHZhbHVlcyk7XHJcbiAgICAgICAgICB0aGlzLmZvcm0uY29udHJvbHNbdGhpcy53aWRnZXRJbnN0YW5jZS5rZXldLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5mb3JtLmNvbnRyb2xzW3RoaXMud2lkZ2V0SW5zdGFuY2Uua2V5XS52YWx1ZS5wdXNoKHZhbHVlKTtcclxuICAgICAgICB0aGlzLmZvcm0uY29udHJvbHNbdGhpcy53aWRnZXRJbnN0YW5jZS5rZXldLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgZ2V0RGlyZWN0aW9uKCk6IHN0cmluZyB7XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMud2lkZ2V0SW5zdGFuY2UudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5DT05UQUlORVIgJiZcclxuICAgICAgdGhpcy53aWRnZXRJbnN0YW5jZS50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLkNIRUNLX0JPWCAmJlxyXG4gICAgICB0aGlzLndpZGdldEluc3RhbmNlLnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuUkFESU9fQlVUVE9OXHJcbiAgICApIHtcclxuICAgICAgcmV0dXJuICcnO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMud2lkZ2V0SW5zdGFuY2UuZGlyZWN0aW9uID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgcmV0dXJuICdkaXJlY3Rpb24tcm93JztcclxuICAgIH0gZWxzZSBpZiAodGhpcy53aWRnZXRJbnN0YW5jZS5kaXJlY3Rpb24gPT09IFNtYXJ0Rm9ybVdpZGdldERpcmVjdGlvbi5DT0wpIHtcclxuICAgICAgcmV0dXJuICdkaXJlY3Rpb24tY29sJztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiAnZGlyZWN0aW9uLXJvdyc7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzbWFydEZvcm1UZXh0RmllbGRCdXR0b25JY29uUG9zaXRpb24oKTogdHlwZW9mIFNtYXJ0Rm9ybVRleHRGaWVsZEJ1dHRvbkljb25Qb3NpdGlvbiB7XHJcbiAgICByZXR1cm4gU21hcnRGb3JtVGV4dEZpZWxkQnV0dG9uSWNvblBvc2l0aW9uO1xyXG4gIH1cclxuXHJcbiAgZ2V0VHlwZSgpOiB0eXBlb2YgU21hcnRGb3JtV2lkZ2V0VHlwZSB7XHJcbiAgICByZXR1cm4gU21hcnRGb3JtV2lkZ2V0VHlwZTtcclxuICB9XHJcblxyXG4gIGdldFdpZGdldExhYmVsKHdpZGdldDogU21hcnRGb3JtV2lkZ2V0PGFueT4pOiBzdHJpbmcge1xyXG4gICAgaWYgKHdpZGdldC50eXBlID09PSBTbWFydEZvcm1XaWRnZXRUeXBlLkNPTlRBSU5FUikge1xyXG4gICAgICByZXR1cm4gJyc7XHJcbiAgICB9XHJcbiAgICBpZiAod2lkZ2V0LmxhYmVsID09PSAnJykge1xyXG4gICAgICByZXR1cm4gd2lkZ2V0LmxhYmVsO1xyXG4gICAgfVxyXG4gICAgbGV0IGlzUmVxdWlyZWQgPSBmYWxzZTtcclxuICAgIGlmIChcclxuICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuTEFCRUwgJiZcclxuICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuVElNRSAmJlxyXG4gICAgICB3aWRnZXQudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5UT0dHTEUgJiZcclxuICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuSU5ESUNBVE9SICYmXHJcbiAgICAgIHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLkZJTEVfVVBMT0FERVIgJiZcclxuICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuSU1BR0UgJiZcclxuICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuU1ZHICYmXHJcbiAgICAgIHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLkRJVklERVIgJiZcclxuICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuQlVUVE9OICYmXHJcbiAgICAgIHdpZGdldC50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLkNPTVBPTkVOVFxyXG4gICAgKSB7XHJcbiAgICAgIGlzUmVxdWlyZWQgPSB3aWRnZXQudmFsaWRhdG9ycz8ubGVuZ3RoID8gdGhpcy5maWVsZElzUmVxdWlyZWQoKSAmJiAhIXdpZGdldC5zaG93TGFiZWwgOiBmYWxzZTtcclxuICAgIH0gZWxzZSBpZiAod2lkZ2V0LnR5cGUgPT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuTEFCRUwpIHtcclxuICAgICAgaXNSZXF1aXJlZCA9IHdpZGdldC5tYXJrQXNSZXF1aXJlZCA/IHRydWUgOiBmYWxzZTtcclxuICAgIH1cclxuICAgIHJldHVybiBgJHt3aWRnZXQubGFiZWx9JHtpc1JlcXVpcmVkID8gJyAqJyA6ICcnfWA7XHJcbiAgfVxyXG5cclxuICBnZXRXaWRnZXRTdmcodmFsdWU/OiBzdHJpbmcpOiBTYWZlSHRtbCB8IG51bGwge1xyXG4gICAgbGV0IHNhZmVWYWx1ZSA9IHZhbHVlID8/ICcnO1xyXG4gICAgcmV0dXJuIHRoaXMuc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RIdG1sKHNhZmVWYWx1ZSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGZpZWxkSXNSZXF1aXJlZCgpOiBib29sZWFuIHtcclxuICAgIGxldCB2YWx1ZSA9IGZhbHNlO1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLndpZGdldEluc3RhbmNlLnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuQ09OVEFJTkVSICYmXHJcbiAgICAgIHRoaXMud2lkZ2V0SW5zdGFuY2UudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5MQUJFTCAmJlxyXG4gICAgICB0aGlzLndpZGdldEluc3RhbmNlLnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuVElNRSAmJlxyXG4gICAgICB0aGlzLndpZGdldEluc3RhbmNlLnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuVE9HR0xFICYmXHJcbiAgICAgIHRoaXMud2lkZ2V0SW5zdGFuY2UudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5JTkRJQ0FUT1IgJiZcclxuICAgICAgdGhpcy53aWRnZXRJbnN0YW5jZS50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLkZJTEVfVVBMT0FERVIgJiZcclxuICAgICAgdGhpcy53aWRnZXRJbnN0YW5jZS50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLklNQUdFICYmXHJcbiAgICAgIHRoaXMud2lkZ2V0SW5zdGFuY2UudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5TVkcgJiZcclxuICAgICAgdGhpcy53aWRnZXRJbnN0YW5jZS50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLkRJVklERVIgJiZcclxuICAgICAgdGhpcy53aWRnZXRJbnN0YW5jZS50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLkJVVFRPTiAmJlxyXG4gICAgICB0aGlzLndpZGdldEluc3RhbmNlLnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuQ09NUE9ORU5UICYmXHJcbiAgICAgIHRoaXMud2lkZ2V0SW5zdGFuY2UudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5ZT1VUVUJFX1BMQVlFUlxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMud2lkZ2V0SW5zdGFuY2UudmFsaWRhdG9ycz8uZm9yRWFjaCgodmFsaWRhdG9yOiBTbWFydFZhbGlkYXRvcikgPT4ge1xyXG4gICAgICAgIGlmICh2YWxpZGF0b3IudmFsaWRhdG9yID09IFZhbGlkYXRvcnMucmVxdWlyZWQpIHZhbHVlID0gdHJ1ZTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdmFsdWU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaGFzQ3VzdG9tRXJyb3Iod2lkZ2V0OiBTbWFydEZvcm1XaWRnZXQ8YW55PiwgdmFsaWRhdG9yOiBTbWFydFZhbGlkYXRvcik6IGJvb2xlYW4ge1xyXG4gICAgaWYgKFxyXG4gICAgICB3aWRnZXQudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5DT05UQUlORVIgJiZcclxuICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuTEFCRUwgJiZcclxuICAgICAgd2lkZ2V0LnR5cGUgIT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuWU9VVFVCRV9QTEFZRVJcclxuICAgICkge1xyXG4gICAgICBpZiAodGhpcy5mb3JtLmNvbnRyb2xzW3dpZGdldC5rZXldICYmIHRoaXMuZm9ybS5jb250cm9sc1t3aWRnZXQua2V5XS5lcnJvcnMpIHtcclxuICAgICAgICBsZXQgaGFzRXJyb3IgPSBPYmplY3Qua2V5cyh0aGlzLmZvcm0uY29udHJvbHNbd2lkZ2V0LmtleV0uZXJyb3JzISkubGVuZ3RoXHJcbiAgICAgICAgICA/IHRoaXMuZm9ybS5jb250cm9sc1t3aWRnZXQua2V5XT8uZGlydHkgfHxcclxuICAgICAgICAgICAgKHRoaXMuZm9ybS5jb250cm9sc1t3aWRnZXQua2V5XT8udG91Y2hlZCAmJlxyXG4gICAgICAgICAgICAgIHZhbGlkYXRvciAmJlxyXG4gICAgICAgICAgICAgICh0aGlzLmZvcm0uY29udHJvbHNbd2lkZ2V0LmtleV0/LmVycm9ycykhW3ZhbGlkYXRvci5uYW1lXSlcclxuICAgICAgICAgIDogZmFsc2U7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgKHZhbGlkYXRvciAmJiBoYXNFcnJvciAmJiAhdGhpcy5lcnJvcktleSkgfHxcclxuICAgICAgICAgICh2YWxpZGF0b3IgJiYgaGFzRXJyb3IgJiYgdGhpcy5lcnJvcktleSA9PT0gdmFsaWRhdG9yLm5hbWUpXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICB0aGlzLmhhc0Vycm9yID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuZXJyb3JLZXkgPSB2YWxpZGF0b3IubmFtZTtcclxuICAgICAgICB9IGVsc2UgaWYgKCFoYXNFcnJvciAmJiB2YWxpZGF0b3IgJiYgdGhpcy5lcnJvcktleSA9PT0gdmFsaWRhdG9yLm5hbWUpIHtcclxuICAgICAgICAgIHRoaXMuaGFzRXJyb3IgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuZXJyb3JLZXkgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGhhc0Vycm9yID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBoYXNFcnJvcjtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgZ2V0RXJyb3JNZXNzYWdlKHdpZGdldEluc3RhbmNlOiBTbWFydEZvcm1XaWRnZXQ8YW55Pik6IGJvb2xlYW4ge1xyXG4gICAgbGV0IGVycm9yTWVzc2FnZTogc3RyaW5nO1xyXG4gICAgbGV0IGVycm9ySWNvbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG4gICAgbGV0IGVycm9ySWNvbkNvbG9yOiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcbiAgICBsZXQgdmFsaWRhdG9yOiBTbWFydFZhbGlkYXRvcjtcclxuICAgIGlmIChcclxuICAgICAgd2lkZ2V0SW5zdGFuY2UudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5DT05UQUlORVIgJiZcclxuICAgICAgd2lkZ2V0SW5zdGFuY2UudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5MQUJFTCAmJlxyXG4gICAgICB3aWRnZXRJbnN0YW5jZS50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLklORElDQVRPUiAmJlxyXG4gICAgICB3aWRnZXRJbnN0YW5jZS50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLkZJTEVfVVBMT0FERVIgJiZcclxuICAgICAgd2lkZ2V0SW5zdGFuY2UudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5JTUFHRSAmJlxyXG4gICAgICB3aWRnZXRJbnN0YW5jZS50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLlNWRyAmJlxyXG4gICAgICB3aWRnZXRJbnN0YW5jZS50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLkRJVklERVIgJiZcclxuICAgICAgd2lkZ2V0SW5zdGFuY2UudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5CVVRUT04gJiZcclxuICAgICAgd2lkZ2V0SW5zdGFuY2UudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5DT01QT05FTlQgJiZcclxuICAgICAgd2lkZ2V0SW5zdGFuY2UudHlwZSAhPT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5ZT1VUVUJFX1BMQVlFUlxyXG4gICAgKSB7XHJcbiAgICAgIGlmICh0aGlzLmZvcm0uY29udHJvbHNbd2lkZ2V0SW5zdGFuY2Uua2V5XSAmJiB0aGlzLmZvcm0uY29udHJvbHNbd2lkZ2V0SW5zdGFuY2Uua2V5XS5lcnJvcnMpIHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICB0aGlzLmVycm9yS2V5ICYmXHJcbiAgICAgICAgICAhT2JqZWN0LmtleXModGhpcy5mb3JtLmNvbnRyb2xzW3dpZGdldEluc3RhbmNlLmtleV0uZXJyb3JzISkuaW5jbHVkZXModGhpcy5lcnJvcktleSEpXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICB0aGlzLmVycm9yS2V5ID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKFxyXG4gICAgICAgICAgbGV0IGluZGV4ID0gMDtcclxuICAgICAgICAgIGluZGV4IDwgT2JqZWN0LmtleXModGhpcy5mb3JtLmNvbnRyb2xzW3dpZGdldEluc3RhbmNlLmtleV0uZXJyb3JzISkubGVuZ3RoO1xyXG4gICAgICAgICAgaW5kZXgrK1xyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgY29uc3QgZXJyb3JLZXkgPSBPYmplY3Qua2V5cyh0aGlzLmZvcm0uY29udHJvbHNbd2lkZ2V0SW5zdGFuY2Uua2V5XS5lcnJvcnMhKVtpbmRleF07XHJcbiAgICAgICAgICBjb25zb2xlLmxvZygnZXJyb3Iga2V5JywgZXJyb3JLZXkpO1xyXG4gICAgICAgICAgbGV0IGN1c3RvbVZhbGlkYXRvck9uV2lkZ2V0ID0gd2lkZ2V0SW5zdGFuY2UudmFsaWRhdG9ycz8uZmlsdGVyKFxyXG4gICAgICAgICAgICAodmFsaWRhdG9yOiBTbWFydFZhbGlkYXRvcikgPT4gdmFsaWRhdG9yLm5hbWUgPT09IGVycm9yS2V5XHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgaWYgKGN1c3RvbVZhbGlkYXRvck9uV2lkZ2V0ICYmIGN1c3RvbVZhbGlkYXRvck9uV2lkZ2V0Lmxlbmd0aCkge1xyXG4gICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBjdXN0b21WYWxpZGF0b3JPbldpZGdldFswXS5lcnJvck1lc3NhZ2UhO1xyXG4gICAgICAgICAgICBlcnJvckljb24gPSBjdXN0b21WYWxpZGF0b3JPbldpZGdldFswXS5pY29uO1xyXG4gICAgICAgICAgICBlcnJvckljb25Db2xvciA9IGN1c3RvbVZhbGlkYXRvck9uV2lkZ2V0WzBdLmljb25Db2xvcjtcclxuICAgICAgICAgICAgdmFsaWRhdG9yID0gY3VzdG9tVmFsaWRhdG9yT25XaWRnZXRbMF07XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgbGV0IGN1c3RvbVZhbGlkYXRvck9uRm9ybSA9IHRoaXMuc2VydmljZS5zbWFydEZvcm0/LnZhbGlkYXRvcnM/LmZpbHRlcihcclxuICAgICAgICAgICAgKHZhbGlkYXRvcjogU21hcnRWYWxpZGF0b3IpID0+IHZhbGlkYXRvci5uYW1lID09PSBlcnJvcktleVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGlmIChjdXN0b21WYWxpZGF0b3JPbkZvcm0gJiYgY3VzdG9tVmFsaWRhdG9yT25Gb3JtLmxlbmd0aCkge1xyXG4gICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBjdXN0b21WYWxpZGF0b3JPbkZvcm1bMF0uZXJyb3JNZXNzYWdlITtcclxuICAgICAgICAgICAgdmFsaWRhdG9yID0gY3VzdG9tVmFsaWRhdG9yT25Gb3JtWzBdO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLmhhc0N1c3RvbUVycm9yKHdpZGdldEluc3RhbmNlLCB2YWxpZGF0b3IhKSkge1xyXG4gICAgICAgIHdpZGdldEluc3RhbmNlLmVycm9yID0gZXJyb3JNZXNzYWdlITtcclxuICAgICAgICB3aWRnZXRJbnN0YW5jZS5lcnJvckljb24gPSBlcnJvckljb247XHJcbiAgICAgICAgd2lkZ2V0SW5zdGFuY2UuZXJyb3JJY29uQ29sb3IgPSBlcnJvckljb25Db2xvcjtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHdpZGdldEluc3RhbmNlLnNlcnZlckVycm9yTWVzc2FnZSkge1xyXG4gICAgICAgIHdpZGdldEluc3RhbmNlLmVycm9yID0gd2lkZ2V0SW5zdGFuY2Uuc2VydmVyRXJyb3JNZXNzYWdlO1xyXG4gICAgICAgIHdpZGdldEluc3RhbmNlLmVycm9ySWNvbiA9IHdpZGdldEluc3RhbmNlLnNlcnZlckVycm9ySWNvbjtcclxuICAgICAgICB3aWRnZXRJbnN0YW5jZS5lcnJvckljb25Db2xvciA9IHdpZGdldEluc3RhbmNlLnNlcnZlckVycm9yQ29sb3I7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHdpZGdldEluc3RhbmNlLmVycm9yID0gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgZ2V0SW5kaWNhdG9ySXRlbUNsYXNzKGluZGV4OiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgaWYgKHRoaXMud2lkZ2V0SW5zdGFuY2UudHlwZSA9PT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5JTkRJQ0FUT1IpIHtcclxuICAgICAgaWYgKHRoaXMud2lkZ2V0SW5zdGFuY2UuaW5kaWNhdG9yLmluZGljYXRvclZhbHVlID49IGluZGV4KSB7XHJcbiAgICAgICAgcmV0dXJuIGBzbWFydC1pbmRpY2F0b3ItJHtpbmRleH1gO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gJyc7XHJcbiAgfVxyXG5cclxuICBnZXRJbmRpY2F0b3JTdGF0dXNMYWJlbENvbG9yKCk6IHN0cmluZyB7XHJcbiAgICBpZiAodGhpcy53aWRnZXRJbnN0YW5jZS50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLklORElDQVRPUikge1xyXG4gICAgICByZXR1cm4gJyc7XHJcbiAgICB9XHJcbiAgICBsZXQgdmFsdWUgPSBNYXRoLmZsb29yKHRoaXMud2lkZ2V0SW5zdGFuY2UuaW5kaWNhdG9yIS5pbmRpY2F0b3JWYWx1ZSk7XHJcbiAgICBpZiAodmFsdWUgPiB0aGlzLndpZGdldEluc3RhbmNlLmluZGljYXRvciEuaW5kaWNhdG9yTGVuZ3RoIC0gMSkge1xyXG4gICAgICByZXR1cm4gYHNtYXJ0LWluZGljYXRvci1sYWJlbC0ke3RoaXMud2lkZ2V0SW5zdGFuY2UuaW5kaWNhdG9yIS5pbmRpY2F0b3JMZW5ndGggLSAxfWA7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYHNtYXJ0LWluZGljYXRvci1sYWJlbC0ke3ZhbHVlfWA7XHJcbiAgfVxyXG4gIGdldEluZGljYXRvclN0YXR1c0xhYmVsKCk6IHN0cmluZyB7XHJcbiAgICBpZiAodGhpcy53aWRnZXRJbnN0YW5jZS50eXBlICE9PSBTbWFydEZvcm1XaWRnZXRUeXBlLklORElDQVRPUikge1xyXG4gICAgICByZXR1cm4gJyc7XHJcbiAgICB9XHJcbiAgICBsZXQgdmFsdWUgPSBNYXRoLmZsb29yKHRoaXMud2lkZ2V0SW5zdGFuY2UuaW5kaWNhdG9yIS5pbmRpY2F0b3JWYWx1ZSk7XHJcbiAgICBpZiAodmFsdWUgPiB0aGlzLndpZGdldEluc3RhbmNlLmluZGljYXRvciEuaW5kaWNhdG9yTGVuZ3RoIC0gMSkge1xyXG4gICAgICByZXR1cm4gdGhpcy53aWRnZXRJbnN0YW5jZS5pbmRpY2F0b3IhLmluZGljYXRvclN0YXR1c0xhYmVsc1tcclxuICAgICAgICB0aGlzLndpZGdldEluc3RhbmNlLmluZGljYXRvciEuaW5kaWNhdG9yTGVuZ3RoIC0gMVxyXG4gICAgICBdO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMud2lkZ2V0SW5zdGFuY2UuaW5kaWNhdG9yIS5pbmRpY2F0b3JTdGF0dXNMYWJlbHNbdmFsdWVdO1xyXG4gIH1cclxuXHJcbiAgdXBsb2FkKGZpbGVzOiBhbnlbXSk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMud2lkZ2V0SW5zdGFuY2UudHlwZSA9PT0gU21hcnRGb3JtV2lkZ2V0VHlwZS5GSUxFX1VQTE9BREVSKSB7XHJcbiAgICAgIHRoaXMud2lkZ2V0SW5zdGFuY2UudXBsb2FkQ2FsbGJhY2sodGhpcy53aWRnZXRJbnN0YW5jZS5rZXksIGZpbGVzKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldEJ1dHRvblR5cGUoZGVzY3JpcHRvcjogYW55KTogc3RyaW5nIHtcclxuICAgIHN3aXRjaCAoZGVzY3JpcHRvci50eXBlKSB7XHJcbiAgICAgIGNhc2UgJ05PUk1BTCc6XHJcbiAgICAgICAgcmV0dXJuICdtYXQtYnV0dG9uJztcclxuICAgICAgY2FzZSAnRkxBVCc6XHJcbiAgICAgICAgcmV0dXJuICdtYXQtZmxhdC1idXR0b24nO1xyXG4gICAgICBjYXNlICdSQUlTRUQnOlxyXG4gICAgICAgIHJldHVybiAnbWF0LXJhaXNlZC1idXR0b24nO1xyXG4gICAgICBjYXNlICdTVFJPS0VEJzpcclxuICAgICAgICByZXR1cm4gJ21hdC1zdHJva2VkLWJ1dHRvbic7XHJcbiAgICAgIGNhc2UgJ0lDT04nOlxyXG4gICAgICAgIHJldHVybiAnbWF0LWljb24tYnV0dG9uJztcclxuICAgICAgY2FzZSAnTUlOSV9GQUInOlxyXG4gICAgICAgIHJldHVybiAnbWF0LW1pbmktZmFiJztcclxuICAgICAgY2FzZSAnRkFCJzpcclxuICAgICAgICByZXR1cm4gJ21hdC1mYWInO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGNvbnNvbGUubG9nKGBVbmhhbmRsZWQgYWN0aW9uIGJ1dHRvbiB0eXBlIGNhc2U6ICR7ZGVzY3JpcHRvci50eXBlfWApO1xyXG4gICAgICAgIHJldHVybiBgbWF0LWJ1dHRvbmA7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpc09ubHlJY29uKGRlc2NyaXB0b3I6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgZGVzY3JpcHRvci50eXBlID09PSAnSUNPTicgfHwgZGVzY3JpcHRvci50eXBlID09PSAnTUlOSV9GQUInIHx8IGRlc2NyaXB0b3IudHlwZSA9PT0gJ0ZBQidcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBvbkJ1dHRvbkNsaWNrZWQoaW5zdGFuY2U6IFNtYXJ0QnV0dG9uKTogdm9pZCB7XHJcbiAgICBpZiAoaW5zdGFuY2UudWlBY3Rpb24pIHtcclxuICAgICAgaW5zdGFuY2UuY2FsbGJhY2soaW5zdGFuY2UudWlBY3Rpb24pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaW5zdGFuY2UuY2FsbGJhY2soaW5zdGFuY2Uua2V5KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2ZpbHRlcih2YWx1ZTogSW5wdXRFdmVudCk6IFNtYXJ0SXRlbTxhbnk+W10ge1xyXG4gICAgbGV0IGZpbHRlclZhbHVlID0gKHZhbHVlLnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KT8udmFsdWU7XHJcbiAgICB0aGlzLnRvSGlnaGxpZ2h0ID0gZmlsdGVyVmFsdWU7XHJcblxyXG4gICAgaWYgKCFmaWx0ZXJWYWx1ZSkge1xyXG4gICAgICBmaWx0ZXJWYWx1ZSA9ICcnO1xyXG4gICAgICB0aGlzLnRvSGlnaGxpZ2h0ID0gZmlsdGVyVmFsdWU7XHJcbiAgICB9XHJcbiAgICBmaWx0ZXJWYWx1ZSA9IGZpbHRlclZhbHVlLnRvTG93ZXJDYXNlKCk7XHJcblxyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLndpZGdldEluc3RhbmNlLnR5cGUgPT09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuVEVYVF9GSUVMRCAmJlxyXG4gICAgICB0aGlzLndpZGdldEluc3RhbmNlLnZhbHVlTGlzdFxyXG4gICAgKSB7XHJcbiAgICAgIGNvbnN0IHJlc3VsdDogU21hcnRJdGVtPGFueT5bXSA9IGZpbHRlclZhbHVlXHJcbiAgICAgICAgPyB0aGlzLndpZGdldEluc3RhbmNlLnZhbHVlTGlzdC5maWx0ZXIoKG9wdGlvbjogU21hcnRJdGVtPGFueT4pID0+XHJcbiAgICAgICAgICAgIG9wdGlvbi5sYWJlbC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGZpbHRlclZhbHVlKVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgIDogdGhpcy53aWRnZXRJbnN0YW5jZS52YWx1ZUxpc3Q7XHJcbiAgICAgIGlmIChyZXN1bHQubGVuZ3RoID09PSAwICYmIHRoaXMud2lkZ2V0SW5zdGFuY2UudmFsdWVMaXN0Lmxlbmd0aCAhPT0gMCkge1xyXG4gICAgICAgIC8vIHRoZXJlIGNvdWxkIGJlIHZhbHVlcyBhZnRlciB0aGUgZmlsdGVyIG9wZXJhdGlvbiBidXQgd2UgZm91bmQgbm9uZTpcclxuICAgICAgICB0aGlzLndpZGdldEluc3RhbmNlLmVycm9yID0gdGhpcy53aWRnZXRJbnN0YW5jZS5maWx0ZXJFcnJvck1lc3NhZ2U7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gd2UgZWl0aGVyIGZvdW5kIHZhbHVlcywgb3IgdGhlcmUgd2VyZSBubyB2YWx1ZXMgdG8gYmVnaW4gd2l0aDpcclxuICAgICAgICB0aGlzLndpZGdldEluc3RhbmNlLmVycm9yID0gdW5kZWZpbmVkO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIFtdO1xyXG4gIH1cclxuXHJcbiAgZGF0ZUZpbHRlcihkOiBEYXRlIHwgbnVsbCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICBnZXRNYXRyaXhEaXNwbGF5VmFsdWUocXVlc3Rpb246IFZhbHVlLCBrZXk6IHN0cmluZykge1xyXG4gICAgKHRoaXMud2lkZ2V0SW5zdGFuY2UgYXMgU21hcnRNYXRyaXgpLnZhbHVlW2tleV0uZmluZCgodmFsdWU6IFZhbHVlKSA9PiB7XHJcbiAgICAgIGlmICh2YWx1ZS5jb2RlID09IHF1ZXN0aW9uLmNvZGUpIHJldHVybiBxdWVzdGlvbi5kaXNwbGF5VmFsdWU7XHJcbiAgICAgIGVsc2UgcmV0dXJuIHF1ZXN0aW9uLmNvZGU7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGhhbmRsZVllYXJNb250aFBpY2tlZCh5ZWFyTW9udGhWYWx1ZTogYW55KSB7XHJcbiAgICB0aGlzLnNldERhdGVGb3JtQ29udHJvbCh0aGlzLmZvcm0uY29udHJvbHNbdGhpcy53aWRnZXRJbnN0YW5jZS5rZXkhXSwgeWVhck1vbnRoVmFsdWUsICcwMDowMCcpO1xyXG4gIH1cclxuXHJcbiAgY29tcGFyZUl0ZW1zKG8xOiBhbnksIG8yOiBhbnkpOiBib29sZWFuIHtcclxuICAgIGZ1bmN0aW9uIGNvbnZlcnQob2JqOiBhbnkpOiBhbnkge1xyXG4gICAgICBpZiAob2JqICYmIHR5cGVvZiBvYmogPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgcmV0dXJuIG9iai5yZXBsYWNlKC9cXC52WzAtOV0rJC8sICcnKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gb2JqO1xyXG4gICAgfVxyXG4gICAgLy8gY2FsbGluZyB0aGlzLnRydW5jYXRlVXJpIGRpZG4ndCB3b3JrXHJcbiAgICAvLyBUT0RPOiB1c2Ugd2lkZ2V0LnNlbGVjdGlvbi5wYXJhbWV0ZXIgZm9yIGlnbm9yZVVyaVZlcnNpb24gLyBzdHJpY3RVcmlDb21wYXJpc29uO1xyXG5cclxuICAgIGxldCB2MSA9IGNvbnZlcnQobzEpO1xyXG4gICAgbGV0IHYyID0gY29udmVydChvMik7XHJcbiAgICByZXR1cm4gZGVlcEVxdWFsKHYxLCB2Mik7XHJcbiAgfVxyXG5cclxuICB0cnVuY2F0ZVVyaSh1cmk6IGFueSk6IGFueSB7XHJcbiAgICBpZiAodXJpICYmIHR5cGVvZiB1cmkgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgIHJldHVybiB1cmkucmVwbGFjZSgvXFwudlswLTldKyQvLCAnJyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdXJpO1xyXG4gIH1cclxuXHJcbiAgcmVtb3ZlTWF0cml4Um93KHF1ZXN0aW9uOiBhbnkpOiB2b2lkIHtcclxuICAgIGNvbnNvbGUubG9nKHF1ZXN0aW9uKTtcclxuICAgICh0aGlzLndpZGdldEluc3RhbmNlIGFzIFNtYXJ0TWF0cml4KS5idXR0b24/LmNhbGxiYWNrKHRoaXMud2lkZ2V0SW5zdGFuY2UsIHF1ZXN0aW9uKTtcclxuICB9XHJcblxyXG4gIGlzVG9vbGJhclByZXNlbnQoKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMud2lkZ2V0SW5zdGFuY2UudHlwZSA9PSBTbWFydEZvcm1XaWRnZXRUeXBlLlRFWFRfRklFTEQgfHxcclxuICAgICAgdGhpcy53aWRnZXRJbnN0YW5jZS50eXBlID09IFNtYXJ0Rm9ybVdpZGdldFR5cGUuVEVYVF9GSUVMRF9MT09LVVBcclxuICAgICkge1xyXG4gICAgICByZXR1cm4gdGhpcy53aWRnZXRJbnN0YW5jZS50b29sYmFySWQgIT09IHVuZGVmaW5lZCAmJiB0aGlzLndpZGdldEluc3RhbmNlLnRvb2xiYXJJZCAhPT0gbnVsbDtcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIGdldENoaXBzVmFsdWUodmFsdWU6IGFueSk6IGFueSB7XHJcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgdmFsdWUgIT09IG51bGwpIHtcclxuICAgICAgaWYgKCduYW1lJyBpbiB2YWx1ZSkge1xyXG4gICAgICAgIHJldHVybiB2YWx1ZVsnbmFtZSddO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICgnZGlzcGxheVZhbHVlJyBpbiB2YWx1ZSkge1xyXG4gICAgICAgIHJldHVybiB2YWx1ZVsnZGlzcGxheVZhbHVlJ107XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB2YWx1ZTtcclxuICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cImNvbnRhaW5lclwiIFtmb3JtR3JvdXBdPVwiZm9ybVwiPlxyXG4gIDxkaXZcclxuICAgIFtuZ0NsYXNzXT1cIndpZGdldEluc3RhbmNlLmNzc0NsYXNzID8/ICcnXCJcclxuICAgIGNsYXNzPVwiY29udGFpbmVyXCJcclxuICAgICpuZ0lmPVwid2lkZ2V0SW5zdGFuY2UuaXNWaXNpYmxlID09PSB1bmRlZmluZWQgPyB0cnVlIDogd2lkZ2V0SW5zdGFuY2UuaXNWaXNpYmxlXCJcclxuICA+XHJcbiAgICA8ZGl2ICpuZ0lmPVwid2lkZ2V0SW5zdGFuY2UudHlwZSA9PT0gc21hcnRGb3JtV2lkZ2V0VHlwZS5DT05UQUlORVJcIiBbbmdDbGFzc109XCJnZXREaXJlY3Rpb24oKVwiPlxyXG4gICAgICA8c21hcnRmb3Jtd2lkZ2V0XHJcbiAgICAgICAgKm5nRm9yPVwibGV0IHdpZGdldCBvZiB3aWRnZXRJbnN0YW5jZS52YWx1ZUxpc3RcIlxyXG4gICAgICAgIFtmb3JtXT1cImZvcm1cIlxyXG4gICAgICAgIFt3aWRnZXRJbnN0YW5jZV09XCJ3aWRnZXRcIlxyXG4gICAgICAgIGNsYXNzPVwiY29udGFpbmVyLWl0ZW1cIlxyXG4gICAgICAgIFtuZ0NsYXNzXT1cIndpZGdldC5jc3NDbGFzcyA/PyAnJ1wiXHJcbiAgICAgICAgW29uQmx1cl09XCJvbkJsdXJcIlxyXG4gICAgICAgIFtvblZhbHVlQ2hhbmdlXT1cIm9uVmFsdWVDaGFuZ2VcIlxyXG4gICAgICAgIFtzb3BoaXN0aWNhdGVkVmFsdWVDaGFuZ2VdPVwic29waGlzdGljYXRlZFZhbHVlQ2hhbmdlXCJcclxuICAgICAgICBjbGFzcz1cInt7IHdpZGdldC5rZXkgfX1cIlxyXG4gICAgICAgIFtsYWJlbENvbG9yXT1cImxhYmVsQ29sb3JcIlxyXG4gICAgICA+PC9zbWFydGZvcm13aWRnZXQ+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2XHJcbiAgICAgIChjYXBzTG9jayk9XCJjYXBzT24gPSAkZXZlbnRcIlxyXG4gICAgICAqbmdJZj1cIndpZGdldEluc3RhbmNlLnR5cGUgPT09IHNtYXJ0Rm9ybVdpZGdldFR5cGUuVEVYVF9GSUVMRFwiXHJcbiAgICAgIGNsYXNzPVwid2lkZ2V0Q29udGFpbmVyXCJcclxuICAgID5cclxuICAgICAgPGRpdiBjbGFzcz1cImxhYmVsQ29udGFpbmVyXCIgKm5nSWY9XCJ3aWRnZXRJbnN0YW5jZS5zaG93TGFiZWxcIj5cclxuICAgICAgICA8aDRcclxuICAgICAgICAgIGNsYXNzPVwie3sgbGFiZWxDb2xvciB9fSBzbWFydC1mb3JtLXdpZGdldC1sYWJlbCB7eyB3aWRnZXRJbnN0YW5jZS5jc3NMYWJlbENsYXNzID8/ICcnIH19XCJcclxuICAgICAgICAgIFtuZ0NsYXNzXT1cImdldExhYmVsTmdDbGFzcygpXCJcclxuICAgICAgICAgIFtuZ1N0eWxlXT1cImdldExhYmVsU3R5bGUoKVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAge3sgZ2V0V2lkZ2V0TGFiZWwod2lkZ2V0SW5zdGFuY2UpIH19XHJcbiAgICAgICAgPC9oND5cclxuICAgICAgICA8bWF0LWhpbnQgKm5nSWY9XCJ3aWRnZXRJbnN0YW5jZT8uaGludD8ucG9zaXRpb24gPT09IFNtYXJ0V2lkZ2V0SGludFBvc2l0aW9uLkxBQkVMXCI+e3tcclxuICAgICAgICAgIHdpZGdldEluc3RhbmNlLmhpbnQ/LnRleHRcclxuICAgICAgICB9fTwvbWF0LWhpbnQ+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8bWF0LWZvcm0tZmllbGRcclxuICAgICAgICBjbGFzcz1cImlucHV0IHRleHRGaWVsZCB3aWRnZXRDb250ZW50IHt7IHdpZGdldEluc3RhbmNlLmNzc0NsYXNzID8/ICcnIH19XCJcclxuICAgICAgICBbbmdDbGFzc109XCJnZXROZ0NsYXNzKClcIlxyXG4gICAgICAgIFtuZ1N0eWxlXT1cImdldFN0eWxlKClcIlxyXG4gICAgICAgIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxtYXQtbGFiZWxcclxuICAgICAgICAgIGNsYXNzPVwibGFiZWxcIlxyXG4gICAgICAgICAgW25nQ2xhc3NdPVwid2lkZ2V0SW5zdGFuY2UuY3NzTGFiZWxDbGFzcyA/PyAnJ1wiXHJcbiAgICAgICAgICAqbmdJZj1cIiF3aWRnZXRJbnN0YW5jZS5zaG93TGFiZWxcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIHt7IGdldFdpZGdldExhYmVsKHdpZGdldEluc3RhbmNlKSB9fVxyXG4gICAgICAgIDwvbWF0LWxhYmVsPlxyXG5cclxuICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICpuZ0lmPVwiIXdpZGdldEluc3RhbmNlLnNlbGVjdGlvblwiXHJcbiAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cIndpZGdldEluc3RhbmNlLmtleVwiXHJcbiAgICAgICAgICBbaWRdPVwid2lkZ2V0SW5zdGFuY2Uua2V5XCJcclxuICAgICAgICAgIFthdHRyLmlucHV0bW9kZV09XCJcclxuICAgICAgICAgICAgd2lkZ2V0SW5zdGFuY2UuaW5wdXRNb2RlID8gd2lkZ2V0SW5zdGFuY2UuaW5wdXRNb2RlLnRvTG9jYWxlTG93ZXJDYXNlKCkgOiAndGV4dCdcclxuICAgICAgICAgIFwiXHJcbiAgICAgICAgICBbdHlwZV09XCInc3RyaW5nJ1wiXHJcbiAgICAgICAgICBbdmFsdWVdPVwid2lkZ2V0SW5zdGFuY2UudmFsdWVcIlxyXG4gICAgICAgICAgW3JlYWRvbmx5XT1cIndpZGdldEluc3RhbmNlLmlzUmVhZG9ubHlcIlxyXG4gICAgICAgICAgcGxhY2Vob2xkZXI9XCJ7eyB3aWRnZXRJbnN0YW5jZS5wbGFjZWhvbGRlciB9fVwiXHJcbiAgICAgICAgICBtYXRJbnB1dFxyXG4gICAgICAgICAgKGJsdXIpPVwib25CbHVyPy5uZXh0KCRldmVudClcIlxyXG4gICAgICAgICAgKGlucHV0KT1cIm9uVmFsdWVDaGFuZ2U/Lm5leHQoJGV2ZW50KVwiXHJcbiAgICAgICAgICB0eXBlPVwie3sgd2lkZ2V0SW5zdGFuY2UuaXNQYXNzd29yZCA/IChoaWRlUGFzc3dvcmQgPyAncGFzc3dvcmQnIDogJ3RleHQnKSA6ICcnIH19XCJcclxuICAgICAgICAgIFttYXNrXT1cIndpZGdldEluc3RhbmNlLm1hc2sgPz8gJydcIlxyXG4gICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwib25LZXlkb3duKClcIlxyXG4gICAgICAgICAgbWF4bGVuZ3RoPVwie3sgd2lkZ2V0SW5zdGFuY2UubWF4TGVuZ3RoIH19XCJcclxuICAgICAgICAvPlxyXG4gICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgKm5nSWY9XCJ3aWRnZXRJbnN0YW5jZS5zZWxlY3Rpb25cIlxyXG4gICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJ3aWRnZXRJbnN0YW5jZS5rZXlcIlxyXG4gICAgICAgICAgW2lkXT1cIndpZGdldEluc3RhbmNlLmtleVwiXHJcbiAgICAgICAgICBbdHlwZV09XCInc3RyaW5nJ1wiXHJcbiAgICAgICAgICBbdmFsdWVdPVwid2lkZ2V0SW5zdGFuY2UudmFsdWVcIlxyXG4gICAgICAgICAgW3JlYWRvbmx5XT1cIndpZGdldEluc3RhbmNlLmlzUmVhZG9ubHlcIlxyXG4gICAgICAgICAgcGxhY2Vob2xkZXI9XCJ7eyB3aWRnZXRJbnN0YW5jZS5wbGFjZWhvbGRlciB9fVwiXHJcbiAgICAgICAgICBtYXRJbnB1dFxyXG4gICAgICAgICAgKGJsdXIpPVwib25CbHVyPy5uZXh0KCRldmVudClcIlxyXG4gICAgICAgICAgKGlucHV0KT1cIm9uVmFsdWVDaGFuZ2U/Lm5leHQoJGV2ZW50KVwiXHJcbiAgICAgICAgICB0eXBlPVwie3sgd2lkZ2V0SW5zdGFuY2UuaXNQYXNzd29yZCA/ICdwYXNzd29yZCcgOiAnJyB9fVwiXHJcbiAgICAgICAgICBbbWF0QXV0b2NvbXBsZXRlXT1cInRleHRGaWVsZEF1dG9cIlxyXG4gICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwib25LZXlkb3duKClcIlxyXG4gICAgICAgIC8+XHJcbiAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgKm5nSWY9XCJ3aWRnZXRJbnN0YW5jZS5pc1Bhc3N3b3JkXCJcclxuICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxyXG4gICAgICAgICAgbWF0U3VmZml4XHJcbiAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlUGFzc3dvcmRWaXNpYmlsaXR5KCRldmVudClcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxtYXQtaWNvbj57eyBoaWRlUGFzc3dvcmQgPyAndmlzaWJpbGl0eV9vZmYnIDogJ3Zpc2liaWxpdHknIH19PC9tYXQtaWNvbj5cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8bWF0LWF1dG9jb21wbGV0ZSAjdGV4dEZpZWxkQXV0bz1cIm1hdEF1dG9jb21wbGV0ZVwiPlxyXG4gICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBmaWx0ZXJlZE9wdGlvbnMgfCBhc3luY1wiIFt2YWx1ZV09XCJvcHRpb24ubGFiZWxcIj5cclxuICAgICAgICAgICAgPHNwYW4gW2lubmVySFRNTF09XCJvcHRpb24ubGFiZWwgfCBoaWdobGlnaHQgOiB0b0hpZ2hsaWdodFwiPjwvc3Bhbj5cclxuICAgICAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgICAgICA8L21hdC1hdXRvY29tcGxldGU+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXQtZXJyb3JcIiAqbmdJZj1cImNhcHNPbiAmJiB3aWRnZXRJbnN0YW5jZS5pc1Bhc3N3b3JkXCI+XHJcbiAgICAgICAgICB7eyB3aWRnZXRJbnN0YW5jZS5jYXBzTG9ja1dhcm5pbmcgfX1cclxuICAgICAgICA8L3NwYW4+XHJcblxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwibWF0LWVycm9yXCI+XHJcbiAgICAgICAgICB7eyB3aWRnZXRJbnN0YW5jZS5lcnJvciB9fVxyXG4gICAgICAgIDwvc3Bhbj5cclxuXHJcbiAgICAgICAgPHNwYW4gbWF0UHJlZml4PlxyXG4gICAgICAgICAgPHNtYXJ0LWljb25cclxuICAgICAgICAgICAgKm5nSWY9XCJjYXBzT24gJiYgd2lkZ2V0SW5zdGFuY2UuaXNQYXNzd29yZFwiXHJcbiAgICAgICAgICAgIFtpY29uXT1cIndpZGdldEluc3RhbmNlLmNhcHNMb2NrV2FybmluZ0ljb24gPz8gJ2tleWJvYXJkX2NhcHNsb2NrJ1wiXHJcbiAgICAgICAgICAgIGNvbG9yPVwid2FyblwiXHJcbiAgICAgICAgICA+PC9zbWFydC1pY29uPlxyXG4gICAgICAgICAgPHNtYXJ0LWljb25cclxuICAgICAgICAgICAgKm5nSWY9XCJ3aWRnZXRJbnN0YW5jZS5pY29uICYmIHdpZGdldEluc3RhbmNlLmljb25Qb3NpdGlvbiA9PT0gJ1BSRSdcIlxyXG4gICAgICAgICAgICBbaWNvbl09XCJ3aWRnZXRJbnN0YW5jZS5pY29uXCJcclxuICAgICAgICAgICAgW2NvbG9yXT1cIndpZGdldEluc3RhbmNlLmljb25Db2xvciA/PyAncHJpbWFyeSdcIlxyXG4gICAgICAgICAgPjwvc21hcnQtaWNvbj5cclxuICAgICAgICAgIHt7IHdpZGdldEluc3RhbmNlLnByZWZpeCB9fVxyXG4gICAgICAgIDwvc3Bhbj5cclxuICAgICAgICA8c3BhbiBtYXRTdWZmaXg+XHJcbiAgICAgICAgICB7eyB3aWRnZXRJbnN0YW5jZS5zdWZmaXggfX1cclxuICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgPHNtYXJ0LWljb25cclxuICAgICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICAgIHdpZGdldEluc3RhbmNlLmljb24gJiZcclxuICAgICAgICAgICAgKCF3aWRnZXRJbnN0YW5jZS5pY29uUG9zaXRpb24gfHwgd2lkZ2V0SW5zdGFuY2UuaWNvblBvc2l0aW9uID09PSAnUE9TVCcpXHJcbiAgICAgICAgICBcIlxyXG4gICAgICAgICAgW2ljb25dPVwid2lkZ2V0SW5zdGFuY2UuaWNvblwiXHJcbiAgICAgICAgICBbY29sb3JdPVwid2lkZ2V0SW5zdGFuY2UuaWNvbkNvbG9yID8/ICdwcmltYXJ5J1wiXHJcbiAgICAgICAgICBtYXRTdWZmaXhcclxuICAgICAgICA+PC9zbWFydC1pY29uPlxyXG4gICAgICAgIDxzbWFydC1pY29uXHJcbiAgICAgICAgICAqbmdJZj1cIndpZGdldEluc3RhbmNlLmVycm9yICYmIHdpZGdldEluc3RhbmNlLmVycm9ySWNvblwiXHJcbiAgICAgICAgICBbaWNvbl09XCJ3aWRnZXRJbnN0YW5jZS5lcnJvckljb25cIlxyXG4gICAgICAgICAgW2NvbG9yXT1cIndpZGdldEluc3RhbmNlLmVycm9ySWNvbkNvbG9yID8/ICd3YXJuJ1wiXHJcbiAgICAgICAgICBtYXRTdWZmaXhcclxuICAgICAgICA+PC9zbWFydC1pY29uPlxyXG5cclxuICAgICAgICA8c21hcnQtdWktYWN0aW9uLXRvb2xiYXJcclxuICAgICAgICAgICN0b29sYmFyXHJcbiAgICAgICAgICAqbmdJZj1cImlzVG9vbGJhclByZXNlbnQoKVwiXHJcbiAgICAgICAgICBtYXRTdWZmaXhcclxuICAgICAgICAgIFtpZF09XCJ3aWRnZXRJbnN0YW5jZS50b29sYmFySWRcIlxyXG4gICAgICAgID48L3NtYXJ0LXVpLWFjdGlvbi10b29sYmFyPlxyXG4gICAgICAgIDxidXR0b25cclxuICAgICAgICAgICpuZ0lmPVwid2lkZ2V0SW5zdGFuY2UudGV4dEZpZWxkQnV0dG9uXCJcclxuICAgICAgICAgIG1hdFN1ZmZpeFxyXG4gICAgICAgICAgbWF0LWJ1dHRvblxyXG4gICAgICAgICAgY29sb3I9XCJ7eyB3aWRnZXRJbnN0YW5jZS50ZXh0RmllbGRCdXR0b24uY29sb3IgfX1cIlxyXG4gICAgICAgICAgKGNsaWNrKT1cIndpZGdldEluc3RhbmNlLnRleHRGaWVsZEJ1dHRvbi5jYWxsYmFjayh3aWRnZXRJbnN0YW5jZSlcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxzbWFydC1pY29uXHJcbiAgICAgICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgd2lkZ2V0SW5zdGFuY2UudGV4dEZpZWxkQnV0dG9uLmljb25Qb3NpdGlvbiA9PT1cclxuICAgICAgICAgICAgICAgIHNtYXJ0Rm9ybVRleHRGaWVsZEJ1dHRvbkljb25Qb3NpdGlvbigpLlBSRSAmJiB3aWRnZXRJbnN0YW5jZS50ZXh0RmllbGRCdXR0b24uaWNvblxyXG4gICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICBbaWNvbl09XCJ3aWRnZXRJbnN0YW5jZS50ZXh0RmllbGRCdXR0b24uaWNvblwiXHJcbiAgICAgICAgICAgIFtjb2xvcl09XCJ3aWRnZXRJbnN0YW5jZS50ZXh0RmllbGRCdXR0b24uaWNvbkNvbG9yXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgIDwvc21hcnQtaWNvbj5cclxuICAgICAgICAgIHt7IHdpZGdldEluc3RhbmNlLnRleHRGaWVsZEJ1dHRvbi5sYWJlbCB9fVxyXG4gICAgICAgICAgPHNtYXJ0LWljb25cclxuICAgICAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICAgICB3aWRnZXRJbnN0YW5jZS50ZXh0RmllbGRCdXR0b24uaWNvblBvc2l0aW9uID09PVxyXG4gICAgICAgICAgICAgICAgc21hcnRGb3JtVGV4dEZpZWxkQnV0dG9uSWNvblBvc2l0aW9uKCkuUE9TVCAmJiB3aWRnZXRJbnN0YW5jZS50ZXh0RmllbGRCdXR0b24uaWNvblxyXG4gICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICBbaWNvbl09XCJ3aWRnZXRJbnN0YW5jZS50ZXh0RmllbGRCdXR0b24uaWNvblwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICA8L3NtYXJ0LWljb24+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPG1hdC1oaW50XHJcbiAgICAgICAgICAqbmdJZj1cIndpZGdldEluc3RhbmNlLnNob3dDaGFyYWN0ZXJMaW1pdFN1ZmZpeCAmJiB3aWRnZXRJbnN0YW5jZS5tYXhMZW5ndGhcIlxyXG4gICAgICAgICAgbWF0U3VmZml4XHJcbiAgICAgICAgICBhbGlnbj1cImVuZFwiXHJcbiAgICAgICAgICA+e3sgd2lkZ2V0SW5zdGFuY2UubWF4TGVuZ3RoIC0gZm9ybS5jb250cm9sc1t3aWRnZXRJbnN0YW5jZS5rZXldLnZhbHVlLmxlbmd0aCB9fTwvbWF0LWhpbnRcclxuICAgICAgICA+XHJcbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgIDxtYXQtaGludFxyXG4gICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICAhd2lkZ2V0SW5zdGFuY2U/LmhpbnQgfHwgd2lkZ2V0SW5zdGFuY2U/LmhpbnQ/LnBvc2l0aW9uID09PSBTbWFydFdpZGdldEhpbnRQb3NpdGlvbi5JTlBVVFxyXG4gICAgICAgIFwiXHJcbiAgICAgICAgPnt7IHdpZGdldEluc3RhbmNlLmhpbnQ/LnRleHQgfX08L21hdC1oaW50XHJcbiAgICAgID5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXZcclxuICAgICAgKm5nSWY9XCJ3aWRnZXRJbnN0YW5jZS50eXBlID09PSBzbWFydEZvcm1XaWRnZXRUeXBlLlRFWFRfRklFTERfTlVNQkVSXCJcclxuICAgICAgY2xhc3M9XCJ3aWRnZXRDb250YWluZXJcIlxyXG4gICAgPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwibGFiZWxDb250YWluZXJcIiAqbmdJZj1cIndpZGdldEluc3RhbmNlLnNob3dMYWJlbFwiPlxyXG4gICAgICAgIDxoNFxyXG4gICAgICAgICAgY2xhc3M9XCJ7eyBsYWJlbENvbG9yIH19IHNtYXJ0LWZvcm0td2lkZ2V0LWxhYmVsIHt7IHdpZGdldEluc3RhbmNlLmNzc0xhYmVsQ2xhc3MgPz8gJycgfX1cIlxyXG4gICAgICAgICAgW25nQ2xhc3NdPVwiZ2V0TGFiZWxOZ0NsYXNzKClcIlxyXG4gICAgICAgICAgW25nU3R5bGVdPVwiZ2V0TGFiZWxTdHlsZSgpXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICB7eyBnZXRXaWRnZXRMYWJlbCh3aWRnZXRJbnN0YW5jZSkgfX1cclxuICAgICAgICA8L2g0PlxyXG4gICAgICAgIDxtYXQtaGludCAqbmdJZj1cIndpZGdldEluc3RhbmNlPy5oaW50Py5wb3NpdGlvbiA9PT0gU21hcnRXaWRnZXRIaW50UG9zaXRpb24uTEFCRUxcIj57e1xyXG4gICAgICAgICAgd2lkZ2V0SW5zdGFuY2UuaGludD8udGV4dFxyXG4gICAgICAgIH19PC9tYXQtaGludD5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxtYXQtZm9ybS1maWVsZFxyXG4gICAgICAgIGNsYXNzPVwiaW5wdXQgdGV4dEZpZWxkIHdpZGdldENvbnRlbnQge3sgd2lkZ2V0SW5zdGFuY2UuY3NzQ2xhc3MgPz8gJycgfX1cIlxyXG4gICAgICAgIFtuZ0NsYXNzXT1cImdldE5nQ2xhc3MoKVwiXHJcbiAgICAgICAgW25nU3R5bGVdPVwiZ2V0U3R5bGUoKVwiXHJcbiAgICAgICAgYXBwZWFyYW5jZT1cIm91dGxpbmVcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPG1hdC1sYWJlbFxyXG4gICAgICAgICAgY2xhc3M9XCJsYWJlbFwiXHJcbiAgICAgICAgICBbbmdDbGFzc109XCJ3aWRnZXRJbnN0YW5jZS5jc3NMYWJlbENsYXNzID8/ICcnXCJcclxuICAgICAgICAgICpuZ0lmPVwiIXdpZGdldEluc3RhbmNlLnNob3dMYWJlbFwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAge3sgZ2V0V2lkZ2V0TGFiZWwod2lkZ2V0SW5zdGFuY2UpIH19XHJcbiAgICAgICAgPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cIndpZGdldEluc3RhbmNlLmtleVwiXHJcbiAgICAgICAgICBbaWRdPVwid2lkZ2V0SW5zdGFuY2Uua2V5XCJcclxuICAgICAgICAgIFt2YWx1ZV09XCJ3aWRnZXRJbnN0YW5jZS52YWx1ZVwiXHJcbiAgICAgICAgICBbcmVhZG9ubHldPVwid2lkZ2V0SW5zdGFuY2UuaXNSZWFkb25seVwiXHJcbiAgICAgICAgICBbdHlwZV09XCInbnVtYmVyJ1wiXHJcbiAgICAgICAgICBwbGFjZWhvbGRlcj1cInt7IHdpZGdldEluc3RhbmNlLnBsYWNlaG9sZGVyIH19XCJcclxuICAgICAgICAgIFttaW5dPVwid2lkZ2V0SW5zdGFuY2UubWluVmFsdWVzID8/IG51bGxcIlxyXG4gICAgICAgICAgW21heF09XCJ3aWRnZXRJbnN0YW5jZS5tYXhWYWx1ZXMgPz8gbnVsbFwiXHJcbiAgICAgICAgICBtYXRJbnB1dFxyXG4gICAgICAgICAgKGJsdXIpPVwib25CbHVyPy5uZXh0KCRldmVudClcIlxyXG4gICAgICAgICAgKGlucHV0KT1cIm9uVmFsdWVDaGFuZ2U/Lm5leHQoJGV2ZW50KVwiXHJcbiAgICAgICAgLz5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdC1lcnJvclwiPlxyXG4gICAgICAgICAge3sgd2lkZ2V0SW5zdGFuY2UuZXJyb3IgfX1cclxuICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgPHNwYW4gbWF0UHJlZml4PlxyXG4gICAgICAgICAge3sgd2lkZ2V0SW5zdGFuY2UucHJlZml4IH19XHJcbiAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgIDxzcGFuIG1hdFN1ZmZpeD5cclxuICAgICAgICAgIHt7IHdpZGdldEluc3RhbmNlLnN1ZmZpeCB9fVxyXG4gICAgICAgIDwvc3Bhbj5cclxuICAgICAgICA8c21hcnQtaWNvbiAqbmdJZj1cIndpZGdldEluc3RhbmNlLmljb25cIiBbaWNvbl09XCJ3aWRnZXRJbnN0YW5jZS5pY29uXCIgbWF0U3VmZml4PlxyXG4gICAgICAgIDwvc21hcnQtaWNvbj5cclxuICAgICAgICA8c21hcnQtaWNvblxyXG4gICAgICAgICAgKm5nSWY9XCJ3aWRnZXRJbnN0YW5jZS5lcnJvciAmJiB3aWRnZXRJbnN0YW5jZS5lcnJvckljb25cIlxyXG4gICAgICAgICAgW2ljb25dPVwid2lkZ2V0SW5zdGFuY2UuZXJyb3JJY29uXCJcclxuICAgICAgICAgIFtjb2xvcl09XCJ3aWRnZXRJbnN0YW5jZS5lcnJvckljb25Db2xvciA/PyAnd2FybidcIlxyXG4gICAgICAgICAgbWF0U3VmZml4XHJcbiAgICAgICAgPjwvc21hcnQtaWNvbj5cclxuICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAqbmdJZj1cIndpZGdldEluc3RhbmNlLnRleHRGaWVsZEJ1dHRvblwiXHJcbiAgICAgICAgICBtYXRTdWZmaXhcclxuICAgICAgICAgIG1hdC1idXR0b25cclxuICAgICAgICAgIGNvbG9yPVwie3sgd2lkZ2V0SW5zdGFuY2UudGV4dEZpZWxkQnV0dG9uLmNvbG9yIH19XCJcclxuICAgICAgICAgIChjbGljayk9XCJ3aWRnZXRJbnN0YW5jZS50ZXh0RmllbGRCdXR0b24uY2FsbGJhY2sod2lkZ2V0SW5zdGFuY2UpXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8c21hcnQtaWNvblxyXG4gICAgICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgIHdpZGdldEluc3RhbmNlLnRleHRGaWVsZEJ1dHRvbi5pY29uUG9zaXRpb24gPT09XHJcbiAgICAgICAgICAgICAgICBzbWFydEZvcm1UZXh0RmllbGRCdXR0b25JY29uUG9zaXRpb24oKS5QUkUgJiYgd2lkZ2V0SW5zdGFuY2UudGV4dEZpZWxkQnV0dG9uLmljb25cclxuICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgW2ljb25dPVwid2lkZ2V0SW5zdGFuY2UudGV4dEZpZWxkQnV0dG9uLmljb25cIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgPC9zbWFydC1pY29uPlxyXG4gICAgICAgICAge3sgd2lkZ2V0SW5zdGFuY2UudGV4dEZpZWxkQnV0dG9uLmxhYmVsIH19XHJcbiAgICAgICAgICA8c21hcnQtaWNvblxyXG4gICAgICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgIHdpZGdldEluc3RhbmNlLnRleHRGaWVsZEJ1dHRvbi5pY29uUG9zaXRpb24gPT09XHJcbiAgICAgICAgICAgICAgICBzbWFydEZvcm1UZXh0RmllbGRCdXR0b25JY29uUG9zaXRpb24oKS5QT1NUICYmIHdpZGdldEluc3RhbmNlLnRleHRGaWVsZEJ1dHRvbi5pY29uXHJcbiAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgIFtpY29uXT1cIndpZGdldEluc3RhbmNlLnRleHRGaWVsZEJ1dHRvbi5pY29uXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgIDwvc21hcnQtaWNvbj5cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXZcclxuICAgICAgKm5nSWY9XCJ3aWRnZXRJbnN0YW5jZS50eXBlID09PSBzbWFydEZvcm1XaWRnZXRUeXBlLlRFWFRfRklFTERfQ0hJUFNcIlxyXG4gICAgICBjbGFzcz1cIndpZGdldENvbnRhaW5lclwiXHJcbiAgICA+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJsYWJlbENvbnRhaW5lclwiICpuZ0lmPVwid2lkZ2V0SW5zdGFuY2Uuc2hvd0xhYmVsXCI+XHJcbiAgICAgICAgPGg0XHJcbiAgICAgICAgICBjbGFzcz1cInt7IGxhYmVsQ29sb3IgfX0gc21hcnQtZm9ybS13aWRnZXQtbGFiZWwge3sgd2lkZ2V0SW5zdGFuY2UuY3NzTGFiZWxDbGFzcyA/PyAnJyB9fVwiXHJcbiAgICAgICAgICBbbmdDbGFzc109XCJnZXRMYWJlbE5nQ2xhc3MoKVwiXHJcbiAgICAgICAgICBbbmdTdHlsZV09XCJnZXRMYWJlbFN0eWxlKClcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIHt7IGdldFdpZGdldExhYmVsKHdpZGdldEluc3RhbmNlKSB9fVxyXG4gICAgICAgIDwvaDQ+XHJcbiAgICAgICAgPG1hdC1oaW50ICpuZ0lmPVwid2lkZ2V0SW5zdGFuY2U/LmhpbnQ/LnBvc2l0aW9uID09PSBTbWFydFdpZGdldEhpbnRQb3NpdGlvbi5MQUJFTFwiPnt7XHJcbiAgICAgICAgICB3aWRnZXRJbnN0YW5jZS5oaW50Py50ZXh0XHJcbiAgICAgICAgfX08L21hdC1oaW50PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPG1hdC1mb3JtLWZpZWxkXHJcbiAgICAgICAgY2xhc3M9XCJpbnB1dCB3aWRnZXRDb250ZW50IHt7IHdpZGdldEluc3RhbmNlLmNzc0NsYXNzID8/ICcnIH19XCJcclxuICAgICAgICBbbmdDbGFzc109XCJnZXROZ0NsYXNzKClcIlxyXG4gICAgICAgIFtuZ1N0eWxlXT1cImdldFN0eWxlKClcIlxyXG4gICAgICAgIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxtYXQtbGFiZWxcclxuICAgICAgICAgIGNsYXNzPVwibGFiZWxcIlxyXG4gICAgICAgICAgW25nQ2xhc3NdPVwid2lkZ2V0SW5zdGFuY2UuY3NzTGFiZWxDbGFzcyA/PyAnJ1wiXHJcbiAgICAgICAgICAqbmdJZj1cIiF3aWRnZXRJbnN0YW5jZS5zaG93TGFiZWxcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIHt7IGdldFdpZGdldExhYmVsKHdpZGdldEluc3RhbmNlKSB9fVxyXG4gICAgICAgIDwvbWF0LWxhYmVsPlxyXG4gICAgICAgIDxtYXQtY2hpcC1saXN0ICNjaGlwTGlzdCBhcmlhLWxhYmVsPVwie3sgd2lkZ2V0SW5zdGFuY2UubGFiZWwgfX1cIj5cclxuICAgICAgICAgIDxtYXQtY2hpcFxyXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwid2lkZ2V0SW5zdGFuY2UuaXNEaXNhYmxlZFwiXHJcbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCB2YWx1ZSBvZiB3aWRnZXRJbnN0YW5jZS52YWx1ZVwiXHJcbiAgICAgICAgICAgIChyZW1vdmVkKT1cInJlbW92ZSh2YWx1ZSlcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICB7eyB2YWx1ZSB9fVxyXG4gICAgICAgICAgICA8YnV0dG9uIG1hdENoaXBSZW1vdmU+XHJcbiAgICAgICAgICAgICAgPG1hdC1pY29uPmNhbmNlbDwvbWF0LWljb24+XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPC9tYXQtY2hpcD5cclxuICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAjY2hpcElucHV0XHJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwie3sgd2lkZ2V0SW5zdGFuY2UucGxhY2Vob2xkZXIgfX1cIlxyXG4gICAgICAgICAgICBbbWF0Q2hpcElucHV0Rm9yXT1cImNoaXBMaXN0XCJcclxuICAgICAgICAgICAgW21hdENoaXBJbnB1dFNlcGFyYXRvcktleUNvZGVzXT1cInNlcGFyYXRvcktleXNDb2Rlc1wiXHJcbiAgICAgICAgICAgIFttYXRDaGlwSW5wdXRBZGRPbkJsdXJdPVwiYWRkT25CbHVyXCJcclxuICAgICAgICAgICAgW3JlYWRvbmx5XT1cIndpZGdldEluc3RhbmNlLmlzUmVhZG9ubHlcIlxyXG4gICAgICAgICAgICBbbWF0QXV0b2NvbXBsZXRlXT1cImNoaXBBdXRvXCJcclxuICAgICAgICAgICAgKG1hdENoaXBJbnB1dFRva2VuRW5kKT1cImFkZCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgKGJsdXIpPVwib25CbHVyPy5uZXh0KCRldmVudClcIlxyXG4gICAgICAgICAgICAoaW5wdXQpPVwib25WYWx1ZUNoYW5nZT8ubmV4dCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cIndpZGdldEluc3RhbmNlLmlzRGlzYWJsZWRcIlxyXG4gICAgICAgICAgLz5cclxuICAgICAgICAgIDxtYXQtYXV0b2NvbXBsZXRlXHJcbiAgICAgICAgICAgICNjaGlwQXV0bz1cIm1hdEF1dG9jb21wbGV0ZVwiXHJcbiAgICAgICAgICAgIChvcHRpb25TZWxlY3RlZCk9XCJzZWxlY3RlZCgkZXZlbnQsIHdpZGdldEluc3RhbmNlKVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxtYXQtb3B0aW9uXHJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIndpZGdldEluc3RhbmNlLmlzRGlzYWJsZWRcIlxyXG4gICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIHdpZGdldEluc3RhbmNlLnZhbHVlTGlzdFwiXHJcbiAgICAgICAgICAgICAgW3ZhbHVlXT1cIml0ZW0udmFsdWVcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAge3sgaXRlbS5sYWJlbCB9fVxyXG4gICAgICAgICAgICA8L21hdC1vcHRpb24+XHJcbiAgICAgICAgICA8L21hdC1hdXRvY29tcGxldGU+XHJcbiAgICAgICAgPC9tYXQtY2hpcC1saXN0PlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwibWF0LWVycm9yXCI+XHJcbiAgICAgICAgICB7eyB3aWRnZXRJbnN0YW5jZS5lcnJvciB9fVxyXG4gICAgICAgIDwvc3Bhbj5cclxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXZcclxuICAgICAgKm5nSWY9XCJ3aWRnZXRJbnN0YW5jZS50eXBlID09PSBzbWFydEZvcm1XaWRnZXRUeXBlLlRFWFRfRklFTERfTE9PS1VQXCJcclxuICAgICAgY2xhc3M9XCJ3aWRnZXRDb250YWluZXJcIlxyXG4gICAgPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwibGFiZWxDb250YWluZXJcIiAqbmdJZj1cIndpZGdldEluc3RhbmNlLnNob3dMYWJlbFwiPlxyXG4gICAgICAgIDxoNFxyXG4gICAgICAgICAgY2xhc3M9XCJ7eyBsYWJlbENvbG9yIH19IHNtYXJ0LWZvcm0td2lkZ2V0LWxhYmVsIHt7IHdpZGdldEluc3RhbmNlLmNzc0xhYmVsQ2xhc3MgPz8gJycgfX1cIlxyXG4gICAgICAgICAgW25nQ2xhc3NdPVwiZ2V0TGFiZWxOZ0NsYXNzKClcIlxyXG4gICAgICAgICAgW25nU3R5bGVdPVwiZ2V0TGFiZWxTdHlsZSgpXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICB7eyBnZXRXaWRnZXRMYWJlbCh3aWRnZXRJbnN0YW5jZSkgfX1cclxuICAgICAgICA8L2g0PlxyXG4gICAgICAgIDxtYXQtaGludCAqbmdJZj1cIndpZGdldEluc3RhbmNlPy5oaW50Py5wb3NpdGlvbiA9PT0gU21hcnRXaWRnZXRIaW50UG9zaXRpb24uTEFCRUxcIj57e1xyXG4gICAgICAgICAgd2lkZ2V0SW5zdGFuY2UuaGludD8udGV4dFxyXG4gICAgICAgIH19PC9tYXQtaGludD5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxtYXQtZm9ybS1maWVsZFxyXG4gICAgICAgIGNsYXNzPVwiaW5wdXQgd2lkZ2V0Q29udGVudCB7eyB3aWRnZXRJbnN0YW5jZS5jc3NDbGFzcyA/PyAnJyB9fVwiXHJcbiAgICAgICAgW25nQ2xhc3NdPVwiZ2V0TmdDbGFzcygpXCJcclxuICAgICAgICBbbmdTdHlsZV09XCJnZXRTdHlsZSgpXCJcclxuICAgICAgICBhcHBlYXJhbmNlPVwib3V0bGluZVwiXHJcbiAgICAgID5cclxuICAgICAgICA8bWF0LWxhYmVsXHJcbiAgICAgICAgICBjbGFzcz1cImxhYmVsXCJcclxuICAgICAgICAgIFtuZ0NsYXNzXT1cIndpZGdldEluc3RhbmNlLmNzc0xhYmVsQ2xhc3MgPz8gJydcIlxyXG4gICAgICAgICAgKm5nSWY9XCIhd2lkZ2V0SW5zdGFuY2Uuc2hvd0xhYmVsXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICB7eyBnZXRXaWRnZXRMYWJlbCh3aWRnZXRJbnN0YW5jZSkgfX1cclxuICAgICAgICA8L21hdC1sYWJlbD5cclxuICAgICAgICA8bWF0LWNoaXAtbGlzdCAjY2hpcExpc3RMb29rdXAgYXJpYS1sYWJlbD1cInt7IHdpZGdldEluc3RhbmNlLmxhYmVsIH19XCI+XHJcbiAgICAgICAgICA8bWF0LWNoaXBcclxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cIndpZGdldEluc3RhbmNlLmlzRGlzYWJsZWRcIlxyXG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgdmFsdWUgb2Ygd2lkZ2V0SW5zdGFuY2UudmFsdWVcIlxyXG4gICAgICAgICAgICAocmVtb3ZlZCk9XCJyZW1vdmUodmFsdWUpXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAge3sgZ2V0Q2hpcHNWYWx1ZSh2YWx1ZSkgfX1cclxuICAgICAgICAgICAgPGJ1dHRvbiBtYXRDaGlwUmVtb3ZlPlxyXG4gICAgICAgICAgICAgIDxtYXQtaWNvbj5jYW5jZWw8L21hdC1pY29uPlxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDwvbWF0LWNoaXA+XHJcbiAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJ7eyB3aWRnZXRJbnN0YW5jZS5wbGFjZWhvbGRlciB9fVwiXHJcbiAgICAgICAgICAgIFttYXRDaGlwSW5wdXRGb3JdPVwiY2hpcExpc3RMb29rdXBcIlxyXG4gICAgICAgICAgICBbbWF0Q2hpcElucHV0U2VwYXJhdG9yS2V5Q29kZXNdPVwiZW1wdHlTZXBhcmF0b3JLZXlzQ29kZXNcIlxyXG4gICAgICAgICAgICBbbWF0Q2hpcElucHV0QWRkT25CbHVyXT1cImZhbHNlXCJcclxuICAgICAgICAgICAgW3JlYWRvbmx5XT1cInRydWVcIlxyXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwid2lkZ2V0SW5zdGFuY2UuaXNEaXNhYmxlZFwiXHJcbiAgICAgICAgICAvPlxyXG4gICAgICAgIDwvbWF0LWNoaXAtbGlzdD5cclxuICAgICAgICA8c21hcnQtdWktYWN0aW9uLXRvb2xiYXJcclxuICAgICAgICAgICN0b29sYmFyXHJcbiAgICAgICAgICAqbmdJZj1cImlzVG9vbGJhclByZXNlbnQoKVwiXHJcbiAgICAgICAgICBtYXRTdWZmaXhcclxuICAgICAgICAgIFtpZF09XCJ3aWRnZXRJbnN0YW5jZS50b29sYmFySWRcIlxyXG4gICAgICAgID48L3NtYXJ0LXVpLWFjdGlvbi10b29sYmFyPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwibWF0LWVycm9yXCI+XHJcbiAgICAgICAgICB7eyB3aWRnZXRJbnN0YW5jZS5lcnJvciB9fVxyXG4gICAgICAgIDwvc3Bhbj5cclxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgKm5nSWY9XCJ3aWRnZXRJbnN0YW5jZS50eXBlID09PSBzbWFydEZvcm1XaWRnZXRUeXBlLlRFWFRfQk9YXCIgY2xhc3M9XCJ3aWRnZXRDb250YWluZXJcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImxhYmVsQ29udGFpbmVyXCIgKm5nSWY9XCJ3aWRnZXRJbnN0YW5jZS5zaG93TGFiZWxcIj5cclxuICAgICAgICA8aDRcclxuICAgICAgICAgIGNsYXNzPVwie3sgbGFiZWxDb2xvciB9fSBzbWFydC1mb3JtLXdpZGdldC1sYWJlbCB7eyB3aWRnZXRJbnN0YW5jZS5jc3NMYWJlbENsYXNzID8/ICcnIH19XCJcclxuICAgICAgICAgIFtuZ0NsYXNzXT1cImdldExhYmVsTmdDbGFzcygpXCJcclxuICAgICAgICAgIFtuZ1N0eWxlXT1cImdldExhYmVsU3R5bGUoKVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAge3sgZ2V0V2lkZ2V0TGFiZWwod2lkZ2V0SW5zdGFuY2UpIH19XHJcbiAgICAgICAgPC9oND5cclxuICAgICAgICA8bWF0LWhpbnQgKm5nSWY9XCJ3aWRnZXRJbnN0YW5jZT8uaGludD8ucG9zaXRpb24gPT09IFNtYXJ0V2lkZ2V0SGludFBvc2l0aW9uLkxBQkVMXCI+e3tcclxuICAgICAgICAgIHdpZGdldEluc3RhbmNlLmhpbnQ/LnRleHRcclxuICAgICAgICB9fTwvbWF0LWhpbnQ+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8bWF0LWZvcm0tZmllbGRcclxuICAgICAgICBjbGFzcz1cImlucHV0IHdpZGdldENvbnRlbnQge3sgd2lkZ2V0SW5zdGFuY2UuY3NzQ2xhc3MgPz8gJycgfX1cIlxyXG4gICAgICAgIFtuZ0NsYXNzXT1cImdldE5nQ2xhc3MoKVwiXHJcbiAgICAgICAgW25nU3R5bGVdPVwiZ2V0U3R5bGUoKVwiXHJcbiAgICAgICAgYXBwZWFyYW5jZT1cIm91dGxpbmVcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPG1hdC1sYWJlbFxyXG4gICAgICAgICAgY2xhc3M9XCJsYWJlbFwiXHJcbiAgICAgICAgICBbbmdDbGFzc109XCJ3aWRnZXRJbnN0YW5jZS5jc3NMYWJlbENsYXNzID8/ICcnXCJcclxuICAgICAgICAgICpuZ0lmPVwiIXdpZGdldEluc3RhbmNlLnNob3dMYWJlbFwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAge3sgZ2V0V2lkZ2V0TGFiZWwod2lkZ2V0SW5zdGFuY2UpIH19XHJcbiAgICAgICAgPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgPHRleHRhcmVhXHJcbiAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cIndpZGdldEluc3RhbmNlLmtleVwiXHJcbiAgICAgICAgICBbaWRdPVwid2lkZ2V0SW5zdGFuY2Uua2V5XCJcclxuICAgICAgICAgIFt0eXBlXT1cIidzdHJpbmcnXCJcclxuICAgICAgICAgIFt2YWx1ZV09XCJ3aWRnZXRJbnN0YW5jZS52YWx1ZVwiXHJcbiAgICAgICAgICBbcmVhZG9ubHldPVwid2lkZ2V0SW5zdGFuY2UuaXNSZWFkb25seVwiXHJcbiAgICAgICAgICBwbGFjZWhvbGRlcj1cInt7IHdpZGdldEluc3RhbmNlLnBsYWNlaG9sZGVyIH19XCJcclxuICAgICAgICAgIG1hdElucHV0XHJcbiAgICAgICAgICAoYmx1cik9XCJvbkJsdXI/Lm5leHQoJGV2ZW50KVwiXHJcbiAgICAgICAgICBtYXhsZW5ndGg9XCJ7eyB3aWRnZXRJbnN0YW5jZS5tYXhMZW5ndGggfX1cIlxyXG4gICAgICAgID48L3RleHRhcmVhPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwibWF0LWVycm9yXCI+XHJcbiAgICAgICAgICB7eyB3aWRnZXRJbnN0YW5jZS5lcnJvciB9fVxyXG4gICAgICAgIDwvc3Bhbj5cclxuICAgICAgICA8c21hcnQtaWNvblxyXG4gICAgICAgICAgKm5nSWY9XCJ3aWRnZXRJbnN0YW5jZS5lcnJvciAmJiB3aWRnZXRJbnN0YW5jZS5lcnJvckljb25cIlxyXG4gICAgICAgICAgW2ljb25dPVwid2lkZ2V0SW5zdGFuY2UuZXJyb3JJY29uXCJcclxuICAgICAgICAgIFtjb2xvcl09XCJ3aWRnZXRJbnN0YW5jZS5lcnJvckljb25Db2xvciA/PyAnd2FybidcIlxyXG4gICAgICAgICAgbWF0U3VmZml4XHJcbiAgICAgICAgPjwvc21hcnQtaWNvbj5cclxuICAgICAgICA8bWF0LWhpbnRcclxuICAgICAgICAgICpuZ0lmPVwid2lkZ2V0SW5zdGFuY2Uuc2hvd0NoYXJhY3RlckxpbWl0U3VmZml4ICYmIHdpZGdldEluc3RhbmNlLm1heExlbmd0aFwiXHJcbiAgICAgICAgICBtYXRTdWZmaXhcclxuICAgICAgICAgIGFsaWduPVwiZW5kXCJcclxuICAgICAgICAgID57eyB3aWRnZXRJbnN0YW5jZS5tYXhMZW5ndGggLSBmb3JtLmNvbnRyb2xzW3dpZGdldEluc3RhbmNlLmtleV0udmFsdWUubGVuZ3RoIH19PC9tYXQtaGludFxyXG4gICAgICAgID5cclxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgPG1hdC1oaW50XHJcbiAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICF3aWRnZXRJbnN0YW5jZS5oaW50IHx8IHdpZGdldEluc3RhbmNlLmhpbnQ/LnBvc2l0aW9uID09PSBTbWFydFdpZGdldEhpbnRQb3NpdGlvbi5JTlBVVFxyXG4gICAgICAgIFwiXHJcbiAgICAgICAgPnt7IHdpZGdldEluc3RhbmNlLmhpbnQ/LnRleHQgfX08L21hdC1oaW50XHJcbiAgICAgID5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgKm5nSWY9XCJ3aWRnZXRJbnN0YW5jZS50eXBlID09PSBzbWFydEZvcm1XaWRnZXRUeXBlLkNIRUNLX0JPWFwiIGNsYXNzPVwid2lkZ2V0Q29udGFpbmVyXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJsYWJlbENvbnRhaW5lclwiICpuZ0lmPVwid2lkZ2V0SW5zdGFuY2Uuc2hvd0xhYmVsXCI+XHJcbiAgICAgICAgPGg0XHJcbiAgICAgICAgICBjbGFzcz1cInt7IGxhYmVsQ29sb3IgfX0gc21hcnQtZm9ybS13aWRnZXQtbGFiZWwge3sgd2lkZ2V0SW5zdGFuY2UuY3NzTGFiZWxDbGFzcyA/PyAnJyB9fVwiXHJcbiAgICAgICAgICBbbmdDbGFzc109XCJnZXRMYWJlbE5nQ2xhc3MoKVwiXHJcbiAgICAgICAgICBbbmdTdHlsZV09XCJnZXRMYWJlbFN0eWxlKClcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIHt7IGdldFdpZGdldExhYmVsKHdpZGdldEluc3RhbmNlKSB9fVxyXG4gICAgICAgIDwvaDQ+XHJcbiAgICAgICAgPG1hdC1oaW50ICpuZ0lmPVwid2lkZ2V0SW5zdGFuY2U/LmhpbnQ/LnBvc2l0aW9uID09PSBTbWFydFdpZGdldEhpbnRQb3NpdGlvbi5MQUJFTFwiPnt7XHJcbiAgICAgICAgICB3aWRnZXRJbnN0YW5jZS5oaW50Py50ZXh0XHJcbiAgICAgICAgfX08L21hdC1oaW50PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdlxyXG4gICAgICAgIGNsYXNzPVwiaW5wdXQgY2hlY2tib3ggd2lkZ2V0Q29udGVudCB7eyB3aWRnZXRJbnN0YW5jZS5jc3NDbGFzcyA/PyAnJyB9fVwiXHJcbiAgICAgICAgW25nQ2xhc3NdPVwiZ2V0TmdDbGFzcygpXCJcclxuICAgICAgICBbbmdTdHlsZV09XCJnZXRTdHlsZSgpXCJcclxuICAgICAgICBhcHBlYXJhbmNlPVwib3V0bGluZVwiXHJcbiAgICAgID5cclxuICAgICAgICA8bWF0LWxhYmVsIGNsYXNzPVwicmFkaW9MYWJlbFwiICpuZ0lmPVwiIXdpZGdldEluc3RhbmNlLnNob3dMYWJlbFwiPlxyXG4gICAgICAgICAge3sgZ2V0V2lkZ2V0TGFiZWwod2lkZ2V0SW5zdGFuY2UpIH19XHJcbiAgICAgICAgPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgPHNlY3Rpb24gY2xhc3M9XCJjaGVja2JveC1zZWN0aW9uXCIgW25nQ2xhc3NdPVwiZ2V0RGlyZWN0aW9uKClcIj5cclxuICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgY2xhc3M9XCJjaGVja2JveC1pdGVtLWNvbnRhaW5lclwiXHJcbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCBjaGVja2JveCBvZiB3aWRnZXRJbnN0YW5jZS52YWx1ZUxpc3Q7IGxldCBpID0gaW5kZXhcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8aW1nXHJcbiAgICAgICAgICAgICAgKm5nSWY9XCJjaGVja2JveC5pbWFnZVVybFwiXHJcbiAgICAgICAgICAgICAgdGl0bGU9XCJ7eyB3aWRnZXRJbnN0YW5jZS5rZXkgfX1cIlxyXG4gICAgICAgICAgICAgIGNsYXNzPVwiY2hlY2tib3gtaXRlbS1pbWFnZVwiXHJcbiAgICAgICAgICAgICAgW3NyY109XCJjaGVja2JveC5pbWFnZVVybFwiXHJcbiAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgIDxtYXQtY2hlY2tib3hcclxuICAgICAgICAgICAgICBjbGFzcz1cInNlbGVjYXRibGVPYmplY3RcIlxyXG4gICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInt7IHdpZGdldEluc3RhbmNlLmtleSB9fVwiXHJcbiAgICAgICAgICAgICAgW25nTW9kZWxdPVwiY2hlY2tib3gudmFsdWVcIlxyXG4gICAgICAgICAgICAgIChjaGFuZ2UpPVwib25WYWx1ZUNoYW5nZT8ubmV4dChjaGVja2JveClcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAge3sgY2hlY2tib3gubGFiZWwgfX1cclxuICAgICAgICAgICAgPC9tYXQtY2hlY2tib3g+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJyYWRpby1lcnJvclwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdC1lcnJvclwiPlxyXG4gICAgICAgICAgICAgIHt7IHdpZGdldEluc3RhbmNlLmVycm9yIH19XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPHNtYXJ0LWljb25cclxuICAgICAgICAgICAgICAqbmdJZj1cIndpZGdldEluc3RhbmNlLmVycm9yICYmIHdpZGdldEluc3RhbmNlLmVycm9ySWNvblwiXHJcbiAgICAgICAgICAgICAgW2ljb25dPVwid2lkZ2V0SW5zdGFuY2UuZXJyb3JJY29uXCJcclxuICAgICAgICAgICAgICBbY29sb3JdPVwid2lkZ2V0SW5zdGFuY2UuZXJyb3JJY29uQ29sb3IgPz8gJ3dhcm4nXCJcclxuICAgICAgICAgICAgPjwvc21hcnQtaWNvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvc2VjdGlvbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgKm5nSWY9XCJ3aWRnZXRJbnN0YW5jZS50eXBlID09PSBzbWFydEZvcm1XaWRnZXRUeXBlLkNIRUNLX0JPWF8yXCIgY2xhc3M9XCJ3aWRnZXRDb250YWluZXJcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImxhYmVsQ29udGFpbmVyXCIgKm5nSWY9XCJ3aWRnZXRJbnN0YW5jZS5zaG93TGFiZWxcIj5cclxuICAgICAgICA8aDRcclxuICAgICAgICAgIGNsYXNzPVwie3sgbGFiZWxDb2xvciB9fSBzbWFydC1mb3JtLXdpZGdldC1sYWJlbCB7eyB3aWRnZXRJbnN0YW5jZS5jc3NMYWJlbENsYXNzIH19XCJcclxuICAgICAgICAgIFtuZ0NsYXNzXT1cImdldExhYmVsTmdDbGFzcygpXCJcclxuICAgICAgICAgIFtuZ1N0eWxlXT1cImdldExhYmVsU3R5bGUoKVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAge3sgZ2V0V2lkZ2V0TGFiZWwod2lkZ2V0SW5zdGFuY2UpIH19XHJcbiAgICAgICAgPC9oND5cclxuICAgICAgICA8bWF0LWhpbnQgKm5nSWY9XCJ3aWRnZXRJbnN0YW5jZT8uaGludD8ucG9zaXRpb24gPT09IFNtYXJ0V2lkZ2V0SGludFBvc2l0aW9uLkxBQkVMXCI+e3tcclxuICAgICAgICAgIHdpZGdldEluc3RhbmNlLmhpbnQ/LnRleHRcclxuICAgICAgICB9fTwvbWF0LWhpbnQ+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2XHJcbiAgICAgICAgY2xhc3M9XCJpbnB1dCBjaGVja2JveCB3aWRnZXRDb250ZW50IHt7IHdpZGdldEluc3RhbmNlLmNzc0NsYXNzID8/ICcnIH19XCJcclxuICAgICAgICBbbmdDbGFzc109XCJnZXROZ0NsYXNzKClcIlxyXG4gICAgICAgIFtuZ1N0eWxlXT1cImdldFN0eWxlKClcIlxyXG4gICAgICAgIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxtYXQtbGFiZWwgY2xhc3M9XCJyYWRpb0xhYmVsXCIgKm5nSWY9XCIhd2lkZ2V0SW5zdGFuY2Uuc2hvd0xhYmVsXCI+XHJcbiAgICAgICAgICB7eyBnZXRXaWRnZXRMYWJlbCh3aWRnZXRJbnN0YW5jZSkgfX1cclxuICAgICAgICA8L21hdC1sYWJlbD5cclxuICAgICAgICA8c2VjdGlvbiBjbGFzcz1cImNoZWNrYm94LXNlY3Rpb25cIiBbbmdDbGFzc109XCJnZXREaXJlY3Rpb24oKVwiPlxyXG4gICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICBjbGFzcz1cImNoZWNrYm94LWl0ZW0tY29udGFpbmVyXCJcclxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IGNoZWNrYm94IG9mIHdpZGdldEluc3RhbmNlLnZhbHVlTGlzdDsgbGV0IGkgPSBpbmRleFwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxpbWdcclxuICAgICAgICAgICAgICAqbmdJZj1cImNoZWNrYm94LmltYWdlVXJsXCJcclxuICAgICAgICAgICAgICB0aXRsZT1cInt7IHdpZGdldEluc3RhbmNlLmtleSB9fVwiXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJjaGVja2JveC1pdGVtLWltYWdlXCJcclxuICAgICAgICAgICAgICBbc3JjXT1cImNoZWNrYm94LmltYWdlVXJsXCJcclxuICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgPG1hdC1jaGVja2JveFxyXG4gICAgICAgICAgICAgIGNsYXNzPVwic2VsZWNhdGJsZU9iamVjdFwiXHJcbiAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwie3sgd2lkZ2V0SW5zdGFuY2Uua2V5ICsgJy4nICsgY2hlY2tib3gua2V5IH19XCJcclxuICAgICAgICAgICAgICBbdmFsdWVdPVwiY2hlY2tib3gudmFsdWVcIlxyXG4gICAgICAgICAgICAgIChjaGFuZ2UpPVwib25WYWx1ZUNoYW5nZT8ubmV4dChjaGVja2JveClcIlxyXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJ3aWRnZXRJbnN0YW5jZS5pc0Rpc2FibGVkIVwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICB7eyBjaGVja2JveC5sYWJlbCB9fVxyXG4gICAgICAgICAgICA8L21hdC1jaGVja2JveD5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJhZGlvLWVycm9yXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0LWVycm9yXCI+XHJcbiAgICAgICAgICAgICAge3sgd2lkZ2V0SW5zdGFuY2UuZXJyb3IgfX1cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICA8c21hcnQtaWNvblxyXG4gICAgICAgICAgICAgICpuZ0lmPVwid2lkZ2V0SW5zdGFuY2UuZXJyb3IgJiYgd2lkZ2V0SW5zdGFuY2UuZXJyb3JJY29uXCJcclxuICAgICAgICAgICAgICBbaWNvbl09XCJ3aWRnZXRJbnN0YW5jZS5lcnJvckljb25cIlxyXG4gICAgICAgICAgICAgIFtjb2xvcl09XCJ3aWRnZXRJbnN0YW5jZS5lcnJvckljb25Db2xvciA/PyAnd2FybidcIlxyXG4gICAgICAgICAgICA+PC9zbWFydC1pY29uPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9zZWN0aW9uPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgKm5nSWY9XCJ3aWRnZXRJbnN0YW5jZS50eXBlID09PSBzbWFydEZvcm1XaWRnZXRUeXBlLlJBRElPX0JVVFRPTlwiIGNsYXNzPVwid2lkZ2V0Q29udGFpbmVyXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJsYWJlbENvbnRhaW5lclwiICpuZ0lmPVwid2lkZ2V0SW5zdGFuY2Uuc2hvd0xhYmVsXCI+XHJcbiAgICAgICAgPGg0XHJcbiAgICAgICAgICBjbGFzcz1cInt7IGxhYmVsQ29sb3IgfX0gc21hcnQtZm9ybS13aWRnZXQtbGFiZWwge3sgd2lkZ2V0SW5zdGFuY2UuY3NzTGFiZWxDbGFzcyB9fVwiXHJcbiAgICAgICAgICBbbmdDbGFzc109XCJnZXRMYWJlbE5nQ2xhc3MoKVwiXHJcbiAgICAgICAgICBbbmdTdHlsZV09XCJnZXRMYWJlbFN0eWxlKClcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIHt7IGdldFdpZGdldExhYmVsKHdpZGdldEluc3RhbmNlKSB9fVxyXG4gICAgICAgIDwvaDQ+XHJcbiAgICAgICAgPG1hdC1oaW50ICpuZ0lmPVwid2lkZ2V0SW5zdGFuY2U/LmhpbnQ/LnBvc2l0aW9uID09PSBTbWFydFdpZGdldEhpbnRQb3NpdGlvbi5MQUJFTFwiPnt7XHJcbiAgICAgICAgICB3aWRnZXRJbnN0YW5jZS5oaW50Py50ZXh0XHJcbiAgICAgICAgfX08L21hdC1oaW50PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPG1hdC1yYWRpby1ncm91cFxyXG4gICAgICAgIGNsYXNzPVwiaW5wdXQgcmFkaW8tc2VjdGlvbiB3aWRnZXRDb250ZW50IHt7IHdpZGdldEluc3RhbmNlLmNzc0NsYXNzID8/ICcnIH19XCJcclxuICAgICAgICBbbmdDbGFzc109XCJnZXROZ0NsYXNzKClcIlxyXG4gICAgICAgIFtuZ1N0eWxlXT1cImdldFN0eWxlKClcIlxyXG4gICAgICAgIGFyaWEtbGFiZWw9XCJ7eyB3aWRnZXRJbnN0YW5jZS5sYWJlbCB9fVwiXHJcbiAgICAgICAgYXBwZWFyYW5jZT1cIm91dGxpbmVcIlxyXG4gICAgICAgIGZvcm1Db250cm9sTmFtZT1cInt7IHdpZGdldEluc3RhbmNlLmtleSB9fVwiXHJcbiAgICAgID5cclxuICAgICAgICA8bWF0LWxhYmVsIGNsYXNzPVwicmFkaW9MYWJlbFwiICpuZ0lmPVwiIXdpZGdldEluc3RhbmNlLnNob3dMYWJlbFwiPlxyXG4gICAgICAgICAge3sgZ2V0V2lkZ2V0TGFiZWwod2lkZ2V0SW5zdGFuY2UpIH19XHJcbiAgICAgICAgPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgPGRpdiBbbmdDbGFzc109XCJnZXREaXJlY3Rpb24oKVwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJhZGlvLWl0ZW0tY29udGFpbmVyXCIgKm5nRm9yPVwibGV0IHJhZGlvIG9mIHdpZGdldEluc3RhbmNlLnZhbHVlTGlzdFwiPlxyXG4gICAgICAgICAgICA8aW1nXHJcbiAgICAgICAgICAgICAgKm5nSWY9XCJyYWRpby5pbWFnZVVybFwiXHJcbiAgICAgICAgICAgICAgdGl0bGU9XCJ7eyB3aWRnZXRJbnN0YW5jZS5rZXkgfX1cIlxyXG4gICAgICAgICAgICAgIGNsYXNzPVwicmFkaW8taXRlbS1pbWFnZVwiXHJcbiAgICAgICAgICAgICAgW3NyY109XCJyYWRpby5pbWFnZVVybFwiXHJcbiAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgIDxtYXQtcmFkaW8tYnV0dG9uXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJzZWxlY2F0YmxlT2JqZWN0XCJcclxuICAgICAgICAgICAgICB2YWx1ZT1cInt7IHJhZGlvLnZhbHVlIH19XCJcclxuICAgICAgICAgICAgICBbbmdDbGFzc109XCJnZXREaXJlY3Rpb24oKVwiXHJcbiAgICAgICAgICAgICAgKGNoYW5nZSk9XCJvblZhbHVlQ2hhbmdlPy5uZXh0KHJhZGlvLnZhbHVlKVwiXHJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIndpZGdldEluc3RhbmNlLmlzRGlzYWJsZWRcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAge3sgcmFkaW8ubGFiZWwgfX1cclxuICAgICAgICAgICAgPC9tYXQtcmFkaW8tYnV0dG9uPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicmFkaW8tZXJyb3JcIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXQtZXJyb3JcIj5cclxuICAgICAgICAgICAgICB7eyB3aWRnZXRJbnN0YW5jZS5lcnJvciB9fVxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDxzbWFydC1pY29uXHJcbiAgICAgICAgICAgICAgKm5nSWY9XCJ3aWRnZXRJbnN0YW5jZS5lcnJvciAmJiB3aWRnZXRJbnN0YW5jZS5lcnJvckljb25cIlxyXG4gICAgICAgICAgICAgIFtpY29uXT1cIndpZGdldEluc3RhbmNlLmVycm9ySWNvblwiXHJcbiAgICAgICAgICAgICAgW2NvbG9yXT1cIndpZGdldEluc3RhbmNlLmVycm9ySWNvbkNvbG9yID8/ICd3YXJuJ1wiXHJcbiAgICAgICAgICAgID48L3NtYXJ0LWljb24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9tYXQtcmFkaW8tZ3JvdXA+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2XHJcbiAgICAgICpuZ0lmPVwid2lkZ2V0SW5zdGFuY2UudHlwZSA9PT0gc21hcnRGb3JtV2lkZ2V0VHlwZS5EQVRFX1BJQ0tFUlwiXHJcbiAgICAgIGNsYXNzPVwiZGF0ZVBpY2tlciB3aWRnZXRDb250YWluZXJcIlxyXG4gICAgPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwibGFiZWxDb250YWluZXJcIiAqbmdJZj1cIndpZGdldEluc3RhbmNlLnNob3dMYWJlbFwiPlxyXG4gICAgICAgIDxoNFxyXG4gICAgICAgICAgY2xhc3M9XCJ7eyBsYWJlbENvbG9yIH19IHNtYXJ0LWZvcm0td2lkZ2V0LWxhYmVsIHt7IHdpZGdldEluc3RhbmNlLmNzc0xhYmVsQ2xhc3MgPz8gJycgfX1cIlxyXG4gICAgICAgICAgW25nQ2xhc3NdPVwiZ2V0TGFiZWxOZ0NsYXNzKClcIlxyXG4gICAgICAgICAgW25nU3R5bGVdPVwiZ2V0TGFiZWxTdHlsZSgpXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICB7eyBnZXRXaWRnZXRMYWJlbCh3aWRnZXRJbnN0YW5jZSkgfX1cclxuICAgICAgICA8L2g0PlxyXG4gICAgICAgIDxtYXQtaGludCAqbmdJZj1cIndpZGdldEluc3RhbmNlPy5oaW50Py5wb3NpdGlvbiA9PT0gU21hcnRXaWRnZXRIaW50UG9zaXRpb24uTEFCRUxcIj57e1xyXG4gICAgICAgICAgd2lkZ2V0SW5zdGFuY2UuaGludD8udGV4dFxyXG4gICAgICAgIH19PC9tYXQtaGludD5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxtYXQtZm9ybS1maWVsZFxyXG4gICAgICAgIGNsYXNzPVwiaW5wdXQgd2lkZ2V0Q29udGVudCBkYXRlIHt7IHdpZGdldEluc3RhbmNlLmNzc0NsYXNzID8/ICcnIH19XCJcclxuICAgICAgICBbbmdDbGFzc109XCJnZXROZ0NsYXNzKClcIlxyXG4gICAgICAgIFtuZ1N0eWxlXT1cImdldFN0eWxlKClcIlxyXG4gICAgICAgIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxtYXQtbGFiZWxcclxuICAgICAgICAgIGNsYXNzPVwibGFiZWxcIlxyXG4gICAgICAgICAgW25nQ2xhc3NdPVwid2lkZ2V0SW5zdGFuY2UuY3NzTGFiZWxDbGFzcyA/PyAnJ1wiXHJcbiAgICAgICAgICAqbmdJZj1cIiF3aWRnZXRJbnN0YW5jZS5zaG93TGFiZWxcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIHt7IGdldFdpZGdldExhYmVsKHdpZGdldEluc3RhbmNlKSB9fVxyXG4gICAgICAgIDwvbWF0LWxhYmVsPlxyXG4gICAgICAgIDxtYXQtZGF0ZXBpY2tlci10b2dnbGUgbWF0U3VmZml4IFtmb3JdPVwicGlja2VyXCI+PC9tYXQtZGF0ZXBpY2tlci10b2dnbGU+XHJcbiAgICAgICAgPG1hdC1kYXRlcGlja2VyICNwaWNrZXIgKGNsb3NlZCk9XCJvbkJsdXI/Lm5leHQod2lkZ2V0SW5zdGFuY2UpXCI+PC9tYXQtZGF0ZXBpY2tlcj5cclxuICAgICAgICA8aW5wdXRcclxuICAgICAgICAgIG1hdElucHV0XHJcbiAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cIndpZGdldEluc3RhbmNlLmtleVwiXHJcbiAgICAgICAgICBbaWRdPVwid2lkZ2V0SW5zdGFuY2Uua2V5XCJcclxuICAgICAgICAgIFt2YWx1ZV09XCJ3aWRnZXRJbnN0YW5jZS52YWx1ZVwiXHJcbiAgICAgICAgICBbbWluXT1cIndpZGdldEluc3RhbmNlLm1pbkRhdGUgPz8gbnVsbFwiXHJcbiAgICAgICAgICBbbWF4XT1cIndpZGdldEluc3RhbmNlLm1heERhdGUgPz8gbnVsbFwiXHJcbiAgICAgICAgICBwbGFjZWhvbGRlcj1cInt7IHdpZGdldEluc3RhbmNlLnBsYWNlaG9sZGVyIH19XCJcclxuICAgICAgICAgIFttYXREYXRlcGlja2VyXT1cInBpY2tlclwiXHJcbiAgICAgICAgICAoYmx1cik9XCJvbkJsdXI/Lm5leHQod2lkZ2V0SW5zdGFuY2UpXCJcclxuICAgICAgICAgIChkYXRlQ2hhbmdlKT1cIm9uVmFsdWVDaGFuZ2U/Lm5leHQod2lkZ2V0SW5zdGFuY2UpXCJcclxuICAgICAgICAgIFttYXREYXRlcGlja2VyRmlsdGVyXT1cIndpZGdldEluc3RhbmNlLmZpbHRlciA/PyBkYXRlRmlsdGVyXCJcclxuICAgICAgICAvPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwibWF0LWVycm9yXCI+XHJcbiAgICAgICAgICB7eyB3aWRnZXRJbnN0YW5jZS5lcnJvciB9fVxyXG4gICAgICAgIDwvc3Bhbj5cclxuICAgICAgICA8c21hcnQtaWNvblxyXG4gICAgICAgICAgKm5nSWY9XCJ3aWRnZXRJbnN0YW5jZS5lcnJvciAmJiB3aWRnZXRJbnN0YW5jZS5lcnJvckljb25cIlxyXG4gICAgICAgICAgW2ljb25dPVwid2lkZ2V0SW5zdGFuY2UuZXJyb3JJY29uXCJcclxuICAgICAgICAgIFtjb2xvcl09XCJ3aWRnZXRJbnN0YW5jZS5lcnJvckljb25Db2xvciA/PyAnd2FybidcIlxyXG4gICAgICAgICAgbWF0U3VmZml4XHJcbiAgICAgICAgPjwvc21hcnQtaWNvbj5cclxuICAgICAgICA8bWF0LWhpbnQ+XHJcbiAgICAgICAgICB7eyB3aWRnZXRJbnN0YW5jZS5kYXRlRm9ybWF0SGludCB9fVxyXG4gICAgICAgIDwvbWF0LWhpbnQ+XHJcbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8IS0tIDxkaXZcclxuICAgICAgKm5nSWY9XCJ3aWRnZXRJbnN0YW5jZS50eXBlID09PSBzbWFydEZvcm1XaWRnZXRUeXBlLkRBVEVfVElNRV9QSUNLRVJcIlxyXG4gICAgICBjbGFzcz1cIndpZGdldENvbnRhaW5lclwiXHJcbiAgICA+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJsYWJlbENvbnRhaW5lclwiICpuZ0lmPVwid2lkZ2V0SW5zdGFuY2Uuc2hvd0xhYmVsXCI+XHJcbiAgICAgICAgPGg0IGNsYXNzPVwie3sgbGFiZWxDb2xvciB9fSBzbWFydC1mb3JtLXdpZGdldC1sYWJlbFwiPlxyXG4gICAgICAgICAge3sgZ2V0V2lkZ2V0TGFiZWwod2lkZ2V0SW5zdGFuY2UpIH19XHJcbiAgICAgICAgPC9oND5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxtYXQtZm9ybS1maWVsZFxyXG4gICAgICAgIGNsYXNzPVwiaW5wdXQgd2lkZ2V0Q29udGVudFwiXHJcbiAgICAgICAgW25nQ2xhc3NdPVwid2lkZ2V0SW5zdGFuY2UuY3NzQ2xhc3MgPz8gJydcIlxyXG4gICAgICAgIFtuZ1N0eWxlXT1cInsgd2lkdGg6IHdpZGdldEluc3RhbmNlLm1pbldpZHRoICsgJ3B4JyB9XCJcclxuICAgICAgICBhcHBlYXJhbmNlPVwib3V0bGluZVwiXHJcbiAgICAgID5cclxuICAgICAgICA8bWF0LWxhYmVsXHJcbiAgICAgICAgICBjbGFzcz1cImxhYmVsXCJcclxuICAgICAgICAgIFtuZ0NsYXNzXT1cIndpZGdldEluc3RhbmNlLmNzc0xhYmVsQ2xhc3MgPz8gJydcIlxyXG4gICAgICAgICAgKm5nSWY9XCIhd2lkZ2V0SW5zdGFuY2Uuc2hvd0xhYmVsXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICB7eyBnZXRXaWRnZXRMYWJlbCh3aWRnZXRJbnN0YW5jZSkgfX1cclxuICAgICAgICA8L21hdC1sYWJlbD5cclxuICAgICAgICA8bWF0LWRhdGVwaWNrZXItdG9nZ2xlIG1hdFN1ZmZpeCBbZm9yXT1cIiRhbnkocGlja2VyKVwiPjwvbWF0LWRhdGVwaWNrZXItdG9nZ2xlPlxyXG4gICAgICAgIDxuZ3gtbWF0LWRhdGV0aW1lLXBpY2tlclxyXG4gICAgICAgICAgI3BpY2tlclxyXG4gICAgICAgICAgW3Nob3dTcGlubmVyc109XCJ0cnVlXCJcclxuICAgICAgICAgIFtzaG93U2Vjb25kc109XCJmYWxzZVwiXHJcbiAgICAgICAgICBbc3RlcEhvdXJdPVwiMVwiXHJcbiAgICAgICAgICBbc3RlcE1pbnV0ZV09XCIxXCJcclxuICAgICAgICAgIFtzdGVwU2Vjb25kXT1cIjEwXCJcclxuICAgICAgICAgIFt0b3VjaFVpXT1cImZhbHNlXCJcclxuICAgICAgICAgIFtjb2xvcl09XCIncHJpbWFyeSdcIlxyXG4gICAgICAgICAgW2VuYWJsZU1lcmlkaWFuXT1cImZhbHNlXCJcclxuICAgICAgICAgIFtkaXNhYmxlTWludXRlXT1cImZhbHNlXCJcclxuICAgICAgICAgIFtoaWRlVGltZV09XCJmYWxzZVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgIDwvbmd4LW1hdC1kYXRldGltZS1waWNrZXI+XHJcbiAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICBtYXRJbnB1dFxyXG4gICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJ3aWRnZXRJbnN0YW5jZS5rZXlcIlxyXG4gICAgICAgICAgW2lkXT1cIndpZGdldEluc3RhbmNlLmtleVwiXHJcbiAgICAgICAgICBbdmFsdWVdPVwid2lkZ2V0SW5zdGFuY2UudmFsdWVcIlxyXG4gICAgICAgICAgcGxhY2Vob2xkZXI9XCJ7eyB3aWRnZXRJbnN0YW5jZS5wbGFjZWhvbGRlciB9fVwiXHJcbiAgICAgICAgICBbbmd4TWF0RGF0ZXRpbWVQaWNrZXJdPVwicGlja2VyXCJcclxuICAgICAgICAgIFtuZ3hNYXREYXRldGltZVBpY2tlckZpbHRlcl09XCJ3aWRnZXRJbnN0YW5jZS5maWx0ZXIgPz8gZGF0ZUZpbHRlclwiXHJcbiAgICAgICAgICAoYmx1cik9XCJvbkJsdXI/Lm5leHQod2lkZ2V0SW5zdGFuY2UpXCJcclxuICAgICAgICAvPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwibWF0LWVycm9yXCI+XHJcbiAgICAgICAgICB7eyB3aWRnZXRJbnN0YW5jZS5lcnJvciB9fVxyXG4gICAgICAgIDwvc3Bhbj5cclxuICAgICAgICA8c21hcnQtaWNvblxyXG4gICAgICAgICAgKm5nSWY9XCJ3aWRnZXRJbnN0YW5jZS5lcnJvciAmJiB3aWRnZXRJbnN0YW5jZS5lcnJvckljb25cIlxyXG4gICAgICAgICAgW2ljb25dPVwid2lkZ2V0SW5zdGFuY2UuZXJyb3JJY29uXCJcclxuICAgICAgICAgIFtjb2xvcl09XCJ3aWRnZXRJbnN0YW5jZS5lcnJvckljb25Db2xvciA/PyAnd2FybidcIlxyXG4gICAgICAgICAgbWF0U3VmZml4XHJcbiAgICAgICAgPjwvc21hcnQtaWNvbj5cclxuICAgICAgICA8bWF0LWhpbnQ+XHJcbiAgICAgICAgICB7eyB3aWRnZXRJbnN0YW5jZS5kYXRlRm9ybWF0SGludCB9fVxyXG4gICAgICAgIDwvbWF0LWhpbnQ+XHJcbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICA8L2Rpdj4gLS0+XHJcblxyXG4gICAgPGRpdlxyXG4gICAgICAqbmdJZj1cIndpZGdldEluc3RhbmNlLnR5cGUgPT09IHNtYXJ0Rm9ybVdpZGdldFR5cGUuREFURV9USU1FX1BJQ0tFUlwiXHJcbiAgICAgIGNsYXNzPVwid2lkZ2V0Q29udGFpbmVyXCJcclxuICAgID5cclxuICAgICAgPGRpdiBjbGFzcz1cImxhYmVsQ29udGFpbmVyXCIgKm5nSWY9XCJ3aWRnZXRJbnN0YW5jZS5zaG93TGFiZWxcIj5cclxuICAgICAgICA8aDRcclxuICAgICAgICAgIGNsYXNzPVwie3sgbGFiZWxDb2xvciB9fSBzbWFydC1mb3JtLXdpZGdldC1sYWJlbCB7eyB3aWRnZXRJbnN0YW5jZS5jc3NMYWJlbENsYXNzID8/ICcnIH19XCJcclxuICAgICAgICAgIFtuZ0NsYXNzXT1cImdldExhYmVsTmdDbGFzcygpXCJcclxuICAgICAgICAgIFtuZ1N0eWxlXT1cImdldExhYmVsU3R5bGUoKVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAge3sgZ2V0V2lkZ2V0TGFiZWwod2lkZ2V0SW5zdGFuY2UpIH19XHJcbiAgICAgICAgPC9oND5cclxuICAgICAgICA8bWF0LWhpbnQgKm5nSWY9XCJ3aWRnZXRJbnN0YW5jZT8uaGludD8ucG9zaXRpb24gPT09IFNtYXJ0V2lkZ2V0SGludFBvc2l0aW9uLkxBQkVMXCI+e3tcclxuICAgICAgICAgIHdpZGdldEluc3RhbmNlLmhpbnQ/LnRleHRcclxuICAgICAgICB9fTwvbWF0LWhpbnQ+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZGF0ZVRpbWVQaWNrZXJDb250YWluZXJcIj5cclxuICAgICAgICA8bWF0LWZvcm0tZmllbGRcclxuICAgICAgICAgIGNsYXNzPVwiaW5wdXQgd2lkZ2V0Q29udGVudCBkYXRlIHt7IHdpZGdldEluc3RhbmNlLmNzc0NsYXNzID8/ICcnIH19XCJcclxuICAgICAgICAgIFtuZ0NsYXNzXT1cImdldE5nQ2xhc3MoKVwiXHJcbiAgICAgICAgICBbbmdTdHlsZV09XCJnZXRTdHlsZSgpXCJcclxuICAgICAgICAgIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8bWF0LWxhYmVsXHJcbiAgICAgICAgICAgIGNsYXNzPVwibGFiZWxcIlxyXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ3aWRnZXRJbnN0YW5jZS5jc3NMYWJlbENsYXNzID8/ICcnXCJcclxuICAgICAgICAgICAgKm5nSWY9XCIhd2lkZ2V0SW5zdGFuY2Uuc2hvd0xhYmVsXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAge3sgZ2V0V2lkZ2V0TGFiZWwod2lkZ2V0SW5zdGFuY2UpIH19XHJcbiAgICAgICAgICA8L21hdC1sYWJlbD5cclxuICAgICAgICAgIDxtYXQtZGF0ZXBpY2tlci10b2dnbGUgbWF0U3VmZml4IFtmb3JdPVwicGlja2VyXCI+PC9tYXQtZGF0ZXBpY2tlci10b2dnbGU+XHJcbiAgICAgICAgICA8bWF0LWRhdGVwaWNrZXIgI3BpY2tlciAoY2xvc2VkKT1cIm9uQmx1cj8ubmV4dCh3aWRnZXRJbnN0YW5jZSlcIj48L21hdC1kYXRlcGlja2VyPlxyXG4gICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICNkYXRlSW5wdXRcclxuICAgICAgICAgICAgbWF0SW5wdXRcclxuICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJ3aWRnZXRJbnN0YW5jZS5rZXlcIlxyXG4gICAgICAgICAgICBbaWRdPVwid2lkZ2V0SW5zdGFuY2Uua2V5XCJcclxuICAgICAgICAgICAgW3ZhbHVlXT1cIndpZGdldEluc3RhbmNlLnZhbHVlXCJcclxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJ7eyB3aWRnZXRJbnN0YW5jZS5wbGFjZWhvbGRlciB9fVwiXHJcbiAgICAgICAgICAgIFttYXREYXRlcGlja2VyXT1cInBpY2tlclwiXHJcbiAgICAgICAgICAgIChibHVyKT1cIm9uRGF0ZVBpY2tlckJsdXIoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgIChkYXRlQ2hhbmdlKT1cIm9uVmFsdWVDaGFuZ2U/Lm5leHQod2lkZ2V0SW5zdGFuY2UpXCJcclxuICAgICAgICAgICAgW21hdERhdGVwaWNrZXJGaWx0ZXJdPVwid2lkZ2V0SW5zdGFuY2UuZmlsdGVyID8/IGRhdGVGaWx0ZXJcIlxyXG4gICAgICAgICAgLz5cclxuXHJcbiAgICAgICAgICA8c21hcnQtaWNvblxyXG4gICAgICAgICAgICAqbmdJZj1cIndpZGdldEluc3RhbmNlLmVycm9yICYmIHdpZGdldEluc3RhbmNlLmVycm9ySWNvblwiXHJcbiAgICAgICAgICAgIFtpY29uXT1cIndpZGdldEluc3RhbmNlLmVycm9ySWNvblwiXHJcbiAgICAgICAgICAgIFtjb2xvcl09XCJ3aWRnZXRJbnN0YW5jZS5lcnJvckljb25Db2xvciA/PyAnd2FybidcIlxyXG4gICAgICAgICAgICBtYXRTdWZmaXhcclxuICAgICAgICAgID48L3NtYXJ0LWljb24+XHJcbiAgICAgICAgICA8bWF0LWhpbnQ+XHJcbiAgICAgICAgICAgIHt7IHdpZGdldEluc3RhbmNlLmRhdGVGb3JtYXRIaW50IH19XHJcbiAgICAgICAgICA8L21hdC1oaW50PlxyXG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkXHJcbiAgICAgICAgICAqbmdJZj1cImhhc0NyZWF0ZWRcIlxyXG4gICAgICAgICAgY2xhc3M9XCJpbnB1dCB3aWRnZXRDb250ZW50IHRpbWVcIlxyXG4gICAgICAgICAgW25nQ2xhc3NdPVwid2lkZ2V0SW5zdGFuY2UuY3NzQ2xhc3MgPz8gJydcIlxyXG4gICAgICAgICAgW25nU3R5bGVdPVwieyB3aWR0aDogd2lkZ2V0SW5zdGFuY2UubWluV2lkdGggKyAncHgnIH1cIlxyXG4gICAgICAgICAgYXBwZWFyYW5jZT1cIm91dGxpbmVcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAjdGltZUlucHV0XHJcbiAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwid2lkZ2V0SW5zdGFuY2Uua2V5ICsgJy10aW1lJ1wiXHJcbiAgICAgICAgICAgIFtpZF09XCJ3aWRnZXRJbnN0YW5jZS5rZXlcIlxyXG4gICAgICAgICAgICBbdHlwZV09XCIndGltZSdcIlxyXG4gICAgICAgICAgICBwbGFjZWhvbGRlcj1cInt7IHdpZGdldEluc3RhbmNlLnBsYWNlaG9sZGVyIH19XCJcclxuICAgICAgICAgICAgKGJsdXIpPVwib25UaW1lUGlja2VyQmx1cigkZXZlbnQpXCJcclxuICAgICAgICAgICAgbWF0SW5wdXRcclxuICAgICAgICAgIC8+XHJcbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdC1lcnJvclwiPlxyXG4gICAgICAgICAge3sgd2lkZ2V0SW5zdGFuY2UuZXJyb3IgfX1cclxuICAgICAgICA8L3NwYW4+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGRpdiAqbmdJZj1cIndpZGdldEluc3RhbmNlLnR5cGUgPT09IHNtYXJ0Rm9ybVdpZGdldFR5cGUuU0VMRUNUXCIgY2xhc3M9XCJ3aWRnZXRDb250YWluZXJcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImxhYmVsQ29udGFpbmVyXCIgKm5nSWY9XCJ3aWRnZXRJbnN0YW5jZS5zaG93TGFiZWxcIj5cclxuICAgICAgICA8aDRcclxuICAgICAgICAgIGNsYXNzPVwie3sgbGFiZWxDb2xvciB9fSBzbWFydC1mb3JtLXdpZGdldC1sYWJlbCB7eyB3aWRnZXRJbnN0YW5jZS5jc3NMYWJlbENsYXNzID8/ICcnIH19XCJcclxuICAgICAgICAgIFtuZ0NsYXNzXT1cImdldExhYmVsTmdDbGFzcygpXCJcclxuICAgICAgICAgIFtuZ1N0eWxlXT1cImdldExhYmVsU3R5bGUoKVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAge3sgZ2V0V2lkZ2V0TGFiZWwod2lkZ2V0SW5zdGFuY2UpIH19XHJcbiAgICAgICAgPC9oND5cclxuICAgICAgICA8bWF0LWhpbnQgKm5nSWY9XCJ3aWRnZXRJbnN0YW5jZT8uaGludD8ucG9zaXRpb24gPT09IFNtYXJ0V2lkZ2V0SGludFBvc2l0aW9uLkxBQkVMXCI+e3tcclxuICAgICAgICAgIHdpZGdldEluc3RhbmNlLmhpbnQ/LnRleHRcclxuICAgICAgICB9fTwvbWF0LWhpbnQ+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8bWF0LWZvcm0tZmllbGRcclxuICAgICAgICBjbGFzcz1cImlucHV0IHdpZGdldENvbnRlbnQge3sgd2lkZ2V0SW5zdGFuY2UuY3NzQ2xhc3MgPz8gJycgfX1cIlxyXG4gICAgICAgIFtuZ0NsYXNzXT1cImdldE5nQ2xhc3MoKVwiXHJcbiAgICAgICAgW25nU3R5bGVdPVwiZ2V0U3R5bGUoKVwiXHJcbiAgICAgICAgYXBwZWFyYW5jZT1cIm91dGxpbmVcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPG1hdC1sYWJlbFxyXG4gICAgICAgICAgY2xhc3M9XCJsYWJlbFwiXHJcbiAgICAgICAgICBbbmdDbGFzc109XCJ3aWRnZXRJbnN0YW5jZS5jc3NMYWJlbENsYXNzID8/ICcnXCJcclxuICAgICAgICAgICpuZ0lmPVwiIXdpZGdldEluc3RhbmNlLnNob3dMYWJlbFwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAge3sgZ2V0V2lkZ2V0TGFiZWwod2lkZ2V0SW5zdGFuY2UpIH19XHJcbiAgICAgICAgPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgPG1hdC1zZWxlY3RcclxuICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwid2lkZ2V0SW5zdGFuY2Uua2V5XCJcclxuICAgICAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwib25WYWx1ZUNoYW5nZT8ubmV4dCgkZXZlbnQudmFsdWUpXCJcclxuICAgICAgICAgIChjbG9zZWQpPVwib25CbHVyPy5uZXh0KHdpZGdldEluc3RhbmNlKVwiXHJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwid2lkZ2V0SW5zdGFuY2UuaXNEaXNhYmxlZCFcIlxyXG4gICAgICAgICAgW2NvbXBhcmVXaXRoXT1cIlxyXG4gICAgICAgICAgICB3aWRnZXRJbnN0YW5jZS5jb21wYXJlV2l0aCA9PSBudWxsID8gY29tcGFyZUl0ZW1zIDogd2lkZ2V0SW5zdGFuY2UuY29tcGFyZVdpdGhcclxuICAgICAgICAgIFwiXHJcbiAgICAgICAgICBwbGFjZWhvbGRlcj1cInt7IHdpZGdldEluc3RhbmNlLnBsYWNlaG9sZGVyID8gd2lkZ2V0SW5zdGFuY2UucGxhY2Vob2xkZXIgOiAnJyB9fVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIHdpZGdldEluc3RhbmNlLnZhbHVlTGlzdFwiPlxyXG4gICAgICAgICAgICA8bWF0LW9wdGdyb3VwXHJcbiAgICAgICAgICAgICAgKm5nSWY9XCJvcHRpb24udHlwZSA9PT0gZ2V0VHlwZSgpLklURU1fR1JPVVBcIlxyXG4gICAgICAgICAgICAgIFtsYWJlbF09XCJvcHRpb24ubGFiZWxcIlxyXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJvcHRpb24uaXNEaXNhYmxlZFwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8bWF0LW9wdGlvblxyXG4gICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGlubmVyT3B0aW9uIG9mIG9wdGlvbi52YWx1ZUxpc3RcIlxyXG4gICAgICAgICAgICAgICAgW3ZhbHVlXT1cImlubmVyT3B0aW9uLnZhbHVlXCJcclxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpbm5lck9wdGlvbi5pc0Rpc2FibGVkXCJcclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8c21hcnQtaWNvblxyXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cImlubmVyT3B0aW9uLmljb25cIlxyXG4gICAgICAgICAgICAgICAgICBbaWNvbl09XCJpbm5lck9wdGlvbi5pY29uXCJcclxuICAgICAgICAgICAgICAgICAgW2NvbG9yXT1cImlubmVyT3B0aW9uLmljb25Db2xvclwiXHJcbiAgICAgICAgICAgICAgICA+PC9zbWFydC1pY29uPlxyXG4gICAgICAgICAgICAgICAge3sgaW5uZXJPcHRpb24ubGFiZWwgfX1cclxuICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgIDwvbWF0LW9wdGdyb3VwPlxyXG4gICAgICAgICAgICA8bWF0LW9wdGlvblxyXG4gICAgICAgICAgICAgICpuZ0lmPVwib3B0aW9uLnR5cGUgPT09IGdldFR5cGUoKS5JVEVNXCJcclxuICAgICAgICAgICAgICBbdmFsdWVdPVwib3B0aW9uLnZhbHVlXCJcclxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwib3B0aW9uLmlzRGlzYWJsZWRcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgPHNtYXJ0LWljb25cclxuICAgICAgICAgICAgICAgICpuZ0lmPVwib3B0aW9uLmljb25cIlxyXG4gICAgICAgICAgICAgICAgW2ljb25dPVwib3B0aW9uLmljb25cIlxyXG4gICAgICAgICAgICAgICAgW2NvbG9yXT1cIm9wdGlvbi5pY29uQ29sb3JcIlxyXG4gICAgICAgICAgICAgID48L3NtYXJ0LWljb25cclxuICAgICAgICAgICAgICA+e3sgb3B0aW9uLmxhYmVsIH19PC9tYXQtb3B0aW9uXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdC1lcnJvclwiPlxyXG4gICAgICAgICAge3sgd2lkZ2V0SW5zdGFuY2UuZXJyb3IgfX1cclxuICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgPHNtYXJ0LWljb25cclxuICAgICAgICAgICpuZ0lmPVwid2lkZ2V0SW5zdGFuY2UuZXJyb3IgJiYgd2lkZ2V0SW5zdGFuY2UuZXJyb3JJY29uXCJcclxuICAgICAgICAgIFtpY29uXT1cIndpZGdldEluc3RhbmNlLmVycm9ySWNvblwiXHJcbiAgICAgICAgICBbY29sb3JdPVwid2lkZ2V0SW5zdGFuY2UuZXJyb3JJY29uQ29sb3IgPz8gJ3dhcm4nXCJcclxuICAgICAgICAgIG1hdFN1ZmZpeFxyXG4gICAgICAgID48L3NtYXJ0LWljb24+XHJcbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgIDxtYXQtaGludFxyXG4gICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICAhd2lkZ2V0SW5zdGFuY2U/LmhpbnQgfHwgd2lkZ2V0SW5zdGFuY2U/LmhpbnQ/LnBvc2l0aW9uID09PSBTbWFydFdpZGdldEhpbnRQb3NpdGlvbi5JTlBVVFxyXG4gICAgICAgIFwiXHJcbiAgICAgICAgPnt7IHdpZGdldEluc3RhbmNlLmhpbnQ/LnRleHQgfX08L21hdC1oaW50XHJcbiAgICAgID5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXZcclxuICAgICAgKm5nSWY9XCJ3aWRnZXRJbnN0YW5jZS50eXBlID09PSBzbWFydEZvcm1XaWRnZXRUeXBlLlNFTEVDVF9NVUxUSVBMRVwiXHJcbiAgICAgIGNsYXNzPVwid2lkZ2V0Q29udGFpbmVyXCJcclxuICAgID5cclxuICAgICAgPGRpdiBjbGFzcz1cImxhYmVsQ29udGFpbmVyXCIgKm5nSWY9XCJ3aWRnZXRJbnN0YW5jZS5zaG93TGFiZWxcIj5cclxuICAgICAgICA8aDRcclxuICAgICAgICAgIGNsYXNzPVwie3sgbGFiZWxDb2xvciB9fSBzbWFydC1mb3JtLXdpZGdldC1sYWJlbCB7eyB3aWRnZXRJbnN0YW5jZS5jc3NMYWJlbENsYXNzID8/ICcnIH19XCJcclxuICAgICAgICAgIFtuZ0NsYXNzXT1cImdldExhYmVsTmdDbGFzcygpXCJcclxuICAgICAgICAgIFtuZ1N0eWxlXT1cImdldExhYmVsU3R5bGUoKVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAge3sgZ2V0V2lkZ2V0TGFiZWwod2lkZ2V0SW5zdGFuY2UpIH19XHJcbiAgICAgICAgPC9oND5cclxuICAgICAgICA8bWF0LWhpbnQgKm5nSWY9XCJ3aWRnZXRJbnN0YW5jZT8uaGludD8ucG9zaXRpb24gPT09IFNtYXJ0V2lkZ2V0SGludFBvc2l0aW9uLkxBQkVMXCI+e3tcclxuICAgICAgICAgIHdpZGdldEluc3RhbmNlLmhpbnQ/LnRleHRcclxuICAgICAgICB9fTwvbWF0LWhpbnQ+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8bWF0LWZvcm0tZmllbGRcclxuICAgICAgICBjbGFzcz1cImlucHV0IHdpZGdldENvbnRlbnQge3sgd2lkZ2V0SW5zdGFuY2UuY3NzQ2xhc3MgPz8gJycgfX1cIlxyXG4gICAgICAgIFtuZ0NsYXNzXT1cImdldE5nQ2xhc3MoKVwiXHJcbiAgICAgICAgW25nU3R5bGVdPVwiZ2V0U3R5bGUoKVwiXHJcbiAgICAgICAgYXBwZWFyYW5jZT1cIm91dGxpbmVcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPG1hdC1sYWJlbFxyXG4gICAgICAgICAgY2xhc3M9XCJsYWJlbFwiXHJcbiAgICAgICAgICBbbmdDbGFzc109XCJ3aWRnZXRJbnN0YW5jZS5jc3NMYWJlbENsYXNzID8/ICcnXCJcclxuICAgICAgICAgICpuZ0lmPVwiIXdpZGdldEluc3RhbmNlLnNob3dMYWJlbFwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAge3sgZ2V0V2lkZ2V0TGFiZWwod2lkZ2V0SW5zdGFuY2UpIH19XHJcbiAgICAgICAgPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgPG1hdC1zZWxlY3RcclxuICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwid2lkZ2V0SW5zdGFuY2Uua2V5XCJcclxuICAgICAgICAgIG11bHRpcGxlXHJcbiAgICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uVmFsdWVDaGFuZ2U/Lm5leHQoJGV2ZW50LnZhbHVlKVwiXHJcbiAgICAgICAgICAoY2xvc2VkKT1cIm9uQmx1cj8ubmV4dCh3aWRnZXRJbnN0YW5jZSlcIlxyXG4gICAgICAgICAgW2Rpc2FibGVkXT1cIndpZGdldEluc3RhbmNlLmlzRGlzYWJsZWQhXCJcclxuICAgICAgICAgIFtjb21wYXJlV2l0aF09XCJcclxuICAgICAgICAgICAgd2lkZ2V0SW5zdGFuY2UuY29tcGFyZVdpdGggPT0gbnVsbCA/IGNvbXBhcmVJdGVtcyA6IHdpZGdldEluc3RhbmNlLmNvbXBhcmVXaXRoXHJcbiAgICAgICAgICBcIlxyXG4gICAgICAgICAgcGxhY2Vob2xkZXI9XCJ7eyB3aWRnZXRJbnN0YW5jZS5wbGFjZWhvbGRlciA/IHdpZGdldEluc3RhbmNlLnBsYWNlaG9sZGVyIDogJycgfX1cIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IG9wdGlvbiBvZiB3aWRnZXRJbnN0YW5jZS52YWx1ZUxpc3RcIj5cclxuICAgICAgICAgICAgPG1hdC1vcHRncm91cFxyXG4gICAgICAgICAgICAgICpuZ0lmPVwib3B0aW9uLnR5cGUgPT09IGdldFR5cGUoKS5JVEVNX0dST1VQXCJcclxuICAgICAgICAgICAgICBbbGFiZWxdPVwib3B0aW9uLmxhYmVsXCJcclxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwib3B0aW9uLmlzRGlzYWJsZWRcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgPG1hdC1vcHRpb25cclxuICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBpbm5lck9wdGlvbiBvZiBvcHRpb24udmFsdWVMaXN0XCJcclxuICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJpbm5lck9wdGlvbi52YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaW5uZXJPcHRpb24uaXNEaXNhYmxlZFwiXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPHNtYXJ0LWljb25cclxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJpbm5lck9wdGlvbi5pY29uXCJcclxuICAgICAgICAgICAgICAgICAgW2ljb25dPVwiaW5uZXJPcHRpb24uaWNvblwiXHJcbiAgICAgICAgICAgICAgICAgIFtjb2xvcl09XCJpbm5lck9wdGlvbi5pY29uQ29sb3JcIlxyXG4gICAgICAgICAgICAgICAgPjwvc21hcnQtaWNvblxyXG4gICAgICAgICAgICAgICAgPnt7IGlubmVyT3B0aW9uLmxhYmVsIH19PC9tYXQtb3B0aW9uXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICA8L21hdC1vcHRncm91cD5cclxuICAgICAgICAgICAgPG1hdC1vcHRpb25cclxuICAgICAgICAgICAgICAqbmdJZj1cIm9wdGlvbi50eXBlID09PSBnZXRUeXBlKCkuSVRFTVwiXHJcbiAgICAgICAgICAgICAgW3ZhbHVlXT1cIm9wdGlvbi52YWx1ZVwiXHJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIm9wdGlvbi5pc0Rpc2FibGVkXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDxzbWFydC1pY29uXHJcbiAgICAgICAgICAgICAgICAqbmdJZj1cIm9wdGlvbi5pY29uXCJcclxuICAgICAgICAgICAgICAgIFtpY29uXT1cIm9wdGlvbi5pY29uXCJcclxuICAgICAgICAgICAgICAgIFtjb2xvcl09XCJvcHRpb24uaWNvbkNvbG9yXCJcclxuICAgICAgICAgICAgICA+PC9zbWFydC1pY29uXHJcbiAgICAgICAgICAgICAgPnt7IG9wdGlvbi5sYWJlbCB9fTwvbWF0LW9wdGlvblxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXQtZXJyb3JcIj5cclxuICAgICAgICAgIHt7IHdpZGdldEluc3RhbmNlLmVycm9yIH19XHJcbiAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgIDxzbWFydC1pY29uXHJcbiAgICAgICAgICAqbmdJZj1cIndpZGdldEluc3RhbmNlLmVycm9yICYmIHdpZGdldEluc3RhbmNlLmVycm9ySWNvblwiXHJcbiAgICAgICAgICBbaWNvbl09XCJ3aWRnZXRJbnN0YW5jZS5lcnJvckljb25cIlxyXG4gICAgICAgICAgW2NvbG9yXT1cIndpZGdldEluc3RhbmNlLmVycm9ySWNvbkNvbG9yID8/ICd3YXJuJ1wiXHJcbiAgICAgICAgICBtYXRTdWZmaXhcclxuICAgICAgICA+PC9zbWFydC1pY29uPlxyXG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICA8bWF0LWhpbnRcclxuICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgIXdpZGdldEluc3RhbmNlPy5oaW50IHx8IHdpZGdldEluc3RhbmNlPy5oaW50Py5wb3NpdGlvbiA9PT0gU21hcnRXaWRnZXRIaW50UG9zaXRpb24uSU5QVVRcclxuICAgICAgICBcIlxyXG4gICAgICAgID57eyB3aWRnZXRJbnN0YW5jZS5oaW50Py50ZXh0IH19PC9tYXQtaGludFxyXG4gICAgICA+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2XHJcbiAgICAgICpuZ0lmPVwid2lkZ2V0SW5zdGFuY2UudHlwZSA9PT0gc21hcnRGb3JtV2lkZ2V0VHlwZS5MQUJFTFwiXHJcbiAgICAgIGNsYXNzPVwibGFiZWwgd2lkZ2V0Q29udGFpbmVyXCJcclxuICAgICAgW25nU3R5bGVdPVwieyB3aWR0aDogd2lkZ2V0SW5zdGFuY2UubWluV2lkdGggKyAncHgnIH1cIlxyXG4gICAgPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwibGFiZWwtdGl0bGUgbGFiZWxDb250YWluZXJcIiBbbmdDbGFzc109XCJ3aWRnZXRJbnN0YW5jZS5jc3NDbGFzcyA/PyAnJ1wiPlxyXG4gICAgICAgIDxoNFxyXG4gICAgICAgICAgY2xhc3M9XCJ7eyBsYWJlbENvbG9yIH19IHNtYXJ0LWZvcm0td2lkZ2V0LWxhYmVsIHt7IHdpZGdldEluc3RhbmNlLmNzc0NsYXNzID8/ICcnIH19XCJcclxuICAgICAgICAgIFtuZ0NsYXNzXT1cImdldE5nQ2xhc3MoKVwiXHJcbiAgICAgICAgICBbbmdTdHlsZV09XCJnZXRTdHlsZSgpXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICB7eyBnZXRXaWRnZXRMYWJlbCh3aWRnZXRJbnN0YW5jZSkgfX1cclxuICAgICAgICA8L2g0PlxyXG4gICAgICAgIDxwPnt7IHdpZGdldEluc3RhbmNlLndpZGdldERlc2NyaXB0aW9uIH19PC9wPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgKm5nSWY9XCJ3aWRnZXRJbnN0YW5jZS50eXBlID09PSBzbWFydEZvcm1XaWRnZXRUeXBlLlRJTUVcIiBjbGFzcz1cIndpZGdldENvbnRhaW5lclwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwibGFiZWxDb250YWluZXJcIiAqbmdJZj1cIndpZGdldEluc3RhbmNlLnNob3dMYWJlbFwiPlxyXG4gICAgICAgIDxoNFxyXG4gICAgICAgICAgY2xhc3M9XCJ7eyBsYWJlbENvbG9yIH19IHNtYXJ0LWZvcm0td2lkZ2V0LWxhYmVsIHt7IHdpZGdldEluc3RhbmNlLmNzc0xhYmVsQ2xhc3MgPz8gJycgfX1cIlxyXG4gICAgICAgICAgW25nQ2xhc3NdPVwiZ2V0TGFiZWxOZ0NsYXNzKClcIlxyXG4gICAgICAgICAgW25nU3R5bGVdPVwiZ2V0TGFiZWxTdHlsZSgpXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICB7eyBnZXRXaWRnZXRMYWJlbCh3aWRnZXRJbnN0YW5jZSkgfX1cclxuICAgICAgICA8L2g0PlxyXG4gICAgICAgIDxtYXQtaGludCAqbmdJZj1cIndpZGdldEluc3RhbmNlPy5oaW50Py5wb3NpdGlvbiA9PT0gU21hcnRXaWRnZXRIaW50UG9zaXRpb24uTEFCRUxcIj57e1xyXG4gICAgICAgICAgd2lkZ2V0SW5zdGFuY2UuaGludD8udGV4dFxyXG4gICAgICAgIH19PC9tYXQtaGludD5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxtYXQtZm9ybS1maWVsZFxyXG4gICAgICAgIGNsYXNzPVwiaW5wdXQgd2lkZ2V0Q29udGVudCB0aW1lIHt7IHdpZGdldEluc3RhbmNlLmNzc0NsYXNzID8/ICcnIH19XCJcclxuICAgICAgICBbbmdDbGFzc109XCJnZXROZ0NsYXNzKClcIlxyXG4gICAgICAgIFtuZ1N0eWxlXT1cImdldFN0eWxlKClcIlxyXG4gICAgICAgIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxtYXQtbGFiZWxcclxuICAgICAgICAgIGNsYXNzPVwibGFiZWxcIlxyXG4gICAgICAgICAgW25nQ2xhc3NdPVwid2lkZ2V0SW5zdGFuY2UuY3NzTGFiZWxDbGFzcyA/PyAnJ1wiXHJcbiAgICAgICAgICAqbmdJZj1cIiF3aWRnZXRJbnN0YW5jZS5zaG93TGFiZWxcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIHt7IGdldFdpZGdldExhYmVsKHdpZGdldEluc3RhbmNlKSB9fVxyXG4gICAgICAgIDwvbWF0LWxhYmVsPlxyXG4gICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJ3aWRnZXRJbnN0YW5jZS5rZXlcIlxyXG4gICAgICAgICAgW2lkXT1cIndpZGdldEluc3RhbmNlLmtleVwiXHJcbiAgICAgICAgICBbdHlwZV09XCIndGltZSdcIlxyXG4gICAgICAgICAgW3ZhbHVlXT1cImdldFRpbWUoKVwiXHJcbiAgICAgICAgICBwbGFjZWhvbGRlcj1cInt7IHdpZGdldEluc3RhbmNlLnBsYWNlaG9sZGVyIH19XCJcclxuICAgICAgICAgIG1hdElucHV0XHJcbiAgICAgICAgICAoYmx1cik9XCJvbkJsdXI/Lm5leHQod2lkZ2V0SW5zdGFuY2UpXCJcclxuICAgICAgICAvPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwibWF0LWVycm9yXCI+XHJcbiAgICAgICAgICB7eyB3aWRnZXRJbnN0YW5jZS5lcnJvciB9fVxyXG4gICAgICAgIDwvc3Bhbj5cclxuICAgICAgICA8c21hcnQtaWNvblxyXG4gICAgICAgICAgKm5nSWY9XCJ3aWRnZXRJbnN0YW5jZS5lcnJvciAmJiB3aWRnZXRJbnN0YW5jZS5lcnJvckljb25cIlxyXG4gICAgICAgICAgW2ljb25dPVwid2lkZ2V0SW5zdGFuY2UuZXJyb3JJY29uXCJcclxuICAgICAgICAgIFtjb2xvcl09XCJ3aWRnZXRJbnN0YW5jZS5lcnJvckljb25Db2xvciA/PyAnd2FybidcIlxyXG4gICAgICAgICAgbWF0U3VmZml4XHJcbiAgICAgICAgPjwvc21hcnQtaWNvbj5cclxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgKm5nSWY9XCJ3aWRnZXRJbnN0YW5jZS50eXBlID09PSBzbWFydEZvcm1XaWRnZXRUeXBlLlRPR0dMRVwiIGNsYXNzPVwid2lkZ2V0Q29udGFpbmVyXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJsYWJlbENvbnRhaW5lclwiICpuZ0lmPVwid2lkZ2V0SW5zdGFuY2Uuc2hvd0xhYmVsXCI+XHJcbiAgICAgICAgPGg0XHJcbiAgICAgICAgICBjbGFzcz1cInt7IGxhYmVsQ29sb3IgfX0gc21hcnQtZm9ybS13aWRnZXQtbGFiZWwge3sgd2lkZ2V0SW5zdGFuY2UuY3NzTGFiZWxDbGFzcyA/PyAnJyB9fVwiXHJcbiAgICAgICAgICBbbmdDbGFzc109XCJnZXRMYWJlbE5nQ2xhc3MoKVwiXHJcbiAgICAgICAgICBbbmdTdHlsZV09XCJnZXRMYWJlbFN0eWxlKClcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIHt7IGdldFdpZGdldExhYmVsKHdpZGdldEluc3RhbmNlKSB9fVxyXG4gICAgICAgIDwvaDQ+XHJcbiAgICAgICAgPG1hdC1oaW50ICpuZ0lmPVwid2lkZ2V0SW5zdGFuY2U/LmhpbnQ/LnBvc2l0aW9uID09PSBTbWFydFdpZGdldEhpbnRQb3NpdGlvbi5MQUJFTFwiPnt7XHJcbiAgICAgICAgICB3aWRnZXRJbnN0YW5jZS5oaW50Py50ZXh0XHJcbiAgICAgICAgfX08L21hdC1oaW50PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdlxyXG4gICAgICAgIGNsYXNzPVwid2lkZ2V0Q29udGVudCAge3sgd2lkZ2V0SW5zdGFuY2UuY3NzQ2xhc3MgPz8gJycgfX1cIlxyXG4gICAgICAgIFtuZ0NsYXNzXT1cImdldE5nQ2xhc3MoKVwiXHJcbiAgICAgICAgW25nU3R5bGVdPVwiZ2V0U3R5bGUoKVwiXHJcbiAgICAgID5cclxuICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZVxyXG4gICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwie3sgd2lkZ2V0SW5zdGFuY2Uua2V5IH19XCJcclxuICAgICAgICAgIHZhbHVlPVwie3sgd2lkZ2V0SW5zdGFuY2UudmFsdWUgfX1cIlxyXG4gICAgICAgICAgKGNoYW5nZSk9XCJvblZhbHVlQ2hhbmdlPy5uZXh0KCRldmVudClcIlxyXG4gICAgICAgICAgW2xhYmVsUG9zaXRpb25dPVwid2lkZ2V0SW5zdGFuY2UudG9nZ2xlTGFiZWxQb3NpdGlvbiA/PyAnYmVmb3JlJ1wiXHJcbiAgICAgICAgICA+e3sgIXdpZGdldEluc3RhbmNlLnNob3dMYWJlbCA/IHdpZGdldEluc3RhbmNlLmxhYmVsIDogJycgfX08L21hdC1zbGlkZS10b2dnbGVcclxuICAgICAgICA+PHNwYW4gY2xhc3M9XCJtYXQtZXJyb3JcIj5cclxuICAgICAgICAgIHt7IHdpZGdldEluc3RhbmNlLmVycm9yIH19XHJcbiAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgIDxzbWFydC1pY29uXHJcbiAgICAgICAgICAqbmdJZj1cIndpZGdldEluc3RhbmNlLmVycm9yICYmIHdpZGdldEluc3RhbmNlLmVycm9ySWNvblwiXHJcbiAgICAgICAgICBbaWNvbl09XCJ3aWRnZXRJbnN0YW5jZS5lcnJvckljb25cIlxyXG4gICAgICAgICAgW2NvbG9yXT1cIndpZGdldEluc3RhbmNlLmVycm9ySWNvbkNvbG9yID8/ICd3YXJuJ1wiXHJcbiAgICAgICAgPjwvc21hcnQtaWNvbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2ICpuZ0lmPVwid2lkZ2V0SW5zdGFuY2UudHlwZSA9PT0gc21hcnRGb3JtV2lkZ2V0VHlwZS5JTkRJQ0FUT1JcIiBjbGFzcz1cIndpZGdldENvbnRhaW5lclwiPlxyXG4gICAgICA8aDRcclxuICAgICAgICAqbmdJZj1cIndpZGdldEluc3RhbmNlLnNob3dMYWJlbFwiXHJcbiAgICAgICAgY2xhc3M9XCJ7eyBsYWJlbENvbG9yIH19IGxhYmVsQ29udGFpbmVyIHt7IHdpZGdldEluc3RhbmNlLmNzc0xhYmVsQ2xhc3MgPz8gJycgfX1cIlxyXG4gICAgICAgIFtuZ0NsYXNzXT1cImdldExhYmVsTmdDbGFzcygpXCJcclxuICAgICAgICBbbmdTdHlsZV09XCJnZXRMYWJlbFN0eWxlKClcIlxyXG4gICAgICA+XHJcbiAgICAgICAge3sgZ2V0V2lkZ2V0TGFiZWwod2lkZ2V0SW5zdGFuY2UpIH19XHJcbiAgICAgIDwvaDQ+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJzbWFydEluZGljYXRvciB3aWRnZXRDb250ZW50XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImluZGljYXRvckl0ZW1zIHt7IHdpZGdldEluc3RhbmNlLmNzc0NsYXNzID8/ICcnIH19XCIgW25nQ2xhc3NdPVwiZ2V0TmdDbGFzcygpXCI+XHJcbiAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIGluZGljYXRvckl0ZW1zOyBsZXQgaSA9IGluZGV4XCJcclxuICAgICAgICAgICAgY2xhc3M9XCJpbmRpY2F0b3JJdGVtXCJcclxuICAgICAgICAgICAgW25nQ2xhc3NdPVwiZ2V0SW5kaWNhdG9ySXRlbUNsYXNzKGkpXCJcclxuICAgICAgICAgID48L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8cCBbbmdDbGFzc109XCJnZXRJbmRpY2F0b3JTdGF0dXNMYWJlbENvbG9yKClcIj5cclxuICAgICAgICAgIHt7IGdldEluZGljYXRvclN0YXR1c0xhYmVsKCkgfX1cclxuICAgICAgICA8L3A+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGRpdiAqbmdJZj1cIndpZGdldEluc3RhbmNlLnR5cGUgPT09IHNtYXJ0Rm9ybVdpZGdldFR5cGUuRklMRV9VUExPQURFUlwiIGNsYXNzPVwid2lkZ2V0Q29udGFpbmVyXCI+XHJcbiAgICAgIDxoNFxyXG4gICAgICAgICpuZ0lmPVwid2lkZ2V0SW5zdGFuY2Uuc2hvd0xhYmVsXCJcclxuICAgICAgICBjbGFzcz1cImxhYmVsQ29udGFpbmVyIHt7IGxhYmVsQ29sb3IgfX0ge3sgd2lkZ2V0SW5zdGFuY2UuY3NzTGFiZWxDbGFzcyA/PyAnJyB9fVwiXHJcbiAgICAgICAgW25nQ2xhc3NdPVwiZ2V0TGFiZWxOZ0NsYXNzKClcIlxyXG4gICAgICAgIFtuZ1N0eWxlXT1cImdldExhYmVsU3R5bGUoKVwiXHJcbiAgICAgID5cclxuICAgICAgICB7eyBnZXRXaWRnZXRMYWJlbCh3aWRnZXRJbnN0YW5jZSkgfX1cclxuICAgICAgPC9oND5cclxuICAgICAgPHNtYXJ0ZmlsZXVwbG9hZGVyXHJcbiAgICAgICAgY2xhc3M9XCJ3aWRnZXRDb250ZW50IHt7IHdpZGdldEluc3RhbmNlLmNzc0NsYXNzID8/ICcnIH19XCJcclxuICAgICAgICBbbmdDbGFzc109XCJnZXROZ0NsYXNzKClcIlxyXG4gICAgICAgIFtuZ1N0eWxlXT1cImdldFN0eWxlKClcIlxyXG4gICAgICAgIFt1cGxvYWRDYWxsYmFja109XCJ1cGxvYWQuYmluZCh0aGlzKVwiXHJcbiAgICAgICAgW2ZpbGVGb3JtYXRzXT1cIndpZGdldEluc3RhbmNlLmZpbGVGb3JtYXRzXCJcclxuICAgICAgICBbbWF4U2l6ZU1iXT1cIndpZGdldEluc3RhbmNlLm1heFNpemVNYlwiXHJcbiAgICAgICAgW2kxOG5dPVwid2lkZ2V0SW5zdGFuY2UuaTE4blwiXHJcbiAgICAgID48L3NtYXJ0ZmlsZXVwbG9hZGVyPlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGRpdiAqbmdJZj1cIndpZGdldEluc3RhbmNlLnR5cGUgPT09IHNtYXJ0Rm9ybVdpZGdldFR5cGUuSU1BR0VcIiBjbGFzcz1cIndpZGdldENvbnRhaW5lclwiPlxyXG4gICAgICA8aDRcclxuICAgICAgICAqbmdJZj1cIndpZGdldEluc3RhbmNlLnNob3dMYWJlbFwiXHJcbiAgICAgICAgY2xhc3M9XCJsYWJlbENvbnRhaW5lciB7eyBsYWJlbENvbG9yIH19IHt7IHdpZGdldEluc3RhbmNlLmNzc0xhYmVsQ2xhc3MgPz8gJycgfX1cIlxyXG4gICAgICAgIFtuZ0NsYXNzXT1cImdldExhYmVsTmdDbGFzcygpXCJcclxuICAgICAgICBbbmdTdHlsZV09XCJnZXRMYWJlbFN0eWxlKClcIlxyXG4gICAgICA+XHJcbiAgICAgICAge3sgZ2V0V2lkZ2V0TGFiZWwod2lkZ2V0SW5zdGFuY2UpIH19XHJcbiAgICAgIDwvaDQ+XHJcbiAgICAgIDxpbWdcclxuICAgICAgICBjbGFzcz1cIndpZGdldENvbnRlbnQge3sgd2lkZ2V0SW5zdGFuY2UuaW1hZ2VDc3MgPz8gJycgfX1cIlxyXG4gICAgICAgIHRpdGxlPVwie3sgd2lkZ2V0SW5zdGFuY2Uua2V5IH19XCJcclxuICAgICAgICBbbmdDbGFzc109XCJnZXROZ0NsYXNzKClcIlxyXG4gICAgICAgIFtuZ1N0eWxlXT1cImdldFN0eWxlKClcIlxyXG4gICAgICAgIFtzcmNdPVwid2lkZ2V0SW5zdGFuY2UudmFsdWVcIlxyXG4gICAgICAvPlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGRpdiAqbmdJZj1cIndpZGdldEluc3RhbmNlLnR5cGUgPT09IHNtYXJ0Rm9ybVdpZGdldFR5cGUuU1ZHXCIgY2xhc3M9XCJ3aWRnZXRDb250YWluZXJcIj5cclxuICAgICAgPGg0XHJcbiAgICAgICAgKm5nSWY9XCJ3aWRnZXRJbnN0YW5jZS5zaG93TGFiZWxcIlxyXG4gICAgICAgIGNsYXNzPVwibGFiZWxDb250YWluZXIge3sgbGFiZWxDb2xvciB9fSB7eyB3aWRnZXRJbnN0YW5jZS5jc3NMYWJlbENsYXNzID8/ICcnIH19XCJcclxuICAgICAgICBbbmdDbGFzc109XCJnZXRMYWJlbE5nQ2xhc3MoKVwiXHJcbiAgICAgICAgW25nU3R5bGVdPVwiZ2V0TGFiZWxTdHlsZSgpXCJcclxuICAgICAgPlxyXG4gICAgICAgIHt7IGdldFdpZGdldExhYmVsKHdpZGdldEluc3RhbmNlKSB9fVxyXG4gICAgICA8L2g0PlxyXG4gICAgICA8ZGl2XHJcbiAgICAgICAgY2xhc3M9XCJ3aWRnZXRDb250ZW50IHt7IHdpZGdldEluc3RhbmNlLmNzc0NsYXNzID8/ICcnIH19XCJcclxuICAgICAgICBbaW5uZXJIVE1MXT1cImdldFdpZGdldFN2Zyh3aWRnZXRJbnN0YW5jZS52YWx1ZSlcIlxyXG4gICAgICAgIFtuZ0NsYXNzXT1cImdldE5nQ2xhc3MoKVwiXHJcbiAgICAgICAgW25nU3R5bGVdPVwiZ2V0U3R5bGUoKVwiXHJcbiAgICAgID48L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgKm5nSWY9XCJ3aWRnZXRJbnN0YW5jZS50eXBlID09PSBzbWFydEZvcm1XaWRnZXRUeXBlLkRJVklERVJcIiBjbGFzcz1cIndpZGdldENvbnRhaW5lclwiPlxyXG4gICAgICA8aHJcclxuICAgICAgICBjbGFzcz1cInNtYXJ0RGl2aWRlciB7eyB3aWRnZXRJbnN0YW5jZS5jc3NDbGFzcyA/PyAnJyB9fVwiXHJcbiAgICAgICAgW25nQ2xhc3NdPVwiZ2V0TmdDbGFzcygpXCJcclxuICAgICAgICBbbmdTdHlsZV09XCJnZXRTdHlsZSgpXCJcclxuICAgICAgLz5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgKm5nSWY9XCJ3aWRnZXRJbnN0YW5jZS50eXBlID09PSBzbWFydEZvcm1XaWRnZXRUeXBlLkJVVFRPTlwiIGNsYXNzPVwid2lkZ2V0Q29udGFpbmVyXCI+XHJcbiAgICAgIDxoNFxyXG4gICAgICAgICpuZ0lmPVwid2lkZ2V0SW5zdGFuY2Uuc2hvd0xhYmVsXCJcclxuICAgICAgICBjbGFzcz1cImxhYmVsQ29udGFpbmVyIHt7IGxhYmVsQ29sb3IgfX0ge3sgd2lkZ2V0SW5zdGFuY2UuY3NzTGFiZWxDbGFzcyA/PyAnJyB9fVwiXHJcbiAgICAgICAgW25nQ2xhc3NdPVwiZ2V0TGFiZWxOZ0NsYXNzKClcIlxyXG4gICAgICAgIFtuZ1N0eWxlXT1cImdldExhYmVsU3R5bGUoKVwiXHJcbiAgICAgID5cclxuICAgICAgICB7eyBnZXRXaWRnZXRMYWJlbCh3aWRnZXRJbnN0YW5jZSkgfX1cclxuICAgICAgPC9oND5cclxuICAgICAgPGRpdlxyXG4gICAgICAgIGNsYXNzPVwid2lkZ2V0Q29udGVudCB7eyB3aWRnZXRJbnN0YW5jZS5jc3NDbGFzcyA/PyAnJyB9fVwiXHJcbiAgICAgICAgW25nQ2xhc3NdPVwiZ2V0TmdDbGFzcygpXCJcclxuICAgICAgICBbbmdTdHlsZV09XCJnZXRTdHlsZSgpXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxidXR0b25cclxuICAgICAgICAgIG1hdC1idXR0b25cclxuICAgICAgICAgIFtuZ0NsYXNzXT1cImdldEJ1dHRvblR5cGUod2lkZ2V0SW5zdGFuY2UudWlBY3Rpb25EZXNjcmlwdG9yKVwiXHJcbiAgICAgICAgICBbY29sb3JdPVwid2lkZ2V0SW5zdGFuY2UudWlBY3Rpb25EZXNjcmlwdG9yPy5jb2xvclwiXHJcbiAgICAgICAgICAoY2xpY2spPVwib25CdXR0b25DbGlja2VkKHdpZGdldEluc3RhbmNlKVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAqbmdJZj1cImlzT25seUljb24od2lkZ2V0SW5zdGFuY2UudWlBY3Rpb25EZXNjcmlwdG9yKTsgdGhlbiBpY29uT25seTsgZWxzZSB0ZXh0XCJcclxuICAgICAgICAgID48L2Rpdj5cclxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjaWNvbk9ubHk+XHJcbiAgICAgICAgICAgIDxzbWFydC1pY29uXHJcbiAgICAgICAgICAgICAgKm5nSWY9XCJ3aWRnZXRJbnN0YW5jZS51aUFjdGlvbkRlc2NyaXB0b3I/Lmljb25cIlxyXG4gICAgICAgICAgICAgIFtpY29uXT1cIndpZGdldEluc3RhbmNlLnVpQWN0aW9uRGVzY3JpcHRvciEuaWNvbiFcIlxyXG4gICAgICAgICAgICAgIFtjb2xvcl09XCJcclxuICAgICAgICAgICAgICAgIHdpZGdldEluc3RhbmNlLnVpQWN0aW9uRGVzY3JpcHRvcj8uaWNvbkNvbG9yID8/XHJcbiAgICAgICAgICAgICAgICB3aWRnZXRJbnN0YW5jZS51aUFjdGlvbkRlc2NyaXB0b3I/LmNvbG9yXHJcbiAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgPjwvc21hcnQtaWNvbj5cclxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICA8bmctdGVtcGxhdGUgI3RleHQ+XHJcbiAgICAgICAgICAgIDxzbWFydC1pY29uXHJcbiAgICAgICAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICAgICAgIHdpZGdldEluc3RhbmNlLnVpQWN0aW9uRGVzY3JpcHRvcj8uaWNvbiAmJlxyXG4gICAgICAgICAgICAgICAgd2lkZ2V0SW5zdGFuY2UudWlBY3Rpb25EZXNjcmlwdG9yPy5pY29uUG9zaXRpb24gPT09ICdQUkUnXHJcbiAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICBbaWNvbl09XCJ3aWRnZXRJbnN0YW5jZS51aUFjdGlvbkRlc2NyaXB0b3IhLmljb24hXCJcclxuICAgICAgICAgICAgICBbY29sb3JdPVwiXHJcbiAgICAgICAgICAgICAgICB3aWRnZXRJbnN0YW5jZS51aUFjdGlvbkRlc2NyaXB0b3I/Lmljb25Db2xvciA/P1xyXG4gICAgICAgICAgICAgICAgd2lkZ2V0SW5zdGFuY2UudWlBY3Rpb25EZXNjcmlwdG9yPy5jb2xvclxyXG4gICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgID48L3NtYXJ0LWljb24+XHJcbiAgICAgICAgICAgIHt7IHdpZGdldEluc3RhbmNlLnVpQWN0aW9uRGVzY3JpcHRvcj8udGl0bGUgfX1cclxuICAgICAgICAgICAgPHNtYXJ0LWljb25cclxuICAgICAgICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgICAgd2lkZ2V0SW5zdGFuY2UudWlBY3Rpb25EZXNjcmlwdG9yPy5pY29uICYmXHJcbiAgICAgICAgICAgICAgICB3aWRnZXRJbnN0YW5jZS51aUFjdGlvbkRlc2NyaXB0b3I/Lmljb25Qb3NpdGlvbiA9PT0gJ1BPU1QnXHJcbiAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICBbaWNvbl09XCJ3aWRnZXRJbnN0YW5jZS51aUFjdGlvbkRlc2NyaXB0b3IhLmljb24hXCJcclxuICAgICAgICAgICAgICBbY29sb3JdPVwiXHJcbiAgICAgICAgICAgICAgICB3aWRnZXRJbnN0YW5jZS51aUFjdGlvbkRlc2NyaXB0b3I/Lmljb25Db2xvciA/P1xyXG4gICAgICAgICAgICAgICAgd2lkZ2V0SW5zdGFuY2UudWlBY3Rpb25EZXNjcmlwdG9yPy5jb2xvclxyXG4gICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgID48L3NtYXJ0LWljb24+XHJcbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJ3aWRnZXRDb250YWluZXJcIj5cclxuICAgICAgPGg0XHJcbiAgICAgICAgY2xhc3M9XCJsYWJlbENvbnRhaW5lclwiXHJcbiAgICAgICAgKm5nSWY9XCJ3aWRnZXRJbnN0YW5jZS50eXBlID09PSBzbWFydEZvcm1XaWRnZXRUeXBlLkNPTVBPTkVOVCAmJiB3aWRnZXRJbnN0YW5jZS5zaG93TGFiZWxcIlxyXG4gICAgICAgIGNsYXNzPVwie3sgbGFiZWxDb2xvciB9fVwiXHJcbiAgICAgID5cclxuICAgICAgICB7eyBnZXRXaWRnZXRMYWJlbCh3aWRnZXRJbnN0YW5jZSkgfX1cclxuICAgICAgPC9oND5cclxuICAgICAgPGRpdiBjbGFzcz1cIndpZGdldENvbnRlbnRcIj5cclxuICAgICAgICA8bmctdGVtcGxhdGUgI2N1c3RvbUNvbXBvbmVudD48L25nLXRlbXBsYXRlPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgKm5nSWY9XCJ3aWRnZXRJbnN0YW5jZS50eXBlID09PSBzbWFydEZvcm1XaWRnZXRUeXBlLlJJQ0hfVEVYVFwiIGNsYXNzPVwid2lkZ2V0Q29udGFpbmVyXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJsYWJlbENvbnRhaW5lclwiPlxyXG4gICAgICAgIDxoNCAqbmdJZj1cIndpZGdldEluc3RhbmNlLnNob3dMYWJlbFwiIGNsYXNzPVwie3sgbGFiZWxDb2xvciB9fVwiPlxyXG4gICAgICAgICAge3sgZ2V0V2lkZ2V0TGFiZWwod2lkZ2V0SW5zdGFuY2UpIH19XHJcbiAgICAgICAgPC9oND5cclxuICAgICAgICA8bWF0LWhpbnQgKm5nSWY9XCJ3aWRnZXRJbnN0YW5jZT8uaGludD8ucG9zaXRpb24gPT09IFNtYXJ0V2lkZ2V0SGludFBvc2l0aW9uLkxBQkVMXCI+e3tcclxuICAgICAgICAgIHdpZGdldEluc3RhbmNlLmhpbnQ/LnRleHRcclxuICAgICAgICB9fTwvbWF0LWhpbnQ+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwid2lkZ2V0Q29udGVudFwiPlxyXG4gICAgICAgIDxxdWlsbC1lZGl0b3JcclxuICAgICAgICAgICNxdWlsbEVkaXRvclxyXG4gICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJ3aWRnZXRJbnN0YW5jZS5rZXlcIlxyXG4gICAgICAgICAgW2lkXT1cIndpZGdldEluc3RhbmNlLmtleVwiXHJcbiAgICAgICAgICBbbW9kdWxlc109XCJ3aWRnZXRJbnN0YW5jZS5pc0Rpc2FibGVkID8gZW1wdHlRdWlsbFRvb2xiYXIgOiB3aWRnZXRJbnN0YW5jZS5xdWlsbE1vZHVsZXNcIlxyXG4gICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIndpZGdldEluc3RhbmNlLnBsYWNlaG9sZGVyXCJcclxuICAgICAgICAgIFtyZWFkT25seV09XCJ3aWRnZXRJbnN0YW5jZS5pc1JlYWRvbmx5XCJcclxuICAgICAgICAgIFttYXhMZW5ndGhdPVwid2lkZ2V0SW5zdGFuY2UubWF4TGVuZ3RoXCJcclxuICAgICAgICAgIChvbkNvbnRlbnRDaGFuZ2VkKT1cIm9uUmljaFRleHRFZGl0b3JDb250ZW50Q2hhbmdlZCgkZXZlbnQpXCJcclxuICAgICAgICA+PC9xdWlsbC1lZGl0b3I+XHJcbiAgICAgICAgPG1hdC1oaW50XHJcbiAgICAgICAgICAqbmdJZj1cIlxyXG4gICAgICAgICAgICAhd2lkZ2V0SW5zdGFuY2U/LmhpbnQgfHxcclxuICAgICAgICAgICAgd2lkZ2V0SW5zdGFuY2U/LmhpbnQ/LnBvc2l0aW9uID09PSBTbWFydFdpZGdldEhpbnRQb3NpdGlvbi5JTlBVVFxyXG4gICAgICAgICAgXCJcclxuICAgICAgICAgID57eyB3aWRnZXRJbnN0YW5jZS5oaW50Py50ZXh0IH19PC9tYXQtaGludFxyXG4gICAgICAgID5cclxuICAgICAgICA8bWF0LWhpbnRcclxuICAgICAgICAgICpuZ0lmPVwid2lkZ2V0SW5zdGFuY2Uuc2hvd0NoYXJhY3RlckxpbWl0U3VmZml4ICYmIHdpZGdldEluc3RhbmNlLm1heExlbmd0aFwiXHJcbiAgICAgICAgICBtYXRTdWZmaXhcclxuICAgICAgICAgIGFsaWduPVwiZW5kXCJcclxuICAgICAgICAgIGNsYXNzPVwicmljaC10ZXh0LWVkaXRvci1sZWV3YXktY291bnRlclwiXHJcbiAgICAgICAgICA+e3sgZ2V0UmljaFRleHRFZGl0b3JMZW5ndGhMZWV3YXkoKSB9fTwvbWF0LWhpbnRcclxuICAgICAgICA+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGRpdiAqbmdJZj1cIndpZGdldEluc3RhbmNlLnR5cGUgPT09IHNtYXJ0Rm9ybVdpZGdldFR5cGUuU09SVEFCTEVcIiBjbGFzcz1cIndpZGdldENvbnRhaW5lclwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwibGFiZWxDb250YWluZXJcIj5cclxuICAgICAgICA8aDQgKm5nSWY9XCJ3aWRnZXRJbnN0YW5jZS5zaG93TGFiZWxcIiBjbGFzcz1cInt7IGxhYmVsQ29sb3IgfX1cIj5cclxuICAgICAgICAgIHt7IGdldFdpZGdldExhYmVsKHdpZGdldEluc3RhbmNlKSB9fVxyXG4gICAgICAgIDwvaDQ+XHJcbiAgICAgICAgPG1hdC1oaW50ICpuZ0lmPVwid2lkZ2V0SW5zdGFuY2U/LmhpbnQ/LnBvc2l0aW9uID09PSBTbWFydFdpZGdldEhpbnRQb3NpdGlvbi5MQUJFTFwiPnt7XHJcbiAgICAgICAgICB3aWRnZXRJbnN0YW5jZS5oaW50Py50ZXh0XHJcbiAgICAgICAgfX08L21hdC1oaW50PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cIndpZGdldENvbnRlbnRcIj5cclxuICAgICAgICA8bGliLXNvcnRhYmxlLXdpZGdldFxyXG4gICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJ3aWRnZXRJbnN0YW5jZS5rZXlcIlxyXG4gICAgICAgICAgW3dpZGdldEluc3RhbmNlXT1cIndpZGdldEluc3RhbmNlXCJcclxuICAgICAgICA+PC9saWItc29ydGFibGUtd2lkZ2V0PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgKm5nSWY9XCJ3aWRnZXRJbnN0YW5jZS50eXBlID09PSBzbWFydEZvcm1XaWRnZXRUeXBlLk1BVFJJWFwiIGNsYXNzPVwid2lkZ2V0Q29udGFpbmVyXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwibGFiZWxDb250YWluZXJcIj5cclxuICAgICAgPGg0ICpuZ0lmPVwid2lkZ2V0SW5zdGFuY2Uuc2hvd0xhYmVsXCIgY2xhc3M9XCJ7eyBsYWJlbENvbG9yIH19XCI+XHJcbiAgICAgICAge3sgZ2V0V2lkZ2V0TGFiZWwod2lkZ2V0SW5zdGFuY2UpIH19XHJcbiAgICAgIDwvaDQ+XHJcbiAgICAgIDxtYXQtaGludCAqbmdJZj1cIndpZGdldEluc3RhbmNlPy5oaW50Py5wb3NpdGlvbiA9PT0gU21hcnRXaWRnZXRIaW50UG9zaXRpb24uTEFCRUxcIj57e1xyXG4gICAgICAgIHdpZGdldEluc3RhbmNlLmhpbnQ/LnRleHRcclxuICAgICAgfX08L21hdC1oaW50PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPHRhYmxlIGNsYXNzPVwibWF0cml4VGFibGUgd2lkZ2V0Q29udGVudFwiPlxyXG4gICAgICA8dHI+XHJcbiAgICAgICAgPHRoPjwvdGg+XHJcbiAgICAgICAgPHRoIGNsYXNzPVwib3B0aW9uTGFiZWxcIiAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIHdpZGdldEluc3RhbmNlLnZhbHVlLmNvbHVtbnNcIj5cclxuICAgICAgICAgIHt7IG9wdGlvbi5kaXNwbGF5VmFsdWUgfX1cclxuICAgICAgICA8L3RoPlxyXG4gICAgICA8L3RyPlxyXG4gICAgICA8dHIgKm5nRm9yPVwibGV0IHF1ZXN0aW9uIG9mIHdpZGdldEluc3RhbmNlLnZhbHVlLnJvd3M7IGxldCBpID0gaW5kZXhcIj5cclxuICAgICAgICA8dGggY2xhc3M9XCJxdWVzdGlvbkxhYmVsXCI+XHJcbiAgICAgICAgICA8bGFiZWw+e3sgcXVlc3Rpb24uZGlzcGxheVZhbHVlIH19PC9sYWJlbD5cclxuICAgICAgICA8L3RoPlxyXG5cclxuICAgICAgICA8dGQgY2xhc3M9XCJzZWxlY3RUZFwiICpuZ0Zvcj1cImxldCBvcHRpb24gb2Ygd2lkZ2V0SW5zdGFuY2UudmFsdWUuY29sdW1uczsgbGV0IGogPSBpbmRleFwiPlxyXG4gICAgICAgICAgPG1hdC1yYWRpby1ncm91cFxyXG4gICAgICAgICAgICAqbmdJZj1cIiF3aWRnZXRJbnN0YW5jZS5pc011bHRpcGxlXCJcclxuICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJ3aWRnZXRJbnN0YW5jZS5rZXkgKyAnLicgKyBxdWVzdGlvbi5jb2RlXCJcclxuICAgICAgICAgICAgW25hbWVdPVwiJ3EnICsgaVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxtYXQtcmFkaW8tYnV0dG9uIFt2YWx1ZV09XCJvcHRpb24uY29kZVwiPiA8L21hdC1yYWRpby1idXR0b24+XHJcbiAgICAgICAgICA8L21hdC1yYWRpby1ncm91cD5cclxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJ3aWRnZXRJbnN0YW5jZS5pc011bHRpcGxlXCI+XHJcbiAgICAgICAgICAgIDxtYXQtY2hlY2tib3hcclxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cIndpZGdldEluc3RhbmNlLmtleSArICcuZGF0YS4nICsgcXVlc3Rpb24uY29kZSArICcuJyArIG9wdGlvbi5jb2RlXCJcclxuICAgICAgICAgICAgICBbdmFsdWVdPVwid2lkZ2V0SW5zdGFuY2UudmFsdWVbJ2RhdGEnXVtxdWVzdGlvbi5jb2RlXVtvcHRpb24uY29kZV1cIlxyXG4gICAgICAgICAgICAgIFtjaGVja2VkXT1cInRydWVcIlxyXG4gICAgICAgICAgICA+PC9tYXQtY2hlY2tib3g+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L3RkPlxyXG4gICAgICAgIDxiciAvPlxyXG4gICAgICAgIDxidXR0b24gKm5nSWY9XCJ3aWRnZXRJbnN0YW5jZS5idXR0b25cIiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cInJlbW92ZU1hdHJpeFJvdyhxdWVzdGlvbilcIlxyXG4gICAgICAgICAgPjxzbWFydC1pY29uIGljb249XCJjbG9zZVwiPjwvc21hcnQtaWNvblxyXG4gICAgICAgID48L2J1dHRvbj5cclxuICAgICAgPC90cj5cclxuICAgIDwvdGFibGU+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiAqbmdJZj1cIndpZGdldEluc3RhbmNlLnR5cGUgPT09IHNtYXJ0Rm9ybVdpZGdldFR5cGUuWU9VVFVCRV9QTEFZRVJcIiBjbGFzcz1cIndpZGdldENvbnRhaW5lclwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImxhYmVsQ29udGFpbmVyXCI+XHJcbiAgICAgIDxoNFxyXG4gICAgICAgICpuZ0lmPVwid2lkZ2V0SW5zdGFuY2Uuc2hvd0xhYmVsXCJcclxuICAgICAgICBjbGFzcz1cInt7IGxhYmVsQ29sb3IgfX0ge3sgd2lkZ2V0SW5zdGFuY2UuY3NzTGFiZWxDbGFzcyB9fVwiXHJcbiAgICAgICAgW25nQ2xhc3NdPVwiZ2V0TGFiZWxOZ0NsYXNzKClcIlxyXG4gICAgICAgIFtuZ1N0eWxlXT1cImdldExhYmVsU3R5bGUoKVwiXHJcbiAgICAgID5cclxuICAgICAgICB7eyBnZXRXaWRnZXRMYWJlbCh3aWRnZXRJbnN0YW5jZSkgfX1cclxuICAgICAgPC9oND5cclxuICAgICAgPG1hdC1oaW50ICpuZ0lmPVwid2lkZ2V0SW5zdGFuY2U/LmhpbnQ/LnBvc2l0aW9uID09PSBTbWFydFdpZGdldEhpbnRQb3NpdGlvbi5MQUJFTFwiPnt7XHJcbiAgICAgICAgd2lkZ2V0SW5zdGFuY2UuaGludD8udGV4dFxyXG4gICAgICB9fTwvbWF0LWhpbnQ+XHJcbiAgICA8L2Rpdj5cclxuICAgIDx5b3V0dWJlLXBsYXllclxyXG4gICAgICBbbmdDbGFzc109XCJnZXROZ0NsYXNzKClcIlxyXG4gICAgICBbbmdTdHlsZV09XCJnZXRTdHlsZSgpXCJcclxuICAgICAgdmlkZW9JZD1cInt7IHdpZGdldEluc3RhbmNlLnZpZGVvSWQgfX1cIlxyXG4gICAgICBbd2lkdGhdPVwid2lkZ2V0SW5zdGFuY2Uud2lkdGhcIlxyXG4gICAgICBbaGVpZ2h0XT1cIndpZGdldEluc3RhbmNlLmhlaWdodFwiXHJcbiAgICAgIFtzdGFydFNlY29uZHNdPVwid2lkZ2V0SW5zdGFuY2Uuc3RhcnRTZWNvbmRzXCJcclxuICAgICAgW2VuZFNlY29uZHNdPVwid2lkZ2V0SW5zdGFuY2UuZW5kU2Vjb25kc1wiXHJcbiAgICA+PC95b3V0dWJlLXBsYXllcj5cclxuICAgIDxtYXQtaGludFxyXG4gICAgICAqbmdJZj1cIlxyXG4gICAgICAgICF3aWRnZXRJbnN0YW5jZT8uaGludCB8fCB3aWRnZXRJbnN0YW5jZT8uaGludD8ucG9zaXRpb24gPT09IFNtYXJ0V2lkZ2V0SGludFBvc2l0aW9uLklOUFVUXHJcbiAgICAgIFwiXHJcbiAgICAgID57eyB3aWRnZXRJbnN0YW5jZS5oaW50Py50ZXh0IH19PC9tYXQtaGludFxyXG4gICAgPlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgKm5nSWY9XCJ3aWRnZXRJbnN0YW5jZS50eXBlID09PSBzbWFydEZvcm1XaWRnZXRUeXBlLk1PTlRIX1BJQ0tFUlwiIGNsYXNzPVwid2lkZ2V0Q29udGFpbmVyXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwibGFiZWxDb250YWluZXJcIiAqbmdJZj1cIndpZGdldEluc3RhbmNlLnNob3dMYWJlbFwiPlxyXG4gICAgICA8aDQgY2xhc3M9XCJ7eyBsYWJlbENvbG9yIH19IHNtYXJ0LWZvcm0td2lkZ2V0LWxhYmVsXCI+XHJcbiAgICAgICAge3sgZ2V0V2lkZ2V0TGFiZWwod2lkZ2V0SW5zdGFuY2UpIH19XHJcbiAgICAgIDwvaDQ+XHJcbiAgICAgIDxtYXQtaGludCAqbmdJZj1cIndpZGdldEluc3RhbmNlPy5oaW50Py5wb3NpdGlvbiA9PT0gU21hcnRXaWRnZXRIaW50UG9zaXRpb24uTEFCRUxcIj57e1xyXG4gICAgICAgIHdpZGdldEluc3RhbmNlLmhpbnQ/LnRleHRcclxuICAgICAgfX08L21hdC1oaW50PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8bGliLXNtYXJ0LW1vbnRoLXBpY2tlclxyXG4gICAgICBbd2lkZ2V0SW5zdGFuY2VdPVwid2lkZ2V0SW5zdGFuY2VcIlxyXG4gICAgICAodmFsdWVDaGFuZ2UpPVwiaGFuZGxlWWVhck1vbnRoUGlja2VkKCRldmVudClcIlxyXG4gICAgPjwvbGliLXNtYXJ0LW1vbnRoLXBpY2tlcj5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcbiJdfQ==
|