@firestitch/form 18.0.21 → 18.0.22
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.
|
@@ -234,7 +234,7 @@ export class FsFormDirective extends FsFormBaseDirective {
|
|
|
234
234
|
this._handleError(e);
|
|
235
235
|
return of({
|
|
236
236
|
...this._submitEvent,
|
|
237
|
-
error: e
|
|
237
|
+
error: e?.message,
|
|
238
238
|
});
|
|
239
239
|
}), tap((submittedEvent) => {
|
|
240
240
|
if (!submittedEvent.error) {
|
|
@@ -641,4 +641,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
|
|
|
641
641
|
type: HostBinding,
|
|
642
642
|
args: ['class.fs-form']
|
|
643
643
|
}] } });
|
|
644
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2RpcmVjdGl2ZXMvZm9ybS9mb3JtLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osV0FBVyxFQUNYLE1BQU0sRUFDTixLQUFLLEVBSUwsUUFBUSxFQUNSLE1BQU0sR0FFUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQW1CLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxjQUFjLEVBQVMsTUFBTSxpQkFBaUIsQ0FBQztBQUV4RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFeEQsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUMvQyxPQUFPLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRTdELE9BQU8sRUFDTCxlQUFlLEVBQ2YsS0FBSyxFQUNMLFNBQVMsRUFDVCxHQUFHLEVBRUgsRUFBRSxFQUNGLFVBQVUsR0FDWCxNQUFNLE1BQU0sQ0FBQztBQUNkLE9BQU8sRUFDTCxVQUFVLEVBQ1YsS0FBSyxFQUNMLE1BQU0sRUFDTixLQUFLLEVBQ0wsR0FBRyxFQUNILFFBQVEsRUFDUixTQUFTLEVBQ1QsU0FBUyxFQUNULElBQUksRUFDSixTQUFTLEVBQ1QsR0FBRyxHQUNKLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEIsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDekUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDOUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2hF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O2dCQVVDLFlBQVk7c0JBRGxCLEtBQUs7Z0JBSUMsVUFBVTtzQkFEaEIsS0FBSztnQkFJQyxpQkFBaUI7c0JBRHZCLEtBQUs7Z0JBSUMsV0FBVztzQkFEakIsTUFBTTt1QkFBQyxRQUFRO2dCQUlULE9BQU87c0JBRGIsTUFBTTtnQkFJQSxLQUFLO3NCQURYLE1BQU07Z0JBSUEsU0FBUztzQkFEZixNQUFNO2dCQUlBLE9BQU87c0JBRGIsTUFBTTtnQkFJQSxPQUFPO3NCQURiLE1BQU07Z0JBSUEsV0FBVztzQkFEakIsV0FBVzt1QkFBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgRGlyZWN0aXZlLFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIEhvc3RCaW5kaW5nLFxuICBJbmplY3QsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPcHRpb25hbCxcbiAgT3V0cHV0LFxuICBTaW1wbGVDaGFuZ2VzLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgTmdGb3JtIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcblxuaW1wb3J0IHsgTWF0RGlhbG9nUmVmIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcblxuaW1wb3J0IHsgZ3VpZCB9IGZyb20gJ0BmaXJlc3RpdGNoL2NvbW1vbic7XG5pbXBvcnQgeyBEcmF3ZXJSZWYgfSBmcm9tICdAZmlyZXN0aXRjaC9kcmF3ZXInO1xuaW1wb3J0IHsgRnNNZXNzYWdlLCBNZXNzYWdlTW9kZSB9IGZyb20gJ0BmaXJlc3RpdGNoL21lc3NhZ2UnO1xuXG5pbXBvcnQge1xuICBCZWhhdmlvclN1YmplY3QsXG4gIGRlZmVyLFxuICBmcm9tRXZlbnQsXG4gIGlpZixcbiAgT2JzZXJ2YWJsZSxcbiAgb2YsXG4gIHRocm93RXJyb3IsXG59IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtcbiAgY2F0Y2hFcnJvcixcbiAgZGVsYXksXG4gIGZpbHRlcixcbiAgZmlyc3QsXG4gIG1hcCxcbiAgbWVyZ2VNYXAsXG4gIHN0YXJ0V2l0aCxcbiAgc3dpdGNoTWFwLFxuICB0YWtlLFxuICB0YWtlVW50aWwsXG4gIHRhcCxcbn0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBGb3JtRGVhY3RpdmF0ZUd1YXJkIH0gZnJvbSAnLi4vLi4vZ3VhcmRzL2Zvcm0tZGVhY3RpdmF0ZS5ndWFyZCc7XG5pbXBvcnQgeyBjb25maXJtUmVzdWx0Q29udGludWUgfSBmcm9tICcuLi8uLi9oZWxwZXJzL2NvbmZpcm0tcmVzdWx0LWNvbnRpbnVlJztcbmltcG9ydCB7IGdldEFjdGl2ZVJvdXRlIH0gZnJvbSAnLi4vLi4vaGVscGVycy9nZXQtYWN0aXZlLXJvdXRlJztcbmltcG9ydCB7IGdldEZvcm1FcnJvcnMgfSBmcm9tICcuLi8uLi9oZWxwZXJzL2dldC1mb3JtLWVycm9ycyc7XG5pbXBvcnQgeyBGc0Zvcm0gfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9mc2Zvcm0uc2VydmljZSc7XG5pbXBvcnQgeyBGc0J1dHRvbkRpcmVjdGl2ZSB9IGZyb20gJy4uL2J1dHRvbi5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgRnNGb3JtQmFzZURpcmVjdGl2ZSB9IGZyb20gJy4uL2Zvcm0tYmFzZSc7XG5pbXBvcnQgeyBGc0Zvcm1Hcm91cERpcmVjdGl2ZSB9IGZyb20gJy4uL2Zvcm0tZ3JvdXAnO1xuXG5pbXBvcnQgeyBDb25maXJtUmVzdWx0IH0gZnJvbSAnLi8uLi8uLi9lbnVtcy9jb25maXJtLXJlc3VsdCc7XG5pbXBvcnQgeyBGb3JtU3RhdHVzIH0gZnJvbSAnLi8uLi8uLi9lbnVtcy9mb3JtLXN0YXR1cyc7XG5pbXBvcnQgeyBDb25maXJtQ29uZmlnLCBTdWJtaXR0ZWRFdmVudCB9IGZyb20gJy4vLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBTdWJtaXRFdmVudCB9IGZyb20gJy4vLi4vLi4vaW50ZXJmYWNlcy9zdWJtaXQtZXZlbnQnO1xuXG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tmc0Zvcm1dJyxcbiAgZXhwb3J0QXM6ICdmc0Zvcm0nLFxufSlcbmV4cG9ydCBjbGFzcyBGc0Zvcm1EaXJlY3RpdmUgXG4gIGV4dGVuZHMgRnNGb3JtQmFzZURpcmVjdGl2ZSBcbiAgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgQWZ0ZXJDb250ZW50SW5pdCwgT25DaGFuZ2VzIHtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgd3JhcHBlclNlbGVjdG9yID0gJy5mcy1mb3JtLXdyYXBwZXIsLm1hdC1tZGMtZm9ybS1maWVsZCc7XG5cbiAgQElucHV0KClcbiAgcHVibGljIG1lc3NhZ2VTZWxlY3RvciA9ICcuZnMtZm9ybS1tZXNzYWdlLC5tYXQtbWRjLWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXInO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBoaW50U2VsZWN0b3IgPSAnLmZzLWZvcm0taGludCwubWF0LW1kYy1mb3JtLWZpZWxkLWhpbnQtd3JhcHBlcic7XG5cbiAgQElucHV0KClcbiAgcHVibGljIGxhYmVsU2VsZWN0b3IgPSAnLmZzLWZvcm0tbGFiZWwsLm1kYy1mbG9hdGluZy1sYWJlbD5tYXQtbGFiZWwnO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBhdXRvY29tcGxldGUgPSBmYWxzZTtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgc2hvcnRjdXRzID0gdHJ1ZTsgLy8gQ3RybCArIHNcblxuICBASW5wdXQoKVxuICBwdWJsaWMgY29uZmlybTogQ29uZmlybUNvbmZpZyB8IGJvb2xlYW4gPSB0cnVlO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBjb25maXJtRGlhbG9nID0gdHJ1ZTtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgY29uZmlybURyYXdlciA9IHRydWU7XG5cbiAgQElucHV0KClcbiAgcHVibGljIGNvbmZpcm1Ccm93c2VyID0gdHJ1ZTtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgZGlydHlTdWJtaXRCdXR0b24gPSB0cnVlO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgc3VibWl0KHN1Ym1pdCQ6IChldmVudDogU3VibWl0RXZlbnQpID0+IE9ic2VydmFibGU8YW55Pikge1xuICAgIHRoaXMuX3N1Ym1pdCQgPSBzdWJtaXQkO1xuICB9XG5cbiAgcHVibGljIGdldCBzdWJtaXQoKTogKGV2ZW50OiBTdWJtaXRFdmVudCkgPT4gT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5fc3VibWl0JDtcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzdWNjZXNzRGVsYXkgPSAwO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBlcnJvckRlbGF5ID0gMTAwMDtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgZGVhY3RpdmF0aW9uR3VhcmQgPSB0cnVlO1xuIFxuICBAT3V0cHV0KCdmc0Zvcm0nKVxuICBwdWJsaWMgc3VibWl0RXZlbnQ6IEV2ZW50RW1pdHRlcjxTdWJtaXRFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyBpbnZhbGlkOiBFdmVudEVtaXR0ZXI8U3VibWl0RXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgdmFsaWQ6IEV2ZW50RW1pdHRlcjxTdWJtaXRFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyBzdWJtaXR0ZWQ6IEV2ZW50RW1pdHRlcjxTdWJtaXRFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyByZXNldGVkOiBFdmVudEVtaXR0ZXI8U3VibWl0RXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgY2xlYXJlZDogRXZlbnRFbWl0dGVyPFN1Ym1pdEV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmZzLWZvcm0nKVxuICBwdWJsaWMgZnNGb3JtQ2xhc3MgPSB0cnVlO1xuXG4gIHByaXZhdGUgX3JlZ2lzdGVyQ29udHJvbDtcbiAgcHJpdmF0ZSBfZGlhbG9nQmFja2Ryb3BFc2NhcGUgPSBmYWxzZTtcbiAgcHJpdmF0ZSBfc25hcHNob3Q6IHsgW2tleTogc3RyaW5nXTogYW55IH0gPSB7fTtcbiAgcHJpdmF0ZSBfYWN0aXZhdGVkUm91dGVDb25maWc6IFJvdXRlIHwgbnVsbDtcbiAgcHJpdmF0ZSBfc3RhdHVzJCA9IG5ldyBCZWhhdmlvclN1YmplY3QoRm9ybVN0YXR1cy5WYWxpZCk7XG4gIHByaXZhdGUgX3N1Ym1pdCQ6IChldmVudD86IFN1Ym1pdEV2ZW50KSA9PiBPYnNlcnZhYmxlPGFueT4gPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBJbmplY3QoTmdGb3JtKVxuICAgIHB1YmxpYyBuZ0Zvcm06IE5nRm9ybSxcbiAgICBwcml2YXRlIF9mb3JtOiBGc0Zvcm0sXG4gICAgcHJpdmF0ZSBfZWxlbWVudDogRWxlbWVudFJlZixcbiAgICBwcml2YXRlIF9tZXNzYWdlOiBGc01lc3NhZ2UsXG4gICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSBfZm9ybUdyb3VwOiBGc0Zvcm1Hcm91cERpcmVjdGl2ZSxcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KE1hdERpYWxvZ1JlZilcbiAgICBwcml2YXRlIF9kaWFsb2dSZWY6IE1hdERpYWxvZ1JlZjxhbnk+LFxuXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChEcmF3ZXJSZWYpXG4gICAgcHJpdmF0ZSBfZHJhd2VyUmVmOiBEcmF3ZXJSZWY8YW55PixcblxuICAgIHByaXZhdGUgX3JvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgKSB7IFxuICAgIHN1cGVyKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHN1Ym1pdHRpbmcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YXR1cyQuZ2V0VmFsdWUoKSA9PT0gRm9ybVN0YXR1cy5TdWJtaXR0aW5nO1xuICB9XG5cbiAgcHVibGljIGdldCB2YWxpZGF0aW5nKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9zdGF0dXMkLmdldFZhbHVlKCkgPT09IEZvcm1TdGF0dXMuVmFsaWRhdGluZztcbiAgfVxuXG4gIHB1YmxpYyBnZXQgY29tcGxldGluZygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fc3RhdHVzJC5nZXRWYWx1ZSgpID09PSBGb3JtU3RhdHVzLkNvbXBsZXRpbmc7XG4gIH1cblxuICBwcml2YXRlIGdldCBfc3VibWl0RXZlbnQoKTogU3VibWl0RXZlbnQge1xuICAgIHJldHVybiB7XG4gICAgICBuZ0Zvcm06IHRoaXMubmdGb3JtLFxuICAgICAgc3VibWl0dGVyOiB0aGlzLl9zdWJtaXR0ZXIsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IF9mb3JtVmFsaWRTdGF0ZSQoKTogT2JzZXJ2YWJsZTxTdWJtaXR0ZWRFdmVudD4ge1xuICAgIHRoaXMuc3VibWl0RXZlbnQuZW1pdCh0aGlzLl9zdWJtaXRFdmVudCk7XG4gICAgdGhpcy52YWxpZC5lbWl0KHRoaXMuX3N1Ym1pdEV2ZW50KTtcblxuICAgIGNvbnN0IHN1Ym1pdHRlZEV2ZW50OiBTdWJtaXR0ZWRFdmVudCA9IHtcbiAgICAgIG5nRm9ybTogdGhpcy5uZ0Zvcm0sXG4gICAgICBzdWJtaXR0ZXI6IHRoaXMuX3N1Ym1pdHRlcixcbiAgICAgIHJlc3BvbnNlOiBudWxsLFxuICAgIH07XG5cbiAgICBjb25zdCBzdWJtaXQkOiBPYnNlcnZhYmxlPGFueT4gPSB0aGlzLl9zdWJtaXQkID9cbiAgICAgIHRoaXMuX3N1Ym1pdCQodGhpcy5fc3VibWl0RXZlbnQpIDogb2Yoc3VibWl0dGVkRXZlbnQpO1xuXG4gICAgcmV0dXJuIHN1Ym1pdCRcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgc3VibWl0dGVkRXZlbnQucmVzcG9uc2UgPSByZXNwb25zZTtcblxuICAgICAgICAgIHJldHVybiBzdWJtaXR0ZWRFdmVudDtcbiAgICAgICAgfSksXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSxcbiAgICAgICk7XG4gIH1cblxuICBwcml2YXRlIGdldCBfZm9ybUludmFsaWRTdGF0ZSQoKTogT2JzZXJ2YWJsZTxuZXZlcj4ge1xuICAgIGlmICh0aGlzLmludmFsaWQpIHtcbiAgICAgIHRoaXMuaW52YWxpZC5lbWl0KHRoaXMuX3N1Ym1pdEV2ZW50KTtcbiAgICB9XG5cbiAgICBjb25zdCBtZXNzYWdlID0gJ1BsZWFzZSByZXZpZXcgZXJyb3JzIGhpZ2hsaWdodGVkIGluIHJlZCc7XG4gICAgdGhpcy5fbWVzc2FnZS5lcnJvcihtZXNzYWdlLCB7IG1vZGU6IE1lc3NhZ2VNb2RlLlRvYXN0IH0pO1xuXG4gICAgY29uc3QgZWwgPSB0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignLm5nLWludmFsaWQnKTtcblxuICAgIGlmIChlbCkge1xuICAgICAgZWwuc2Nyb2xsSW50b1ZpZXcoeyBiZWhhdmlvcjogJ3Ntb290aCcsIGJsb2NrOiAnbmVhcmVzdCcgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gbmV3IEVycm9yKCdGb3JtIHZhbGlkYXRpb24gZXJyb3InKSk7XG4gIH1cblxuICBwcml2YXRlIGdldCBfc3VibWl0dGVyKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2dldEZvcm1Hcm91cCgpLmFjdGl2ZVN1Ym1pdEJ1dHRvbj8ubmFtZTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLl9mb3JtR3JvdXA/LnJlZ2lzdGVyRm9ybSh0aGlzKTtcblxuICAgIGlmICh0aGlzLmRlYWN0aXZhdGlvbkd1YXJkKSB7XG4gICAgICB0aGlzLl9yZWdpc3RlckNhbkRlYWN0aXZhdGVHdWFyZCgpO1xuICAgIH1cblxuICAgIHRoaXMuX3JlZ2lzdGVyQ29uZmlybURpYWxvZ0JhY2tkcm9wRXNjYXBlKCk7XG4gICAgdGhpcy5fbGlzdGVuSG90S2V5cygpO1xuICAgIHRoaXMuX2xpc3RlbldpbmRvd0Nsb3NlKCk7XG4gICAgdGhpcy5fbGlzdGVuU3VibWl0KCk7XG4gICAgdGhpcy5fbGlzdGVuRm9ybVN0YXR1cygpO1xuXG4gICAgaWYgKCF0aGlzLmF1dG9jb21wbGV0ZSkge1xuICAgICAgdGhpcy5fcmVnaXN0ZXJBdXRvY29tcGxldGUoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzLmNvbmZpcm0pIHtcbiAgICAgIHRoaXMuX3VwZGF0ZURpcnR5U3VibWl0QnV0dG9ucygpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBjbGVhclN1Ym1pdChzdWJtaXQ6IChldmVudDogU3VibWl0RXZlbnQpID0+IE9ic2VydmFibGU8YW55PiA9IG51bGwpOiB2b2lkIHtcbiAgICBpZighc3VibWl0IHx8IHN1Ym1pdCA9PT0gdGhpcy5fc3VibWl0JCkge1xuICAgICAgdGhpcy5fc3VibWl0JCA9IG51bGw7XG4gICAgfVxuXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLl9jZFJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyByZWdpc3RlclN1Ym1pdChzdWJtaXQkOiAoKSA9PiBPYnNlcnZhYmxlPGFueT4pOiB2b2lkIHtcbiAgICB0aGlzLl9zdWJtaXQkID0gc3VibWl0JDtcblxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5fY2RSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgbmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge1xuICAgIHN1cGVyLm5nQWZ0ZXJDb250ZW50SW5pdCgpOyBcbiAgICB0aGlzLl9yZWdpc3RlckNvbmZpcm0oKTtcbiAgICB0aGlzLl9yZWdpc3RlckNvbmZpcm1EcmF3ZXJDbG9zZSgpO1xuICAgIHRoaXMuX3JlZ2lzdGVyRHJhd2VyQ2xvc2UoKTtcbiAgICB0aGlzLl9yZWdpc3RlckRpcnR5U3VibWl0QnV0dG9uKCk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5fZm9ybUdyb3VwPy5kZXJlZ2lzdGVyRm9ybSgpO1xuXG4gICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcbiAgICB0aGlzLl9jbGVhbnVwQ2FuRGVhY3RpdmF0ZSgpO1xuICB9XG5cbiAgcHVibGljIGNyZWF0ZVNuYXBzaG90KCk6IHZvaWQge1xuICAgIHRoaXMuX3NuYXBzaG90ID0gdGhpcy5uZ0Zvcm0udmFsdWU7XG4gIH1cblxuICBwdWJsaWMgZ2V0U25hcHNob3QoKTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSB7XG4gICAgcmV0dXJuIHRoaXMuX3NuYXBzaG90IHx8IHt9O1xuICB9XG5cbiAgcHVibGljIHJlc2V0KCk6IHZvaWQge1xuICAgIHRoaXMubmdGb3JtLnJlc2V0Rm9ybSgpO1xuXG4gICAgT2JqZWN0LmtleXModGhpcy5uZ0Zvcm0uY29udHJvbHMpXG4gICAgICAuZm9yRWFjaCgobmFtZTogc3RyaW5nKSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLm5nRm9ybS5jb250cm9sc1tuYW1lXTtcbiAgICAgICAgY29udHJvbC5yZXNldCh0aGlzLl9zbmFwc2hvdFtuYW1lXSk7XG4gICAgICB9KTtcblxuICAgIHRoaXMucmVzZXRlZC5lbWl0KCk7XG4gIH1cblxuICBwdWJsaWMgY2xlYXIoKTogdm9pZCB7XG4gICAgdGhpcy5uZ0Zvcm0ucmVzZXRGb3JtKCk7XG4gICAgdGhpcy5jbGVhcmVkLmVtaXQoKTtcbiAgfVxuXG4gIHB1YmxpYyBkaXJ0eSgpOiB2b2lkIHtcbiAgICB0aGlzLm5nRm9ybS5mb3JtLm1hcmtBc0RpcnR5KCk7XG4gICAgdGhpcy5fdXBkYXRlRGlydHlTdWJtaXRCdXR0b25zKCk7XG4gIH1cblxuICBwdWJsaWMgcHJpc3RpbmUoKTogdm9pZCB7XG4gICAgdGhpcy5uZ0Zvcm0uZm9ybS5tYXJrQXNQcmlzdGluZSgpO1xuICAgIHRoaXMuX3VwZGF0ZURpcnR5U3VibWl0QnV0dG9ucygpO1xuICB9XG5cbiAgcHVibGljIHRyaWdnZXJTdWJtaXQob3B0aW9ucz86IHsgY29uZmlybWVkOiBib29sZWFuIH0pOiB2b2lkIHtcbiAgICB0aGlzLm5nRm9ybS5uZ1N1Ym1pdC5lbWl0KCk7XG4gIH1cblxuICBwdWJsaWMgdHJpZ2dlckNvbmZpcm0oKTogT2JzZXJ2YWJsZTxDb25maXJtUmVzdWx0PiB7XG4gICAgY29uc3Qgc3VibWl0dGVkID0gdGhpcy5zdWJtaXR0aW5nID8gdGhpcy5zdWJtaXR0ZWQuYXNPYnNlcnZhYmxlKCkgOiBvZih7fSk7XG5cbiAgICByZXR1cm4gc3VibWl0dGVkXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgbWVyZ2VNYXAoKCkgPT4gdGhpcy5fZm9ybS5jb25maXJtVW5zYXZlZCh0aGlzKSksXG4gICAgICApO1xuICB9XG5cbiAgcHVibGljIGVuYWJsZSgpOiB2b2lkIHtcbiAgICB0aGlzLm5nRm9ybS5jb250cm9sLmVuYWJsZSgpO1xuXG4gICAgdGhpcy5fdXBkYXRlRGlydHlTdWJtaXRCdXR0b25zKCk7XG4gIH1cblxuICBwdWJsaWMgZGlzYWJsZSgpOiB2b2lkIHtcbiAgICB0aGlzLm5nRm9ybS5jb250cm9sLmRpc2FibGUoKTtcblxuICAgIHRoaXMuX2dldEZvcm1Hcm91cCgpXG4gICAgICAuYnV0dG9ucy5mb3JFYWNoKChidXR0b24pID0+IHtcbiAgICAgICAgYnV0dG9uLmRpc2FibGUoKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHZhbGlkYXRlKCk6IHZvaWQge1xuICAgIE9iamVjdC52YWx1ZXModGhpcy5uZ0Zvcm0uY29udHJvbHMpXG4gICAgICAuZm9yRWFjaCgoY29udHJvbCkgPT4ge1xuICAgICAgICBjb250cm9sLm1hcmtBc0RpcnR5KCk7XG4gICAgICAgIGNvbnRyb2wubWFya0FzVG91Y2hlZCgpO1xuICAgICAgICBjb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHN1Ym1pdCQoc3VibWl0RXZlbnQ6IFN1Ym1pdEV2ZW50KTogT2JzZXJ2YWJsZTxTdWJtaXR0ZWRFdmVudD4ge1xuICAgIHJldHVybiBvZihzdWJtaXRFdmVudClcbiAgICAgIC5waXBlKFxuICAgICAgICB0YXAoKCkgPT4gdGhpcy5fc3RhdHVzVmFsaWRhdGluZygpKSxcbiAgICAgICAgdGFwKCgpID0+IHRoaXMudmFsaWRhdGUoKSksXG4gICAgICAgIHRhcCgoKSA9PiB0aGlzLl9zdGF0dXNTdWJtaXR0aW5nKCkpLFxuICAgICAgICB0YXAoKCkgPT4gdGhpcy5fc2V0dXBBY3RpdmVTdWJtaXRCdXR0b24oKSksXG4gICAgICAgIHRhcCgoKSA9PiB0aGlzLl9kaXNhYmxlQnV0dG9ucygpKSxcbiAgICAgICAgc3dpdGNoTWFwKChkYXRhKSA9PiB0aGlzLl93YWl0VW50aWxTdGF0dXNQZW5kaW5nKClcbiAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgIG1hcCgoKSA9PiBkYXRhKSxcbiAgICAgICAgICApKSwgICAgICAgXG4gICAgICAgIG1lcmdlTWFwKCgpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5uZ0Zvcm0uc3RhdHVzID09PSAnSU5WQUxJRCcpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9mb3JtSW52YWxpZFN0YXRlJDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gdGhpcy5fZm9ybVZhbGlkU3RhdGUkO1xuICAgICAgICB9KSxcbiAgICAgICAgY2F0Y2hFcnJvcigoZSkgPT4ge1xuICAgICAgICAgIHRoaXMuX2hhbmRsZUVycm9yKGUpO1xuXG4gICAgICAgICAgcmV0dXJuIG9mKHtcbiAgICAgICAgICAgIC4uLnRoaXMuX3N1Ym1pdEV2ZW50LFxuICAgICAgICAgICAgZXJyb3I6IGUubWVzc2FnZSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSksXG4gICAgICAgIHRhcCgoc3VibWl0dGVkRXZlbnQ6IFN1Ym1pdHRlZEV2ZW50KSA9PiB7XG4gICAgICAgICAgaWYoIXN1Ym1pdHRlZEV2ZW50LmVycm9yKSB7XG4gICAgICAgICAgICB0aGlzLl9jb21wbGV0ZVN1Ym1pdCh0cnVlLCBzdWJtaXR0ZWRFdmVudCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KSxcbiAgICAgICk7XG4gIH1cblxuICBwcml2YXRlIF9saXN0ZW5TdWJtaXQoKTogdm9pZCB7XG4gICAgdGhpc1xuICAgICAgLm5nRm9ybVxuICAgICAgLm5nU3VibWl0XG4gICAgICAucGlwZShcbiAgICAgICAgdGFwKChldmVudCkgPT4ge1xuICAgICAgICAgIGV2ZW50Py5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9KSxcbiAgICAgICAgZmlsdGVyKCgpID0+IHtcbiAgICAgICAgICByZXR1cm4gW0Zvcm1TdGF0dXMuVmFsaWQsIEZvcm1TdGF0dXMuSW52YWxpZF1cbiAgICAgICAgICAgIC5pbmNsdWRlcyh0aGlzLl9zdGF0dXMkLmdldFZhbHVlKCkpO1xuICAgICAgICB9KSxcbiAgICAgICAgc3dpdGNoTWFwKCgpID0+IHRoaXMuc3VibWl0JCh0aGlzLl9zdWJtaXRFdmVudCkpLFxuICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95JCksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBwcml2YXRlIF9saXN0ZW5Gb3JtU3RhdHVzKCk6IHZvaWQge1xuICAgIHRoaXMuX3N0YXR1cyRcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95JCksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKChmb3JtU3RhdHVzOiBGb3JtU3RhdHVzKSA9PiB7XG4gICAgICAgIGNvbnN0IGNscyA9IFtGb3JtU3RhdHVzLlN1Ym1pdHRpbmcsIEZvcm1TdGF0dXMuVmFsaWRhdGluZ107XG4gICAgICAgIGNvbnN0IGNsYXNzTGlzdCA9IHRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudC5jbGFzc0xpc3Q7XG4gICAgICAgIGNsYXNzTGlzdC5yZW1vdmUoLi4uY2xzKTtcbiAgICAgICAgaWYgKGNscy5pbmRleE9mKGZvcm1TdGF0dXMpICE9PSAtMSkge1xuICAgICAgICAgIGNsYXNzTGlzdC5hZGQoZm9ybVN0YXR1cyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gIH1cblxuICBwcml2YXRlIF9saXN0ZW5XaW5kb3dDbG9zZSgpOiB2b2lkIHtcbiAgICBmcm9tRXZlbnQod2luZG93LCAnYmVmb3JldW5sb2FkJylcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95JCksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKChldmVudDogRXZlbnQpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuY29uZmlybSAmJiB0aGlzLmNvbmZpcm1Ccm93c2VyICYmIHRoaXMubmdGb3JtLmRpcnR5KSB7XG4gICAgICAgICAgZXZlbnQucmV0dXJuVmFsdWUgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF9hY3RpdmVEaWFsb2coZWwsIGRpYWxvZzogSFRNTEVsZW1lbnQpOiBib29sZWFuIHtcbiAgICBpZiAoZWwuaXNTYW1lTm9kZShkaWFsb2cpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKGVsLnBhcmVudEVsZW1lbnQpIHtcbiAgICAgIHJldHVybiB0aGlzLl9hY3RpdmVEaWFsb2coZWwucGFyZW50RWxlbWVudCwgZGlhbG9nKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIF9saXN0ZW5Ib3RLZXlzKCk6IHZvaWQge1xuICAgIHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICBmcm9tRXZlbnQoZG9jdW1lbnQsICdrZXlkb3duJylcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpLFxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuX2RpYWxvZ0JhY2tkcm9wRXNjYXBlICYmIGV2ZW50LmNvZGUgPT09ICdFc2NhcGUnKSB7XG4gICAgICAgICAgICBjb25zdCBjZGtPdmVybGF5UGFuZSA9IEFycmF5XG4gICAgICAgICAgICAgIC5mcm9tKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGw8SFRNTEVsZW1lbnQ+KCcuY2RrLW92ZXJsYXktcGFuZScpKS5wb3AoKTtcbiAgICBcbiAgICAgICAgICAgIGNvbnN0IGFjdGl2ZURpYWxvZyA9IHRoaXNcbiAgICAgICAgICAgICAgLl9hY3RpdmVEaWFsb2coZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5fZGlhbG9nUmVmLmlkKSwgY2RrT3ZlcmxheVBhbmUpO1xuXG4gICAgICAgICAgICBpZiAoYWN0aXZlRGlhbG9nKSB7XG4gICAgICAgICAgICAgIHRoaXMuX25nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX2Zvcm1DbG9zZSgpO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoKGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQubWV0YUtleSkgJiYgZXZlbnQuY29kZSA9PT0gJ0tleVMnKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5zaG9ydGN1dHMpIHtcbiAgICAgICAgICAgICAgaWYgKHRoaXMuX2VsZW1lbnRJbkZvcm0oZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm5nRm9ybS5uZ1N1Ym1pdC5uZXh0KG51bGwpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX2Zvcm1DbG9zZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5jb25maXJtICYmIHRoaXMuY29uZmlybURpYWxvZykge1xuICAgICAgdGhpcy50cmlnZ2VyQ29uZmlybSgpXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIGZpbHRlcigocmVzdWx0KSA9PiBjb25maXJtUmVzdWx0Q29udGludWUocmVzdWx0KSksXG4gICAgICAgICAgc3dpdGNoTWFwKChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQgPT09IENvbmZpcm1SZXN1bHQuTm9DaGFuZ2VzIHx8IHJlc3VsdCA9PT0gQ29uZmlybVJlc3VsdC5EaXNjYXJkXG4gICAgICAgICAgICAgID8gb2YobnVsbClcbiAgICAgICAgICAgICAgOiB0aGlzLnN1Ym1pdHRlZC5hc09ic2VydmFibGUoKTtcbiAgICAgICAgICB9KSxcbiAgICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95JCksXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgocmVzdWx0OiBTdWJtaXR0ZWRFdmVudCkgPT4ge1xuICAgICAgICAgIHRoaXMuX2RpYWxvZ1JlZi5jbG9zZShyZXN1bHQ/LnJlc3BvbnNlKTtcbiAgICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2RpYWxvZ1JlZi5jbG9zZShudWxsKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9nZXRBY3RpdmVTdWJtaXRCdXR0b24oKTogRnNCdXR0b25EaXJlY3RpdmUge1xuICAgIGlmKHRoaXMuX2dldEZvcm1Hcm91cCgpLmFjdGl2ZVN1Ym1pdEJ1dHRvbikge1xuICAgICAgcmV0dXJuIHRoaXMuX2dldEZvcm1Hcm91cCgpLmFjdGl2ZVN1Ym1pdEJ1dHRvbjtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fZ2V0Rm9ybUdyb3VwKClcbiAgICAgIC5idXR0b25zXG4gICAgICAuZmlsdGVyKChidXR0b24pID0+IGJ1dHRvbi5zdWJtaXQpWzBdO1xuICB9XG5cbiAgcHJpdmF0ZSBfZWxlbWVudEluRm9ybShlbDogRWxlbWVudCk6IGJvb2xlYW4ge1xuICAgIGlmIChlbC5pc1NhbWVOb2RlKHRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudCkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSBpZiAoZWwucGFyZW50RWxlbWVudCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2VsZW1lbnRJbkZvcm0oZWwucGFyZW50RWxlbWVudCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSBfY29tcGxldGVTdWJtaXQoc3VjY2Vzcywgc3VibWl0RXZlbnQ6IFN1Ym1pdHRlZEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKHN1Y2Nlc3MpIHtcbiAgICAgIHRoaXMubmdGb3JtLmNvbnRyb2wubWFya0FzUHJpc3RpbmUoKTtcbiAgICAgIHRoaXMuY3JlYXRlU25hcHNob3QoKTtcbiAgICAgIHRoaXMuc3VibWl0dGVkLmVtaXQoc3VibWl0RXZlbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9yZXNldEJ1dHRvbnMoKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fZ2V0Rm9ybUdyb3VwKCkuYWN0aXZlU3VibWl0QnV0dG9uKSB7XG4gICAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgICB0aGlzLl9nZXRGb3JtR3JvdXAoKS5hY3RpdmVTdWJtaXRCdXR0b24uc3VjY2VzcygpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fZ2V0Rm9ybUdyb3VwKCkuYWN0aXZlU3VibWl0QnV0dG9uLmVycm9yKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5fc3RhdHVzJC5uZXh0KEZvcm1TdGF0dXMuU3VibWl0dGVkKTtcblxuICAgIGlmIChzdWNjZXNzKSB7XG4gICAgICB0aGlzLl9zdGF0dXMkLm5leHQoRm9ybVN0YXR1cy5TdWNjZXNzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fc3RhdHVzJC5uZXh0KEZvcm1TdGF0dXMuRXJyb3IpO1xuICAgIH1cblxuICAgIHRoaXMuX3N0YXR1cyQubmV4dChGb3JtU3RhdHVzLkNvbXBsZXRpbmcpO1xuXG4gICAgY29uc3QgcmVzZXREZWxheSA9IHN1Y2Nlc3MgPyB0aGlzLnN1Y2Nlc3NEZWxheSA6IHRoaXMuZXJyb3JEZWxheTtcblxuICAgIG9mKHRydWUpXG4gICAgICAucGlwZShcbiAgICAgICAgZGVsYXkocmVzZXREZWxheSksXG4gICAgICAgIGZpcnN0KCksXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5uZ0Zvcm0uZm9ybS5zdGF0dXMgPT09ICdWQUxJRCcpIHtcbiAgICAgICAgICB0aGlzLl9zdGF0dXMkLm5leHQoRm9ybVN0YXR1cy5WYWxpZCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5fc3RhdHVzJC5uZXh0KEZvcm1TdGF0dXMuSW52YWxpZCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9yZXNldEJ1dHRvbnMoKTtcbiAgICAgICAgdGhpcy5fZ2V0Rm9ybUdyb3VwKCkuYWN0aXZlU3VibWl0QnV0dG9uID0gbnVsbDtcbiAgICAgICAgdGhpcy5fdXBkYXRlRGlydHlTdWJtaXRCdXR0b25zKCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX2dldEZvcm1Hcm91cCgpOiBGc0Zvcm1CYXNlRGlyZWN0aXZlIHtcbiAgICByZXR1cm4gdGhpcy5fZm9ybUdyb3VwIHx8IHRoaXM7XG4gIH1cblxuICBwcml2YXRlIF9yZXNldEJ1dHRvbnMoKTogdm9pZCB7XG4gICAgdGhpcy5fZ2V0Rm9ybUdyb3VwKClcbiAgICAgIC5idXR0b25zLmZvckVhY2goKGJ1dHRvbikgPT4ge1xuICAgICAgICBidXR0b24ucmVzZXQoKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfcmVnaXN0ZXJDb25maXJtKCk6IHZvaWQge1xuICAgIHRoaXMubmdGb3JtLmZvcm0udmFsdWVDaGFuZ2VzXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoY2hhbmdlcykgPT4ge1xuICAgICAgICBpZih0aGlzLl9kaWFsb2dCYWNrZHJvcEVzY2FwZSAmJiB0aGlzLl9kaWFsb2dSZWYpIHtcbiAgICAgICAgICB0aGlzLl9kaWFsb2dSZWYuZGlzYWJsZUNsb3NlID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmNvbmZpcm0pIHtcbiAgICAgICAgICBjb25zdCBleGlzdGluZyA9IE9iamVjdC5rZXlzKHRoaXMuX3NuYXBzaG90KTtcblxuICAgICAgICAgIE9iamVjdC5rZXlzKGNoYW5nZXMpXG4gICAgICAgICAgICAuZm9yRWFjaCgobmFtZTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICAgIGlmIChleGlzdGluZy5pbmRleE9mKG5hbWUpID09PSAtMSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3NuYXBzaG90W25hbWVdID0gY2hhbmdlc1tuYW1lXTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfcmVnaXN0ZXJEcmF3ZXJDbG9zZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fZHJhd2VyUmVmKSB7XG4gICAgICB0aGlzLl9kcmF3ZXJSZWYuY2xvc2VTdGFydCRcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpLFxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKHN1YnNjcmliZXIpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5zdWJtaXR0aW5nKSB7XG4gICAgICAgICAgICB0aGlzLl9zdGF0dXMkXG4gICAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIGZpbHRlcigoc3RhdHVzKSA9PiBzdGF0dXMgPT09IEZvcm1TdGF0dXMuU3VjY2VzcyB8fCBzdGF0dXMgPT09IEZvcm1TdGF0dXMuRXJyb3IpLFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAuc3Vic2NyaWJlKChzdGF0dXMpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoc3RhdHVzID09PSBGb3JtU3RhdHVzLlN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dChudWxsKTtcbiAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlci5lcnJvcigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dChudWxsKTtcbiAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3JlZ2lzdGVyQ29uZmlybURyYXdlckNsb3NlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9kcmF3ZXJSZWYpIHtcbiAgICAgIHRoaXMuX2RyYXdlclJlZi5jbG9zZVN0YXJ0JFxuICAgICAgICAucGlwZShcbiAgICAgICAgICBzd2l0Y2hNYXAoKHN1YnNjcmliZXIpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBpaWYoXG4gICAgICAgICAgICAgICgpID0+IHRoaXMuY29uZmlybSAmJiB0aGlzLmNvbmZpcm1EcmF3ZXIsXG4gICAgICAgICAgICAgIHRoaXMudHJpZ2dlckNvbmZpcm0oKVxuICAgICAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgICAgbWFwKChyZXN1bHQpID0+IGNvbmZpcm1SZXN1bHRDb250aW51ZShyZXN1bHQpKSxcbiAgICAgICAgICAgICAgICAgIHRhcCgocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICBkZWZlcigoKSA9PiB7XG4gICAgICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KG51bGwpO1xuICAgICAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcblxuICAgICAgICAgICAgICAgIHJldHVybiBvZihudWxsKTtcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSxcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG4gIFxuICBwcml2YXRlIF9yZWdpc3RlckNvbmZpcm1EaWFsb2dCYWNrZHJvcEVzY2FwZSgpOiB2b2lkIHtcbiAgICBpZih0aGlzLl9kaWFsb2dSZWYpIHtcbiAgICAgIHRoaXMuX2RpYWxvZ0JhY2tkcm9wRXNjYXBlID0gIXRoaXMuX2RpYWxvZ1JlZj8uZGlzYWJsZUNsb3NlO1xuXG4gICAgICBpZiAodGhpcy5fZGlhbG9nQmFja2Ryb3BFc2NhcGUpIHtcbiAgICAgICAgdGhpcy5fZGlhbG9nUmVmLmJhY2tkcm9wQ2xpY2soKVxuICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpLFxuICAgICAgICAgIClcbiAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2Zvcm1DbG9zZSgpO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuZGVzdHJveSRcbiAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2RpYWxvZ1JlZi5kaXNhYmxlQ2xvc2UgPSBmYWxzZTtcbiAgICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9yZWdpc3RlckF1dG9jb21wbGV0ZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9yZWdpc3RlckNvbnRyb2wgPSB0aGlzLm5nRm9ybS5mb3JtLnJlZ2lzdGVyQ29udHJvbC5iaW5kKHRoaXMubmdGb3JtLmZvcm0pO1xuXG4gICAgdGhpcy5uZ0Zvcm0uZm9ybS5yZWdpc3RlckNvbnRyb2wgPSAobmFtZTogc3RyaW5nLCBjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpID0+IHtcblxuICAgICAgY29uc3QgZWw6IEVsZW1lbnQgPSB0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcihgaW5wdXRbbmFtZT0nJHtuYW1lfSddYCk7XG5cbiAgICAgIGlmIChlbCkge1xuICAgICAgICBpZiAoIWVsLmdldEF0dHJpYnV0ZSgnYXV0b2NvbXBsZXRlJykpIHtcbiAgICAgICAgICBlbC5zZXRBdHRyaWJ1dGUoJ2F1dG9jb21wbGV0ZScsICdub25lJyk7XG4gICAgICAgICAgZWwuc2V0QXR0cmlidXRlKCduYW1lJywgYCR7bmFtZX0tJHtndWlkKCl9YCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMuX3JlZ2lzdGVyQ29udHJvbChuYW1lLCBjb250cm9sKTtcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBfcmVnaXN0ZXJEaXJ0eVN1Ym1pdEJ1dHRvbigpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMubmdGb3JtKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5uZ0Zvcm0uZm9ybS52YWx1ZUNoYW5nZXNcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95JCksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5fdXBkYXRlRGlydHlTdWJtaXRCdXR0b25zKCk7XG4gICAgICB9KTtcblxuICAgIHRoaXMuX2dldEZvcm1Hcm91cCgpXG4gICAgICAuYnV0dG9ucy5jaGFuZ2VzXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuX3VwZGF0ZURpcnR5U3VibWl0QnV0dG9ucygpO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF91cGRhdGVEaXJ0eVN1Ym1pdEJ1dHRvbnMoKTogdm9pZCB7XG4gICAgdGhpcy5fZ2V0Rm9ybUdyb3VwKClcbiAgICAgIC5idXR0b25zXG4gICAgICAuZmlsdGVyKChidXR0b24pID0+IGJ1dHRvbi5zdWJtaXQpXG4gICAgICAuZm9yRWFjaCgoc3VibWl0QnV0dG9uOiBGc0J1dHRvbkRpcmVjdGl2ZSkgPT4ge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgIXRoaXMuY29uZmlybSB8fCAhdGhpcy5kaXJ0eVN1Ym1pdEJ1dHRvbiB8fCB0aGlzLm5nRm9ybS5kaXJ0eSB8fCAhc3VibWl0QnV0dG9uLmRpcnR5U3VibWl0XG4gICAgICAgICkge1xuICAgICAgICAgIHN1Ym1pdEJ1dHRvbi5lbmFibGUoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzdWJtaXRCdXR0b24uZGlzYWJsZSgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX3N0YXR1c1N1Ym1pdHRpbmcoKTogdm9pZCB7XG4gICAgdGhpcy5fc3RhdHVzJC5uZXh0KEZvcm1TdGF0dXMuU3VibWl0dGluZyk7XG4gIH1cblxuICBwcml2YXRlIF9zdGF0dXNWYWxpZGF0aW5nKCk6IHZvaWQge1xuICAgIHRoaXMuX3N0YXR1cyQubmV4dChGb3JtU3RhdHVzLlZhbGlkYXRpbmcpO1xuICB9XG5cbiAgcHJpdmF0ZSBfc2V0dXBBY3RpdmVTdWJtaXRCdXR0b24oKTogdm9pZCB7XG4gICAgdGhpcy5fZ2V0Rm9ybUdyb3VwKClcbiAgICAgIC5hY3RpdmVTdWJtaXRCdXR0b24gPSB0aGlzLl9nZXRBY3RpdmVTdWJtaXRCdXR0b24oKTtcbiAgICB0aGlzLl9yZXNldEJ1dHRvbnMoKTtcblxuICAgIGlmICh0aGlzLl9nZXRGb3JtR3JvdXAoKS5hY3RpdmVTdWJtaXRCdXR0b24pIHtcbiAgICAgIHRoaXMuX2dldEZvcm1Hcm91cCgpLmFjdGl2ZVN1Ym1pdEJ1dHRvbi5wcm9jZXNzKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfZGlzYWJsZUJ1dHRvbnMoKTogdm9pZCB7XG4gICAgdGhpcy5fZ2V0Rm9ybUdyb3VwKClcbiAgICAgIC5idXR0b25zLmZvckVhY2goKGJ1dHRvbikgPT4ge1xuICAgICAgICBidXR0b24uZGlzYWJsZSgpO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF93YWl0VW50aWxTdGF0dXNQZW5kaW5nKCk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMubmdGb3JtLnN0YXR1c0NoYW5nZXNcbiAgICAgIC5waXBlKFxuICAgICAgICBzdGFydFdpdGgodGhpcy5uZ0Zvcm0uc3RhdHVzKSxcbiAgICAgICAgZmlyc3QoKHN0YXRlKSA9PiBzdGF0ZSAhPT0gJ1BFTkRJTkcnKSxcbiAgICAgICk7XG4gIH1cblxuICBwcml2YXRlIF9oYW5kbGVFcnJvcihlOiBTdWJtaXR0ZWRFdmVudCkge1xuICAgIGNvbnNvbGUubG9nKCclYyBGb3JtIFN1Ym1pdCAnLCAnY29sb3I6IHdoaXRlOyBiYWNrZ3JvdW5kLWNvbG9yOiAjRDMzRjQ5JywgJ0Vycm9yIG9jY3VyZWQnKTtcbiAgICBjb25zb2xlLmdyb3VwKCdFcnJvciBEZXRhaWxzOicpO1xuICAgIGNvbnNvbGUubG9nKCdNZXNzYWdlOiAnLCBlKTtcbiAgICBjb25zb2xlLmxvZygnRm9ybVJlZjogJywgdGhpcyk7XG5cbiAgICBpZiAodGhpcy5uZ0Zvcm0uaW52YWxpZCkge1xuICAgICAgY29uc3QgZXJyb3JzID0gZ2V0Rm9ybUVycm9ycyh0aGlzLm5nRm9ybS5jb250cm9sLCBudWxsKTtcbiAgICAgIGNvbnNvbGUubG9nKCdWYWxpZGF0aW9uIEVycm9yczogJywgZXJyb3JzKTtcbiAgICB9XG5cbiAgICBjb25zb2xlLmdyb3VwRW5kKCk7XG4gICAgdGhpcy5fY29tcGxldGVTdWJtaXQoZmFsc2UsIG51bGwpO1xuICB9XG5cbiAgcHJpdmF0ZSBfcmVnaXN0ZXJDYW5EZWFjdGl2YXRlR3VhcmQoKTogdm9pZCB7XG4gICAgdGhpcy5fYWN0aXZhdGVkUm91dGVDb25maWcgPSBnZXRBY3RpdmVSb3V0ZSh0aGlzLl9yb3V0ZSkucm91dGVDb25maWc7XG5cbiAgICBpZiAoIXRoaXMuX2FjdGl2YXRlZFJvdXRlQ29uZmlnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fZm9ybS5yZWdpc3RlckZvcm1EaXJlY3RpdmUodGhpcy5fYWN0aXZhdGVkUm91dGVDb25maWcuY29tcG9uZW50LCB0aGlzKTtcblxuICAgIGlmICghQXJyYXkuaXNBcnJheSh0aGlzLl9hY3RpdmF0ZWRSb3V0ZUNvbmZpZy5jYW5EZWFjdGl2YXRlKSkge1xuICAgICAgdGhpcy5fYWN0aXZhdGVkUm91dGVDb25maWcuY2FuRGVhY3RpdmF0ZSA9IFtdO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9hY3RpdmF0ZWRSb3V0ZUNvbmZpZy5jYW5EZWFjdGl2YXRlLmluZGV4T2YoRm9ybURlYWN0aXZhdGVHdWFyZCkgPT09IC0xKSB7XG4gICAgICB0aGlzLl9hY3RpdmF0ZWRSb3V0ZUNvbmZpZy5jYW5EZWFjdGl2YXRlLnB1c2goRm9ybURlYWN0aXZhdGVHdWFyZCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfY2xlYW51cENhbkRlYWN0aXZhdGUoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl9hY3RpdmF0ZWRSb3V0ZUNvbmZpZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGd1YXJkSW5kZXggPSB0aGlzLl9hY3RpdmF0ZWRSb3V0ZUNvbmZpZy5jYW5EZWFjdGl2YXRlLmluZGV4T2YoRm9ybURlYWN0aXZhdGVHdWFyZCk7XG4gICAgdGhpcy5fYWN0aXZhdGVkUm91dGVDb25maWcuY2FuRGVhY3RpdmF0ZS5zcGxpY2UoZ3VhcmRJbmRleCwgMSk7XG5cbiAgICB0aGlzLl9mb3JtLnJlbW92ZUZvcm1EaXJlY3RpdmUodGhpcy5fYWN0aXZhdGVkUm91dGVDb25maWcuY29tcG9uZW50KTtcbiAgfVxuXG59XG4iXX0=
|
|
644
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2RpcmVjdGl2ZXMvZm9ybS9mb3JtLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osV0FBVyxFQUNYLE1BQU0sRUFDTixLQUFLLEVBSUwsUUFBUSxFQUNSLE1BQU0sR0FFUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQW1CLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxjQUFjLEVBQVMsTUFBTSxpQkFBaUIsQ0FBQztBQUV4RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFeEQsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUMvQyxPQUFPLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRTdELE9BQU8sRUFDTCxlQUFlLEVBQ2YsS0FBSyxFQUNMLFNBQVMsRUFDVCxHQUFHLEVBRUgsRUFBRSxFQUNGLFVBQVUsR0FDWCxNQUFNLE1BQU0sQ0FBQztBQUNkLE9BQU8sRUFDTCxVQUFVLEVBQ1YsS0FBSyxFQUNMLE1BQU0sRUFDTixLQUFLLEVBQ0wsR0FBRyxFQUNILFFBQVEsRUFDUixTQUFTLEVBQ1QsU0FBUyxFQUNULElBQUksRUFDSixTQUFTLEVBQ1QsR0FBRyxHQUNKLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEIsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDekUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDOUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUM5RCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFFdkQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ25ELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVyRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDN0QsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDJCQUEyQixDQUFDOzs7Ozs7Ozs7QUFTdkQsTUFBTSxPQUFPLGVBQ1gsU0FBUSxtQkFBbUI7SUFvRmxCO0lBQ0M7SUFDQTtJQUNBO0lBQ1k7SUFFWjtJQUdBO0lBRUE7SUEzRkgsZUFBZSxHQUFHLHNDQUFzQyxDQUFDO0lBR3pELGVBQWUsR0FBRyx3REFBd0QsQ0FBQztJQUczRSxZQUFZLEdBQUcsZ0RBQWdELENBQUM7SUFHaEUsYUFBYSxHQUFHLDhDQUE4QyxDQUFDO0lBRy9ELFlBQVksR0FBRyxLQUFLLENBQUM7SUFHckIsU0FBUyxHQUFHLElBQUksQ0FBQyxDQUFDLFdBQVc7SUFHN0IsT0FBTyxHQUE0QixJQUFJLENBQUM7SUFHeEMsYUFBYSxHQUFHLElBQUksQ0FBQztJQUdyQixhQUFhLEdBQUcsSUFBSSxDQUFDO0lBR3JCLGNBQWMsR0FBRyxJQUFJLENBQUM7SUFHdEIsaUJBQWlCLEdBQUcsSUFBSSxDQUFDO0lBRWhDLElBQ1csTUFBTSxDQUFDLE9BQWdEO1FBQ2hFLElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDO0lBQzFCLENBQUM7SUFFRCxJQUFXLE1BQU07UUFDZixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDdkIsQ0FBQztJQUdNLFlBQVksR0FBRyxDQUFDLENBQUM7SUFHakIsVUFBVSxHQUFHLElBQUksQ0FBQztJQUdsQixpQkFBaUIsR0FBRyxJQUFJLENBQUM7SUFHekIsV0FBVyxHQUE4QixJQUFJLFlBQVksRUFBRSxDQUFDO0lBRzVELE9BQU8sR0FBOEIsSUFBSSxZQUFZLEVBQUUsQ0FBQztJQUd4RCxLQUFLLEdBQThCLElBQUksWUFBWSxFQUFFLENBQUM7SUFHdEQsU0FBUyxHQUE4QixJQUFJLFlBQVksRUFBRSxDQUFDO0lBRzFELE9BQU8sR0FBOEIsSUFBSSxZQUFZLEVBQUUsQ0FBQztJQUd4RCxPQUFPLEdBQThCLElBQUksWUFBWSxFQUFFLENBQUM7SUFHeEQsV0FBVyxHQUFHLElBQUksQ0FBQztJQUVsQixnQkFBZ0IsQ0FBQztJQUNqQixxQkFBcUIsR0FBRyxLQUFLLENBQUM7SUFDOUIsU0FBUyxHQUEyQixFQUFFLENBQUM7SUFDdkMscUJBQXFCLENBQWU7SUFDcEMsUUFBUSxHQUFHLElBQUksZUFBZSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNqRCxRQUFRLEdBQTZDLElBQUksQ0FBQztJQUVsRSxZQUVTLE1BQWMsRUFDYixLQUFhLEVBQ2IsUUFBb0IsRUFDcEIsUUFBbUIsRUFDUCxVQUFnQyxFQUU1QyxVQUE2QixFQUc3QixVQUEwQixFQUUxQixNQUFzQjtRQUU5QixLQUFLLEVBQUUsQ0FBQztRQWJELFdBQU0sR0FBTixNQUFNLENBQVE7UUFDYixVQUFLLEdBQUwsS0FBSyxDQUFRO1FBQ2IsYUFBUSxHQUFSLFFBQVEsQ0FBWTtRQUNwQixhQUFRLEdBQVIsUUFBUSxDQUFXO1FBQ1AsZUFBVSxHQUFWLFVBQVUsQ0FBc0I7UUFFNUMsZUFBVSxHQUFWLFVBQVUsQ0FBbUI7UUFHN0IsZUFBVSxHQUFWLFVBQVUsQ0FBZ0I7UUFFMUIsV0FBTSxHQUFOLE1BQU0sQ0FBZ0I7SUFHaEMsQ0FBQztJQUVELElBQVcsVUFBVTtRQUNuQixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLEtBQUssVUFBVSxDQUFDLFVBQVUsQ0FBQztJQUM1RCxDQUFDO0lBRUQsSUFBVyxVQUFVO1FBQ25CLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsS0FBSyxVQUFVLENBQUMsVUFBVSxDQUFDO0lBQzVELENBQUM7SUFFRCxJQUFXLFVBQVU7UUFDbkIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxLQUFLLFVBQVUsQ0FBQyxVQUFVLENBQUM7SUFDNUQsQ0FBQztJQUVELElBQVksWUFBWTtRQUN0QixPQUFPO1lBQ0wsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO1lBQ25CLFNBQVMsRUFBRSxJQUFJLENBQUMsVUFBVTtTQUMzQixDQUFDO0lBQ0osQ0FBQztJQUVELElBQVksZ0JBQWdCO1FBQzFCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUN6QyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFFbkMsTUFBTSxjQUFjLEdBQW1CO1lBQ3JDLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTTtZQUNuQixTQUFTLEVBQUUsSUFBSSxDQUFDLFVBQVU7WUFDMUIsUUFBUSxFQUFFLElBQUk7U0FDZixDQUFDO1FBRUYsTUFBTSxPQUFPLEdBQW9CLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUM5QyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBRXhELE9BQU8sT0FBTzthQUNYLElBQUksQ0FDSCxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRTtZQUNmLGNBQWMsQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1lBRW5DLE9BQU8sY0FBYyxDQUFDO1FBQ3hCLENBQUMsQ0FBQyxFQUNGLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQ3pCLENBQUM7SUFDTixDQUFDO0lBRUQsSUFBWSxrQkFBa0I7UUFDNUIsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDakIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3ZDLENBQUM7UUFFRCxNQUFNLE9BQU8sR0FBRyx5Q0FBeUMsQ0FBQztRQUMxRCxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsRUFBRSxJQUFJLEVBQUUsV0FBVyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7UUFFMUQsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBRXBFLElBQUksRUFBRSxFQUFFLENBQUM7WUFDUCxFQUFFLENBQUMsY0FBYyxDQUFDLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQztRQUM5RCxDQUFDO1FBRUQsT0FBTyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxLQUFLLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxDQUFDO0lBQzlELENBQUM7SUFFRCxJQUFZLFVBQVU7UUFDcEIsT0FBTyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsa0JBQWtCLEVBQUUsSUFBSSxDQUFDO0lBQ3ZELENBQUM7SUFFTSxRQUFRO1FBQ2IsSUFBSSxDQUFDLFVBQVUsRUFBRSxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFcEMsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUMzQixJQUFJLENBQUMsMkJBQTJCLEVBQUUsQ0FBQztRQUNyQyxDQUFDO1FBRUQsSUFBSSxDQUFDLG9DQUFvQyxFQUFFLENBQUM7UUFDNUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQzFCLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNyQixJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUV6QixJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBQy9CLENBQUM7SUFDSCxDQUFDO0lBRU0sV0FBVyxDQUFDLE9BQXNCO1FBQ3ZDLElBQUksT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3BCLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFDO1FBQ25DLENBQUM7SUFDSCxDQUFDO0lBRU0sV0FBVyxDQUFDLFNBQWtELElBQUk7UUFDdkUsSUFBRyxDQUFDLE1BQU0sSUFBSSxNQUFNLEtBQUssSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1FBQ3ZCLENBQUM7UUFFRCxVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUM3QixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTSxjQUFjLENBQUMsT0FBOEI7UUFDbEQsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUM7UUFFeEIsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNkLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDN0IsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU0sa0JBQWtCO1FBQ3ZCLEtBQUssQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQzNCLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQywyQkFBMkIsRUFBRSxDQUFDO1FBQ25DLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQywwQkFBMEIsRUFBRSxDQUFDO0lBQ3BDLENBQUM7SUFFTSxXQUFXO1FBQ2hCLElBQUksQ0FBQyxVQUFVLEVBQUUsY0FBYyxFQUFFLENBQUM7UUFFbEMsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO0lBQy9CLENBQUM7SUFFTSxjQUFjO1FBQ25CLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7SUFDckMsQ0FBQztJQUVNLFdBQVc7UUFDaEIsT0FBTyxJQUFJLENBQUMsU0FBUyxJQUFJLEVBQUUsQ0FBQztJQUM5QixDQUFDO0lBRU0sS0FBSztRQUNWLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUM7UUFFeEIsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQzthQUM5QixPQUFPLENBQUMsQ0FBQyxJQUFZLEVBQUUsRUFBRTtZQUN4QixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMzQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUN0QyxDQUFDLENBQUMsQ0FBQztRQUVMLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQUVNLEtBQUs7UUFDVixJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQUVNLEtBQUs7UUFDVixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUMvQixJQUFJLENBQUMseUJBQXlCLEVBQUUsQ0FBQztJQUNuQyxDQUFDO0lBRU0sUUFBUTtRQUNiLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ2xDLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFDO0lBQ25DLENBQUM7SUFFTSxhQUFhLENBQUMsT0FBZ0M7UUFDbkQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDOUIsQ0FBQztJQUVNLGNBQWM7UUFDbkIsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRTNFLE9BQU8sU0FBUzthQUNiLElBQUksQ0FDSCxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQ1AsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQ2hELENBQUM7SUFDTixDQUFDO0lBRU0sTUFBTTtRQUNYLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBRTdCLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFDO0lBQ25DLENBQUM7SUFFTSxPQUFPO1FBQ1osSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7UUFFOUIsSUFBSSxDQUFDLGFBQWEsRUFBRTthQUNqQixPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDMUIsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ25CLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVNLFFBQVE7UUFDYixNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDO2FBQ2hDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQ25CLE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUN0QixPQUFPLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDeEIsT0FBTyxDQUFDLHNCQUFzQixFQUFFLENBQUM7UUFDbkMsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRU0sT0FBTyxDQUFDLFdBQXdCO1FBQ3JDLE9BQU8sRUFBRSxDQUFDLFdBQVcsQ0FBQzthQUNuQixJQUFJLENBQ0gsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLEVBQ25DLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsRUFDMUIsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLEVBQ25DLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQyxFQUMxQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDLEVBQ2pDLFNBQVMsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLHVCQUF1QixFQUFFO2FBQy9DLElBQUksQ0FDSCxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQ2hCLENBQUMsRUFDSixRQUFRLENBQUMsR0FBRyxFQUFFO1lBQ1osSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sS0FBSyxTQUFTLEVBQUUsQ0FBQztnQkFDckMsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUM7WUFDakMsQ0FBQztZQUVELE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDO1FBQy9CLENBQUMsQ0FBQyxFQUNGLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQ2YsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUVyQixPQUFPLEVBQUUsQ0FBQztnQkFDUixHQUFHLElBQUksQ0FBQyxZQUFZO2dCQUNwQixLQUFLLEVBQUUsQ0FBQyxFQUFFLE9BQU87YUFDbEIsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLEVBQ0YsR0FBRyxDQUFDLENBQUMsY0FBOEIsRUFBRSxFQUFFO1lBQ3JDLElBQUcsQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ3pCLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLGNBQWMsQ0FBQyxDQUFDO1lBQzdDLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ04sQ0FBQztJQUVPLGFBQWE7UUFDbkIsSUFBSTthQUNELE1BQU07YUFDTixRQUFRO2FBQ1IsSUFBSSxDQUNILEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ1osS0FBSyxFQUFFLGNBQWMsRUFBRSxDQUFDO1FBQzFCLENBQUMsQ0FBQyxFQUNGLE1BQU0sQ0FBQyxHQUFHLEVBQUU7WUFDVixPQUFPLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsT0FBTyxDQUFDO2lCQUMxQyxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQ3hDLENBQUMsQ0FBQyxFQUNGLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxFQUNoRCxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUN6QjthQUNBLFNBQVMsRUFBRSxDQUFDO0lBQ2pCLENBQUM7SUFFTyxpQkFBaUI7UUFDdkIsSUFBSSxDQUFDLFFBQVE7YUFDVixJQUFJLENBQ0gsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FDekI7YUFDQSxTQUFTLENBQUMsQ0FBQyxVQUFzQixFQUFFLEVBQUU7WUFDcEMsTUFBTSxHQUFHLEdBQUcsQ0FBQyxVQUFVLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUMzRCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUM7WUFDeEQsU0FBUyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO1lBQ3pCLElBQUksR0FBRyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUNuQyxTQUFTLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQzVCLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUVQLENBQUM7SUFFTyxrQkFBa0I7UUFDeEIsU0FBUyxDQUFDLE1BQU0sRUFBRSxjQUFjLENBQUM7YUFDOUIsSUFBSSxDQUNILFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQ3pCO2FBQ0EsU0FBUyxDQUFDLENBQUMsS0FBWSxFQUFFLEVBQUU7WUFDMUIsSUFBSSxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxjQUFjLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDN0QsS0FBSyxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7WUFDNUIsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVPLGFBQWEsQ0FBQyxFQUFFLEVBQUUsTUFBbUI7UUFDM0MsSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDMUIsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO2FBQU0sSUFBSSxFQUFFLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDNUIsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQyxhQUFhLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDdEQsQ0FBQztRQUVELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVPLGNBQWM7UUFDcEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUU7WUFDbEMsU0FBUyxDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUM7aUJBQzNCLElBQUksQ0FDSCxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUN6QjtpQkFDQSxTQUFTLENBQUMsQ0FBQyxLQUFvQixFQUFFLEVBQUU7Z0JBQ2xDLElBQUksSUFBSSxDQUFDLHFCQUFxQixJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssUUFBUSxFQUFFLENBQUM7b0JBQzFELE1BQU0sY0FBYyxHQUFHLEtBQUs7eUJBQ3pCLElBQUksQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQWMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO29CQUUzRSxNQUFNLFlBQVksR0FBRyxJQUFJO3lCQUN0QixhQUFhLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFLGNBQWMsQ0FBQyxDQUFDO29CQUU5RSxJQUFJLFlBQVksRUFBRSxDQUFDO3dCQUNqQixJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUU7NEJBQ3BCLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQzt3QkFDcEIsQ0FBQyxDQUFDLENBQUM7b0JBQ0wsQ0FBQztnQkFDSCxDQUFDO2dCQUVELElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLE1BQU0sRUFBRSxDQUFDO29CQUM5RCxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7b0JBRXZCLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO3dCQUNuQixJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUM7NEJBQ2hELElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQzt3QkFDbEMsQ0FBQztvQkFDSCxDQUFDO2dCQUNILENBQUM7WUFDSCxDQUFDLENBQUMsQ0FBQztRQUNQLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLFVBQVU7UUFDaEIsSUFBSSxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUN2QyxJQUFJLENBQUMsY0FBYyxFQUFFO2lCQUNsQixJQUFJLENBQ0gsTUFBTSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUNqRCxTQUFTLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtnQkFDbkIsT0FBTyxNQUFNLEtBQUssYUFBYSxDQUFDLFNBQVMsSUFBSSxNQUFNLEtBQUssYUFBYSxDQUFDLE9BQU87b0JBQzNFLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDO29CQUNWLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3BDLENBQUMsQ0FBQyxFQUNGLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQ3pCO2lCQUNBLFNBQVMsQ0FBQyxDQUFDLE1BQXNCLEVBQUUsRUFBRTtnQkFDcEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQzFDLENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM5QixDQUFDO0lBQ0gsQ0FBQztJQUVPLHNCQUFzQjtRQUM1QixJQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1lBQzNDLE9BQU8sSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLGtCQUFrQixDQUFDO1FBQ2pELENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQyxhQUFhLEVBQUU7YUFDeEIsT0FBTzthQUNQLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFFTyxjQUFjLENBQUMsRUFBVztRQUNoQyxJQUFJLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDO1lBQy9DLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQzthQUFNLElBQUksRUFBRSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQzVCLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDL0MsQ0FBQztRQUVELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVPLGVBQWUsQ0FBQyxPQUFPLEVBQUUsV0FBMkI7UUFDMUQsSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUNaLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3JDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN0QixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNuQyxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUN2QixDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUM1QyxJQUFJLE9BQU8sRUFBRSxDQUFDO2dCQUNaLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNwRCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLGtCQUFrQixDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2xELENBQUM7UUFDSCxDQUFDO1FBRUQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRXpDLElBQUksT0FBTyxFQUFFLENBQUM7WUFDWixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDekMsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdkMsQ0FBQztRQUVELElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUUxQyxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUM7UUFFakUsRUFBRSxDQUFDLElBQUksQ0FBQzthQUNMLElBQUksQ0FDSCxLQUFLLENBQUMsVUFBVSxDQUFDLEVBQ2pCLEtBQUssRUFBRSxFQUNQLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQ3pCO2FBQ0EsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUNkLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxLQUFLLE9BQU8sRUFBRSxDQUFDO2dCQUN4QyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdkMsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUN6QyxDQUFDO1lBRUQsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUM7WUFDL0MsSUFBSSxDQUFDLHlCQUF5QixFQUFFLENBQUM7UUFDbkMsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRU8sYUFBYTtRQUNuQixPQUFPLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDO0lBQ2pDLENBQUM7SUFFTyxhQUFhO1FBQ25CLElBQUksQ0FBQyxhQUFhLEVBQUU7YUFDakIsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBQzFCLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNqQixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFTyxnQkFBZ0I7UUFDdEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWTthQUMxQixJQUFJLENBQ0gsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FDekI7YUFDQSxTQUFTLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUNyQixJQUFHLElBQUksQ0FBQyxxQkFBcUIsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7Z0JBQ2pELElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztZQUN0QyxDQUFDO1lBRUQsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ2pCLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUU3QyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztxQkFDakIsT0FBTyxDQUFDLENBQUMsSUFBWSxFQUFFLEVBQUU7b0JBQ3hCLElBQUksUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDO3dCQUNsQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDdkMsQ0FBQztnQkFDSCxDQUFDLENBQUMsQ0FBQztZQUNQLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFTyxvQkFBb0I7UUFDMUIsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDcEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXO2lCQUN4QixJQUFJLENBQ0gsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FDekI7aUJBQ0EsU0FBUyxDQUFDLENBQUMsVUFBVSxFQUFFLEVBQUU7Z0JBQ3hCLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO29CQUNwQixJQUFJLENBQUMsUUFBUTt5QkFDVixJQUFJLENBQ0gsTUFBTSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLEtBQUssVUFBVSxDQUFDLE9BQU8sSUFBSSxNQUFNLEtBQUssVUFBVSxDQUFDLEtBQUssQ0FBQyxFQUNoRixTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUN6Qjt5QkFDQSxTQUFTLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTt3QkFDcEIsSUFBSSxNQUFNLEtBQUssVUFBVSxDQUFDLE9BQU8sRUFBRSxDQUFDOzRCQUNsQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDOzRCQUN0QixVQUFVLENBQUMsUUFBUSxFQUFFLENBQUM7d0JBQ3hCLENBQUM7NkJBQU0sQ0FBQzs0QkFDTixVQUFVLENBQUMsS0FBSyxFQUFFLENBQUM7d0JBQ3JCLENBQUM7b0JBQ0gsQ0FBQyxDQUFDLENBQUM7Z0JBQ1AsQ0FBQztxQkFBTSxDQUFDO29CQUNOLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQ3RCLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDeEIsQ0FBQztZQUNILENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQztJQUNILENBQUM7SUFFTywyQkFBMkI7UUFDakMsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDcEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXO2lCQUN4QixJQUFJLENBQ0gsU0FBUyxDQUFDLENBQUMsVUFBVSxFQUFFLEVBQUU7Z0JBQ3ZCLE9BQU8sR0FBRyxDQUNSLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLGFBQWEsRUFDeEMsSUFBSSxDQUFDLGNBQWMsRUFBRTtxQkFDbEIsSUFBSSxDQUNILEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMscUJBQXFCLENBQUMsTUFBTSxDQUFDLENBQUMsRUFDOUMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7b0JBQ2IsSUFBSSxNQUFNLEVBQUUsQ0FBQzt3QkFDWCxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO3dCQUN0QixVQUFVLENBQUMsUUFBUSxFQUFFLENBQUM7b0JBQ3hCLENBQUM7Z0JBQ0gsQ0FBQyxDQUFDLENBQ0gsRUFDSCxLQUFLLENBQUMsR0FBRyxFQUFFO29CQUNULFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQ3RCLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztvQkFFdEIsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ2xCLENBQUMsQ0FBQyxDQUNILENBQUM7WUFDSixDQUFDLENBQUMsRUFDRixTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUN6QjtpQkFDQSxTQUFTLEVBQUUsQ0FBQztRQUNqQixDQUFDO0lBQ0gsQ0FBQztJQUVPLG9DQUFvQztRQUMxQyxJQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNuQixJQUFJLENBQUMscUJBQXFCLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLFlBQVksQ0FBQztZQUU1RCxJQUFJLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO2dCQUMvQixJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsRUFBRTtxQkFDNUIsSUFBSSxDQUNILFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQ3pCO3FCQUNBLFNBQVMsQ0FBQyxHQUFHLEVBQUU7b0JBQ2QsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO2dCQUNwQixDQUFDLENBQUMsQ0FBQztnQkFFTCxJQUFJLENBQUMsUUFBUTtxQkFDVixTQUFTLENBQUMsR0FBRyxFQUFFO29CQUNkLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztnQkFDdkMsQ0FBQyxDQUFDLENBQUM7WUFDUCxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFTyxxQkFBcUI7UUFDM0IsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUVoRixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxlQUFlLEdBQUcsQ0FBQyxJQUFZLEVBQUUsT0FBd0IsRUFBRSxFQUFFO1lBRTVFLE1BQU0sRUFBRSxHQUFZLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxlQUFlLElBQUksSUFBSSxDQUFDLENBQUM7WUFFdkYsSUFBSSxFQUFFLEVBQUUsQ0FBQztnQkFDUCxJQUFJLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDO29CQUNyQyxFQUFFLENBQUMsWUFBWSxDQUFDLGNBQWMsRUFBRSxNQUFNLENBQUMsQ0FBQztvQkFDeEMsRUFBRSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsR0FBRyxJQUFJLElBQUksSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUMvQyxDQUFDO1lBQ0gsQ0FBQztZQUVELE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztRQUM5QyxDQUFDLENBQUM7SUFDSixDQUFDO0lBRU8sMEJBQTBCO1FBQ2hDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDakIsT0FBTztRQUNULENBQUM7UUFFRCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZO2FBQzFCLElBQUksQ0FDSCxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUN6QjthQUNBLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDZCxJQUFJLENBQUMseUJBQXlCLEVBQUUsQ0FBQztRQUNuQyxDQUFDLENBQUMsQ0FBQztRQUVMLElBQUksQ0FBQyxhQUFhLEVBQUU7YUFDakIsT0FBTyxDQUFDLE9BQU87YUFDZixJQUFJLENBQ0gsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FDekI7YUFDQSxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxDQUFDLHlCQUF5QixFQUFFLENBQUM7UUFDbkMsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRU8seUJBQXlCO1FBQy9CLElBQUksQ0FBQyxhQUFhLEVBQUU7YUFDakIsT0FBTzthQUNQLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQzthQUNqQyxPQUFPLENBQUMsQ0FBQyxZQUErQixFQUFFLEVBQUU7WUFDM0MsSUFDRSxDQUFDLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUMxRixDQUFDO2dCQUNELFlBQVksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUN4QixDQUFDO2lCQUFNLENBQUM7Z0JBQ04sWUFBWSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3pCLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFTyxpQkFBaUI7UUFDdkIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFFTyxpQkFBaUI7UUFDdkIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFFTyx3QkFBd0I7UUFDOUIsSUFBSSxDQUFDLGFBQWEsRUFBRTthQUNqQixrQkFBa0IsR0FBRyxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztRQUN0RCxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFFckIsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUM1QyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsa0JBQWtCLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDcEQsQ0FBQztJQUNILENBQUM7SUFFTyxlQUFlO1FBQ3JCLElBQUksQ0FBQyxhQUFhLEVBQUU7YUFDakIsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBQzFCLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNuQixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFTyx1QkFBdUI7UUFDN0IsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWE7YUFDN0IsSUFBSSxDQUNILFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUM3QixLQUFLLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssS0FBSyxTQUFTLENBQUMsQ0FDdEMsQ0FBQztJQUNOLENBQUM7SUFFTyxZQUFZLENBQUMsQ0FBaUI7UUFDcEMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsRUFBRSx5Q0FBeUMsRUFBRSxlQUFlLENBQUMsQ0FBQztRQUMzRixPQUFPLENBQUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDaEMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDNUIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFFL0IsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3hCLE1BQU0sTUFBTSxHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztZQUN4RCxPQUFPLENBQUMsR0FBRyxDQUFDLHFCQUFxQixFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQzdDLENBQUM7UUFFRCxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDbkIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVPLDJCQUEyQjtRQUNqQyxJQUFJLENBQUMscUJBQXFCLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxXQUFXLENBQUM7UUFFckUsSUFBSSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1lBQ2hDLE9BQU87UUFDVCxDQUFDO1FBRUQsSUFBSSxDQUFDLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBRTdFLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDO1lBQzdELElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxhQUFhLEdBQUcsRUFBRSxDQUFDO1FBQ2hELENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNqRixJQUFJLENBQUMscUJBQXFCLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBQ3JFLENBQUM7SUFDSCxDQUFDO0lBRU8scUJBQXFCO1FBQzNCLElBQUksQ0FBQyxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztZQUNoQyxPQUFPO1FBQ1QsQ0FBQztRQUVELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFDekYsSUFBSSxDQUFDLHFCQUFxQixDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBRS9ELElBQUksQ0FBQyxLQUFLLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7dUdBbHZCVSxlQUFlLGtCQW9GaEIsTUFBTSwwSUFNTSxZQUFZLDZCQUdaLFNBQVM7MkZBN0ZwQixlQUFlOzsyRkFBZixlQUFlO2tCQUozQixTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxVQUFVO29CQUNwQixRQUFRLEVBQUUsUUFBUTtpQkFDbkI7OzBCQXFGSSxNQUFNOzJCQUFDLE1BQU07OzBCQUtiLFFBQVE7OzBCQUNSLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsWUFBWTs7MEJBRy9CLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsU0FBUztzRUF4RnhCLGVBQWU7c0JBRHJCLEtBQUs7Z0JBSUMsZUFBZTtzQkFEckIsS0FBSztnQkFJQyxZQUFZO3NCQURsQixLQUFLO2dCQUlDLGFBQWE7c0JBRG5CLEtBQUs7Z0JBSUMsWUFBWTtzQkFEbEIsS0FBSztnQkFJQyxTQUFTO3NCQURmLEtBQUs7Z0JBSUMsT0FBTztzQkFEYixLQUFLO2dCQUlDLGFBQWE7c0JBRG5CLEtBQUs7Z0JBSUMsYUFBYTtzQkFEbkIsS0FBSztnQkFJQyxjQUFjO3NCQURwQixLQUFLO2dCQUlDLGlCQUFpQjtzQkFEdkIsS0FBSztnQkFJSyxNQUFNO3NCQURoQixLQUFLO2dCQVVDLFlBQVk7c0JBRGxCLEtBQUs7Z0JBSUMsVUFBVTtzQkFEaEIsS0FBSztnQkFJQyxpQkFBaUI7c0JBRHZCLEtBQUs7Z0JBSUMsV0FBVztzQkFEakIsTUFBTTt1QkFBQyxRQUFRO2dCQUlULE9BQU87c0JBRGIsTUFBTTtnQkFJQSxLQUFLO3NCQURYLE1BQU07Z0JBSUEsU0FBUztzQkFEZixNQUFNO2dCQUlBLE9BQU87c0JBRGIsTUFBTTtnQkFJQSxPQUFPO3NCQURiLE1BQU07Z0JBSUEsV0FBVztzQkFEakIsV0FBVzt1QkFBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgRGlyZWN0aXZlLFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIEhvc3RCaW5kaW5nLFxuICBJbmplY3QsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPcHRpb25hbCxcbiAgT3V0cHV0LFxuICBTaW1wbGVDaGFuZ2VzLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgTmdGb3JtIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcblxuaW1wb3J0IHsgTWF0RGlhbG9nUmVmIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcblxuaW1wb3J0IHsgZ3VpZCB9IGZyb20gJ0BmaXJlc3RpdGNoL2NvbW1vbic7XG5pbXBvcnQgeyBEcmF3ZXJSZWYgfSBmcm9tICdAZmlyZXN0aXRjaC9kcmF3ZXInO1xuaW1wb3J0IHsgRnNNZXNzYWdlLCBNZXNzYWdlTW9kZSB9IGZyb20gJ0BmaXJlc3RpdGNoL21lc3NhZ2UnO1xuXG5pbXBvcnQge1xuICBCZWhhdmlvclN1YmplY3QsXG4gIGRlZmVyLFxuICBmcm9tRXZlbnQsXG4gIGlpZixcbiAgT2JzZXJ2YWJsZSxcbiAgb2YsXG4gIHRocm93RXJyb3IsXG59IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtcbiAgY2F0Y2hFcnJvcixcbiAgZGVsYXksXG4gIGZpbHRlcixcbiAgZmlyc3QsXG4gIG1hcCxcbiAgbWVyZ2VNYXAsXG4gIHN0YXJ0V2l0aCxcbiAgc3dpdGNoTWFwLFxuICB0YWtlLFxuICB0YWtlVW50aWwsXG4gIHRhcCxcbn0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBGb3JtRGVhY3RpdmF0ZUd1YXJkIH0gZnJvbSAnLi4vLi4vZ3VhcmRzL2Zvcm0tZGVhY3RpdmF0ZS5ndWFyZCc7XG5pbXBvcnQgeyBjb25maXJtUmVzdWx0Q29udGludWUgfSBmcm9tICcuLi8uLi9oZWxwZXJzL2NvbmZpcm0tcmVzdWx0LWNvbnRpbnVlJztcbmltcG9ydCB7IGdldEFjdGl2ZVJvdXRlIH0gZnJvbSAnLi4vLi4vaGVscGVycy9nZXQtYWN0aXZlLXJvdXRlJztcbmltcG9ydCB7IGdldEZvcm1FcnJvcnMgfSBmcm9tICcuLi8uLi9oZWxwZXJzL2dldC1mb3JtLWVycm9ycyc7XG5pbXBvcnQgeyBGc0Zvcm0gfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9mc2Zvcm0uc2VydmljZSc7XG5pbXBvcnQgeyBGc0J1dHRvbkRpcmVjdGl2ZSB9IGZyb20gJy4uL2J1dHRvbi5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgRnNGb3JtQmFzZURpcmVjdGl2ZSB9IGZyb20gJy4uL2Zvcm0tYmFzZSc7XG5pbXBvcnQgeyBGc0Zvcm1Hcm91cERpcmVjdGl2ZSB9IGZyb20gJy4uL2Zvcm0tZ3JvdXAnO1xuXG5pbXBvcnQgeyBDb25maXJtUmVzdWx0IH0gZnJvbSAnLi8uLi8uLi9lbnVtcy9jb25maXJtLXJlc3VsdCc7XG5pbXBvcnQgeyBGb3JtU3RhdHVzIH0gZnJvbSAnLi8uLi8uLi9lbnVtcy9mb3JtLXN0YXR1cyc7XG5pbXBvcnQgeyBDb25maXJtQ29uZmlnLCBTdWJtaXR0ZWRFdmVudCB9IGZyb20gJy4vLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBTdWJtaXRFdmVudCB9IGZyb20gJy4vLi4vLi4vaW50ZXJmYWNlcy9zdWJtaXQtZXZlbnQnO1xuXG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tmc0Zvcm1dJyxcbiAgZXhwb3J0QXM6ICdmc0Zvcm0nLFxufSlcbmV4cG9ydCBjbGFzcyBGc0Zvcm1EaXJlY3RpdmUgXG4gIGV4dGVuZHMgRnNGb3JtQmFzZURpcmVjdGl2ZSBcbiAgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgQWZ0ZXJDb250ZW50SW5pdCwgT25DaGFuZ2VzIHtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgd3JhcHBlclNlbGVjdG9yID0gJy5mcy1mb3JtLXdyYXBwZXIsLm1hdC1tZGMtZm9ybS1maWVsZCc7XG5cbiAgQElucHV0KClcbiAgcHVibGljIG1lc3NhZ2VTZWxlY3RvciA9ICcuZnMtZm9ybS1tZXNzYWdlLC5tYXQtbWRjLWZvcm0tZmllbGQtc3Vic2NyaXB0LXdyYXBwZXInO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBoaW50U2VsZWN0b3IgPSAnLmZzLWZvcm0taGludCwubWF0LW1kYy1mb3JtLWZpZWxkLWhpbnQtd3JhcHBlcic7XG5cbiAgQElucHV0KClcbiAgcHVibGljIGxhYmVsU2VsZWN0b3IgPSAnLmZzLWZvcm0tbGFiZWwsLm1kYy1mbG9hdGluZy1sYWJlbD5tYXQtbGFiZWwnO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBhdXRvY29tcGxldGUgPSBmYWxzZTtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgc2hvcnRjdXRzID0gdHJ1ZTsgLy8gQ3RybCArIHNcblxuICBASW5wdXQoKVxuICBwdWJsaWMgY29uZmlybTogQ29uZmlybUNvbmZpZyB8IGJvb2xlYW4gPSB0cnVlO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBjb25maXJtRGlhbG9nID0gdHJ1ZTtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgY29uZmlybURyYXdlciA9IHRydWU7XG5cbiAgQElucHV0KClcbiAgcHVibGljIGNvbmZpcm1Ccm93c2VyID0gdHJ1ZTtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgZGlydHlTdWJtaXRCdXR0b24gPSB0cnVlO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgc3VibWl0KHN1Ym1pdCQ6IChldmVudDogU3VibWl0RXZlbnQpID0+IE9ic2VydmFibGU8YW55Pikge1xuICAgIHRoaXMuX3N1Ym1pdCQgPSBzdWJtaXQkO1xuICB9XG5cbiAgcHVibGljIGdldCBzdWJtaXQoKTogKGV2ZW50OiBTdWJtaXRFdmVudCkgPT4gT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5fc3VibWl0JDtcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzdWNjZXNzRGVsYXkgPSAwO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBlcnJvckRlbGF5ID0gMTAwMDtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgZGVhY3RpdmF0aW9uR3VhcmQgPSB0cnVlO1xuIFxuICBAT3V0cHV0KCdmc0Zvcm0nKVxuICBwdWJsaWMgc3VibWl0RXZlbnQ6IEV2ZW50RW1pdHRlcjxTdWJtaXRFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyBpbnZhbGlkOiBFdmVudEVtaXR0ZXI8U3VibWl0RXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgdmFsaWQ6IEV2ZW50RW1pdHRlcjxTdWJtaXRFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyBzdWJtaXR0ZWQ6IEV2ZW50RW1pdHRlcjxTdWJtaXRFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyByZXNldGVkOiBFdmVudEVtaXR0ZXI8U3VibWl0RXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgY2xlYXJlZDogRXZlbnRFbWl0dGVyPFN1Ym1pdEV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmZzLWZvcm0nKVxuICBwdWJsaWMgZnNGb3JtQ2xhc3MgPSB0cnVlO1xuXG4gIHByaXZhdGUgX3JlZ2lzdGVyQ29udHJvbDtcbiAgcHJpdmF0ZSBfZGlhbG9nQmFja2Ryb3BFc2NhcGUgPSBmYWxzZTtcbiAgcHJpdmF0ZSBfc25hcHNob3Q6IHsgW2tleTogc3RyaW5nXTogYW55IH0gPSB7fTtcbiAgcHJpdmF0ZSBfYWN0aXZhdGVkUm91dGVDb25maWc6IFJvdXRlIHwgbnVsbDtcbiAgcHJpdmF0ZSBfc3RhdHVzJCA9IG5ldyBCZWhhdmlvclN1YmplY3QoRm9ybVN0YXR1cy5WYWxpZCk7XG4gIHByaXZhdGUgX3N1Ym1pdCQ6IChldmVudD86IFN1Ym1pdEV2ZW50KSA9PiBPYnNlcnZhYmxlPGFueT4gPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBJbmplY3QoTmdGb3JtKVxuICAgIHB1YmxpYyBuZ0Zvcm06IE5nRm9ybSxcbiAgICBwcml2YXRlIF9mb3JtOiBGc0Zvcm0sXG4gICAgcHJpdmF0ZSBfZWxlbWVudDogRWxlbWVudFJlZixcbiAgICBwcml2YXRlIF9tZXNzYWdlOiBGc01lc3NhZ2UsXG4gICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSBfZm9ybUdyb3VwOiBGc0Zvcm1Hcm91cERpcmVjdGl2ZSxcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KE1hdERpYWxvZ1JlZilcbiAgICBwcml2YXRlIF9kaWFsb2dSZWY6IE1hdERpYWxvZ1JlZjxhbnk+LFxuXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChEcmF3ZXJSZWYpXG4gICAgcHJpdmF0ZSBfZHJhd2VyUmVmOiBEcmF3ZXJSZWY8YW55PixcblxuICAgIHByaXZhdGUgX3JvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgKSB7IFxuICAgIHN1cGVyKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHN1Ym1pdHRpbmcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YXR1cyQuZ2V0VmFsdWUoKSA9PT0gRm9ybVN0YXR1cy5TdWJtaXR0aW5nO1xuICB9XG5cbiAgcHVibGljIGdldCB2YWxpZGF0aW5nKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9zdGF0dXMkLmdldFZhbHVlKCkgPT09IEZvcm1TdGF0dXMuVmFsaWRhdGluZztcbiAgfVxuXG4gIHB1YmxpYyBnZXQgY29tcGxldGluZygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fc3RhdHVzJC5nZXRWYWx1ZSgpID09PSBGb3JtU3RhdHVzLkNvbXBsZXRpbmc7XG4gIH1cblxuICBwcml2YXRlIGdldCBfc3VibWl0RXZlbnQoKTogU3VibWl0RXZlbnQge1xuICAgIHJldHVybiB7XG4gICAgICBuZ0Zvcm06IHRoaXMubmdGb3JtLFxuICAgICAgc3VibWl0dGVyOiB0aGlzLl9zdWJtaXR0ZXIsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IF9mb3JtVmFsaWRTdGF0ZSQoKTogT2JzZXJ2YWJsZTxTdWJtaXR0ZWRFdmVudD4ge1xuICAgIHRoaXMuc3VibWl0RXZlbnQuZW1pdCh0aGlzLl9zdWJtaXRFdmVudCk7XG4gICAgdGhpcy52YWxpZC5lbWl0KHRoaXMuX3N1Ym1pdEV2ZW50KTtcblxuICAgIGNvbnN0IHN1Ym1pdHRlZEV2ZW50OiBTdWJtaXR0ZWRFdmVudCA9IHtcbiAgICAgIG5nRm9ybTogdGhpcy5uZ0Zvcm0sXG4gICAgICBzdWJtaXR0ZXI6IHRoaXMuX3N1Ym1pdHRlcixcbiAgICAgIHJlc3BvbnNlOiBudWxsLFxuICAgIH07XG5cbiAgICBjb25zdCBzdWJtaXQkOiBPYnNlcnZhYmxlPGFueT4gPSB0aGlzLl9zdWJtaXQkID9cbiAgICAgIHRoaXMuX3N1Ym1pdCQodGhpcy5fc3VibWl0RXZlbnQpIDogb2Yoc3VibWl0dGVkRXZlbnQpO1xuXG4gICAgcmV0dXJuIHN1Ym1pdCRcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgc3VibWl0dGVkRXZlbnQucmVzcG9uc2UgPSByZXNwb25zZTtcblxuICAgICAgICAgIHJldHVybiBzdWJtaXR0ZWRFdmVudDtcbiAgICAgICAgfSksXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSxcbiAgICAgICk7XG4gIH1cblxuICBwcml2YXRlIGdldCBfZm9ybUludmFsaWRTdGF0ZSQoKTogT2JzZXJ2YWJsZTxuZXZlcj4ge1xuICAgIGlmICh0aGlzLmludmFsaWQpIHtcbiAgICAgIHRoaXMuaW52YWxpZC5lbWl0KHRoaXMuX3N1Ym1pdEV2ZW50KTtcbiAgICB9XG5cbiAgICBjb25zdCBtZXNzYWdlID0gJ1BsZWFzZSByZXZpZXcgZXJyb3JzIGhpZ2hsaWdodGVkIGluIHJlZCc7XG4gICAgdGhpcy5fbWVzc2FnZS5lcnJvcihtZXNzYWdlLCB7IG1vZGU6IE1lc3NhZ2VNb2RlLlRvYXN0IH0pO1xuXG4gICAgY29uc3QgZWwgPSB0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignLm5nLWludmFsaWQnKTtcblxuICAgIGlmIChlbCkge1xuICAgICAgZWwuc2Nyb2xsSW50b1ZpZXcoeyBiZWhhdmlvcjogJ3Ntb290aCcsIGJsb2NrOiAnbmVhcmVzdCcgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gbmV3IEVycm9yKCdGb3JtIHZhbGlkYXRpb24gZXJyb3InKSk7XG4gIH1cblxuICBwcml2YXRlIGdldCBfc3VibWl0dGVyKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2dldEZvcm1Hcm91cCgpLmFjdGl2ZVN1Ym1pdEJ1dHRvbj8ubmFtZTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLl9mb3JtR3JvdXA/LnJlZ2lzdGVyRm9ybSh0aGlzKTtcblxuICAgIGlmICh0aGlzLmRlYWN0aXZhdGlvbkd1YXJkKSB7XG4gICAgICB0aGlzLl9yZWdpc3RlckNhbkRlYWN0aXZhdGVHdWFyZCgpO1xuICAgIH1cblxuICAgIHRoaXMuX3JlZ2lzdGVyQ29uZmlybURpYWxvZ0JhY2tkcm9wRXNjYXBlKCk7XG4gICAgdGhpcy5fbGlzdGVuSG90S2V5cygpO1xuICAgIHRoaXMuX2xpc3RlbldpbmRvd0Nsb3NlKCk7XG4gICAgdGhpcy5fbGlzdGVuU3VibWl0KCk7XG4gICAgdGhpcy5fbGlzdGVuRm9ybVN0YXR1cygpO1xuXG4gICAgaWYgKCF0aGlzLmF1dG9jb21wbGV0ZSkge1xuICAgICAgdGhpcy5fcmVnaXN0ZXJBdXRvY29tcGxldGUoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzLmNvbmZpcm0pIHtcbiAgICAgIHRoaXMuX3VwZGF0ZURpcnR5U3VibWl0QnV0dG9ucygpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBjbGVhclN1Ym1pdChzdWJtaXQ6IChldmVudDogU3VibWl0RXZlbnQpID0+IE9ic2VydmFibGU8YW55PiA9IG51bGwpOiB2b2lkIHtcbiAgICBpZighc3VibWl0IHx8IHN1Ym1pdCA9PT0gdGhpcy5fc3VibWl0JCkge1xuICAgICAgdGhpcy5fc3VibWl0JCA9IG51bGw7XG4gICAgfVxuXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLl9jZFJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyByZWdpc3RlclN1Ym1pdChzdWJtaXQkOiAoKSA9PiBPYnNlcnZhYmxlPGFueT4pOiB2b2lkIHtcbiAgICB0aGlzLl9zdWJtaXQkID0gc3VibWl0JDtcblxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5fY2RSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgbmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge1xuICAgIHN1cGVyLm5nQWZ0ZXJDb250ZW50SW5pdCgpOyBcbiAgICB0aGlzLl9yZWdpc3RlckNvbmZpcm0oKTtcbiAgICB0aGlzLl9yZWdpc3RlckNvbmZpcm1EcmF3ZXJDbG9zZSgpO1xuICAgIHRoaXMuX3JlZ2lzdGVyRHJhd2VyQ2xvc2UoKTtcbiAgICB0aGlzLl9yZWdpc3RlckRpcnR5U3VibWl0QnV0dG9uKCk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5fZm9ybUdyb3VwPy5kZXJlZ2lzdGVyRm9ybSgpO1xuXG4gICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcbiAgICB0aGlzLl9jbGVhbnVwQ2FuRGVhY3RpdmF0ZSgpO1xuICB9XG5cbiAgcHVibGljIGNyZWF0ZVNuYXBzaG90KCk6IHZvaWQge1xuICAgIHRoaXMuX3NuYXBzaG90ID0gdGhpcy5uZ0Zvcm0udmFsdWU7XG4gIH1cblxuICBwdWJsaWMgZ2V0U25hcHNob3QoKTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSB7XG4gICAgcmV0dXJuIHRoaXMuX3NuYXBzaG90IHx8IHt9O1xuICB9XG5cbiAgcHVibGljIHJlc2V0KCk6IHZvaWQge1xuICAgIHRoaXMubmdGb3JtLnJlc2V0Rm9ybSgpO1xuXG4gICAgT2JqZWN0LmtleXModGhpcy5uZ0Zvcm0uY29udHJvbHMpXG4gICAgICAuZm9yRWFjaCgobmFtZTogc3RyaW5nKSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLm5nRm9ybS5jb250cm9sc1tuYW1lXTtcbiAgICAgICAgY29udHJvbC5yZXNldCh0aGlzLl9zbmFwc2hvdFtuYW1lXSk7XG4gICAgICB9KTtcblxuICAgIHRoaXMucmVzZXRlZC5lbWl0KCk7XG4gIH1cblxuICBwdWJsaWMgY2xlYXIoKTogdm9pZCB7XG4gICAgdGhpcy5uZ0Zvcm0ucmVzZXRGb3JtKCk7XG4gICAgdGhpcy5jbGVhcmVkLmVtaXQoKTtcbiAgfVxuXG4gIHB1YmxpYyBkaXJ0eSgpOiB2b2lkIHtcbiAgICB0aGlzLm5nRm9ybS5mb3JtLm1hcmtBc0RpcnR5KCk7XG4gICAgdGhpcy5fdXBkYXRlRGlydHlTdWJtaXRCdXR0b25zKCk7XG4gIH1cblxuICBwdWJsaWMgcHJpc3RpbmUoKTogdm9pZCB7XG4gICAgdGhpcy5uZ0Zvcm0uZm9ybS5tYXJrQXNQcmlzdGluZSgpO1xuICAgIHRoaXMuX3VwZGF0ZURpcnR5U3VibWl0QnV0dG9ucygpO1xuICB9XG5cbiAgcHVibGljIHRyaWdnZXJTdWJtaXQob3B0aW9ucz86IHsgY29uZmlybWVkOiBib29sZWFuIH0pOiB2b2lkIHtcbiAgICB0aGlzLm5nRm9ybS5uZ1N1Ym1pdC5lbWl0KCk7XG4gIH1cblxuICBwdWJsaWMgdHJpZ2dlckNvbmZpcm0oKTogT2JzZXJ2YWJsZTxDb25maXJtUmVzdWx0PiB7XG4gICAgY29uc3Qgc3VibWl0dGVkID0gdGhpcy5zdWJtaXR0aW5nID8gdGhpcy5zdWJtaXR0ZWQuYXNPYnNlcnZhYmxlKCkgOiBvZih7fSk7XG5cbiAgICByZXR1cm4gc3VibWl0dGVkXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgbWVyZ2VNYXAoKCkgPT4gdGhpcy5fZm9ybS5jb25maXJtVW5zYXZlZCh0aGlzKSksXG4gICAgICApO1xuICB9XG5cbiAgcHVibGljIGVuYWJsZSgpOiB2b2lkIHtcbiAgICB0aGlzLm5nRm9ybS5jb250cm9sLmVuYWJsZSgpO1xuXG4gICAgdGhpcy5fdXBkYXRlRGlydHlTdWJtaXRCdXR0b25zKCk7XG4gIH1cblxuICBwdWJsaWMgZGlzYWJsZSgpOiB2b2lkIHtcbiAgICB0aGlzLm5nRm9ybS5jb250cm9sLmRpc2FibGUoKTtcblxuICAgIHRoaXMuX2dldEZvcm1Hcm91cCgpXG4gICAgICAuYnV0dG9ucy5mb3JFYWNoKChidXR0b24pID0+IHtcbiAgICAgICAgYnV0dG9uLmRpc2FibGUoKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHZhbGlkYXRlKCk6IHZvaWQge1xuICAgIE9iamVjdC52YWx1ZXModGhpcy5uZ0Zvcm0uY29udHJvbHMpXG4gICAgICAuZm9yRWFjaCgoY29udHJvbCkgPT4ge1xuICAgICAgICBjb250cm9sLm1hcmtBc0RpcnR5KCk7XG4gICAgICAgIGNvbnRyb2wubWFya0FzVG91Y2hlZCgpO1xuICAgICAgICBjb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHN1Ym1pdCQoc3VibWl0RXZlbnQ6IFN1Ym1pdEV2ZW50KTogT2JzZXJ2YWJsZTxTdWJtaXR0ZWRFdmVudD4ge1xuICAgIHJldHVybiBvZihzdWJtaXRFdmVudClcbiAgICAgIC5waXBlKFxuICAgICAgICB0YXAoKCkgPT4gdGhpcy5fc3RhdHVzVmFsaWRhdGluZygpKSxcbiAgICAgICAgdGFwKCgpID0+IHRoaXMudmFsaWRhdGUoKSksXG4gICAgICAgIHRhcCgoKSA9PiB0aGlzLl9zdGF0dXNTdWJtaXR0aW5nKCkpLFxuICAgICAgICB0YXAoKCkgPT4gdGhpcy5fc2V0dXBBY3RpdmVTdWJtaXRCdXR0b24oKSksXG4gICAgICAgIHRhcCgoKSA9PiB0aGlzLl9kaXNhYmxlQnV0dG9ucygpKSxcbiAgICAgICAgc3dpdGNoTWFwKChkYXRhKSA9PiB0aGlzLl93YWl0VW50aWxTdGF0dXNQZW5kaW5nKClcbiAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgIG1hcCgoKSA9PiBkYXRhKSxcbiAgICAgICAgICApKSwgICAgICAgXG4gICAgICAgIG1lcmdlTWFwKCgpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5uZ0Zvcm0uc3RhdHVzID09PSAnSU5WQUxJRCcpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9mb3JtSW52YWxpZFN0YXRlJDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gdGhpcy5fZm9ybVZhbGlkU3RhdGUkO1xuICAgICAgICB9KSxcbiAgICAgICAgY2F0Y2hFcnJvcigoZSkgPT4ge1xuICAgICAgICAgIHRoaXMuX2hhbmRsZUVycm9yKGUpO1xuXG4gICAgICAgICAgcmV0dXJuIG9mKHtcbiAgICAgICAgICAgIC4uLnRoaXMuX3N1Ym1pdEV2ZW50LFxuICAgICAgICAgICAgZXJyb3I6IGU/Lm1lc3NhZ2UsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pLFxuICAgICAgICB0YXAoKHN1Ym1pdHRlZEV2ZW50OiBTdWJtaXR0ZWRFdmVudCkgPT4ge1xuICAgICAgICAgIGlmKCFzdWJtaXR0ZWRFdmVudC5lcnJvcikge1xuICAgICAgICAgICAgdGhpcy5fY29tcGxldGVTdWJtaXQodHJ1ZSwgc3VibWl0dGVkRXZlbnQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSksXG4gICAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBfbGlzdGVuU3VibWl0KCk6IHZvaWQge1xuICAgIHRoaXNcbiAgICAgIC5uZ0Zvcm1cbiAgICAgIC5uZ1N1Ym1pdFxuICAgICAgLnBpcGUoXG4gICAgICAgIHRhcCgoZXZlbnQpID0+IHtcbiAgICAgICAgICBldmVudD8ucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfSksXG4gICAgICAgIGZpbHRlcigoKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIFtGb3JtU3RhdHVzLlZhbGlkLCBGb3JtU3RhdHVzLkludmFsaWRdXG4gICAgICAgICAgICAuaW5jbHVkZXModGhpcy5fc3RhdHVzJC5nZXRWYWx1ZSgpKTtcbiAgICAgICAgfSksXG4gICAgICAgIHN3aXRjaE1hcCgoKSA9PiB0aGlzLnN1Ym1pdCQodGhpcy5fc3VibWl0RXZlbnQpKSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfbGlzdGVuRm9ybVN0YXR1cygpOiB2b2lkIHtcbiAgICB0aGlzLl9zdGF0dXMkXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoZm9ybVN0YXR1czogRm9ybVN0YXR1cykgPT4ge1xuICAgICAgICBjb25zdCBjbHMgPSBbRm9ybVN0YXR1cy5TdWJtaXR0aW5nLCBGb3JtU3RhdHVzLlZhbGlkYXRpbmddO1xuICAgICAgICBjb25zdCBjbGFzc0xpc3QgPSB0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0O1xuICAgICAgICBjbGFzc0xpc3QucmVtb3ZlKC4uLmNscyk7XG4gICAgICAgIGlmIChjbHMuaW5kZXhPZihmb3JtU3RhdHVzKSAhPT0gLTEpIHtcbiAgICAgICAgICBjbGFzc0xpc3QuYWRkKGZvcm1TdGF0dXMpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICB9XG5cbiAgcHJpdmF0ZSBfbGlzdGVuV2luZG93Q2xvc2UoKTogdm9pZCB7XG4gICAgZnJvbUV2ZW50KHdpbmRvdywgJ2JlZm9yZXVubG9hZCcpXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoZXZlbnQ6IEV2ZW50KSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmNvbmZpcm0gJiYgdGhpcy5jb25maXJtQnJvd3NlciAmJiB0aGlzLm5nRm9ybS5kaXJ0eSkge1xuICAgICAgICAgIGV2ZW50LnJldHVyblZhbHVlID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfYWN0aXZlRGlhbG9nKGVsLCBkaWFsb2c6IEhUTUxFbGVtZW50KTogYm9vbGVhbiB7XG4gICAgaWYgKGVsLmlzU2FtZU5vZGUoZGlhbG9nKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIGlmIChlbC5wYXJlbnRFbGVtZW50KSB7XG4gICAgICByZXR1cm4gdGhpcy5fYWN0aXZlRGlhbG9nKGVsLnBhcmVudEVsZW1lbnQsIGRpYWxvZyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSBfbGlzdGVuSG90S2V5cygpOiB2b2lkIHtcbiAgICB0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgZnJvbUV2ZW50KGRvY3VtZW50LCAna2V5ZG93bicpXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSxcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKChldmVudDogS2V5Ym9hcmRFdmVudCkgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLl9kaWFsb2dCYWNrZHJvcEVzY2FwZSAmJiBldmVudC5jb2RlID09PSAnRXNjYXBlJykge1xuICAgICAgICAgICAgY29uc3QgY2RrT3ZlcmxheVBhbmUgPSBBcnJheVxuICAgICAgICAgICAgICAuZnJvbShkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsPEhUTUxFbGVtZW50PignLmNkay1vdmVybGF5LXBhbmUnKSkucG9wKCk7XG4gICAgXG4gICAgICAgICAgICBjb25zdCBhY3RpdmVEaWFsb2cgPSB0aGlzXG4gICAgICAgICAgICAgIC5fYWN0aXZlRGlhbG9nKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuX2RpYWxvZ1JlZi5pZCksIGNka092ZXJsYXlQYW5lKTtcblxuICAgICAgICAgICAgaWYgKGFjdGl2ZURpYWxvZykge1xuICAgICAgICAgICAgICB0aGlzLl9uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9mb3JtQ2xvc2UoKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKChldmVudC5jdHJsS2V5IHx8IGV2ZW50Lm1ldGFLZXkpICYmIGV2ZW50LmNvZGUgPT09ICdLZXlTJykge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuc2hvcnRjdXRzKSB7XG4gICAgICAgICAgICAgIGlmICh0aGlzLl9lbGVtZW50SW5Gb3JtKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5uZ0Zvcm0ubmdTdWJtaXQubmV4dChudWxsKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF9mb3JtQ2xvc2UoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY29uZmlybSAmJiB0aGlzLmNvbmZpcm1EaWFsb2cpIHtcbiAgICAgIHRoaXMudHJpZ2dlckNvbmZpcm0oKVxuICAgICAgICAucGlwZShcbiAgICAgICAgICBmaWx0ZXIoKHJlc3VsdCkgPT4gY29uZmlybVJlc3VsdENvbnRpbnVlKHJlc3VsdCkpLFxuICAgICAgICAgIHN3aXRjaE1hcCgocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0ID09PSBDb25maXJtUmVzdWx0Lk5vQ2hhbmdlcyB8fCByZXN1bHQgPT09IENvbmZpcm1SZXN1bHQuRGlzY2FyZFxuICAgICAgICAgICAgICA/IG9mKG51bGwpXG4gICAgICAgICAgICAgIDogdGhpcy5zdWJtaXR0ZWQuYXNPYnNlcnZhYmxlKCk7XG4gICAgICAgICAgfSksXG4gICAgICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpLFxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKHJlc3VsdDogU3VibWl0dGVkRXZlbnQpID0+IHtcbiAgICAgICAgICB0aGlzLl9kaWFsb2dSZWYuY2xvc2UocmVzdWx0Py5yZXNwb25zZSk7XG4gICAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9kaWFsb2dSZWYuY2xvc2UobnVsbCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0QWN0aXZlU3VibWl0QnV0dG9uKCk6IEZzQnV0dG9uRGlyZWN0aXZlIHtcbiAgICBpZih0aGlzLl9nZXRGb3JtR3JvdXAoKS5hY3RpdmVTdWJtaXRCdXR0b24pIHtcbiAgICAgIHJldHVybiB0aGlzLl9nZXRGb3JtR3JvdXAoKS5hY3RpdmVTdWJtaXRCdXR0b247XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX2dldEZvcm1Hcm91cCgpXG4gICAgICAuYnV0dG9uc1xuICAgICAgLmZpbHRlcigoYnV0dG9uKSA9PiBidXR0b24uc3VibWl0KVswXTtcbiAgfVxuXG4gIHByaXZhdGUgX2VsZW1lbnRJbkZvcm0oZWw6IEVsZW1lbnQpOiBib29sZWFuIHtcbiAgICBpZiAoZWwuaXNTYW1lTm9kZSh0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKGVsLnBhcmVudEVsZW1lbnQpIHtcbiAgICAgIHJldHVybiB0aGlzLl9lbGVtZW50SW5Gb3JtKGVsLnBhcmVudEVsZW1lbnQpO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgX2NvbXBsZXRlU3VibWl0KHN1Y2Nlc3MsIHN1Ym1pdEV2ZW50OiBTdWJtaXR0ZWRFdmVudCk6IHZvaWQge1xuICAgIGlmIChzdWNjZXNzKSB7XG4gICAgICB0aGlzLm5nRm9ybS5jb250cm9sLm1hcmtBc1ByaXN0aW5lKCk7XG4gICAgICB0aGlzLmNyZWF0ZVNuYXBzaG90KCk7XG4gICAgICB0aGlzLnN1Ym1pdHRlZC5lbWl0KHN1Ym1pdEV2ZW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fcmVzZXRCdXR0b25zKCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2dldEZvcm1Hcm91cCgpLmFjdGl2ZVN1Ym1pdEJ1dHRvbikge1xuICAgICAgaWYgKHN1Y2Nlc3MpIHtcbiAgICAgICAgdGhpcy5fZ2V0Rm9ybUdyb3VwKCkuYWN0aXZlU3VibWl0QnV0dG9uLnN1Y2Nlc3MoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX2dldEZvcm1Hcm91cCgpLmFjdGl2ZVN1Ym1pdEJ1dHRvbi5lcnJvcigpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuX3N0YXR1cyQubmV4dChGb3JtU3RhdHVzLlN1Ym1pdHRlZCk7XG5cbiAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgdGhpcy5fc3RhdHVzJC5uZXh0KEZvcm1TdGF0dXMuU3VjY2Vzcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3N0YXR1cyQubmV4dChGb3JtU3RhdHVzLkVycm9yKTtcbiAgICB9XG5cbiAgICB0aGlzLl9zdGF0dXMkLm5leHQoRm9ybVN0YXR1cy5Db21wbGV0aW5nKTtcblxuICAgIGNvbnN0IHJlc2V0RGVsYXkgPSBzdWNjZXNzID8gdGhpcy5zdWNjZXNzRGVsYXkgOiB0aGlzLmVycm9yRGVsYXk7XG5cbiAgICBvZih0cnVlKVxuICAgICAgLnBpcGUoXG4gICAgICAgIGRlbGF5KHJlc2V0RGVsYXkpLFxuICAgICAgICBmaXJzdCgpLFxuICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95JCksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMubmdGb3JtLmZvcm0uc3RhdHVzID09PSAnVkFMSUQnKSB7XG4gICAgICAgICAgdGhpcy5fc3RhdHVzJC5uZXh0KEZvcm1TdGF0dXMuVmFsaWQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuX3N0YXR1cyQubmV4dChGb3JtU3RhdHVzLkludmFsaWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fcmVzZXRCdXR0b25zKCk7XG4gICAgICAgIHRoaXMuX2dldEZvcm1Hcm91cCgpLmFjdGl2ZVN1Ym1pdEJ1dHRvbiA9IG51bGw7XG4gICAgICAgIHRoaXMuX3VwZGF0ZURpcnR5U3VibWl0QnV0dG9ucygpO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF9nZXRGb3JtR3JvdXAoKTogRnNGb3JtQmFzZURpcmVjdGl2ZSB7XG4gICAgcmV0dXJuIHRoaXMuX2Zvcm1Hcm91cCB8fCB0aGlzO1xuICB9XG5cbiAgcHJpdmF0ZSBfcmVzZXRCdXR0b25zKCk6IHZvaWQge1xuICAgIHRoaXMuX2dldEZvcm1Hcm91cCgpXG4gICAgICAuYnV0dG9ucy5mb3JFYWNoKChidXR0b24pID0+IHtcbiAgICAgICAgYnV0dG9uLnJlc2V0KCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX3JlZ2lzdGVyQ29uZmlybSgpOiB2b2lkIHtcbiAgICB0aGlzLm5nRm9ybS5mb3JtLnZhbHVlQ2hhbmdlc1xuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKGNoYW5nZXMpID0+IHtcbiAgICAgICAgaWYodGhpcy5fZGlhbG9nQmFja2Ryb3BFc2NhcGUgJiYgdGhpcy5fZGlhbG9nUmVmKSB7XG4gICAgICAgICAgdGhpcy5fZGlhbG9nUmVmLmRpc2FibGVDbG9zZSA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5jb25maXJtKSB7XG4gICAgICAgICAgY29uc3QgZXhpc3RpbmcgPSBPYmplY3Qua2V5cyh0aGlzLl9zbmFwc2hvdCk7XG5cbiAgICAgICAgICBPYmplY3Qua2V5cyhjaGFuZ2VzKVxuICAgICAgICAgICAgLmZvckVhY2goKG5hbWU6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgICBpZiAoZXhpc3RpbmcuaW5kZXhPZihuYW1lKSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zbmFwc2hvdFtuYW1lXSA9IGNoYW5nZXNbbmFtZV07XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX3JlZ2lzdGVyRHJhd2VyQ2xvc2UoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2RyYXdlclJlZikge1xuICAgICAgdGhpcy5fZHJhd2VyUmVmLmNsb3NlU3RhcnQkXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSxcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKChzdWJzY3JpYmVyKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuc3VibWl0dGluZykge1xuICAgICAgICAgICAgdGhpcy5fc3RhdHVzJFxuICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBmaWx0ZXIoKHN0YXR1cykgPT4gc3RhdHVzID09PSBGb3JtU3RhdHVzLlN1Y2Nlc3MgfHwgc3RhdHVzID09PSBGb3JtU3RhdHVzLkVycm9yKSxcbiAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95JCksXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgLnN1YnNjcmliZSgoc3RhdHVzKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHN0YXR1cyA9PT0gRm9ybVN0YXR1cy5TdWNjZXNzKSB7XG4gICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQobnVsbCk7XG4gICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIuZXJyb3IoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQobnVsbCk7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9yZWdpc3RlckNvbmZpcm1EcmF3ZXJDbG9zZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fZHJhd2VyUmVmKSB7XG4gICAgICB0aGlzLl9kcmF3ZXJSZWYuY2xvc2VTdGFydCRcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgc3dpdGNoTWFwKChzdWJzY3JpYmVyKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gaWlmKFxuICAgICAgICAgICAgICAoKSA9PiB0aGlzLmNvbmZpcm0gJiYgdGhpcy5jb25maXJtRHJhd2VyLFxuICAgICAgICAgICAgICB0aGlzLnRyaWdnZXJDb25maXJtKClcbiAgICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAgIG1hcCgocmVzdWx0KSA9PiBjb25maXJtUmVzdWx0Q29udGludWUocmVzdWx0KSksXG4gICAgICAgICAgICAgICAgICB0YXAoKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgZGVmZXIoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dChudWxsKTtcbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gb2YobnVsbCk7XG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9KSxcbiAgICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95JCksXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxuICBcbiAgcHJpdmF0ZSBfcmVnaXN0ZXJDb25maXJtRGlhbG9nQmFja2Ryb3BFc2NhcGUoKTogdm9pZCB7XG4gICAgaWYodGhpcy5fZGlhbG9nUmVmKSB7XG4gICAgICB0aGlzLl9kaWFsb2dCYWNrZHJvcEVzY2FwZSA9ICF0aGlzLl9kaWFsb2dSZWY/LmRpc2FibGVDbG9zZTtcblxuICAgICAgaWYgKHRoaXMuX2RpYWxvZ0JhY2tkcm9wRXNjYXBlKSB7XG4gICAgICAgIHRoaXMuX2RpYWxvZ1JlZi5iYWNrZHJvcENsaWNrKClcbiAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSxcbiAgICAgICAgICApXG4gICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9mb3JtQ2xvc2UoKTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmRlc3Ryb3kkXG4gICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9kaWFsb2dSZWYuZGlzYWJsZUNsb3NlID0gZmFsc2U7XG4gICAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfcmVnaXN0ZXJBdXRvY29tcGxldGUoKTogdm9pZCB7XG4gICAgdGhpcy5fcmVnaXN0ZXJDb250cm9sID0gdGhpcy5uZ0Zvcm0uZm9ybS5yZWdpc3RlckNvbnRyb2wuYmluZCh0aGlzLm5nRm9ybS5mb3JtKTtcblxuICAgIHRoaXMubmdGb3JtLmZvcm0ucmVnaXN0ZXJDb250cm9sID0gKG5hbWU6IHN0cmluZywgY29udHJvbDogQWJzdHJhY3RDb250cm9sKSA9PiB7XG5cbiAgICAgIGNvbnN0IGVsOiBFbGVtZW50ID0gdGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoYGlucHV0W25hbWU9JyR7bmFtZX0nXWApO1xuXG4gICAgICBpZiAoZWwpIHtcbiAgICAgICAgaWYgKCFlbC5nZXRBdHRyaWJ1dGUoJ2F1dG9jb21wbGV0ZScpKSB7XG4gICAgICAgICAgZWwuc2V0QXR0cmlidXRlKCdhdXRvY29tcGxldGUnLCAnbm9uZScpO1xuICAgICAgICAgIGVsLnNldEF0dHJpYnV0ZSgnbmFtZScsIGAke25hbWV9LSR7Z3VpZCgpfWApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLl9yZWdpc3RlckNvbnRyb2wobmFtZSwgY29udHJvbCk7XG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgX3JlZ2lzdGVyRGlydHlTdWJtaXRCdXR0b24oKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLm5nRm9ybSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMubmdGb3JtLmZvcm0udmFsdWVDaGFuZ2VzXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuX3VwZGF0ZURpcnR5U3VibWl0QnV0dG9ucygpO1xuICAgICAgfSk7XG5cbiAgICB0aGlzLl9nZXRGb3JtR3JvdXAoKVxuICAgICAgLmJ1dHRvbnMuY2hhbmdlc1xuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLl91cGRhdGVEaXJ0eVN1Ym1pdEJ1dHRvbnMoKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfdXBkYXRlRGlydHlTdWJtaXRCdXR0b25zKCk6IHZvaWQge1xuICAgIHRoaXMuX2dldEZvcm1Hcm91cCgpXG4gICAgICAuYnV0dG9uc1xuICAgICAgLmZpbHRlcigoYnV0dG9uKSA9PiBidXR0b24uc3VibWl0KVxuICAgICAgLmZvckVhY2goKHN1Ym1pdEJ1dHRvbjogRnNCdXR0b25EaXJlY3RpdmUpID0+IHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICF0aGlzLmNvbmZpcm0gfHwgIXRoaXMuZGlydHlTdWJtaXRCdXR0b24gfHwgdGhpcy5uZ0Zvcm0uZGlydHkgfHwgIXN1Ym1pdEJ1dHRvbi5kaXJ0eVN1Ym1pdFxuICAgICAgICApIHtcbiAgICAgICAgICBzdWJtaXRCdXR0b24uZW5hYmxlKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3VibWl0QnV0dG9uLmRpc2FibGUoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF9zdGF0dXNTdWJtaXR0aW5nKCk6IHZvaWQge1xuICAgIHRoaXMuX3N0YXR1cyQubmV4dChGb3JtU3RhdHVzLlN1Ym1pdHRpbmcpO1xuICB9XG5cbiAgcHJpdmF0ZSBfc3RhdHVzVmFsaWRhdGluZygpOiB2b2lkIHtcbiAgICB0aGlzLl9zdGF0dXMkLm5leHQoRm9ybVN0YXR1cy5WYWxpZGF0aW5nKTtcbiAgfVxuXG4gIHByaXZhdGUgX3NldHVwQWN0aXZlU3VibWl0QnV0dG9uKCk6IHZvaWQge1xuICAgIHRoaXMuX2dldEZvcm1Hcm91cCgpXG4gICAgICAuYWN0aXZlU3VibWl0QnV0dG9uID0gdGhpcy5fZ2V0QWN0aXZlU3VibWl0QnV0dG9uKCk7XG4gICAgdGhpcy5fcmVzZXRCdXR0b25zKCk7XG5cbiAgICBpZiAodGhpcy5fZ2V0Rm9ybUdyb3VwKCkuYWN0aXZlU3VibWl0QnV0dG9uKSB7XG4gICAgICB0aGlzLl9nZXRGb3JtR3JvdXAoKS5hY3RpdmVTdWJtaXRCdXR0b24ucHJvY2VzcygpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2Rpc2FibGVCdXR0b25zKCk6IHZvaWQge1xuICAgIHRoaXMuX2dldEZvcm1Hcm91cCgpXG4gICAgICAuYnV0dG9ucy5mb3JFYWNoKChidXR0b24pID0+IHtcbiAgICAgICAgYnV0dG9uLmRpc2FibGUoKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfd2FpdFVudGlsU3RhdHVzUGVuZGluZygpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLm5nRm9ybS5zdGF0dXNDaGFuZ2VzXG4gICAgICAucGlwZShcbiAgICAgICAgc3RhcnRXaXRoKHRoaXMubmdGb3JtLnN0YXR1cyksXG4gICAgICAgIGZpcnN0KChzdGF0ZSkgPT4gc3RhdGUgIT09ICdQRU5ESU5HJyksXG4gICAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBfaGFuZGxlRXJyb3IoZTogU3VibWl0dGVkRXZlbnQpIHtcbiAgICBjb25zb2xlLmxvZygnJWMgRm9ybSBTdWJtaXQgJywgJ2NvbG9yOiB3aGl0ZTsgYmFja2dyb3VuZC1jb2xvcjogI0QzM0Y0OScsICdFcnJvciBvY2N1cmVkJyk7XG4gICAgY29uc29sZS5ncm91cCgnRXJyb3IgRGV0YWlsczonKTtcbiAgICBjb25zb2xlLmxvZygnTWVzc2FnZTogJywgZSk7XG4gICAgY29uc29sZS5sb2coJ0Zvcm1SZWY6ICcsIHRoaXMpO1xuXG4gICAgaWYgKHRoaXMubmdGb3JtLmludmFsaWQpIHtcbiAgICAgIGNvbnN0IGVycm9ycyA9IGdldEZvcm1FcnJvcnModGhpcy5uZ0Zvcm0uY29udHJvbCwgbnVsbCk7XG4gICAgICBjb25zb2xlLmxvZygnVmFsaWRhdGlvbiBFcnJvcnM6ICcsIGVycm9ycyk7XG4gICAgfVxuXG4gICAgY29uc29sZS5ncm91cEVuZCgpO1xuICAgIHRoaXMuX2NvbXBsZXRlU3VibWl0KGZhbHNlLCBudWxsKTtcbiAgfVxuXG4gIHByaXZhdGUgX3JlZ2lzdGVyQ2FuRGVhY3RpdmF0ZUd1YXJkKCk6IHZvaWQge1xuICAgIHRoaXMuX2FjdGl2YXRlZFJvdXRlQ29uZmlnID0gZ2V0QWN0aXZlUm91dGUodGhpcy5fcm91dGUpLnJvdXRlQ29uZmlnO1xuXG4gICAgaWYgKCF0aGlzLl9hY3RpdmF0ZWRSb3V0ZUNvbmZpZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2Zvcm0ucmVnaXN0ZXJGb3JtRGlyZWN0aXZlKHRoaXMuX2FjdGl2YXRlZFJvdXRlQ29uZmlnLmNvbXBvbmVudCwgdGhpcyk7XG5cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkodGhpcy5fYWN0aXZhdGVkUm91dGVDb25maWcuY2FuRGVhY3RpdmF0ZSkpIHtcbiAgICAgIHRoaXMuX2FjdGl2YXRlZFJvdXRlQ29uZmlnLmNhbkRlYWN0aXZhdGUgPSBbXTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fYWN0aXZhdGVkUm91dGVDb25maWcuY2FuRGVhY3RpdmF0ZS5pbmRleE9mKEZvcm1EZWFjdGl2YXRlR3VhcmQpID09PSAtMSkge1xuICAgICAgdGhpcy5fYWN0aXZhdGVkUm91dGVDb25maWcuY2FuRGVhY3RpdmF0ZS5wdXNoKEZvcm1EZWFjdGl2YXRlR3VhcmQpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2NsZWFudXBDYW5EZWFjdGl2YXRlKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fYWN0aXZhdGVkUm91dGVDb25maWcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBndWFyZEluZGV4ID0gdGhpcy5fYWN0aXZhdGVkUm91dGVDb25maWcuY2FuRGVhY3RpdmF0ZS5pbmRleE9mKEZvcm1EZWFjdGl2YXRlR3VhcmQpO1xuICAgIHRoaXMuX2FjdGl2YXRlZFJvdXRlQ29uZmlnLmNhbkRlYWN0aXZhdGUuc3BsaWNlKGd1YXJkSW5kZXgsIDEpO1xuXG4gICAgdGhpcy5fZm9ybS5yZW1vdmVGb3JtRGlyZWN0aXZlKHRoaXMuX2FjdGl2YXRlZFJvdXRlQ29uZmlnLmNvbXBvbmVudCk7XG4gIH1cblxufVxuIl19
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"firestitch-form.mjs","sources":["../../src/app/components/confirm-unsaved/confirm-unsaved.component.ts","../../src/app/components/confirm-unsaved/confirm-unsaved.component.html","../../src/app/enums/confirm-result.ts","../../src/app/helpers/confirm-result-continue.ts","../../src/app/helpers/get-active-route.ts","../../src/app/enums/form-status.ts","../../src/app/services/fsform.service.ts","../../src/app/guards/form-deactivate.guard.ts","../../src/app/helpers/get-form-errors.ts","../../src/app/directives/form-base/form-base.directive.ts","../../src/app/directives/form-group/form-group.directive.ts","../../src/app/directives/form/form.directive.ts","../../src/app/directives/form-dialog-close.directive.ts","../../src/app/directives/button.directive.ts","../../src/app/components/form-dialog-actions/form-dialog-actions.component.ts","../../src/app/components/form-dialog-actions/form-dialog-actions.component.html","../../src/app/consts/error-messages.const.ts","../../src/app/providers/validate-messages.provider.ts","../../src/app/directives/validators/control.directive.ts","../../src/app/directives/validators/compare.directive.ts","../../src/app/validators/validators.ts","../../src/app/helpers/is-enabled.ts","../../src/app/directives/validators/daterange.directive.ts","../../src/app/directives/validators/email.directive.ts","../../src/app/directives/validators/emails.directive.ts","../../src/app/directives/validators/function.directive.ts","../../src/app/directives/validators/greater-equal.directive.ts","../../src/app/directives/validators/greater.directive.ts","../../src/app/directives/validators/integer.directive.ts","../../src/app/directives/validators/lesser-equal.directive.ts","../../src/app/directives/validators/lesser.directive.ts","../../src/app/directives/validators/max.directive.ts","../../src/app/directives/validators/maxlength.directive.ts","../../src/app/directives/validators/min.directive.ts","../../src/app/directives/validators/minlength.directive.ts","../../src/app/directives/validators/no-fs-validators.directive.ts","../../src/app/directives/validators/numeric.directive.ts","../../src/app/directives/validators/pattern.directive.ts","../../src/app/directives/validators/phone.directive.ts","../../src/app/directives/validators/required.directive.ts","../../src/app/directives/validators/url.directive.ts","../../src/app/directives/validators/validate.directive.ts","../../src/app/directives/form-template.directive.ts","../../src/app/directives/submit-button.directive.ts","../../src/app/directives/form-template-outlet.directive.ts","../../src/app/fs-form.module.ts","../../src/public_api.ts","../../src/firestitch-form.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, Inject, OnDestroy, OnInit } from '@angular/core';\n\nimport { MatButton } from '@angular/material/button';\nimport { MAT_DIALOG_DATA, MatDialogModule, MatDialogRef } from '@angular/material/dialog';\n\nimport { FsDialogModule } from '@firestitch/dialog';\n\nimport { Subject } from 'rxjs';\n\n\n@Component({\n templateUrl: './confirm-unsaved.component.html',\n styleUrls: ['./confirm-unsaved.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [\n MatDialogModule,\n MatButton,\n\n FsDialogModule,\n ],\n})\nexport class ConfirmUnsavedComponent implements OnInit, OnDestroy {\n\n public saveLabel;\n public discardLabel;\n public cancelLabel;\n public message;\n public title;\n\n private _destroy$ = new Subject<void>();\n \n constructor(\n @Inject(MAT_DIALOG_DATA) private _data: any,\n private _dialogRef: MatDialogRef<ConfirmUnsavedComponent>,\n ) {}\n\n public ngOnInit(): void {\n this.saveLabel = this._data.saveLabel;\n this.discardLabel = this._data.discardLabel;\n this.cancelLabel = this._data.cancelLabel;\n this.message = this._data.message;\n this.title = this._data.title;\n }\n\n public save(): void {\n this._dialogRef.close('save');\n }\n\n public discard(): void {\n this._dialogRef.close('discard');\n }\n\n public cancel(): void {\n this._dialogRef.close(null);\n }\n\n public ngOnDestroy(): void {\n this._destroy$.next(null);\n this._destroy$.complete();\n }\n}\n","<fs-dialog>\n <h1 mat-dialog-title>\n {{ title }}\n </h1>\n <mat-dialog-content>\n {{ message }}\n </mat-dialog-content>\n <mat-dialog-actions>\n <button\n type=\"button\"\n color=\"primary\"\n (click)=\"save()\"\n mat-button>\n {{ saveLabel }}\n </button>\n <button\n type=\"button\"\n (click)=\"discard()\"\n mat-button>\n {{ discardLabel }}\n </button>\n <button\n type=\"button\"\n (click)=\"cancel()\"\n mat-button>\n {{ cancelLabel }}\n </button>\n </mat-dialog-actions>\n</fs-dialog>","export enum ConfirmResult {\n Save = 'save',\n Discard = 'discard',\n Review = 'review',\n Invalid = 'invalid',\n NoChanges = 'noChanges',\n}\n","import { ConfirmResult } from '../enums/confirm-result';\n\nexport function confirmResultContinue(result): boolean {\n return (\n result === ConfirmResult.Discard || \n result === ConfirmResult.Save || \n result === ConfirmResult.NoChanges\n );\n}\n","import { ActivatedRoute } from '@angular/router';\n\n\nexport function getActiveRoute(route: ActivatedRoute): ActivatedRoute {\n while (route.firstChild) {\n route = route.firstChild;\n }\n\n return route;\n}\n","export enum FormStatus {\n Valid = 'valid',\n Invalid = 'invalid',\n Validating = 'validating',\n Submitting = 'submitting',\n Submitted = 'submitted',\n Error = 'error',\n Success = 'success',\n Completing = 'completing',\n}\n","import { inject, Injectable, Type } from '@angular/core';\n\nimport { MatDialog } from '@angular/material/dialog';\n\n\nimport { Observable, of } from 'rxjs';\nimport { catchError, map, switchMap } from 'rxjs/operators';\n\nimport { ConfirmUnsavedComponent } from '../components/confirm-unsaved';\nimport type { FsFormDirective } from '../directives/form/form.directive';\nimport { ConfirmResult } from '../enums';\n\n\n@Injectable({\n providedIn: 'root',\n})\nexport class FsForm {\n\n // value is array for future possibilities of extension\n private _formDirectiveStore = new WeakMap<Type<any>, FsFormDirective[]>();\n private _dialog = inject(MatDialog);\n\n public registerFormDirective(routeComponent: Type<any>, directive: FsFormDirective) {\n const directives = this.getFormDirectives(routeComponent) || [];\n directives.push(directive);\n\n this._formDirectiveStore.set(routeComponent, directives);\n }\n\n public getFormDirectives(routeComponent): FsFormDirective[] {\n return this._formDirectiveStore.get(routeComponent);\n }\n\n public removeFormDirective(routeComponent) {\n this._formDirectiveStore.delete(routeComponent);\n }\n\n public hasChanges(form: FsFormDirective): boolean {\n return Object.keys(form.ngForm.control.controls)\n .some((key) => {\n const control = form.ngForm.control.controls[key];\n\n return control.dirty;\n });\n }\n\n public confirmUnsaved(\n form: FsFormDirective, \n ): Observable<ConfirmResult> {\n if (!form.confirm || !this.hasChanges(form)) {\n return of(ConfirmResult.NoChanges);\n }\n\n let title = 'You have unsaved changes';\n let message = 'What would you like to do with your changes?';\n let saveLabel = 'Save and continue';\n let discardLabel = 'Discard changes and continue';\n let cancelLabel = 'Review changes';\n\n if (typeof form.confirm === 'object') {\n title = form.confirm.title || title;\n message = form.confirm.message || message;\n saveLabel = form.confirm.saveLabel || saveLabel;\n discardLabel = form.confirm.discardLabel || discardLabel;\n cancelLabel = form.confirm.cancelLabel || cancelLabel;\n }\n\n return this._dialog\n .open(ConfirmUnsavedComponent, {\n data: {\n title,\n message,\n saveLabel,\n discardLabel,\n cancelLabel,\n },\n width: 'auto', \n })\n .afterClosed()\n .pipe(\n switchMap((result) => {\n if(!result) {\n return of(ConfirmResult.Review);\n }\n \n if (result === 'discard') {\n form.reset();\n\n return of(ConfirmResult.Discard); \n }\n\n if (result === 'save') {\n form.ngForm.control.markAsPristine();\n\n return form.submit$({ confirmed: true })\n .pipe(\n map((submitEvent) => {\n if(submitEvent.error) {\n return ConfirmResult.Invalid;\n }\n\n return ConfirmResult.Save;\n }),\n catchError(() => {\n return of(ConfirmResult.Invalid);\n }),\n );\n }\n }),\n );\n }\n\n}\n","import { Injectable } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\n\n\nimport { Observable, of } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\nimport { FsFormDirective } from '../directives/form/form.directive';\nimport { confirmResultContinue } from '../helpers';\nimport { getActiveRoute } from '../helpers/get-active-route';\nimport { FsForm } from '../services/fsform.service';\n\n\n@Injectable({\n providedIn: 'root',\n})\nexport class FormDeactivateGuard {\n\n constructor(\n private _form: FsForm,\n private _route: ActivatedRoute,\n ) {}\n\n public canDeactivate(): Observable<boolean> {\n const route = getActiveRoute(this._route);\n\n if (!route) {\n console.error('Can not find route for FormDeactivateGuard checks');\n\n return of(true);\n }\n\n const directives: FsFormDirective[] = this._form\n .getFormDirectives(route.routeConfig.component);\n\n if (!Array.isArray(directives) || directives.length === 0) {\n console.error('Can not find a valid FsFormDirective');\n\n return of(true);\n }\n\n return this._form.confirmUnsaved(directives[0])\n .pipe(\n map((result) => {\n return confirmResultContinue(result);\n }),\n );\n }\n\n}\n","import { AbstractControl, UntypedFormGroup, ValidationErrors } from '@angular/forms';\n\n\nexport function getFormErrors(control: AbstractControl, key: string): ValidationErrors | null {\n let errors: ValidationErrors | null = null;\n\n if (control.invalid && control.errors) {\n errors = {\n [key]: { ...control.errors },\n };\n }\n\n if (control instanceof UntypedFormGroup) {\n Object.entries(control.controls)\n .forEach(([name, childControl]) => {\n const childErrors = getFormErrors(childControl, name);\n\n if (childErrors) {\n if (!errors) {\n errors = { ...childErrors };\n } else {\n Object.assign(errors, childErrors);\n }\n }\n });\n }\n\n return errors;\n}\n","import {\n AfterContentInit,\n ChangeDetectorRef,\n ContentChildren,\n Directive,\n inject,\n Input,\n NgZone,\n OnDestroy,\n QueryList,\n} from '@angular/core';\n\nimport { MatTab, MatTabGroup, MatTabHeader } from '@angular/material/tabs';\n\nimport { Observable, of, Subject } from 'rxjs';\nimport { filter, switchMap, takeUntil, tap } from 'rxjs/operators';\n\nimport { ConfirmResult } from '../../enums';\nimport { confirmResultContinue } from '../../helpers';\nimport { ConfirmConfig, ConfirmTabGroup } from '../../interfaces';\nimport { FsButtonDirective } from '../button.directive';\n\n\n@Directive()\nexport abstract class FsFormBaseDirective implements AfterContentInit, OnDestroy {\n\n @Input()\n public confirmTabs = true;\n \n @Input()\n public tabGroup: MatTabGroup;\n\n protected _ngZone = inject(NgZone);\n protected _cdRef = inject(ChangeDetectorRef);\n\n @ContentChildren(MatTabGroup, { descendants: true })\n private _tabGroups: QueryList<MatTabGroup> = new QueryList();\n\n private _buttons = new QueryList<FsButtonDirective>();\n private _activeSubmitButton: FsButtonDirective;\n private _destroy$ = new Subject<void>();\n \n public abstract submitting: boolean;\n public abstract confirm: ConfirmConfig | boolean; \n\n public ngAfterContentInit(): void {\n this._registerConfirmTabs();\n }\n\n public get destroy$(): Observable<void> {\n return this._destroy$.asObservable();\n }\n\n public ngOnDestroy(): void {\n this._destroy$.next(null);\n this._destroy$.complete();\n }\n \n public get buttons(): QueryList<FsButtonDirective> {\n return this._buttons;\n }\n\n public get activeSubmitButton(): FsButtonDirective {\n return this._activeSubmitButton;\n }\n\n public set activeSubmitButton(button: FsButtonDirective) {\n this._activeSubmitButton = button;\n }\n\n public addButton(button: FsButtonDirective): void {\n this._buttons\n .reset(\n [\n ...this._buttons.toArray(),\n button,\n ]);\n }\n\n public removeButton(button: FsButtonDirective): void {\n if(this._activeSubmitButton === button) {\n this._activeSubmitButton = null;\n }\n\n this._buttons.reset(\n [\n ...this._buttons.toArray()\n .filter((item) => (button !== item)),\n ]);\n }\n \n\n private _registerConfirmTabs(): void {\n this._registerConfirmTabGroups(this._tabGroups.toArray());\n this._tabGroups.changes\n .pipe(\n takeUntil(this._destroy$),\n )\n .subscribe(() => {\n this._registerConfirmTabGroups(this._tabGroups.toArray());\n });\n }\n\n private _registerConfirmTabGroups(tabGroups: MatTabGroup[]): void {\n tabGroups.forEach((tabGroup: MatTabGroup) => {\n this._registerConfirmTabGroup(tabGroup);\n });\n }\n\n private _registerConfirmTabGroup(tabGroup: MatTabGroup): void {\n const confirmTabGroup = tabGroup as ConfirmTabGroup;\n if (!confirmTabGroup._originalHandleClick) {\n confirmTabGroup._originalHandleClick = tabGroup._handleClick;\n confirmTabGroup._handlClick$ = new Subject<{\n tab: MatTab; \n tabHeader: MatTabHeader; \n idx: number \n }>();\n\n confirmTabGroup._handleClick = (tab: MatTab, tabHeader: MatTabHeader, idx: number) => {\n if (confirmTabGroup._handlClick$.observers.length) {\n confirmTabGroup._handlClick$.next({ tab, tabHeader, idx });\n } else {\n confirmTabGroup._originalHandleClick(tab, tabHeader, idx);\n }\n };\n }\n\n confirmTabGroup._handlClick$\n .pipe(\n filter(() => !this.submitting),\n switchMap((event) => {\n if(this.confirm && this.confirmTabs) {\n return this.triggerConfirm()\n .pipe(\n tap((result) => {\n if (confirmResultContinue(result)) {\n confirmTabGroup.selectedIndex = event.idx;\n }\n }),\n );\n }\n\n confirmTabGroup._originalHandleClick(event.tab, event.tabHeader, event.idx);\n\n return of(null);\n }),\n takeUntil(this._destroy$),\n )\n .subscribe();\n }\n \n \n public abstract triggerSubmit(): void;\n public abstract triggerConfirm(): Observable<ConfirmResult>;\n}\n","import {\n Directive,\n} from '@angular/core';\n\n\nimport { ConfirmConfig } from '../../interfaces';\nimport { FsFormDirective } from '../form';\nimport { FsFormBaseDirective } from '../form-base';\n\n\n@Directive({\n selector: '[fsFormGroup]',\n exportAs: 'fsFormGroup',\n})\nexport class FsFormGroupDirective extends FsFormBaseDirective {\n\n private _formDirective: FsFormDirective;\n\n public triggerSubmit() {\n return this._formDirective?.triggerSubmit();\n }\n\n public triggerConfirm() {\n return this._formDirective?.triggerConfirm();\n }\n\n public get submitting(): boolean {\n return this._formDirective?.submitting;\n }\n\n public get confirm(): ConfirmConfig | boolean {\n return this._formDirective?.confirm;\n }\n\n public registerForm(formDirective: FsFormDirective) {\n this._formDirective = formDirective;\n }\n\n public deregisterForm() {\n this._formDirective = null;\n }\n}\n","import {\n AfterContentInit,\n Directive,\n ElementRef,\n EventEmitter,\n HostBinding,\n Inject,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Optional,\n Output,\n SimpleChanges,\n} from '@angular/core';\nimport { AbstractControl, NgForm } from '@angular/forms';\nimport { ActivatedRoute, Route } from '@angular/router';\n\nimport { MatDialogRef } from '@angular/material/dialog';\n\nimport { guid } from '@firestitch/common';\nimport { DrawerRef } from '@firestitch/drawer';\nimport { FsMessage, MessageMode } from '@firestitch/message';\n\nimport {\n BehaviorSubject,\n defer,\n fromEvent,\n iif,\n Observable,\n of,\n throwError,\n} from 'rxjs';\nimport {\n catchError,\n delay,\n filter,\n first,\n map,\n mergeMap,\n startWith,\n switchMap,\n take,\n takeUntil,\n tap,\n} from 'rxjs/operators';\n\nimport { FormDeactivateGuard } from '../../guards/form-deactivate.guard';\nimport { confirmResultContinue } from '../../helpers/confirm-result-continue';\nimport { getActiveRoute } from '../../helpers/get-active-route';\nimport { getFormErrors } from '../../helpers/get-form-errors';\nimport { FsForm } from '../../services/fsform.service';\nimport { FsButtonDirective } from '../button.directive';\nimport { FsFormBaseDirective } from '../form-base';\nimport { FsFormGroupDirective } from '../form-group';\n\nimport { ConfirmResult } from './../../enums/confirm-result';\nimport { FormStatus } from './../../enums/form-status';\nimport { ConfirmConfig, SubmittedEvent } from './../../interfaces';\nimport { SubmitEvent } from './../../interfaces/submit-event';\n\n\n@Directive({\n selector: '[fsForm]',\n exportAs: 'fsForm',\n})\nexport class FsFormDirective \n extends FsFormBaseDirective \n implements OnInit, OnDestroy, AfterContentInit, OnChanges {\n\n @Input()\n public wrapperSelector = '.fs-form-wrapper,.mat-mdc-form-field';\n\n @Input()\n public messageSelector = '.fs-form-message,.mat-mdc-form-field-subscript-wrapper';\n\n @Input()\n public hintSelector = '.fs-form-hint,.mat-mdc-form-field-hint-wrapper';\n\n @Input()\n public labelSelector = '.fs-form-label,.mdc-floating-label>mat-label';\n\n @Input()\n public autocomplete = false;\n\n @Input()\n public shortcuts = true; // Ctrl + s\n\n @Input()\n public confirm: ConfirmConfig | boolean = true;\n\n @Input()\n public confirmDialog = true;\n\n @Input()\n public confirmDrawer = true;\n\n @Input()\n public confirmBrowser = true;\n\n @Input()\n public dirtySubmitButton = true;\n\n @Input()\n public set submit(submit$: (event: SubmitEvent) => Observable<any>) {\n this._submit$ = submit$;\n }\n\n public get submit(): (event: SubmitEvent) => Observable<any> {\n return this._submit$;\n }\n\n @Input()\n public successDelay = 0;\n\n @Input()\n public errorDelay = 1000;\n\n @Input()\n public deactivationGuard = true;\n \n @Output('fsForm')\n public submitEvent: EventEmitter<SubmitEvent> = new EventEmitter();\n\n @Output()\n public invalid: EventEmitter<SubmitEvent> = new EventEmitter();\n\n @Output()\n public valid: EventEmitter<SubmitEvent> = new EventEmitter();\n\n @Output()\n public submitted: EventEmitter<SubmitEvent> = new EventEmitter();\n\n @Output()\n public reseted: EventEmitter<SubmitEvent> = new EventEmitter();\n\n @Output()\n public cleared: EventEmitter<SubmitEvent> = new EventEmitter();\n\n @HostBinding('class.fs-form')\n public fsFormClass = true;\n\n private _registerControl;\n private _dialogBackdropEscape = false;\n private _snapshot: { [key: string]: any } = {};\n private _activatedRouteConfig: Route | null;\n private _status$ = new BehaviorSubject(FormStatus.Valid);\n private _submit$: (event?: SubmitEvent) => Observable<any> = null;\n\n constructor(\n @Inject(NgForm)\n public ngForm: NgForm,\n private _form: FsForm,\n private _element: ElementRef,\n private _message: FsMessage,\n @Optional() private _formGroup: FsFormGroupDirective,\n @Optional() @Inject(MatDialogRef)\n private _dialogRef: MatDialogRef<any>,\n\n @Optional() @Inject(DrawerRef)\n private _drawerRef: DrawerRef<any>,\n\n private _route: ActivatedRoute,\n ) { \n super();\n }\n\n public get submitting(): boolean {\n return this._status$.getValue() === FormStatus.Submitting;\n }\n\n public get validating(): boolean {\n return this._status$.getValue() === FormStatus.Validating;\n }\n\n public get completing(): boolean {\n return this._status$.getValue() === FormStatus.Completing;\n }\n\n private get _submitEvent(): SubmitEvent {\n return {\n ngForm: this.ngForm,\n submitter: this._submitter,\n };\n }\n\n private get _formValidState$(): Observable<SubmittedEvent> {\n this.submitEvent.emit(this._submitEvent);\n this.valid.emit(this._submitEvent);\n\n const submittedEvent: SubmittedEvent = {\n ngForm: this.ngForm,\n submitter: this._submitter,\n response: null,\n };\n\n const submit$: Observable<any> = this._submit$ ?\n this._submit$(this._submitEvent) : of(submittedEvent);\n\n return submit$\n .pipe(\n map((response) => {\n submittedEvent.response = response;\n\n return submittedEvent;\n }),\n takeUntil(this.destroy$),\n );\n }\n\n private get _formInvalidState$(): Observable<never> {\n if (this.invalid) {\n this.invalid.emit(this._submitEvent);\n }\n\n const message = 'Please review errors highlighted in red';\n this._message.error(message, { mode: MessageMode.Toast });\n\n const el = this._element.nativeElement.querySelector('.ng-invalid');\n\n if (el) {\n el.scrollIntoView({ behavior: 'smooth', block: 'nearest' });\n }\n\n return throwError(() => new Error('Form validation error'));\n }\n\n private get _submitter(): string {\n return this._getFormGroup().activeSubmitButton?.name;\n }\n\n public ngOnInit() {\n this._formGroup?.registerForm(this);\n\n if (this.deactivationGuard) {\n this._registerCanDeactivateGuard();\n }\n\n this._registerConfirmDialogBackdropEscape();\n this._listenHotKeys();\n this._listenWindowClose();\n this._listenSubmit();\n this._listenFormStatus();\n\n if (!this.autocomplete) {\n this._registerAutocomplete();\n }\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes.confirm) {\n this._updateDirtySubmitButtons();\n }\n }\n\n public clearSubmit(submit: (event: SubmitEvent) => Observable<any> = null): void {\n if(!submit || submit === this._submit$) {\n this._submit$ = null;\n }\n\n setTimeout(() => {\n this._cdRef.markForCheck();\n });\n }\n\n public registerSubmit(submit$: () => Observable<any>): void {\n this._submit$ = submit$;\n\n setTimeout(() => {\n this._cdRef.markForCheck();\n });\n }\n\n public ngAfterContentInit(): void {\n super.ngAfterContentInit(); \n this._registerConfirm();\n this._registerConfirmDrawerClose();\n this._registerDrawerClose();\n this._registerDirtySubmitButton();\n }\n\n public ngOnDestroy(): void {\n this._formGroup?.deregisterForm();\n\n super.ngOnDestroy();\n this._cleanupCanDeactivate();\n }\n\n public createSnapshot(): void {\n this._snapshot = this.ngForm.value;\n }\n\n public getSnapshot(): { [key: string]: any } {\n return this._snapshot || {};\n }\n\n public reset(): void {\n this.ngForm.resetForm();\n\n Object.keys(this.ngForm.controls)\n .forEach((name: string) => {\n const control = this.ngForm.controls[name];\n control.reset(this._snapshot[name]);\n });\n\n this.reseted.emit();\n }\n\n public clear(): void {\n this.ngForm.resetForm();\n this.cleared.emit();\n }\n\n public dirty(): void {\n this.ngForm.form.markAsDirty();\n this._updateDirtySubmitButtons();\n }\n\n public pristine(): void {\n this.ngForm.form.markAsPristine();\n this._updateDirtySubmitButtons();\n }\n\n public triggerSubmit(options?: { confirmed: boolean }): void {\n this.ngForm.ngSubmit.emit();\n }\n\n public triggerConfirm(): Observable<ConfirmResult> {\n const submitted = this.submitting ? this.submitted.asObservable() : of({});\n\n return submitted\n .pipe(\n take(1),\n mergeMap(() => this._form.confirmUnsaved(this)),\n );\n }\n\n public enable(): void {\n this.ngForm.control.enable();\n\n this._updateDirtySubmitButtons();\n }\n\n public disable(): void {\n this.ngForm.control.disable();\n\n this._getFormGroup()\n .buttons.forEach((button) => {\n button.disable();\n });\n }\n\n public validate(): void {\n Object.values(this.ngForm.controls)\n .forEach((control) => {\n control.markAsDirty();\n control.markAsTouched();\n control.updateValueAndValidity();\n });\n }\n\n public submit$(submitEvent: SubmitEvent): Observable<SubmittedEvent> {\n return of(submitEvent)\n .pipe(\n tap(() => this._statusValidating()),\n tap(() => this.validate()),\n tap(() => this._statusSubmitting()),\n tap(() => this._setupActiveSubmitButton()),\n tap(() => this._disableButtons()),\n switchMap((data) => this._waitUntilStatusPending()\n .pipe(\n map(() => data),\n )), \n mergeMap(() => {\n if (this.ngForm.status === 'INVALID') {\n return this._formInvalidState$;\n }\n\n return this._formValidState$;\n }),\n catchError((e) => {\n this._handleError(e);\n\n return of({\n ...this._submitEvent,\n error: e.message,\n });\n }),\n tap((submittedEvent: SubmittedEvent) => {\n if(!submittedEvent.error) {\n this._completeSubmit(true, submittedEvent);\n }\n }),\n );\n }\n\n private _listenSubmit(): void {\n this\n .ngForm\n .ngSubmit\n .pipe(\n tap((event) => {\n event?.preventDefault();\n }),\n filter(() => {\n return [FormStatus.Valid, FormStatus.Invalid]\n .includes(this._status$.getValue());\n }),\n switchMap(() => this.submit$(this._submitEvent)),\n takeUntil(this.destroy$),\n )\n .subscribe();\n }\n\n private _listenFormStatus(): void {\n this._status$\n .pipe(\n takeUntil(this.destroy$),\n )\n .subscribe((formStatus: FormStatus) => {\n const cls = [FormStatus.Submitting, FormStatus.Validating];\n const classList = this._element.nativeElement.classList;\n classList.remove(...cls);\n if (cls.indexOf(formStatus) !== -1) {\n classList.add(formStatus);\n }\n });\n\n }\n\n private _listenWindowClose(): void {\n fromEvent(window, 'beforeunload')\n .pipe(\n takeUntil(this.destroy$),\n )\n .subscribe((event: Event) => {\n if (this.confirm && this.confirmBrowser && this.ngForm.dirty) {\n event.returnValue = false;\n }\n });\n }\n\n private _activeDialog(el, dialog: HTMLElement): boolean {\n if (el.isSameNode(dialog)) {\n return true;\n } else if (el.parentElement) {\n return this._activeDialog(el.parentElement, dialog);\n }\n\n return false;\n }\n\n private _listenHotKeys(): void {\n this._ngZone.runOutsideAngular(() => {\n fromEvent(document, 'keydown')\n .pipe(\n takeUntil(this.destroy$),\n )\n .subscribe((event: KeyboardEvent) => {\n if (this._dialogBackdropEscape && event.code === 'Escape') {\n const cdkOverlayPane = Array\n .from(document.querySelectorAll<HTMLElement>('.cdk-overlay-pane')).pop();\n \n const activeDialog = this\n ._activeDialog(document.getElementById(this._dialogRef.id), cdkOverlayPane);\n\n if (activeDialog) {\n this._ngZone.run(() => {\n this._formClose();\n });\n }\n }\n\n if ((event.ctrlKey || event.metaKey) && event.code === 'KeyS') {\n event.preventDefault();\n\n if (this.shortcuts) {\n if (this._elementInForm(document.activeElement)) {\n this.ngForm.ngSubmit.next(null);\n }\n }\n }\n });\n });\n }\n\n private _formClose(): void {\n if (this.confirm && this.confirmDialog) {\n this.triggerConfirm()\n .pipe(\n filter((result) => confirmResultContinue(result)),\n switchMap((result) => {\n return result === ConfirmResult.NoChanges || result === ConfirmResult.Discard\n ? of(null)\n : this.submitted.asObservable();\n }),\n takeUntil(this.destroy$),\n )\n .subscribe((result: SubmittedEvent) => {\n this._dialogRef.close(result?.response);\n });\n } else {\n this._dialogRef.close(null);\n }\n }\n\n private _getActiveSubmitButton(): FsButtonDirective {\n if(this._getFormGroup().activeSubmitButton) {\n return this._getFormGroup().activeSubmitButton;\n }\n\n return this._getFormGroup()\n .buttons\n .filter((button) => button.submit)[0];\n }\n\n private _elementInForm(el: Element): boolean {\n if (el.isSameNode(this._element.nativeElement)) {\n return true;\n } else if (el.parentElement) {\n return this._elementInForm(el.parentElement);\n }\n\n return false;\n }\n\n private _completeSubmit(success, submitEvent: SubmittedEvent): void {\n if (success) {\n this.ngForm.control.markAsPristine();\n this.createSnapshot();\n this.submitted.emit(submitEvent);\n } else {\n this._resetButtons();\n }\n\n if (this._getFormGroup().activeSubmitButton) {\n if (success) {\n this._getFormGroup().activeSubmitButton.success();\n } else {\n this._getFormGroup().activeSubmitButton.error();\n }\n }\n\n this._status$.next(FormStatus.Submitted);\n\n if (success) {\n this._status$.next(FormStatus.Success);\n } else {\n this._status$.next(FormStatus.Error);\n }\n\n this._status$.next(FormStatus.Completing);\n\n const resetDelay = success ? this.successDelay : this.errorDelay;\n\n of(true)\n .pipe(\n delay(resetDelay),\n first(),\n takeUntil(this.destroy$),\n )\n .subscribe(() => {\n if (this.ngForm.form.status === 'VALID') {\n this._status$.next(FormStatus.Valid);\n } else {\n this._status$.next(FormStatus.Invalid);\n }\n\n this._resetButtons();\n this._getFormGroup().activeSubmitButton = null;\n this._updateDirtySubmitButtons();\n });\n }\n\n private _getFormGroup(): FsFormBaseDirective {\n return this._formGroup || this;\n }\n\n private _resetButtons(): void {\n this._getFormGroup()\n .buttons.forEach((button) => {\n button.reset();\n });\n }\n\n private _registerConfirm(): void {\n this.ngForm.form.valueChanges\n .pipe(\n takeUntil(this.destroy$),\n )\n .subscribe((changes) => {\n if(this._dialogBackdropEscape && this._dialogRef) {\n this._dialogRef.disableClose = true;\n }\n\n if (this.confirm) {\n const existing = Object.keys(this._snapshot);\n\n Object.keys(changes)\n .forEach((name: string) => {\n if (existing.indexOf(name) === -1) {\n this._snapshot[name] = changes[name];\n }\n });\n }\n });\n }\n\n private _registerDrawerClose(): void {\n if (this._drawerRef) {\n this._drawerRef.closeStart$\n .pipe(\n takeUntil(this.destroy$),\n )\n .subscribe((subscriber) => {\n if (this.submitting) {\n this._status$\n .pipe(\n filter((status) => status === FormStatus.Success || status === FormStatus.Error),\n takeUntil(this.destroy$),\n )\n .subscribe((status) => {\n if (status === FormStatus.Success) {\n subscriber.next(null);\n subscriber.complete();\n } else {\n subscriber.error();\n }\n });\n } else {\n subscriber.next(null);\n subscriber.complete();\n }\n });\n }\n }\n\n private _registerConfirmDrawerClose(): void {\n if (this._drawerRef) {\n this._drawerRef.closeStart$\n .pipe(\n switchMap((subscriber) => {\n return iif(\n () => this.confirm && this.confirmDrawer,\n this.triggerConfirm()\n .pipe(\n map((result) => confirmResultContinue(result)),\n tap((result) => {\n if (result) {\n subscriber.next(null);\n subscriber.complete();\n }\n }),\n ),\n defer(() => {\n subscriber.next(null);\n subscriber.complete();\n\n return of(null);\n }),\n );\n }),\n takeUntil(this.destroy$),\n )\n .subscribe();\n }\n }\n \n private _registerConfirmDialogBackdropEscape(): void {\n if(this._dialogRef) {\n this._dialogBackdropEscape = !this._dialogRef?.disableClose;\n\n if (this._dialogBackdropEscape) {\n this._dialogRef.backdropClick()\n .pipe(\n takeUntil(this.destroy$),\n )\n .subscribe(() => {\n this._formClose();\n });\n\n this.destroy$\n .subscribe(() => {\n this._dialogRef.disableClose = false;\n });\n }\n }\n }\n\n private _registerAutocomplete(): void {\n this._registerControl = this.ngForm.form.registerControl.bind(this.ngForm.form);\n\n this.ngForm.form.registerControl = (name: string, control: AbstractControl) => {\n\n const el: Element = this._element.nativeElement.querySelector(`input[name='${name}']`);\n\n if (el) {\n if (!el.getAttribute('autocomplete')) {\n el.setAttribute('autocomplete', 'none');\n el.setAttribute('name', `${name}-${guid()}`);\n }\n }\n\n return this._registerControl(name, control);\n };\n }\n\n private _registerDirtySubmitButton(): void {\n if (!this.ngForm) {\n return;\n }\n\n this.ngForm.form.valueChanges\n .pipe(\n takeUntil(this.destroy$),\n )\n .subscribe(() => {\n this._updateDirtySubmitButtons();\n });\n\n this._getFormGroup()\n .buttons.changes\n .pipe(\n takeUntil(this.destroy$),\n )\n .subscribe(() => {\n this._updateDirtySubmitButtons();\n });\n }\n\n private _updateDirtySubmitButtons(): void {\n this._getFormGroup()\n .buttons\n .filter((button) => button.submit)\n .forEach((submitButton: FsButtonDirective) => {\n if (\n !this.confirm || !this.dirtySubmitButton || this.ngForm.dirty || !submitButton.dirtySubmit\n ) {\n submitButton.enable();\n } else {\n submitButton.disable();\n }\n });\n }\n\n private _statusSubmitting(): void {\n this._status$.next(FormStatus.Submitting);\n }\n\n private _statusValidating(): void {\n this._status$.next(FormStatus.Validating);\n }\n\n private _setupActiveSubmitButton(): void {\n this._getFormGroup()\n .activeSubmitButton = this._getActiveSubmitButton();\n this._resetButtons();\n\n if (this._getFormGroup().activeSubmitButton) {\n this._getFormGroup().activeSubmitButton.process();\n }\n }\n\n private _disableButtons(): void {\n this._getFormGroup()\n .buttons.forEach((button) => {\n button.disable();\n });\n }\n\n private _waitUntilStatusPending(): Observable<string> {\n return this.ngForm.statusChanges\n .pipe(\n startWith(this.ngForm.status),\n first((state) => state !== 'PENDING'),\n );\n }\n\n private _handleError(e: SubmittedEvent) {\n console.log('%c Form Submit ', 'color: white; background-color: #D33F49', 'Error occured');\n console.group('Error Details:');\n console.log('Message: ', e);\n console.log('FormRef: ', this);\n\n if (this.ngForm.invalid) {\n const errors = getFormErrors(this.ngForm.control, null);\n console.log('Validation Errors: ', errors);\n }\n\n console.groupEnd();\n this._completeSubmit(false, null);\n }\n\n private _registerCanDeactivateGuard(): void {\n this._activatedRouteConfig = getActiveRoute(this._route).routeConfig;\n\n if (!this._activatedRouteConfig) {\n return;\n }\n\n this._form.registerFormDirective(this._activatedRouteConfig.component, this);\n\n if (!Array.isArray(this._activatedRouteConfig.canDeactivate)) {\n this._activatedRouteConfig.canDeactivate = [];\n }\n\n if (this._activatedRouteConfig.canDeactivate.indexOf(FormDeactivateGuard) === -1) {\n this._activatedRouteConfig.canDeactivate.push(FormDeactivateGuard);\n }\n }\n\n private _cleanupCanDeactivate(): void {\n if (!this._activatedRouteConfig) {\n return;\n }\n\n const guardIndex = this._activatedRouteConfig.canDeactivate.indexOf(FormDeactivateGuard);\n this._activatedRouteConfig.canDeactivate.splice(guardIndex, 1);\n\n this._form.removeFormDirective(this._activatedRouteConfig.component);\n }\n\n}\n","import { Directive, HostBinding, HostListener, Input, OnDestroy, Optional } from '@angular/core';\n\nimport { MatDialogRef } from '@angular/material/dialog';\n\nimport { Subject } from 'rxjs';\nimport { filter, takeUntil } from 'rxjs/operators';\n\nimport { ConfirmResult } from '../enums/confirm-result';\n\nimport { FsFormDirective } from './form';\n\n\n@Directive({\n selector: '[fsFormDialogClose],[fs-form-dialog-close]',\n})\nexport class FsFormDialogCloseDirective implements OnDestroy {\n\n @Input() public closeData;\n\n @HostBinding('attr.type') public type = 'button';\n\n private _destroy$ = new Subject();\n \n constructor(\n @Optional() private _form: FsFormDirective,\n @Optional() private _dialogRef: MatDialogRef<any>,\n ) {\n }\n\n @HostListener('click', ['$event.target'])\n public closeClick(): void {\n if(this._form) {\n this._form.triggerConfirm()\n .pipe(\n filter((confirmResult: ConfirmResult) => (confirmResult !== ConfirmResult.Review)),\n takeUntil(this._destroy$),\n )\n .subscribe(() => {\n this._dialogRef.close(this.closeData);\n });\n } else {\n this._dialogRef.close(this.closeData);\n }\n }\n \n public ngOnDestroy(): void {\n this._destroy$.next(null);\n this._destroy$.complete();\n }\n}\n","import {\n ChangeDetectorRef, Directive, ElementRef,\n HostBinding, inject, Input, OnDestroy, OnInit,\n} from '@angular/core';\n\nimport { MatButton } from '@angular/material/button';\n\nimport { fromEvent, Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport { FsFormDirective } from './form';\nimport { FsFormBaseDirective } from './form-base';\nimport { FsFormGroupDirective } from './form-group';\n\n\n@Directive({\n selector: '[mat-raised-button],[mat-button],[mat-flat-button],[mat-stroked-button]',\n})\nexport class FsButtonDirective implements OnInit, OnDestroy {\n\n @Input()\n public name;\n\n @Input()\n public dirtySubmit = true;\n\n @HostBinding('style.transition')\n public transitionStyle = null;\n\n public submit = false;\n\n private _previousDisabled = false;\n private _destroy$ = new Subject();\n\n private _formGroup = inject(FsFormGroupDirective, { optional: true });\n private _form = inject(FsFormDirective, { optional: true });\n private _matButton = inject(MatButton, { optional: true, host: true });\n private _elementRef = inject(ElementRef);\n private _cdRef = inject(ChangeDetectorRef);\n private _formBase: FsFormBaseDirective;\n\n public ngOnInit() {\n this.submit = this._elementRef.nativeElement.getAttribute('type') === 'submit';\n this._formBase = this._form || this._formGroup;\n\n if (this._formBase) {\n this._formBase.addButton(this);\n\n if(this.submit) {\n fromEvent(this.element, 'click')\n .pipe(\n takeUntil(this._destroy$),\n )\n .subscribe(() => {\n this._formBase.activeSubmitButton = this;\n this._formBase.triggerSubmit();\n });\n\n this.transitionStyle = 'none';\n setTimeout(() => {\n this.transitionStyle = null;\n }, 500);\n }\n }\n }\n\n public disable() { \n if (this._matButton && !this._formBase.activeSubmitButton) {\n this._previousDisabled = this._matButton.disabled;\n this._matButton.disabled = true;\n this._matButton.disableRipple = true;\n this._cdRef.markForCheck(); \n }\n }\n\n public enable() {\n if (this._matButton) {\n this._matButton.disabled = false;\n this._matButton.disableRipple = true;\n this._cdRef.markForCheck();\n }\n }\n\n public process() {\n this.setClass('process');\n if (this._matButton) {\n this._matButton.disableRipple = true;\n }\n }\n\n public success() {\n this.setClass('success');\n if (this._matButton) {\n this._matButton.disableRipple = false;\n }\n }\n\n public error() {\n this.setClass('error');\n if (this._matButton) {\n this._matButton.disableRipple = false;\n }\n }\n\n public setClass(cls) {\n const svg = this._getSvg(cls);\n this._resetClass();\n this.element.classList.add(`fs-form-submit-button-${cls}`);\n this.element.append(svg);\n }\n\n public get element() {\n return this._elementRef.nativeElement;\n }\n\n public reset() {\n if(!this._previousDisabled) {\n this.enable();\n }\n\n this.element.querySelectorAll('.svg-icon')\n .forEach((el) => {\n el.remove();\n });\n\n if (this._matButton) {\n this._matButton.disableRipple = false;\n }\n this._resetClass();\n }\n\n public ngOnDestroy(): void {\n this._destroy$.next(null);\n this._destroy$.complete();\n this._formBase?.removeButton(this);\n }\n\n private _resetClass() {\n this.element.classList\n .remove(\n 'fs-form-submit-button-success', \n 'fs-form-submit-button-error', \n 'fs-form-submit-button-process',\n );\n }\n\n private _getSvg(type) {\n if (type === 'success') {\n return new DOMParser().parseFromString(`<svg class=\"svg-icon svg-icon-success\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" version=\"1.1\" x=\"0px\" y=\"0px\" viewBox=\"0 0 38 38\" style=\"enable-background:new 0 0 38 38;\" xml:space=\"preserve\" width=\"38px\" height=\"38px\">\n <g>\n <g class=\"check\">\n <g>\n <path d=\"M29.6,11.9c-0.5-0.5-1.3-0.5-1.8,0L16.3,23.4l-6.1-6.1c-0.5-0.5-1.3-0.5-1.8,0s-0.5,1.3,0,1.8l7,7c0.3,0.3,0.6,0.4,0.9,0.4s0.7-0.1,0.9-0.4l12.4-12.4C30.1,13.2,30.1,12.4,29.6,11.9z\"/>\n </g>\n </g>\n </g>\n </svg>`, 'text/xml').firstChild;\n }\n\n if (type === 'process') {\n return new DOMParser().parseFromString(`<svg class=\"svg-icon svg-icon-process\" width=\"38\" height=\"38\" viewBox=\"0 0 38 38\" xmlns=\"http://www.w3.org/2000/svg\">\n <g fill=\"none\" fill-rule=\"evenodd\">\n <g transform=\"translate(1 1)\" stroke-width=\"2\"><circle stroke-opacity=\".5\" cx=\"18\" cy=\"18\" r=\"18\"/>\n <path d=\"M36 18c0-9.94-8.06-18-18-18\"><animateTransform attributeName=\"transform\" type=\"rotate\" from=\"0 18 18\" to=\"360 18 18\" dur=\".7s\" repeatCount=\"indefinite\"/></path>\n </g>\n </g>\n </svg>`, 'text/xml').firstChild;\n }\n\n if (type === 'error') {\n return new DOMParser().parseFromString('<svg class=\"svg-icon svg-icon-error\" xmlns=\"http://www.w3.org/2000/svg\" width=\"38px\" height=\"38px\" viewBox=\"0 0 16 16\"><g><path d=\"M8 1c3.9 0 7 3.1 7 7s-3.1 7-7 7-7-3.1-7-7 3.1-7 7-7zM8 0c-4.4 0-8 3.6-8 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8v0z\" data-original=\"#444444\" data-old_color=\"#444444\"/><path d=\"M12.2 10.8l-2.8-2.8 2.8-2.8-1.4-1.4-2.8 2.8-2.8-2.8-1.4 1.4 2.8 2.8-2.8 2.8 1.4 1.4 2.8-2.8 2.8 2.8z\"/></g> </svg>', 'text/xml').firstChild;\n }\n }\n}\n","import {\r\n ChangeDetectionStrategy, ChangeDetectorRef,\r\n Component, Input, OnDestroy, OnInit, Optional,\r\n} from '@angular/core';\r\n\r\n\r\nimport { Subject } from 'rxjs';\r\nimport { delay, filter, takeUntil } from 'rxjs/operators';\r\n\r\nimport { FsFormDirective } from '../../directives/form/form.directive';\r\n\r\n\r\n@Component({\r\n selector: 'fs-form-dialog-actions',\r\n templateUrl: './form-dialog-actions.component.html',\r\n styleUrls: ['./form-dialog-actions.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class FsFormDialogActionsComponent implements OnInit, OnDestroy {\r\n\r\n @Input() public save = true;\r\n @Input() public create = false;\r\n @Input() public close = false;\r\n @Input() public done = false;\r\n @Input() public closeData = null;\r\n @Input() public name: string;\r\n\r\n public dirty = false;\r\n\r\n private _destroy$ = new Subject<void>();\r\n \r\n constructor(\r\n @Optional() private _form: FsFormDirective,\r\n private _cdRef: ChangeDetectorRef, \r\n ) {}\r\n\r\n public ngOnInit(): void {\r\n if(this._form) {\r\n this._form.ngForm.valueChanges\r\n .pipe( \r\n filter(() => (!this.dirty)),\r\n takeUntil(this._destroy$),\r\n )\r\n .subscribe(() => {\r\n this.dirty = this._form.ngForm.dirty;\r\n this._cdRef.markForCheck();\r\n });\r\n\r\n this._form.submitted\r\n .pipe(\r\n delay(50),\r\n takeUntil(this._destroy$),\r\n )\r\n .subscribe(() => {\r\n this.dirty = false;\r\n this._cdRef.markForCheck();\r\n });\r\n\r\n this._form.reseted\r\n .pipe(\r\n takeUntil(this._destroy$),\r\n )\r\n .subscribe(() => {\r\n this.dirty = false;\r\n this._cdRef.markForCheck();\r\n });\r\n }\r\n }\r\n\r\n public ngOnDestroy(): void {\r\n this._destroy$.next(null);\r\n this._destroy$.complete();\r\n }\r\n}\r\n","<div\n class=\"form-buttons\"\n [ngClass]=\"{ 'save-create': save || create }\">\n <ng-container *ngIf=\"save || create\">\n <button\n mat-button\n type=\"submit\"\n color=\"primary\"\n [name]=\"name\">\n {{ create ? 'Create' : 'Save' }}\n </button>\n <button\n mat-button\n type=\"button\"\n class=\"cancel-button\"\n [disabled]=\"close && !dirty && !create\"\n [mat-dialog-close]=\"null\">\n Cancel\n </button>\n </ng-container>\n <ng-container *ngIf=\"done\">\n <button\n mat-button\n type=\"button\"\n color=\"primary\"\n [mat-dialog-close]=\"null\">\n Done\n </button>\n </ng-container>\n <ng-container *ngIf=\"save || create\">\n <ng-template [ngTemplateOutlet]=\"content\"></ng-template>\n </ng-container>\n <ng-container *ngIf=\"close\">\n <button\n mat-button\n type=\"button\"\n class=\"close-button\"\n fsFormDialogClose\n [closeData]=\"closeData\"\n [color]=\"dirty ? 'basic' : 'primary'\">\n Close\n </button>\n </ng-container>\n <ng-container *ngIf=\"!(save || create)\">\n <ng-template [ngTemplateOutlet]=\"content\"></ng-template>\n </ng-container>\n</div>\n<ng-template #content>\n <ng-content></ng-content>\n</ng-template>","export const ERROR_MESSAGES = {\n required: 'This field is required',\n email: 'This is not a valid email address',\n emails: 'Input valid email addresses, comma separated',\n phone: 'Invalid phone number',\n numeric: 'Value should be numeric',\n integer: 'Value should be an integer',\n min: 'Value should not be less than $(1)',\n max: 'Value should not be greater than $(1)',\n minlength: 'Should not be shorter than $(1) characters',\n maxlength: 'Should not be longer than $(1) characters',\n compare: 'Inputs do not match',\n pattern: 'Value should match pattern $(1)',\n dateRange: 'Invalid date range',\n url: 'This is not a valid url',\n urlProtocol: 'Invalid URL. Proper http protocol is required. eg. https://google.com',\n greater: 'Value must be greater than $(1)',\n lesser: 'Value must be less than $(1)',\n greaterEqual: 'Value must be greater than or equal $(1)',\n lesserEqual: 'Value must be less than or equal $(1)',\n};\n","import { InjectionToken } from '@angular/core';\nimport { ERROR_MESSAGES } from '../consts/error-messages.const';\n\nexport const VALIDATE_MESSAGES = new InjectionToken<Record<string, string>>(\n 'fs.form.validate-messages',\n);\n\nexport const VALIDATE_MESSAGE_PROVIDER = {\n provide: VALIDATE_MESSAGES,\n useFactory: messageProviderFactory,\n};\n\nexport function messageProviderFactory() {\n return { ...ERROR_MESSAGES };\n}\n\n","import {\n AfterContentInit,\n Directive,\n ElementRef,\n Inject,\n Injector,\n Input,\n OnDestroy,\n OnInit,\n Optional,\n Renderer2,\n Self,\n} from '@angular/core';\nimport { AbstractControl, NgControl, ValidationErrors } from '@angular/forms';\n\nimport { Observable, Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport { keys, values } from 'lodash-es';\n\nimport {\n VALIDATE_MESSAGE_PROVIDER,\n VALIDATE_MESSAGES,\n} from '../../providers/validate-messages.provider';\nimport { FsFormDirective } from '../form/form.directive';\n\n\nexport interface FsControlDirective {\n validate?(control: AbstractControl): ValidationErrors | null;\n validateAsync?(control: AbstractControl): Promise<ValidationErrors | null> | Observable<ValidationErrors | null>;\n}\n\n\n@Directive({\n selector: '[fsFormControl]',\n providers: [\n VALIDATE_MESSAGE_PROVIDER,\n ],\n})\nexport class FsControlDirective implements OnInit, AfterContentInit, OnDestroy {\n\n @Input() public wrapperSelector: string | false;\n @Input() public messageSelector: string | false;\n @Input() public hintSelector: string | false;\n @Input() public labelSelector: string | false;\n @Input() public appendMessageClass = 'fs-form-message';\n @Input() public appendLabelClass = 'fs-form-label';\n @Input() public appendErrorClass = 'fs-form-error';\n @Input() public appendHintClass = 'fs-form-hint';\n\n @Input()\n public set validateMessages(messages: Record<string, string>) {\n this._validateMessages = {\n ...this._validateMessages,\n ...messages,\n };\n }\n\n public errors = [];\n\n protected _control: AbstractControl;\n\n private _destroy$ = new Subject();\n\n constructor(\n protected _elementRef: ElementRef,\n protected _renderer2: Renderer2,\n protected _injector: Injector,\n @Self() @Inject(VALIDATE_MESSAGES) protected _validateMessages,\n @Optional() protected _ngControl: NgControl,\n @Optional() @Inject(FsFormDirective) protected _formDirective: FsFormDirective,\n ) {\n\n if (_ngControl) {\n this._control = _ngControl.control;\n } else {\n console.error('The element does not have a valid ngModel', this._elementRef.nativeElement);\n }\n }\n\n public ngOnInit() {\n this._setupValidators();\n }\n\n public ngOnDestroy() {\n this._destroy$.next(null);\n this._destroy$.complete();\n }\n\n public ngAfterContentInit() {\n this._subscribeToStatusChagnes();\n }\n\n public getMessageSelector(): string {\n if (this.messageSelector === false) {\n return '';\n }\n\n if (this.messageSelector) {\n return this.messageSelector;\n\n } else if (this._formDirective?.messageSelector) {\n return this._formDirective.messageSelector;\n }\n }\n\n public getHintWrapperSelector(): string {\n if (this.hintSelector === false) {\n return '';\n }\n\n if (this.hintSelector) {\n return this.hintSelector;\n\n } else if (this._formDirective?.hintSelector) {\n return this._formDirective.hintSelector;\n }\n }\n\n public getWrapperSelector(): string {\n if (this.wrapperSelector === false) {\n return '';\n }\n\n if (this.wrapperSelector) {\n return this.wrapperSelector;\n\n } else if (this._formDirective?.wrapperSelector) {\n return this._formDirective.wrapperSelector;\n }\n }\n\n public getlabelSelector(): string {\n\n if (this.labelSelector === false) {\n return '';\n }\n\n if (this.labelSelector) {\n return this.labelSelector;\n\n } else if (this._formDirective?.labelSelector) {\n return this._formDirective.labelSelector;\n }\n }\n\n public getWrapperElement() {\n const wrapper = this._getWrapper(this._elementRef.nativeElement);\n\n if (wrapper) {\n return wrapper;\n }\n\n return this._elementRef.nativeElement;\n }\n\n /*\n <mat-form-field class=\"mat-form-field\"> <-- Field Wrapper Class. Look for parents from the native element with the matching wrapperSelector. If not found defaults to native element.\n <input>\n <div class=\"fs-form-message\"> <-- Message Selector. Look for the element with class .fs-form-message or messageSelector\n <div class=\"fs-form-message\"></div>\n <div class=\"fs-form-hint\"></div> <-- Hint Selector. Look for the element with class .fs-form-hint or hintSelector\n </div>\n </mat-form-field>\n */\n\n private get _shouldErrorBeRendered() {\n return this._ngControl.invalid\n && (this._ngControl.dirty || this._formDirective?.ngForm?.submitted);\n }\n\n public render() {\n if (this._ngControl) {\n const renderer = this._renderer2;\n const wrapper = this.getWrapperElement();\n const error = this._ngControl.dirty ? this._getError(this._ngControl) : null;\n\n if (this._shouldErrorBeRendered && error) {\n wrapper.classList.add('ng-invalid', 'ng-dirty');\n } else {\n wrapper.classList.remove('ng-invalid');\n }\n\n if (!this.getMessageSelector()) {\n return;\n }\n\n const messageWrapper = wrapper.querySelector(this.getMessageSelector());\n \n if (!messageWrapper) {\n return console\n .warn(`Failed to locate ${ this.getMessageSelector()}`, this._elementRef.nativeElement);\n }\n\n if (this.appendMessageClass) {\n renderer.addClass(messageWrapper, this.appendMessageClass);\n }\n\n this._renderHint(error, messageWrapper);\n this._renderError(wrapper, messageWrapper, error);\n }\n }\n\n protected _renderHint(error, messageWrapper) {\n if (this.getHintWrapperSelector()) {\n const hints = messageWrapper.querySelectorAll('.mat-mdc-form-field-hint');\n\n hints.forEach((hint) => {\n this._renderer2.setStyle(hint, 'display', error ? 'none' : 'block');\n\n if (this.appendHintClass) {\n this._renderer2.addClass(hint, this.appendHintClass);\n }\n });\n }\n }\n\n protected _renderError(wrapper, messageWrapper, error) {\n let errorWrapper = wrapper.querySelector('.fs-form-error-target');\n if (errorWrapper) {\n errorWrapper.remove();\n }\n\n if (!this._shouldErrorBeRendered || !error) {\n return;\n }\n\n errorWrapper = this._renderer2.createElement('div');\n this._renderer2.addClass(errorWrapper, 'fs-form-error-target');\n this._renderer2.addClass(errorWrapper, this.appendErrorClass);\n this._renderer2.addClass(errorWrapper, `${this.appendErrorClass }-${ error.name}`);\n\n const errorText = this._renderer2.createText(error.message);\n\n this._renderer2.appendChild(errorWrapper, errorText);\n \n const hintWrapper = messageWrapper.querySelector(this.getHintWrapperSelector());\n hintWrapper?.prepend(errorWrapper);\n }\n\n protected _subscribeToStatusChagnes():void {\n if (this._control) {\n this._control.statusChanges\n .pipe(\n takeUntil(this._destroy$),\n )\n .subscribe(this.render.bind(this));\n }\n }\n\n protected _getWrapper(node, count = 0) {\n if (!node || count > 10) {\n return null;\n }\n\n if (node.parentNode && node.parentNode.querySelector(this.getWrapperSelector())) {\n return node;\n }\n\n return this._getWrapper(node.parentNode, ++count);\n }\n\n protected _parseErrorMessage(message, args): string {\n values(args)\n .forEach((name) => {\n message = message.replace(/\\$\\(\\d\\)/, name);\n });\n\n return message;\n }\n\n protected _getError(controlRef): { name: string, message: string } {\n\n const name = keys(controlRef.control.errors)[0];\n\n if (!name) {\n return null;\n }\n\n let message = controlRef.control.errors[name];\n\n if (this._validateMessages[name]) {\n message = this._parseErrorMessage(this._validateMessages[name], message);\n }\n\n return { name: name, message: message };\n }\n\n private _setupValidators(): void {\n const control = this._control;\n\n if (this.validate) {\n const validators = control.validator\n ? [control.validator, this.validate.bind(this)]\n : this.validate.bind(this);\n\n control.setValidators(validators);\n }\n\n if (this.validateAsync) {\n const asyncValidators = control.asyncValidator\n ? [control.asyncValidator, this.validateAsync.bind(this)]\n : this.validateAsync.bind(this);\n\n control.setAsyncValidators(asyncValidators);\n }\n\n control.updateValueAndValidity();\n }\n\n}\n","import { AfterViewInit, Directive, Input, OnChanges, OnDestroy } from '@angular/core';\nimport { AbstractControl, ValidationErrors } from '@angular/forms';\n\nimport { FsValidator } from '../../interfaces/validator';\nimport { VALIDATE_MESSAGE_PROVIDER } from '../../providers/validate-messages.provider';\n\nimport { FsControlDirective } from './control.directive';\n\n\n@Directive({\n selector: '[fsFormCompare]',\n providers: [\n VALIDATE_MESSAGE_PROVIDER,\n ],\n})\nexport class FsFormCompareDirective extends FsControlDirective\n implements OnChanges, AfterViewInit, OnDestroy, FsValidator {\n\n @Input()\n public fsFormCompare;\n\n @Input('fsFormCompareMessage')\n public set validationMessage(value: string) {\n this._validateMessages.compare = value;\n }\n\n public ngOnChanges(): void {\n this._control.updateValueAndValidity();\n }\n\n public validate(control: AbstractControl): ValidationErrors | null {\n if (this.fsFormCompare.value === this._elementRef.nativeElement.value) {\n return null;\n }\n \n return { compare: true };\n \n }\n\n public ngAfterViewInit() {\n this.fsFormCompare.addEventListener('keyup', () => {\n this._control.updateValueAndValidity();\n }, false);\n }\n\n public ngOnDestroy() {\n this.fsFormCompare.removeEventListener('keyup', () => {\n this._control.updateValueAndValidity();\n }, false);\n }\n}\n","import { AbstractControl, ValidationErrors } from '@angular/forms';\n\nimport { email, isEmpty, isNumeric, phone, url } from '@firestitch/common';\n\nimport { Observable, from, isObservable, of, throwError } from 'rxjs';\nimport { catchError, mapTo, take } from 'rxjs/operators';\n\nimport { isValid } from 'date-fns';\nimport { isObject } from 'lodash-es';\n\n\nexport class FsValidators {\n\n public static email(control: AbstractControl): ValidationErrors | null {\n if (!control.value || email(control.value)) {\n return null;\n }\n\n return { email: true };\n }\n\n public static emails(control: AbstractControl): ValidationErrors | null {\n const model = control.value || '';\n\n const hasInvalidEmails = model\n .split(',')\n .some((part) => !email(part));\n\n return hasInvalidEmails ? { email: true } : null;\n }\n\n public static numeric(control: AbstractControl): ValidationErrors | null {\n if (isEmpty(control.value) || isNumeric(control.value)) {\n return null;\n }\n \n return { numeric: true };\n \n }\n\n public static integer(control: AbstractControl): ValidationErrors | null {\n if (!control.value || String(control.value) === '' || (control.value % 1 === 0)) {\n return null;\n }\n \n return { integer: true };\n \n }\n\n public static phone(control: AbstractControl): ValidationErrors | null {\n if (!control.value || phone(control.value)) {\n return null;\n }\n\n return { phone: true };\n }\n\n public static url(control: AbstractControl, protocolRequired = false): ValidationErrors | null {\n if (!control.value) {\n return null;\n }\n\n if (!url(control.value)) {\n return { url: true };\n }\n\n if (protocolRequired) {\n const pattern = new RegExp(/^http(s)?:\\/\\//gm);\n\n if (!String(control.value).match(pattern)) {\n return { urlProtocol: true };\n }\n }\n\n return null;\n }\n\n public static dateRange(control: AbstractControl): ValidationErrors | null {\n if (!control.value) {\n return null;\n }\n\n if (isObject(control.value)) {\n\n const start = control.value.start;\n const end = control.value.end;\n\n if ((!start && !end) || (isValid(start) && isValid(end))) {\n return null;\n }\n }\n\n return { dateRange: true };\n }\n\n public static func(\n control: AbstractControl, \n formFunction: (control: AbstractControl, data: any) => Observable<unknown> | Promise<unknown> | void, data: any,\n ): Observable<unknown> {\n let result: unknown;\n let stream$: Observable<unknown>;\n\n try {\n result = formFunction(control, data);\n } catch (err) {\n const error = err instanceof Error ? err.message : err;\n\n stream$ = throwError(() => error);\n }\n\n if (!stream$) {\n if (result instanceof Promise) {\n stream$ = from(result);\n } else if (isObservable(result)) {\n stream$ = result;\n } else {\n stream$ = of(null);\n }\n }\n\n return stream$\n .pipe(\n mapTo(null),\n catchError((err) => {\n return of({ validationError: err });\n }),\n take(1),\n );\n }\n}\n","export function isEnabled(value: any): boolean {\n return value !== 'false' && (value || value === '');\n}\n","import { Directive, Input, OnChanges } from '@angular/core';\nimport { AbstractControl, ValidationErrors } from '@angular/forms';\n\nimport { FsControlDirective } from './control.directive';\nimport { FsValidators } from '../../validators/validators';\nimport { VALIDATE_MESSAGE_PROVIDER } from '../../providers/validate-messages.provider';\nimport { FsValidator } from '../../interfaces/validator';\nimport { isEnabled } from '../../helpers/is-enabled';\n\n\n@Directive({\n selector: '[fsFormDateRange]',\n providers: [\n VALIDATE_MESSAGE_PROVIDER\n ],\n})\nexport class FsFormDateRangeDirective extends FsControlDirective implements OnChanges, FsValidator {\n\n @Input()\n public fsFormDateRange;\n\n @Input('fsFormDateRangeMessage')\n public set validationMessage(value: string) {\n this._validateMessages.dateRange = value;\n }\n\n public ngOnChanges() {\n this._control.updateValueAndValidity();\n }\n\n public validate(control: AbstractControl): ValidationErrors | null {\n if (isEnabled(this.fsFormDateRange)) {\n return FsValidators.dateRange(this._control);\n } else {\n return null;\n }\n }\n}\n","import { Directive, Input, OnChanges } from '@angular/core';\nimport { AbstractControl, ValidationErrors } from '@angular/forms';\n\nimport { FsControlDirective } from './control.directive';\nimport { FsValidators } from '../../validators/validators';\nimport { VALIDATE_MESSAGE_PROVIDER } from '../../providers/validate-messages.provider';\nimport { FsValidator } from '../../interfaces/validator';\nimport { isEnabled } from '../../helpers/is-enabled';\n\n\n@Directive({\n selector: '[fsFormEmail]',\n providers: [\n VALIDATE_MESSAGE_PROVIDER\n ],\n})\nexport class FsFormEmailDirective extends FsControlDirective implements OnChanges, FsValidator {\n\n @Input()\n public fsFormEmail;\n\n @Input('fsFormEmailMessage')\n public set validationMessage(value: string) {\n this._validateMessages.email = value;\n }\n\n public ngOnChanges() {\n this._control.updateValueAndValidity();\n }\n\n public validate(control: AbstractControl): ValidationErrors | null {\n if (isEnabled(this.fsFormEmail)) {\n return FsValidators.email(this._control);\n } else {\n return null;\n }\n }\n}\n","import { Directive, Input, OnChanges } from '@angular/core';\nimport { AbstractControl, ValidationErrors } from '@angular/forms';\n\nimport { FsControlDirective } from './control.directive';\nimport { FsValidators } from '../../validators/validators';\nimport { VALIDATE_MESSAGE_PROVIDER } from '../../providers/validate-messages.provider';\nimport { FsValidator } from '../../interfaces/validator';\nimport { isEnabled } from '../../helpers/is-enabled';\n\n\n@Directive({\n selector: '[fsFormEmails]',\n providers: [\n VALIDATE_MESSAGE_PROVIDER\n ],\n})\nexport class FsFormEmailsDirective extends FsControlDirective implements OnChanges, FsValidator {\n\n @Input()\n public fsFormEmails;\n\n @Input('fsFormEmailsMessage')\n public set validationMessage(value: string) {\n this._validateMessages.emails = value;\n }\n\n public ngOnChanges() {\n this._control.updateValueAndValidity();\n }\n\n public validate(control: AbstractControl): ValidationErrors | null {\n if (isEnabled(this.fsFormEmails)) {\n return FsValidators.emails(this._control);\n } else {\n return null;\n }\n }\n\n}\n","import { Directive, Input, OnChanges } from '@angular/core';\nimport { AbstractControl, ValidationErrors } from '@angular/forms';\n\nimport { Observable, of } from 'rxjs';\n\nimport { FsAsyncValidator } from '../../interfaces/async-validator';\nimport { VALIDATE_MESSAGE_PROVIDER } from '../../providers/validate-messages.provider';\nimport { FsValidators } from '../../validators/validators';\n\nimport { FsControlDirective } from './control.directive';\n\n\n@Directive({\n selector: '[fsFormFunction]',\n providers: [\n VALIDATE_MESSAGE_PROVIDER,\n ],\n})\nexport class FsFormFunctionDirective extends FsControlDirective implements OnChanges, FsAsyncValidator {\n\n @Input()\n public fsFormFunction;\n\n @Input()\n public fsFormFunctionData;\n\n @Input()\n public validateOnSubmit = false;\n\n public ngOnChanges(): void {\n this._control.updateValueAndValidity();\n }\n\n public validateAsync(control: AbstractControl): Promise<ValidationErrors | null> | Observable<ValidationErrors | null> {\n if(this.validateOnSubmit && !this._formDirective.validating) {\n return of(null);\n }\n \n return FsValidators.func(this._control, this.fsFormFunction, this.fsFormFunctionData);\n }\n\n}\n","import { Directive, Input, OnChanges } from '@angular/core';\nimport { AbstractControl, ValidationErrors } from '@angular/forms';\n\nimport { FsControlDirective } from './control.directive';\nimport { FsValidators } from '../../validators/validators';\nimport { VALIDATE_MESSAGE_PROVIDER } from '../../providers/validate-messages.provider';\nimport { FsValidator } from '../../interfaces/validator';\n\n\n@Directive({\n selector: '[fsFormGreaterEqual]',\n providers: [\n VALIDATE_MESSAGE_PROVIDER\n ],\n})\nexport class FsFormGreaterEqualDirective extends FsControlDirective implements OnChanges, FsValidator {\n\n @Input()\n public fsFormGreaterEqual;\n\n @Input('fsFormGreaterEqualMessage')\n public set validationMessage(value: string) {\n this._validateMessages.greater = value;\n }\n\n public ngOnChanges(): void {\n this._control.updateValueAndValidity();\n }\n\n public validate(control: AbstractControl): ValidationErrors | null {\n const greater = parseFloat(this.fsFormGreaterEqual);\n const value = parseFloat(this._control.value);\n\n if (!isNaN(greater) && !isNaN(value) && value < greater) {\n return { greaterEqual: { greater, actual: value } };\n }\n\n return FsValidators.numeric(this._control);\n }\n\n}\n","import { Directive, Input, OnChanges } from '@angular/core';\nimport { AbstractControl, ValidationErrors } from '@angular/forms';\n\nimport { FsControlDirective } from './control.directive';\nimport { FsValidators } from '../../validators/validators';\nimport { VALIDATE_MESSAGE_PROVIDER } from '../../providers/validate-messages.provider';\nimport { FsValidator } from '../../interfaces/validator';\n\n\n@Directive({\n selector: '[fsFormGreater]',\n providers: [\n VALIDATE_MESSAGE_PROVIDER\n ],\n})\nexport class FsFormGreaterDirective extends FsControlDirective implements OnChanges, FsValidator {\n\n @Input()\n public fsFormGreater;\n\n @Input('fsFormGreaterMessage')\n public set validationMessage(value: string) {\n this._validateMessages.greater = value;\n }\n\n public ngOnChanges(): void {\n this._control.updateValueAndValidity();\n }\n\n public validate(control: AbstractControl): ValidationErrors | null {\n const greater = parseFloat(this.fsFormGreater);\n const value = parseFloat(this._control.value);\n\n if (!isNaN(greater) && !isNaN(value) && value <= greater) {\n return { greater: { greater, actual: value } };\n }\n\n return FsValidators.numeric(this._control);\n }\n\n}\n","import { Directive, Input, OnChanges } from '@angular/core';\nimport { AbstractControl, ValidationErrors } from '@angular/forms';\n\nimport { isEnabled } from '../../helpers/is-enabled';\nimport { FsValidator } from '../../interfaces/validator';\nimport { VALIDATE_MESSAGE_PROVIDER } from '../../providers/validate-messages.provider';\nimport { FsValidators } from '../../validators/validators';\n\nimport { FsControlDirective } from './control.directive';\n\n\n@Directive({\n selector: '[fsFormInteger]',\n providers: [\n VALIDATE_MESSAGE_PROVIDER,\n ],\n})\nexport class FsFormIntegerDirective extends FsControlDirective implements OnChanges, FsValidator {\n\n @Input()\n public fsFormInteger;\n\n @Input('fsFormIntegerMessage')\n public set validationMessage(value: string) {\n this._validateMessages.integer = value;\n }\n\n public ngOnChanges() {\n this._control.updateValueAndValidity();\n }\n\n public validate(control: AbstractControl): ValidationErrors | null {\n if (isEnabled(this.fsFormInteger)) {\n return FsValidators.integer(this._control);\n }\n \n return null;\n \n }\n\n}\n","import { Directive, Input, OnChanges } from '@angular/core';\nimport { AbstractControl, ValidationErrors } from '@angular/forms';\n\nimport { FsControlDirective } from './control.directive';\nimport { FsValidators } from '../../validators/validators';\nimport { VALIDATE_MESSAGE_PROVIDER } from '../../providers/validate-messages.provider';\nimport { FsValidator } from '../../interfaces/validator';\n\n\n@Directive({\n selector: '[fsFormLesserEqual]',\n providers: [\n VALIDATE_MESSAGE_PROVIDER\n ],\n})\nexport class FsFormLesserEqualDirective extends FsControlDirective implements OnChanges, FsValidator {\n\n @Input()\n public fsFormLesserEqual;\n\n @Input('fsFormLesserEqualMessage')\n public set validationMessage(value: string) {\n this._validateMessages.lesser = value;\n }\n\n public ngOnChanges(): void {\n this._control.updateValueAndValidity();\n }\n\n public validate(control: AbstractControl): ValidationErrors | null {\n const lesser = parseFloat(this.fsFormLesserEqual);\n const value = parseFloat(this._control.value);\n\n if (!isNaN(lesser) && !isNaN(value) && value > lesser) {\n return { lesserEqual: { lesser, actual: value } };\n }\n\n return FsValidators.numeric(this._control);\n }\n\n}\n","import { Directive, Input, OnChanges } from '@angular/core';\nimport { AbstractControl, ValidationErrors } from '@angular/forms';\n\nimport { FsControlDirective } from './control.directive';\nimport { FsValidators } from '../../validators/validators';\nimport { VALIDATE_MESSAGE_PROVIDER } from '../../providers/validate-messages.provider';\nimport { FsValidator } from '../../interfaces/validator';\n\n\n@Directive({\n selector: '[fsFormLesser]',\n providers: [\n VALIDATE_MESSAGE_PROVIDER\n ],\n})\nexport class FsFormLesserDirective extends FsControlDirective implements OnChanges, FsValidator {\n\n @Input()\n public fsFormLesser;\n\n @Input('fsFormLesserMessage')\n public set validationMessage(value: string) {\n this._validateMessages.lesser = value;\n }\n\n public ngOnChanges(): void {\n this._control.updateValueAndValidity();\n }\n\n public validate(control: AbstractControl): ValidationErrors | null {\n const lesser = parseFloat(this.fsFormLesser);\n const value = parseFloat(this._control.value);\n\n if (!isNaN(lesser) && !isNaN(value) && value >= lesser) {\n return { lesser: { lesser, actual: value } };\n }\n\n return FsValidators.numeric(this._control);\n }\n\n}\n","import { Directive, Input, OnChanges } from '@angular/core';\nimport { AbstractControl, ValidationErrors, Validators } from '@angular/forms';\nimport { FsControlDirective } from './control.directive';\nimport { FsValidators } from '../../validators/validators';\nimport { VALIDATE_MESSAGE_PROVIDER } from '../../providers/validate-messages.provider';\nimport { FsValidator } from '../../interfaces/validator';\n\n\n@Directive({\n selector: '[fsFormMax]',\n providers: [\n VALIDATE_MESSAGE_PROVIDER\n ],\n})\nexport class FsFormMaxDirective extends FsControlDirective implements OnChanges, FsValidator {\n\n @Input()\n public fsFormMax: number;\n\n @Input('fsFormMaxMessage')\n public set validationMessage(value: string) {\n this._validateMessages.max = value;\n }\n\n public ngOnChanges(): void {\n this._control.updateValueAndValidity();\n }\n\n public validate(control: AbstractControl): ValidationErrors | null {\n return FsValidators.numeric(this._control) || Validators.max(this.fsFormMax)(this._control);\n }\n\n}\n","import { Directive, Input, OnChanges } from '@angular/core';\nimport { AbstractControl, ValidationErrors, Validators } from '@angular/forms';\n\nimport { FsControlDirective } from './control.directive';\nimport { VALIDATE_MESSAGE_PROVIDER } from '../../providers/validate-messages.provider';\nimport { FsValidator } from '../../interfaces/validator';\n\n\n@Directive({\n selector: '[fsFormMaxLength]',\n providers: [\n VALIDATE_MESSAGE_PROVIDER\n ],\n})\nexport class FsFormMaxLengthDirective extends FsControlDirective implements OnChanges, FsValidator {\n\n @Input()\n public fsFormMaxLength: number;\n\n @Input('fsFormMaxLengthMessage')\n public set validationMessage(value: string) {\n this._validateMessages.maxlength = value;\n }\n\n public ngOnChanges(): void {\n this._control.updateValueAndValidity();\n }\n\n public validate(control: AbstractControl): ValidationErrors | null {\n return Validators.maxLength(this.fsFormMaxLength)(this._control);\n }\n\n}\n","import { Directive, Input, OnChanges } from '@angular/core';\nimport { AbstractControl, ValidationErrors, Validators } from '@angular/forms';\n\nimport { FsControlDirective } from './control.directive';\nimport { FsValidators } from '../../validators/validators';\nimport { VALIDATE_MESSAGE_PROVIDER } from '../../providers/validate-messages.provider';\nimport { FsValidator } from '../../interfaces/validator';\n\n\n@Directive({\n selector: '[fsFormMin]',\n providers: [\n VALIDATE_MESSAGE_PROVIDER\n ],\n})\nexport class FsFormMinDirective extends FsControlDirective implements OnChanges, FsValidator {\n\n @Input()\n public fsFormMin;\n\n @Input('fsFormMinMessage')\n public set validationMessage(value: string) {\n this._validateMessages.min = value;\n }\n\n public ngOnChanges(): void {\n this._control.updateValueAndValidity();\n }\n\n public validate(control: AbstractControl): ValidationErrors | null {\n return FsValidators.numeric(this._control) || Validators.min(parseFloat(this.fsFormMin))(this._control);\n }\n\n}\n","import { Directive, Input, OnChanges } from '@angular/core';\nimport { AbstractControl, ValidationErrors, Validators } from '@angular/forms';\n\nimport { FsControlDirective } from './control.directive';\nimport { VALIDATE_MESSAGE_PROVIDER } from '../../providers/validate-messages.provider';\nimport { FsValidator } from '../../interfaces/validator';\n\n\n@Directive({\n selector: '[fsFormMinLength]',\n providers: [\n VALIDATE_MESSAGE_PROVIDER\n ],\n})\nexport class FsFormMinLengthDirective extends FsControlDirective implements OnChanges, FsValidator {\n\n @Input()\n public fsFormMinLength: number;\n\n @Input('fsFormMinLengthMessage')\n public set validationMessage(value: string) {\n this._validateMessages.minlength = value;\n }\n\n public ngOnChanges(): void {\n this._control.updateValueAndValidity();\n }\n\n public validate(control: AbstractControl): ValidationErrors | null {\n return Validators.minLength(this.fsFormMinLength)(this._control);\n }\n}\n","import { Directive, OnChanges } from '@angular/core';\n\nimport { FsControlDirective } from './control.directive';\nimport { VALIDATE_MESSAGE_PROVIDER } from '../../providers/validate-messages.provider';\n\n\n/**\n * This directive required for cases when we have custom Control like <fs-phone-field> but without any of our validators applied\n *\n * This directive required for automatic validation messages\n */\n@Directive({\n selector: '[ngModel]' +\n ':not([required])' +\n ':not([fsFormRequired])' +\n ':not([fsFormCompare])' +\n ':not([fsFormDateRange])' +\n ':not([fsFormEmail])' +\n ':not([fsFormEmails])' +\n ':not([fsFormFunction])' +\n ':not([fsFormGreater])' +\n ':not([fsFormGreaterEqual])' +\n ':not([fsFormInteger])' +\n ':not([fsFormLesser])' +\n ':not([fsFormMax])' +\n ':not([fsFormMaxLength])' +\n ':not([fsFormMin])' +\n ':not([fsFormMinLength])' +\n ':not([fsFormNumeric])' +\n ':not([fsFormPattern])' +\n ':not([fsFormPhone])' +\n ':not([fsFormUrl])' +\n ':not([validate])',\n providers: [\n VALIDATE_MESSAGE_PROVIDER\n ],\n})\nexport class FsFormNoFsValidatorsDirective extends FsControlDirective implements OnChanges {\n\n public ngOnChanges(): void {\n this._control.updateValueAndValidity();\n }\n\n protected _subscribeToStatusChagnes(): void {\n if (!!this._control.validator || !!this._control.asyncValidator) {\n super._subscribeToStatusChagnes();\n }\n }\n\n}\n","import { Directive, Input, OnChanges } from '@angular/core';\nimport { AbstractControl, ValidationErrors } from '@angular/forms';\n\nimport { FsControlDirective } from './control.directive';\nimport { FsValidators } from '../../validators/validators';\nimport { VALIDATE_MESSAGE_PROVIDER } from '../../providers/validate-messages.provider';\nimport { FsValidator } from '../../interfaces/validator';\nimport { isEnabled } from '../../helpers/is-enabled';\n\n\n@Directive({\n selector: '[fsFormNumeric]',\n providers: [\n VALIDATE_MESSAGE_PROVIDER\n ],\n})\nexport class FsFormNumericDirective extends FsControlDirective implements OnChanges, FsValidator {\n\n @Input()\n public fsFormNumeric;\n\n @Input('fsFormNumericMessage')\n public set validationMessage(value: string) {\n this._validateMessages.numeric = value;\n }\n\n public ngOnChanges(): void {\n this._control.updateValueAndValidity();\n }\n\n public validate(control: AbstractControl): ValidationErrors | null {\n if (isEnabled(this.fsFormNumeric)) {\n return FsValidators.numeric(this._control);\n } else {\n return null;\n }\n }\n\n}\n","import { Directive, Input, OnChanges } from '@angular/core';\nimport { AbstractControl, ValidationErrors, Validators } from '@angular/forms';\nimport { FsControlDirective } from './control.directive';\nimport { VALIDATE_MESSAGE_PROVIDER } from '../../providers/validate-messages.provider';\nimport { FsValidator } from '../../interfaces/validator';\n\n\n@Directive({\n selector: '[fsFormPattern]',\n providers: [\n VALIDATE_MESSAGE_PROVIDER\n ],\n})\nexport class FsFormPatternDirective extends FsControlDirective implements OnChanges, FsValidator {\n\n @Input()\n public fsFormPattern: RegExp | string;\n\n @Input('fsFormPatternMessage')\n public set validationMessage(value: string) {\n this._validateMessages.pattern = value;\n }\n\n public ngOnChanges(): void {\n this._control.updateValueAndValidity();\n }\n\n public validate(control: AbstractControl): ValidationErrors | null {\n return Validators.pattern(this.fsFormPattern)(this._control);\n }\n\n}\n","import { Directive, Input, OnChanges } from '@angular/core';\nimport { AbstractControl, ValidationErrors } from '@angular/forms';\n\nimport { FsControlDirective } from './control.directive';\nimport { FsValidators } from '../../validators/validators';\nimport { VALIDATE_MESSAGE_PROVIDER } from '../../providers/validate-messages.provider';\nimport { FsValidator } from '../../interfaces/validator';\nimport { isEnabled } from '../../helpers/is-enabled';\n\n\n@Directive({\n selector: '[fsFormPhone]',\n providers: [\n VALIDATE_MESSAGE_PROVIDER\n ],\n})\nexport class FsFormPhoneDirective extends FsControlDirective implements OnChanges, FsValidator {\n\n @Input()\n public fsFormPhone;\n\n @Input('fsFormPhoneMessage')\n public set validationMessage(value: string) {\n this._validateMessages.phone = value;\n }\n\n public ngOnChanges() {\n this._control.updateValueAndValidity();\n }\n\n public validate(control: AbstractControl): ValidationErrors | null {\n if (isEnabled(this.fsFormPhone)) {\n return FsValidators.phone(this._control);\n } else {\n return null;\n }\n }\n\n}\n","import { Directive, Input, OnChanges } from '@angular/core';\nimport { AbstractControl, ValidationErrors, Validators } from '@angular/forms';\n\nimport { isEnabled } from '../../helpers/is-enabled';\nimport { FsValidator } from '../../interfaces/validator';\nimport { VALIDATE_MESSAGE_PROVIDER } from '../../providers/validate-messages.provider';\n\nimport { FsControlDirective } from './control.directive';\n\n\n@Directive({\n selector: '[fsFormRequired],[ngModel][required]',\n providers: [\n VALIDATE_MESSAGE_PROVIDER,\n ],\n})\nexport class FsFormRequiredDirective extends FsControlDirective implements OnChanges, FsValidator {\n public required = false;\n\n @Input('fsFormRequired')\n public set setFsFormRequired(value) {\n this.required = isEnabled(value);\n }\n\n @Input('required')\n public set setRequired(value) {\n this.required = isEnabled(value);\n }\n\n @Input('fsFormRequiredMessage')\n public set validationMessage(value: string) {\n this._validateMessages.required = value;\n }\n\n public ngOnChanges(): void {\n this._control.updateValueAndValidity();\n }\n\n public validate(control: AbstractControl): ValidationErrors | null {\n if (this.required) {\n return Validators.required(this._control);\n }\n \n return null;\n \n }\n\n public render() {\n const wrapper = this.getWrapperElement();\n\n if (wrapper && this.getlabelSelector()) {\n const labelWrapper = wrapper.querySelector(this.getlabelSelector());\n\n // Adding class fs-form-label-requried adds the * to the label\n if (labelWrapper) {\n if (this.required) {\n this._renderer2.addClass(labelWrapper, 'fs-form-label-required');\n } else {\n this._renderer2.removeClass(labelWrapper, 'fs-form-label-required');\n }\n }\n }\n\n super.render();\n }\n}\n","import { Directive, Input, OnChanges } from '@angular/core';\nimport { AbstractControl, ValidationErrors } from '@angular/forms';\n\nimport { isEnabled } from '../../helpers/is-enabled';\nimport { FsValidator } from '../../interfaces/validator';\nimport { VALIDATE_MESSAGE_PROVIDER } from '../../providers/validate-messages.provider';\nimport { FsValidators } from '../../validators/validators';\n\nimport { FsControlDirective } from './control.directive';\n\n\n@Directive({\n selector: '[fsFormUrl]',\n providers: [\n VALIDATE_MESSAGE_PROVIDER,\n ],\n})\nexport class FsFormUrlDirective extends FsControlDirective implements OnChanges, FsValidator {\n\n @Input()\n public fsFormUrl;\n\n @Input()\n public fsFormUrlProtocol = true;\n\n @Input('fsFormUrlMessage')\n public set validationMessage(value: string) {\n this._validateMessages.url = value;\n }\n\n public ngOnChanges() {\n this._control.updateValueAndValidity();\n }\n\n public validate(control: AbstractControl): ValidationErrors | null {\n if (isEnabled(this.fsFormUrl)) {\n return FsValidators.url(this._control, this.fsFormUrlProtocol);\n }\n \n return null;\n \n }\n\n}\n","import { Directive, Input, OnChanges } from '@angular/core';\nimport { AbstractControl, ValidationErrors } from '@angular/forms';\n\nimport { Observable, of } from 'rxjs';\n\nimport { FsAsyncValidator } from '../../interfaces/async-validator';\nimport { VALIDATE_MESSAGE_PROVIDER } from '../../providers/validate-messages.provider';\nimport { FsValidators } from '../../validators/validators';\n\nimport { FsControlDirective } from './control.directive';\n\n\n@Directive({\n selector: '[validate]',\n providers: [\n VALIDATE_MESSAGE_PROVIDER,\n ],\n})\nexport class FsFormValidateDirective extends FsControlDirective implements OnChanges, FsAsyncValidator {\n\n @Input('validate')\n public validateFn: (control: AbstractControl, data: any) => Observable<unknown> | Promise<unknown> | void;\n\n @Input('validateData')\n public validateFnData;\n\n @Input()\n public validateOnSubmit = false;\n\n public ngOnChanges(): void {\n this._control.updateValueAndValidity();\n }\n\n public validateAsync(control: AbstractControl): Promise<ValidationErrors | null> | Observable<ValidationErrors | null> {\n if(this.validateOnSubmit && !this._formDirective.validating) {\n return of(null);\n }\n\n return FsValidators.func(this._control, this.validateFn, this.validateFnData);\n }\n\n}\n","import { AfterContentInit, ContentChildren, Directive, inject } from '@angular/core';\nimport { NgForm, NgModel } from '@angular/forms';\n\n\n@Directive({\n selector: '[fsFormTemplate],fs-form-template',\n})\nexport class FsFormTemplateDirective implements AfterContentInit {\n\n @ContentChildren(NgModel)\n protected _projectedControls: NgModel[];\n\n protected _ngForm: NgForm = inject(NgForm);\n\n public ngAfterContentInit(): void {\n this._projectedControls.forEach((control: NgModel) => {\n this._ngForm.addControl(control);\n });\n }\n}\n","import { Directive } from '@angular/core';\n\nimport { FsButtonDirective } from './button.directive';\n\n\n@Directive({\n selector: 'dummy-selector',\n})\nexport class FsSubmitButtonDirective extends FsButtonDirective {\n}\n","import {\n TemplateRef,\n Directive,\n Input,\n ViewContainerRef,\n Injector,\n inject,\n OnInit,\n} from '@angular/core';\n\n@Directive({\n selector: '[fsFormTemplateOutlet]',\n})\nexport class FsFormTemplateOutletDirective implements OnInit {\n\n @Input()\n public template: TemplateRef<any>;\n\n @Input()\n public context: Record<string, unknown> = {};\n\n protected _viewContainerRef: ViewContainerRef = inject(ViewContainerRef)\n protected _injector: Injector = inject(Injector);\n\n public ngOnInit() {\n this._viewContainerRef.createEmbeddedView(\n this.template,\n this.context,\n {\n injector: this._injector,\n },\n )\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { ModuleWithProviders, NgModule } from '@angular/core';\nimport { FormGroupDirective, FormsModule, NgForm, UntypedFormControl } from '@angular/forms';\n\nimport { MatButtonModule } from '@angular/material/button';\nimport { ErrorStateMatcher, ShowOnDirtyErrorStateMatcher } from '@angular/material/core';\nimport { MatDialogModule } from '@angular/material/dialog';\n\nimport { FsDialogModule } from '@firestitch/dialog';\n\nimport {\n FsFormDialogActionsComponent,\n} from './components';\nimport {\n FsFormGreaterEqualDirective, FsFormLesserEqualDirective,\n FsFormTemplateDirective, FsSubmitButtonDirective,\n} from './directives';\nimport { FsButtonDirective } from './directives/button.directive';\nimport { FsFormDialogCloseDirective } from './directives/form-dialog-close.directive';\nimport { FsFormGroupDirective } from './directives/form-group/form-group.directive';\nimport { FsFormDirective } from './directives/form/form.directive';\nimport { FsFormCompareDirective } from './directives/validators/compare.directive';\nimport { FsControlDirective } from './directives/validators/control.directive';\nimport { FsFormDateRangeDirective } from './directives/validators/daterange.directive';\nimport { FsFormEmailDirective } from './directives/validators/email.directive';\nimport { FsFormEmailsDirective } from './directives/validators/emails.directive';\nimport { FsFormFunctionDirective } from './directives/validators/function.directive';\nimport { FsFormGreaterDirective } from './directives/validators/greater.directive';\nimport { FsFormIntegerDirective } from './directives/validators/integer.directive';\nimport { FsFormLesserDirective } from './directives/validators/lesser.directive';\nimport { FsFormMaxDirective } from './directives/validators/max.directive';\nimport { FsFormMaxLengthDirective } from './directives/validators/maxlength.directive';\nimport { FsFormMinDirective } from './directives/validators/min.directive';\nimport { FsFormMinLengthDirective } from './directives/validators/minlength.directive';\nimport { FsFormNoFsValidatorsDirective } from './directives/validators/no-fs-validators.directive';\nimport { FsFormNumericDirective } from './directives/validators/numeric.directive';\nimport { FsFormPatternDirective } from './directives/validators/pattern.directive';\nimport { FsFormPhoneDirective } from './directives/validators/phone.directive';\nimport { FsFormRequiredDirective } from './directives/validators/required.directive';\nimport { FsFormUrlDirective } from './directives/validators/url.directive';\nimport { FsFormValidateDirective } from './directives/validators/validate.directive';\nimport { FsFormTemplateOutletDirective } from './directives/form-template-outlet.directive';\n\n\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n\n MatButtonModule,\n MatDialogModule,\n MatDialogModule,\n\n FsDialogModule,\n ],\n declarations: [\n FsFormDirective,\n FsControlDirective,\n FsFormRequiredDirective,\n FsFormMinDirective,\n FsFormMaxDirective,\n FsFormMinLengthDirective,\n FsFormMaxLengthDirective,\n FsFormEmailDirective,\n FsFormEmailsDirective,\n FsFormPhoneDirective,\n FsFormCompareDirective,\n FsFormIntegerDirective,\n FsFormNumericDirective,\n FsFormPatternDirective,\n FsFormFunctionDirective,\n FsFormDateRangeDirective,\n FsFormGreaterDirective,\n FsFormGreaterEqualDirective,\n FsFormLesserDirective,\n FsFormLesserEqualDirective,\n FsFormUrlDirective,\n FsFormDialogCloseDirective,\n FsFormValidateDirective,\n FsFormDialogActionsComponent,\n FsFormNoFsValidatorsDirective,\n FsButtonDirective,\n FsSubmitButtonDirective,\n FsFormTemplateDirective,\n FsFormTemplateDirective,\n FsFormTemplateOutletDirective,\n FsFormGroupDirective,\n ],\n exports: [\n FsFormDirective,\n FsControlDirective,\n FsFormRequiredDirective,\n FsFormMinDirective,\n FsFormMaxDirective,\n FsFormMinLengthDirective,\n FsFormMaxLengthDirective,\n FsFormEmailDirective,\n FsFormEmailsDirective,\n FsFormPhoneDirective,\n FsFormCompareDirective,\n FsFormIntegerDirective,\n FsFormNumericDirective,\n FsFormPatternDirective,\n FsFormFunctionDirective,\n FsFormDateRangeDirective,\n FsFormGreaterDirective,\n FsFormGreaterEqualDirective,\n FsFormLesserDirective,\n FsFormLesserEqualDirective,\n FsFormUrlDirective,\n FsFormDialogCloseDirective,\n FsFormValidateDirective,\n FsFormDialogActionsComponent,\n FsFormNoFsValidatorsDirective,\n FsButtonDirective,\n FsSubmitButtonDirective,\n FsFormTemplateDirective,\n FsFormTemplateDirective,\n FsFormTemplateOutletDirective,\n FsFormGroupDirective,\n ],\n providers: [\n {\n provide: ErrorStateMatcher,\n useClass: ShowOnDirtyErrorStateMatcher,\n },\n ],\n})\nexport class FsFormModule {\n public static forRoot(): ModuleWithProviders<FsFormModule> {\n\n /**\n * Hack: https://github.com/angular/components/issues/20097\n */\n ErrorStateMatcher.prototype\n .isErrorState = (\n control: UntypedFormControl | null,\n form: FormGroupDirective | NgForm | null,\n ): boolean => {\n return control?.invalid && control?.touched && control?.dirty;\n };\n\n return {\n ngModule: FsFormModule,\n };\n }\n}\n","// Modules\nexport { FsFormModule } from './app/fs-form.module';\n\n// Services\nexport { FsForm } from './app/services/fsform.service';\n\n// Directives\nexport { FsFormGreaterDirective, FsFormGreaterEqualDirective, FsFormLesserEqualDirective, FsFormTemplateDirective } from './app/directives';\nexport { FsButtonDirective } from './app/directives/button.directive';\nexport { FsFormDialogCloseDirective } from './app/directives/form-dialog-close.directive';\nexport { FsFormGroupDirective } from './app/directives/form-group/form-group.directive';\nexport { FsFormDirective } from './app/directives/form/form.directive';\nexport { FsSubmitButtonDirective } from './app/directives/submit-button.directive';\nexport { FsFormCompareDirective } from './app/directives/validators/compare.directive';\nexport { FsControlDirective } from './app/directives/validators/control.directive';\nexport { FsFormDateRangeDirective } from './app/directives/validators/daterange.directive';\nexport { FsFormEmailDirective } from './app/directives/validators/email.directive';\nexport { FsFormEmailsDirective } from './app/directives/validators/emails.directive';\nexport { FsFormFunctionDirective } from './app/directives/validators/function.directive';\nexport { FsFormIntegerDirective } from './app/directives/validators/integer.directive';\nexport { FsFormLesserDirective } from './app/directives/validators/lesser.directive';\nexport { FsFormMaxDirective } from './app/directives/validators/max.directive';\nexport { FsFormMaxLengthDirective } from './app/directives/validators/maxlength.directive';\nexport { FsFormMinDirective } from './app/directives/validators/min.directive';\nexport { FsFormMinLengthDirective } from './app/directives/validators/minlength.directive';\nexport { FsFormNoFsValidatorsDirective } from './app/directives/validators/no-fs-validators.directive';\nexport { FsFormNumericDirective } from './app/directives/validators/numeric.directive';\nexport { FsFormPatternDirective } from './app/directives/validators/pattern.directive';\nexport { FsFormPhoneDirective } from './app/directives/validators/phone.directive';\nexport { FsFormRequiredDirective } from './app/directives/validators/required.directive';\nexport { FsFormUrlDirective } from './app/directives/validators/url.directive';\nexport { FsFormValidateDirective } from './app/directives/validators/validate.directive';\nexport { FsFormTemplateOutletDirective } from './app/directives/form-template-outlet.directive';\n\n// Components\nexport { FsFormDialogActionsComponent } from './app/components';\n\nexport { FsValidators } from './app/validators/validators';\n\nexport { FormDeactivateGuard } from './app/guards/form-deactivate.guard';\n\n// Interfaces\nexport { ConfirmConfig } from './app/interfaces/confirm-config';\nexport { SubmitEvent } from './app/interfaces/submit-event';\nexport { SubmittedEvent } from './app/interfaces/submitted-event';\n\n// Enums\nexport { ConfirmResult } from './app/enums/confirm-result';\nexport { FormStatus } from './app/enums/form-status';\n\n\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i1.FsForm","i2","i3.FsFormGroupDirective","i4","i1.FsFormDirective","i5.FsFormDialogCloseDirective","i6.FsButtonDirective","i1"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"firestitch-form.mjs","sources":["../../src/app/components/confirm-unsaved/confirm-unsaved.component.ts","../../src/app/components/confirm-unsaved/confirm-unsaved.component.html","../../src/app/enums/confirm-result.ts","../../src/app/helpers/confirm-result-continue.ts","../../src/app/helpers/get-active-route.ts","../../src/app/enums/form-status.ts","../../src/app/services/fsform.service.ts","../../src/app/guards/form-deactivate.guard.ts","../../src/app/helpers/get-form-errors.ts","../../src/app/directives/form-base/form-base.directive.ts","../../src/app/directives/form-group/form-group.directive.ts","../../src/app/directives/form/form.directive.ts","../../src/app/directives/form-dialog-close.directive.ts","../../src/app/directives/button.directive.ts","../../src/app/components/form-dialog-actions/form-dialog-actions.component.ts","../../src/app/components/form-dialog-actions/form-dialog-actions.component.html","../../src/app/consts/error-messages.const.ts","../../src/app/providers/validate-messages.provider.ts","../../src/app/directives/validators/control.directive.ts","../../src/app/directives/validators/compare.directive.ts","../../src/app/validators/validators.ts","../../src/app/helpers/is-enabled.ts","../../src/app/directives/validators/daterange.directive.ts","../../src/app/directives/validators/email.directive.ts","../../src/app/directives/validators/emails.directive.ts","../../src/app/directives/validators/function.directive.ts","../../src/app/directives/validators/greater-equal.directive.ts","../../src/app/directives/validators/greater.directive.ts","../../src/app/directives/validators/integer.directive.ts","../../src/app/directives/validators/lesser-equal.directive.ts","../../src/app/directives/validators/lesser.directive.ts","../../src/app/directives/validators/max.directive.ts","../../src/app/directives/validators/maxlength.directive.ts","../../src/app/directives/validators/min.directive.ts","../../src/app/directives/validators/minlength.directive.ts","../../src/app/directives/validators/no-fs-validators.directive.ts","../../src/app/directives/validators/numeric.directive.ts","../../src/app/directives/validators/pattern.directive.ts","../../src/app/directives/validators/phone.directive.ts","../../src/app/directives/validators/required.directive.ts","../../src/app/directives/validators/url.directive.ts","../../src/app/directives/validators/validate.directive.ts","../../src/app/directives/form-template.directive.ts","../../src/app/directives/submit-button.directive.ts","../../src/app/directives/form-template-outlet.directive.ts","../../src/app/fs-form.module.ts","../../src/public_api.ts","../../src/firestitch-form.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, Inject, OnDestroy, OnInit } from '@angular/core';\n\nimport { MatButton } from '@angular/material/button';\nimport { MAT_DIALOG_DATA, MatDialogModule, MatDialogRef } from '@angular/material/dialog';\n\nimport { FsDialogModule } from '@firestitch/dialog';\n\nimport { Subject } from 'rxjs';\n\n\n@Component({\n templateUrl: './confirm-unsaved.component.html',\n styleUrls: ['./confirm-unsaved.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [\n MatDialogModule,\n MatButton,\n\n FsDialogModule,\n ],\n})\nexport class ConfirmUnsavedComponent implements OnInit, OnDestroy {\n\n public saveLabel;\n public discardLabel;\n public cancelLabel;\n public message;\n public title;\n\n private _destroy$ = new Subject<void>();\n \n constructor(\n @Inject(MAT_DIALOG_DATA) private _data: any,\n private _dialogRef: MatDialogRef<ConfirmUnsavedComponent>,\n ) {}\n\n public ngOnInit(): void {\n this.saveLabel = this._data.saveLabel;\n this.discardLabel = this._data.discardLabel;\n this.cancelLabel = this._data.cancelLabel;\n this.message = this._data.message;\n this.title = this._data.title;\n }\n\n public save(): void {\n this._dialogRef.close('save');\n }\n\n public discard(): void {\n this._dialogRef.close('discard');\n }\n\n public cancel(): void {\n this._dialogRef.close(null);\n }\n\n public ngOnDestroy(): void {\n this._destroy$.next(null);\n this._destroy$.complete();\n }\n}\n","<fs-dialog>\n <h1 mat-dialog-title>\n {{ title }}\n </h1>\n <mat-dialog-content>\n {{ message }}\n </mat-dialog-content>\n <mat-dialog-actions>\n <button\n type=\"button\"\n color=\"primary\"\n (click)=\"save()\"\n mat-button>\n {{ saveLabel }}\n </button>\n <button\n type=\"button\"\n (click)=\"discard()\"\n mat-button>\n {{ discardLabel }}\n </button>\n <button\n type=\"button\"\n (click)=\"cancel()\"\n mat-button>\n {{ cancelLabel }}\n </button>\n </mat-dialog-actions>\n</fs-dialog>","export enum ConfirmResult {\n Save = 'save',\n Discard = 'discard',\n Review = 'review',\n Invalid = 'invalid',\n NoChanges = 'noChanges',\n}\n","import { ConfirmResult } from '../enums/confirm-result';\n\nexport function confirmResultContinue(result): boolean {\n return (\n result === ConfirmResult.Discard || \n result === ConfirmResult.Save || \n result === ConfirmResult.NoChanges\n );\n}\n","import { ActivatedRoute } from '@angular/router';\n\n\nexport function getActiveRoute(route: ActivatedRoute): ActivatedRoute {\n while (route.firstChild) {\n route = route.firstChild;\n }\n\n return route;\n}\n","export enum FormStatus {\n Valid = 'valid',\n Invalid = 'invalid',\n Validating = 'validating',\n Submitting = 'submitting',\n Submitted = 'submitted',\n Error = 'error',\n Success = 'success',\n Completing = 'completing',\n}\n","import { inject, Injectable, Type } from '@angular/core';\n\nimport { MatDialog } from '@angular/material/dialog';\n\n\nimport { Observable, of } from 'rxjs';\nimport { catchError, map, switchMap } from 'rxjs/operators';\n\nimport { ConfirmUnsavedComponent } from '../components/confirm-unsaved';\nimport type { FsFormDirective } from '../directives/form/form.directive';\nimport { ConfirmResult } from '../enums';\n\n\n@Injectable({\n providedIn: 'root',\n})\nexport class FsForm {\n\n // value is array for future possibilities of extension\n private _formDirectiveStore = new WeakMap<Type<any>, FsFormDirective[]>();\n private _dialog = inject(MatDialog);\n\n public registerFormDirective(routeComponent: Type<any>, directive: FsFormDirective) {\n const directives = this.getFormDirectives(routeComponent) || [];\n directives.push(directive);\n\n this._formDirectiveStore.set(routeComponent, directives);\n }\n\n public getFormDirectives(routeComponent): FsFormDirective[] {\n return this._formDirectiveStore.get(routeComponent);\n }\n\n public removeFormDirective(routeComponent) {\n this._formDirectiveStore.delete(routeComponent);\n }\n\n public hasChanges(form: FsFormDirective): boolean {\n return Object.keys(form.ngForm.control.controls)\n .some((key) => {\n const control = form.ngForm.control.controls[key];\n\n return control.dirty;\n });\n }\n\n public confirmUnsaved(\n form: FsFormDirective, \n ): Observable<ConfirmResult> {\n if (!form.confirm || !this.hasChanges(form)) {\n return of(ConfirmResult.NoChanges);\n }\n\n let title = 'You have unsaved changes';\n let message = 'What would you like to do with your changes?';\n let saveLabel = 'Save and continue';\n let discardLabel = 'Discard changes and continue';\n let cancelLabel = 'Review changes';\n\n if (typeof form.confirm === 'object') {\n title = form.confirm.title || title;\n message = form.confirm.message || message;\n saveLabel = form.confirm.saveLabel || saveLabel;\n discardLabel = form.confirm.discardLabel || discardLabel;\n cancelLabel = form.confirm.cancelLabel || cancelLabel;\n }\n\n return this._dialog\n .open(ConfirmUnsavedComponent, {\n data: {\n title,\n message,\n saveLabel,\n discardLabel,\n cancelLabel,\n },\n width: 'auto', \n })\n .afterClosed()\n .pipe(\n switchMap((result) => {\n if(!result) {\n return of(ConfirmResult.Review);\n }\n \n if (result === 'discard') {\n form.reset();\n\n return of(ConfirmResult.Discard); \n }\n\n if (result === 'save') {\n form.ngForm.control.markAsPristine();\n\n return form.submit$({ confirmed: true })\n .pipe(\n map((submitEvent) => {\n if(submitEvent.error) {\n return ConfirmResult.Invalid;\n }\n\n return ConfirmResult.Save;\n }),\n catchError(() => {\n return of(ConfirmResult.Invalid);\n }),\n );\n }\n }),\n );\n }\n\n}\n","import { Injectable } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\n\n\nimport { Observable, of } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\nimport { FsFormDirective } from '../directives/form/form.directive';\nimport { confirmResultContinue } from '../helpers';\nimport { getActiveRoute } from '../helpers/get-active-route';\nimport { FsForm } from '../services/fsform.service';\n\n\n@Injectable({\n providedIn: 'root',\n})\nexport class FormDeactivateGuard {\n\n constructor(\n private _form: FsForm,\n private _route: ActivatedRoute,\n ) {}\n\n public canDeactivate(): Observable<boolean> {\n const route = getActiveRoute(this._route);\n\n if (!route) {\n console.error('Can not find route for FormDeactivateGuard checks');\n\n return of(true);\n }\n\n const directives: FsFormDirective[] = this._form\n .getFormDirectives(route.routeConfig.component);\n\n if (!Array.isArray(directives) || directives.length === 0) {\n console.error('Can not find a valid FsFormDirective');\n\n return of(true);\n }\n\n return this._form.confirmUnsaved(directives[0])\n .pipe(\n map((result) => {\n return confirmResultContinue(result);\n }),\n );\n }\n\n}\n","import { AbstractControl, UntypedFormGroup, ValidationErrors } from '@angular/forms';\n\n\nexport function getFormErrors(control: AbstractControl, key: string): ValidationErrors | null {\n let errors: ValidationErrors | null = null;\n\n if (control.invalid && control.errors) {\n errors = {\n [key]: { ...control.errors },\n };\n }\n\n if (control instanceof UntypedFormGroup) {\n Object.entries(control.controls)\n .forEach(([name, childControl]) => {\n const childErrors = getFormErrors(childControl, name);\n\n if (childErrors) {\n if (!errors) {\n errors = { ...childErrors };\n } else {\n Object.assign(errors, childErrors);\n }\n }\n });\n }\n\n return errors;\n}\n","import {\n AfterContentInit,\n ChangeDetectorRef,\n ContentChildren,\n Directive,\n inject,\n Input,\n NgZone,\n OnDestroy,\n QueryList,\n} from '@angular/core';\n\nimport { MatTab, MatTabGroup, MatTabHeader } from '@angular/material/tabs';\n\nimport { Observable, of, Subject } from 'rxjs';\nimport { filter, switchMap, takeUntil, tap } from 'rxjs/operators';\n\nimport { ConfirmResult } from '../../enums';\nimport { confirmResultContinue } from '../../helpers';\nimport { ConfirmConfig, ConfirmTabGroup } from '../../interfaces';\nimport { FsButtonDirective } from '../button.directive';\n\n\n@Directive()\nexport abstract class FsFormBaseDirective implements AfterContentInit, OnDestroy {\n\n @Input()\n public confirmTabs = true;\n \n @Input()\n public tabGroup: MatTabGroup;\n\n protected _ngZone = inject(NgZone);\n protected _cdRef = inject(ChangeDetectorRef);\n\n @ContentChildren(MatTabGroup, { descendants: true })\n private _tabGroups: QueryList<MatTabGroup> = new QueryList();\n\n private _buttons = new QueryList<FsButtonDirective>();\n private _activeSubmitButton: FsButtonDirective;\n private _destroy$ = new Subject<void>();\n \n public abstract submitting: boolean;\n public abstract confirm: ConfirmConfig | boolean; \n\n public ngAfterContentInit(): void {\n this._registerConfirmTabs();\n }\n\n public get destroy$(): Observable<void> {\n return this._destroy$.asObservable();\n }\n\n public ngOnDestroy(): void {\n this._destroy$.next(null);\n this._destroy$.complete();\n }\n \n public get buttons(): QueryList<FsButtonDirective> {\n return this._buttons;\n }\n\n public get activeSubmitButton(): FsButtonDirective {\n return this._activeSubmitButton;\n }\n\n public set activeSubmitButton(button: FsButtonDirective) {\n this._activeSubmitButton = button;\n }\n\n public addButton(button: FsButtonDirective): void {\n this._buttons\n .reset(\n [\n ...this._buttons.toArray(),\n button,\n ]);\n }\n\n public removeButton(button: FsButtonDirective): void {\n if(this._activeSubmitButton === button) {\n this._activeSubmitButton = null;\n }\n\n this._buttons.reset(\n [\n ...this._buttons.toArray()\n .filter((item) => (button !== item)),\n ]);\n }\n \n\n private _registerConfirmTabs(): void {\n this._registerConfirmTabGroups(this._tabGroups.toArray());\n this._tabGroups.changes\n .pipe(\n takeUntil(this._destroy$),\n )\n .subscribe(() => {\n this._registerConfirmTabGroups(this._tabGroups.toArray());\n });\n }\n\n private _registerConfirmTabGroups(tabGroups: MatTabGroup[]): void {\n tabGroups.forEach((tabGroup: MatTabGroup) => {\n this._registerConfirmTabGroup(tabGroup);\n });\n }\n\n private _registerConfirmTabGroup(tabGroup: MatTabGroup): void {\n const confirmTabGroup = tabGroup as ConfirmTabGroup;\n if (!confirmTabGroup._originalHandleClick) {\n confirmTabGroup._originalHandleClick = tabGroup._handleClick;\n confirmTabGroup._handlClick$ = new Subject<{\n tab: MatTab; \n tabHeader: MatTabHeader; \n idx: number \n }>();\n\n confirmTabGroup._handleClick = (tab: MatTab, tabHeader: MatTabHeader, idx: number) => {\n if (confirmTabGroup._handlClick$.observers.length) {\n confirmTabGroup._handlClick$.next({ tab, tabHeader, idx });\n } else {\n confirmTabGroup._originalHandleClick(tab, tabHeader, idx);\n }\n };\n }\n\n confirmTabGroup._handlClick$\n .pipe(\n filter(() => !this.submitting),\n switchMap((event) => {\n if(this.confirm && this.confirmTabs) {\n return this.triggerConfirm()\n .pipe(\n tap((result) => {\n if (confirmResultContinue(result)) {\n confirmTabGroup.selectedIndex = event.idx;\n }\n }),\n );\n }\n\n confirmTabGroup._originalHandleClick(event.tab, event.tabHeader, event.idx);\n\n return of(null);\n }),\n takeUntil(this._destroy$),\n )\n .subscribe();\n }\n \n \n public abstract triggerSubmit(): void;\n public abstract triggerConfirm(): Observable<ConfirmResult>;\n}\n","import {\n Directive,\n} from '@angular/core';\n\n\nimport { ConfirmConfig } from '../../interfaces';\nimport { FsFormDirective } from '../form';\nimport { FsFormBaseDirective } from '../form-base';\n\n\n@Directive({\n selector: '[fsFormGroup]',\n exportAs: 'fsFormGroup',\n})\nexport class FsFormGroupDirective extends FsFormBaseDirective {\n\n private _formDirective: FsFormDirective;\n\n public triggerSubmit() {\n return this._formDirective?.triggerSubmit();\n }\n\n public triggerConfirm() {\n return this._formDirective?.triggerConfirm();\n }\n\n public get submitting(): boolean {\n return this._formDirective?.submitting;\n }\n\n public get confirm(): ConfirmConfig | boolean {\n return this._formDirective?.confirm;\n }\n\n public registerForm(formDirective: FsFormDirective) {\n this._formDirective = formDirective;\n }\n\n public deregisterForm() {\n this._formDirective = null;\n }\n}\n","import {\n AfterContentInit,\n Directive,\n ElementRef,\n EventEmitter,\n HostBinding,\n Inject,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Optional,\n Output,\n SimpleChanges,\n} from '@angular/core';\nimport { AbstractControl, NgForm } from '@angular/forms';\nimport { ActivatedRoute, Route } from '@angular/router';\n\nimport { MatDialogRef } from '@angular/material/dialog';\n\nimport { guid } from '@firestitch/common';\nimport { DrawerRef } from '@firestitch/drawer';\nimport { FsMessage, MessageMode } from '@firestitch/message';\n\nimport {\n BehaviorSubject,\n defer,\n fromEvent,\n iif,\n Observable,\n of,\n throwError,\n} from 'rxjs';\nimport {\n catchError,\n delay,\n filter,\n first,\n map,\n mergeMap,\n startWith,\n switchMap,\n take,\n takeUntil,\n tap,\n} from 'rxjs/operators';\n\nimport { FormDeactivateGuard } from '../../guards/form-deactivate.guard';\nimport { confirmResultContinue } from '../../helpers/confirm-result-continue';\nimport { getActiveRoute } from '../../helpers/get-active-route';\nimport { getFormErrors } from '../../helpers/get-form-errors';\nimport { FsForm } from '../../services/fsform.service';\nimport { FsButtonDirective } from '../button.directive';\nimport { FsFormBaseDirective } from '../form-base';\nimport { FsFormGroupDirective } from '../form-group';\n\nimport { ConfirmResult } from './../../enums/confirm-result';\nimport { FormStatus } from './../../enums/form-status';\nimport { ConfirmConfig, SubmittedEvent } from './../../interfaces';\nimport { SubmitEvent } from './../../interfaces/submit-event';\n\n\n@Directive({\n selector: '[fsForm]',\n exportAs: 'fsForm',\n})\nexport class FsFormDirective \n extends FsFormBaseDirective \n implements OnInit, OnDestroy, AfterContentInit, OnChanges {\n\n @Input()\n public wrapperSelector = '.fs-form-wrapper,.mat-mdc-form-field';\n\n @Input()\n public messageSelector = '.fs-form-message,.mat-mdc-form-field-subscript-wrapper';\n\n @Input()\n public hintSelector = '.fs-form-hint,.mat-mdc-form-field-hint-wrapper';\n\n @Input()\n public labelSelector = '.fs-form-label,.mdc-floating-label>mat-label';\n\n @Input()\n public autocomplete = false;\n\n @Input()\n public shortcuts = true; // Ctrl + s\n\n @Input()\n public confirm: ConfirmConfig | boolean = true;\n\n @Input()\n public confirmDialog = true;\n\n @Input()\n public confirmDrawer = true;\n\n @Input()\n public confirmBrowser = true;\n\n @Input()\n public dirtySubmitButton = true;\n\n @Input()\n public set submit(submit$: (event: SubmitEvent) => Observable<any>) {\n this._submit$ = submit$;\n }\n\n public get submit(): (event: SubmitEvent) => Observable<any> {\n return this._submit$;\n }\n\n @Input()\n public successDelay = 0;\n\n @Input()\n public errorDelay = 1000;\n\n @Input()\n public deactivationGuard = true;\n \n @Output('fsForm')\n public submitEvent: EventEmitter<SubmitEvent> = new EventEmitter();\n\n @Output()\n public invalid: EventEmitter<SubmitEvent> = new EventEmitter();\n\n @Output()\n public valid: EventEmitter<SubmitEvent> = new EventEmitter();\n\n @Output()\n public submitted: EventEmitter<SubmitEvent> = new EventEmitter();\n\n @Output()\n public reseted: EventEmitter<SubmitEvent> = new EventEmitter();\n\n @Output()\n public cleared: EventEmitter<SubmitEvent> = new EventEmitter();\n\n @HostBinding('class.fs-form')\n public fsFormClass = true;\n\n private _registerControl;\n private _dialogBackdropEscape = false;\n private _snapshot: { [key: string]: any } = {};\n private _activatedRouteConfig: Route | null;\n private _status$ = new BehaviorSubject(FormStatus.Valid);\n private _submit$: (event?: SubmitEvent) => Observable<any> = null;\n\n constructor(\n @Inject(NgForm)\n public ngForm: NgForm,\n private _form: FsForm,\n private _element: ElementRef,\n private _message: FsMessage,\n @Optional() private _formGroup: FsFormGroupDirective,\n @Optional() @Inject(MatDialogRef)\n private _dialogRef: MatDialogRef<any>,\n\n @Optional() @Inject(DrawerRef)\n private _drawerRef: DrawerRef<any>,\n\n private _route: ActivatedRoute,\n ) { \n super();\n }\n\n public get submitting(): boolean {\n return this._status$.getValue() === FormStatus.Submitting;\n }\n\n public get validating(): boolean {\n return this._status$.getValue() === FormStatus.Validating;\n }\n\n public get completing(): boolean {\n return this._status$.getValue() === FormStatus.Completing;\n }\n\n private get _submitEvent(): SubmitEvent {\n return {\n ngForm: this.ngForm,\n submitter: this._submitter,\n };\n }\n\n private get _formValidState$(): Observable<SubmittedEvent> {\n this.submitEvent.emit(this._submitEvent);\n this.valid.emit(this._submitEvent);\n\n const submittedEvent: SubmittedEvent = {\n ngForm: this.ngForm,\n submitter: this._submitter,\n response: null,\n };\n\n const submit$: Observable<any> = this._submit$ ?\n this._submit$(this._submitEvent) : of(submittedEvent);\n\n return submit$\n .pipe(\n map((response) => {\n submittedEvent.response = response;\n\n return submittedEvent;\n }),\n takeUntil(this.destroy$),\n );\n }\n\n private get _formInvalidState$(): Observable<never> {\n if (this.invalid) {\n this.invalid.emit(this._submitEvent);\n }\n\n const message = 'Please review errors highlighted in red';\n this._message.error(message, { mode: MessageMode.Toast });\n\n const el = this._element.nativeElement.querySelector('.ng-invalid');\n\n if (el) {\n el.scrollIntoView({ behavior: 'smooth', block: 'nearest' });\n }\n\n return throwError(() => new Error('Form validation error'));\n }\n\n private get _submitter(): string {\n return this._getFormGroup().activeSubmitButton?.name;\n }\n\n public ngOnInit() {\n this._formGroup?.registerForm(this);\n\n if (this.deactivationGuard) {\n this._registerCanDeactivateGuard();\n }\n\n this._registerConfirmDialogBackdropEscape();\n this._listenHotKeys();\n this._listenWindowClose();\n this._listenSubmit();\n this._listenFormStatus();\n\n if (!this.autocomplete) {\n this._registerAutocomplete();\n }\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes.confirm) {\n this._updateDirtySubmitButtons();\n }\n }\n\n public clearSubmit(submit: (event: SubmitEvent) => Observable<any> = null): void {\n if(!submit || submit === this._submit$) {\n this._submit$ = null;\n }\n\n setTimeout(() => {\n this._cdRef.markForCheck();\n });\n }\n\n public registerSubmit(submit$: () => Observable<any>): void {\n this._submit$ = submit$;\n\n setTimeout(() => {\n this._cdRef.markForCheck();\n });\n }\n\n public ngAfterContentInit(): void {\n super.ngAfterContentInit(); \n this._registerConfirm();\n this._registerConfirmDrawerClose();\n this._registerDrawerClose();\n this._registerDirtySubmitButton();\n }\n\n public ngOnDestroy(): void {\n this._formGroup?.deregisterForm();\n\n super.ngOnDestroy();\n this._cleanupCanDeactivate();\n }\n\n public createSnapshot(): void {\n this._snapshot = this.ngForm.value;\n }\n\n public getSnapshot(): { [key: string]: any } {\n return this._snapshot || {};\n }\n\n public reset(): void {\n this.ngForm.resetForm();\n\n Object.keys(this.ngForm.controls)\n .forEach((name: string) => {\n const control = this.ngForm.controls[name];\n control.reset(this._snapshot[name]);\n });\n\n this.reseted.emit();\n }\n\n public clear(): void {\n this.ngForm.resetForm();\n this.cleared.emit();\n }\n\n public dirty(): void {\n this.ngForm.form.markAsDirty();\n this._updateDirtySubmitButtons();\n }\n\n public pristine(): void {\n this.ngForm.form.markAsPristine();\n this._updateDirtySubmitButtons();\n }\n\n public triggerSubmit(options?: { confirmed: boolean }): void {\n this.ngForm.ngSubmit.emit();\n }\n\n public triggerConfirm(): Observable<ConfirmResult> {\n const submitted = this.submitting ? this.submitted.asObservable() : of({});\n\n return submitted\n .pipe(\n take(1),\n mergeMap(() => this._form.confirmUnsaved(this)),\n );\n }\n\n public enable(): void {\n this.ngForm.control.enable();\n\n this._updateDirtySubmitButtons();\n }\n\n public disable(): void {\n this.ngForm.control.disable();\n\n this._getFormGroup()\n .buttons.forEach((button) => {\n button.disable();\n });\n }\n\n public validate(): void {\n Object.values(this.ngForm.controls)\n .forEach((control) => {\n control.markAsDirty();\n control.markAsTouched();\n control.updateValueAndValidity();\n });\n }\n\n public submit$(submitEvent: SubmitEvent): Observable<SubmittedEvent> {\n return of(submitEvent)\n .pipe(\n tap(() => this._statusValidating()),\n tap(() => this.validate()),\n tap(() => this._statusSubmitting()),\n tap(() => this._setupActiveSubmitButton()),\n tap(() => this._disableButtons()),\n switchMap((data) => this._waitUntilStatusPending()\n .pipe(\n map(() => data),\n )), \n mergeMap(() => {\n if (this.ngForm.status === 'INVALID') {\n return this._formInvalidState$;\n }\n\n return this._formValidState$;\n }),\n catchError((e) => {\n this._handleError(e);\n\n return of({\n ...this._submitEvent,\n error: e?.message,\n });\n }),\n tap((submittedEvent: SubmittedEvent) => {\n if(!submittedEvent.error) {\n this._completeSubmit(true, submittedEvent);\n }\n }),\n );\n }\n\n private _listenSubmit(): void {\n this\n .ngForm\n .ngSubmit\n .pipe(\n tap((event) => {\n event?.preventDefault();\n }),\n filter(() => {\n return [FormStatus.Valid, FormStatus.Invalid]\n .includes(this._status$.getValue());\n }),\n switchMap(() => this.submit$(this._submitEvent)),\n takeUntil(this.destroy$),\n )\n .subscribe();\n }\n\n private _listenFormStatus(): void {\n this._status$\n .pipe(\n takeUntil(this.destroy$),\n )\n .subscribe((formStatus: FormStatus) => {\n const cls = [FormStatus.Submitting, FormStatus.Validating];\n const classList = this._element.nativeElement.classList;\n classList.remove(...cls);\n if (cls.indexOf(formStatus) !== -1) {\n classList.add(formStatus);\n }\n });\n\n }\n\n private _listenWindowClose(): void {\n fromEvent(window, 'beforeunload')\n .pipe(\n takeUntil(this.destroy$),\n )\n .subscribe((event: Event) => {\n if (this.confirm && this.confirmBrowser && this.ngForm.dirty) {\n event.returnValue = false;\n }\n });\n }\n\n private _activeDialog(el, dialog: HTMLElement): boolean {\n if (el.isSameNode(dialog)) {\n return true;\n } else if (el.parentElement) {\n return this._activeDialog(el.parentElement, dialog);\n }\n\n return false;\n }\n\n private _listenHotKeys(): void {\n this._ngZone.runOutsideAngular(() => {\n fromEvent(document, 'keydown')\n .pipe(\n takeUntil(this.destroy$),\n )\n .subscribe((event: KeyboardEvent) => {\n if (this._dialogBackdropEscape && event.code === 'Escape') {\n const cdkOverlayPane = Array\n .from(document.querySelectorAll<HTMLElement>('.cdk-overlay-pane')).pop();\n \n const activeDialog = this\n ._activeDialog(document.getElementById(this._dialogRef.id), cdkOverlayPane);\n\n if (activeDialog) {\n this._ngZone.run(() => {\n this._formClose();\n });\n }\n }\n\n if ((event.ctrlKey || event.metaKey) && event.code === 'KeyS') {\n event.preventDefault();\n\n if (this.shortcuts) {\n if (this._elementInForm(document.activeElement)) {\n this.ngForm.ngSubmit.next(null);\n }\n }\n }\n });\n });\n }\n\n private _formClose(): void {\n if (this.confirm && this.confirmDialog) {\n this.triggerConfirm()\n .pipe(\n filter((result) => confirmResultContinue(result)),\n switchMap((result) => {\n return result === ConfirmResult.NoChanges || result === ConfirmResult.Discard\n ? of(null)\n : this.submitted.asObservable();\n }),\n takeUntil(this.destroy$),\n )\n .subscribe((result: SubmittedEvent) => {\n this._dialogRef.close(result?.response);\n });\n } else {\n this._dialogRef.close(null);\n }\n }\n\n private _getActiveSubmitButton(): FsButtonDirective {\n if(this._getFormGroup().activeSubmitButton) {\n return this._getFormGroup().activeSubmitButton;\n }\n\n return this._getFormGroup()\n .buttons\n .filter((button) => button.submit)[0];\n }\n\n private _elementInForm(el: Element): boolean {\n if (el.isSameNode(this._element.nativeElement)) {\n return true;\n } else if (el.parentElement) {\n return this._elementInForm(el.parentElement);\n }\n\n return false;\n }\n\n private _completeSubmit(success, submitEvent: SubmittedEvent): void {\n if (success) {\n this.ngForm.control.markAsPristine();\n this.createSnapshot();\n this.submitted.emit(submitEvent);\n } else {\n this._resetButtons();\n }\n\n if (this._getFormGroup().activeSubmitButton) {\n if (success) {\n this._getFormGroup().activeSubmitButton.success();\n } else {\n this._getFormGroup().activeSubmitButton.error();\n }\n }\n\n this._status$.next(FormStatus.Submitted);\n\n if (success) {\n this._status$.next(FormStatus.Success);\n } else {\n this._status$.next(FormStatus.Error);\n }\n\n this._status$.next(FormStatus.Completing);\n\n const resetDelay = success ? this.successDelay : this.errorDelay;\n\n of(true)\n .pipe(\n delay(resetDelay),\n first(),\n takeUntil(this.destroy$),\n )\n .subscribe(() => {\n if (this.ngForm.form.status === 'VALID') {\n this._status$.next(FormStatus.Valid);\n } else {\n this._status$.next(FormStatus.Invalid);\n }\n\n this._resetButtons();\n this._getFormGroup().activeSubmitButton = null;\n this._updateDirtySubmitButtons();\n });\n }\n\n private _getFormGroup(): FsFormBaseDirective {\n return this._formGroup || this;\n }\n\n private _resetButtons(): void {\n this._getFormGroup()\n .buttons.forEach((button) => {\n button.reset();\n });\n }\n\n private _registerConfirm(): void {\n this.ngForm.form.valueChanges\n .pipe(\n takeUntil(this.destroy$),\n )\n .subscribe((changes) => {\n if(this._dialogBackdropEscape && this._dialogRef) {\n this._dialogRef.disableClose = true;\n }\n\n if (this.confirm) {\n const existing = Object.keys(this._snapshot);\n\n Object.keys(changes)\n .forEach((name: string) => {\n if (existing.indexOf(name) === -1) {\n this._snapshot[name] = changes[name];\n }\n });\n }\n });\n }\n\n private _registerDrawerClose(): void {\n if (this._drawerRef) {\n this._drawerRef.closeStart$\n .pipe(\n takeUntil(this.destroy$),\n )\n .subscribe((subscriber) => {\n if (this.submitting) {\n this._status$\n .pipe(\n filter((status) => status === FormStatus.Success || status === FormStatus.Error),\n takeUntil(this.destroy$),\n )\n .subscribe((status) => {\n if (status === FormStatus.Success) {\n subscriber.next(null);\n subscriber.complete();\n } else {\n subscriber.error();\n }\n });\n } else {\n subscriber.next(null);\n subscriber.complete();\n }\n });\n }\n }\n\n private _registerConfirmDrawerClose(): void {\n if (this._drawerRef) {\n this._drawerRef.closeStart$\n .pipe(\n switchMap((subscriber) => {\n return iif(\n () => this.confirm && this.confirmDrawer,\n this.triggerConfirm()\n .pipe(\n map((result) => confirmResultContinue(result)),\n tap((result) => {\n if (result) {\n subscriber.next(null);\n subscriber.complete();\n }\n }),\n ),\n defer(() => {\n subscriber.next(null);\n subscriber.complete();\n\n return of(null);\n }),\n );\n }),\n takeUntil(this.destroy$),\n )\n .subscribe();\n }\n }\n \n private _registerConfirmDialogBackdropEscape(): void {\n if(this._dialogRef) {\n this._dialogBackdropEscape = !this._dialogRef?.disableClose;\n\n if (this._dialogBackdropEscape) {\n this._dialogRef.backdropClick()\n .pipe(\n takeUntil(this.destroy$),\n )\n .subscribe(() => {\n this._formClose();\n });\n\n this.destroy$\n .subscribe(() => {\n this._dialogRef.disableClose = false;\n });\n }\n }\n }\n\n private _registerAutocomplete(): void {\n this._registerControl = this.ngForm.form.registerControl.bind(this.ngForm.form);\n\n this.ngForm.form.registerControl = (name: string, control: AbstractControl) => {\n\n const el: Element = this._element.nativeElement.querySelector(`input[name='${name}']`);\n\n if (el) {\n if (!el.getAttribute('autocomplete')) {\n el.setAttribute('autocomplete', 'none');\n el.setAttribute('name', `${name}-${guid()}`);\n }\n }\n\n return this._registerControl(name, control);\n };\n }\n\n private _registerDirtySubmitButton(): void {\n if (!this.ngForm) {\n return;\n }\n\n this.ngForm.form.valueChanges\n .pipe(\n takeUntil(this.destroy$),\n )\n .subscribe(() => {\n this._updateDirtySubmitButtons();\n });\n\n this._getFormGroup()\n .buttons.changes\n .pipe(\n takeUntil(this.destroy$),\n )\n .subscribe(() => {\n this._updateDirtySubmitButtons();\n });\n }\n\n private _updateDirtySubmitButtons(): void {\n this._getFormGroup()\n .buttons\n .filter((button) => button.submit)\n .forEach((submitButton: FsButtonDirective) => {\n if (\n !this.confirm || !this.dirtySubmitButton || this.ngForm.dirty || !submitButton.dirtySubmit\n ) {\n submitButton.enable();\n } else {\n submitButton.disable();\n }\n });\n }\n\n private _statusSubmitting(): void {\n this._status$.next(FormStatus.Submitting);\n }\n\n private _statusValidating(): void {\n this._status$.next(FormStatus.Validating);\n }\n\n private _setupActiveSubmitButton(): void {\n this._getFormGroup()\n .activeSubmitButton = this._getActiveSubmitButton();\n this._resetButtons();\n\n if (this._getFormGroup().activeSubmitButton) {\n this._getFormGroup().activeSubmitButton.process();\n }\n }\n\n private _disableButtons(): void {\n this._getFormGroup()\n .buttons.forEach((button) => {\n button.disable();\n });\n }\n\n private _waitUntilStatusPending(): Observable<string> {\n return this.ngForm.statusChanges\n .pipe(\n startWith(this.ngForm.status),\n first((state) => state !== 'PENDING'),\n );\n }\n\n private _handleError(e: SubmittedEvent) {\n console.log('%c Form Submit ', 'color: white; background-color: #D33F49', 'Error occured');\n console.group('Error Details:');\n console.log('Message: ', e);\n console.log('FormRef: ', this);\n\n if (this.ngForm.invalid) {\n const errors = getFormErrors(this.ngForm.control, null);\n console.log('Validation Errors: ', errors);\n }\n\n console.groupEnd();\n this._completeSubmit(false, null);\n }\n\n private _registerCanDeactivateGuard(): void {\n this._activatedRouteConfig = getActiveRoute(this._route).routeConfig;\n\n if (!this._activatedRouteConfig) {\n return;\n }\n\n this._form.registerFormDirective(this._activatedRouteConfig.component, this);\n\n if (!Array.isArray(this._activatedRouteConfig.canDeactivate)) {\n this._activatedRouteConfig.canDeactivate = [];\n }\n\n if (this._activatedRouteConfig.canDeactivate.indexOf(FormDeactivateGuard) === -1) {\n this._activatedRouteConfig.canDeactivate.push(FormDeactivateGuard);\n }\n }\n\n private _cleanupCanDeactivate(): void {\n if (!this._activatedRouteConfig) {\n return;\n }\n\n const guardIndex = this._activatedRouteConfig.canDeactivate.indexOf(FormDeactivateGuard);\n this._activatedRouteConfig.canDeactivate.splice(guardIndex, 1);\n\n this._form.removeFormDirective(this._activatedRouteConfig.component);\n }\n\n}\n","import { Directive, HostBinding, HostListener, Input, OnDestroy, Optional } from '@angular/core';\n\nimport { MatDialogRef } from '@angular/material/dialog';\n\nimport { Subject } from 'rxjs';\nimport { filter, takeUntil } from 'rxjs/operators';\n\nimport { ConfirmResult } from '../enums/confirm-result';\n\nimport { FsFormDirective } from './form';\n\n\n@Directive({\n selector: '[fsFormDialogClose],[fs-form-dialog-close]',\n})\nexport class FsFormDialogCloseDirective implements OnDestroy {\n\n @Input() public closeData;\n\n @HostBinding('attr.type') public type = 'button';\n\n private _destroy$ = new Subject();\n \n constructor(\n @Optional() private _form: FsFormDirective,\n @Optional() private _dialogRef: MatDialogRef<any>,\n ) {\n }\n\n @HostListener('click', ['$event.target'])\n public closeClick(): void {\n if(this._form) {\n this._form.triggerConfirm()\n .pipe(\n filter((confirmResult: ConfirmResult) => (confirmResult !== ConfirmResult.Review)),\n takeUntil(this._destroy$),\n )\n .subscribe(() => {\n this._dialogRef.close(this.closeData);\n });\n } else {\n this._dialogRef.close(this.closeData);\n }\n }\n \n public ngOnDestroy(): void {\n this._destroy$.next(null);\n this._destroy$.complete();\n }\n}\n","import {\n ChangeDetectorRef, Directive, ElementRef,\n HostBinding, inject, Input, OnDestroy, OnInit,\n} from '@angular/core';\n\nimport { MatButton } from '@angular/material/button';\n\nimport { fromEvent, Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport { FsFormDirective } from './form';\nimport { FsFormBaseDirective } from './form-base';\nimport { FsFormGroupDirective } from './form-group';\n\n\n@Directive({\n selector: '[mat-raised-button],[mat-button],[mat-flat-button],[mat-stroked-button]',\n})\nexport class FsButtonDirective implements OnInit, OnDestroy {\n\n @Input()\n public name;\n\n @Input()\n public dirtySubmit = true;\n\n @HostBinding('style.transition')\n public transitionStyle = null;\n\n public submit = false;\n\n private _previousDisabled = false;\n private _destroy$ = new Subject();\n\n private _formGroup = inject(FsFormGroupDirective, { optional: true });\n private _form = inject(FsFormDirective, { optional: true });\n private _matButton = inject(MatButton, { optional: true, host: true });\n private _elementRef = inject(ElementRef);\n private _cdRef = inject(ChangeDetectorRef);\n private _formBase: FsFormBaseDirective;\n\n public ngOnInit() {\n this.submit = this._elementRef.nativeElement.getAttribute('type') === 'submit';\n this._formBase = this._form || this._formGroup;\n\n if (this._formBase) {\n this._formBase.addButton(this);\n\n if(this.submit) {\n fromEvent(this.element, 'click')\n .pipe(\n takeUntil(this._destroy$),\n )\n .subscribe(() => {\n this._formBase.activeSubmitButton = this;\n this._formBase.triggerSubmit();\n });\n\n this.transitionStyle = 'none';\n setTimeout(() => {\n this.transitionStyle = null;\n }, 500);\n }\n }\n }\n\n public disable() { \n if (this._matButton && !this._formBase.activeSubmitButton) {\n this._previousDisabled = this._matButton.disabled;\n this._matButton.disabled = true;\n this._matButton.disableRipple = true;\n this._cdRef.markForCheck(); \n }\n }\n\n public enable() {\n if (this._matButton) {\n this._matButton.disabled = false;\n this._matButton.disableRipple = true;\n this._cdRef.markForCheck();\n }\n }\n\n public process() {\n this.setClass('process');\n if (this._matButton) {\n this._matButton.disableRipple = true;\n }\n }\n\n public success() {\n this.setClass('success');\n if (this._matButton) {\n this._matButton.disableRipple = false;\n }\n }\n\n public error() {\n this.setClass('error');\n if (this._matButton) {\n this._matButton.disableRipple = false;\n }\n }\n\n public setClass(cls) {\n const svg = this._getSvg(cls);\n this._resetClass();\n this.element.classList.add(`fs-form-submit-button-${cls}`);\n this.element.append(svg);\n }\n\n public get element() {\n return this._elementRef.nativeElement;\n }\n\n public reset() {\n if(!this._previousDisabled) {\n this.enable();\n }\n\n this.element.querySelectorAll('.svg-icon')\n .forEach((el) => {\n el.remove();\n });\n\n if (this._matButton) {\n this._matButton.disableRipple = false;\n }\n this._resetClass();\n }\n\n public ngOnDestroy(): void {\n this._destroy$.next(null);\n this._destroy$.complete();\n this._formBase?.removeButton(this);\n }\n\n private _resetClass() {\n this.element.classList\n .remove(\n 'fs-form-submit-button-success', \n 'fs-form-submit-button-error', \n 'fs-form-submit-button-process',\n );\n }\n\n private _getSvg(type) {\n if (type === 'success') {\n return new DOMParser().parseFromString(`<svg class=\"svg-icon svg-icon-success\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" version=\"1.1\" x=\"0px\" y=\"0px\" viewBox=\"0 0 38 38\" style=\"enable-background:new 0 0 38 38;\" xml:space=\"preserve\" width=\"38px\" height=\"38px\">\n <g>\n <g class=\"check\">\n <g>\n <path d=\"M29.6,11.9c-0.5-0.5-1.3-0.5-1.8,0L16.3,23.4l-6.1-6.1c-0.5-0.5-1.3-0.5-1.8,0s-0.5,1.3,0,1.8l7,7c0.3,0.3,0.6,0.4,0.9,0.4s0.7-0.1,0.9-0.4l12.4-12.4C30.1,13.2,30.1,12.4,29.6,11.9z\"/>\n </g>\n </g>\n </g>\n </svg>`, 'text/xml').firstChild;\n }\n\n if (type === 'process') {\n return new DOMParser().parseFromString(`<svg class=\"svg-icon svg-icon-process\" width=\"38\" height=\"38\" viewBox=\"0 0 38 38\" xmlns=\"http://www.w3.org/2000/svg\">\n <g fill=\"none\" fill-rule=\"evenodd\">\n <g transform=\"translate(1 1)\" stroke-width=\"2\"><circle stroke-opacity=\".5\" cx=\"18\" cy=\"18\" r=\"18\"/>\n <path d=\"M36 18c0-9.94-8.06-18-18-18\"><animateTransform attributeName=\"transform\" type=\"rotate\" from=\"0 18 18\" to=\"360 18 18\" dur=\".7s\" repeatCount=\"indefinite\"/></path>\n </g>\n </g>\n </svg>`, 'text/xml').firstChild;\n }\n\n if (type === 'error') {\n return new DOMParser().parseFromString('<svg class=\"svg-icon svg-icon-error\" xmlns=\"http://www.w3.org/2000/svg\" width=\"38px\" height=\"38px\" viewBox=\"0 0 16 16\"><g><path d=\"M8 1c3.9 0 7 3.1 7 7s-3.1 7-7 7-7-3.1-7-7 3.1-7 7-7zM8 0c-4.4 0-8 3.6-8 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8v0z\" data-original=\"#444444\" data-old_color=\"#444444\"/><path d=\"M12.2 10.8l-2.8-2.8 2.8-2.8-1.4-1.4-2.8 2.8-2.8-2.8-1.4 1.4 2.8 2.8-2.8 2.8 1.4 1.4 2.8-2.8 2.8 2.8z\"/></g> </svg>', 'text/xml').firstChild;\n }\n }\n}\n","import {\r\n ChangeDetectionStrategy, ChangeDetectorRef,\r\n Component, Input, OnDestroy, OnInit, Optional,\r\n} from '@angular/core';\r\n\r\n\r\nimport { Subject } from 'rxjs';\r\nimport { delay, filter, takeUntil } from 'rxjs/operators';\r\n\r\nimport { FsFormDirective } from '../../directives/form/form.directive';\r\n\r\n\r\n@Component({\r\n selector: 'fs-form-dialog-actions',\r\n templateUrl: './form-dialog-actions.component.html',\r\n styleUrls: ['./form-dialog-actions.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class FsFormDialogActionsComponent implements OnInit, OnDestroy {\r\n\r\n @Input() public save = true;\r\n @Input() public create = false;\r\n @Input() public close = false;\r\n @Input() public done = false;\r\n @Input() public closeData = null;\r\n @Input() public name: string;\r\n\r\n public dirty = false;\r\n\r\n private _destroy$ = new Subject<void>();\r\n \r\n constructor(\r\n @Optional() private _form: FsFormDirective,\r\n private _cdRef: ChangeDetectorRef, \r\n ) {}\r\n\r\n public ngOnInit(): void {\r\n if(this._form) {\r\n this._form.ngForm.valueChanges\r\n .pipe( \r\n filter(() => (!this.dirty)),\r\n takeUntil(this._destroy$),\r\n )\r\n .subscribe(() => {\r\n this.dirty = this._form.ngForm.dirty;\r\n this._cdRef.markForCheck();\r\n });\r\n\r\n this._form.submitted\r\n .pipe(\r\n delay(50),\r\n takeUntil(this._destroy$),\r\n )\r\n .subscribe(() => {\r\n this.dirty = false;\r\n this._cdRef.markForCheck();\r\n });\r\n\r\n this._form.reseted\r\n .pipe(\r\n takeUntil(this._destroy$),\r\n )\r\n .subscribe(() => {\r\n this.dirty = false;\r\n this._cdRef.markForCheck();\r\n });\r\n }\r\n }\r\n\r\n public ngOnDestroy(): void {\r\n this._destroy$.next(null);\r\n this._destroy$.complete();\r\n }\r\n}\r\n","<div\n class=\"form-buttons\"\n [ngClass]=\"{ 'save-create': save || create }\">\n <ng-container *ngIf=\"save || create\">\n <button\n mat-button\n type=\"submit\"\n color=\"primary\"\n [name]=\"name\">\n {{ create ? 'Create' : 'Save' }}\n </button>\n <button\n mat-button\n type=\"button\"\n class=\"cancel-button\"\n [disabled]=\"close && !dirty && !create\"\n [mat-dialog-close]=\"null\">\n Cancel\n </button>\n </ng-container>\n <ng-container *ngIf=\"done\">\n <button\n mat-button\n type=\"button\"\n color=\"primary\"\n [mat-dialog-close]=\"null\">\n Done\n </button>\n </ng-container>\n <ng-container *ngIf=\"save || create\">\n <ng-template [ngTemplateOutlet]=\"content\"></ng-template>\n </ng-container>\n <ng-container *ngIf=\"close\">\n <button\n mat-button\n type=\"button\"\n class=\"close-button\"\n fsFormDialogClose\n [closeData]=\"closeData\"\n [color]=\"dirty ? 'basic' : 'primary'\">\n Close\n </button>\n </ng-container>\n <ng-container *ngIf=\"!(save || create)\">\n <ng-template [ngTemplateOutlet]=\"content\"></ng-template>\n </ng-container>\n</div>\n<ng-template #content>\n <ng-content></ng-content>\n</ng-template>","export const ERROR_MESSAGES = {\n required: 'This field is required',\n email: 'This is not a valid email address',\n emails: 'Input valid email addresses, comma separated',\n phone: 'Invalid phone number',\n numeric: 'Value should be numeric',\n integer: 'Value should be an integer',\n min: 'Value should not be less than $(1)',\n max: 'Value should not be greater than $(1)',\n minlength: 'Should not be shorter than $(1) characters',\n maxlength: 'Should not be longer than $(1) characters',\n compare: 'Inputs do not match',\n pattern: 'Value should match pattern $(1)',\n dateRange: 'Invalid date range',\n url: 'This is not a valid url',\n urlProtocol: 'Invalid URL. Proper http protocol is required. eg. https://google.com',\n greater: 'Value must be greater than $(1)',\n lesser: 'Value must be less than $(1)',\n greaterEqual: 'Value must be greater than or equal $(1)',\n lesserEqual: 'Value must be less than or equal $(1)',\n};\n","import { InjectionToken } from '@angular/core';\nimport { ERROR_MESSAGES } from '../consts/error-messages.const';\n\nexport const VALIDATE_MESSAGES = new InjectionToken<Record<string, string>>(\n 'fs.form.validate-messages',\n);\n\nexport const VALIDATE_MESSAGE_PROVIDER = {\n provide: VALIDATE_MESSAGES,\n useFactory: messageProviderFactory,\n};\n\nexport function messageProviderFactory() {\n return { ...ERROR_MESSAGES };\n}\n\n","import {\n AfterContentInit,\n Directive,\n ElementRef,\n Inject,\n Injector,\n Input,\n OnDestroy,\n OnInit,\n Optional,\n Renderer2,\n Self,\n} from '@angular/core';\nimport { AbstractControl, NgControl, ValidationErrors } from '@angular/forms';\n\nimport { Observable, Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport { keys, values } from 'lodash-es';\n\nimport {\n VALIDATE_MESSAGE_PROVIDER,\n VALIDATE_MESSAGES,\n} from '../../providers/validate-messages.provider';\nimport { FsFormDirective } from '../form/form.directive';\n\n\nexport interface FsControlDirective {\n validate?(control: AbstractControl): ValidationErrors | null;\n validateAsync?(control: AbstractControl): Promise<ValidationErrors | null> | Observable<ValidationErrors | null>;\n}\n\n\n@Directive({\n selector: '[fsFormControl]',\n providers: [\n VALIDATE_MESSAGE_PROVIDER,\n ],\n})\nexport class FsControlDirective implements OnInit, AfterContentInit, OnDestroy {\n\n @Input() public wrapperSelector: string | false;\n @Input() public messageSelector: string | false;\n @Input() public hintSelector: string | false;\n @Input() public labelSelector: string | false;\n @Input() public appendMessageClass = 'fs-form-message';\n @Input() public appendLabelClass = 'fs-form-label';\n @Input() public appendErrorClass = 'fs-form-error';\n @Input() public appendHintClass = 'fs-form-hint';\n\n @Input()\n public set validateMessages(messages: Record<string, string>) {\n this._validateMessages = {\n ...this._validateMessages,\n ...messages,\n };\n }\n\n public errors = [];\n\n protected _control: AbstractControl;\n\n private _destroy$ = new Subject();\n\n constructor(\n protected _elementRef: ElementRef,\n protected _renderer2: Renderer2,\n protected _injector: Injector,\n @Self() @Inject(VALIDATE_MESSAGES) protected _validateMessages,\n @Optional() protected _ngControl: NgControl,\n @Optional() @Inject(FsFormDirective) protected _formDirective: FsFormDirective,\n ) {\n\n if (_ngControl) {\n this._control = _ngControl.control;\n } else {\n console.error('The element does not have a valid ngModel', this._elementRef.nativeElement);\n }\n }\n\n public ngOnInit() {\n this._setupValidators();\n }\n\n public ngOnDestroy() {\n this._destroy$.next(null);\n this._destroy$.complete();\n }\n\n public ngAfterContentInit() {\n this._subscribeToStatusChagnes();\n }\n\n public getMessageSelector(): string {\n if (this.messageSelector === false) {\n return '';\n }\n\n if (this.messageSelector) {\n return this.messageSelector;\n\n } else if (this._formDirective?.messageSelector) {\n return this._formDirective.messageSelector;\n }\n }\n\n public getHintWrapperSelector(): string {\n if (this.hintSelector === false) {\n return '';\n }\n\n if (this.hintSelector) {\n return this.hintSelector;\n\n } else if (this._formDirective?.hintSelector) {\n return this._formDirective.hintSelector;\n }\n }\n\n public getWrapperSelector(): string {\n if (this.wrapperSelector === false) {\n return '';\n }\n\n if (this.wrapperSelector) {\n return this.wrapperSelector;\n\n } else if (this._formDirective?.wrapperSelector) {\n return this._formDirective.wrapperSelector;\n }\n }\n\n public getlabelSelector(): string {\n\n if (this.labelSelector === false) {\n return '';\n }\n\n if (this.labelSelector) {\n return this.labelSelector;\n\n } else if (this._formDirective?.labelSelector) {\n return this._formDirective.labelSelector;\n }\n }\n\n public getWrapperElement() {\n const wrapper = this._getWrapper(this._elementRef.nativeElement);\n\n if (wrapper) {\n return wrapper;\n }\n\n return this._elementRef.nativeElement;\n }\n\n /*\n <mat-form-field class=\"mat-form-field\"> <-- Field Wrapper Class. Look for parents from the native element with the matching wrapperSelector. If not found defaults to native element.\n <input>\n <div class=\"fs-form-message\"> <-- Message Selector. Look for the element with class .fs-form-message or messageSelector\n <div class=\"fs-form-message\"></div>\n <div class=\"fs-form-hint\"></div> <-- Hint Selector. Look for the element with class .fs-form-hint or hintSelector\n </div>\n </mat-form-field>\n */\n\n private get _shouldErrorBeRendered() {\n return this._ngControl.invalid\n && (this._ngControl.dirty || this._formDirective?.ngForm?.submitted);\n }\n\n public render() {\n if (this._ngControl) {\n const renderer = this._renderer2;\n const wrapper = this.getWrapperElement();\n const error = this._ngControl.dirty ? this._getError(this._ngControl) : null;\n\n if (this._shouldErrorBeRendered && error) {\n wrapper.classList.add('ng-invalid', 'ng-dirty');\n } else {\n wrapper.classList.remove('ng-invalid');\n }\n\n if (!this.getMessageSelector()) {\n return;\n }\n\n const messageWrapper = wrapper.querySelector(this.getMessageSelector());\n \n if (!messageWrapper) {\n return console\n .warn(`Failed to locate ${ this.getMessageSelector()}`, this._elementRef.nativeElement);\n }\n\n if (this.appendMessageClass) {\n renderer.addClass(messageWrapper, this.appendMessageClass);\n }\n\n this._renderHint(error, messageWrapper);\n this._renderError(wrapper, messageWrapper, error);\n }\n }\n\n protected _renderHint(error, messageWrapper) {\n if (this.getHintWrapperSelector()) {\n const hints = messageWrapper.querySelectorAll('.mat-mdc-form-field-hint');\n\n hints.forEach((hint) => {\n this._renderer2.setStyle(hint, 'display', error ? 'none' : 'block');\n\n if (this.appendHintClass) {\n this._renderer2.addClass(hint, this.appendHintClass);\n }\n });\n }\n }\n\n protected _renderError(wrapper, messageWrapper, error) {\n let errorWrapper = wrapper.querySelector('.fs-form-error-target');\n if (errorWrapper) {\n errorWrapper.remove();\n }\n\n if (!this._shouldErrorBeRendered || !error) {\n return;\n }\n\n errorWrapper = this._renderer2.createElement('div');\n this._renderer2.addClass(errorWrapper, 'fs-form-error-target');\n this._renderer2.addClass(errorWrapper, this.appendErrorClass);\n this._renderer2.addClass(errorWrapper, `${this.appendErrorClass }-${ error.name}`);\n\n const errorText = this._renderer2.createText(error.message);\n\n this._renderer2.appendChild(errorWrapper, errorText);\n \n const hintWrapper = messageWrapper.querySelector(this.getHintWrapperSelector());\n hintWrapper?.prepend(errorWrapper);\n }\n\n protected _subscribeToStatusChagnes():void {\n if (this._control) {\n this._control.statusChanges\n .pipe(\n takeUntil(this._destroy$),\n )\n .subscribe(this.render.bind(this));\n }\n }\n\n protected _getWrapper(node, count = 0) {\n if (!node || count > 10) {\n return null;\n }\n\n if (node.parentNode && node.parentNode.querySelector(this.getWrapperSelector())) {\n return node;\n }\n\n return this._getWrapper(node.parentNode, ++count);\n }\n\n protected _parseErrorMessage(message, args): string {\n values(args)\n .forEach((name) => {\n message = message.replace(/\\$\\(\\d\\)/, name);\n });\n\n return message;\n }\n\n protected _getError(controlRef): { name: string, message: string } {\n\n const name = keys(controlRef.control.errors)[0];\n\n if (!name) {\n return null;\n }\n\n let message = controlRef.control.errors[name];\n\n if (this._validateMessages[name]) {\n message = this._parseErrorMessage(this._validateMessages[name], message);\n }\n\n return { name: name, message: message };\n }\n\n private _setupValidators(): void {\n const control = this._control;\n\n if (this.validate) {\n const validators = control.validator\n ? [control.validator, this.validate.bind(this)]\n : this.validate.bind(this);\n\n control.setValidators(validators);\n }\n\n if (this.validateAsync) {\n const asyncValidators = control.asyncValidator\n ? [control.asyncValidator, this.validateAsync.bind(this)]\n : this.validateAsync.bind(this);\n\n control.setAsyncValidators(asyncValidators);\n }\n\n control.updateValueAndValidity();\n }\n\n}\n","import { AfterViewInit, Directive, Input, OnChanges, OnDestroy } from '@angular/core';\nimport { AbstractControl, ValidationErrors } from '@angular/forms';\n\nimport { FsValidator } from '../../interfaces/validator';\nimport { VALIDATE_MESSAGE_PROVIDER } from '../../providers/validate-messages.provider';\n\nimport { FsControlDirective } from './control.directive';\n\n\n@Directive({\n selector: '[fsFormCompare]',\n providers: [\n VALIDATE_MESSAGE_PROVIDER,\n ],\n})\nexport class FsFormCompareDirective extends FsControlDirective\n implements OnChanges, AfterViewInit, OnDestroy, FsValidator {\n\n @Input()\n public fsFormCompare;\n\n @Input('fsFormCompareMessage')\n public set validationMessage(value: string) {\n this._validateMessages.compare = value;\n }\n\n public ngOnChanges(): void {\n this._control.updateValueAndValidity();\n }\n\n public validate(control: AbstractControl): ValidationErrors | null {\n if (this.fsFormCompare.value === this._elementRef.nativeElement.value) {\n return null;\n }\n \n return { compare: true };\n \n }\n\n public ngAfterViewInit() {\n this.fsFormCompare.addEventListener('keyup', () => {\n this._control.updateValueAndValidity();\n }, false);\n }\n\n public ngOnDestroy() {\n this.fsFormCompare.removeEventListener('keyup', () => {\n this._control.updateValueAndValidity();\n }, false);\n }\n}\n","import { AbstractControl, ValidationErrors } from '@angular/forms';\n\nimport { email, isEmpty, isNumeric, phone, url } from '@firestitch/common';\n\nimport { Observable, from, isObservable, of, throwError } from 'rxjs';\nimport { catchError, mapTo, take } from 'rxjs/operators';\n\nimport { isValid } from 'date-fns';\nimport { isObject } from 'lodash-es';\n\n\nexport class FsValidators {\n\n public static email(control: AbstractControl): ValidationErrors | null {\n if (!control.value || email(control.value)) {\n return null;\n }\n\n return { email: true };\n }\n\n public static emails(control: AbstractControl): ValidationErrors | null {\n const model = control.value || '';\n\n const hasInvalidEmails = model\n .split(',')\n .some((part) => !email(part));\n\n return hasInvalidEmails ? { email: true } : null;\n }\n\n public static numeric(control: AbstractControl): ValidationErrors | null {\n if (isEmpty(control.value) || isNumeric(control.value)) {\n return null;\n }\n \n return { numeric: true };\n \n }\n\n public static integer(control: AbstractControl): ValidationErrors | null {\n if (!control.value || String(control.value) === '' || (control.value % 1 === 0)) {\n return null;\n }\n \n return { integer: true };\n \n }\n\n public static phone(control: AbstractControl): ValidationErrors | null {\n if (!control.value || phone(control.value)) {\n return null;\n }\n\n return { phone: true };\n }\n\n public static url(control: AbstractControl, protocolRequired = false): ValidationErrors | null {\n if (!control.value) {\n return null;\n }\n\n if (!url(control.value)) {\n return { url: true };\n }\n\n if (protocolRequired) {\n const pattern = new RegExp(/^http(s)?:\\/\\//gm);\n\n if (!String(control.value).match(pattern)) {\n return { urlProtocol: true };\n }\n }\n\n return null;\n }\n\n public static dateRange(control: AbstractControl): ValidationErrors | null {\n if (!control.value) {\n return null;\n }\n\n if (isObject(control.value)) {\n\n const start = control.value.start;\n const end = control.value.end;\n\n if ((!start && !end) || (isValid(start) && isValid(end))) {\n return null;\n }\n }\n\n return { dateRange: true };\n }\n\n public static func(\n control: AbstractControl, \n formFunction: (control: AbstractControl, data: any) => Observable<unknown> | Promise<unknown> | void, data: any,\n ): Observable<unknown> {\n let result: unknown;\n let stream$: Observable<unknown>;\n\n try {\n result = formFunction(control, data);\n } catch (err) {\n const error = err instanceof Error ? err.message : err;\n\n stream$ = throwError(() => error);\n }\n\n if (!stream$) {\n if (result instanceof Promise) {\n stream$ = from(result);\n } else if (isObservable(result)) {\n stream$ = result;\n } else {\n stream$ = of(null);\n }\n }\n\n return stream$\n .pipe(\n mapTo(null),\n catchError((err) => {\n return of({ validationError: err });\n }),\n take(1),\n );\n }\n}\n","export function isEnabled(value: any): boolean {\n return value !== 'false' && (value || value === '');\n}\n","import { Directive, Input, OnChanges } from '@angular/core';\nimport { AbstractControl, ValidationErrors } from '@angular/forms';\n\nimport { FsControlDirective } from './control.directive';\nimport { FsValidators } from '../../validators/validators';\nimport { VALIDATE_MESSAGE_PROVIDER } from '../../providers/validate-messages.provider';\nimport { FsValidator } from '../../interfaces/validator';\nimport { isEnabled } from '../../helpers/is-enabled';\n\n\n@Directive({\n selector: '[fsFormDateRange]',\n providers: [\n VALIDATE_MESSAGE_PROVIDER\n ],\n})\nexport class FsFormDateRangeDirective extends FsControlDirective implements OnChanges, FsValidator {\n\n @Input()\n public fsFormDateRange;\n\n @Input('fsFormDateRangeMessage')\n public set validationMessage(value: string) {\n this._validateMessages.dateRange = value;\n }\n\n public ngOnChanges() {\n this._control.updateValueAndValidity();\n }\n\n public validate(control: AbstractControl): ValidationErrors | null {\n if (isEnabled(this.fsFormDateRange)) {\n return FsValidators.dateRange(this._control);\n } else {\n return null;\n }\n }\n}\n","import { Directive, Input, OnChanges } from '@angular/core';\nimport { AbstractControl, ValidationErrors } from '@angular/forms';\n\nimport { FsControlDirective } from './control.directive';\nimport { FsValidators } from '../../validators/validators';\nimport { VALIDATE_MESSAGE_PROVIDER } from '../../providers/validate-messages.provider';\nimport { FsValidator } from '../../interfaces/validator';\nimport { isEnabled } from '../../helpers/is-enabled';\n\n\n@Directive({\n selector: '[fsFormEmail]',\n providers: [\n VALIDATE_MESSAGE_PROVIDER\n ],\n})\nexport class FsFormEmailDirective extends FsControlDirective implements OnChanges, FsValidator {\n\n @Input()\n public fsFormEmail;\n\n @Input('fsFormEmailMessage')\n public set validationMessage(value: string) {\n this._validateMessages.email = value;\n }\n\n public ngOnChanges() {\n this._control.updateValueAndValidity();\n }\n\n public validate(control: AbstractControl): ValidationErrors | null {\n if (isEnabled(this.fsFormEmail)) {\n return FsValidators.email(this._control);\n } else {\n return null;\n }\n }\n}\n","import { Directive, Input, OnChanges } from '@angular/core';\nimport { AbstractControl, ValidationErrors } from '@angular/forms';\n\nimport { FsControlDirective } from './control.directive';\nimport { FsValidators } from '../../validators/validators';\nimport { VALIDATE_MESSAGE_PROVIDER } from '../../providers/validate-messages.provider';\nimport { FsValidator } from '../../interfaces/validator';\nimport { isEnabled } from '../../helpers/is-enabled';\n\n\n@Directive({\n selector: '[fsFormEmails]',\n providers: [\n VALIDATE_MESSAGE_PROVIDER\n ],\n})\nexport class FsFormEmailsDirective extends FsControlDirective implements OnChanges, FsValidator {\n\n @Input()\n public fsFormEmails;\n\n @Input('fsFormEmailsMessage')\n public set validationMessage(value: string) {\n this._validateMessages.emails = value;\n }\n\n public ngOnChanges() {\n this._control.updateValueAndValidity();\n }\n\n public validate(control: AbstractControl): ValidationErrors | null {\n if (isEnabled(this.fsFormEmails)) {\n return FsValidators.emails(this._control);\n } else {\n return null;\n }\n }\n\n}\n","import { Directive, Input, OnChanges } from '@angular/core';\nimport { AbstractControl, ValidationErrors } from '@angular/forms';\n\nimport { Observable, of } from 'rxjs';\n\nimport { FsAsyncValidator } from '../../interfaces/async-validator';\nimport { VALIDATE_MESSAGE_PROVIDER } from '../../providers/validate-messages.provider';\nimport { FsValidators } from '../../validators/validators';\n\nimport { FsControlDirective } from './control.directive';\n\n\n@Directive({\n selector: '[fsFormFunction]',\n providers: [\n VALIDATE_MESSAGE_PROVIDER,\n ],\n})\nexport class FsFormFunctionDirective extends FsControlDirective implements OnChanges, FsAsyncValidator {\n\n @Input()\n public fsFormFunction;\n\n @Input()\n public fsFormFunctionData;\n\n @Input()\n public validateOnSubmit = false;\n\n public ngOnChanges(): void {\n this._control.updateValueAndValidity();\n }\n\n public validateAsync(control: AbstractControl): Promise<ValidationErrors | null> | Observable<ValidationErrors | null> {\n if(this.validateOnSubmit && !this._formDirective.validating) {\n return of(null);\n }\n \n return FsValidators.func(this._control, this.fsFormFunction, this.fsFormFunctionData);\n }\n\n}\n","import { Directive, Input, OnChanges } from '@angular/core';\nimport { AbstractControl, ValidationErrors } from '@angular/forms';\n\nimport { FsControlDirective } from './control.directive';\nimport { FsValidators } from '../../validators/validators';\nimport { VALIDATE_MESSAGE_PROVIDER } from '../../providers/validate-messages.provider';\nimport { FsValidator } from '../../interfaces/validator';\n\n\n@Directive({\n selector: '[fsFormGreaterEqual]',\n providers: [\n VALIDATE_MESSAGE_PROVIDER\n ],\n})\nexport class FsFormGreaterEqualDirective extends FsControlDirective implements OnChanges, FsValidator {\n\n @Input()\n public fsFormGreaterEqual;\n\n @Input('fsFormGreaterEqualMessage')\n public set validationMessage(value: string) {\n this._validateMessages.greater = value;\n }\n\n public ngOnChanges(): void {\n this._control.updateValueAndValidity();\n }\n\n public validate(control: AbstractControl): ValidationErrors | null {\n const greater = parseFloat(this.fsFormGreaterEqual);\n const value = parseFloat(this._control.value);\n\n if (!isNaN(greater) && !isNaN(value) && value < greater) {\n return { greaterEqual: { greater, actual: value } };\n }\n\n return FsValidators.numeric(this._control);\n }\n\n}\n","import { Directive, Input, OnChanges } from '@angular/core';\nimport { AbstractControl, ValidationErrors } from '@angular/forms';\n\nimport { FsControlDirective } from './control.directive';\nimport { FsValidators } from '../../validators/validators';\nimport { VALIDATE_MESSAGE_PROVIDER } from '../../providers/validate-messages.provider';\nimport { FsValidator } from '../../interfaces/validator';\n\n\n@Directive({\n selector: '[fsFormGreater]',\n providers: [\n VALIDATE_MESSAGE_PROVIDER\n ],\n})\nexport class FsFormGreaterDirective extends FsControlDirective implements OnChanges, FsValidator {\n\n @Input()\n public fsFormGreater;\n\n @Input('fsFormGreaterMessage')\n public set validationMessage(value: string) {\n this._validateMessages.greater = value;\n }\n\n public ngOnChanges(): void {\n this._control.updateValueAndValidity();\n }\n\n public validate(control: AbstractControl): ValidationErrors | null {\n const greater = parseFloat(this.fsFormGreater);\n const value = parseFloat(this._control.value);\n\n if (!isNaN(greater) && !isNaN(value) && value <= greater) {\n return { greater: { greater, actual: value } };\n }\n\n return FsValidators.numeric(this._control);\n }\n\n}\n","import { Directive, Input, OnChanges } from '@angular/core';\nimport { AbstractControl, ValidationErrors } from '@angular/forms';\n\nimport { isEnabled } from '../../helpers/is-enabled';\nimport { FsValidator } from '../../interfaces/validator';\nimport { VALIDATE_MESSAGE_PROVIDER } from '../../providers/validate-messages.provider';\nimport { FsValidators } from '../../validators/validators';\n\nimport { FsControlDirective } from './control.directive';\n\n\n@Directive({\n selector: '[fsFormInteger]',\n providers: [\n VALIDATE_MESSAGE_PROVIDER,\n ],\n})\nexport class FsFormIntegerDirective extends FsControlDirective implements OnChanges, FsValidator {\n\n @Input()\n public fsFormInteger;\n\n @Input('fsFormIntegerMessage')\n public set validationMessage(value: string) {\n this._validateMessages.integer = value;\n }\n\n public ngOnChanges() {\n this._control.updateValueAndValidity();\n }\n\n public validate(control: AbstractControl): ValidationErrors | null {\n if (isEnabled(this.fsFormInteger)) {\n return FsValidators.integer(this._control);\n }\n \n return null;\n \n }\n\n}\n","import { Directive, Input, OnChanges } from '@angular/core';\nimport { AbstractControl, ValidationErrors } from '@angular/forms';\n\nimport { FsControlDirective } from './control.directive';\nimport { FsValidators } from '../../validators/validators';\nimport { VALIDATE_MESSAGE_PROVIDER } from '../../providers/validate-messages.provider';\nimport { FsValidator } from '../../interfaces/validator';\n\n\n@Directive({\n selector: '[fsFormLesserEqual]',\n providers: [\n VALIDATE_MESSAGE_PROVIDER\n ],\n})\nexport class FsFormLesserEqualDirective extends FsControlDirective implements OnChanges, FsValidator {\n\n @Input()\n public fsFormLesserEqual;\n\n @Input('fsFormLesserEqualMessage')\n public set validationMessage(value: string) {\n this._validateMessages.lesser = value;\n }\n\n public ngOnChanges(): void {\n this._control.updateValueAndValidity();\n }\n\n public validate(control: AbstractControl): ValidationErrors | null {\n const lesser = parseFloat(this.fsFormLesserEqual);\n const value = parseFloat(this._control.value);\n\n if (!isNaN(lesser) && !isNaN(value) && value > lesser) {\n return { lesserEqual: { lesser, actual: value } };\n }\n\n return FsValidators.numeric(this._control);\n }\n\n}\n","import { Directive, Input, OnChanges } from '@angular/core';\nimport { AbstractControl, ValidationErrors } from '@angular/forms';\n\nimport { FsControlDirective } from './control.directive';\nimport { FsValidators } from '../../validators/validators';\nimport { VALIDATE_MESSAGE_PROVIDER } from '../../providers/validate-messages.provider';\nimport { FsValidator } from '../../interfaces/validator';\n\n\n@Directive({\n selector: '[fsFormLesser]',\n providers: [\n VALIDATE_MESSAGE_PROVIDER\n ],\n})\nexport class FsFormLesserDirective extends FsControlDirective implements OnChanges, FsValidator {\n\n @Input()\n public fsFormLesser;\n\n @Input('fsFormLesserMessage')\n public set validationMessage(value: string) {\n this._validateMessages.lesser = value;\n }\n\n public ngOnChanges(): void {\n this._control.updateValueAndValidity();\n }\n\n public validate(control: AbstractControl): ValidationErrors | null {\n const lesser = parseFloat(this.fsFormLesser);\n const value = parseFloat(this._control.value);\n\n if (!isNaN(lesser) && !isNaN(value) && value >= lesser) {\n return { lesser: { lesser, actual: value } };\n }\n\n return FsValidators.numeric(this._control);\n }\n\n}\n","import { Directive, Input, OnChanges } from '@angular/core';\nimport { AbstractControl, ValidationErrors, Validators } from '@angular/forms';\nimport { FsControlDirective } from './control.directive';\nimport { FsValidators } from '../../validators/validators';\nimport { VALIDATE_MESSAGE_PROVIDER } from '../../providers/validate-messages.provider';\nimport { FsValidator } from '../../interfaces/validator';\n\n\n@Directive({\n selector: '[fsFormMax]',\n providers: [\n VALIDATE_MESSAGE_PROVIDER\n ],\n})\nexport class FsFormMaxDirective extends FsControlDirective implements OnChanges, FsValidator {\n\n @Input()\n public fsFormMax: number;\n\n @Input('fsFormMaxMessage')\n public set validationMessage(value: string) {\n this._validateMessages.max = value;\n }\n\n public ngOnChanges(): void {\n this._control.updateValueAndValidity();\n }\n\n public validate(control: AbstractControl): ValidationErrors | null {\n return FsValidators.numeric(this._control) || Validators.max(this.fsFormMax)(this._control);\n }\n\n}\n","import { Directive, Input, OnChanges } from '@angular/core';\nimport { AbstractControl, ValidationErrors, Validators } from '@angular/forms';\n\nimport { FsControlDirective } from './control.directive';\nimport { VALIDATE_MESSAGE_PROVIDER } from '../../providers/validate-messages.provider';\nimport { FsValidator } from '../../interfaces/validator';\n\n\n@Directive({\n selector: '[fsFormMaxLength]',\n providers: [\n VALIDATE_MESSAGE_PROVIDER\n ],\n})\nexport class FsFormMaxLengthDirective extends FsControlDirective implements OnChanges, FsValidator {\n\n @Input()\n public fsFormMaxLength: number;\n\n @Input('fsFormMaxLengthMessage')\n public set validationMessage(value: string) {\n this._validateMessages.maxlength = value;\n }\n\n public ngOnChanges(): void {\n this._control.updateValueAndValidity();\n }\n\n public validate(control: AbstractControl): ValidationErrors | null {\n return Validators.maxLength(this.fsFormMaxLength)(this._control);\n }\n\n}\n","import { Directive, Input, OnChanges } from '@angular/core';\nimport { AbstractControl, ValidationErrors, Validators } from '@angular/forms';\n\nimport { FsControlDirective } from './control.directive';\nimport { FsValidators } from '../../validators/validators';\nimport { VALIDATE_MESSAGE_PROVIDER } from '../../providers/validate-messages.provider';\nimport { FsValidator } from '../../interfaces/validator';\n\n\n@Directive({\n selector: '[fsFormMin]',\n providers: [\n VALIDATE_MESSAGE_PROVIDER\n ],\n})\nexport class FsFormMinDirective extends FsControlDirective implements OnChanges, FsValidator {\n\n @Input()\n public fsFormMin;\n\n @Input('fsFormMinMessage')\n public set validationMessage(value: string) {\n this._validateMessages.min = value;\n }\n\n public ngOnChanges(): void {\n this._control.updateValueAndValidity();\n }\n\n public validate(control: AbstractControl): ValidationErrors | null {\n return FsValidators.numeric(this._control) || Validators.min(parseFloat(this.fsFormMin))(this._control);\n }\n\n}\n","import { Directive, Input, OnChanges } from '@angular/core';\nimport { AbstractControl, ValidationErrors, Validators } from '@angular/forms';\n\nimport { FsControlDirective } from './control.directive';\nimport { VALIDATE_MESSAGE_PROVIDER } from '../../providers/validate-messages.provider';\nimport { FsValidator } from '../../interfaces/validator';\n\n\n@Directive({\n selector: '[fsFormMinLength]',\n providers: [\n VALIDATE_MESSAGE_PROVIDER\n ],\n})\nexport class FsFormMinLengthDirective extends FsControlDirective implements OnChanges, FsValidator {\n\n @Input()\n public fsFormMinLength: number;\n\n @Input('fsFormMinLengthMessage')\n public set validationMessage(value: string) {\n this._validateMessages.minlength = value;\n }\n\n public ngOnChanges(): void {\n this._control.updateValueAndValidity();\n }\n\n public validate(control: AbstractControl): ValidationErrors | null {\n return Validators.minLength(this.fsFormMinLength)(this._control);\n }\n}\n","import { Directive, OnChanges } from '@angular/core';\n\nimport { FsControlDirective } from './control.directive';\nimport { VALIDATE_MESSAGE_PROVIDER } from '../../providers/validate-messages.provider';\n\n\n/**\n * This directive required for cases when we have custom Control like <fs-phone-field> but without any of our validators applied\n *\n * This directive required for automatic validation messages\n */\n@Directive({\n selector: '[ngModel]' +\n ':not([required])' +\n ':not([fsFormRequired])' +\n ':not([fsFormCompare])' +\n ':not([fsFormDateRange])' +\n ':not([fsFormEmail])' +\n ':not([fsFormEmails])' +\n ':not([fsFormFunction])' +\n ':not([fsFormGreater])' +\n ':not([fsFormGreaterEqual])' +\n ':not([fsFormInteger])' +\n ':not([fsFormLesser])' +\n ':not([fsFormMax])' +\n ':not([fsFormMaxLength])' +\n ':not([fsFormMin])' +\n ':not([fsFormMinLength])' +\n ':not([fsFormNumeric])' +\n ':not([fsFormPattern])' +\n ':not([fsFormPhone])' +\n ':not([fsFormUrl])' +\n ':not([validate])',\n providers: [\n VALIDATE_MESSAGE_PROVIDER\n ],\n})\nexport class FsFormNoFsValidatorsDirective extends FsControlDirective implements OnChanges {\n\n public ngOnChanges(): void {\n this._control.updateValueAndValidity();\n }\n\n protected _subscribeToStatusChagnes(): void {\n if (!!this._control.validator || !!this._control.asyncValidator) {\n super._subscribeToStatusChagnes();\n }\n }\n\n}\n","import { Directive, Input, OnChanges } from '@angular/core';\nimport { AbstractControl, ValidationErrors } from '@angular/forms';\n\nimport { FsControlDirective } from './control.directive';\nimport { FsValidators } from '../../validators/validators';\nimport { VALIDATE_MESSAGE_PROVIDER } from '../../providers/validate-messages.provider';\nimport { FsValidator } from '../../interfaces/validator';\nimport { isEnabled } from '../../helpers/is-enabled';\n\n\n@Directive({\n selector: '[fsFormNumeric]',\n providers: [\n VALIDATE_MESSAGE_PROVIDER\n ],\n})\nexport class FsFormNumericDirective extends FsControlDirective implements OnChanges, FsValidator {\n\n @Input()\n public fsFormNumeric;\n\n @Input('fsFormNumericMessage')\n public set validationMessage(value: string) {\n this._validateMessages.numeric = value;\n }\n\n public ngOnChanges(): void {\n this._control.updateValueAndValidity();\n }\n\n public validate(control: AbstractControl): ValidationErrors | null {\n if (isEnabled(this.fsFormNumeric)) {\n return FsValidators.numeric(this._control);\n } else {\n return null;\n }\n }\n\n}\n","import { Directive, Input, OnChanges } from '@angular/core';\nimport { AbstractControl, ValidationErrors, Validators } from '@angular/forms';\nimport { FsControlDirective } from './control.directive';\nimport { VALIDATE_MESSAGE_PROVIDER } from '../../providers/validate-messages.provider';\nimport { FsValidator } from '../../interfaces/validator';\n\n\n@Directive({\n selector: '[fsFormPattern]',\n providers: [\n VALIDATE_MESSAGE_PROVIDER\n ],\n})\nexport class FsFormPatternDirective extends FsControlDirective implements OnChanges, FsValidator {\n\n @Input()\n public fsFormPattern: RegExp | string;\n\n @Input('fsFormPatternMessage')\n public set validationMessage(value: string) {\n this._validateMessages.pattern = value;\n }\n\n public ngOnChanges(): void {\n this._control.updateValueAndValidity();\n }\n\n public validate(control: AbstractControl): ValidationErrors | null {\n return Validators.pattern(this.fsFormPattern)(this._control);\n }\n\n}\n","import { Directive, Input, OnChanges } from '@angular/core';\nimport { AbstractControl, ValidationErrors } from '@angular/forms';\n\nimport { FsControlDirective } from './control.directive';\nimport { FsValidators } from '../../validators/validators';\nimport { VALIDATE_MESSAGE_PROVIDER } from '../../providers/validate-messages.provider';\nimport { FsValidator } from '../../interfaces/validator';\nimport { isEnabled } from '../../helpers/is-enabled';\n\n\n@Directive({\n selector: '[fsFormPhone]',\n providers: [\n VALIDATE_MESSAGE_PROVIDER\n ],\n})\nexport class FsFormPhoneDirective extends FsControlDirective implements OnChanges, FsValidator {\n\n @Input()\n public fsFormPhone;\n\n @Input('fsFormPhoneMessage')\n public set validationMessage(value: string) {\n this._validateMessages.phone = value;\n }\n\n public ngOnChanges() {\n this._control.updateValueAndValidity();\n }\n\n public validate(control: AbstractControl): ValidationErrors | null {\n if (isEnabled(this.fsFormPhone)) {\n return FsValidators.phone(this._control);\n } else {\n return null;\n }\n }\n\n}\n","import { Directive, Input, OnChanges } from '@angular/core';\nimport { AbstractControl, ValidationErrors, Validators } from '@angular/forms';\n\nimport { isEnabled } from '../../helpers/is-enabled';\nimport { FsValidator } from '../../interfaces/validator';\nimport { VALIDATE_MESSAGE_PROVIDER } from '../../providers/validate-messages.provider';\n\nimport { FsControlDirective } from './control.directive';\n\n\n@Directive({\n selector: '[fsFormRequired],[ngModel][required]',\n providers: [\n VALIDATE_MESSAGE_PROVIDER,\n ],\n})\nexport class FsFormRequiredDirective extends FsControlDirective implements OnChanges, FsValidator {\n public required = false;\n\n @Input('fsFormRequired')\n public set setFsFormRequired(value) {\n this.required = isEnabled(value);\n }\n\n @Input('required')\n public set setRequired(value) {\n this.required = isEnabled(value);\n }\n\n @Input('fsFormRequiredMessage')\n public set validationMessage(value: string) {\n this._validateMessages.required = value;\n }\n\n public ngOnChanges(): void {\n this._control.updateValueAndValidity();\n }\n\n public validate(control: AbstractControl): ValidationErrors | null {\n if (this.required) {\n return Validators.required(this._control);\n }\n \n return null;\n \n }\n\n public render() {\n const wrapper = this.getWrapperElement();\n\n if (wrapper && this.getlabelSelector()) {\n const labelWrapper = wrapper.querySelector(this.getlabelSelector());\n\n // Adding class fs-form-label-requried adds the * to the label\n if (labelWrapper) {\n if (this.required) {\n this._renderer2.addClass(labelWrapper, 'fs-form-label-required');\n } else {\n this._renderer2.removeClass(labelWrapper, 'fs-form-label-required');\n }\n }\n }\n\n super.render();\n }\n}\n","import { Directive, Input, OnChanges } from '@angular/core';\nimport { AbstractControl, ValidationErrors } from '@angular/forms';\n\nimport { isEnabled } from '../../helpers/is-enabled';\nimport { FsValidator } from '../../interfaces/validator';\nimport { VALIDATE_MESSAGE_PROVIDER } from '../../providers/validate-messages.provider';\nimport { FsValidators } from '../../validators/validators';\n\nimport { FsControlDirective } from './control.directive';\n\n\n@Directive({\n selector: '[fsFormUrl]',\n providers: [\n VALIDATE_MESSAGE_PROVIDER,\n ],\n})\nexport class FsFormUrlDirective extends FsControlDirective implements OnChanges, FsValidator {\n\n @Input()\n public fsFormUrl;\n\n @Input()\n public fsFormUrlProtocol = true;\n\n @Input('fsFormUrlMessage')\n public set validationMessage(value: string) {\n this._validateMessages.url = value;\n }\n\n public ngOnChanges() {\n this._control.updateValueAndValidity();\n }\n\n public validate(control: AbstractControl): ValidationErrors | null {\n if (isEnabled(this.fsFormUrl)) {\n return FsValidators.url(this._control, this.fsFormUrlProtocol);\n }\n \n return null;\n \n }\n\n}\n","import { Directive, Input, OnChanges } from '@angular/core';\nimport { AbstractControl, ValidationErrors } from '@angular/forms';\n\nimport { Observable, of } from 'rxjs';\n\nimport { FsAsyncValidator } from '../../interfaces/async-validator';\nimport { VALIDATE_MESSAGE_PROVIDER } from '../../providers/validate-messages.provider';\nimport { FsValidators } from '../../validators/validators';\n\nimport { FsControlDirective } from './control.directive';\n\n\n@Directive({\n selector: '[validate]',\n providers: [\n VALIDATE_MESSAGE_PROVIDER,\n ],\n})\nexport class FsFormValidateDirective extends FsControlDirective implements OnChanges, FsAsyncValidator {\n\n @Input('validate')\n public validateFn: (control: AbstractControl, data: any) => Observable<unknown> | Promise<unknown> | void;\n\n @Input('validateData')\n public validateFnData;\n\n @Input()\n public validateOnSubmit = false;\n\n public ngOnChanges(): void {\n this._control.updateValueAndValidity();\n }\n\n public validateAsync(control: AbstractControl): Promise<ValidationErrors | null> | Observable<ValidationErrors | null> {\n if(this.validateOnSubmit && !this._formDirective.validating) {\n return of(null);\n }\n\n return FsValidators.func(this._control, this.validateFn, this.validateFnData);\n }\n\n}\n","import { AfterContentInit, ContentChildren, Directive, inject } from '@angular/core';\nimport { NgForm, NgModel } from '@angular/forms';\n\n\n@Directive({\n selector: '[fsFormTemplate],fs-form-template',\n})\nexport class FsFormTemplateDirective implements AfterContentInit {\n\n @ContentChildren(NgModel)\n protected _projectedControls: NgModel[];\n\n protected _ngForm: NgForm = inject(NgForm);\n\n public ngAfterContentInit(): void {\n this._projectedControls.forEach((control: NgModel) => {\n this._ngForm.addControl(control);\n });\n }\n}\n","import { Directive } from '@angular/core';\n\nimport { FsButtonDirective } from './button.directive';\n\n\n@Directive({\n selector: 'dummy-selector',\n})\nexport class FsSubmitButtonDirective extends FsButtonDirective {\n}\n","import {\n TemplateRef,\n Directive,\n Input,\n ViewContainerRef,\n Injector,\n inject,\n OnInit,\n} from '@angular/core';\n\n@Directive({\n selector: '[fsFormTemplateOutlet]',\n})\nexport class FsFormTemplateOutletDirective implements OnInit {\n\n @Input()\n public template: TemplateRef<any>;\n\n @Input()\n public context: Record<string, unknown> = {};\n\n protected _viewContainerRef: ViewContainerRef = inject(ViewContainerRef)\n protected _injector: Injector = inject(Injector);\n\n public ngOnInit() {\n this._viewContainerRef.createEmbeddedView(\n this.template,\n this.context,\n {\n injector: this._injector,\n },\n )\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { ModuleWithProviders, NgModule } from '@angular/core';\nimport { FormGroupDirective, FormsModule, NgForm, UntypedFormControl } from '@angular/forms';\n\nimport { MatButtonModule } from '@angular/material/button';\nimport { ErrorStateMatcher, ShowOnDirtyErrorStateMatcher } from '@angular/material/core';\nimport { MatDialogModule } from '@angular/material/dialog';\n\nimport { FsDialogModule } from '@firestitch/dialog';\n\nimport {\n FsFormDialogActionsComponent,\n} from './components';\nimport {\n FsFormGreaterEqualDirective, FsFormLesserEqualDirective,\n FsFormTemplateDirective, FsSubmitButtonDirective,\n} from './directives';\nimport { FsButtonDirective } from './directives/button.directive';\nimport { FsFormDialogCloseDirective } from './directives/form-dialog-close.directive';\nimport { FsFormGroupDirective } from './directives/form-group/form-group.directive';\nimport { FsFormDirective } from './directives/form/form.directive';\nimport { FsFormCompareDirective } from './directives/validators/compare.directive';\nimport { FsControlDirective } from './directives/validators/control.directive';\nimport { FsFormDateRangeDirective } from './directives/validators/daterange.directive';\nimport { FsFormEmailDirective } from './directives/validators/email.directive';\nimport { FsFormEmailsDirective } from './directives/validators/emails.directive';\nimport { FsFormFunctionDirective } from './directives/validators/function.directive';\nimport { FsFormGreaterDirective } from './directives/validators/greater.directive';\nimport { FsFormIntegerDirective } from './directives/validators/integer.directive';\nimport { FsFormLesserDirective } from './directives/validators/lesser.directive';\nimport { FsFormMaxDirective } from './directives/validators/max.directive';\nimport { FsFormMaxLengthDirective } from './directives/validators/maxlength.directive';\nimport { FsFormMinDirective } from './directives/validators/min.directive';\nimport { FsFormMinLengthDirective } from './directives/validators/minlength.directive';\nimport { FsFormNoFsValidatorsDirective } from './directives/validators/no-fs-validators.directive';\nimport { FsFormNumericDirective } from './directives/validators/numeric.directive';\nimport { FsFormPatternDirective } from './directives/validators/pattern.directive';\nimport { FsFormPhoneDirective } from './directives/validators/phone.directive';\nimport { FsFormRequiredDirective } from './directives/validators/required.directive';\nimport { FsFormUrlDirective } from './directives/validators/url.directive';\nimport { FsFormValidateDirective } from './directives/validators/validate.directive';\nimport { FsFormTemplateOutletDirective } from './directives/form-template-outlet.directive';\n\n\n@NgModule({\n imports: [\n CommonModule,\n FormsModule,\n\n MatButtonModule,\n MatDialogModule,\n MatDialogModule,\n\n FsDialogModule,\n ],\n declarations: [\n FsFormDirective,\n FsControlDirective,\n FsFormRequiredDirective,\n FsFormMinDirective,\n FsFormMaxDirective,\n FsFormMinLengthDirective,\n FsFormMaxLengthDirective,\n FsFormEmailDirective,\n FsFormEmailsDirective,\n FsFormPhoneDirective,\n FsFormCompareDirective,\n FsFormIntegerDirective,\n FsFormNumericDirective,\n FsFormPatternDirective,\n FsFormFunctionDirective,\n FsFormDateRangeDirective,\n FsFormGreaterDirective,\n FsFormGreaterEqualDirective,\n FsFormLesserDirective,\n FsFormLesserEqualDirective,\n FsFormUrlDirective,\n FsFormDialogCloseDirective,\n FsFormValidateDirective,\n FsFormDialogActionsComponent,\n FsFormNoFsValidatorsDirective,\n FsButtonDirective,\n FsSubmitButtonDirective,\n FsFormTemplateDirective,\n FsFormTemplateDirective,\n FsFormTemplateOutletDirective,\n FsFormGroupDirective,\n ],\n exports: [\n FsFormDirective,\n FsControlDirective,\n FsFormRequiredDirective,\n FsFormMinDirective,\n FsFormMaxDirective,\n FsFormMinLengthDirective,\n FsFormMaxLengthDirective,\n FsFormEmailDirective,\n FsFormEmailsDirective,\n FsFormPhoneDirective,\n FsFormCompareDirective,\n FsFormIntegerDirective,\n FsFormNumericDirective,\n FsFormPatternDirective,\n FsFormFunctionDirective,\n FsFormDateRangeDirective,\n FsFormGreaterDirective,\n FsFormGreaterEqualDirective,\n FsFormLesserDirective,\n FsFormLesserEqualDirective,\n FsFormUrlDirective,\n FsFormDialogCloseDirective,\n FsFormValidateDirective,\n FsFormDialogActionsComponent,\n FsFormNoFsValidatorsDirective,\n FsButtonDirective,\n FsSubmitButtonDirective,\n FsFormTemplateDirective,\n FsFormTemplateDirective,\n FsFormTemplateOutletDirective,\n FsFormGroupDirective,\n ],\n providers: [\n {\n provide: ErrorStateMatcher,\n useClass: ShowOnDirtyErrorStateMatcher,\n },\n ],\n})\nexport class FsFormModule {\n public static forRoot(): ModuleWithProviders<FsFormModule> {\n\n /**\n * Hack: https://github.com/angular/components/issues/20097\n */\n ErrorStateMatcher.prototype\n .isErrorState = (\n control: UntypedFormControl | null,\n form: FormGroupDirective | NgForm | null,\n ): boolean => {\n return control?.invalid && control?.touched && control?.dirty;\n };\n\n return {\n ngModule: FsFormModule,\n };\n }\n}\n","// Modules\nexport { FsFormModule } from './app/fs-form.module';\n\n// Services\nexport { FsForm } from './app/services/fsform.service';\n\n// Directives\nexport { FsFormGreaterDirective, FsFormGreaterEqualDirective, FsFormLesserEqualDirective, FsFormTemplateDirective } from './app/directives';\nexport { FsButtonDirective } from './app/directives/button.directive';\nexport { FsFormDialogCloseDirective } from './app/directives/form-dialog-close.directive';\nexport { FsFormGroupDirective } from './app/directives/form-group/form-group.directive';\nexport { FsFormDirective } from './app/directives/form/form.directive';\nexport { FsSubmitButtonDirective } from './app/directives/submit-button.directive';\nexport { FsFormCompareDirective } from './app/directives/validators/compare.directive';\nexport { FsControlDirective } from './app/directives/validators/control.directive';\nexport { FsFormDateRangeDirective } from './app/directives/validators/daterange.directive';\nexport { FsFormEmailDirective } from './app/directives/validators/email.directive';\nexport { FsFormEmailsDirective } from './app/directives/validators/emails.directive';\nexport { FsFormFunctionDirective } from './app/directives/validators/function.directive';\nexport { FsFormIntegerDirective } from './app/directives/validators/integer.directive';\nexport { FsFormLesserDirective } from './app/directives/validators/lesser.directive';\nexport { FsFormMaxDirective } from './app/directives/validators/max.directive';\nexport { FsFormMaxLengthDirective } from './app/directives/validators/maxlength.directive';\nexport { FsFormMinDirective } from './app/directives/validators/min.directive';\nexport { FsFormMinLengthDirective } from './app/directives/validators/minlength.directive';\nexport { FsFormNoFsValidatorsDirective } from './app/directives/validators/no-fs-validators.directive';\nexport { FsFormNumericDirective } from './app/directives/validators/numeric.directive';\nexport { FsFormPatternDirective } from './app/directives/validators/pattern.directive';\nexport { FsFormPhoneDirective } from './app/directives/validators/phone.directive';\nexport { FsFormRequiredDirective } from './app/directives/validators/required.directive';\nexport { FsFormUrlDirective } from './app/directives/validators/url.directive';\nexport { FsFormValidateDirective } from './app/directives/validators/validate.directive';\nexport { FsFormTemplateOutletDirective } from './app/directives/form-template-outlet.directive';\n\n// Components\nexport { FsFormDialogActionsComponent } from './app/components';\n\nexport { FsValidators } from './app/validators/validators';\n\nexport { FormDeactivateGuard } from './app/guards/form-deactivate.guard';\n\n// Interfaces\nexport { ConfirmConfig } from './app/interfaces/confirm-config';\nexport { SubmitEvent } from './app/interfaces/submit-event';\nexport { SubmittedEvent } from './app/interfaces/submitted-event';\n\n// Enums\nexport { ConfirmResult } from './app/enums/confirm-result';\nexport { FormStatus } from './app/enums/form-status';\n\n\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i1.FsForm","i2","i3.FsFormGroupDirective","i4","i1.FsFormDirective","i5.FsFormDialogCloseDirective","i6.FsButtonDirective","i1"],"mappings":"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"}
|