tnx-shared 5.3.323 → 5.3.325
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/bundles/tnx-shared.umd.js +18 -4
- package/bundles/tnx-shared.umd.js.map +1 -1
- package/bundles/tnx-shared.umd.min.js +1 -1
- package/bundles/tnx-shared.umd.min.js.map +1 -1
- package/classes/base/list-base.d.ts.map +1 -1
- package/classes/form-schema.d.ts +1 -0
- package/classes/form-schema.d.ts.map +1 -1
- package/components/dropdown/dropdown.component.d.ts.map +1 -1
- package/esm2015/classes/base/list-base.js +3 -2
- package/esm2015/classes/form-schema.js +2 -1
- package/esm2015/components/dropdown/dropdown.component.js +10 -2
- package/esm2015/services/export.service.js +6 -2
- package/fesm2015/tnx-shared.js +17 -3
- package/fesm2015/tnx-shared.js.map +1 -1
- package/package.json +2 -2
- package/services/export.service.d.ts.map +1 -1
- package/tnx-shared.metadata.json +1 -1
|
@@ -153,6 +153,9 @@ export class DropdownComponent extends ComponentBase {
|
|
|
153
153
|
if (this.control.placeholder == null && this.control.multiple) {
|
|
154
154
|
this.control.placeholder = 'Chưa chọn bản ghi';
|
|
155
155
|
}
|
|
156
|
+
if (this.control.tooltip && this.control.showTooltip) {
|
|
157
|
+
this.tooltip = this.control.tooltip;
|
|
158
|
+
}
|
|
156
159
|
this.setDefaultSetting();
|
|
157
160
|
if (this.control.baseService) {
|
|
158
161
|
if (this.control.isServerLoad) {
|
|
@@ -664,7 +667,12 @@ export class DropdownComponent extends ComponentBase {
|
|
|
664
667
|
}
|
|
665
668
|
getValueReturn() {
|
|
666
669
|
this._returnValue = this.funcReturnValue(this._value);
|
|
667
|
-
if (
|
|
670
|
+
if (this.control.showTooltipOnly) {
|
|
671
|
+
if (this.control.generateTooltip) {
|
|
672
|
+
this.tooltip = this.control.generateTooltip(this._value);
|
|
673
|
+
}
|
|
674
|
+
}
|
|
675
|
+
else if (!this.control.multiple) {
|
|
668
676
|
if (this.control.generateTooltip) {
|
|
669
677
|
if (this._value) {
|
|
670
678
|
this.tooltip = this.control.generateTooltip(this._value);
|
|
@@ -978,4 +986,4 @@ DropdownComponent.propDecorators = {
|
|
|
978
986
|
valueChange: [{ type: Output }],
|
|
979
987
|
adjustValue: [{ type: Output }]
|
|
980
988
|
};
|
|
981
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdG54LXNoYXJlZC9zcmMvbGliL2NvbXBvbmVudHMvZHJvcGRvd24vZHJvcGRvd24uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQ0gsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osUUFBUSxFQUNSLEtBQUssRUFHTCxNQUFNLEVBQ04sU0FBUyxFQUNaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzVELE9BQU8sRUFBRSxPQUFPLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxZQUFZLEVBQUUsb0JBQW9CLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXBGLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFFNUQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDdEYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxxQkFBcUIsRUFBbUIsUUFBUSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDeEgsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2hELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUN2RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFB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QUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUU7WUFDM0IsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUMxQztRQUNELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzVELENBQUM7OztZQTNnQ0osU0FBUyxTQUFDO2dCQUNQLFFBQVEsRUFBRSxVQUFVO2dCQUNwQixvcUxBQXdDO2dCQUV4QyxTQUFTLEVBQUUsQ0FBQyx1QkFBdUIsQ0FBQzs7YUFDdkM7OztZQXZCUSxxQkFBcUI7WUFQMUIsUUFBUTtZQW1CSCxXQUFXOzs7aUJBYWYsU0FBUyxTQUFDLElBQUk7b0JBQ2QsU0FBUyxTQUFDLFdBQVc7NEJBQ3JCLFNBQVMsU0FBQyxlQUFlO3VCQUN6QixTQUFTLFNBQUMsUUFBUTswQkFDbEIsU0FBUyxTQUFDLFdBQVc7d0JBRXJCLEtBQUs7OENBTUwsS0FBSztxQkFFTCxLQUFLO3NCQU1MLEtBQUs7MkJBQ0wsS0FBSzt1QkFDTCxLQUFLO3lCQUVMLEtBQUs7b0JBV0wsS0FBSzttQkFhTCxLQUFLO3FDQUlMLEtBQUs7cUJBS0wsTUFBTTt3QkFDTixNQUFNO3lCQUNOLE1BQU07dUJBQ04sTUFBTTs4QkFDTixNQUFNO3FCQUNOLE1BQU07K0JBQ04sTUFBTTtxQkFDTixNQUFNOytCQUNOLE1BQU07c0JBQ04sTUFBTTtxQkFDTixNQUFNO3NCQUNOLE1BQU07aUNBQ04sTUFBTTswQkFDTixNQUFNOzBCQUNOLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENvbXBvbmVudCxcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBJbmplY3RvcixcbiAgICBJbnB1dCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE91dHB1dCxcbiAgICBWaWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEZXZpY2VEZXRlY3RvclNlcnZpY2UgfSBmcm9tICduZ3gtZGV2aWNlLWRldGVjdG9yJztcbmltcG9ydCB7IFN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgbWFwLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBTZWxlY3RJdGVtIH0gZnJvbSAndG4tY3VzdG9tLXByaW1lbmcvYXBpJztcbmltcG9ydCB7IERyb3Bkb3duIH0gZnJvbSAndG4tY3VzdG9tLXByaW1lbmcvZHJvcGRvd24nO1xuaW1wb3J0IHsgTXVsdGlTZWxlY3QgfSBmcm9tICd0bi1jdXN0b20tcHJpbWVuZy9tdWx0aXNlbGVjdCc7XG5cbmltcG9ydCB7IENvbXBvbmVudENvbnRleHRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vYXBwLWNvbnRleHQvY29tcG9uZW50LWNvbnRleHQuc2VydmljZSc7XG5pbXBvcnQgeyBDb21wb25lbnRCYXNlIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9iYXNlL2NvbXBvbmVudC1iYXNlJztcbmltcG9ydCB7IEZvcm1TdGF0ZSB9IGZyb20gJy4uLy4uL2NsYXNzZXMvY29uc3RhbnRzJztcbmltcG9ydCB7IENydWRGb3JtRGF0YSwgRGlhbG9nTW9kZWwsIERyb3Bkb3duQ29udHJvbFNjaGVtYSwgRm9ybUNvbnRyb2xCYXNlLCBPcGVyYXRvciB9IGZyb20gJy4uLy4uL2NsYXNzZXMvZm9ybS1zY2hlbWEnO1xuaW1wb3J0IHsgRmlsdGVyIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dyaWQtaW5mbyc7XG5pbXBvcnQgeyBDcnVkU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2NydWQuc2VydmljZSc7XG5pbXBvcnQgeyBNYXN0ZXJEYXRhU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL21hc3Rlci1kYXRhLnNlcnZpY2UnO1xuaW1wb3J0IHsgYXBwZW5kRGVmYXVsdEZpbHRlciB9IGZyb20gJy4uLy4uL3V0aWxzL2NvbW1vbic7XG5pbXBvcnQgeyBLZXlTdG9yYWdlRHJvcGRvd25TZXR0aW5nIH0gZnJvbSAnLi9tb2RlbHMvY29uc3QnO1xuXG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnZHJvcGRvd24nLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9kcm9wZG93bi5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vZHJvcGRvd24uY29tcG9uZW50LnNjc3MnXSxcbiAgICBwcm92aWRlcnM6IFtDb21wb25lbnRDb250ZXh0U2VydmljZV1cbn0pXG5leHBvcnQgY2xhc3MgRHJvcGRvd25Db21wb25lbnQgZXh0ZW5kcyBDb21wb25lbnRCYXNlIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAgIEBWaWV3Q2hpbGQoJ2VsJykgZWw6IEVsZW1lbnRSZWY7XG4gICAgQFZpZXdDaGlsZCgnaW5wdXRNYXNrJykgaW5wdXQ6IEVsZW1lbnRSZWY7XG4gICAgQFZpZXdDaGlsZCgnYnV0dG9uU2V0dGluZycpIGJ1dHRvblNldHRpbmc6IEVsZW1lbnRSZWY7XG4gICAgQFZpZXdDaGlsZChEcm9wZG93bikgZHJvcGRvd246IERyb3Bkb3duO1xuICAgIEBWaWV3Q2hpbGQoTXVsdGlTZWxlY3QpIG11bHRpU2VsZWN0OiBNdWx0aVNlbGVjdDtcblxuICAgIEBJbnB1dCgpIHNldCBzaG93Q2xlYXIodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgaWYgKCF0aGlzLmNvbnRyb2wuc2hvd0NsZWFyKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2wuc2hvd0NsZWFyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBASW5wdXQoKSBkaXNhYmxlRGlzcGxheUZpZWxkU2VydmVyU2VhcmNoID0gZmFsc2U7XG5cbiAgICBASW5wdXQoKSBzZXQgZmlsdGVyKHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIGlmICghdGhpcy5jb250cm9sLmZpbHRlcikge1xuICAgICAgICAgICAgdGhpcy5jb250cm9sLmZpbHRlciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgQElucHV0KCkgY29udHJvbDogRHJvcGRvd25Db250cm9sU2NoZW1hID0gbmV3IERyb3Bkb3duQ29udHJvbFNjaGVtYSgpO1xuICAgIEBJbnB1dCgpIGRlZmF1bHRMYWJlbCA9ICcnO1xuICAgIEBJbnB1dCgpIGFwcGVuZFRvOiBhbnkgPSAnYm9keSc7XG5cbiAgICBASW5wdXQoKSBzZXQgZGF0YVNvdXJjZSh2YWx1ZTogYW55W10pIHtcbiAgICAgICAgY29uc3QgZGF0YVNvdXJjZSA9IFtdO1xuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiB2YWx1ZSkge1xuICAgICAgICAgICAgICAgIGRhdGFTb3VyY2UucHVzaCh0aGlzLnJlU3RydWN0dXJlSXRlbU9iamVjdChpdGVtKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jb21iaW5lRGF0YVNvdXJjZShkYXRhU291cmNlLCAxKTtcbiAgICAgICAgdGhpcy5jaGVja0FuZEZpcmVFdmVudCgpO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCB2YWx1ZSh2YWx1ZTogYW55KSB7XG4gICAgICAgIGlmICh0aGlzLl9yZXR1cm5WYWx1ZSAhPSB2YWx1ZSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuY29udHJvbC5tdWx0aXBsZSAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl92YWx1ZSA9IFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGZpcmUgZXZlbnQgxJFp4buBdSBjaOG7iW5oIHZhbHVlIHThu6sgW3ZhbHVlOiBndWlkXSA9PiB7W2ZpZWxkVmFsdWVdOiBbdmFsdWU6IGd1aWRdLCAuLi5bMSBz4buRIHRyxrDhu51uZyBraMOhYyBu4buvYSB0cm9uZyBkYXRhc291cmNlXX1cbiAgICAgICAgICAgIHRoaXMuc2V0U2VsZWN0ZWRWYWx1ZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgQElucHV0KCkgZGF0YTogYW55ID0ge307XG5cbiAgICBkZWZhdWx0U2VsZWN0ZWRTdHlsZUNsYXNzID0gJ2N1c3RvbS1zZWxlY3QtaXRlbSc7XG4gICAgX2l0ZW1TZWxlY3RlZFN0eWxlQ2xhc3MgPSB0aGlzLmRlZmF1bHRTZWxlY3RlZFN0eWxlQ2xhc3M7XG4gICAgQElucHV0KCkgc2V0IGl0ZW1TZWxlY3RlZFN0eWxlQ2xhc3ModmFsdWU6IHN0cmluZykge1xuICAgICAgICB0aGlzLl9pdGVtU2VsZWN0ZWRTdHlsZUNsYXNzID0gYCR7dGhpcy5kZWZhdWx0U2VsZWN0ZWRTdHlsZUNsYXNzfSAke3ZhbHVlfWA7XG5cbiAgICB9XG5cbiAgICBAT3V0cHV0KCkgb25Jbml0ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gICAgQE91dHB1dCgpIG9uQ2hhbmdlZDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgICBAT3V0cHV0KCkgb25Db2xsYXBzZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgICBAT3V0cHV0KCkgb25FeHBhbmQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gICAgQE91dHB1dCgpIG9uRHJvcGRvd25DbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAgIEBPdXRwdXQoKSBvblNob3cgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgICBAT3V0cHV0KCkgb25TaG93U21hcnRFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAgIEBPdXRwdXQoKSBvbkhpZGUgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgICBAT3V0cHV0KCkgb25IaWRlU21hcnRFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAgIEBPdXRwdXQoKSBvbkZvY3VzID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gICAgQE91dHB1dCgpIG9uQmx1ciA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAgIEBPdXRwdXQoKSBvblJlYWR5ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gICAgQE91dHB1dCgpIG9uRGF0YVNvdXJjZUxvYWRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAgIEBPdXRwdXQoKSB2YWx1ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAgIEBPdXRwdXQoKSBhZGp1c3RWYWx1ZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gICAgX3VuU3Vic2NyaWJlQWxsID0gbmV3IFN1YmplY3Q8YW55PigpO1xuICAgIGRhdGFTb3VyY2VJbnRlcm5hbCA9IFtdO1xuICAgIGRhdGFTb3VyY2VTZWxlY3RlZCA9IFtdO1xuICAgIHNlbGVjdGVkVmFsdWVCZWZvcmU6IGFueTtcbiAgICBfdmFsdWU6IGFueTtcbiAgICBfcmV0dXJuVmFsdWU6IGFueTtcbiAgICBmdW5jUmV0dXJuVmFsdWU6ICh2YWx1ZSkgPT4ge30gPSB2YWx1ZSA9PiB2YWx1ZTtcbiAgICB0b29sdGlwOiBzdHJpbmc7XG4gICAgaGlkZVRyYW5zaXRpb25PcHRpb25zID0gJzE5NW1zIGVhc2UtaW4nO1xuICAgIHNob3dUcmFuc2l0aW9uT3B0aW9ucyA9ICcyMjVtcyBlYXNlLW91dCc7XG5cbiAgICBpbnB1dEVsbTogYW55O1xuICAgIGF1dG9mb2N1c1NlbGVjdGVkSXRlbTogYm9vbGVhbiA9IHRydWU7XG4gICAgZ2V0RmlsdGVyT25TZXJ2ZXJTZWFyY2g6IEZ1bmN0aW9uO1xuICAgIHZhbHVlU2VhcmNoU2VydmVyID0gJyc7XG4gICAga2V5VXAgPSBuZXcgU3ViamVjdDxLZXlib2FyZEV2ZW50PigpO1xuICAgIHN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICAgIF9oYXNMb2FkZWREYXRhc291cmNlID0gZmFsc2U7XG5cbiAgICBxdWlja0FkZERpYWxvZ01vZGVsID0gbmV3IERpYWxvZ01vZGVsKHt9KTtcbiAgICBzZXR0aW5nRGlhbG9nTW9kZWwgPSBuZXcgRGlhbG9nTW9kZWwoe1xuICAgICAgICBoZWFkZXI6ICdD4bqldSBow6xuaCBkcm9wZG93bidcbiAgICB9KTtcblxuICAgIGZsYXNoQ2FjaGVQYXJlbnQ6IGFueVtdID0gW107XG4gICAgZmlsdGVyRnJvbVBhcmVudHM6IEZpbHRlcltdID0gW107XG4gICAgZHJvcGRvd25PcHRpb25zID0gW107XG4gICAgZGVsYXlGaWx0ZXI6IG51bWJlciA9IDEwMDtcbiAgICBzY3JvbGxDb250YWluZXI6IGFueTtcbiAgICB0aW1lb3V0U2Nyb2xsOiBhbnk7XG4gICAgZmlyc3RTY3JvbGw6IGFueSA9IHRydWU7XG4gICAgbG9hZGluZyA9IGZhbHNlO1xuICAgIHBhZ2U6IG51bWJlciA9IDE7XG4gICAgdG90YWxQYWdlOiBudW1iZXIgPSAyO1xuICAgIGZpZWxkU3VEdW5nID0gJ3N1RHVuZyc7XG4gICAgZGlzYWJsZUZpZWxkTm90VXNlID0gZmFsc2U7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBfZGV2aWNlRGV0ZWN0b3JTZXJ2aWNlOiBEZXZpY2VEZXRlY3RvclNlcnZpY2UsXG4gICAgICAgIGluamVjdG9yOiBJbmplY3RvcixcbiAgICAgICAgX2NydWRTZXJ2aWNlOiBDcnVkU2VydmljZVxuICAgICkge1xuICAgICAgICBzdXBlcihpbmplY3Rvcik7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2wucXVpY2tBZGQpIHtcbiAgICAgICAgICAgIHRoaXMucXVpY2tBZGREaWFsb2dNb2RlbC5oZWFkZXIgPSBgVGjDqm0gbeG7m2kgJHt0aGlzLmNvbnRyb2wubGFiZWx9YDtcbiAgICAgICAgICAgIHRoaXMucXVpY2tBZGREaWFsb2dNb2RlbC5wb3B1cFNpemUgPSB0aGlzLmNvbnRyb2wucG9wdXBTaXplO1xuICAgICAgICAgICAgdGhpcy5xdWlja0FkZERpYWxvZ01vZGVsLmRhdGEgPSB7XG4gICAgICAgICAgICAgICAgZm9ybU1vZGVsOiBuZXcgQ3J1ZEZvcm1EYXRhKClcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuY29udHJvbC5maXRQYW5lbCkge1xuICAgICAgICAgICAgY29uc3QgY2xhc3NXcmFwQ29udGVudCA9ICctLXdyYXAtY29udGVudCc7XG4gICAgICAgICAgICBpZiAoIXRoaXMuY29udHJvbC5wYW5lbENsYXNzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb250cm9sLnBhbmVsQ2xhc3MgPSBjbGFzc1dyYXBDb250ZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb250cm9sLnBhbmVsQ2xhc3MgKz0gYCAke2NsYXNzV3JhcENvbnRlbnR9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNvbnRyb2wuX2NvbXBvbmVudCA9IHRoaXM7XG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2wucGxhY2Vob2xkZXIgPT0gbnVsbCAmJiB0aGlzLmNvbnRyb2wubXVsdGlwbGUpIHtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbC5wbGFjZWhvbGRlciA9ICdDaMawYSBjaOG7jW4gYuG6o24gZ2hpJztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNldERlZmF1bHRTZXR0aW5nKCk7XG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2wuYmFzZVNlcnZpY2UpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbnRyb2wuaXNTZXJ2ZXJMb2FkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb250cm9sLm1heEl0ZW1EaXNwbGF5ID0gOTk5OTtcbiAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZUZpbHRlckZ1bmN0aW9uKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5jcmVhdGVTZWFyY2hTdWJzY3JpcHRpb24oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLmNvbnRyb2wubG9hZE9uSW5pdCAmJiAhdGhpcy5jb250cm9sLmlzTGF6eUxvYWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9nZXREYXRhKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5jb250cm9sLmJhc2VTZXJ2aWNlIGluc3RhbmNlb2YgTWFzdGVyRGF0YVNlcnZpY2UpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRyb2wubWF4SXRlbURpc3BsYXkgPSA5OTk5O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5kaXNhYmxlRmllbGROb3RVc2UgPSB0aGlzLmNvbnRyb2wuYmFzZVNlcnZpY2VbJ2Rpc2FibGVGaWVsZE5vdFVzZSddO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLl9kZXZpY2VEZXRlY3RvclNlcnZpY2UuaXNEZXNrdG9wKCkpIHtcbiAgICAgICAgICAgIHRoaXMuaGlkZVRyYW5zaXRpb25PcHRpb25zID0gdGhpcy5zaG93VHJhbnNpdGlvbk9wdGlvbnMgPSAnJztcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5jb250cm9sLm9uSW5pdCkge1xuICAgICAgICAgICAgdGhpcy5jb250cm9sLm9uSW5pdCh0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm9uSW5pdC5lbWl0KHRoaXMpO1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLl91blN1YnNjcmliZUFsbC5jb21wbGV0ZSgpO1xuICAgIH1cblxuICAgIHNldERlZmF1bHRTZXR0aW5nKCkge1xuICAgICAgICBpZiAodGhpcy5jb250cm9sLmlzVHJlZSB8fCB0aGlzLmNvbnRyb2wuaXNUcmVlQmFzZU1vZGVsKSB7XG4gICAgICAgICAgICB0aGlzLmRlbGF5RmlsdGVyID0gMjAwO1xuICAgICAgICAgICAgaWYgKCF0aGlzLmNvbnRyb2wuZnVuY0dldExhYmVsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb250cm9sLmZ1bmNHZXRMYWJlbCA9IGl0ZW0gPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXRlbS5fcHJlZml4ICsgaXRlbVt0aGlzLmNvbnRyb2wuZGlzcGxheUZpZWxkXTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmNvbnRyb2wuZnVuY0dldExhYmVsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb250cm9sLmZ1bmNHZXRMYWJlbCA9IGl0ZW0gPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXRlbVt0aGlzLmNvbnRyb2wuZGlzcGxheUZpZWxkXTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLmNvbnRyb2wuZ2VuZXJhdGVUb29sdGlwICYmICF0aGlzLmNvbnRyb2wubXVsdGlwbGUpIHtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbC5nZW5lcmF0ZVRvb2x0aXAgPSB0aGlzLmNvbnRyb2wuZnVuY0dldExhYmVsO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuY29udHJvbC5yZXR1cm5UeXBlID09ICd2YWx1ZScpIHtcbiAgICAgICAgICAgIHRoaXMuZnVuY1JldHVyblZhbHVlID0gKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlID09IG51bGwpIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvbnRyb2wubXVsdGlwbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLm1hcChpdGVtID0+IGl0ZW1bdGhpcy5jb250cm9sLnZhbHVlRmllbGRdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlW3RoaXMuY29udHJvbC52YWx1ZUZpZWxkXTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmZ1bmNSZXR1cm5WYWx1ZSA9IHZhbHVlID0+IHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl92YWx1ZSAmJiB0aGlzLmRhdGFTb3VyY2VJbnRlcm5hbCkge1xuICAgICAgICAgICAgdGhpcy5nZXRWYWx1ZVJldHVybigpO1xuICAgICAgICB9XG5cbiAgICB9XG5cbiAgICBnZXREZWxheVNlYXJjaFRpbWUoKSB7XG4gICAgICAgIGNvbnN0IGpzRHJvcGRvd25TZXR0aW5nID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oS2V5U3RvcmFnZURyb3Bkb3duU2V0dGluZyk7XG4gICAgICAgIGxldCByZXN1bHQgPSA1MDA7XG4gICAgICAgIGlmIChqc0Ryb3Bkb3duU2V0dGluZykge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb25zdCBkcm9wZG93blNldHRpbmcgPSBKU09OLnBhcnNlKGpzRHJvcGRvd25TZXR0aW5nKTtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBkcm9wZG93blNldHRpbmcuZGVsYXlTZWFyY2hUaW1lO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFyZXN1bHQgfHwgaXNOYU4ocmVzdWx0KSB8fCByZXN1bHQgPCAyMDApIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IDIwMDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIGdldEFsbFBhcmVudChyZXN1bHQsIHBhcmVudElkKSB7XG4gICAgICAgIGlmICh0aGlzLmZsYXNoQ2FjaGVQYXJlbnQuc29tZShxID0+IHEudmFsdWUuaWQgPT0gcGFyZW50SWQpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaXRlbVBhcmVudCA9IHRoaXMuZHJvcGRvd25PcHRpb25zLmZpbmQocSA9PiBxLnZhbHVlLmlkID09IHBhcmVudElkKTtcbiAgICAgICAgaWYgKGl0ZW1QYXJlbnQgIT0gbnVsbCkge1xuICAgICAgICAgICAgY29uc3QgaXRlbUFkZCA9IHtcbiAgICAgICAgICAgICAgICAuLi5pdGVtUGFyZW50LFxuICAgICAgICAgICAgICAgIGRpc2FibGVkOiB0aGlzLmNvbnRyb2wuZGlzYWJsZWRQYXJlbnRJdGVtXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmVzdWx0LnB1c2goaXRlbUFkZCk7XG4gICAgICAgICAgICBjb25zdCBpbmRleEV4aXN0ID0gdGhpcy5mbGFzaENhY2hlUGFyZW50LmZpbmRJbmRleChxID0+IHEudmFsdWUuX2xldmVsID09IGl0ZW1BZGQudmFsdWUuX2xldmVsKTtcbiAgICAgICAgICAgIGlmIChpbmRleEV4aXN0ID4gLTEpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZsYXNoQ2FjaGVQYXJlbnRbaW5kZXhFeGlzdF0gPSBpdGVtQWRkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5mbGFzaENhY2hlUGFyZW50LnB1c2goaXRlbUFkZCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEzhuqV5IHRow6ptIGLhuqNuIGdoaSBjaGEgY+G7p2EgYuG6o24gZ2hpIGNoYVxuICAgICAgICAgICAgcGFyZW50SWQgPSB0aGlzLmdldFBhcmVudElkRnJvbUl0ZW0oaXRlbVBhcmVudCk7XG4gICAgICAgICAgICBpZiAocGFyZW50SWQgIT0gdGhpcy5ndWlkRW1wdHkgJiYgcGFyZW50SWQgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZ2V0QWxsUGFyZW50KHJlc3VsdCwgcGFyZW50SWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgYWxyZWFkeUhhc1BhcmVudChvcHRpb25zOiBhbnlbXSwgaW5kZXhTdGFydDogbnVtYmVyLCBwYXJlbnRJZDogc3RyaW5nLCBsZXZlbDogbnVtYmVyKSB7XG4gICAgICAgIHdoaWxlIChpbmRleFN0YXJ0ID4gLTEpIHtcbiAgICAgICAgICAgIGlmIChvcHRpb25zW2luZGV4U3RhcnRdLnZhbHVlLmlkID09IHBhcmVudElkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChvcHRpb25zW2luZGV4U3RhcnRdLnZhbHVlLmxldmVsID09IGxldmVsICYmIHRoaXMuZ2V0UGFyZW50SWRGcm9tSXRlbShvcHRpb25zW2luZGV4U3RhcnRdKSAhPSBwYXJlbnRJZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmZsYXNoQ2FjaGVQYXJlbnQuc29tZShxID0+IHEudmFsdWUuaWQgPT0gcGFyZW50SWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaW5kZXhTdGFydC0tO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFBhcmVudElkRnJvbUl0ZW0oaXRlbSkge1xuICAgICAgICByZXR1cm4gaXRlbS52YWx1ZVt0aGlzLmNvbnRyb2wuZmllbGRUcmVlXTtcbiAgICB9XG5cbiAgICBtb2RpZnlPcHRpb25XaGVuRmlsdGVyID0gKG9wdGlvbnMpID0+IHtcbiAgICAgICAgdGhpcy5kcm9wZG93bk9wdGlvbnMgPSB0aGlzLmRyb3Bkb3duLl9vcHRpb25zO1xuICAgICAgICB0aGlzLl9tb2RpZnlPcHRpb25XaGVuRmlsdGVyKG9wdGlvbnMpO1xuICAgIH07XG5cbiAgICBtb2RpZnlPcHRpb25XaGVuRmlsdGVyTXVsdGlwbGUgPSAob3B0aW9ucykgPT4ge1xuICAgICAgICB0aGlzLmRyb3Bkb3duT3B0aW9ucyA9IHRoaXMubXVsdGlTZWxlY3QuX29wdGlvbnM7XG4gICAgICAgIHRoaXMuX21vZGlmeU9wdGlvbldoZW5GaWx0ZXIob3B0aW9ucyk7XG4gICAgfTtcblxuICAgIF9tb2RpZnlPcHRpb25XaGVuRmlsdGVyKG9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5mbGFzaENhY2hlUGFyZW50ID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3B0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgcGFyZW50SWQgPSB0aGlzLmdldFBhcmVudElkRnJvbUl0ZW0ob3B0aW9uc1tpXSk7XG4gICAgICAgICAgICBpZiAocGFyZW50SWQgIT0gdGhpcy5ndWlkRW1wdHkgJiYgcGFyZW50SWQgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhcmVudHMgPSBbXTtcbiAgICAgICAgICAgICAgICAvLyBLaeG7g20gdHJhIGPDoWMgYuG6o24gZ2hpIHBow61hIHRyxrDhu5tjIHhlbSDEkcOjIGPDsyBi4bqjbiBnaGkgY2hhIGNoxrBhIChDaG8gxJHhur9uIGdoaSBn4bq3cCBi4bqjbiBnaGkgY8O5bmcgbGV2ZWwgbmjGsG5nIGtow6FjIHBhcmVudElkKVxuICAgICAgICAgICAgICAgIGNvbnN0IGhhc1BhcmVudCA9IHRoaXMuYWxyZWFkeUhhc1BhcmVudChvcHRpb25zLCBpIC0gMSwgcGFyZW50SWQsIG9wdGlvbnNbaV0ubGV2ZWwpO1xuICAgICAgICAgICAgICAgIGlmICghaGFzUGFyZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0QWxsUGFyZW50KHBhcmVudHMsIHBhcmVudElkKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmVudHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5zcGxpY2UoaSwgMCwgLi4ucGFyZW50cy5yZXZlcnNlKCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaSArPSBwYXJlbnRzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNyZWF0ZUZpbHRlckZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAodGhpcy5jb250cm9sLnNlYXJjaEZpZWxkID09IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbC5zZWFyY2hGaWVsZCA9IFtdO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5jb250cm9sLmRpc2FibGVEaXNwbGF5RmllbGRTZXJ2ZXJTZWFyY2gpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5jb250cm9sLnNlYXJjaEZpZWxkLnNvbWUoaXRlbSA9PiBpdGVtID09IHRoaXMuY29udHJvbC5kaXNwbGF5RmllbGQpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb250cm9sLnNlYXJjaEZpZWxkLnB1c2godGhpcy5jb250cm9sLmRpc3BsYXlGaWVsZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuY29udHJvbC5zZWFyY2hGaWVsZC5sZW5ndGggPT0gMSkge1xuICAgICAgICAgICAgdGhpcy5nZXRGaWx0ZXJPblNlcnZlclNlYXJjaCA9IHZhbHVlID0+ICh7XG4gICAgICAgICAgICAgICAgZmllbGQ6IHRoaXMuY29udHJvbC5zZWFyY2hGaWVsZFswXSwgb3BlcmF0b3I6IE9wZXJhdG9yLmNvbnRhaW4sIHZhbHVlOiBKU09OLnN0cmluZ2lmeSh2YWx1ZSlcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5nZXRGaWx0ZXJPblNlcnZlclNlYXJjaCA9IHZhbHVlID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBuZXcgRmlsdGVyKHtcbiAgICAgICAgICAgICAgICAgICAgbG9naWM6ICdvcicsXG4gICAgICAgICAgICAgICAgICAgIGZpbHRlcnM6IFtdXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgY29uc3QgdG1wVmFsdWUgPSBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBmaWVsZFNlYXJjaCBvZiB0aGlzLmNvbnRyb2wuc2VhcmNoRmllbGQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmZpbHRlcnMucHVzaCh7IGZpZWxkOiBmaWVsZFNlYXJjaCwgb3BlcmF0b3I6IE9wZXJhdG9yLmNvbnRhaW4sIHZhbHVlOiB0bXBWYWx1ZSB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXREYXRhKGZpbHRlclBhcmVudHM/OiBGaWx0ZXJbXSkge1xuICAgICAgICBpZiAoIWZpbHRlclBhcmVudHMpIGZpbHRlclBhcmVudHMgPSBbXTtcbiAgICAgICAgdGhpcy5maWx0ZXJGcm9tUGFyZW50cyA9IGZpbHRlclBhcmVudHM7XG4gICAgICAgIHRoaXMuX2dldERhdGEoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNvbWJpbmVEYXRhU291cmNlKGRhdGFTb3VyY2U6IGFueVtdLCBwYWdlOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5hdXRvZm9jdXNTZWxlY3RlZEl0ZW0gPSB0cnVlO1xuICAgICAgICBpZiAoIWRhdGFTb3VyY2UpIGRhdGFTb3VyY2UgPSBbXTtcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbC5pc1NlcnZlckxvYWQpIHtcbiAgICAgICAgICAgIGlmIChwYWdlID4gMSkge1xuICAgICAgICAgICAgICAgIHRoaXMuYXV0b2ZvY3VzU2VsZWN0ZWRJdGVtID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZHJvcGRvd24pIHRoaXMuZHJvcGRvd24uc2VsZWN0ZWRPcHRpb25VcGRhdGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgLy8gQXBwZW5kIHRow6ptIGRhdGFzb3VyY2VcbiAgICAgICAgICAgICAgICBjb25zdCB0bXBEYXRhU291cmNlID0gWy4uLnRoaXMuZGF0YVNvdXJjZUludGVybmFsXTtcbiAgICAgICAgICAgICAgICB0aGlzLmFwcGVuZERhdGFTb3VyY2UodG1wRGF0YVNvdXJjZSwgZGF0YVNvdXJjZSk7XG4gICAgICAgICAgICAgICAgaWYgKHRtcERhdGFTb3VyY2UubGVuZ3RoID09IHRoaXMuZGF0YVNvdXJjZUludGVybmFsLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXREYXRhTmV4dFBhZ2UoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhU291cmNlSW50ZXJuYWwgPSB0bXBEYXRhU291cmNlO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHRtcERhdGFTb3VyY2UgPSBbLi4uZGF0YVNvdXJjZV07XG4gICAgICAgICAgICBpZiAoKHRoaXMuY29udHJvbC5tdWx0aXBsZSAmJiB0aGlzLl92YWx1ZSAmJiB0aGlzLl92YWx1ZS5sZW5ndGgpXG4gICAgICAgICAgICAgICAgfHwgKCF0aGlzLmNvbnRyb2wubXVsdGlwbGUgJiYgdGhpcy5fdmFsdWUpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5kYXRhU291cmNlU2VsZWN0ZWQgJiYgdGhpcy5kYXRhU291cmNlU2VsZWN0ZWQubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2hhc0xvYWRlZERhdGFzb3VyY2UgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMudmFsdWVTZWFyY2hTZXJ2ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYXBwZW5kRGF0YVNvdXJjZSh0bXBEYXRhU291cmNlLCB0aGlzLmRhdGFTb3VyY2VTZWxlY3RlZCwgLTEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5faGFzTG9hZGVkRGF0YXNvdXJjZSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmRhdGFTb3VyY2VJbnRlcm5hbCA9IHRtcERhdGFTb3VyY2U7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRhdGFTb3VyY2VJbnRlcm5hbCA9IGRhdGFTb3VyY2U7XG4gICAgICAgICAgICBpZiAodGhpcy5kYXRhU291cmNlSW50ZXJuYWwubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2hhc0xvYWRlZERhdGFzb3VyY2UgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVGaWVsZE5vdFVzZSAmJiB0aGlzLmNvbnRyb2wuaXNBbGxvd0Rpc2FibGVkXG4gICAgICAgICAgICAmJiB0aGlzLmRhdGFTb3VyY2VJbnRlcm5hbC5zb21lKHAgPT4gcC52YWx1ZS5oYXNPd25Qcm9wZXJ0eSh0aGlzLmZpZWxkU3VEdW5nKSkpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZUludGVybmFsLmZvckVhY2goaXRlbSA9PiBpdGVtLmluYWN0aXZlID0gIWl0ZW0udmFsdWVbdGhpcy5maWVsZFN1RHVuZ10pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhcHBlbmREYXRhU291cmNlKGRlc3RTb3VyY2U6IGFueVtdLCBkYXRhU291cmNlOiBhbnlbXSwgZGlyZWN0aW9uOiBudW1iZXIgPSAxKSB7XG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2wuaXNUcmVlKSB7XG4gICAgICAgICAgICBkYXRhU291cmNlLmZvckVhY2goc291cmNlID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IGRlc3RTb3VyY2UuZmluZEluZGV4KHEgPT4gcS52YWx1ZVt0aGlzLmNvbnRyb2wuZmllbGRNYVBoYW5DYXBdID4gc291cmNlLnZhbHVlW3RoaXMuY29udHJvbC5maWVsZE1hUGhhbkNhcF0pO1xuICAgICAgICAgICAgICAgIGlmIChpbmRleCA9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBLaeG7g20gdHJhIGLhuqNuIGdoaSBjdeG7kWkgY8O5bmcgbMOgIG7DsyB0aMOsIGsgaW5zZXJ0XG4gICAgICAgICAgICAgICAgICAgIGlmIChkZXN0U291cmNlLmxlbmd0aCA+IDBcbiAgICAgICAgICAgICAgICAgICAgICAgICYmIGRlc3RTb3VyY2VbZGVzdFNvdXJjZS5sZW5ndGggLSAxXS52YWx1ZVt0aGlzLmNvbnRyb2wudmFsdWVGaWVsZF0gPT0gc291cmNlLnZhbHVlW3RoaXMuY29udHJvbC52YWx1ZUZpZWxkXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGRlc3RTb3VyY2UucHVzaChzb3VyY2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChpbmRleCA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlc3RTb3VyY2UudW5zaGlmdChzb3VyY2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gTuG6v3UgYuG6o24gZ2hpIG5nYXkgdHLGsOG7m2MgduG7iyB0csOtIGPhuqduIGluc2VydCBsw6AgYuG6o24gZ2hpIGhp4buHbiB04bqhaSB0aMOsIGsgaW5zZXJ0XG4gICAgICAgICAgICAgICAgICAgIGlmIChkZXN0U291cmNlW2luZGV4IC0gMV0udmFsdWVbdGhpcy5jb250cm9sLnZhbHVlRmllbGRdID09IHNvdXJjZS52YWx1ZVt0aGlzLmNvbnRyb2wudmFsdWVGaWVsZF0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc291cmNlLmRpc2FibGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFNvdXJjZVtpbmRleCAtIDFdLmRpc2FibGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZGVzdFNvdXJjZS5zcGxpY2UoaW5kZXgsIDAsIHNvdXJjZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBkYXRhU291cmNlLmZvckVhY2goc291cmNlID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IGRlc3RTb3VyY2UuZmluZEluZGV4KHEgPT4gcS52YWx1ZVt0aGlzLmNvbnRyb2wudmFsdWVGaWVsZF0gPT0gc291cmNlLnZhbHVlW3RoaXMuY29udHJvbC52YWx1ZUZpZWxkXSk7XG4gICAgICAgICAgICAgICAgaWYgKGluZGV4ID09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkaXJlY3Rpb24gPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RTb3VyY2UudW5zaGlmdChzb3VyY2UpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFNvdXJjZS5wdXNoKHNvdXJjZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNoZWNrQW5kRmlyZUV2ZW50KGZvcmNlOiBib29sZWFuID0gZmFsc2UpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9oYXNMb2FkZWREYXRhc291cmNlKSB7XG4gICAgICAgICAgICBpZiAoZm9yY2UpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9uUmVhZHkuZW1pdCh0aGlzLmNvbnRyb2wuZmllbGQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGxldCBvbGRWYWx1ZSA9IHRoaXMuX3ZhbHVlO1xuICAgICAgICBpZiAodGhpcy5jb250cm9sLm11bHRpcGxlKSB7XG4gICAgICAgICAgICBsZXQgbmV3VmFsdWUgPSBbXTtcbiAgICAgICAgICAgIGlmICghb2xkVmFsdWUpIG9sZFZhbHVlID0gW107XG4gICAgICAgICAgICBpZiAob2xkVmFsdWUubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIG5ld1ZhbHVlID0gdGhpcy5nZXRWYWx1ZVNlbGVjdGVkTXVsdGlwbGUoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKG5ld1ZhbHVlLmxlbmd0aCA9PSAwXG4gICAgICAgICAgICAgICAgJiYgdGhpcy5jb250cm9sLm5vdEluQ3J1ZEZvcm1cbiAgICAgICAgICAgICAgICAmJiB0aGlzLmNvbnRyb2wuYXV0b0Rpc3BsYXlGaXJzdFxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgbmV3VmFsdWUgPSBbdGhpcy5kYXRhU291cmNlSW50ZXJuYWxbMF0udmFsdWVdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuX3ZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl92YWx1ZSA9IG5ld1ZhbHVlO1xuXG4gICAgICAgICAgICAgICAgaWYgKG9sZFZhbHVlLmxlbmd0aCAhPSB0aGlzLl92YWx1ZS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5maXJlQ2hhbmdlZEV2ZW50KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKCF0aGlzLl9jb21tb25TZXJ2aWNlLmlzU2FtZUFycmF5KG9sZFZhbHVlLCB0aGlzLl92YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGp1c3RWYWx1ZTJXYXlCaW5kaW5nKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5hZGp1c3RWYWx1ZVNlbGVjdGVkU2luZ2xlKCk7XG4gICAgICAgICAgICBpZiAodGhpcy5fdmFsdWUgPT0gbnVsbFxuICAgICAgICAgICAgICAgICYmIHRoaXMuY29udHJvbC5ub3RJbkNydWRGb3JtXG4gICAgICAgICAgICAgICAgJiYgdGhpcy5jb250cm9sLmF1dG9EaXNwbGF5Rmlyc3RcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3ZhbHVlID0gdGhpcy5kYXRhU291cmNlSW50ZXJuYWxbMF0udmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5fdmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIC8vIEzGsHUgw70gaWYg4bufIGTGsOG7m2kga2jDtG5nIMSRxrDhu6NjIMSR4buVaSB0aMOgbmggb2xkVmFsdWUgIT0gdGhpcy5fdmFsdWVcbiAgICAgICAgICAgICAgICAvLyBWw6wgZ2nDoSB0cuG7iyBj4bunYSB0aGlzLl92YWx1ZSBz4bq9IMSRxrDhu6NjIGNvcnJlY3Rpbmcg4bufIHRyw6puIChpZCA9PiBvYmplY3QpIG7Dqm4gc28gc8Ohbmggc+G6vSBraMOhYyBuaGF1XG4gICAgICAgICAgICAgICAgaWYgKChvbGRWYWx1ZSAhPSBudWxsICYmIHRoaXMuX3ZhbHVlID09IG51bGwpXG4gICAgICAgICAgICAgICAgICAgIHx8IChvbGRWYWx1ZSA9PSBudWxsICYmIHRoaXMuX3ZhbHVlICE9IG51bGwpXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmlyZUNoYW5nZWRFdmVudCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0aGlzLl92YWx1ZSAhPSBvbGRWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFkanVzdFZhbHVlMldheUJpbmRpbmcoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNoZWNrUmVhZHkoKTtcbiAgICB9XG5cbiAgICBhc3luYyBzZXRTZWxlY3RlZFZhbHVlKCkge1xuICAgICAgICBpZiAodGhpcy5jb250cm9sLmlzU2VydmVyTG9hZCkge1xuICAgICAgICAgICAgY29uc3QgZmlsdGVycyA9IFtdO1xuICAgICAgICAgICAgbGV0IGxlbmd0aCA9IDE7XG4gICAgICAgICAgICBpZiAodGhpcy5jb250cm9sLm11bHRpcGxlKSB7XG4gICAgICAgICAgICAgICAgbGVuZ3RoID0gdGhpcy5fdmFsdWUubGVuZ3RoO1xuICAgICAgICAgICAgICAgIGZpbHRlcnMucHVzaChcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXdGaWx0ZXIodGhpcy5jb250cm9sLnZhbHVlRmllbGQsIE9wZXJhdG9yLmluLCB0aGlzLl92YWx1ZSlcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgZmlsdGVycy5wdXNoKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLm5ld0ZpbHRlcih0aGlzLmNvbnRyb2wudmFsdWVGaWVsZCwgT3BlcmF0b3IuZXF1YWwsIHRoaXMuX3ZhbHVlKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB7IGRhdGFTb3VyY2UgfSA9IGF3YWl0IHRoaXMuX2dldERhdGFTb3VyY2VCeVNlcnZpY2UoZmlsdGVycywgMSwgbGVuZ3RoKTtcbiAgICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZVNlbGVjdGVkID0gZGF0YVNvdXJjZTtcbiAgICAgICAgICAgIGlmICh0aGlzLmRhdGFTb3VyY2VJbnRlcm5hbCAmJiB0aGlzLmRhdGFTb3VyY2VJbnRlcm5hbC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9oYXNMb2FkZWREYXRhc291cmNlID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuY29tYmluZURhdGFTb3VyY2UodGhpcy5kYXRhU291cmNlSW50ZXJuYWwsIDEpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2hlY2tBbmRGaXJlRXZlbnQoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFZhbHVlU2VsZWN0ZWRNdWx0aXBsZSgpIHtcbiAgICAgICAgY29uc3QgbmV3VmFsdWUgPSBbXTtcbiAgICAgICAgY29uc3QgdG1wVmFsdWUgPSBbLi4udGhpcy5fdmFsdWVdO1xuICAgICAgICB0aGlzLmFwcGVuZFZhbHVlRnJvbURhdGFTb3VyY2UobmV3VmFsdWUsIHRtcFZhbHVlLCB0aGlzLmRhdGFTb3VyY2VJbnRlcm5hbCk7XG4gICAgICAgIHRoaXMuYXBwZW5kVmFsdWVGcm9tRGF0YVNvdXJjZShuZXdWYWx1ZSwgdG1wVmFsdWUsIHRoaXMuZGF0YVNvdXJjZVNlbGVjdGVkKTtcbiAgICAgICAgcmV0dXJuIG5ld1ZhbHVlO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXBwZW5kVmFsdWVGcm9tRGF0YVNvdXJjZShuZXdWYWx1ZTogYW55W10sIGN1cnJlbnRWYWx1ZTogYW55W10sIGRhdGFTb3VyY2U6IGFueVtdKSB7XG4gICAgICAgIGlmICghZGF0YVNvdXJjZSB8fCAhZGF0YVNvdXJjZS5sZW5ndGgpIHJldHVybjtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjdXJyZW50VmFsdWUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkSXRlbSA9IGN1cnJlbnRWYWx1ZVtpXTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBkYXRhU291cmNlKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY29udHJvbC5mdW5jQ29tcGFyZShpdGVtLnZhbHVlLCBzZWxlY3RlZEl0ZW0pXG4gICAgICAgICAgICAgICAgICAgIHx8IHRoaXMuY29udHJvbC5mdW5jQ29tcGFyZShpdGVtLnZhbHVlLCBzZWxlY3RlZEl0ZW1bdGhpcy5jb250cm9sLnZhbHVlRmllbGRdKVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICBuZXdWYWx1ZS5wdXNoKGl0ZW0udmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50VmFsdWUuc3BsaWNlKGksIDEpO1xuICAgICAgICAgICAgICAgICAgICBpLS07XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYWRqdXN0VmFsdWVTZWxlY3RlZFNpbmdsZSgpIHtcbiAgICAgICAgY29uc3Qgb2xkVmFsdWUgPSB0aGlzLl92YWx1ZTtcbiAgICAgICAgdGhpcy5fdmFsdWUgPSBudWxsO1xuICAgICAgICBpZiAob2xkVmFsdWUgPT09IG51bGwgfHwgb2xkVmFsdWUgPT09IHVuZGVmaW5lZCkgcmV0dXJuO1xuICAgICAgICB0aGlzLmZpbmRJdGVtRnJvbURhdGFTb3VyY2Uob2xkVmFsdWUsIHRoaXMuZGF0YVNvdXJjZUludGVybmFsKTtcbiAgICAgICAgdGhpcy5maW5kSXRlbUZyb21EYXRhU291cmNlKG9sZFZhbHVlLCB0aGlzLmRhdGFTb3VyY2VTZWxlY3RlZCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBmaW5kSXRlbUZyb21EYXRhU291cmNlKG9sZFZhbHVlOiBhbnksIGRhdGFTb3VyY2U6IGFueVtdKSB7XG4gICAgICAgIGlmICghZGF0YVNvdXJjZSB8fCAhZGF0YVNvdXJjZS5sZW5ndGgpIHJldHVybjtcbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGRhdGFTb3VyY2UpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbnRyb2wuZnVuY0NvbXBhcmUoaXRlbS52YWx1ZSwgb2xkVmFsdWUpXG4gICAgICAgICAgICAgICAgfHwgdGhpcy5jb250cm9sLmZ1bmNDb21wYXJlKGl0ZW0udmFsdWUsIG9sZFZhbHVlW3RoaXMuY29udHJvbC52YWx1ZUZpZWxkXSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3ZhbHVlID0gaXRlbS52YWx1ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNoZWNrUmVhZHkoKSB7XG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2wub25BZGp1c3RlZFZhbHVlXG4gICAgICAgICAgICAmJiB0aGlzLl9oYXNMb2FkZWREYXRhc291cmNlXG4gICAgICAgICAgICAmJiAoKCF0aGlzLmNvbnRyb2wubXVsdGlwbGUgJiYgdGhpcy5fdmFsdWUgIT0gbnVsbClcbiAgICAgICAgICAgICAgICB8fCAodGhpcy5jb250cm9sLm11bHRpcGxlICYmIHRoaXMuX3ZhbHVlICE9IG51bGwgJiYgdGhpcy5fdmFsdWUubGVuZ3RoID4gMCkpXG4gICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5maXJlQWRqdXN0VmFsdWVFdmVudCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVTdHJ1Y3R1cmVJdGVtT2JqZWN0KGl0ZW0pOiBTZWxlY3RJdGVtIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVTdHJ1Y3R1cmVGbGF0T2JqZWN0KGl0ZW0pO1xuICAgIH1cblxuICAgIHJlU3RydWN0dXJlRmxhdE9iamVjdChpdGVtKSB7XG4gICAgICAgIGNvbnN0IHRlbXA6IFNlbGVjdEl0ZW0gPSB7XG4gICAgICAgICAgICB2YWx1ZTogdGhpcy5nZXRJdGVtVmFsdWUoaXRlbSwgdGhpcy5jb250cm9sKSxcbiAgICAgICAgICAgIGRpc2FibGVkOiBpdGVtLmRpc2FibGVkIHx8IGl0ZW0uX0dlbmVyYXRlZEJ5QmFzZSA/IHRydWUgOiBmYWxzZVxuICAgICAgICB9O1xuICAgICAgICB0ZW1wLmxhYmVsID0gdGhpcy5nZXRJdGVtTGFiZWwoaXRlbSwgdGhpcy5jb250cm9sKTtcbiAgICAgICAgaWYgKHRlbXAubGFiZWwgPT09IG51bGwgfHwgdGVtcC5sYWJlbCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0ZW1wLmxhYmVsID0gJ0tow7RuZyB4w6FjIMSR4buLbmgnO1xuICAgICAgICB9XG4gICAgICAgIHRlbXAudmFsdWUuX2Ryb3Bkb3dudmFsdWUgPSB0aGlzLmNvbnRyb2wudmFsdWVGaWVsZDtcbiAgICAgICAgcmV0dXJuIHRlbXA7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRJdGVtVmFsdWUoaXRlbSwgY29udHJvbDogRHJvcGRvd25Db250cm9sU2NoZW1hKSB7XG4gICAgICAgIHJldHVybiBjb250cm9sLmZ1bmNHZXRWYWx1ZSA/IGNvbnRyb2wuZnVuY0dldFZhbHVlKGl0ZW0pIDogaXRlbTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEl0ZW1MYWJlbChpdGVtLCBjb250cm9sOiBEcm9wZG93bkNvbnRyb2xTY2hlbWEpIHtcbiAgICAgICAgaWYgKGNvbnRyb2wuZnVuY0dldExhYmVsKSB7XG4gICAgICAgICAgICByZXR1cm4gY29udHJvbC5mdW5jR2V0TGFiZWwoaXRlbSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGl0ZW1bY29udHJvbC5kaXNwbGF5RmllbGRdIHx8IGl0ZW1bJ2xhYmVsJ107XG4gICAgfVxuXG4gICAgcmVzZXRDb250cm9sKCkge1xuICAgICAgICBpZiAodGhpcy5fdmFsdWUgIT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5fdmFsdWUgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5kYXRhU291cmNlSW50ZXJuYWwgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuZmlyZUNoYW5nZWRFdmVudCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xlYXJEYXRhc291cmNlKCkge1xuICAgICAgICB0aGlzLmRhdGFTb3VyY2VJbnRlcm5hbCA9IFtdO1xuICAgICAgICB0aGlzLl9oYXNMb2FkZWREYXRhc291cmNlID0gZmFsc2U7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBfZ2V0RGF0YShwYWdlOiBudW1iZXIgPSAxKSB7XG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2wuYmFzZVNlcnZpY2UpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX2dldERhdGFTb3VyY2UocGFnZSk7XG4gICAgICAgIH1cbiAgICB9XG5cblxuICAgIHByaXZhdGUgYXN5bmMgX2dldERhdGFTb3VyY2UocGFnZTogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMucGFnZSA9IHBhZ2UgfHwgMTtcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgY29uc3QgZmlsdGVycyA9IGF3YWl0IHRoaXMuZmlsdGVyUHJvY2Vzcyh0aGlzLmZpbHRlckZyb21QYXJlbnRzKTtcbiAgICAgICAgaWYgKGZpbHRlcnMgPT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmNvbWJpbmVEYXRhU291cmNlKFtdLCBwYWdlKTtcbiAgICAgICAgICAgIHRoaXMuY2hlY2tBbmRGaXJlRXZlbnQoZmFsc2UpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgZGF0YVNvdXJjZSwgcmF3RGF0YVNvdXJjZSwgdG90YWxQYWdlIH0gPSBhd2FpdCB0aGlzLl9nZXREYXRhU291cmNlQnlTZXJ2aWNlKGZpbHRlcnMsIHBhZ2UpO1xuICAgICAgICB0aGlzLnRvdGFsUGFnZSA9IHRvdGFsUGFnZTtcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuY29tYmluZURhdGFTb3VyY2UoZGF0YVNvdXJjZSwgcGFnZSk7XG4gICAgICAgIGlmICghdGhpcy5jb250cm9sLmlzU2VydmVyTG9hZCkge1xuICAgICAgICAgICAgdGhpcy5jaGVja0FuZEZpcmVFdmVudCh0cnVlKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBO4bq/dSBkcm9wZG93biBrIG7hurFtIHRyb25nIGNydWQgZm9ybSB0aMOsIGPhuqV1IGjDrG5oIGZpcmVDYWxsQmFja0luc2lkZSA9IHRydWUgKG3hurdjIMSR4buLbmgpIMSR4buDIGZpcmUgdHLhu7FjIHRp4bq/cCB04burIHRyb25nIGNvbXBvbmVudFxuICAgICAgICBpZiAodGhpcy5jb250cm9sLmZpcmVDYWxsQmFja0luc2lkZSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuY29udHJvbC5jYWxsYmFja0RhdGFGaW5pc2gpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRyb2wuY2FsbGJhY2tEYXRhRmluaXNoKDxhbnk+e1xuICAgICAgICAgICAgICAgICAgICBkYXRhOiByYXdEYXRhU291cmNlLFxuICAgICAgICAgICAgICAgICAgICBlbG06IHRoaXNcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMub25EYXRhU291cmNlTG9hZGVkLmVtaXQoe1xuICAgICAgICAgICAgICAgIGRhdGFTb3VyY2UsXG4gICAgICAgICAgICAgICAgcmF3RGF0YVNvdXJjZSxcbiAgICAgICAgICAgICAgICBlbG06IHRoaXNcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBfZ2V0RGF0YVNvdXJjZUJ5U2VydmljZShmaWx0ZXJzOiBGaWx0ZXJbXSwgcGFnZTogbnVtYmVyID0gMSwgcGFnZVNpemU6IG51bWJlciA9IG51bGwpIHtcbiAgICAgICAgbGV0IGRhdGFTb3VyY2UgPSBudWxsO1xuICAgICAgICBsZXQgdG90YWxQYWdlID0gMTtcblxuICAgICAgICBjb25zdCBkcm9wZG93bk9wdGlvbnMgPSB0aGlzLl9jcnVkU2VydmljZS5jcmVhdGVEcm9wZG93bk9wdGlvbnModGhpcy5jb250cm9sKTtcbiAgICAgICAgZHJvcGRvd25PcHRpb25zLnBhZ2UgPSBwYWdlO1xuICAgICAgICBpZiAocGFnZVNpemUpIHtcbiAgICAgICAgICAgIGRyb3Bkb3duT3B0aW9ucy5wYWdlU2l6ZSA9IHBhZ2VTaXplO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2wuYmFzZVNlcnZpY2UgaW5zdGFuY2VvZiBNYXN0ZXJEYXRhU2VydmljZSkge1xuICAgICAgICAgICAgZGF0YVNvdXJjZSA9IGF3YWl0IHRoaXMuY29udHJvbC5iYXNlU2VydmljZS5nZXREYXRhRHJvcGRvd25CeUZpbHRlcihcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRyb2wuZ3JvdXBDb2RlLCBudWxsLCBmaWx0ZXJzLCBkcm9wZG93bk9wdGlvbnNcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBsZXQgcmVzcG9uc2UgPSBudWxsO1xuICAgICAgICAgICAgaWYgKHRoaXMuY29udHJvbC5pc1RyZWUgfHwgdGhpcy5jb250cm9sLmlzVHJlZUJhc2VNb2RlbCkge1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlID0gYXdhaXQgdGhpcy5jb250cm9sLmJhc2VTZXJ2aWNlLmdldFRyZWVEYXRhRHJvcGRvd25CeUZpbHRlclJhdyhcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVycyxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250cm9sLmZpZWxkVHJlZSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250cm9sLnZhbHVlUGFyZW50Um9vdCxcbiAgICAgICAgICAgICAgICAgICAgZHJvcGRvd25PcHRpb25zXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlID0gYXdhaXQgdGhpcy5jb250cm9sLmJhc2VTZXJ2aWNlLmdldERhdGFEcm9wZG93bkJ5RmlsdGVyUmF3KFxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJzLCBkcm9wZG93bk9wdGlvbnNcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGF0YVNvdXJjZSA9IHJlc3BvbnNlLmRhdGE7XG4gICAgICAgICAgICB0b3RhbFBhZ2UgPSBNYXRoLmNlaWwocmVzcG9uc2UudG90YWxSZWNvcmQgLyBkcm9wZG93bk9wdGlvbnMucGFnZVNpemUpO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IHRoaXMuX2NydWRTZXJ2aWNlLmdldFJlZkRhdGFJbkRhdGFzb3VyY2UoZGF0YVNvdXJjZSwgZHJvcGRvd25PcHRpb25zLnJlZkZpZWxkcyk7XG4gICAgICAgIGlmICghZGF0YVNvdXJjZSkgZGF0YVNvdXJjZSA9IFtdO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGRhdGFTb3VyY2UpIHtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKHRoaXMucmVTdHJ1Y3R1cmVJdGVtT2JqZWN0KGl0ZW0pKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBkYXRhU291cmNlOiByZXN1bHQsIHJhd0RhdGFTb3VyY2U6IGRhdGFTb3VyY2UsIHRvdGFsUGFnZSB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgZmlsdGVyUHJvY2VzcyhmaWx0ZXJGcm9tUGFyZW50czogRmlsdGVyW10pIHtcbiAgICAgICAgbGV0IGZpbHRlcnMgPSBbLi4uZmlsdGVyRnJvbVBhcmVudHNdO1xuICAgICAgICBhd2FpdCBhcHBlbmREZWZhdWx0RmlsdGVyKGZpbHRlcnMsIHRoaXMuY29udHJvbC5kZWZhdWx0RmlsdGVycyk7XG5cbiAgICAgICAgaWYgKHRoaXMuY29udHJvbC5pc1NlcnZlckxvYWQpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnZhbHVlU2VhcmNoU2VydmVyKSB7XG4gICAgICAgICAgICAgICAgZmlsdGVycy5wdXNoKHRoaXMuZ2V0RmlsdGVyT25TZXJ2ZXJTZWFyY2godGhpcy52YWx1ZVNlYXJjaFNlcnZlcikpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuY29udHJvbC5tb2RpZnlGaWx0ZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IGFsbG93ID0gYXdhaXQgdGhpcy5jb250cm9sLm1vZGlmeUZpbHRlcihmaWx0ZXJzLCB0aGlzKTtcbiAgICAgICAgICAgIGlmIChhbGxvdyA9PT0gZmFsc2UpIGZpbHRlcnMgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZpbHRlcnM7XG4gICAgfVxuXG4gICAgZ2V0UGFuZWxDbGFzcygpIHtcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbC5hcHBlbmRUbyA9PSAnYm9keScpIHtcbiAgICAgICAgICAgIHJldHVybiBgJHt0aGlzLmNvbnRyb2wucGFuZWxDbGFzc30gcC1maXhlZGA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuY29udHJvbC5wYW5lbENsYXNzO1xuICAgIH1cblxuICAgIGdldFZhbHVlUmV0dXJuKCkge1xuICAgICAgICB0aGlzLl9yZXR1cm5WYWx1ZSA9IHRoaXMuZnVuY1JldHVyblZhbHVlKHRoaXMuX3ZhbHVlKTtcbiAgICAgICAgaWYgKCF0aGlzLmNvbnRyb2wubXVsdGlwbGUpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbnRyb2wuZ2VuZXJhdGVUb29sdGlwKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX3ZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudG9vbHRpcCA9IHRoaXMuY29udHJvbC5nZW5lcmF0ZVRvb2x0aXAodGhpcy5fdmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50b29sdGlwID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRvb2x0aXAgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy50b29sdGlwID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fcmV0dXJuVmFsdWU7XG4gICAgfVxuXG4gICAgY2hlY2tJbml0ZWRDb250cm9sKCkge1xuICAgICAgICAvLyBO4bq/dSBjaMawYSBjaOG6oXkgcXVhIGluaXQgdGjDrCBrIGZpcmUgZXZlbnQgZ8OsIGPhuqNcbiAgICAgICAgcmV0dXJuICEhdGhpcy5jb250cm9sLl9jb21wb25lbnQ7XG4gICAgfVxuXG4gICAgYWRqdXN0VmFsdWUyV2F5QmluZGluZygpIHtcbiAgICAgICAgaWYgKCF0aGlzLmNoZWNrSW5pdGVkQ29udHJvbCgpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdmFsdWVSZXR1cm4gPSB0aGlzLmdldFZhbHVlUmV0dXJuKCk7XG4gICAgICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh2YWx1ZVJldHVybik7XG4gICAgfVxuXG4gICAgZmlyZUNoYW5nZWRFdmVudCgpIHtcbiAgICAgICAgLy8gTuG6v3UgY2jGsGEgY2jhuqF5IHF1YSBpbml0IHRow6wgayBmaXJlIGV2ZW50IGfDrCBj4bqjXG4gICAgICAgIGlmICghdGhpcy5jaGVja0luaXRlZENvbnRyb2woKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHZhbHVlUmV0dXJuID0gdGhpcy5nZXRWYWx1ZVJldHVybigpO1xuICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQodmFsdWVSZXR1cm4pO1xuICAgICAgICB0aGlzLm9uQ2hhbmdlZC5uZXh0KHZhbHVlUmV0dXJuKTtcbiAgICB9XG5cbiAgICBmaXJlQWRqdXN0VmFsdWVFdmVudCgpIHtcbiAgICAgICAgLy8gTuG6v3UgY2jGsGEgY2jhuqF5IHF1YSBpbml0IHRow6wgayBmaXJlIGV2ZW50IGfDrCBj4bqjXG4gICAgICAgIGlmICghdGhpcy5jaGVja0luaXRlZENvbnRyb2woKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHZhbHVlUmV0dXJuID0gdGhpcy5nZXRWYWx1ZVJldHVybigpO1xuICAgICAgICB0aGlzLmFkanVzdFZhbHVlLm5leHQodmFsdWVSZXR1cm4pO1xuICAgIH1cblxuICAgIG9uQ2hhbmdlU2VsZWN0ZWQoZXZlbnQpIHtcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbC5tdWx0aXBsZSkge1xuICAgICAgICAgICAgaWYgKCFldmVudC5pdGVtVmFsdWUpIHtcbiAgICAgICAgICAgICAgICAvLyBUcsaw4budbmcgaOG7o3AgdW5zZWxlY3QgYWxsXG4gICAgICAgICAgICAgICAgaWYgKCFldmVudC52YWx1ZS5sZW5ndGggfHwgZXZlbnQudmFsdWUuZXZlcnkocCA9PiBwLmhhc093blByb3BlcnR5KHRoaXMuZmllbGRTdUR1bmcpICYmICFwW3RoaXMuZmllbGRTdUR1bmddKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl92YWx1ZSA9IFtdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBUcsaw4budbmcgaOG7o3Agc2VsZWN0IGFsbFxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBsZXQgdG1wRGF0YVNvdXJjZSA9IFsuLi50aGlzLmRhdGFTb3VyY2VJbnRlcm5hbF07XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmRhdGFTb3VyY2VJbnRlcm5hbC5zb21lKHAgPT4gcC5oYXNPd25Qcm9wZXJ0eSgnaW5hY3RpdmUnKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRtcERhdGFTb3VyY2UgPSB0bXBEYXRhU291cmNlLmZpbHRlcihwID0+ICFwLmluYWN0aXZlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLl92YWx1ZSA9IHRtcERhdGFTb3VyY2UubWFwKHEgPT4gcS52YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5jb250cm9sLnNlbGVjdERlc2NlbmRhbnQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJlbnRJZHMgPSBbZXZlbnQuaXRlbVZhbHVlW3RoaXMuY29udHJvbC52YWx1ZUZpZWxkXV07XG4gICAgICAgICAgICAgICAgLy8gTuG6v3UgaXRlbSDEkcaw4bujYyBjaOG7jW4gPT4gQ2jhu41uIGPhuqMgbmjhu69uZyBi4bqjbiBnaGkgY29uLCBjaMOhdVxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl92YWx1ZS5pbmRleE9mKGV2ZW50Lml0ZW1WYWx1ZSkgPiAtMSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGFTb3VyY2VJbnRlcm5hbC5mb3JFYWNoKHNvdXJjZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXJlbnRJZCA9IHNvdXJjZS52YWx1ZVt0aGlzLmNvbnRyb2wuZmllbGRUcmVlXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJlbnRJZHMuaW5kZXhPZihwYXJlbnRJZCkgPiAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl92YWx1ZS5pbmRleE9mKHNvdXJjZS52YWx1ZSkgPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdmFsdWUucHVzaChzb3VyY2UudmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRJZHMucHVzaChwYXJlbnRJZCwgc291cmNlLnZhbHVlW3RoaXMuY29udHJvbC52YWx1ZUZpZWxkXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHsgLy8gaXRlbSDEkWFuZyBi4buLIGLhu48gY2jhu41uID0+IGjhu6d5IGNo4buNbiBj4bqjIG5o4buvbmcgYuG6o24gZ2hpIGNvblxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGFTb3VyY2VJbnRlcm5hbC5mb3JFYWNoKHNvdXJjZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXJlbnRJZCA9IHNvdXJjZS52YWx1ZVt0aGlzLmNvbnRyb2wuZmllbGRUcmVlXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJlbnRJZHMuaW5kZXhPZihwYXJlbnRJZCkgPiAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5fdmFsdWUuaW5kZXhPZihzb3VyY2UudmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3ZhbHVlLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudElkcy5wdXNoKHBhcmVudElkLCBzb3VyY2UudmFsdWVbdGhpcy5jb250cm9sLnZhbHVlRmllbGRdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5jb250cm9sLnNlbGVjdENoaWxkSXRlbSkge1xuICAgICAgICAgICAgICAgIC8vIE7hur91IGl0ZW0gxJHGsOG7o2MgY2jhu41uID0+IENo4buNbiBj4bqjIG5o4buvbmcgYuG6o24gZ2hpIGNvblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl92YWx1ZS5pbmRleE9mKGV2ZW50Lml0ZW1WYWx1ZSkgPiAtMSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGFTb3VyY2VJbnRlcm5hbC5mb3JFYWNoKHNvdXJjZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXJlbnRJZCA9IHNvdXJjZS52YWx1ZVt0aGlzLmNvbnRyb2wuZmllbGRUcmVlXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJlbnRJZCA9PSBldmVudC5pdGVtVmFsdWVbdGhpcy5jb250cm9sLnZhbHVlRmllbGRdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3ZhbHVlLmluZGV4T2Yoc291cmNlLnZhbHVlKSA9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl92YWx1ZS5wdXNoKHNvdXJjZS52YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7IC8vIGl0ZW0gxJFhbmcgYuG7iyBi4buPIGNo4buNbiA9PiBo4buneSBjaOG7jW4gY+G6oyBuaOG7r25nIGLhuqNuIGdoaSBjb25cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhU291cmNlSW50ZXJuYWwuZm9yRWFjaChzb3VyY2UgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFyZW50SWQgPSBzb3VyY2UudmFsdWVbdGhpcy5jb250cm9sLmZpZWxkVHJlZV07XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyZW50SWQgPT0gZXZlbnQuaXRlbVZhbHVlW3RoaXMuY29udHJvbC52YWx1ZUZpZWxkXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5fdmFsdWUuaW5kZXhPZihzb3VyY2UudmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3ZhbHVlLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5maXJlQ2hhbmdlZEV2ZW50KCk7XG4gICAgfVxuXG4gICAgcmVtb3ZlSXRlbShldnQsIHNlbGVjdGVkSXRlbSkge1xuICAgICAgICBpZiAodGhpcy5jb250cm9sLmRpc2FibGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fdmFsdWUgPSB0aGlzLl92YWx1ZS5maWx0ZXIoaXRlbSA9PiBpdGVtICE9IHNlbGVjdGVkSXRlbSk7XG4gICAgICAgIHRoaXMuZmlyZUNoYW5nZWRFdmVudCgpO1xuICAgICAgICBldnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZXZ0LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZUJlZm9yZSA9IHRoaXMuX3ZhbHVlO1xuICAgICAgICB0aGlzLm9uSGlkZVNtYXJ0RXZlbnQuZW1pdChldnQpO1xuICAgIH1cblxuICAgIG9uRHJvcGRvd25DbGlja0hhbmRsZXIoZXZ0KSB7XG4gICAgICAgIHRoaXMub25Ecm9wZG93bkNsaWNrLm5leHQoZXZ0KTtcbiAgICB9XG5cbiAgICBvbkNsaWNrKCRldmVudCkge1xuICAgICAgICBpZiAoJGV2ZW50LnRhcmdldC50YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT09ICdpJyAmJiAkZXZlbnQudGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygndWktZHJvcGRvd24tY2xlYXItaWNvbicpKSB7XG4gICAgICAgICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAkZXZlbnQuY2FuY2VsQnViYmxlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uU2hvd0hhbmRsZXIoZXZ0KSB7XG4gICAgICAgIHRoaXMub25TaG93LmVtaXQoe1xuICAgICAgICAgICAgY29tcG9uZW50OiB0aGlzLFxuICAgICAgICAgICAgZXZlbnQ6IGV2dFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbC5wYW5lbENsYXNzKSB7XG4gICAgICAgICAgICB0aGlzLmRyb3Bkb3duLm92ZXJsYXkuc3R5bGUud2lkdGggPSB0aGlzLmRyb3Bkb3duLm92ZXJsYXkuc3R5bGUubWluV2lkdGg7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLmNvbnRyb2wuaXNTZXJ2ZXJMb2FkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuY29udHJvbC52aXJ0dWFsU2Nyb2xsKSB7XG4gICAgICAgICAgICB0aGlzLnNjcm9sbENvbnRhaW5lciA9IHRoaXMuZHJvcGRvd24ub3ZlcmxheS5xdWVyeVNlbGVjdG9yKCcuY2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0Jyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNjcm9sbENvbnRhaW5lciA9IHRoaXMuZHJvcGRvd24ub3ZlcmxheS5xdWVyeVNlbGVjdG9yKCcucC1kcm9wZG93bi1pdGVtcy13cmFwcGVyJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zY3JvbGxDb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdGhpcy5oYW5kbGVTY3JvbGwpO1xuICAgICAgICBjb25zdCBkZWZhdWx0SW5wdXQgPSB0aGlzLmRyb3Bkb3duLmZpbHRlclZpZXdDaGlsZC5uYXRpdmVFbGVtZW50O1xuICAgICAgICB0aGlzLl9pbnNlcnRUZXh0Ym94QW5kRm9jdXMoZGVmYXVsdElucHV0KTtcbiAgICAgICAgdGhpcy5vblNob3dTbWFydEV2ZW50LmVtaXQoZXZ0KTtcbiAgICB9XG5cbiAgICBvblBhbmVsU2hvd0hhbmRsZXIoZXZ0KSB7XG4gICAgICAgIHRoaXMub25TaG93LmVtaXQoe1xuICAgICAgICAgICAgY29tcG9uZW50OiB0aGlzLFxuICAgICAgICAgICAgZXZlbnQ6IGV2dFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbC5wYW5lbENsYXNzKSB7XG4gICAgICAgICAgICB0aGlzLm11bHRpU2VsZWN0Lm92ZXJsYXkuc3R5bGUud2lkdGggPSB0aGlzLm11bHRpU2VsZWN0Lm92ZXJsYXkuc3R5bGUubWluV2lkdGg7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlQmVmb3JlID0gdGhpcy5fdmFsdWU7XG4gICAgICAgIGlmICghdGhpcy5jb250cm9sLmlzU2VydmVyTG9hZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2wudmlydHVhbFNjcm9sbCkge1xuICAgICAgICAgICAgdGhpcy5zY3JvbGxDb250YWluZXIgPSB0aGlzLm11bHRpU2VsZWN0Lm92ZXJsYXkucXVlcnlTZWxlY3RvcignLmNkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydCcpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zY3JvbGxDb250YWluZXIgPSB0aGlzLm11bHRpU2VsZWN0Lm92ZXJsYXkucXVlcnlTZWxlY3RvcignLnAtbXVsdGlzZWxlY3QtaXRlbXMtd3JhcHBlcicpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2Nyb2xsQ29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHRoaXMuaGFuZGxlU2Nyb2xsKTtcbiAgICAgICAgY29uc3QgZGVmYXVsdElucHV0ID0gdGhpcy5tdWx0aVNlbGVjdC5maWx0ZXJJbnB1dENoaWxkLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIHRoaXMuX2luc2VydFRleHRib3hBbmRGb2N1cyhkZWZhdWx0SW5wdXQpO1xuICAgICAgICB0aGlzLm9uU2hvd1NtYXJ0RXZlbnQuZW1pdChldnQpO1xuICAgIH1cblxuICAgIGhhbmRsZVNjcm9sbCA9IChldnQpID0+IHtcbiAgICAgICAgaWYgKGV2dC5zcmNFbGVtZW50LnNjcm9sbFRvcCA+IDBcbiAgICAgICAgICAgICYmICF0aGlzLmZpcnN0U2Nyb2xsXG4gICAgICAgICAgICAmJiBldnQuc3JjRWxlbWVudC5vZmZzZXRIZWlnaHQgKyBldnQuc3JjRWxlbWVudC5zY3JvbGxUb3AgPj0gZXZ0LnNyY0VsZW1lbnQuc2Nyb2xsSGVpZ2h0IC0gMVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMuZmlyc3RTY3JvbGwgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKHRoaXMudGltZW91dFNjcm9sbCkgY2xlYXJUaW1lb3V0KHRoaXMudGltZW91dFNjcm9sbCk7XG4gICAgICAgICAgICB0aGlzLnRpbWVvdXRTY3JvbGwgPSBzZXRUaW1lb3V0KGYgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZ2V0RGF0YU5leHRQYWdlKCk7XG4gICAgICAgICAgICB9LCAxNTApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5maXJzdFNjcm9sbCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHByaXZhdGUgZ2V0RGF0YU5leHRQYWdlKCkge1xuICAgICAgICBpZiAodGhpcy5sb2FkaW5nIHx8IHRoaXMucGFnZSA+PSB0aGlzLnRvdGFsUGFnZSkgcmV0dXJuO1xuICAgICAgICB0aGlzLnBhZ2UrKztcbiAgICAgICAgdGhpcy5fZ2V0RGF0YSh0aGlzLnBhZ2UpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2luc2VydFRleHRib3hBbmRGb2N1cyhkZWZhdWx0SW5wdXQpIHtcbiAgICAgICAgdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoJ2hpZGUnKTtcbiAgICAgICAgdGhpcy5idXR0b25TZXR0aW5nLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgnaGlkZScpO1xuICAgICAgICAvLyBkZWZhdWx0SW5wdXQuZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICBkZWZhdWx0SW5wdXQucGFyZW50RWxlbWVudC5pbnNlcnRCZWZvcmUodGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LCBkZWZhdWx0SW5wdXQpO1xuICAgICAgICBkZWZhdWx0SW5wdXQucGFyZW50RWxlbWVudC5pbnNlcnRCZWZvcmUodGhpcy5idXR0b25TZXR0aW5nLm5hdGl2ZUVsZW1lbnQsIGRlZmF1bHRJbnB1dCk7XG4gICAgICAgIHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgIH1cblxuICAgIGhhbmRsZUxvYWRlZCgpIHtcbiAgICAgICAgaWYgKHRoaXMuaW5wdXQpIHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgIH1cblxuICAgIG9uSGlkZUhhbmRsZXIoZXZ0KSB7XG4gICAgICAgIHRoaXMub25IaWRlLmVtaXQoe1xuICAgICAgICAgICAgY29tcG9uZW50OiB0aGlzLFxuICAgICAgICAgICAgZXZlbnQ6IGV2dFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRWYWx1ZUJlZm9yZSAhPSB0aGlzLl92YWx1ZSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuY29udHJvbC5tdWx0aXBsZSkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkVmFsdWVCZWZvcmUgPT0gbnVsbCAmJiB0aGlzLl92YWx1ZSAmJiB0aGlzLl92YWx1ZS5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWVCZWZvcmUgPSB0aGlzLl92YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBkYXRhRW1pdCA9IHtcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50OiB0aGlzLFxuICAgICAgICAgICAgICAgICAgICBldmVudDogZXZ0XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB0aGlzLm9uSGlkZVNtYXJ0RXZlbnQuZW1pdChkYXRhRW1pdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWVCZWZvcmUgPSB0aGlzLl92YWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnNjcm9sbENvbnRhaW5lcikge1xuICAgICAgICAgICAgdGhpcy5zY3JvbGxDb250YWluZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdGhpcy5oYW5kbGVTY3JvbGwpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaGFuZGxlRm9jdXMoZXZ0KSB7XG4gICAgICAgIHRoaXMub25Gb2N1cy5lbWl0KGV2dCk7XG4gICAgfVxuXG4gICAgaGFuZGxlQmx1cihldnQpIHtcbiAgICAgICAgdGhpcy5vbkJsdXIuZW1pdChldnQpO1xuICAgIH1cblxuICAgIHNob3dGb3JtUXVpY2tBZGQoKSB7XG4gICAgICAgIGNvbnN0IGZvcm1Nb2RlbCA9IG5ldyBDcnVkRm9ybURhdGEoKTtcbiAgICAgICAgbGV0IGluaXREYXRhID0gdGhpcy5jb250cm9sLmluaXREYXRhO1xuICAgICAgICBpZiAodHlwZW9mIGluaXREYXRhICE9ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBpbml0RGF0YSA9ICg8RnVuY3Rpb24+KHRoaXMuY29udHJvbC5pbml0RGF0YSkpKCk7XG4gICAgICAgIH1cbiAgICAgICAgZm9ybU1vZGVsLmRhdGEgPSB7IC4uLmluaXREYXRhIH07XG4gICAgICAgIGZvcm1Nb2RlbC5mb3JtU3RhdGUgPSBGb3JtU3RhdGUuQUREO1xuICAgICAgICB0aGlzLnF1aWNrQWRkRGlhbG9nTW9kZWwuZGF0YS5mb3JtTW9kZWwgPSBmb3JtTW9kZWw7XG4gICAgICAgIHRoaXMucXVpY2tBZGREaWFsb2dNb2RlbC5zaG93RWRpdEZvcm0gPSB0cnVlO1xuICAgIH1cblxuICAgIC8vIEsgc+G7rWEgdGjDoG5oIGZ1bmN0aW9uLCBwaOG6o2kgxJHhu4MgYXJyb3cgZnVuY3Rpb25cbiAgICBoYW5kbGVDYW5jZWwgPSAoKSA9PiB7XG4gICAgICAgIHRoaXMucXVpY2tBZGREaWFsb2dNb2RlbC5zaG93RWRpdEZvcm0gPSBmYWxzZTtcbiAgICB9O1xuXG4gICAgLy8gSyBz4butYSB0aMOgbmggZnVuY3Rpb24sIHBo4bqjaSDEkeG7gyBhcnJvdyBmdW5jdGlvblxuICAgIGhhbmRsZVNhdmVkID0gKCkgPT4ge1xuICAgICAgICB0aGlzLnF1aWNrQWRkRGlhbG9nTW9kZWwuc2hvd0VkaXRGb3JtID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2dldERhdGEoKTtcbiAgICB9O1xuXG4gICAgc2hvd0Zvcm1TZXR0aW5nKCkge1xuICAgICAgICBjb25zdCBmb3JtTW9kZWwgPSBuZXcgQ3J1ZEZvcm1EYXRhKCk7XG4gICAgICAgIGZvcm1Nb2RlbC5kYXRhID0ge307XG4gICAgICAgIGZvcm1Nb2RlbC5mb3JtU3RhdGUgPSBGb3JtU3RhdGUuQUREO1xuICAgICAgICB0aGlzLnNldHRpbmdEaWFsb2dNb2RlbC5kYXRhLmZvcm1Nb2RlbCA9IGZvcm1Nb2RlbDtcbiAgICAgICAgdGhpcy5zZXR0aW5nRGlhbG9nTW9kZWwuc2hvd0VkaXRGb3JtID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBoYW5kbGVTYXZlZFNldHRpbmcoKSB7XG4gICAgICAgIHRoaXMuc2V0dGluZ0RpYWxvZ01vZGVsLnNob3dFZGl0Rm9ybSA9IGZhbHNlO1xuICAgICAgICB0aGlzLmNyZWF0ZVNlYXJjaFN1YnNjcmlwdGlvbigpO1xuICAgIH1cblxuICAgIGNyZWF0ZVNlYXJjaFN1YnNjcmlwdGlvbigpIHtcbiAgICAgICAgY29uc3QgZGVsYXlTZWFyY2hUaW1lID0gdGhpcy5nZXREZWxheVNlYXJjaFRpbWUoKTtcbiAgICAgICAgaWYgKHRoaXMuc3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uID0gdGhpcy5rZXlVcC5waXBlKFxuICAgICAgICAgICAgbWFwKGV2ZW50ID0+IChldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWUpLFxuICAgICAgICAgICAgZGVib3VuY2VUaW1lKGRlbGF5U2VhcmNoVGltZSksXG4gICAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuX3VuU3Vic2NyaWJlQWxsKVxuICAgICAgICApLnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9nZXREYXRhKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGNoZWNrRGlzYWJsZWQoY29udHJvbDogRm9ybUNvbnRyb2xCYXNlKSB7XG4gICAgICAgIHJldHVybiAodGhpcy5kYXRhLl9zdGF0dXMgJiYgdGhpcy5kYXRhLl9zdGF0dXNbY29udHJvbC5maWVsZF0gJiYgdGhpcy5kYXRhLl9zdGF0dXNbY29udHJvbC5maWVsZF0uZGlzYWJsZWQgPT09IHRydWUpIHx8IGNvbnRyb2wuZGlzYWJsZWQ7XG4gICAgfVxuXG4gICAgZ2V0SXRlbVNlbGVjdGVkTGFiZWwoaXRlbSkge1xuICAgICAgICBpZiAodGhpcy5jb250cm9sLmZ1bmNHZXRMYWJlbCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29udHJvbC5mdW5jR2V0TGFiZWwoaXRlbSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGl0ZW1bdGhpcy5jb250cm9sLmRpc3BsYXlGaWVsZF0gfHwgaXRlbVsnbGFiZWwnXTtcbiAgICB9XG59XG4iXX0=
|
|
989
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdG54LXNoYXJlZC9zcmMvbGliL2NvbXBvbmVudHMvZHJvcGRvd24vZHJvcGRvd24uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQ0gsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osUUFBUSxFQUNSLEtBQUssRUFHTCxNQUFNLEVBQ04sU0FBUyxFQUNaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzVELE9BQU8sRUFBRSxPQUFPLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxZQUFZLEVBQUUsb0JBQW9CLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXBGLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFFNUQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDdEYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxxQkFBcUIsRUFBbUIsUUFBUSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDeEgsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2hELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUN2RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFB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O3FCQUNOLE1BQU07K0JBQ04sTUFBTTtxQkFDTixNQUFNOytCQUNOLE1BQU07c0JBQ04sTUFBTTtxQkFDTixNQUFNO3NCQUNOLE1BQU07aUNBQ04sTUFBTTswQkFDTixNQUFNOzBCQUNOLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENvbXBvbmVudCxcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBJbmplY3RvcixcbiAgICBJbnB1dCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE91dHB1dCxcbiAgICBWaWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEZXZpY2VEZXRlY3RvclNlcnZpY2UgfSBmcm9tICduZ3gtZGV2aWNlLWRldGVjdG9yJztcbmltcG9ydCB7IFN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgbWFwLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBTZWxlY3RJdGVtIH0gZnJvbSAndG4tY3VzdG9tLXByaW1lbmcvYXBpJztcbmltcG9ydCB7IERyb3Bkb3duIH0gZnJvbSAndG4tY3VzdG9tLXByaW1lbmcvZHJvcGRvd24nO1xuaW1wb3J0IHsgTXVsdGlTZWxlY3QgfSBmcm9tICd0bi1jdXN0b20tcHJpbWVuZy9tdWx0aXNlbGVjdCc7XG5cbmltcG9ydCB7IENvbXBvbmVudENvbnRleHRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vYXBwLWNvbnRleHQvY29tcG9uZW50LWNvbnRleHQuc2VydmljZSc7XG5pbXBvcnQgeyBDb21wb25lbnRCYXNlIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9iYXNlL2NvbXBvbmVudC1iYXNlJztcbmltcG9ydCB7IEZvcm1TdGF0ZSB9IGZyb20gJy4uLy4uL2NsYXNzZXMvY29uc3RhbnRzJztcbmltcG9ydCB7IENydWRGb3JtRGF0YSwgRGlhbG9nTW9kZWwsIERyb3Bkb3duQ29udHJvbFNjaGVtYSwgRm9ybUNvbnRyb2xCYXNlLCBPcGVyYXRvciB9IGZyb20gJy4uLy4uL2NsYXNzZXMvZm9ybS1zY2hlbWEnO1xuaW1wb3J0IHsgRmlsdGVyIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dyaWQtaW5mbyc7XG5pbXBvcnQgeyBDcnVkU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2NydWQuc2VydmljZSc7XG5pbXBvcnQgeyBNYXN0ZXJEYXRhU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL21hc3Rlci1kYXRhLnNlcnZpY2UnO1xuaW1wb3J0IHsgYXBwZW5kRGVmYXVsdEZpbHRlciB9IGZyb20gJy4uLy4uL3V0aWxzL2NvbW1vbic7XG5pbXBvcnQgeyBLZXlTdG9yYWdlRHJvcGRvd25TZXR0aW5nIH0gZnJvbSAnLi9tb2RlbHMvY29uc3QnO1xuXG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnZHJvcGRvd24nLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9kcm9wZG93bi5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vZHJvcGRvd24uY29tcG9uZW50LnNjc3MnXSxcbiAgICBwcm92aWRlcnM6IFtDb21wb25lbnRDb250ZXh0U2VydmljZV1cbn0pXG5leHBvcnQgY2xhc3MgRHJvcGRvd25Db21wb25lbnQgZXh0ZW5kcyBDb21wb25lbnRCYXNlIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAgIEBWaWV3Q2hpbGQoJ2VsJykgZWw6IEVsZW1lbnRSZWY7XG4gICAgQFZpZXdDaGlsZCgnaW5wdXRNYXNrJykgaW5wdXQ6IEVsZW1lbnRSZWY7XG4gICAgQFZpZXdDaGlsZCgnYnV0dG9uU2V0dGluZycpIGJ1dHRvblNldHRpbmc6IEVsZW1lbnRSZWY7XG4gICAgQFZpZXdDaGlsZChEcm9wZG93bikgZHJvcGRvd246IERyb3Bkb3duO1xuICAgIEBWaWV3Q2hpbGQoTXVsdGlTZWxlY3QpIG11bHRpU2VsZWN0OiBNdWx0aVNlbGVjdDtcblxuICAgIEBJbnB1dCgpIHNldCBzaG93Q2xlYXIodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgaWYgKCF0aGlzLmNvbnRyb2wuc2hvd0NsZWFyKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2wuc2hvd0NsZWFyID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBASW5wdXQoKSBkaXNhYmxlRGlzcGxheUZpZWxkU2VydmVyU2VhcmNoID0gZmFsc2U7XG5cbiAgICBASW5wdXQoKSBzZXQgZmlsdGVyKHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIGlmICghdGhpcy5jb250cm9sLmZpbHRlcikge1xuICAgICAgICAgICAgdGhpcy5jb250cm9sLmZpbHRlciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgQElucHV0KCkgY29udHJvbDogRHJvcGRvd25Db250cm9sU2NoZW1hID0gbmV3IERyb3Bkb3duQ29udHJvbFNjaGVtYSgpO1xuICAgIEBJbnB1dCgpIGRlZmF1bHRMYWJlbCA9ICcnO1xuICAgIEBJbnB1dCgpIGFwcGVuZFRvOiBhbnkgPSAnYm9keSc7XG5cbiAgICBASW5wdXQoKSBzZXQgZGF0YVNvdXJjZSh2YWx1ZTogYW55W10pIHtcbiAgICAgICAgY29uc3QgZGF0YVNvdXJjZSA9IFtdO1xuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiB2YWx1ZSkge1xuICAgICAgICAgICAgICAgIGRhdGFTb3VyY2UucHVzaCh0aGlzLnJlU3RydWN0dXJlSXRlbU9iamVjdChpdGVtKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jb21iaW5lRGF0YVNvdXJjZShkYXRhU291cmNlLCAxKTtcbiAgICAgICAgdGhpcy5jaGVja0FuZEZpcmVFdmVudCgpO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCB2YWx1ZSh2YWx1ZTogYW55KSB7XG4gICAgICAgIGlmICh0aGlzLl9yZXR1cm5WYWx1ZSAhPSB2YWx1ZSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuY29udHJvbC5tdWx0aXBsZSAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl92YWx1ZSA9IFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGZpcmUgZXZlbnQgxJFp4buBdSBjaOG7iW5oIHZhbHVlIHThu6sgW3ZhbHVlOiBndWlkXSA9PiB7W2ZpZWxkVmFsdWVdOiBbdmFsdWU6IGd1aWRdLCAuLi5bMSBz4buRIHRyxrDhu51uZyBraMOhYyBu4buvYSB0cm9uZyBkYXRhc291cmNlXX1cbiAgICAgICAgICAgIHRoaXMuc2V0U2VsZWN0ZWRWYWx1ZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgQElucHV0KCkgZGF0YTogYW55ID0ge307XG5cbiAgICBkZWZhdWx0U2VsZWN0ZWRTdHlsZUNsYXNzID0gJ2N1c3RvbS1zZWxlY3QtaXRlbSc7XG4gICAgX2l0ZW1TZWxlY3RlZFN0eWxlQ2xhc3MgPSB0aGlzLmRlZmF1bHRTZWxlY3RlZFN0eWxlQ2xhc3M7XG4gICAgQElucHV0KCkgc2V0IGl0ZW1TZWxlY3RlZFN0eWxlQ2xhc3ModmFsdWU6IHN0cmluZykge1xuICAgICAgICB0aGlzLl9pdGVtU2VsZWN0ZWRTdHlsZUNsYXNzID0gYCR7dGhpcy5kZWZhdWx0U2VsZWN0ZWRTdHlsZUNsYXNzfSAke3ZhbHVlfWA7XG5cbiAgICB9XG5cbiAgICBAT3V0cHV0KCkgb25Jbml0ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gICAgQE91dHB1dCgpIG9uQ2hhbmdlZDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgICBAT3V0cHV0KCkgb25Db2xsYXBzZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgICBAT3V0cHV0KCkgb25FeHBhbmQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gICAgQE91dHB1dCgpIG9uRHJvcGRvd25DbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAgIEBPdXRwdXQoKSBvblNob3cgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgICBAT3V0cHV0KCkgb25TaG93U21hcnRFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAgIEBPdXRwdXQoKSBvbkhpZGUgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgICBAT3V0cHV0KCkgb25IaWRlU21hcnRFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAgIEBPdXRwdXQoKSBvbkZvY3VzID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gICAgQE91dHB1dCgpIG9uQmx1ciA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAgIEBPdXRwdXQoKSBvblJlYWR5ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gICAgQE91dHB1dCgpIG9uRGF0YVNvdXJjZUxvYWRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAgIEBPdXRwdXQoKSB2YWx1ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAgIEBPdXRwdXQoKSBhZGp1c3RWYWx1ZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gICAgX3VuU3Vic2NyaWJlQWxsID0gbmV3IFN1YmplY3Q8YW55PigpO1xuICAgIGRhdGFTb3VyY2VJbnRlcm5hbCA9IFtdO1xuICAgIGRhdGFTb3VyY2VTZWxlY3RlZCA9IFtdO1xuICAgIHNlbGVjdGVkVmFsdWVCZWZvcmU6IGFueTtcbiAgICBfdmFsdWU6IGFueTtcbiAgICBfcmV0dXJuVmFsdWU6IGFueTtcbiAgICBmdW5jUmV0dXJuVmFsdWU6ICh2YWx1ZSkgPT4ge30gPSB2YWx1ZSA9PiB2YWx1ZTtcbiAgICB0b29sdGlwOiBzdHJpbmc7XG4gICAgaGlkZVRyYW5zaXRpb25PcHRpb25zID0gJzE5NW1zIGVhc2UtaW4nO1xuICAgIHNob3dUcmFuc2l0aW9uT3B0aW9ucyA9ICcyMjVtcyBlYXNlLW91dCc7XG5cbiAgICBpbnB1dEVsbTogYW55O1xuICAgIGF1dG9mb2N1c1NlbGVjdGVkSXRlbTogYm9vbGVhbiA9IHRydWU7XG4gICAgZ2V0RmlsdGVyT25TZXJ2ZXJTZWFyY2g6IEZ1bmN0aW9uO1xuICAgIHZhbHVlU2VhcmNoU2VydmVyID0gJyc7XG4gICAga2V5VXAgPSBuZXcgU3ViamVjdDxLZXlib2FyZEV2ZW50PigpO1xuICAgIHN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICAgIF9oYXNMb2FkZWREYXRhc291cmNlID0gZmFsc2U7XG5cbiAgICBxdWlja0FkZERpYWxvZ01vZGVsID0gbmV3IERpYWxvZ01vZGVsKHt9KTtcbiAgICBzZXR0aW5nRGlhbG9nTW9kZWwgPSBuZXcgRGlhbG9nTW9kZWwoe1xuICAgICAgICBoZWFkZXI6ICdD4bqldSBow6xuaCBkcm9wZG93bidcbiAgICB9KTtcblxuICAgIGZsYXNoQ2FjaGVQYXJlbnQ6IGFueVtdID0gW107XG4gICAgZmlsdGVyRnJvbVBhcmVudHM6IEZpbHRlcltdID0gW107XG4gICAgZHJvcGRvd25PcHRpb25zID0gW107XG4gICAgZGVsYXlGaWx0ZXI6IG51bWJlciA9IDEwMDtcbiAgICBzY3JvbGxDb250YWluZXI6IGFueTtcbiAgICB0aW1lb3V0U2Nyb2xsOiBhbnk7XG4gICAgZmlyc3RTY3JvbGw6IGFueSA9IHRydWU7XG4gICAgbG9hZGluZyA9IGZhbHNlO1xuICAgIHBhZ2U6IG51bWJlciA9IDE7XG4gICAgdG90YWxQYWdlOiBudW1iZXIgPSAyO1xuICAgIGZpZWxkU3VEdW5nID0gJ3N1RHVuZyc7XG4gICAgZGlzYWJsZUZpZWxkTm90VXNlID0gZmFsc2U7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBfZGV2aWNlRGV0ZWN0b3JTZXJ2aWNlOiBEZXZpY2VEZXRlY3RvclNlcnZpY2UsXG4gICAgICAgIGluamVjdG9yOiBJbmplY3RvcixcbiAgICAgICAgX2NydWRTZXJ2aWNlOiBDcnVkU2VydmljZVxuICAgICkge1xuICAgICAgICBzdXBlcihpbmplY3Rvcik7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2wucXVpY2tBZGQpIHtcbiAgICAgICAgICAgIHRoaXMucXVpY2tBZGREaWFsb2dNb2RlbC5oZWFkZXIgPSBgVGjDqm0gbeG7m2kgJHt0aGlzLmNvbnRyb2wubGFiZWx9YDtcbiAgICAgICAgICAgIHRoaXMucXVpY2tBZGREaWFsb2dNb2RlbC5wb3B1cFNpemUgPSB0aGlzLmNvbnRyb2wucG9wdXBTaXplO1xuICAgICAgICAgICAgdGhpcy5xdWlja0FkZERpYWxvZ01vZGVsLmRhdGEgPSB7XG4gICAgICAgICAgICAgICAgZm9ybU1vZGVsOiBuZXcgQ3J1ZEZvcm1EYXRhKClcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuY29udHJvbC5maXRQYW5lbCkge1xuICAgICAgICAgICAgY29uc3QgY2xhc3NXcmFwQ29udGVudCA9ICctLXdyYXAtY29udGVudCc7XG4gICAgICAgICAgICBpZiAoIXRoaXMuY29udHJvbC5wYW5lbENsYXNzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb250cm9sLnBhbmVsQ2xhc3MgPSBjbGFzc1dyYXBDb250ZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb250cm9sLnBhbmVsQ2xhc3MgKz0gYCAke2NsYXNzV3JhcENvbnRlbnR9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNvbnRyb2wuX2NvbXBvbmVudCA9IHRoaXM7XG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2wucGxhY2Vob2xkZXIgPT0gbnVsbCAmJiB0aGlzLmNvbnRyb2wubXVsdGlwbGUpIHtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbC5wbGFjZWhvbGRlciA9ICdDaMawYSBjaOG7jW4gYuG6o24gZ2hpJztcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5jb250cm9sLnRvb2x0aXAgJiYgdGhpcy5jb250cm9sLnNob3dUb29sdGlwKSB7XG4gICAgICAgICAgICB0aGlzLnRvb2x0aXAgPSB0aGlzLmNvbnRyb2wudG9vbHRpcDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNldERlZmF1bHRTZXR0aW5nKCk7XG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2wuYmFzZVNlcnZpY2UpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbnRyb2wuaXNTZXJ2ZXJMb2FkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb250cm9sLm1heEl0ZW1EaXNwbGF5ID0gOTk5OTtcbiAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZUZpbHRlckZ1bmN0aW9uKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5jcmVhdGVTZWFyY2hTdWJzY3JpcHRpb24oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLmNvbnRyb2wubG9hZE9uSW5pdCAmJiAhdGhpcy5jb250cm9sLmlzTGF6eUxvYWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9nZXREYXRhKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5jb250cm9sLmJhc2VTZXJ2aWNlIGluc3RhbmNlb2YgTWFzdGVyRGF0YVNlcnZpY2UpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRyb2wubWF4SXRlbURpc3BsYXkgPSA5OTk5O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5kaXNhYmxlRmllbGROb3RVc2UgPSB0aGlzLmNvbnRyb2wuYmFzZVNlcnZpY2VbJ2Rpc2FibGVGaWVsZE5vdFVzZSddO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLl9kZXZpY2VEZXRlY3RvclNlcnZpY2UuaXNEZXNrdG9wKCkpIHtcbiAgICAgICAgICAgIHRoaXMuaGlkZVRyYW5zaXRpb25PcHRpb25zID0gdGhpcy5zaG93VHJhbnNpdGlvbk9wdGlvbnMgPSAnJztcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5jb250cm9sLm9uSW5pdCkge1xuICAgICAgICAgICAgdGhpcy5jb250cm9sLm9uSW5pdCh0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm9uSW5pdC5lbWl0KHRoaXMpO1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLl91blN1YnNjcmliZUFsbC5jb21wbGV0ZSgpO1xuICAgIH1cblxuICAgIHNldERlZmF1bHRTZXR0aW5nKCkge1xuICAgICAgICBpZiAodGhpcy5jb250cm9sLmlzVHJlZSB8fCB0aGlzLmNvbnRyb2wuaXNUcmVlQmFzZU1vZGVsKSB7XG4gICAgICAgICAgICB0aGlzLmRlbGF5RmlsdGVyID0gMjAwO1xuICAgICAgICAgICAgaWYgKCF0aGlzLmNvbnRyb2wuZnVuY0dldExhYmVsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb250cm9sLmZ1bmNHZXRMYWJlbCA9IGl0ZW0gPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXRlbS5fcHJlZml4ICsgaXRlbVt0aGlzLmNvbnRyb2wuZGlzcGxheUZpZWxkXTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmNvbnRyb2wuZnVuY0dldExhYmVsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb250cm9sLmZ1bmNHZXRMYWJlbCA9IGl0ZW0gPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXRlbVt0aGlzLmNvbnRyb2wuZGlzcGxheUZpZWxkXTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLmNvbnRyb2wuZ2VuZXJhdGVUb29sdGlwICYmICF0aGlzLmNvbnRyb2wubXVsdGlwbGUpIHtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbC5nZW5lcmF0ZVRvb2x0aXAgPSB0aGlzLmNvbnRyb2wuZnVuY0dldExhYmVsO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuY29udHJvbC5yZXR1cm5UeXBlID09ICd2YWx1ZScpIHtcbiAgICAgICAgICAgIHRoaXMuZnVuY1JldHVyblZhbHVlID0gKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlID09IG51bGwpIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvbnRyb2wubXVsdGlwbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLm1hcChpdGVtID0+IGl0ZW1bdGhpcy5jb250cm9sLnZhbHVlRmllbGRdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlW3RoaXMuY29udHJvbC52YWx1ZUZpZWxkXTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmZ1bmNSZXR1cm5WYWx1ZSA9IHZhbHVlID0+IHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl92YWx1ZSAmJiB0aGlzLmRhdGFTb3VyY2VJbnRlcm5hbCkge1xuICAgICAgICAgICAgdGhpcy5nZXRWYWx1ZVJldHVybigpO1xuICAgICAgICB9XG5cbiAgICB9XG5cbiAgICBnZXREZWxheVNlYXJjaFRpbWUoKSB7XG4gICAgICAgIGNvbnN0IGpzRHJvcGRvd25TZXR0aW5nID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oS2V5U3RvcmFnZURyb3Bkb3duU2V0dGluZyk7XG4gICAgICAgIGxldCByZXN1bHQgPSA1MDA7XG4gICAgICAgIGlmIChqc0Ryb3Bkb3duU2V0dGluZykge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb25zdCBkcm9wZG93blNldHRpbmcgPSBKU09OLnBhcnNlKGpzRHJvcGRvd25TZXR0aW5nKTtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBkcm9wZG93blNldHRpbmcuZGVsYXlTZWFyY2hUaW1lO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFyZXN1bHQgfHwgaXNOYU4ocmVzdWx0KSB8fCByZXN1bHQgPCAyMDApIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IDIwMDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIGdldEFsbFBhcmVudChyZXN1bHQsIHBhcmVudElkKSB7XG4gICAgICAgIGlmICh0aGlzLmZsYXNoQ2FjaGVQYXJlbnQuc29tZShxID0+IHEudmFsdWUuaWQgPT0gcGFyZW50SWQpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaXRlbVBhcmVudCA9IHRoaXMuZHJvcGRvd25PcHRpb25zLmZpbmQocSA9PiBxLnZhbHVlLmlkID09IHBhcmVudElkKTtcbiAgICAgICAgaWYgKGl0ZW1QYXJlbnQgIT0gbnVsbCkge1xuICAgICAgICAgICAgY29uc3QgaXRlbUFkZCA9IHtcbiAgICAgICAgICAgICAgICAuLi5pdGVtUGFyZW50LFxuICAgICAgICAgICAgICAgIGRpc2FibGVkOiB0aGlzLmNvbnRyb2wuZGlzYWJsZWRQYXJlbnRJdGVtXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmVzdWx0LnB1c2goaXRlbUFkZCk7XG4gICAgICAgICAgICBjb25zdCBpbmRleEV4aXN0ID0gdGhpcy5mbGFzaENhY2hlUGFyZW50LmZpbmRJbmRleChxID0+IHEudmFsdWUuX2xldmVsID09IGl0ZW1BZGQudmFsdWUuX2xldmVsKTtcbiAgICAgICAgICAgIGlmIChpbmRleEV4aXN0ID4gLTEpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZsYXNoQ2FjaGVQYXJlbnRbaW5kZXhFeGlzdF0gPSBpdGVtQWRkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5mbGFzaENhY2hlUGFyZW50LnB1c2goaXRlbUFkZCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEzhuqV5IHRow6ptIGLhuqNuIGdoaSBjaGEgY+G7p2EgYuG6o24gZ2hpIGNoYVxuICAgICAgICAgICAgcGFyZW50SWQgPSB0aGlzLmdldFBhcmVudElkRnJvbUl0ZW0oaXRlbVBhcmVudCk7XG4gICAgICAgICAgICBpZiAocGFyZW50SWQgIT0gdGhpcy5ndWlkRW1wdHkgJiYgcGFyZW50SWQgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZ2V0QWxsUGFyZW50KHJlc3VsdCwgcGFyZW50SWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgYWxyZWFkeUhhc1BhcmVudChvcHRpb25zOiBhbnlbXSwgaW5kZXhTdGFydDogbnVtYmVyLCBwYXJlbnRJZDogc3RyaW5nLCBsZXZlbDogbnVtYmVyKSB7XG4gICAgICAgIHdoaWxlIChpbmRleFN0YXJ0ID4gLTEpIHtcbiAgICAgICAgICAgIGlmIChvcHRpb25zW2luZGV4U3RhcnRdLnZhbHVlLmlkID09IHBhcmVudElkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChvcHRpb25zW2luZGV4U3RhcnRdLnZhbHVlLmxldmVsID09IGxldmVsICYmIHRoaXMuZ2V0UGFyZW50SWRGcm9tSXRlbShvcHRpb25zW2luZGV4U3RhcnRdKSAhPSBwYXJlbnRJZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmZsYXNoQ2FjaGVQYXJlbnQuc29tZShxID0+IHEudmFsdWUuaWQgPT0gcGFyZW50SWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaW5kZXhTdGFydC0tO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFBhcmVudElkRnJvbUl0ZW0oaXRlbSkge1xuICAgICAgICByZXR1cm4gaXRlbS52YWx1ZVt0aGlzLmNvbnRyb2wuZmllbGRUcmVlXTtcbiAgICB9XG5cbiAgICBtb2RpZnlPcHRpb25XaGVuRmlsdGVyID0gKG9wdGlvbnMpID0+IHtcbiAgICAgICAgdGhpcy5kcm9wZG93bk9wdGlvbnMgPSB0aGlzLmRyb3Bkb3duLl9vcHRpb25zO1xuICAgICAgICB0aGlzLl9tb2RpZnlPcHRpb25XaGVuRmlsdGVyKG9wdGlvbnMpO1xuICAgIH07XG5cbiAgICBtb2RpZnlPcHRpb25XaGVuRmlsdGVyTXVsdGlwbGUgPSAob3B0aW9ucykgPT4ge1xuICAgICAgICB0aGlzLmRyb3Bkb3duT3B0aW9ucyA9IHRoaXMubXVsdGlTZWxlY3QuX29wdGlvbnM7XG4gICAgICAgIHRoaXMuX21vZGlmeU9wdGlvbldoZW5GaWx0ZXIob3B0aW9ucyk7XG4gICAgfTtcblxuICAgIF9tb2RpZnlPcHRpb25XaGVuRmlsdGVyKG9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5mbGFzaENhY2hlUGFyZW50ID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3B0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgcGFyZW50SWQgPSB0aGlzLmdldFBhcmVudElkRnJvbUl0ZW0ob3B0aW9uc1tpXSk7XG4gICAgICAgICAgICBpZiAocGFyZW50SWQgIT0gdGhpcy5ndWlkRW1wdHkgJiYgcGFyZW50SWQgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhcmVudHMgPSBbXTtcbiAgICAgICAgICAgICAgICAvLyBLaeG7g20gdHJhIGPDoWMgYuG6o24gZ2hpIHBow61hIHRyxrDhu5tjIHhlbSDEkcOjIGPDsyBi4bqjbiBnaGkgY2hhIGNoxrBhIChDaG8gxJHhur9uIGdoaSBn4bq3cCBi4bqjbiBnaGkgY8O5bmcgbGV2ZWwgbmjGsG5nIGtow6FjIHBhcmVudElkKVxuICAgICAgICAgICAgICAgIGNvbnN0IGhhc1BhcmVudCA9IHRoaXMuYWxyZWFkeUhhc1BhcmVudChvcHRpb25zLCBpIC0gMSwgcGFyZW50SWQsIG9wdGlvbnNbaV0ubGV2ZWwpO1xuICAgICAgICAgICAgICAgIGlmICghaGFzUGFyZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0QWxsUGFyZW50KHBhcmVudHMsIHBhcmVudElkKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmVudHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5zcGxpY2UoaSwgMCwgLi4ucGFyZW50cy5yZXZlcnNlKCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaSArPSBwYXJlbnRzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNyZWF0ZUZpbHRlckZ1bmN0aW9uKCkge1xuICAgICAgICBpZiAodGhpcy5jb250cm9sLnNlYXJjaEZpZWxkID09IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbC5zZWFyY2hGaWVsZCA9IFtdO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5jb250cm9sLmRpc2FibGVEaXNwbGF5RmllbGRTZXJ2ZXJTZWFyY2gpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5jb250cm9sLnNlYXJjaEZpZWxkLnNvbWUoaXRlbSA9PiBpdGVtID09IHRoaXMuY29udHJvbC5kaXNwbGF5RmllbGQpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb250cm9sLnNlYXJjaEZpZWxkLnB1c2godGhpcy5jb250cm9sLmRpc3BsYXlGaWVsZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuY29udHJvbC5zZWFyY2hGaWVsZC5sZW5ndGggPT0gMSkge1xuICAgICAgICAgICAgdGhpcy5nZXRGaWx0ZXJPblNlcnZlclNlYXJjaCA9IHZhbHVlID0+ICh7XG4gICAgICAgICAgICAgICAgZmllbGQ6IHRoaXMuY29udHJvbC5zZWFyY2hGaWVsZFswXSwgb3BlcmF0b3I6IE9wZXJhdG9yLmNvbnRhaW4sIHZhbHVlOiBKU09OLnN0cmluZ2lmeSh2YWx1ZSlcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5nZXRGaWx0ZXJPblNlcnZlclNlYXJjaCA9IHZhbHVlID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBuZXcgRmlsdGVyKHtcbiAgICAgICAgICAgICAgICAgICAgbG9naWM6ICdvcicsXG4gICAgICAgICAgICAgICAgICAgIGZpbHRlcnM6IFtdXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgY29uc3QgdG1wVmFsdWUgPSBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBmaWVsZFNlYXJjaCBvZiB0aGlzLmNvbnRyb2wuc2VhcmNoRmllbGQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmZpbHRlcnMucHVzaCh7IGZpZWxkOiBmaWVsZFNlYXJjaCwgb3BlcmF0b3I6IE9wZXJhdG9yLmNvbnRhaW4sIHZhbHVlOiB0bXBWYWx1ZSB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXREYXRhKGZpbHRlclBhcmVudHM/OiBGaWx0ZXJbXSkge1xuICAgICAgICBpZiAoIWZpbHRlclBhcmVudHMpIGZpbHRlclBhcmVudHMgPSBbXTtcbiAgICAgICAgdGhpcy5maWx0ZXJGcm9tUGFyZW50cyA9IGZpbHRlclBhcmVudHM7XG4gICAgICAgIHRoaXMuX2dldERhdGEoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNvbWJpbmVEYXRhU291cmNlKGRhdGFTb3VyY2U6IGFueVtdLCBwYWdlOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5hdXRvZm9jdXNTZWxlY3RlZEl0ZW0gPSB0cnVlO1xuICAgICAgICBpZiAoIWRhdGFTb3VyY2UpIGRhdGFTb3VyY2UgPSBbXTtcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbC5pc1NlcnZlckxvYWQpIHtcbiAgICAgICAgICAgIGlmIChwYWdlID4gMSkge1xuICAgICAgICAgICAgICAgIHRoaXMuYXV0b2ZvY3VzU2VsZWN0ZWRJdGVtID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZHJvcGRvd24pIHRoaXMuZHJvcGRvd24uc2VsZWN0ZWRPcHRpb25VcGRhdGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgLy8gQXBwZW5kIHRow6ptIGRhdGFzb3VyY2VcbiAgICAgICAgICAgICAgICBjb25zdCB0bXBEYXRhU291cmNlID0gWy4uLnRoaXMuZGF0YVNvdXJjZUludGVybmFsXTtcbiAgICAgICAgICAgICAgICB0aGlzLmFwcGVuZERhdGFTb3VyY2UodG1wRGF0YVNvdXJjZSwgZGF0YVNvdXJjZSk7XG4gICAgICAgICAgICAgICAgaWYgKHRtcERhdGFTb3VyY2UubGVuZ3RoID09IHRoaXMuZGF0YVNvdXJjZUludGVybmFsLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXREYXRhTmV4dFBhZ2UoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhU291cmNlSW50ZXJuYWwgPSB0bXBEYXRhU291cmNlO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHRtcERhdGFTb3VyY2UgPSBbLi4uZGF0YVNvdXJjZV07XG4gICAgICAgICAgICBpZiAoKHRoaXMuY29udHJvbC5tdWx0aXBsZSAmJiB0aGlzLl92YWx1ZSAmJiB0aGlzLl92YWx1ZS5sZW5ndGgpXG4gICAgICAgICAgICAgICAgfHwgKCF0aGlzLmNvbnRyb2wubXVsdGlwbGUgJiYgdGhpcy5fdmFsdWUpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5kYXRhU291cmNlU2VsZWN0ZWQgJiYgdGhpcy5kYXRhU291cmNlU2VsZWN0ZWQubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2hhc0xvYWRlZERhdGFzb3VyY2UgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMudmFsdWVTZWFyY2hTZXJ2ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYXBwZW5kRGF0YVNvdXJjZSh0bXBEYXRhU291cmNlLCB0aGlzLmRhdGFTb3VyY2VTZWxlY3RlZCwgLTEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5faGFzTG9hZGVkRGF0YXNvdXJjZSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmRhdGFTb3VyY2VJbnRlcm5hbCA9IHRtcERhdGFTb3VyY2U7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRhdGFTb3VyY2VJbnRlcm5hbCA9IGRhdGFTb3VyY2U7XG4gICAgICAgICAgICBpZiAodGhpcy5kYXRhU291cmNlSW50ZXJuYWwubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2hhc0xvYWRlZERhdGFzb3VyY2UgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVGaWVsZE5vdFVzZSAmJiB0aGlzLmNvbnRyb2wuaXNBbGxvd0Rpc2FibGVkXG4gICAgICAgICAgICAmJiB0aGlzLmRhdGFTb3VyY2VJbnRlcm5hbC5zb21lKHAgPT4gcC52YWx1ZS5oYXNPd25Qcm9wZXJ0eSh0aGlzLmZpZWxkU3VEdW5nKSkpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZUludGVybmFsLmZvckVhY2goaXRlbSA9PiBpdGVtLmluYWN0aXZlID0gIWl0ZW0udmFsdWVbdGhpcy5maWVsZFN1RHVuZ10pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhcHBlbmREYXRhU291cmNlKGRlc3RTb3VyY2U6IGFueVtdLCBkYXRhU291cmNlOiBhbnlbXSwgZGlyZWN0aW9uOiBudW1iZXIgPSAxKSB7XG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2wuaXNUcmVlKSB7XG4gICAgICAgICAgICBkYXRhU291cmNlLmZvckVhY2goc291cmNlID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IGRlc3RTb3VyY2UuZmluZEluZGV4KHEgPT4gcS52YWx1ZVt0aGlzLmNvbnRyb2wuZmllbGRNYVBoYW5DYXBdID4gc291cmNlLnZhbHVlW3RoaXMuY29udHJvbC5maWVsZE1hUGhhbkNhcF0pO1xuICAgICAgICAgICAgICAgIGlmIChpbmRleCA9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBLaeG7g20gdHJhIGLhuqNuIGdoaSBjdeG7kWkgY8O5bmcgbMOgIG7DsyB0aMOsIGsgaW5zZXJ0XG4gICAgICAgICAgICAgICAgICAgIGlmIChkZXN0U291cmNlLmxlbmd0aCA+IDBcbiAgICAgICAgICAgICAgICAgICAgICAgICYmIGRlc3RTb3VyY2VbZGVzdFNvdXJjZS5sZW5ndGggLSAxXS52YWx1ZVt0aGlzLmNvbnRyb2wudmFsdWVGaWVsZF0gPT0gc291cmNlLnZhbHVlW3RoaXMuY29udHJvbC52YWx1ZUZpZWxkXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGRlc3RTb3VyY2UucHVzaChzb3VyY2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChpbmRleCA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlc3RTb3VyY2UudW5zaGlmdChzb3VyY2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gTuG6v3UgYuG6o24gZ2hpIG5nYXkgdHLGsOG7m2MgduG7iyB0csOtIGPhuqduIGluc2VydCBsw6AgYuG6o24gZ2hpIGhp4buHbiB04bqhaSB0aMOsIGsgaW5zZXJ0XG4gICAgICAgICAgICAgICAgICAgIGlmIChkZXN0U291cmNlW2luZGV4IC0gMV0udmFsdWVbdGhpcy5jb250cm9sLnZhbHVlRmllbGRdID09IHNvdXJjZS52YWx1ZVt0aGlzLmNvbnRyb2wudmFsdWVGaWVsZF0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc291cmNlLmRpc2FibGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFNvdXJjZVtpbmRleCAtIDFdLmRpc2FibGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZGVzdFNvdXJjZS5zcGxpY2UoaW5kZXgsIDAsIHNvdXJjZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBkYXRhU291cmNlLmZvckVhY2goc291cmNlID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IGRlc3RTb3VyY2UuZmluZEluZGV4KHEgPT4gcS52YWx1ZVt0aGlzLmNvbnRyb2wudmFsdWVGaWVsZF0gPT0gc291cmNlLnZhbHVlW3RoaXMuY29udHJvbC52YWx1ZUZpZWxkXSk7XG4gICAgICAgICAgICAgICAgaWYgKGluZGV4ID09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkaXJlY3Rpb24gPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RTb3VyY2UudW5zaGlmdChzb3VyY2UpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFNvdXJjZS5wdXNoKHNvdXJjZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNoZWNrQW5kRmlyZUV2ZW50KGZvcmNlOiBib29sZWFuID0gZmFsc2UpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9oYXNMb2FkZWREYXRhc291cmNlKSB7XG4gICAgICAgICAgICBpZiAoZm9yY2UpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9uUmVhZHkuZW1pdCh0aGlzLmNvbnRyb2wuZmllbGQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGxldCBvbGRWYWx1ZSA9IHRoaXMuX3ZhbHVlO1xuICAgICAgICBpZiAodGhpcy5jb250cm9sLm11bHRpcGxlKSB7XG4gICAgICAgICAgICBsZXQgbmV3VmFsdWUgPSBbXTtcbiAgICAgICAgICAgIGlmICghb2xkVmFsdWUpIG9sZFZhbHVlID0gW107XG4gICAgICAgICAgICBpZiAob2xkVmFsdWUubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIG5ld1ZhbHVlID0gdGhpcy5nZXRWYWx1ZVNlbGVjdGVkTXVsdGlwbGUoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKG5ld1ZhbHVlLmxlbmd0aCA9PSAwXG4gICAgICAgICAgICAgICAgJiYgdGhpcy5jb250cm9sLm5vdEluQ3J1ZEZvcm1cbiAgICAgICAgICAgICAgICAmJiB0aGlzLmNvbnRyb2wuYXV0b0Rpc3BsYXlGaXJzdFxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgbmV3VmFsdWUgPSBbdGhpcy5kYXRhU291cmNlSW50ZXJuYWxbMF0udmFsdWVdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuX3ZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl92YWx1ZSA9IG5ld1ZhbHVlO1xuXG4gICAgICAgICAgICAgICAgaWYgKG9sZFZhbHVlLmxlbmd0aCAhPSB0aGlzLl92YWx1ZS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5maXJlQ2hhbmdlZEV2ZW50KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKCF0aGlzLl9jb21tb25TZXJ2aWNlLmlzU2FtZUFycmF5KG9sZFZhbHVlLCB0aGlzLl92YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGp1c3RWYWx1ZTJXYXlCaW5kaW5nKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5hZGp1c3RWYWx1ZVNlbGVjdGVkU2luZ2xlKCk7XG4gICAgICAgICAgICBpZiAodGhpcy5fdmFsdWUgPT0gbnVsbFxuICAgICAgICAgICAgICAgICYmIHRoaXMuY29udHJvbC5ub3RJbkNydWRGb3JtXG4gICAgICAgICAgICAgICAgJiYgdGhpcy5jb250cm9sLmF1dG9EaXNwbGF5Rmlyc3RcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3ZhbHVlID0gdGhpcy5kYXRhU291cmNlSW50ZXJuYWxbMF0udmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5fdmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIC8vIEzGsHUgw70gaWYg4bufIGTGsOG7m2kga2jDtG5nIMSRxrDhu6NjIMSR4buVaSB0aMOgbmggb2xkVmFsdWUgIT0gdGhpcy5fdmFsdWVcbiAgICAgICAgICAgICAgICAvLyBWw6wgZ2nDoSB0cuG7iyBj4bunYSB0aGlzLl92YWx1ZSBz4bq9IMSRxrDhu6NjIGNvcnJlY3Rpbmcg4bufIHRyw6puIChpZCA9PiBvYmplY3QpIG7Dqm4gc28gc8Ohbmggc+G6vSBraMOhYyBuaGF1XG4gICAgICAgICAgICAgICAgaWYgKChvbGRWYWx1ZSAhPSBudWxsICYmIHRoaXMuX3ZhbHVlID09IG51bGwpXG4gICAgICAgICAgICAgICAgICAgIHx8IChvbGRWYWx1ZSA9PSBudWxsICYmIHRoaXMuX3ZhbHVlICE9IG51bGwpXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmlyZUNoYW5nZWRFdmVudCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0aGlzLl92YWx1ZSAhPSBvbGRWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFkanVzdFZhbHVlMldheUJpbmRpbmcoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNoZWNrUmVhZHkoKTtcbiAgICB9XG5cbiAgICBhc3luYyBzZXRTZWxlY3RlZFZhbHVlKCkge1xuICAgICAgICBpZiAodGhpcy5jb250cm9sLmlzU2VydmVyTG9hZCkge1xuICAgICAgICAgICAgY29uc3QgZmlsdGVycyA9IFtdO1xuICAgICAgICAgICAgbGV0IGxlbmd0aCA9IDE7XG4gICAgICAgICAgICBpZiAodGhpcy5jb250cm9sLm11bHRpcGxlKSB7XG4gICAgICAgICAgICAgICAgbGVuZ3RoID0gdGhpcy5fdmFsdWUubGVuZ3RoO1xuICAgICAgICAgICAgICAgIGZpbHRlcnMucHVzaChcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXdGaWx0ZXIodGhpcy5jb250cm9sLnZhbHVlRmllbGQsIE9wZXJhdG9yLmluLCB0aGlzLl92YWx1ZSlcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgZmlsdGVycy5wdXNoKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLm5ld0ZpbHRlcih0aGlzLmNvbnRyb2wudmFsdWVGaWVsZCwgT3BlcmF0b3IuZXF1YWwsIHRoaXMuX3ZhbHVlKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB7IGRhdGFTb3VyY2UgfSA9IGF3YWl0IHRoaXMuX2dldERhdGFTb3VyY2VCeVNlcnZpY2UoZmlsdGVycywgMSwgbGVuZ3RoKTtcbiAgICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZVNlbGVjdGVkID0gZGF0YVNvdXJjZTtcbiAgICAgICAgICAgIGlmICh0aGlzLmRhdGFTb3VyY2VJbnRlcm5hbCAmJiB0aGlzLmRhdGFTb3VyY2VJbnRlcm5hbC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9oYXNMb2FkZWREYXRhc291cmNlID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuY29tYmluZURhdGFTb3VyY2UodGhpcy5kYXRhU291cmNlSW50ZXJuYWwsIDEpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2hlY2tBbmRGaXJlRXZlbnQoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFZhbHVlU2VsZWN0ZWRNdWx0aXBsZSgpIHtcbiAgICAgICAgY29uc3QgbmV3VmFsdWUgPSBbXTtcbiAgICAgICAgY29uc3QgdG1wVmFsdWUgPSBbLi4udGhpcy5fdmFsdWVdO1xuICAgICAgICB0aGlzLmFwcGVuZFZhbHVlRnJvbURhdGFTb3VyY2UobmV3VmFsdWUsIHRtcFZhbHVlLCB0aGlzLmRhdGFTb3VyY2VJbnRlcm5hbCk7XG4gICAgICAgIHRoaXMuYXBwZW5kVmFsdWVGcm9tRGF0YVNvdXJjZShuZXdWYWx1ZSwgdG1wVmFsdWUsIHRoaXMuZGF0YVNvdXJjZVNlbGVjdGVkKTtcbiAgICAgICAgcmV0dXJuIG5ld1ZhbHVlO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXBwZW5kVmFsdWVGcm9tRGF0YVNvdXJjZShuZXdWYWx1ZTogYW55W10sIGN1cnJlbnRWYWx1ZTogYW55W10sIGRhdGFTb3VyY2U6IGFueVtdKSB7XG4gICAgICAgIGlmICghZGF0YVNvdXJjZSB8fCAhZGF0YVNvdXJjZS5sZW5ndGgpIHJldHVybjtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjdXJyZW50VmFsdWUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkSXRlbSA9IGN1cnJlbnRWYWx1ZVtpXTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBkYXRhU291cmNlKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY29udHJvbC5mdW5jQ29tcGFyZShpdGVtLnZhbHVlLCBzZWxlY3RlZEl0ZW0pXG4gICAgICAgICAgICAgICAgICAgIHx8IHRoaXMuY29udHJvbC5mdW5jQ29tcGFyZShpdGVtLnZhbHVlLCBzZWxlY3RlZEl0ZW1bdGhpcy5jb250cm9sLnZhbHVlRmllbGRdKVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICBuZXdWYWx1ZS5wdXNoKGl0ZW0udmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50VmFsdWUuc3BsaWNlKGksIDEpO1xuICAgICAgICAgICAgICAgICAgICBpLS07XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYWRqdXN0VmFsdWVTZWxlY3RlZFNpbmdsZSgpIHtcbiAgICAgICAgY29uc3Qgb2xkVmFsdWUgPSB0aGlzLl92YWx1ZTtcbiAgICAgICAgdGhpcy5fdmFsdWUgPSBudWxsO1xuICAgICAgICBpZiAob2xkVmFsdWUgPT09IG51bGwgfHwgb2xkVmFsdWUgPT09IHVuZGVmaW5lZCkgcmV0dXJuO1xuICAgICAgICB0aGlzLmZpbmRJdGVtRnJvbURhdGFTb3VyY2Uob2xkVmFsdWUsIHRoaXMuZGF0YVNvdXJjZUludGVybmFsKTtcbiAgICAgICAgdGhpcy5maW5kSXRlbUZyb21EYXRhU291cmNlKG9sZFZhbHVlLCB0aGlzLmRhdGFTb3VyY2VTZWxlY3RlZCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBmaW5kSXRlbUZyb21EYXRhU291cmNlKG9sZFZhbHVlOiBhbnksIGRhdGFTb3VyY2U6IGFueVtdKSB7XG4gICAgICAgIGlmICghZGF0YVNvdXJjZSB8fCAhZGF0YVNvdXJjZS5sZW5ndGgpIHJldHVybjtcbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGRhdGFTb3VyY2UpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbnRyb2wuZnVuY0NvbXBhcmUoaXRlbS52YWx1ZSwgb2xkVmFsdWUpXG4gICAgICAgICAgICAgICAgfHwgdGhpcy5jb250cm9sLmZ1bmNDb21wYXJlKGl0ZW0udmFsdWUsIG9sZFZhbHVlW3RoaXMuY29udHJvbC52YWx1ZUZpZWxkXSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3ZhbHVlID0gaXRlbS52YWx1ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNoZWNrUmVhZHkoKSB7XG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2wub25BZGp1c3RlZFZhbHVlXG4gICAgICAgICAgICAmJiB0aGlzLl9oYXNMb2FkZWREYXRhc291cmNlXG4gICAgICAgICAgICAmJiAoKCF0aGlzLmNvbnRyb2wubXVsdGlwbGUgJiYgdGhpcy5fdmFsdWUgIT0gbnVsbClcbiAgICAgICAgICAgICAgICB8fCAodGhpcy5jb250cm9sLm11bHRpcGxlICYmIHRoaXMuX3ZhbHVlICE9IG51bGwgJiYgdGhpcy5fdmFsdWUubGVuZ3RoID4gMCkpXG4gICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5maXJlQWRqdXN0VmFsdWVFdmVudCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVTdHJ1Y3R1cmVJdGVtT2JqZWN0KGl0ZW0pOiBTZWxlY3RJdGVtIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVTdHJ1Y3R1cmVGbGF0T2JqZWN0KGl0ZW0pO1xuICAgIH1cblxuICAgIHJlU3RydWN0dXJlRmxhdE9iamVjdChpdGVtKSB7XG4gICAgICAgIGNvbnN0IHRlbXA6IFNlbGVjdEl0ZW0gPSB7XG4gICAgICAgICAgICB2YWx1ZTogdGhpcy5nZXRJdGVtVmFsdWUoaXRlbSwgdGhpcy5jb250cm9sKSxcbiAgICAgICAgICAgIGRpc2FibGVkOiBpdGVtLmRpc2FibGVkIHx8IGl0ZW0uX0dlbmVyYXRlZEJ5QmFzZSA/IHRydWUgOiBmYWxzZVxuICAgICAgICB9O1xuICAgICAgICB0ZW1wLmxhYmVsID0gdGhpcy5nZXRJdGVtTGFiZWwoaXRlbSwgdGhpcy5jb250cm9sKTtcbiAgICAgICAgaWYgKHRlbXAubGFiZWwgPT09IG51bGwgfHwgdGVtcC5sYWJlbCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0ZW1wLmxhYmVsID0gJ0tow7RuZyB4w6FjIMSR4buLbmgnO1xuICAgICAgICB9XG4gICAgICAgIHRlbXAudmFsdWUuX2Ryb3Bkb3dudmFsdWUgPSB0aGlzLmNvbnRyb2wudmFsdWVGaWVsZDtcbiAgICAgICAgcmV0dXJuIHRlbXA7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRJdGVtVmFsdWUoaXRlbSwgY29udHJvbDogRHJvcGRvd25Db250cm9sU2NoZW1hKSB7XG4gICAgICAgIHJldHVybiBjb250cm9sLmZ1bmNHZXRWYWx1ZSA/IGNvbnRyb2wuZnVuY0dldFZhbHVlKGl0ZW0pIDogaXRlbTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEl0ZW1MYWJlbChpdGVtLCBjb250cm9sOiBEcm9wZG93bkNvbnRyb2xTY2hlbWEpIHtcbiAgICAgICAgaWYgKGNvbnRyb2wuZnVuY0dldExhYmVsKSB7XG4gICAgICAgICAgICByZXR1cm4gY29udHJvbC5mdW5jR2V0TGFiZWwoaXRlbSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGl0ZW1bY29udHJvbC5kaXNwbGF5RmllbGRdIHx8IGl0ZW1bJ2xhYmVsJ107XG4gICAgfVxuXG4gICAgcmVzZXRDb250cm9sKCkge1xuICAgICAgICBpZiAodGhpcy5fdmFsdWUgIT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5fdmFsdWUgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5kYXRhU291cmNlSW50ZXJuYWwgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuZmlyZUNoYW5nZWRFdmVudCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xlYXJEYXRhc291cmNlKCkge1xuICAgICAgICB0aGlzLmRhdGFTb3VyY2VJbnRlcm5hbCA9IFtdO1xuICAgICAgICB0aGlzLl9oYXNMb2FkZWREYXRhc291cmNlID0gZmFsc2U7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBfZ2V0RGF0YShwYWdlOiBudW1iZXIgPSAxKSB7XG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2wuYmFzZVNlcnZpY2UpIHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX2dldERhdGFTb3VyY2UocGFnZSk7XG4gICAgICAgIH1cbiAgICB9XG5cblxuICAgIHByaXZhdGUgYXN5bmMgX2dldERhdGFTb3VyY2UocGFnZTogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMucGFnZSA9IHBhZ2UgfHwgMTtcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgY29uc3QgZmlsdGVycyA9IGF3YWl0IHRoaXMuZmlsdGVyUHJvY2Vzcyh0aGlzLmZpbHRlckZyb21QYXJlbnRzKTtcbiAgICAgICAgaWYgKGZpbHRlcnMgPT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmNvbWJpbmVEYXRhU291cmNlKFtdLCBwYWdlKTtcbiAgICAgICAgICAgIHRoaXMuY2hlY2tBbmRGaXJlRXZlbnQoZmFsc2UpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgZGF0YVNvdXJjZSwgcmF3RGF0YVNvdXJjZSwgdG90YWxQYWdlIH0gPSBhd2FpdCB0aGlzLl9nZXREYXRhU291cmNlQnlTZXJ2aWNlKGZpbHRlcnMsIHBhZ2UpO1xuICAgICAgICB0aGlzLnRvdGFsUGFnZSA9IHRvdGFsUGFnZTtcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuY29tYmluZURhdGFTb3VyY2UoZGF0YVNvdXJjZSwgcGFnZSk7XG4gICAgICAgIGlmICghdGhpcy5jb250cm9sLmlzU2VydmVyTG9hZCkge1xuICAgICAgICAgICAgdGhpcy5jaGVja0FuZEZpcmVFdmVudCh0cnVlKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBO4bq/dSBkcm9wZG93biBrIG7hurFtIHRyb25nIGNydWQgZm9ybSB0aMOsIGPhuqV1IGjDrG5oIGZpcmVDYWxsQmFja0luc2lkZSA9IHRydWUgKG3hurdjIMSR4buLbmgpIMSR4buDIGZpcmUgdHLhu7FjIHRp4bq/cCB04burIHRyb25nIGNvbXBvbmVudFxuICAgICAgICBpZiAodGhpcy5jb250cm9sLmZpcmVDYWxsQmFja0luc2lkZSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuY29udHJvbC5jYWxsYmFja0RhdGFGaW5pc2gpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRyb2wuY2FsbGJhY2tEYXRhRmluaXNoKDxhbnk+e1xuICAgICAgICAgICAgICAgICAgICBkYXRhOiByYXdEYXRhU291cmNlLFxuICAgICAgICAgICAgICAgICAgICBlbG06IHRoaXNcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMub25EYXRhU291cmNlTG9hZGVkLmVtaXQoe1xuICAgICAgICAgICAgICAgIGRhdGFTb3VyY2UsXG4gICAgICAgICAgICAgICAgcmF3RGF0YVNvdXJjZSxcbiAgICAgICAgICAgICAgICBlbG06IHRoaXNcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBfZ2V0RGF0YVNvdXJjZUJ5U2VydmljZShmaWx0ZXJzOiBGaWx0ZXJbXSwgcGFnZTogbnVtYmVyID0gMSwgcGFnZVNpemU6IG51bWJlciA9IG51bGwpIHtcbiAgICAgICAgbGV0IGRhdGFTb3VyY2UgPSBudWxsO1xuICAgICAgICBsZXQgdG90YWxQYWdlID0gMTtcblxuICAgICAgICBjb25zdCBkcm9wZG93bk9wdGlvbnMgPSB0aGlzLl9jcnVkU2VydmljZS5jcmVhdGVEcm9wZG93bk9wdGlvbnModGhpcy5jb250cm9sKTtcbiAgICAgICAgZHJvcGRvd25PcHRpb25zLnBhZ2UgPSBwYWdlO1xuICAgICAgICBpZiAocGFnZVNpemUpIHtcbiAgICAgICAgICAgIGRyb3Bkb3duT3B0aW9ucy5wYWdlU2l6ZSA9IHBhZ2VTaXplO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2wuYmFzZVNlcnZpY2UgaW5zdGFuY2VvZiBNYXN0ZXJEYXRhU2VydmljZSkge1xuICAgICAgICAgICAgZGF0YVNvdXJjZSA9IGF3YWl0IHRoaXMuY29udHJvbC5iYXNlU2VydmljZS5nZXREYXRhRHJvcGRvd25CeUZpbHRlcihcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRyb2wuZ3JvdXBDb2RlLCBudWxsLCBmaWx0ZXJzLCBkcm9wZG93bk9wdGlvbnNcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBsZXQgcmVzcG9uc2UgPSBudWxsO1xuICAgICAgICAgICAgaWYgKHRoaXMuY29udHJvbC5pc1RyZWUgfHwgdGhpcy5jb250cm9sLmlzVHJlZUJhc2VNb2RlbCkge1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlID0gYXdhaXQgdGhpcy5jb250cm9sLmJhc2VTZXJ2aWNlLmdldFRyZWVEYXRhRHJvcGRvd25CeUZpbHRlclJhdyhcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVycyxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250cm9sLmZpZWxkVHJlZSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250cm9sLnZhbHVlUGFyZW50Um9vdCxcbiAgICAgICAgICAgICAgICAgICAgZHJvcGRvd25PcHRpb25zXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlID0gYXdhaXQgdGhpcy5jb250cm9sLmJhc2VTZXJ2aWNlLmdldERhdGFEcm9wZG93bkJ5RmlsdGVyUmF3KFxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJzLCBkcm9wZG93bk9wdGlvbnNcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGF0YVNvdXJjZSA9IHJlc3BvbnNlLmRhdGE7XG4gICAgICAgICAgICB0b3RhbFBhZ2UgPSBNYXRoLmNlaWwocmVzcG9uc2UudG90YWxSZWNvcmQgLyBkcm9wZG93bk9wdGlvbnMucGFnZVNpemUpO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IHRoaXMuX2NydWRTZXJ2aWNlLmdldFJlZkRhdGFJbkRhdGFzb3VyY2UoZGF0YVNvdXJjZSwgZHJvcGRvd25PcHRpb25zLnJlZkZpZWxkcyk7XG4gICAgICAgIGlmICghZGF0YVNvdXJjZSkgZGF0YVNvdXJjZSA9IFtdO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGRhdGFTb3VyY2UpIHtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKHRoaXMucmVTdHJ1Y3R1cmVJdGVtT2JqZWN0KGl0ZW0pKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBkYXRhU291cmNlOiByZXN1bHQsIHJhd0RhdGFTb3VyY2U6IGRhdGFTb3VyY2UsIHRvdGFsUGFnZSB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgZmlsdGVyUHJvY2VzcyhmaWx0ZXJGcm9tUGFyZW50czogRmlsdGVyW10pIHtcbiAgICAgICAgbGV0IGZpbHRlcnMgPSBbLi4uZmlsdGVyRnJvbVBhcmVudHNdO1xuICAgICAgICBhd2FpdCBhcHBlbmREZWZhdWx0RmlsdGVyKGZpbHRlcnMsIHRoaXMuY29udHJvbC5kZWZhdWx0RmlsdGVycyk7XG5cbiAgICAgICAgaWYgKHRoaXMuY29udHJvbC5pc1NlcnZlckxvYWQpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnZhbHVlU2VhcmNoU2VydmVyKSB7XG4gICAgICAgICAgICAgICAgZmlsdGVycy5wdXNoKHRoaXMuZ2V0RmlsdGVyT25TZXJ2ZXJTZWFyY2godGhpcy52YWx1ZVNlYXJjaFNlcnZlcikpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuY29udHJvbC5tb2RpZnlGaWx0ZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IGFsbG93ID0gYXdhaXQgdGhpcy5jb250cm9sLm1vZGlmeUZpbHRlcihmaWx0ZXJzLCB0aGlzKTtcbiAgICAgICAgICAgIGlmIChhbGxvdyA9PT0gZmFsc2UpIGZpbHRlcnMgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZpbHRlcnM7XG4gICAgfVxuXG4gICAgZ2V0UGFuZWxDbGFzcygpIHtcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbC5hcHBlbmRUbyA9PSAnYm9keScpIHtcbiAgICAgICAgICAgIHJldHVybiBgJHt0aGlzLmNvbnRyb2wucGFuZWxDbGFzc30gcC1maXhlZGA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuY29udHJvbC5wYW5lbENsYXNzO1xuICAgIH1cblxuICAgIGdldFZhbHVlUmV0dXJuKCkge1xuICAgICAgICB0aGlzLl9yZXR1cm5WYWx1ZSA9IHRoaXMuZnVuY1JldHVyblZhbHVlKHRoaXMuX3ZhbHVlKTtcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbC5zaG93VG9vbHRpcE9ubHkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbnRyb2wuZ2VuZXJhdGVUb29sdGlwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy50b29sdGlwID0gdGhpcy5jb250cm9sLmdlbmVyYXRlVG9vbHRpcCh0aGlzLl92YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoIXRoaXMuY29udHJvbC5tdWx0aXBsZSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuY29udHJvbC5nZW5lcmF0ZVRvb2x0aXApIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50b29sdGlwID0gdGhpcy5jb250cm9sLmdlbmVyYXRlVG9vbHRpcCh0aGlzLl92YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRvb2x0aXAgPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMudG9vbHRpcCA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnRvb2x0aXAgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9yZXR1cm5WYWx1ZTtcbiAgICB9XG5cbiAgICBjaGVja0luaXRlZENvbnRyb2woKSB7XG4gICAgICAgIC8vIE7hur91IGNoxrBhIGNo4bqheSBxdWEgaW5pdCB0aMOsIGsgZmlyZSBldmVudCBnw6wgY+G6o1xuICAgICAgICByZXR1cm4gISF0aGlzLmNvbnRyb2wuX2NvbXBvbmVudDtcbiAgICB9XG5cbiAgICBhZGp1c3RWYWx1ZTJXYXlCaW5kaW5nKCkge1xuICAgICAgICBpZiAoIXRoaXMuY2hlY2tJbml0ZWRDb250cm9sKCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB2YWx1ZVJldHVybiA9IHRoaXMuZ2V0VmFsdWVSZXR1cm4oKTtcbiAgICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHZhbHVlUmV0dXJuKTtcbiAgICB9XG5cbiAgICBmaXJlQ2hhbmdlZEV2ZW50KCkge1xuICAgICAgICAvLyBO4bq/dSBjaMawYSBjaOG6oXkgcXVhIGluaXQgdGjDrCBrIGZpcmUgZXZlbnQgZ8OsIGPhuqNcbiAgICAgICAgaWYgKCF0aGlzLmNoZWNrSW5pdGVkQ29udHJvbCgpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdmFsdWVSZXR1cm4gPSB0aGlzLmdldFZhbHVlUmV0dXJuKCk7XG4gICAgICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh2YWx1ZVJldHVybik7XG4gICAgICAgIHRoaXMub25DaGFuZ2VkLm5leHQodmFsdWVSZXR1cm4pO1xuICAgIH1cblxuICAgIGZpcmVBZGp1c3RWYWx1ZUV2ZW50KCkge1xuICAgICAgICAvLyBO4bq/dSBjaMawYSBjaOG6oXkgcXVhIGluaXQgdGjDrCBrIGZpcmUgZXZlbnQgZ8OsIGPhuqNcbiAgICAgICAgaWYgKCF0aGlzLmNoZWNrSW5pdGVkQ29udHJvbCgpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdmFsdWVSZXR1cm4gPSB0aGlzLmdldFZhbHVlUmV0dXJuKCk7XG4gICAgICAgIHRoaXMuYWRqdXN0VmFsdWUubmV4dCh2YWx1ZVJldHVybik7XG4gICAgfVxuXG4gICAgb25DaGFuZ2VTZWxlY3RlZChldmVudCkge1xuICAgICAgICBpZiAodGhpcy5jb250cm9sLm11bHRpcGxlKSB7XG4gICAgICAgICAgICBpZiAoIWV2ZW50Lml0ZW1WYWx1ZSkge1xuICAgICAgICAgICAgICAgIC8vIFRyxrDhu51uZyBo4bujcCB1bnNlbGVjdCBhbGxcbiAgICAgICAgICAgICAgICBpZiAoIWV2ZW50LnZhbHVlLmxlbmd0aCB8fCBldmVudC52YWx1ZS5ldmVyeShwID0+IHAuaGFzT3duUHJvcGVydHkodGhpcy5maWVsZFN1RHVuZykgJiYgIXBbdGhpcy5maWVsZFN1RHVuZ10pKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3ZhbHVlID0gW107XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIFRyxrDhu51uZyBo4bujcCBzZWxlY3QgYWxsXG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCB0bXBEYXRhU291cmNlID0gWy4uLnRoaXMuZGF0YVNvdXJjZUludGVybmFsXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZGF0YVNvdXJjZUludGVybmFsLnNvbWUocCA9PiBwLmhhc093blByb3BlcnR5KCdpbmFjdGl2ZScpKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdG1wRGF0YVNvdXJjZSA9IHRtcERhdGFTb3VyY2UuZmlsdGVyKHAgPT4gIXAuaW5hY3RpdmUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3ZhbHVlID0gdG1wRGF0YVNvdXJjZS5tYXAocSA9PiBxLnZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0aGlzLmNvbnRyb2wuc2VsZWN0RGVzY2VuZGFudCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhcmVudElkcyA9IFtldmVudC5pdGVtVmFsdWVbdGhpcy5jb250cm9sLnZhbHVlRmllbGRdXTtcbiAgICAgICAgICAgICAgICAvLyBO4bq/dSBpdGVtIMSRxrDhu6NjIGNo4buNbiA9PiBDaOG7jW4gY+G6oyBuaOG7r25nIGLhuqNuIGdoaSBjb24sIGNow6F1XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX3ZhbHVlLmluZGV4T2YoZXZlbnQuaXRlbVZhbHVlKSA+IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZUludGVybmFsLmZvckVhY2goc291cmNlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhcmVudElkID0gc291cmNlLnZhbHVlW3RoaXMuY29udHJvbC5maWVsZFRyZWVdO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmVudElkcy5pbmRleE9mKHBhcmVudElkKSA+IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3ZhbHVlLmluZGV4T2Yoc291cmNlLnZhbHVlKSA9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl92YWx1ZS5wdXNoKHNvdXJjZS52YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudElkcy5wdXNoKHBhcmVudElkLCBzb3VyY2UudmFsdWVbdGhpcy5jb250cm9sLnZhbHVlRmllbGRdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgeyAvLyBpdGVtIMSRYW5nIGLhu4sgYuG7jyBjaOG7jW4gPT4gaOG7p3kgY2jhu41uIGPhuqMgbmjhu69uZyBi4bqjbiBnaGkgY29uXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZUludGVybmFsLmZvckVhY2goc291cmNlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhcmVudElkID0gc291cmNlLnZhbHVlW3RoaXMuY29udHJvbC5maWVsZFRyZWVdO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmVudElkcy5pbmRleE9mKHBhcmVudElkKSA+IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLl92YWx1ZS5pbmRleE9mKHNvdXJjZS52YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdmFsdWUuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50SWRzLnB1c2gocGFyZW50SWQsIHNvdXJjZS52YWx1ZVt0aGlzLmNvbnRyb2wudmFsdWVGaWVsZF0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0aGlzLmNvbnRyb2wuc2VsZWN0Q2hpbGRJdGVtKSB7XG4gICAgICAgICAgICAgICAgLy8gTuG6v3UgaXRlbSDEkcaw4bujYyBjaOG7jW4gPT4gQ2jhu41uIGPhuqMgbmjhu69uZyBi4bqjbiBnaGkgY29uXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX3ZhbHVlLmluZGV4T2YoZXZlbnQuaXRlbVZhbHVlKSA+IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZUludGVybmFsLmZvckVhY2goc291cmNlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhcmVudElkID0gc291cmNlLnZhbHVlW3RoaXMuY29udHJvbC5maWVsZFRyZWVdO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmVudElkID09IGV2ZW50Lml0ZW1WYWx1ZVt0aGlzLmNvbnRyb2wudmFsdWVGaWVsZF0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fdmFsdWUuaW5kZXhPZihzb3VyY2UudmFsdWUpID09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3ZhbHVlLnB1c2goc291cmNlLnZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHsgLy8gaXRlbSDEkWFuZyBi4buLIGLhu48gY2jhu41uID0+IGjhu6d5IGNo4buNbiBj4bqjIG5o4buvbmcgYuG6o24gZ2hpIGNvblxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGFTb3VyY2VJbnRlcm5hbC5mb3JFYWNoKHNvdXJjZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXJlbnRJZCA9IHNvdXJjZS52YWx1ZVt0aGlzLmNvbnRyb2wuZmllbGRUcmVlXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJlbnRJZCA9PSBldmVudC5pdGVtVmFsdWVbdGhpcy5jb250cm9sLnZhbHVlRmllbGRdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLl92YWx1ZS5pbmRleE9mKHNvdXJjZS52YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdmFsdWUuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZpcmVDaGFuZ2VkRXZlbnQoKTtcbiAgICB9XG5cbiAgICByZW1vdmVJdGVtKGV2dCwgc2VsZWN0ZWRJdGVtKSB7XG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2wuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl92YWx1ZSA9IHRoaXMuX3ZhbHVlLmZpbHRlcihpdGVtID0+IGl0ZW0gIT0gc2VsZWN0ZWRJdGVtKTtcbiAgICAgICAgdGhpcy5maXJlQ2hhbmdlZEV2ZW50KCk7XG4gICAgICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBldnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlQmVmb3JlID0gdGhpcy5fdmFsdWU7XG4gICAgICAgIHRoaXMub25IaWRlU21hcnRFdmVudC5lbWl0KGV2dCk7XG4gICAgfVxuXG4gICAgb25Ecm9wZG93bkNsaWNrSGFuZGxlcihldnQpIHtcbiAgICAgICAgdGhpcy5vbkRyb3Bkb3duQ2xpY2submV4dChldnQpO1xuICAgIH1cblxuICAgIG9uQ2xpY2soJGV2ZW50KSB7XG4gICAgICAgIGlmICgkZXZlbnQudGFyZ2V0LnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ2knICYmICRldmVudC50YXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKCd1aS1kcm9wZG93bi1jbGVhci1pY29uJykpIHtcbiAgICAgICAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICRldmVudC5jYW5jZWxCdWJibGUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25TaG93SGFuZGxlcihldnQpIHtcbiAgICAgICAgdGhpcy5vblNob3cuZW1pdCh7XG4gICAgICAgICAgICBjb21wb25lbnQ6IHRoaXMsXG4gICAgICAgICAgICBldmVudDogZXZ0XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAodGhpcy5jb250cm9sLnBhbmVsQ2xhc3MpIHtcbiAgICAgICAgICAgIHRoaXMuZHJvcGRvd24ub3ZlcmxheS5zdHlsZS53aWR0aCA9IHRoaXMuZHJvcGRvd24ub3ZlcmxheS5zdHlsZS5taW5XaWR0aDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuY29udHJvbC5pc1NlcnZlckxvYWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5jb250cm9sLnZpcnR1YWxTY3JvbGwpIHtcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsQ29udGFpbmVyID0gdGhpcy5kcm9wZG93bi5vdmVybGF5LnF1ZXJ5U2VsZWN0b3IoJy5jZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnQnKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsQ29udGFpbmVyID0gdGhpcy5kcm9wZG93bi5vdmVybGF5LnF1ZXJ5U2VsZWN0b3IoJy5wLWRyb3Bkb3duLWl0ZW1zLXdyYXBwZXInKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNjcm9sbENvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCB0aGlzLmhhbmRsZVNjcm9sbCk7XG4gICAgICAgIGNvbnN0IGRlZmF1bHRJbnB1dCA9IHRoaXMuZHJvcGRvd24uZmlsdGVyVmlld0NoaWxkLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIHRoaXMuX2luc2VydFRleHRib3hBbmRGb2N1cyhkZWZhdWx0SW5wdXQpO1xuICAgICAgICB0aGlzLm9uU2hvd1NtYXJ0RXZlbnQuZW1pdChldnQpO1xuICAgIH1cblxuICAgIG9uUGFuZWxTaG93SGFuZGxlcihldnQpIHtcbiAgICAgICAgdGhpcy5vblNob3cuZW1pdCh7XG4gICAgICAgICAgICBjb21wb25lbnQ6IHRoaXMsXG4gICAgICAgICAgICBldmVudDogZXZ0XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAodGhpcy5jb250cm9sLnBhbmVsQ2xhc3MpIHtcbiAgICAgICAgICAgIHRoaXMubXVsdGlTZWxlY3Qub3ZlcmxheS5zdHlsZS53aWR0aCA9IHRoaXMubXVsdGlTZWxlY3Qub3ZlcmxheS5zdHlsZS5taW5XaWR0aDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWVCZWZvcmUgPSB0aGlzLl92YWx1ZTtcbiAgICAgICAgaWYgKCF0aGlzLmNvbnRyb2wuaXNTZXJ2ZXJMb2FkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuY29udHJvbC52aXJ0dWFsU2Nyb2xsKSB7XG4gICAgICAgICAgICB0aGlzLnNjcm9sbENvbnRhaW5lciA9IHRoaXMubXVsdGlTZWxlY3Qub3ZlcmxheS5xdWVyeVNlbGVjdG9yKCcuY2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0Jyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNjcm9sbENvbnRhaW5lciA9IHRoaXMubXVsdGlTZWxlY3Qub3ZlcmxheS5xdWVyeVNlbGVjdG9yKCcucC1tdWx0aXNlbGVjdC1pdGVtcy13cmFwcGVyJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zY3JvbGxDb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdGhpcy5oYW5kbGVTY3JvbGwpO1xuICAgICAgICBjb25zdCBkZWZhdWx0SW5wdXQgPSB0aGlzLm11bHRpU2VsZWN0LmZpbHRlcklucHV0Q2hpbGQubmF0aXZlRWxlbWVudDtcbiAgICAgICAgdGhpcy5faW5zZXJ0VGV4dGJveEFuZEZvY3VzKGRlZmF1bHRJbnB1dCk7XG4gICAgICAgIHRoaXMub25TaG93U21hcnRFdmVudC5lbWl0KGV2dCk7XG4gICAgfVxuXG4gICAgaGFuZGxlU2Nyb2xsID0gKGV2dCkgPT4ge1xuICAgICAgICBpZiAoZXZ0LnNyY0VsZW1lbnQuc2Nyb2xsVG9wID4gMFxuICAgICAgICAgICAgJiYgIXRoaXMuZmlyc3RTY3JvbGxcbiAgICAgICAgICAgICYmIGV2dC5zcmNFbGVtZW50Lm9mZnNldEhlaWdodCArIGV2dC5zcmNFbGVtZW50LnNjcm9sbFRvcCA+PSBldnQuc3JjRWxlbWVudC5zY3JvbGxIZWlnaHQgLSAxXG4gICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5maXJzdFNjcm9sbCA9IHRydWU7XG4gICAgICAgICAgICBpZiAodGhpcy50aW1lb3V0U2Nyb2xsKSBjbGVhclRpbWVvdXQodGhpcy50aW1lb3V0U2Nyb2xsKTtcbiAgICAgICAgICAgIHRoaXMudGltZW91dFNjcm9sbCA9IHNldFRpbWVvdXQoZiA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5nZXREYXRhTmV4dFBhZ2UoKTtcbiAgICAgICAgICAgIH0sIDE1MCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmZpcnN0U2Nyb2xsID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgcHJpdmF0ZSBnZXREYXRhTmV4dFBhZ2UoKSB7XG4gICAgICAgIGlmICh0aGlzLmxvYWRpbmcgfHwgdGhpcy5wYWdlID49IHRoaXMudG90YWxQYWdlKSByZXR1cm47XG4gICAgICAgIHRoaXMucGFnZSsrO1xuICAgICAgICB0aGlzLl9nZXREYXRhKHRoaXMucGFnZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfaW5zZXJ0VGV4dGJveEFuZEZvY3VzKGRlZmF1bHRJbnB1dCkge1xuICAgICAgICB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgnaGlkZScpO1xuICAgICAgICB0aGlzLmJ1dHRvblNldHRpbmcubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCdoaWRlJyk7XG4gICAgICAgIC8vIGRlZmF1bHRJbnB1dC5kaXNhYmxlZCA9IHRydWU7XG4gICAgICAgIGRlZmF1bHRJbnB1dC5wYXJlbnRFbGVtZW50Lmluc2VydEJlZm9yZSh0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQsIGRlZmF1bHRJbnB1dCk7XG4gICAgICAgIGRlZmF1bHRJbnB1dC5wYXJlbnRFbGVtZW50Lmluc2VydEJlZm9yZSh0aGlzLmJ1dHRvblNldHRpbmcubmF0aXZlRWxlbWVudCwgZGVmYXVsdElucHV0KTtcbiAgICAgICAgdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgfVxuXG4gICAgaGFuZGxlTG9hZGVkKCkge1xuICAgICAgICBpZiAodGhpcy5pbnB1dCkgdGhpcy5pbnB1dC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgfVxuXG4gICAgb25IaWRlSGFuZGxlcihldnQpIHtcbiAgICAgICAgdGhpcy5vbkhpZGUuZW1pdCh7XG4gICAgICAgICAgICBjb21wb25lbnQ6IHRoaXMsXG4gICAgICAgICAgICBldmVudDogZXZ0XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZFZhbHVlQmVmb3JlICE9IHRoaXMuX3ZhbHVlKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5jb250cm9sLm11bHRpcGxlKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRWYWx1ZUJlZm9yZSA9PSBudWxsICYmIHRoaXMuX3ZhbHVlICYmIHRoaXMuX3ZhbHVlLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZUJlZm9yZSA9IHRoaXMuX3ZhbHVlO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGFFbWl0ID0ge1xuICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQ6IHRoaXMsXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50OiBldnRcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHRoaXMub25IaWRlU21hcnRFdmVudC5lbWl0KGRhdGFFbWl0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZUJlZm9yZSA9IHRoaXMuX3ZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuc2Nyb2xsQ29udGFpbmVyKSB7XG4gICAgICAgICAgICB0aGlzLnNjcm9sbENvbnRhaW5lci5yZW1vdmVFdmVudExpc3RlbmVyKCdzY3JvbGwnLCB0aGlzLmhhbmRsZVNjcm9sbCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBoYW5kbGVGb2N1cyhldnQpIHtcbiAgICAgICAgdGhpcy5vbkZvY3VzLmVtaXQoZXZ0KTtcbiAgICB9XG5cbiAgICBoYW5kbGVCbHVyKGV2dCkge1xuICAgICAgICB0aGlzLm9uQmx1ci5lbWl0KGV2dCk7XG4gICAgfVxuXG4gICAgc2hvd0Zvcm1RdWlja0FkZCgpIHtcbiAgICAgICAgY29uc3QgZm9ybU1vZGVsID0gbmV3IENydWRGb3JtRGF0YSgpO1xuICAgICAgICBsZXQgaW5pdERhdGEgPSB0aGlzLmNvbnRyb2wuaW5pdERhdGE7XG4gICAgICAgIGlmICh0eXBlb2YgaW5pdERhdGEgIT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIGluaXREYXRhID0gKDxGdW5jdGlvbj4odGhpcy5jb250cm9sLmluaXREYXRhKSkoKTtcbiAgICAgICAgfVxuICAgICAgICBmb3JtTW9kZWwuZGF0YSA9IHsgLi4uaW5pdERhdGEgfTtcbiAgICAgICAgZm9ybU1vZGVsLmZvcm1TdGF0ZSA9IEZvcm1TdGF0ZS5BREQ7XG4gICAgICAgIHRoaXMucXVpY2tBZGREaWFsb2dNb2RlbC5kYXRhLmZvcm1Nb2RlbCA9IGZvcm1Nb2RlbDtcbiAgICAgICAgdGhpcy5xdWlja0FkZERpYWxvZ01vZGVsLnNob3dFZGl0Rm9ybSA9IHRydWU7XG4gICAgfVxuXG4gICAgLy8gSyBz4butYSB0aMOgbmggZnVuY3Rpb24sIHBo4bqjaSDEkeG7gyBhcnJvdyBmdW5jdGlvblxuICAgIGhhbmRsZUNhbmNlbCA9ICgpID0+IHtcbiAgICAgICAgdGhpcy5xdWlja0FkZERpYWxvZ01vZGVsLnNob3dFZGl0Rm9ybSA9IGZhbHNlO1xuICAgIH07XG5cbiAgICAvLyBLIHPhu61hIHRow6BuaCBmdW5jdGlvbiwgcGjhuqNpIMSR4buDIGFycm93IGZ1bmN0aW9uXG4gICAgaGFuZGxlU2F2ZWQgPSAoKSA9PiB7XG4gICAgICAgIHRoaXMucXVpY2tBZGREaWFsb2dNb2RlbC5zaG93RWRpdEZvcm0gPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fZ2V0RGF0YSgpO1xuICAgIH07XG5cbiAgICBzaG93Rm9ybVNldHRpbmcoKSB7XG4gICAgICAgIGNvbnN0IGZvcm1Nb2RlbCA9IG5ldyBDcnVkRm9ybURhdGEoKTtcbiAgICAgICAgZm9ybU1vZGVsLmRhdGEgPSB7fTtcbiAgICAgICAgZm9ybU1vZGVsLmZvcm1TdGF0ZSA9IEZvcm1TdGF0ZS5BREQ7XG4gICAgICAgIHRoaXMuc2V0dGluZ0RpYWxvZ01vZGVsLmRhdGEuZm9ybU1vZGVsID0gZm9ybU1vZGVsO1xuICAgICAgICB0aGlzLnNldHRpbmdEaWFsb2dNb2RlbC5zaG93RWRpdEZvcm0gPSB0cnVlO1xuICAgIH1cblxuICAgIGhhbmRsZVNhdmVkU2V0dGluZygpIHtcbiAgICAgICAgdGhpcy5zZXR0aW5nRGlhbG9nTW9kZWwuc2hvd0VkaXRGb3JtID0gZmFsc2U7XG4gICAgICAgIHRoaXMuY3JlYXRlU2VhcmNoU3Vic2NyaXB0aW9uKCk7XG4gICAgfVxuXG4gICAgY3JlYXRlU2VhcmNoU3Vic2NyaXB0aW9uKCkge1xuICAgICAgICBjb25zdCBkZWxheVNlYXJjaFRpbWUgPSB0aGlzLmdldERlbGF5U2VhcmNoVGltZSgpO1xuICAgICAgICBpZiAodGhpcy5zdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb24gPSB0aGlzLmtleVVwLnBpcGUoXG4gICAgICAgICAgICBtYXAoZXZlbnQgPT4gKGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS52YWx1ZSksXG4gICAgICAgICAgICBkZWJvdW5jZVRpbWUoZGVsYXlTZWFyY2hUaW1lKSxcbiAgICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICAgICAgICB0YWtlVW50aWwodGhpcy5fdW5TdWJzY3JpYmVBbGwpXG4gICAgICAgICkuc3Vic2NyaWJlKHZhbHVlID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2dldERhdGEoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgY2hlY2tEaXNhYmxlZChjb250cm9sOiBGb3JtQ29udHJvbEJhc2UpIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLmRhdGEuX3N0YXR1cyAmJiB0aGlzLmRhdGEuX3N0YXR1c1tjb250cm9sLmZpZWxkXSAmJiB0aGlzLmRhdGEuX3N0YXR1c1tjb250cm9sLmZpZWxkXS5kaXNhYmxlZCA9PT0gdHJ1ZSkgfHwgY29udHJvbC5kaXNhYmxlZDtcbiAgICB9XG5cbiAgICBnZXRJdGVtU2VsZWN0ZWRMYWJlbChpdGVtKSB7XG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2wuZnVuY0dldExhYmVsKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb250cm9sLmZ1bmNHZXRMYWJlbChpdGVtKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXRlbVt0aGlzLmNvbnRyb2wuZGlzcGxheUZpZWxkXSB8fCBpdGVtWydsYWJlbCddO1xuICAgIH1cbn1cbiJdfQ==
|
|
@@ -20,8 +20,12 @@ export class ExportService {
|
|
|
20
20
|
this.serviceUri = `${this._moduleConfig.environment.apiDomain.templateEndpoint}/Export`;
|
|
21
21
|
}
|
|
22
22
|
objectToExcel(data, fileName, numOfHeaderRow) {
|
|
23
|
+
const model = {
|
|
24
|
+
dataExport: data,
|
|
25
|
+
pageTitle: fileName
|
|
26
|
+
};
|
|
23
27
|
return this._http
|
|
24
|
-
.post(`${this.serviceUri}/ObjectToExcel?numOfHeaderRow=${numOfHeaderRow}`,
|
|
28
|
+
.post(`${this.serviceUri}/ObjectToExcel?numOfHeaderRow=${numOfHeaderRow}`, model, { responseType: 'blob' })
|
|
25
29
|
.pipe(catchError((err) => this._commonService.handleError(err, this._injector)))
|
|
26
30
|
.subscribe(res => {
|
|
27
31
|
this.saveAsExcelFile(res, fileName);
|
|
@@ -52,4 +56,4 @@ ExportService.ctorParameters = () => [
|
|
|
52
56
|
{ type: CommonService },
|
|
53
57
|
{ type: ModuleConfigService }
|
|
54
58
|
];
|
|
55
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
59
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwb3J0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy90bngtc2hhcmVkL3NyYy9saWIvc2VydmljZXMvZXhwb3J0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBcUIsTUFBTSxzQkFBc0IsQ0FBQztBQUNyRSxPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNyRCxPQUFPLFNBQVMsTUFBTSxZQUFZLENBQUM7QUFDbkMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzVDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUdqRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQzs7Ozs7QUFFOUQsTUFBTSxVQUFVLEdBQUcsaUZBQWlGLENBQUM7QUFDckcsTUFBTSxlQUFlLEdBQUcsT0FBTyxDQUFDO0FBS2hDLE1BQU0sT0FBTyxhQUFhO0lBS3RCLFlBQ1ksS0FBaUIsRUFDakIsU0FBbUIsRUFDbkIsY0FBNkIsRUFDckMsb0JBQXlDO1FBSGpDLFVBQUssR0FBTCxLQUFLLENBQVk7UUFDakIsY0FBUyxHQUFULFNBQVMsQ0FBVTtRQUNuQixtQkFBYyxHQUFkLGNBQWMsQ0FBZTtRQUdyQyxJQUFJLENBQUMsYUFBYSxHQUFHLG9CQUFvQixDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ3RELElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUM7UUFDbEQsSUFBSSxDQUFDLFVBQVUsR0FBRyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsU0FBUyxDQUFDO0lBQzVGLENBQUM7SUFFRCxhQUFhLENBQUMsSUFBVyxFQUFFLFFBQWdCLEVBQUUsY0FBdUI7UUFDaEUsTUFBTSxLQUFLLEdBQUc7WUFDVixVQUFVLEVBQUUsSUFBSTtZQUNoQixTQUFTLEVBQUUsUUFBUTtTQUN0QixDQUFDO1FBQ0YsT0FBTyxJQUFJLENBQUMsS0FBSzthQUNaLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLGlDQUFpQyxjQUFjLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxZQUFZLEVBQUUsTUFBZ0IsRUFBRSxDQUFDO2FBQ3BILElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFzQixFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7YUFDbEcsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ2IsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDeEMsQ0FBQyxDQUFDLENBQUM7SUFDWCxDQUFDO0lBRUQsZUFBZSxDQUFDLE1BQVcsRUFBRSxRQUFnQjtRQUN6QyxNQUFNLElBQUksR0FBUyxJQUFJLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ2xDLElBQUksRUFBRSxVQUFVO1NBQ25CLENBQUMsQ0FBQztRQUNILFNBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLFFBQVEsR0FBRyxHQUFHLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQyxPQUFPLEVBQUUsR0FBRyxlQUFlLENBQUMsQ0FBQztJQUNwRixDQUFDO0lBRUQsZUFBZSxDQUFDLE1BQVcsRUFBRSxRQUFnQjtRQUN6QyxNQUFNLElBQUksR0FBUyxJQUFJLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ2xDLElBQUksRUFBRSxVQUFVO1NBQ25CLENBQUMsQ0FBQztRQUNILFNBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLElBQUksSUFBSSxFQUFFLENBQUMsT0FBTyxFQUFFLEdBQUcsR0FBRyxHQUFHLFFBQVEsQ0FBQyxDQUFDO0lBQ2xFLENBQUM7Ozs7WUE1Q0osVUFBVSxTQUFDO2dCQUNSLFVBQVUsRUFBRSxNQUFNO2FBQ3JCOzs7WUFkUSxVQUFVO1lBQ0UsUUFBUTtZQUdwQixhQUFhO1lBR2IsbUJBQW1CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCwgSHR0cEVycm9yUmVzcG9uc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3RvciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IEZpbGVTYXZlciBmcm9tICdmaWxlLXNhdmVyJztcbmltcG9ydCB7IGNhdGNoRXJyb3IgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBDb21tb25TZXJ2aWNlIH0gZnJvbSAnLi9jb21tb24uc2VydmljZSc7XG5cbmltcG9ydCB7IE1vZHVsZUNvbmZpZyB9IGZyb20gJy4uL2NvbmZpZ3MvbW9kdWxlLWNvbmZpZyc7XG5pbXBvcnQgeyBNb2R1bGVDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi9tb2R1bGUtY29uZmlnLnNlcnZpY2UnO1xuXG5jb25zdCBFWENFTF9UWVBFID0gJ2FwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnNoZWV0O2NoYXJzZXQ9VVRGLTgnO1xuY29uc3QgRVhDRUxfRVhURU5TSU9OID0gJy54bHN4JztcblxuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBFeHBvcnRTZXJ2aWNlIHtcbiAgICByZWFkb25seSBlbnZpcm9ubWVudDogYW55O1xuICAgIHJlYWRvbmx5IF9tb2R1bGVDb25maWc6IE1vZHVsZUNvbmZpZztcbiAgICByZWFkb25seSBzZXJ2aWNlVXJpOiBzdHJpbmc7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBfaHR0cDogSHR0cENsaWVudCxcbiAgICAgICAgcHJpdmF0ZSBfaW5qZWN0b3I6IEluamVjdG9yLFxuICAgICAgICBwcml2YXRlIF9jb21tb25TZXJ2aWNlOiBDb21tb25TZXJ2aWNlLFxuICAgICAgICBfbW9kdWxlQ29uZmlnU2VydmljZTogTW9kdWxlQ29uZmlnU2VydmljZSxcbiAgICApIHtcbiAgICAgICAgdGhpcy5fbW9kdWxlQ29uZmlnID0gX21vZHVsZUNvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnKCk7XG4gICAgICAgIHRoaXMuZW52aXJvbm1lbnQgPSB0aGlzLl9tb2R1bGVDb25maWcuZW52aXJvbm1lbnQ7XG4gICAgICAgIHRoaXMuc2VydmljZVVyaSA9IGAke3RoaXMuX21vZHVsZUNvbmZpZy5lbnZpcm9ubWVudC5hcGlEb21haW4udGVtcGxhdGVFbmRwb2ludH0vRXhwb3J0YDtcbiAgICB9XG5cbiAgICBvYmplY3RUb0V4Y2VsKGRhdGE6IGFueVtdLCBmaWxlTmFtZTogc3RyaW5nLCBudW1PZkhlYWRlclJvdz86IG51bWJlcikge1xuICAgICAgICBjb25zdCBtb2RlbCA9IHtcbiAgICAgICAgICAgIGRhdGFFeHBvcnQ6IGRhdGEsXG4gICAgICAgICAgICBwYWdlVGl0bGU6IGZpbGVOYW1lXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiB0aGlzLl9odHRwXG4gICAgICAgICAgICAucG9zdChgJHt0aGlzLnNlcnZpY2VVcml9L09iamVjdFRvRXhjZWw/bnVtT2ZIZWFkZXJSb3c9JHtudW1PZkhlYWRlclJvd31gLCBtb2RlbCwgeyByZXNwb25zZVR5cGU6ICdibG9iJyBhcyAnanNvbicgfSlcbiAgICAgICAgICAgIC5waXBlKGNhdGNoRXJyb3IoKGVycjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHRoaXMuX2NvbW1vblNlcnZpY2UuaGFuZGxlRXJyb3IoZXJyLCB0aGlzLl9pbmplY3RvcikpKVxuICAgICAgICAgICAgLnN1YnNjcmliZShyZXMgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc2F2ZUFzRXhjZWxGaWxlKHJlcywgZmlsZU5hbWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgc2F2ZUFzRXhjZWxGaWxlKGJ1ZmZlcjogYW55LCBmaWxlTmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGRhdGE6IEJsb2IgPSBuZXcgQmxvYihbYnVmZmVyXSwge1xuICAgICAgICAgICAgdHlwZTogRVhDRUxfVFlQRVxuICAgICAgICB9KTtcbiAgICAgICAgRmlsZVNhdmVyLnNhdmVBcyhkYXRhLCBmaWxlTmFtZSArICdfJyArIG5ldyBEYXRlKCkuZ2V0VGltZSgpICsgRVhDRUxfRVhURU5TSU9OKTtcbiAgICB9XG5cbiAgICBzYXZlU3ByZWFkU2hlZXQoYnVmZmVyOiBhbnksIGZpbGVOYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZGF0YTogQmxvYiA9IG5ldyBCbG9iKFtidWZmZXJdLCB7XG4gICAgICAgICAgICB0eXBlOiBFWENFTF9UWVBFXG4gICAgICAgIH0pO1xuICAgICAgICBGaWxlU2F2ZXIuc2F2ZUFzKGRhdGEsIG5ldyBEYXRlKCkuZ2V0VGltZSgpICsgJ18nICsgZmlsZU5hbWUpO1xuICAgIH1cbn1cbiJdfQ==
|
package/fesm2015/tnx-shared.js
CHANGED
|
@@ -899,6 +899,7 @@ class FormSchemaBase extends SchemaBase {
|
|
|
899
899
|
this.isHorizontallyLabel = false;
|
|
900
900
|
this.order = 0;
|
|
901
901
|
this.showTooltip = true;
|
|
902
|
+
this.showTooltipOnly = false;
|
|
902
903
|
for (const key in init) {
|
|
903
904
|
this[key] = init[key];
|
|
904
905
|
}
|
|
@@ -18018,8 +18019,12 @@ class ExportService {
|
|
|
18018
18019
|
this.serviceUri = `${this._moduleConfig.environment.apiDomain.templateEndpoint}/Export`;
|
|
18019
18020
|
}
|
|
18020
18021
|
objectToExcel(data, fileName, numOfHeaderRow) {
|
|
18022
|
+
const model = {
|
|
18023
|
+
dataExport: data,
|
|
18024
|
+
pageTitle: fileName
|
|
18025
|
+
};
|
|
18021
18026
|
return this._http
|
|
18022
|
-
.post(`${this.serviceUri}/ObjectToExcel?numOfHeaderRow=${numOfHeaderRow}`,
|
|
18027
|
+
.post(`${this.serviceUri}/ObjectToExcel?numOfHeaderRow=${numOfHeaderRow}`, model, { responseType: 'blob' })
|
|
18023
18028
|
.pipe(catchError((err) => this._commonService.handleError(err, this._injector)))
|
|
18024
18029
|
.subscribe(res => {
|
|
18025
18030
|
this.saveAsExcelFile(res, fileName);
|
|
@@ -24099,6 +24104,7 @@ class ListBase extends ComponentBaseWithButton {
|
|
|
24099
24104
|
var _a;
|
|
24100
24105
|
return __awaiter(this, void 0, void 0, function* () {
|
|
24101
24106
|
const lstData = (_a = (yield this.setting.baseService.getDataCustomRoute(this.plusUrl, this.currentGridInfo.filters, this.currentGridInfo.fields, this.currentGridInfo.sorts, -1, 1)).data) !== null && _a !== void 0 ? _a : [];
|
|
24107
|
+
const fileName = this.setting.title ? this.setting.title : `Danh sách ${this.setting.objectName.toLocaleLowerCase()}`;
|
|
24102
24108
|
const lstVisibleField = this.setting.cols
|
|
24103
24109
|
.filter(item => item.visible && item.dataType !== 'trangThaiV5')
|
|
24104
24110
|
.map(item => item.field);
|
|
@@ -24123,7 +24129,7 @@ class ListBase extends ComponentBaseWithButton {
|
|
|
24123
24129
|
return row;
|
|
24124
24130
|
})
|
|
24125
24131
|
];
|
|
24126
|
-
this._exportService.objectToExcel(printData,
|
|
24132
|
+
this._exportService.objectToExcel(printData, fileName, 1);
|
|
24127
24133
|
});
|
|
24128
24134
|
}
|
|
24129
24135
|
beforeExportAllData(dataSource, lstVisibleField) {
|
|
@@ -28608,6 +28614,9 @@ class DropdownComponent extends ComponentBase {
|
|
|
28608
28614
|
if (this.control.placeholder == null && this.control.multiple) {
|
|
28609
28615
|
this.control.placeholder = 'Chưa chọn bản ghi';
|
|
28610
28616
|
}
|
|
28617
|
+
if (this.control.tooltip && this.control.showTooltip) {
|
|
28618
|
+
this.tooltip = this.control.tooltip;
|
|
28619
|
+
}
|
|
28611
28620
|
this.setDefaultSetting();
|
|
28612
28621
|
if (this.control.baseService) {
|
|
28613
28622
|
if (this.control.isServerLoad) {
|
|
@@ -29119,7 +29128,12 @@ class DropdownComponent extends ComponentBase {
|
|
|
29119
29128
|
}
|
|
29120
29129
|
getValueReturn() {
|
|
29121
29130
|
this._returnValue = this.funcReturnValue(this._value);
|
|
29122
|
-
if (
|
|
29131
|
+
if (this.control.showTooltipOnly) {
|
|
29132
|
+
if (this.control.generateTooltip) {
|
|
29133
|
+
this.tooltip = this.control.generateTooltip(this._value);
|
|
29134
|
+
}
|
|
29135
|
+
}
|
|
29136
|
+
else if (!this.control.multiple) {
|
|
29123
29137
|
if (this.control.generateTooltip) {
|
|
29124
29138
|
if (this._value) {
|
|
29125
29139
|
this.tooltip = this.control.generateTooltip(this._value);
|