@wavemaker/app-ng-runtime 11.11.4-rc.6173 → 11.11.5-rc.214
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/components/base/bundles/index.umd.js +12 -7
- package/components/base/esm2022/widgets/common/base/base-field-validations.mjs +13 -8
- package/components/base/fesm2022/index.mjs +12 -7
- package/components/base/fesm2022/index.mjs.map +1 -1
- package/components/data/form/bundles/index.umd.js +20 -1
- package/components/data/form/esm2022/form-action/form-action.directive.mjs +5 -2
- package/components/data/form/esm2022/form-field/form-field.directive.mjs +2 -1
- package/components/data/form/esm2022/form.component.mjs +15 -1
- package/components/data/form/esm2022/form.props.mjs +2 -1
- package/components/data/form/fesm2022/index.mjs +20 -1
- package/components/data/form/fesm2022/index.mjs.map +1 -1
- package/components/data/form/form.component.d.ts +1 -0
- package/components/data/list/bundles/index.umd.js +53 -10
- package/components/data/list/esm2022/list.component.mjs +51 -10
- package/components/data/list/esm2022/list.props.mjs +4 -2
- package/components/data/list/fesm2022/index.mjs +53 -10
- package/components/data/list/fesm2022/index.mjs.map +1 -1
- package/components/data/list/list.component.d.ts +7 -0
- package/components/data/pagination/bundles/index.umd.js +502 -106
- package/components/data/pagination/esm2022/pagination.component.mjs +500 -105
- package/components/data/pagination/esm2022/pagination.props.mjs +4 -1
- package/components/data/pagination/fesm2022/index.mjs +502 -104
- package/components/data/pagination/fesm2022/index.mjs.map +1 -1
- package/components/data/pagination/pagination.component.d.ts +21 -1
- package/components/data/table/bundles/index.umd.js +89 -11
- package/components/data/table/esm2022/table-column/table-column.directive.mjs +3 -2
- package/components/data/table/esm2022/table-column/table-column.props.mjs +2 -1
- package/components/data/table/esm2022/table.component.mjs +82 -12
- package/components/data/table/esm2022/table.props.mjs +7 -1
- package/components/data/table/fesm2022/index.mjs +90 -12
- package/components/data/table/fesm2022/index.mjs.map +1 -1
- package/components/data/table/table-column/table-column.directive.d.ts +1 -0
- package/components/data/table/table.component.d.ts +17 -0
- package/components/input/epoch/base-date-time.component.d.ts +3 -1
- package/components/input/epoch/bundles/index.umd.js +123 -65
- package/components/input/epoch/esm2022/base-date-time.component.mjs +31 -20
- package/components/input/epoch/esm2022/date/date.component.mjs +5 -6
- package/components/input/epoch/esm2022/date-time/date-time.component.mjs +45 -22
- package/components/input/epoch/esm2022/date-time/date-time.props.mjs +3 -2
- package/components/input/epoch/esm2022/time/time.component.mjs +40 -14
- package/components/input/epoch/esm2022/time/time.props.mjs +3 -2
- package/components/input/epoch/fesm2022/index.mjs +118 -60
- package/components/input/epoch/fesm2022/index.mjs.map +1 -1
- package/components/input/slider/bundles/index.umd.js +107 -38
- package/components/input/slider/esm2022/slider.component.mjs +86 -18
- package/components/input/slider/esm2022/slider.props.mjs +5 -3
- package/components/input/slider/fesm2022/index.mjs +88 -19
- package/components/input/slider/fesm2022/index.mjs.map +1 -1
- package/components/input/slider/slider.component.d.ts +5 -0
- package/npm-shrinkwrap.json +2 -2
- package/oAuth/esm2022/oAuth.service.mjs +1 -1
- package/oAuth/fesm2022/index.mjs.map +1 -1
- package/package-lock.json +2 -2
- package/package.json +1 -1
- package/runtime/base/bundles/index.umd.js +84 -34
- package/runtime/base/components/app-component/app.component.d.ts +10 -3
- package/runtime/base/esm2022/components/app-component/app.component.mjs +85 -34
- package/runtime/base/esm2022/util/wm-route-reuse-strategy.mjs +2 -2
- package/runtime/base/fesm2022/index.mjs +85 -35
- package/runtime/base/fesm2022/index.mjs.map +1 -1
- package/scripts/datatable/datatable.js +56 -10
|
@@ -4542,13 +4542,15 @@
|
|
|
4542
4542
|
const _validator = [];
|
|
4543
4543
|
if (!this.instance.show)
|
|
4544
4544
|
return _validator;
|
|
4545
|
-
if (this.
|
|
4546
|
-
|
|
4547
|
-
|
|
4548
|
-
|
|
4549
|
-
|
|
4550
|
-
|
|
4551
|
-
|
|
4545
|
+
if (this.widgettype !== i1.FormWidgetType.DATE && this.widgettype !== i1.FormWidgetType.TIME && this.widgettype !== i1.FormWidgetType.DATETIME) {
|
|
4546
|
+
if (this.instance.required) {
|
|
4547
|
+
// For checkbox/toggle widget, required validation should consider true value only
|
|
4548
|
+
if (this.widgettype === i1.FormWidgetType.CHECKBOX || this.widgettype === i1.FormWidgetType.TOGGLE) {
|
|
4549
|
+
_validator.push(forms.Validators.requiredTrue);
|
|
4550
|
+
}
|
|
4551
|
+
else {
|
|
4552
|
+
_validator.push(forms.Validators.required);
|
|
4553
|
+
}
|
|
4552
4554
|
}
|
|
4553
4555
|
}
|
|
4554
4556
|
if (this.instance.maxchars) {
|
|
@@ -4566,6 +4568,9 @@
|
|
|
4566
4568
|
if (this.formwidget && lodashEs.isFunction(this.formwidget.validate)) {
|
|
4567
4569
|
_validator.push(this.formwidget.validate.bind(this.formwidget));
|
|
4568
4570
|
}
|
|
4571
|
+
if ((this.widgettype === i1.FormWidgetType.DATE || this.widgettype === i1.FormWidgetType.TIME || this.widgettype === i1.FormWidgetType.DATETIME) && this.instance.required) {
|
|
4572
|
+
_validator.push(forms.Validators.required);
|
|
4573
|
+
}
|
|
4569
4574
|
return _validator;
|
|
4570
4575
|
}
|
|
4571
4576
|
// On change of any validation property, set the angular form validators
|
|
@@ -30,13 +30,15 @@ export class BaseFieldValidations {
|
|
|
30
30
|
const _validator = [];
|
|
31
31
|
if (!this.instance.show)
|
|
32
32
|
return _validator;
|
|
33
|
-
if (this.
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
33
|
+
if (this.widgettype !== FormWidgetType.DATE && this.widgettype !== FormWidgetType.TIME && this.widgettype !== FormWidgetType.DATETIME) {
|
|
34
|
+
if (this.instance.required) {
|
|
35
|
+
// For checkbox/toggle widget, required validation should consider true value only
|
|
36
|
+
if (this.widgettype === FormWidgetType.CHECKBOX || this.widgettype === FormWidgetType.TOGGLE) {
|
|
37
|
+
_validator.push(Validators.requiredTrue);
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
_validator.push(Validators.required);
|
|
41
|
+
}
|
|
40
42
|
}
|
|
41
43
|
}
|
|
42
44
|
if (this.instance.maxchars) {
|
|
@@ -54,6 +56,9 @@ export class BaseFieldValidations {
|
|
|
54
56
|
if (this.formwidget && isFunction(this.formwidget.validate)) {
|
|
55
57
|
_validator.push(this.formwidget.validate.bind(this.formwidget));
|
|
56
58
|
}
|
|
59
|
+
if ((this.widgettype === FormWidgetType.DATE || this.widgettype === FormWidgetType.TIME || this.widgettype === FormWidgetType.DATETIME) && this.instance.required) {
|
|
60
|
+
_validator.push(Validators.required);
|
|
61
|
+
}
|
|
57
62
|
return _validator;
|
|
58
63
|
}
|
|
59
64
|
// On change of any validation property, set the angular form validators
|
|
@@ -267,4 +272,4 @@ export class BaseFieldValidations {
|
|
|
267
272
|
}
|
|
268
273
|
}
|
|
269
274
|
}
|
|
270
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1maWVsZC12YWxpZGF0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvYmFzZS9zcmMvd2lkZ2V0cy9jb21tb24vYmFzZS9iYXNlLWZpZWxkLXZhbGlkYXRpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUUxQyxPQUFPLEVBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxjQUFjLEVBQUUsU0FBUyxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBQ3JFLE9BQU8sRUFDSCxTQUFTLEVBQ1QsTUFBTSxFQUNOLE1BQU0sRUFDTixNQUFNLEVBQ04sSUFBSSxFQUNKLE9BQU8sRUFDUCxHQUFHLEVBQ0gsT0FBTyxFQUNQLFVBQVUsRUFDVixJQUFJLElBQUksS0FBSyxFQUNiLE9BQU8sRUFDVixNQUFNLFdBQVcsQ0FBQztBQUVuQixNQUFNLGlCQUFpQixHQUFHO0lBQ3RCLE9BQU8sRUFBRSxRQUFRO0lBQ2pCLEdBQUcsRUFBRSxVQUFVO0lBQ2YsR0FBRyxFQUFFLFVBQVU7SUFDZixRQUFRLEVBQUUsVUFBVTtJQUNwQixTQUFTLEVBQUUsVUFBVTtJQUNyQixPQUFPLEVBQUUsU0FBUztJQUNsQixPQUFPLEVBQUUsU0FBUztJQUNsQixZQUFZLEVBQUUsY0FBYztJQUM1QixXQUFXLEVBQUUsYUFBYTtJQUMxQixhQUFhLEVBQUMsZUFBZTtDQUNoQyxDQUFDO0FBRUYsTUFBTSxPQUFPLG9CQUFvQjtJQW9CN0IsWUFBWSxRQUFRLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLGNBQWU7UUFDdkYsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7UUFDekIsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7UUFDN0IsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7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VyxDQUFDLGNBQWMsQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDO1lBQzdDLElBQUksQ0FBQyxRQUFRLENBQUMsaUJBQWlCLEdBQUcsR0FBRyxDQUFDLFdBQVcsRUFBRSxjQUFjLENBQUMsQ0FBQztRQUN2RSxDQUFDO2FBQU0sQ0FBQztZQUNKLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUNoQyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDcEIsTUFBTSxnQkFBZ0IsR0FBRyxHQUFHLENBQUMsaUJBQWlCLEVBQUUsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUM7WUFDckYsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO2dCQUNuQixNQUFNLEdBQUcsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLHdCQUF3QixFQUFFLGdCQUFnQixDQUFDLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQztnQkFDcEcsSUFBSSxHQUFHLElBQUksR0FBRyxZQUFZLFFBQVEsRUFBRSxDQUFDO29CQUNqQyx3RUFBd0U7b0JBQ3hFLElBQUksQ0FBQyxRQUFRLENBQUMsaUJBQWlCLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO2dCQUNsRixDQUFDO3FCQUFNLENBQUM7b0JBQ0osSUFBSSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsR0FBRyxHQUFHLENBQUM7Z0JBQzFDLENBQUM7WUFDTCxDQUFDO2lCQUFNLENBQUM7Z0JBQ0osd0ZBQXdGO2dCQUN4RixJQUFJLENBQUMsUUFBUSxDQUFDLGlCQUFpQixHQUFHLEVBQUUsQ0FBQztZQUN6QyxDQUFDO1FBQ0wsQ0FBQztJQUNMLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7VmFsaWRhdG9yc30gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5pbXBvcnQgeyR1bndhdGNoLCAkd2F0Y2gsIEZvcm1XaWRnZXRUeXBlLCBWQUxJREFUT1J9IGZyb20gJ0B3bS9jb3JlJztcbmltcG9ydCB7XG4gICAgY2xvbmVEZWVwLFxuICAgIGNvbmNhdCxcbiAgICBleHRlbmQsXG4gICAgZmlsdGVyLFxuICAgIGZpbmQsXG4gICAgZm9yRWFjaCxcbiAgICBnZXQsXG4gICAgaXNFbXB0eSxcbiAgICBpc0Z1bmN0aW9uLFxuICAgIGtleXMgYXMgX2tleXMsXG4gICAgdG9VcHBlclxufSBmcm9tIFwibG9kYXNoLWVzXCI7XG5cbmNvbnN0IERFRkFVTFRfVkFMSURBVE9SID0ge1xuICAgIHBhdHRlcm46ICdyZWdleHAnLFxuICAgIG1heDogJ21heHZhbHVlJyxcbiAgICBtaW46ICdtaW52YWx1ZScsXG4gICAgcmVxdWlyZWQ6ICdyZXF1aXJlZCcsXG4gICAgbWF4bGVuZ3RoOiAnbWF4Y2hhcnMnLFxuICAgIG1pbmRhdGU6ICdtaW5kYXRlJyxcbiAgICBtYXhkYXRlOiAnbWF4ZGF0ZScsXG4gICAgZXhjbHVkZWRhdGVzOiAnZXhjbHVkZWRhdGVzJyxcbiAgICBleGNsdWRlZGF5czogJ2V4Y2x1ZGVkYXlzJyxcbiAgICBpbnZhbGlkTnVtYmVyOidpbnZhbGlkTnVtYmVyJ1xufTtcblxuZXhwb3J0IGNsYXNzIEJhc2VGaWVsZFZhbGlkYXRpb25zIHtcbiAgICBwcml2YXRlIGhhc1ZhbGlkYXRvcnM7XG5cbiAgICAvLyBJbnN0YW5jZSBvZiB0aGUgZGlyZWN0aXZlIHRhYmxlLWNvbHVtbiwgZm9ybS1maWVsZC4uXG4gICAgcHJpdmF0ZSBpbnN0YW5jZTtcbiAgICAvLyBJbmxpbmUgZm9ybSB3aWRnZXRcbiAgICBwdWJsaWMgZm9ybXdpZGdldDtcbiAgICAvLyBXaWRnZXQgdHlwZVxuICAgIHByaXZhdGUgd2lkZ2V0dHlwZTtcbiAgICAvLyBGcm9tIGNvbnRyb2xcbiAgICBwcml2YXRlIHdpZGdldENvbnRyb2w7XG4gICAgLy8gUGFyZW50IHdpZGdldCBjb250ZXh0IFRhYmxlLCBGb3JtLi5cbiAgICBwcml2YXRlIHdpZGdldENvbnRleHQ7XG4gICAgLy8gT3B0aW9uYWwgdGFibGUgY29sdW1uIHR5cGUgcXVpY2tlZGl0IG5ld3Jvdy8gaW5saW5lIGVkaXRcbiAgICBwcml2YXRlIHRhYmxlRmllbGRUeXBlO1xuXG4gICAgcHJpdmF0ZSBkZWZhdWx0VmFsaWRhdG9yTWVzc2FnZXM6IGFueTtcbiAgICBwcml2YXRlIF9zeW5jVmFsaWRhdG9yczogYW55O1xuICAgIHByaXZhdGUgX2FzeW5jVmFsaWRhdG9yRm46IGFueTtcblxuICAgIGNvbnN0cnVjdG9yKGluc3RhbmNlLCBmb3Jtd2lkZ2V0LCB3aWRnZXR0eXBlLCB3aWRnZXRDb250cm9sLCB3aWRnZXRDb250ZXh0LCB0YWJsZUZpZWxkVHlwZT8pe1xuICAgICAgICB0aGlzLmluc3RhbmNlID0gaW5zdGFuY2U7XG4gICAgICAgIHRoaXMuZm9ybXdpZGdldCA9IGZvcm13aWRnZXQ7XG4gICAgICAgIHRoaXMud2lkZ2V0dHlwZSA9IHdpZGdldHR5cGU7XG4gICAgICAgIHRoaXMud2lkZ2V0Q29udHJvbCA9IHdpZGdldENvbnRyb2w7XG4gICAgICAgIHRoaXMud2lkZ2V0Q29udGV4dCA9IHdpZGdldENvbnRleHQ7XG5cbiAgICAgICAgdGhpcy5kZWZhdWx0VmFsaWRhdG9yTWVzc2FnZXMgPSBbXTtcbiAgICAgICAgaWYgKHRhYmxlRmllbGRUeXBlKSB7XG4gICAgICAgICAgICB0aGlzLnRhYmxlRmllbGRUeXBlID0gdGFibGVGaWVsZFR5cGU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyB0aGlzIG1ldGhvZCByZXR1cm5zIHRoZSBjb2xsZWN0aW9uIG9mIHN1cHBvcnRlZCBkZWZhdWx0IHZhbGlkYXRvcnNcbiAgICBwcml2YXRlIGdldERlZmF1bHRWYWxpZGF0b3JzKCkge1xuICAgICAgICBjb25zdCBfdmFsaWRhdG9yID0gW107XG4gICAgICAgIGlmKCF0aGlzLmluc3RhbmNlLnNob3cpIHJldHVybiBfdmFsaWRhdG9yO1xuICAgICAgICBpZiAodGhpcy5pbnN0YW5jZS5yZXF1aXJlZCkge1xuICAgICAgICAgICAgLy8gRm9yIGNoZWNrYm94L3RvZ2dsZSB3aWRnZXQsIHJlcXVpcmVkIHZhbGlkYXRpb24gc2hvdWxkIGNvbnNpZGVyIHRydWUgdmFsdWUgb25seVxuICAgICAgICAgICAgaWYgKHRoaXMud2lkZ2V0dHlwZSA9PT0gRm9ybVdpZGdldFR5cGUuQ0hFQ0tCT1ggfHwgdGhpcy53aWRnZXR0eXBlID09PSBGb3JtV2lkZ2V0VHlwZS5UT0dHTEUpIHtcbiAgICAgICAgICAgICAgICBfdmFsaWRhdG9yLnB1c2goVmFsaWRhdG9ycy5yZXF1aXJlZFRydWUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBfdmFsaWRhdG9yLnB1c2goVmFsaWRhdG9ycy5yZXF1aXJlZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaW5zdGFuY2UubWF4Y2hhcnMpIHtcbiAgICAgICAgICAgIF92YWxpZGF0b3IucHVzaChWYWxpZGF0b3JzLm1heExlbmd0aCh0aGlzLmluc3RhbmNlLm1heGNoYXJzKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaW5zdGFuY2UubWludmFsdWUpIHtcbiAgICAgICAgICAgIF92YWxpZGF0b3IucHVzaChWYWxpZGF0b3JzLm1pbih0aGlzLmluc3RhbmNlLm1pbnZhbHVlKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaW5zdGFuY2UubWF4dmFsdWUgJiYgdGhpcy53aWRnZXR0eXBlICE9PSBGb3JtV2lkZ2V0VHlwZS5SQVRJTkcpIHtcbiAgICAgICAgICAgIF92YWxpZGF0b3IucHVzaChWYWxpZGF0b3JzLm1heCh0aGlzLmluc3RhbmNlLm1heHZhbHVlKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaW5zdGFuY2UucmVnZXhwKSB7XG4gICAgICAgICAgICBfdmFsaWRhdG9yLnB1c2goVmFsaWRhdG9ycy5wYXR0ZXJuKHRoaXMuaW5zdGFuY2UucmVnZXhwKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZm9ybXdpZGdldCAmJiBpc0Z1bmN0aW9uKHRoaXMuZm9ybXdpZGdldC52YWxpZGF0ZSkpIHtcbiAgICAgICAgICAgIF92YWxpZGF0b3IucHVzaCh0aGlzLmZvcm13aWRnZXQudmFsaWRhdGUuYmluZCh0aGlzLmZvcm13aWRnZXQpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gX3ZhbGlkYXRvcjtcbiAgICB9XG5cbiAgICAvLyBPbiBjaGFuZ2Ugb2YgYW55IHZhbGlkYXRpb24gcHJvcGVydHksIHNldCB0aGUgYW5ndWxhciBmb3JtIHZhbGlkYXRvcnNcbiAgICBzZXRVcFZhbGlkYXRvcnMoY3VzdG9tVmFsaWRhdG9yPykge1xuICAgICAgICBpZiAodGhpcy5oYXNWYWxpZGF0b3JzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pbnN0YW5jZS5fdmFsaWRhdG9ycyA9IHRoaXMuZ2V0RGVmYXVsdFZhbGlkYXRvcnMoKTtcblxuICAgICAgICBpZiAoY3VzdG9tVmFsaWRhdG9yKSB7XG4gICAgICAgICAgICB0aGlzLmluc3RhbmNlLl92YWxpZGF0b3JzLnB1c2goY3VzdG9tVmFsaWRhdG9yKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLndpZGdldENvbnRleHQubmdmb3JtKSB7XG4gICAgICAgICAgICB0aGlzLndpZGdldENvbnRyb2wuc2V0VmFsaWRhdG9ycyh0aGlzLmluc3RhbmNlLl92YWxpZGF0b3JzKTtcbiAgICAgICAgICAgIGNvbnN0IG9wdCA9IHt9O1xuICAgICAgICAgICAgLy8gdXBkYXRpbmcgdGhlIHZhbHVlIG9ubHkgd2hlbiBwcmV2RGF0YSBpcyBub3QgZXF1YWwgdG8gY3VycmVudCB2YWx1ZS4gYW5kIGFsc28gaW5pdGlhbGx5IHdoZW4gIGluc3RhbmNlLnZhbHVlIGlzIGVtcHR5IG9yIG51bGwgZm9yIHNvbWUgd2lkZ2V0cyBsaWtlIGRhdGUsIGNoZWNrYm94c2V0XG4gICAgICAgICAgICAvLyBlbWl0RXZlbnQgZmxhZyB3aWxsIHByZXZlbnQgZnJvbSBlbWl0dGluZyB0aGUgdmFsdWVDaGFuZ2VzIHdoZW4gdmFsdWUgaXMgZXF1YWwgdG8gdGhlIHByZXZEYXRhdmFsdWUuXG4gICAgICAgICAgICBpZiAodGhpcy5mb3Jtd2lkZ2V0ICYmICh0aGlzLmluc3RhbmNlLnZhbHVlID09PSB0aGlzLmZvcm13aWRnZXQucHJldkRhdGF2YWx1ZSB8fCB0aGlzLmlzTnVsbE9yRW1wdHlPckZhbHN5KHRoaXMuaW5zdGFuY2UudmFsdWUpKSkge1xuICAgICAgICAgICAgICAgIG9wdFsnZW1pdEV2ZW50J10gPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMud2lkZ2V0Q29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KG9wdCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRQcm9taXNlTGlzdCh2YWxpZGF0b3JzKSB7XG4gICAgICAgIGNvbnN0IGFyciA9IFtdO1xuICAgICAgICBmb3JFYWNoKHZhbGlkYXRvcnMsIChmbiwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGxldCBwcm9taXNlID0gZm47XG4gICAgICAgICAgICBpZiAoZm4gaW5zdGFuY2VvZiBGdW5jdGlvbiAmJiBmbi5iaW5kKSB7XG4gICAgICAgICAgICAgICAgcHJvbWlzZSA9IGZuKHRoaXMud2lkZ2V0Q29udHJvbCwgdGhpcy53aWRnZXRDb250ZXh0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChwcm9taXNlIGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICAgICAgICAgIGFyci5wdXNoKHByb21pc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGFycjtcbiAgICB9XG5cbiAgICAvLyB0aGlzIG1ldGhvZCBzZXRzIHRoZSBhc3luY1ZhbGlkYXRpb24gb24gdGhlIGZvcm0gZmllbGQuIEFzc2lnbnMgdmFsaWRhdGlvbm1lc3NhZ2VzIGZyb20gdGhlIHJldHVybmVkIHJlc3BvbnNlXG4gICAgc2V0QXN5bmNWYWxpZGF0b3JzKHZhbGlkYXRvcnMpIHtcbiAgICAgICAgdGhpcy5fYXN5bmNWYWxpZGF0b3JGbiA9ICgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKHRoaXMuZ2V0UHJvbWlzZUxpc3QodmFsaWRhdG9ycykpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmluc3RhbmNlLnZhbGlkYXRpb25tZXNzYWdlID0gJyc7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgIH0sIGVyciA9PiB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGlmIGVyciBvYmogaGFzIHZhbGlkYXRpb25NZXNzYWdlIGtleSwgdGhlbiBzZXQgdmFsaWRhdGlvbk1lc3NhZ2UgdXNpbmcgdGhpcyB2YWx1ZVxuICAgICAgICAgICAgICAgICAgICAvLyBlbHNlIHJldHVybiB0aGUgdmFsdWUgb2YgdGhlIGZpcnN0IGtleSBpbiB0aGUgZXJyIG9iamVjdCBhcyB2YWxpZGF0aW9uIG1lc3NhZ2UuXG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnIuaGFzT3duUHJvcGVydHkoJ2Vycm9yTWVzc2FnZScpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmluc3RhbmNlLnZhbGlkYXRpb25tZXNzYWdlID0gZ2V0KGVyciwgJ2Vycm9yTWVzc2FnZScpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qga2V5cyA9IF9rZXlzKGVycik7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmluc3RhbmNlLnZhbGlkYXRpb25tZXNzYWdlID0gKGVycltrZXlzWzBdXSkudG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyO1xuICAgICAgICAgICAgICAgIH0pLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgICAgICAgICAvLyBmb3JtIGNvbnRyb2wgc3RhdHVzIGlzIG5vdCBjaGFuZ2VkIGZyb20gcGVuZGluZy4gVGhpcyBpcyBhbiBhbmd1bGFyIGlzc3VlIHJlZmVyIGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2FuZ3VsYXIvaXNzdWVzLzEzMjAwXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoZWNrRm9yU3RhdHVzQ2hhbmdlID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMud2lkZ2V0Q29udHJvbC5zdGF0dXMgPT09ICdQRU5ESU5HJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja0ZvclN0YXR1c0NoYW5nZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaW5zdGFuY2Uub25TdGF0dXNDaGFuZ2UodGhpcy53aWRnZXRDb250cm9sLnN0YXR1cywgdGhpcy50YWJsZUZpZWxkVHlwZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgMTAwKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgY2hlY2tGb3JTdGF0dXNDaGFuZ2UoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLndpZGdldENvbnRyb2wuc2V0QXN5bmNWYWxpZGF0b3JzKFt0aGlzLl9hc3luY1ZhbGlkYXRvckZuKCldKTtcbiAgICAgICAgaWYodGhpcy53aWRnZXRDb250ZXh0Lm5nZm9ybS50b3VjaGVkKXtcbiAgICAgICAgICAgIGNvbnN0IG9wdCA9IHt9O1xuICAgICAgICAgICAgLy8gdXBkYXRpbmcgdGhlIHZhbHVlIG9ubHkgd2hlbiBwcmV2RGF0YSBpcyBub3QgZXF1YWwgdG8gY3VycmVudCB2YWx1ZS4gYW5kIGFsc28gaW5pdGlhbGx5IHdoZW4gIGluc3RhbmNlLnZhbHVlIGlzIGVtcHR5IG9yIG51bGwgZm9yIHNvbWUgd2lkZ2V0cyBsaWtlIGRhdGUsIGNoZWNrYm94c2V0XG4gICAgICAgICAgICAvLyBlbWl0RXZlbnQgZmxhZyB3aWxsIHByZXZlbnQgZnJvbSBlbWl0dGluZyB0aGUgdmFsdWVDaGFuZ2VzIHdoZW4gdmFsdWUgaXMgZXF1YWwgdG8gdGhlIHByZXZEYXRhdmFsdWUuXG4gICAgICAgICAgICBpZiAodGhpcy5mb3Jtd2lkZ2V0ICYmICh0aGlzLmluc3RhbmNlLnZhbHVlID09PSB0aGlzLmZvcm13aWRnZXQucHJldkRhdGF2YWx1ZSB8fCB0aGlzLmlzTnVsbE9yRW1wdHlPckZhbHN5KHRoaXMuaW5zdGFuY2UudmFsdWUpKSkge1xuICAgICAgICAgICAgICAgIG9wdFsnZW1pdEV2ZW50J10gPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMud2lkZ2V0Q29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KG9wdCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpc0RlZmF1bHRWYWxpZGF0b3IodHlwZSkge1xuICAgICAgICByZXR1cm4gZ2V0KFZBTElEQVRPUiwgdG9VcHBlcih0eXBlKSk7XG4gICAgfVxuXG4gICAgLy8gZGVmYXVsdCB2YWxpZGF0b3IgaXMgYm91bmQgdG8gYSBmdW5jdGlvbiB0aGVuIHdhdGNoIGZvciB2YWx1ZSBjaGFuZ2VzXG4gICAgLy8gb3RoZXJ3aXNlIHNldCB0aGUgdmFsdWUgb2YgZGVmYXVsdCB2YWxpZGF0b3IgZGlyZWN0bHlcbiAgICBzZXREZWZhdWx0VmFsaWRhdG9yKGtleSwgdmFsdWUpIHtcbiAgICAgICAgaWYgKHZhbHVlICYmIHZhbHVlIGluc3RhbmNlb2YgRnVuY3Rpb24pIHtcbiAgICAgICAgICAgIC8vIHBhc3NpbmcgZm9ybWZpZWxkIGFuZCBmb3JtIGFzIGFyZ3VtZW50cyB0byB0aGUgZGVmYXVsdCB2YWxpZGF0b3IgZnVuY3Rpb25cbiAgICAgICAgICAgIHRoaXMud2F0Y2hEZWZhdWx0VmFsaWRhdG9yRXhwcih2YWx1ZS5iaW5kKHVuZGVmaW5lZCwgdGhpcy53aWRnZXRDb250cm9sLCB0aGlzLndpZGdldENvbnRleHQpLCBrZXkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHRoaXMud2lkZ2V0dHlwZSA9PT0gJ2N1c3RvbS13aWRnZXQnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbnN0YW5jZS5mb3JtV2lkZ2V0LmJhc2VXaWRnZXRba2V5XSA9IHZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5pbnN0YW5jZS53aWRnZXRba2V5XSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5pbnN0YW5jZVtrZXldID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBzZXRzIHRoZSBkZWZhdWx0IHZhbGlkYXRpb24gb24gdGhlIGZvcm0gZmllbGRcbiAgICBzZXRWYWxpZGF0b3JzKHZhbGlkYXRvcnMpIHtcbiAgICAgICAgbGV0IF9jbG9uZVZhbGlkYXRvcnMgPSBjbG9uZURlZXAodmFsaWRhdG9ycyk7XG4gICAgICAgIHRoaXMuaGFzVmFsaWRhdG9ycyA9IHRydWU7XG4gICAgICAgIHRoaXMuX3N5bmNWYWxpZGF0b3JzID0gW107XG4gICAgICAgIGZvckVhY2goX2Nsb25lVmFsaWRhdG9ycywgKG9iaiwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIC8vIGN1c3RvbSB2YWxpZGF0aW9uIGlzIGJvdW5kIHRvIGZ1bmN0aW9uLlxuICAgICAgICAgICAgaWYgKG9iaiAmJiBvYmogaW5zdGFuY2VvZiBGdW5jdGlvbikge1xuICAgICAgICAgICAgICAgIC8vIHBhc3NpbmcgZm9ybWZpZWxkIGFuZCBmb3JtIGFzIGFyZ3VtZW50cyB0byB0aGUgb2JqIChpLmUuIHZhbGlkYXRvciBmdW5jdGlvbilcbiAgICAgICAgICAgICAgICBfY2xvbmVWYWxpZGF0b3JzW2luZGV4XSA9IG9iai5iaW5kKHVuZGVmaW5lZCwgdGhpcy53aWRnZXRDb250cm9sLCB0aGlzLndpZGdldENvbnRleHQpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3N5bmNWYWxpZGF0b3JzLnB1c2goX2Nsb25lVmFsaWRhdG9yc1tpbmRleF0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBjaGVja3MgZm9yIGRlZmF1bHQgdmFsaWRhdG9yIGxpa2UgcmVxdWlyZWQsIG1heGNoYXJzIGV0Yy5cbiAgICAgICAgICAgICAgICBjb25zdCBrZXkgPSBnZXQob2JqLCAndHlwZScpO1xuICAgICAgICAgICAgICAgIHRoaXMuZGVmYXVsdFZhbGlkYXRvck1lc3NhZ2VzW2tleV0gPSBnZXQob2JqLCAnZXJyb3JNZXNzYWdlJyk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNEZWZhdWx0VmFsaWRhdG9yKGtleSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBnZXQob2JqLCAndmFsaWRhdG9yJyk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0RGVmYXVsdFZhbGlkYXRvcihrZXksIHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgX2Nsb25lVmFsaWRhdG9yc1tpbmRleF0gPSAnJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIF9zeW5jVmFsaWRhdG9ycyBjb250YWlucyBhbGwgdGhlIGN1c3RvbSB2YWxpZGF0aW9ucyBvbiB0aGUgZm9ybSBmaWVsZC4gd2lsbCBub3QgaW5jbHVkZSBkZWZhdWx0IHZhbGlkYXRvcnMuXG4gICAgICAgIHRoaXMuX3N5bmNWYWxpZGF0b3JzID0gZmlsdGVyKF9jbG9uZVZhbGlkYXRvcnMsIHZhbCA9PiB7XG4gICAgICAgICAgICBpZiAodmFsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuYXBwbHlEZWZhdWx0VmFsaWRhdG9ycygpO1xuICAgIH1cblxuICAgIG9ic2VydmVPbihmaWVsZHMsIGNvbnRleHQpIHtcbiAgICAgICAgZm9yRWFjaChmaWVsZHMsIGZpZWxkID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGZvcm1maWVsZCA9IGZpbmQodGhpcy53aWRnZXRDb250ZXh0W2NvbnRleHRdLCB7J2tleSc6IGZpZWxkfSk7XG4gICAgICAgICAgICBpZiAoZm9ybWZpZWxkKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFmb3JtZmllbGQubm90aWZ5Rm9yRmllbGRzKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvcm1maWVsZC5ub3RpZnlGb3JGaWVsZHMgPSBbXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZm9ybWZpZWxkLm5vdGlmeUZvckZpZWxkcy5wdXNoKHRoaXMuaW5zdGFuY2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICB2YWxpZGF0ZSgpIHtcbiAgICAgICAgdGhpcy5hcHBseURlZmF1bHRWYWxpZGF0b3JzKCk7XG4gICAgICAgIGlmICh0aGlzLl9hc3luY1ZhbGlkYXRvckZuKSB7XG4gICAgICAgICAgICBjb25zdCBvcHQgPSB7fTtcbiAgICAgICAgICAgIC8vIHVwZGF0aW5nIHRoZSB2YWx1ZSBvbmx5IHdoZW4gcHJldkRhdGEgaXMgbm90IGVxdWFsIHRvIGN1cnJlbnQgdmFsdWUuIGFuZCBhbHNvIGluaXRpYWxseSB3aGVuICBpbnN0YW5jZS52YWx1ZSBpcyBlbXB0eSBvciBudWxsIGZvciBzb21lIHdpZGdldHMgbGlrZSBkYXRlLCBjaGVja2JveHNldFxuICAgICAgICAgICAgLy8gZW1pdEV2ZW50IGZsYWcgd2lsbCBwcmV2ZW50IGZyb20gZW1pdHRpbmcgdGhlIHZhbHVlQ2hhbmdlcyB3aGVuIHZhbHVlIGlzIGVxdWFsIHRvIHRoZSBwcmV2RGF0YXZhbHVlLlxuICAgICAgICAgICAgaWYgKHRoaXMuZm9ybXdpZGdldCAmJiAodGhpcy5pbnN0YW5jZS52YWx1ZSA9PT0gdGhpcy5mb3Jtd2lkZ2V0LnByZXZEYXRhdmFsdWUgfHwgdGhpcy5pc051bGxPckVtcHR5T3JGYWxzeSh0aGlzLmluc3RhbmNlLnZhbHVlKSkpIHtcbiAgICAgICAgICAgICAgICBvcHRbJ2VtaXRFdmVudCddID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLndpZGdldENvbnRyb2wuc2V0QXN5bmNWYWxpZGF0b3JzKFt0aGlzLl9hc3luY1ZhbGlkYXRvckZuKCldKTtcbiAgICAgICAgICAgIHRoaXMud2lkZ2V0Q29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KG9wdCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gc2hvdyB0aGUgdmFsaWRhdGlvbiBlcnJvcyBzaG93IHdoZW4gZm9ybSBpcyB0b3VjaGVkIGFuZCBub3Qgb24gbG9hZC4gVGhpcyBqdXN0IGhpZ2hsaWdodHMgdGhlIGZpZWxkIHRoYXQgaXMgc3Vic2NyaWJlZCBmb3IgY2hhbmdlcy5cbiAgICAgICAgaWYgKHRoaXMud2lkZ2V0Q29udGV4dC5uZ2Zvcm0udG91Y2hlZCkge1xuICAgICAgICAgICAgdGhpcy53aWRnZXRDb250cm9sLm1hcmtBc1RvdWNoZWQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIHdhdGNoZXMgZm9yIGNoYW5nZXMgaW4gdGhlIGJvdW5kIGZ1bmN0aW9uIGZvciBkZWZhdWx0IHZhbGlkYXRvcnMuXG4gICAgd2F0Y2hEZWZhdWx0VmFsaWRhdG9yRXhwcihmbiwga2V5KSB7XG4gICAgICAgIGNvbnN0IHdhdGNoTmFtZSA9IGAke3RoaXMuaW5zdGFuY2Uud2lkZ2V0SWR9X2AgKyBrZXkgKyAnX2Zvcm1GaWVsZCc7XG4gICAgICAgICR1bndhdGNoKHdhdGNoTmFtZSk7XG4gICAgICAgIC8vW1RvZG8tQ1NQXTogTmVlZCBjbGFyaXR5IGdlbmVyYXRlIHRoaXMgZXhwciBmbiBpZiBmb3JtIGlzIHByZXNlbnQgaW4gdGhlIHBhZ2VcbiAgICAgICAgdGhpcy5pbnN0YW5jZS5yZWdpc3RlckRlc3Ryb3lMaXN0ZW5lcigkd2F0Y2goJ2JvdW5kRm4oZm4pJywgZXh0ZW5kKHRoaXMuaW5zdGFuY2UsIHRoaXMuaW5zdGFuY2Uudmlld1BhcmVudCksIHtmbn0sIChudiwgb3YpID0+IHtcbiAgICAgICAgICAgIHRoaXMuaW5zdGFuY2Uud2lkZ2V0W2tleV0gPSBudjtcbiAgICAgICAgICAgIHRoaXMuYXBwbHlEZWZhdWx0VmFsaWRhdG9ycygpO1xuICAgICAgICB9LCB3YXRjaE5hbWUpKTtcbiAgICB9XG4gICAgaXNOdWxsT3JFbXB0eU9yRmFsc3kodmFsdWUpICB7XG4gICAgICAgIHJldHVybiBpc0VtcHR5KHZhbHVlKTtcbiAgICB9XG5cbiAgICAvLyBpbnZva2VzIGJvdGggY3VzdG9tIHN5bmMgdmFsaWRhdGlvbnMgYW5kIGRlZmF1bHQgdmFsaWRhdGlvbnMuXG4gICAgYXBwbHlEZWZhdWx0VmFsaWRhdG9ycygpIHtcbiAgICAgICAgY29uc3QgdmFsaWRhdG9ycyA9IHRoaXMuZ2V0RGVmYXVsdFZhbGlkYXRvcnMoKTtcbiAgICAgICAgY29uc3Qgb3B0ID0ge307XG4gICAgICAgIC8vIHVwZGF0aW5nIHRoZSB2YWx1ZSBvbmx5IHdoZW4gcHJldkRhdGEgaXMgbm90IGVxdWFsIHRvIGN1cnJlbnQgdmFsdWUuIGFuZCBhbHNvIGluaXRpYWxseSB3aGVuICBpbnN0YW5jZS52YWx1ZSBpcyBlbXB0eSBvciBudWxsIGZvciBzb21lIHdpZGdldHMgbGlrZSBkYXRlLCBjaGVja2JveHNldFxuICAgICAgICAvLyBlbWl0RXZlbnQgZmxhZyB3aWxsIHByZXZlbnQgZnJvbSBlbWl0dGluZyB0aGUgdmFsdWVDaGFuZ2VzIHdoZW4gdmFsdWUgaXMgZXF1YWwgdG8gdGhlIHByZXZEYXRhdmFsdWUuXG4gICAgICAgIGlmICh0aGlzLmZvcm13aWRnZXQgJiYgKHRoaXMuaW5zdGFuY2UudmFsdWUgPT09IHRoaXMuZm9ybXdpZGdldC5wcmV2RGF0YXZhbHVlIHx8IHRoaXMuaXNOdWxsT3JFbXB0eU9yRmFsc3kodGhpcy5pbnN0YW5jZS52YWx1ZSkpKSB7XG4gICAgICAgICAgICBvcHRbJ2VtaXRFdmVudCddID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy53aWRnZXRDb250cm9sLnNldFZhbGlkYXRvcnMoY29uY2F0KHRoaXMuX3N5bmNWYWxpZGF0b3JzIHx8IFtdLCB2YWxpZGF0b3JzKSk7XG4gICAgICAgIHRoaXMud2lkZ2V0Q29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KG9wdCk7XG4gICAgICAgIHRoaXMuc2V0Q3VzdG9tVmFsaWRhdGlvbk1lc3NhZ2UoKTtcbiAgICB9XG5cbiAgICBzZXRDdXN0b21WYWxpZGF0aW9uTWVzc2FnZSgpIHtcbiAgICAgICAgY29uc3QgZmllbGRFcnJvcnMgPSB0aGlzLndpZGdldENvbnRyb2wgJiYgdGhpcy53aWRnZXRDb250cm9sLmVycm9ycztcblxuICAgICAgICBpZiAoIWZpZWxkRXJyb3JzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZpZWxkRXJyb3JzLmhhc093blByb3BlcnR5KCdlcnJvck1lc3NhZ2UnKSkge1xuICAgICAgICAgICAgdGhpcy5pbnN0YW5jZS52YWxpZGF0aW9ubWVzc2FnZSA9IGdldChmaWVsZEVycm9ycywgJ2Vycm9yTWVzc2FnZScpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3Qga2V5cyA9IF9rZXlzKGZpZWxkRXJyb3JzKTtcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IGtleXNbMF07XG4gICAgICAgICAgICBjb25zdCB2YWxpZGF0aW9uTXNnS2V5ID0gZ2V0KERFRkFVTFRfVkFMSURBVE9SLCBrZXkpIHx8IHRoaXMuZm9ybXdpZGdldC52YWxpZGF0ZVR5cGU7XG4gICAgICAgICAgICBpZiAodmFsaWRhdGlvbk1zZ0tleSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1zZyA9IGdldCh0aGlzLmRlZmF1bHRWYWxpZGF0b3JNZXNzYWdlcywgdmFsaWRhdGlvbk1zZ0tleSkgfHwgdGhpcy5pbnN0YW5jZS52YWxpZGF0aW9ubWVzc2FnZTtcbiAgICAgICAgICAgICAgICBpZiAobXNnICYmIG1zZyBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHBhc3NpbmcgZm9ybWZpZWxkIGFuZCBmb3JtIGFzIGFyZ3VtZW50cyB0byB0aGUgZXJyb3JNZXNzYWdlIGZ1bmN0aW9uLlxuICAgICAgICAgICAgICAgICAgICB0aGlzLmluc3RhbmNlLnZhbGlkYXRpb25tZXNzYWdlID0gbXNnKHRoaXMud2lkZ2V0Q29udHJvbCwgdGhpcy53aWRnZXRDb250ZXh0KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmluc3RhbmNlLnZhbGlkYXRpb25tZXNzYWdlID0gbXNnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gZmFsbGJhY2sgd2hlbiB0aGVyZSBpcyBubyB2YWxpZGF0aW9ubWVzc2FnZSBmb3IgZmllbGRzIG90aGVyIHRoYW4gZGVmYXVsdCB2YWxpZGF0b3JzLlxuICAgICAgICAgICAgICAgIHRoaXMuaW5zdGFuY2UudmFsaWRhdGlvbm1lc3NhZ2UgPSAnJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==
|
|
275
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1maWVsZC12YWxpZGF0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvYmFzZS9zcmMvd2lkZ2V0cy9jb21tb24vYmFzZS9iYXNlLWZpZWxkLXZhbGlkYXRpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUUxQyxPQUFPLEVBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxjQUFjLEVBQUUsU0FBUyxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBQ3JFLE9BQU8sRUFDSCxTQUFTLEVBQ1QsTUFBTSxFQUNOLE1BQU0sRUFDTixNQUFNLEVBQ04sSUFBSSxFQUNKLE9BQU8sRUFDUCxHQUFHLEVBQ0gsT0FBTyxFQUNQLFVBQVUsRUFDVixJQUFJLElBQUksS0FBSyxFQUNiLE9BQU8sRUFDVixNQUFNLFdBQVcsQ0FBQztBQUVuQixNQUFNLGlCQUFpQixHQUFHO0lBQ3RCLE9BQU8sRUFBRSxRQUFRO0lBQ2pCLEdBQUcsRUFBRSxVQUFVO0lBQ2YsR0FBRyxFQUFFLFVBQVU7SUFDZixRQUFRLEVBQUUsVUFBVTtJQUNwQixTQUFTLEVBQUUsVUFBVTtJQUNyQixPQUFPLEVBQUUsU0FBUztJQUNsQixPQUFPLEVBQUUsU0FBUztJQUNsQixZQUFZLEVBQUUsY0FBYztJQUM1QixXQUFXLEVBQUUsYUFBYTtJQUMxQixhQUFhLEVBQUMsZUFBZTtDQUNoQyxDQUFDO0FBRUYsTUFBTSxPQUFPLG9CQUFvQjtJQW9CN0IsWUFBWSxRQUFRLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLGNBQWU7UUFDdkYsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7UUFDekIsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7UUFDN0IsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7UUFDN0IsSUFBSSxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUM7UUFDbkMsSUFBSSxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUM7UUFFbkMsSUFBSSxDQUFDLHdCQUF3QixHQUFHLEVBQUUsQ0FBQztRQUNuQyxJQUFJLGNBQWMsRUFBRSxDQUFDO1lBQ2pCLElBQUksQ0FBQyxjQUFjLEdBQUcsY0FBYyxDQUFDO1FBQ3pDLENBQUM7SUFDTCxDQUFDO0lBRUQscUVBQXFFO0lBQzdELG9CQUFvQjtRQUN4QixNQUFNLFVBQVUsR0FBRyxFQUFFLENBQUM7UUFDdEIsSUFBRyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSTtZQUFFLE9BQU8sVUFBVSxDQUFDO1FBQzFDLElBQUcsSUFBSSxDQUFDLFVBQVUsS0FBSSxjQUFjLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUcsY0FBYyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFHLGNBQWMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUM5SCxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ3pCLGtGQUFrRjtnQkFDbEYsSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLGNBQWMsQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyxjQUFjLENBQUMsTUFBTSxFQUFFLENBQUM7b0JBQzNGLFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxDQUFDO2dCQUM3QyxDQUFDO3FCQUFNLENBQUM7b0JBQ0osVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQ3pDLENBQUM7WUFDTCxDQUFDO1FBQ0wsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUN6QixVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBQ2xFLENBQUM7UUFDRCxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDekIsVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUM1RCxDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLGNBQWMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUN0RSxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBQzVELENBQUM7UUFDRCxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDdkIsVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUM5RCxDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsVUFBVSxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7WUFDMUQsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7UUFDcEUsQ0FBQztRQUNELElBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxLQUFJLGNBQWMsQ0FBQyxJQUFJLElBQUcsSUFBSSxDQUFDLFVBQVUsS0FBRyxjQUFjLENBQUMsSUFBSSxJQUFHLElBQUksQ0FBQyxVQUFVLEtBQUcsY0FBYyxDQUFDLFFBQVEsQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFDLENBQUM7WUFDdkosVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDekMsQ0FBQztRQUNHLE9B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QUksQ0FBQyxRQUFRLENBQUMsaUJBQWlCLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO2dCQUNsRixDQUFDO3FCQUFNLENBQUM7b0JBQ0osSUFBSSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsR0FBRyxHQUFHLENBQUM7Z0JBQzFDLENBQUM7WUFDTCxDQUFDO2lCQUFNLENBQUM7Z0JBQ0osd0ZBQXdGO2dCQUN4RixJQUFJLENBQUMsUUFBUSxDQUFDLGlCQUFpQixHQUFHLEVBQUUsQ0FBQztZQUN6QyxDQUFDO1FBQ0wsQ0FBQztJQUNMLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7VmFsaWRhdG9yc30gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5pbXBvcnQgeyR1bndhdGNoLCAkd2F0Y2gsIEZvcm1XaWRnZXRUeXBlLCBWQUxJREFUT1J9IGZyb20gJ0B3bS9jb3JlJztcbmltcG9ydCB7XG4gICAgY2xvbmVEZWVwLFxuICAgIGNvbmNhdCxcbiAgICBleHRlbmQsXG4gICAgZmlsdGVyLFxuICAgIGZpbmQsXG4gICAgZm9yRWFjaCxcbiAgICBnZXQsXG4gICAgaXNFbXB0eSxcbiAgICBpc0Z1bmN0aW9uLFxuICAgIGtleXMgYXMgX2tleXMsXG4gICAgdG9VcHBlclxufSBmcm9tIFwibG9kYXNoLWVzXCI7XG5cbmNvbnN0IERFRkFVTFRfVkFMSURBVE9SID0ge1xuICAgIHBhdHRlcm46ICdyZWdleHAnLFxuICAgIG1heDogJ21heHZhbHVlJyxcbiAgICBtaW46ICdtaW52YWx1ZScsXG4gICAgcmVxdWlyZWQ6ICdyZXF1aXJlZCcsXG4gICAgbWF4bGVuZ3RoOiAnbWF4Y2hhcnMnLFxuICAgIG1pbmRhdGU6ICdtaW5kYXRlJyxcbiAgICBtYXhkYXRlOiAnbWF4ZGF0ZScsXG4gICAgZXhjbHVkZWRhdGVzOiAnZXhjbHVkZWRhdGVzJyxcbiAgICBleGNsdWRlZGF5czogJ2V4Y2x1ZGVkYXlzJyxcbiAgICBpbnZhbGlkTnVtYmVyOidpbnZhbGlkTnVtYmVyJ1xufTtcblxuZXhwb3J0IGNsYXNzIEJhc2VGaWVsZFZhbGlkYXRpb25zIHtcbiAgICBwcml2YXRlIGhhc1ZhbGlkYXRvcnM7XG5cbiAgICAvLyBJbnN0YW5jZSBvZiB0aGUgZGlyZWN0aXZlIHRhYmxlLWNvbHVtbiwgZm9ybS1maWVsZC4uXG4gICAgcHJpdmF0ZSBpbnN0YW5jZTtcbiAgICAvLyBJbmxpbmUgZm9ybSB3aWRnZXRcbiAgICBwdWJsaWMgZm9ybXdpZGdldDtcbiAgICAvLyBXaWRnZXQgdHlwZVxuICAgIHByaXZhdGUgd2lkZ2V0dHlwZTtcbiAgICAvLyBGcm9tIGNvbnRyb2xcbiAgICBwcml2YXRlIHdpZGdldENvbnRyb2w7XG4gICAgLy8gUGFyZW50IHdpZGdldCBjb250ZXh0IFRhYmxlLCBGb3JtLi5cbiAgICBwcml2YXRlIHdpZGdldENvbnRleHQ7XG4gICAgLy8gT3B0aW9uYWwgdGFibGUgY29sdW1uIHR5cGUgcXVpY2tlZGl0IG5ld3Jvdy8gaW5saW5lIGVkaXRcbiAgICBwcml2YXRlIHRhYmxlRmllbGRUeXBlO1xuXG4gICAgcHJpdmF0ZSBkZWZhdWx0VmFsaWRhdG9yTWVzc2FnZXM6IGFueTtcbiAgICBwcml2YXRlIF9zeW5jVmFsaWRhdG9yczogYW55O1xuICAgIHByaXZhdGUgX2FzeW5jVmFsaWRhdG9yRm46IGFueTtcblxuICAgIGNvbnN0cnVjdG9yKGluc3RhbmNlLCBmb3Jtd2lkZ2V0LCB3aWRnZXR0eXBlLCB3aWRnZXRDb250cm9sLCB3aWRnZXRDb250ZXh0LCB0YWJsZUZpZWxkVHlwZT8pe1xuICAgICAgICB0aGlzLmluc3RhbmNlID0gaW5zdGFuY2U7XG4gICAgICAgIHRoaXMuZm9ybXdpZGdldCA9IGZvcm13aWRnZXQ7XG4gICAgICAgIHRoaXMud2lkZ2V0dHlwZSA9IHdpZGdldHR5cGU7XG4gICAgICAgIHRoaXMud2lkZ2V0Q29udHJvbCA9IHdpZGdldENvbnRyb2w7XG4gICAgICAgIHRoaXMud2lkZ2V0Q29udGV4dCA9IHdpZGdldENvbnRleHQ7XG5cbiAgICAgICAgdGhpcy5kZWZhdWx0VmFsaWRhdG9yTWVzc2FnZXMgPSBbXTtcbiAgICAgICAgaWYgKHRhYmxlRmllbGRUeXBlKSB7XG4gICAgICAgICAgICB0aGlzLnRhYmxlRmllbGRUeXBlID0gdGFibGVGaWVsZFR5cGU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyB0aGlzIG1ldGhvZCByZXR1cm5zIHRoZSBjb2xsZWN0aW9uIG9mIHN1cHBvcnRlZCBkZWZhdWx0IHZhbGlkYXRvcnNcbiAgICBwcml2YXRlIGdldERlZmF1bHRWYWxpZGF0b3JzKCkge1xuICAgICAgICBjb25zdCBfdmFsaWRhdG9yID0gW107XG4gICAgICAgIGlmKCF0aGlzLmluc3RhbmNlLnNob3cpIHJldHVybiBfdmFsaWRhdG9yO1xuICAgICAgICBpZih0aGlzLndpZGdldHR5cGUhPT0gRm9ybVdpZGdldFR5cGUuREFURSAmJiB0aGlzLndpZGdldHR5cGUhPT1Gb3JtV2lkZ2V0VHlwZS5USU1FICYmIHRoaXMud2lkZ2V0dHlwZSE9PUZvcm1XaWRnZXRUeXBlLkRBVEVUSU1FKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5pbnN0YW5jZS5yZXF1aXJlZCkge1xuICAgICAgICAgICAgICAgIC8vIEZvciBjaGVja2JveC90b2dnbGUgd2lkZ2V0LCByZXF1aXJlZCB2YWxpZGF0aW9uIHNob3VsZCBjb25zaWRlciB0cnVlIHZhbHVlIG9ubHlcbiAgICAgICAgICAgICAgICBpZiAodGhpcy53aWRnZXR0eXBlID09PSBGb3JtV2lkZ2V0VHlwZS5DSEVDS0JPWCB8fCB0aGlzLndpZGdldHR5cGUgPT09IEZvcm1XaWRnZXRUeXBlLlRPR0dMRSkge1xuICAgICAgICAgICAgICAgICAgICBfdmFsaWRhdG9yLnB1c2goVmFsaWRhdG9ycy5yZXF1aXJlZFRydWUpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIF92YWxpZGF0b3IucHVzaChWYWxpZGF0b3JzLnJlcXVpcmVkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaW5zdGFuY2UubWF4Y2hhcnMpIHtcbiAgICAgICAgICAgIF92YWxpZGF0b3IucHVzaChWYWxpZGF0b3JzLm1heExlbmd0aCh0aGlzLmluc3RhbmNlLm1heGNoYXJzKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaW5zdGFuY2UubWludmFsdWUpIHtcbiAgICAgICAgICAgIF92YWxpZGF0b3IucHVzaChWYWxpZGF0b3JzLm1pbih0aGlzLmluc3RhbmNlLm1pbnZhbHVlKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaW5zdGFuY2UubWF4dmFsdWUgJiYgdGhpcy53aWRnZXR0eXBlICE9PSBGb3JtV2lkZ2V0VHlwZS5SQVRJTkcpIHtcbiAgICAgICAgICAgIF92YWxpZGF0b3IucHVzaChWYWxpZGF0b3JzLm1heCh0aGlzLmluc3RhbmNlLm1heHZhbHVlKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaW5zdGFuY2UucmVnZXhwKSB7XG4gICAgICAgICAgICBfdmFsaWRhdG9yLnB1c2goVmFsaWRhdG9ycy5wYXR0ZXJuKHRoaXMuaW5zdGFuY2UucmVnZXhwKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZm9ybXdpZGdldCAmJiBpc0Z1bmN0aW9uKHRoaXMuZm9ybXdpZGdldC52YWxpZGF0ZSkpIHtcbiAgICAgICAgICAgIF92YWxpZGF0b3IucHVzaCh0aGlzLmZvcm13aWRnZXQudmFsaWRhdGUuYmluZCh0aGlzLmZvcm13aWRnZXQpKTtcbiAgICAgICAgfVxuICAgICAgICBpZigodGhpcy53aWRnZXR0eXBlPT09IEZvcm1XaWRnZXRUeXBlLkRBVEV8fCB0aGlzLndpZGdldHR5cGU9PT1Gb3JtV2lkZ2V0VHlwZS5USU1FIHx8dGhpcy53aWRnZXR0eXBlPT09Rm9ybVdpZGdldFR5cGUuREFURVRJTUUpICYmIHRoaXMuaW5zdGFuY2UucmVxdWlyZWQpe1xuICAgICAgICAgICAgX3ZhbGlkYXRvci5wdXNoKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xuICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gX3ZhbGlkYXRvcjtcbiAgICB9XG5cbiAgICAvLyBPbiBjaGFuZ2Ugb2YgYW55IHZhbGlkYXRpb24gcHJvcGVydHksIHNldCB0aGUgYW5ndWxhciBmb3JtIHZhbGlkYXRvcnNcbiAgICBzZXRVcFZhbGlkYXRvcnMoY3VzdG9tVmFsaWRhdG9yPykge1xuICAgICAgICBpZiAodGhpcy5oYXNWYWxpZGF0b3JzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pbnN0YW5jZS5fdmFsaWRhdG9ycyA9IHRoaXMuZ2V0RGVmYXVsdFZhbGlkYXRvcnMoKTtcblxuICAgICAgICBpZiAoY3VzdG9tVmFsaWRhdG9yKSB7XG4gICAgICAgICAgICB0aGlzLmluc3RhbmNlLl92YWxpZGF0b3JzLnB1c2goY3VzdG9tVmFsaWRhdG9yKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLndpZGdldENvbnRleHQubmdmb3JtKSB7XG4gICAgICAgICAgICB0aGlzLndpZGdldENvbnRyb2wuc2V0VmFsaWRhdG9ycyh0aGlzLmluc3RhbmNlLl92YWxpZGF0b3JzKTtcbiAgICAgICAgICAgIGNvbnN0IG9wdCA9IHt9O1xuICAgICAgICAgICAgLy8gdXBkYXRpbmcgdGhlIHZhbHVlIG9ubHkgd2hlbiBwcmV2RGF0YSBpcyBub3QgZXF1YWwgdG8gY3VycmVudCB2YWx1ZS4gYW5kIGFsc28gaW5pdGlhbGx5IHdoZW4gIGluc3RhbmNlLnZhbHVlIGlzIGVtcHR5IG9yIG51bGwgZm9yIHNvbWUgd2lkZ2V0cyBsaWtlIGRhdGUsIGNoZWNrYm94c2V0XG4gICAgICAgICAgICAvLyBlbWl0RXZlbnQgZmxhZyB3aWxsIHByZXZlbnQgZnJvbSBlbWl0dGluZyB0aGUgdmFsdWVDaGFuZ2VzIHdoZW4gdmFsdWUgaXMgZXF1YWwgdG8gdGhlIHByZXZEYXRhdmFsdWUuXG4gICAgICAgICAgICBpZiAodGhpcy5mb3Jtd2lkZ2V0ICYmICh0aGlzLmluc3RhbmNlLnZhbHVlID09PSB0aGlzLmZvcm13aWRnZXQucHJldkRhdGF2YWx1ZSB8fCB0aGlzLmlzTnVsbE9yRW1wdHlPckZhbHN5KHRoaXMuaW5zdGFuY2UudmFsdWUpKSkge1xuICAgICAgICAgICAgICAgIG9wdFsnZW1pdEV2ZW50J10gPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMud2lkZ2V0Q29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KG9wdCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRQcm9taXNlTGlzdCh2YWxpZGF0b3JzKSB7XG4gICAgICAgIGNvbnN0IGFyciA9IFtdO1xuICAgICAgICBmb3JFYWNoKHZhbGlkYXRvcnMsIChmbiwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGxldCBwcm9taXNlID0gZm47XG4gICAgICAgICAgICBpZiAoZm4gaW5zdGFuY2VvZiBGdW5jdGlvbiAmJiBmbi5iaW5kKSB7XG4gICAgICAgICAgICAgICAgcHJvbWlzZSA9IGZuKHRoaXMud2lkZ2V0Q29udHJvbCwgdGhpcy53aWRnZXRDb250ZXh0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChwcm9taXNlIGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICAgICAgICAgIGFyci5wdXNoKHByb21pc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGFycjtcbiAgICB9XG5cbiAgICAvLyB0aGlzIG1ldGhvZCBzZXRzIHRoZSBhc3luY1ZhbGlkYXRpb24gb24gdGhlIGZvcm0gZmllbGQuIEFzc2lnbnMgdmFsaWRhdGlvbm1lc3NhZ2VzIGZyb20gdGhlIHJldHVybmVkIHJlc3BvbnNlXG4gICAgc2V0QXN5bmNWYWxpZGF0b3JzKHZhbGlkYXRvcnMpIHtcbiAgICAgICAgdGhpcy5fYXN5bmNWYWxpZGF0b3JGbiA9ICgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKHRoaXMuZ2V0UHJvbWlzZUxpc3QodmFsaWRhdG9ycykpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmluc3RhbmNlLnZhbGlkYXRpb25tZXNzYWdlID0gJyc7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgIH0sIGVyciA9PiB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGlmIGVyciBvYmogaGFzIHZhbGlkYXRpb25NZXNzYWdlIGtleSwgdGhlbiBzZXQgdmFsaWRhdGlvbk1lc3NhZ2UgdXNpbmcgdGhpcyB2YWx1ZVxuICAgICAgICAgICAgICAgICAgICAvLyBlbHNlIHJldHVybiB0aGUgdmFsdWUgb2YgdGhlIGZpcnN0IGtleSBpbiB0aGUgZXJyIG9iamVjdCBhcyB2YWxpZGF0aW9uIG1lc3NhZ2UuXG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnIuaGFzT3duUHJvcGVydHkoJ2Vycm9yTWVzc2FnZScpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmluc3RhbmNlLnZhbGlkYXRpb25tZXNzYWdlID0gZ2V0KGVyciwgJ2Vycm9yTWVzc2FnZScpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qga2V5cyA9IF9rZXlzKGVycik7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmluc3RhbmNlLnZhbGlkYXRpb25tZXNzYWdlID0gKGVycltrZXlzWzBdXSkudG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyO1xuICAgICAgICAgICAgICAgIH0pLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgICAgICAgICAvLyBmb3JtIGNvbnRyb2wgc3RhdHVzIGlzIG5vdCBjaGFuZ2VkIGZyb20gcGVuZGluZy4gVGhpcyBpcyBhbiBhbmd1bGFyIGlzc3VlIHJlZmVyIGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2FuZ3VsYXIvaXNzdWVzLzEzMjAwXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoZWNrRm9yU3RhdHVzQ2hhbmdlID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMud2lkZ2V0Q29udHJvbC5zdGF0dXMgPT09ICdQRU5ESU5HJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja0ZvclN0YXR1c0NoYW5nZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaW5zdGFuY2Uub25TdGF0dXNDaGFuZ2UodGhpcy53aWRnZXRDb250cm9sLnN0YXR1cywgdGhpcy50YWJsZUZpZWxkVHlwZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgMTAwKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgY2hlY2tGb3JTdGF0dXNDaGFuZ2UoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLndpZGdldENvbnRyb2wuc2V0QXN5bmNWYWxpZGF0b3JzKFt0aGlzLl9hc3luY1ZhbGlkYXRvckZuKCldKTtcbiAgICAgICAgaWYodGhpcy53aWRnZXRDb250ZXh0Lm5nZm9ybS50b3VjaGVkKXtcbiAgICAgICAgICAgIGNvbnN0IG9wdCA9IHt9O1xuICAgICAgICAgICAgLy8gdXBkYXRpbmcgdGhlIHZhbHVlIG9ubHkgd2hlbiBwcmV2RGF0YSBpcyBub3QgZXF1YWwgdG8gY3VycmVudCB2YWx1ZS4gYW5kIGFsc28gaW5pdGlhbGx5IHdoZW4gIGluc3RhbmNlLnZhbHVlIGlzIGVtcHR5IG9yIG51bGwgZm9yIHNvbWUgd2lkZ2V0cyBsaWtlIGRhdGUsIGNoZWNrYm94c2V0XG4gICAgICAgICAgICAvLyBlbWl0RXZlbnQgZmxhZyB3aWxsIHByZXZlbnQgZnJvbSBlbWl0dGluZyB0aGUgdmFsdWVDaGFuZ2VzIHdoZW4gdmFsdWUgaXMgZXF1YWwgdG8gdGhlIHByZXZEYXRhdmFsdWUuXG4gICAgICAgICAgICBpZiAodGhpcy5mb3Jtd2lkZ2V0ICYmICh0aGlzLmluc3RhbmNlLnZhbHVlID09PSB0aGlzLmZvcm13aWRnZXQucHJldkRhdGF2YWx1ZSB8fCB0aGlzLmlzTnVsbE9yRW1wdHlPckZhbHN5KHRoaXMuaW5zdGFuY2UudmFsdWUpKSkge1xuICAgICAgICAgICAgICAgIG9wdFsnZW1pdEV2ZW50J10gPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMud2lkZ2V0Q29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KG9wdCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpc0RlZmF1bHRWYWxpZGF0b3IodHlwZSkge1xuICAgICAgICByZXR1cm4gZ2V0KFZBTElEQVRPUiwgdG9VcHBlcih0eXBlKSk7XG4gICAgfVxuXG4gICAgLy8gZGVmYXVsdCB2YWxpZGF0b3IgaXMgYm91bmQgdG8gYSBmdW5jdGlvbiB0aGVuIHdhdGNoIGZvciB2YWx1ZSBjaGFuZ2VzXG4gICAgLy8gb3RoZXJ3aXNlIHNldCB0aGUgdmFsdWUgb2YgZGVmYXVsdCB2YWxpZGF0b3IgZGlyZWN0bHlcbiAgICBzZXREZWZhdWx0VmFsaWRhdG9yKGtleSwgdmFsdWUpIHtcbiAgICAgICAgaWYgKHZhbHVlICYmIHZhbHVlIGluc3RhbmNlb2YgRnVuY3Rpb24pIHtcbiAgICAgICAgICAgIC8vIHBhc3NpbmcgZm9ybWZpZWxkIGFuZCBmb3JtIGFzIGFyZ3VtZW50cyB0byB0aGUgZGVmYXVsdCB2YWxpZGF0b3IgZnVuY3Rpb25cbiAgICAgICAgICAgIHRoaXMud2F0Y2hEZWZhdWx0VmFsaWRhdG9yRXhwcih2YWx1ZS5iaW5kKHVuZGVmaW5lZCwgdGhpcy53aWRnZXRDb250cm9sLCB0aGlzLndpZGdldENvbnRleHQpLCBrZXkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHRoaXMud2lkZ2V0dHlwZSA9PT0gJ2N1c3RvbS13aWRnZXQnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbnN0YW5jZS5mb3JtV2lkZ2V0LmJhc2VXaWRnZXRba2V5XSA9IHZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5pbnN0YW5jZS53aWRnZXRba2V5XSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5pbnN0YW5jZVtrZXldID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBzZXRzIHRoZSBkZWZhdWx0IHZhbGlkYXRpb24gb24gdGhlIGZvcm0gZmllbGRcbiAgICBzZXRWYWxpZGF0b3JzKHZhbGlkYXRvcnMpIHtcbiAgICAgICAgbGV0IF9jbG9uZVZhbGlkYXRvcnMgPSBjbG9uZURlZXAodmFsaWRhdG9ycyk7XG4gICAgICAgIHRoaXMuaGFzVmFsaWRhdG9ycyA9IHRydWU7XG4gICAgICAgIHRoaXMuX3N5bmNWYWxpZGF0b3JzID0gW107XG4gICAgICAgIGZvckVhY2goX2Nsb25lVmFsaWRhdG9ycywgKG9iaiwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIC8vIGN1c3RvbSB2YWxpZGF0aW9uIGlzIGJvdW5kIHRvIGZ1bmN0aW9uLlxuICAgICAgICAgICAgaWYgKG9iaiAmJiBvYmogaW5zdGFuY2VvZiBGdW5jdGlvbikge1xuICAgICAgICAgICAgICAgIC8vIHBhc3NpbmcgZm9ybWZpZWxkIGFuZCBmb3JtIGFzIGFyZ3VtZW50cyB0byB0aGUgb2JqIChpLmUuIHZhbGlkYXRvciBmdW5jdGlvbilcbiAgICAgICAgICAgICAgICBfY2xvbmVWYWxpZGF0b3JzW2luZGV4XSA9IG9iai5iaW5kKHVuZGVmaW5lZCwgdGhpcy53aWRnZXRDb250cm9sLCB0aGlzLndpZGdldENvbnRleHQpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3N5bmNWYWxpZGF0b3JzLnB1c2goX2Nsb25lVmFsaWRhdG9yc1tpbmRleF0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBjaGVja3MgZm9yIGRlZmF1bHQgdmFsaWRhdG9yIGxpa2UgcmVxdWlyZWQsIG1heGNoYXJzIGV0Yy5cbiAgICAgICAgICAgICAgICBjb25zdCBrZXkgPSBnZXQob2JqLCAndHlwZScpO1xuICAgICAgICAgICAgICAgIHRoaXMuZGVmYXVsdFZhbGlkYXRvck1lc3NhZ2VzW2tleV0gPSBnZXQob2JqLCAnZXJyb3JNZXNzYWdlJyk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNEZWZhdWx0VmFsaWRhdG9yKGtleSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBnZXQob2JqLCAndmFsaWRhdG9yJyk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0RGVmYXVsdFZhbGlkYXRvcihrZXksIHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgX2Nsb25lVmFsaWRhdG9yc1tpbmRleF0gPSAnJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIF9zeW5jVmFsaWRhdG9ycyBjb250YWlucyBhbGwgdGhlIGN1c3RvbSB2YWxpZGF0aW9ucyBvbiB0aGUgZm9ybSBmaWVsZC4gd2lsbCBub3QgaW5jbHVkZSBkZWZhdWx0IHZhbGlkYXRvcnMuXG4gICAgICAgIHRoaXMuX3N5bmNWYWxpZGF0b3JzID0gZmlsdGVyKF9jbG9uZVZhbGlkYXRvcnMsIHZhbCA9PiB7XG4gICAgICAgICAgICBpZiAodmFsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuYXBwbHlEZWZhdWx0VmFsaWRhdG9ycygpO1xuICAgIH1cblxuICAgIG9ic2VydmVPbihmaWVsZHMsIGNvbnRleHQpIHtcbiAgICAgICAgZm9yRWFjaChmaWVsZHMsIGZpZWxkID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGZvcm1maWVsZCA9IGZpbmQodGhpcy53aWRnZXRDb250ZXh0W2NvbnRleHRdLCB7J2tleSc6IGZpZWxkfSk7XG4gICAgICAgICAgICBpZiAoZm9ybWZpZWxkKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFmb3JtZmllbGQubm90aWZ5Rm9yRmllbGRzKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvcm1maWVsZC5ub3RpZnlGb3JGaWVsZHMgPSBbXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZm9ybWZpZWxkLm5vdGlmeUZvckZpZWxkcy5wdXNoKHRoaXMuaW5zdGFuY2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICB2YWxpZGF0ZSgpIHtcbiAgICAgICAgdGhpcy5hcHBseURlZmF1bHRWYWxpZGF0b3JzKCk7XG4gICAgICAgIGlmICh0aGlzLl9hc3luY1ZhbGlkYXRvckZuKSB7XG4gICAgICAgICAgICBjb25zdCBvcHQgPSB7fTtcbiAgICAgICAgICAgIC8vIHVwZGF0aW5nIHRoZSB2YWx1ZSBvbmx5IHdoZW4gcHJldkRhdGEgaXMgbm90IGVxdWFsIHRvIGN1cnJlbnQgdmFsdWUuIGFuZCBhbHNvIGluaXRpYWxseSB3aGVuICBpbnN0YW5jZS52YWx1ZSBpcyBlbXB0eSBvciBudWxsIGZvciBzb21lIHdpZGdldHMgbGlrZSBkYXRlLCBjaGVja2JveHNldFxuICAgICAgICAgICAgLy8gZW1pdEV2ZW50IGZsYWcgd2lsbCBwcmV2ZW50IGZyb20gZW1pdHRpbmcgdGhlIHZhbHVlQ2hhbmdlcyB3aGVuIHZhbHVlIGlzIGVxdWFsIHRvIHRoZSBwcmV2RGF0YXZhbHVlLlxuICAgICAgICAgICAgaWYgKHRoaXMuZm9ybXdpZGdldCAmJiAodGhpcy5pbnN0YW5jZS52YWx1ZSA9PT0gdGhpcy5mb3Jtd2lkZ2V0LnByZXZEYXRhdmFsdWUgfHwgdGhpcy5pc051bGxPckVtcHR5T3JGYWxzeSh0aGlzLmluc3RhbmNlLnZhbHVlKSkpIHtcbiAgICAgICAgICAgICAgICBvcHRbJ2VtaXRFdmVudCddID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLndpZGdldENvbnRyb2wuc2V0QXN5bmNWYWxpZGF0b3JzKFt0aGlzLl9hc3luY1ZhbGlkYXRvckZuKCldKTtcbiAgICAgICAgICAgIHRoaXMud2lkZ2V0Q29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KG9wdCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gc2hvdyB0aGUgdmFsaWRhdGlvbiBlcnJvcyBzaG93IHdoZW4gZm9ybSBpcyB0b3VjaGVkIGFuZCBub3Qgb24gbG9hZC4gVGhpcyBqdXN0IGhpZ2hsaWdodHMgdGhlIGZpZWxkIHRoYXQgaXMgc3Vic2NyaWJlZCBmb3IgY2hhbmdlcy5cbiAgICAgICAgaWYgKHRoaXMud2lkZ2V0Q29udGV4dC5uZ2Zvcm0udG91Y2hlZCkge1xuICAgICAgICAgICAgdGhpcy53aWRnZXRDb250cm9sLm1hcmtBc1RvdWNoZWQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIHdhdGNoZXMgZm9yIGNoYW5nZXMgaW4gdGhlIGJvdW5kIGZ1bmN0aW9uIGZvciBkZWZhdWx0IHZhbGlkYXRvcnMuXG4gICAgd2F0Y2hEZWZhdWx0VmFsaWRhdG9yRXhwcihmbiwga2V5KSB7XG4gICAgICAgIGNvbnN0IHdhdGNoTmFtZSA9IGAke3RoaXMuaW5zdGFuY2Uud2lkZ2V0SWR9X2AgKyBrZXkgKyAnX2Zvcm1GaWVsZCc7XG4gICAgICAgICR1bndhdGNoKHdhdGNoTmFtZSk7XG4gICAgICAgIC8vW1RvZG8tQ1NQXTogTmVlZCBjbGFyaXR5IGdlbmVyYXRlIHRoaXMgZXhwciBmbiBpZiBmb3JtIGlzIHByZXNlbnQgaW4gdGhlIHBhZ2VcbiAgICAgICAgdGhpcy5pbnN0YW5jZS5yZWdpc3RlckRlc3Ryb3lMaXN0ZW5lcigkd2F0Y2goJ2JvdW5kRm4oZm4pJywgZXh0ZW5kKHRoaXMuaW5zdGFuY2UsIHRoaXMuaW5zdGFuY2Uudmlld1BhcmVudCksIHtmbn0sIChudiwgb3YpID0+IHtcbiAgICAgICAgICAgIHRoaXMuaW5zdGFuY2Uud2lkZ2V0W2tleV0gPSBudjtcbiAgICAgICAgICAgIHRoaXMuYXBwbHlEZWZhdWx0VmFsaWRhdG9ycygpO1xuICAgICAgICB9LCB3YXRjaE5hbWUpKTtcbiAgICB9XG4gICAgaXNOdWxsT3JFbXB0eU9yRmFsc3kodmFsdWUpICB7XG4gICAgICAgIHJldHVybiBpc0VtcHR5KHZhbHVlKTtcbiAgICB9XG5cbiAgICAvLyBpbnZva2VzIGJvdGggY3VzdG9tIHN5bmMgdmFsaWRhdGlvbnMgYW5kIGRlZmF1bHQgdmFsaWRhdGlvbnMuXG4gICAgYXBwbHlEZWZhdWx0VmFsaWRhdG9ycygpIHtcbiAgICAgICAgY29uc3QgdmFsaWRhdG9ycyA9IHRoaXMuZ2V0RGVmYXVsdFZhbGlkYXRvcnMoKTtcbiAgICAgICAgY29uc3Qgb3B0ID0ge307XG4gICAgICAgIC8vIHVwZGF0aW5nIHRoZSB2YWx1ZSBvbmx5IHdoZW4gcHJldkRhdGEgaXMgbm90IGVxdWFsIHRvIGN1cnJlbnQgdmFsdWUuIGFuZCBhbHNvIGluaXRpYWxseSB3aGVuICBpbnN0YW5jZS52YWx1ZSBpcyBlbXB0eSBvciBudWxsIGZvciBzb21lIHdpZGdldHMgbGlrZSBkYXRlLCBjaGVja2JveHNldFxuICAgICAgICAvLyBlbWl0RXZlbnQgZmxhZyB3aWxsIHByZXZlbnQgZnJvbSBlbWl0dGluZyB0aGUgdmFsdWVDaGFuZ2VzIHdoZW4gdmFsdWUgaXMgZXF1YWwgdG8gdGhlIHByZXZEYXRhdmFsdWUuXG4gICAgICAgIGlmICh0aGlzLmZvcm13aWRnZXQgJiYgKHRoaXMuaW5zdGFuY2UudmFsdWUgPT09IHRoaXMuZm9ybXdpZGdldC5wcmV2RGF0YXZhbHVlIHx8IHRoaXMuaXNOdWxsT3JFbXB0eU9yRmFsc3kodGhpcy5pbnN0YW5jZS52YWx1ZSkpKSB7XG4gICAgICAgICAgICBvcHRbJ2VtaXRFdmVudCddID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy53aWRnZXRDb250cm9sLnNldFZhbGlkYXRvcnMoY29uY2F0KHRoaXMuX3N5bmNWYWxpZGF0b3JzIHx8IFtdLCB2YWxpZGF0b3JzKSk7XG4gICAgICAgIHRoaXMud2lkZ2V0Q29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KG9wdCk7XG4gICAgICAgIHRoaXMuc2V0Q3VzdG9tVmFsaWRhdGlvbk1lc3NhZ2UoKTtcbiAgICB9XG5cbiAgICBzZXRDdXN0b21WYWxpZGF0aW9uTWVzc2FnZSgpIHtcbiAgICAgICAgY29uc3QgZmllbGRFcnJvcnMgPSB0aGlzLndpZGdldENvbnRyb2wgJiYgdGhpcy53aWRnZXRDb250cm9sLmVycm9ycztcblxuICAgICAgICBpZiAoIWZpZWxkRXJyb3JzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZpZWxkRXJyb3JzLmhhc093blByb3BlcnR5KCdlcnJvck1lc3NhZ2UnKSkge1xuICAgICAgICAgICAgdGhpcy5pbnN0YW5jZS52YWxpZGF0aW9ubWVzc2FnZSA9IGdldChmaWVsZEVycm9ycywgJ2Vycm9yTWVzc2FnZScpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3Qga2V5cyA9IF9rZXlzKGZpZWxkRXJyb3JzKTtcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IGtleXNbMF07XG4gICAgICAgICAgICBjb25zdCB2YWxpZGF0aW9uTXNnS2V5ID0gZ2V0KERFRkFVTFRfVkFMSURBVE9SLCBrZXkpIHx8IHRoaXMuZm9ybXdpZGdldC52YWxpZGF0ZVR5cGU7XG4gICAgICAgICAgICBpZiAodmFsaWRhdGlvbk1zZ0tleSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1zZyA9IGdldCh0aGlzLmRlZmF1bHRWYWxpZGF0b3JNZXNzYWdlcywgdmFsaWRhdGlvbk1zZ0tleSkgfHwgdGhpcy5pbnN0YW5jZS52YWxpZGF0aW9ubWVzc2FnZTtcbiAgICAgICAgICAgICAgICBpZiAobXNnICYmIG1zZyBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHBhc3NpbmcgZm9ybWZpZWxkIGFuZCBmb3JtIGFzIGFyZ3VtZW50cyB0byB0aGUgZXJyb3JNZXNzYWdlIGZ1bmN0aW9uLlxuICAgICAgICAgICAgICAgICAgICB0aGlzLmluc3RhbmNlLnZhbGlkYXRpb25tZXNzYWdlID0gbXNnKHRoaXMud2lkZ2V0Q29udHJvbCwgdGhpcy53aWRnZXRDb250ZXh0KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmluc3RhbmNlLnZhbGlkYXRpb25tZXNzYWdlID0gbXNnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gZmFsbGJhY2sgd2hlbiB0aGVyZSBpcyBubyB2YWxpZGF0aW9ubWVzc2FnZSBmb3IgZmllbGRzIG90aGVyIHRoYW4gZGVmYXVsdCB2YWxpZGF0b3JzLlxuICAgICAgICAgICAgICAgIHRoaXMuaW5zdGFuY2UudmFsaWRhdGlvbm1lc3NhZ2UgPSAnJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==
|
|
@@ -4539,13 +4539,15 @@ class BaseFieldValidations {
|
|
|
4539
4539
|
const _validator = [];
|
|
4540
4540
|
if (!this.instance.show)
|
|
4541
4541
|
return _validator;
|
|
4542
|
-
if (this.
|
|
4543
|
-
|
|
4544
|
-
|
|
4545
|
-
|
|
4546
|
-
|
|
4547
|
-
|
|
4548
|
-
|
|
4542
|
+
if (this.widgettype !== FormWidgetType.DATE && this.widgettype !== FormWidgetType.TIME && this.widgettype !== FormWidgetType.DATETIME) {
|
|
4543
|
+
if (this.instance.required) {
|
|
4544
|
+
// For checkbox/toggle widget, required validation should consider true value only
|
|
4545
|
+
if (this.widgettype === FormWidgetType.CHECKBOX || this.widgettype === FormWidgetType.TOGGLE) {
|
|
4546
|
+
_validator.push(Validators.requiredTrue);
|
|
4547
|
+
}
|
|
4548
|
+
else {
|
|
4549
|
+
_validator.push(Validators.required);
|
|
4550
|
+
}
|
|
4549
4551
|
}
|
|
4550
4552
|
}
|
|
4551
4553
|
if (this.instance.maxchars) {
|
|
@@ -4563,6 +4565,9 @@ class BaseFieldValidations {
|
|
|
4563
4565
|
if (this.formwidget && isFunction(this.formwidget.validate)) {
|
|
4564
4566
|
_validator.push(this.formwidget.validate.bind(this.formwidget));
|
|
4565
4567
|
}
|
|
4568
|
+
if ((this.widgettype === FormWidgetType.DATE || this.widgettype === FormWidgetType.TIME || this.widgettype === FormWidgetType.DATETIME) && this.instance.required) {
|
|
4569
|
+
_validator.push(Validators.required);
|
|
4570
|
+
}
|
|
4566
4571
|
return _validator;
|
|
4567
4572
|
}
|
|
4568
4573
|
// On change of any validation property, set the angular form validators
|