tnx-shared 5.1.413 → 5.1.415
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundles/tnx-shared.umd.js +46 -23
- package/bundles/tnx-shared.umd.js.map +1 -1
- package/bundles/tnx-shared.umd.min.js +1 -1
- package/bundles/tnx-shared.umd.min.js.map +1 -1
- package/classes/base/list-component-base.d.ts +2 -0
- package/classes/base/list-component-base.d.ts.map +1 -1
- package/components/user-picker/user-picker.component.d.ts.map +1 -1
- package/configs/component-contants.d.ts +6 -0
- package/configs/component-contants.d.ts.map +1 -1
- package/esm2015/classes/base/list-component-base.js +27 -19
- package/esm2015/components/crud/crud-list/crud-list.component.js +2 -2
- package/esm2015/components/service-file-upload/service-file-upload.component.js +2 -2
- package/esm2015/components/user-picker/user-picker.component.js +8 -5
- package/esm2015/configs/component-contants.js +14 -2
- package/esm2015/directives/authorize.directive.js +1 -1
- package/esm2015/services/role.service.js +1 -1
- package/fesm2015/tnx-shared.js +46 -23
- package/fesm2015/tnx-shared.js.map +1 -1
- package/package.json +2 -2
- package/services/role.service.d.ts.map +1 -1
- package/tnx-shared.metadata.json +1 -1
|
@@ -415,7 +415,7 @@ export class ServiceFileUploadComponent extends ComponentBase {
|
|
|
415
415
|
ServiceFileUploadComponent.decorators = [
|
|
416
416
|
{ type: Component, args: [{
|
|
417
417
|
selector: 'service-file-upload',
|
|
418
|
-
template: "<div class=\"file-upload\">\r\n <div class=\"fl-icon\">\r\n <i *ngIf=\"loading\" class=\"pi pi-spin pi-spinner\"></i>\r\n <i *ngIf=\"!loading\" class=\"pi pi-file-o\"></i>\r\n </div>\r\n\r\n <div class=\"fl-file-name\" (click)=\"openFileViewer()\">\r\n <div>\r\n <ng-container *ngIf=\"!showNoti\">\r\n <span pTooltip=\"{{selectedFileName}}\">{{selectedFileNameShort}}</span>\r\n <span *ngIf=\"extension\">.{{extension}} </span>\r\n </ng-container>\r\n <span *ngIf=\"showNoti\"> {{notification}} </span>\r\n </div>\r\n </div>\r\n\r\n <div class=\"fl-buttons\">\r\n <button *ngIf=\"!hasFile && !readonly\" pTooltip=\"Ch\u1ECDn file\" class=\"fl-choose\"\r\n class=\"link-or-action p-button-text p-button-rounded fl-choose\" tooltipPosition=\"top\" pButton type=\"button\"\r\n icon=\"pi pi-plus\" (click)=\"onOpenSelect()\"></button>\r\n\r\n <button *ngIf=\"hasFile && !readonly\" (click)=\"onRemoveFile()\"\r\n class=\"link-or-action p-button-text p-button-rounded p-button-danger fl-remove\" pTooltip=\"X\u00F3a file\"\r\n tooltipPosition=\"top\" pButton type=\"button\" icon=\"pi pi-trash\"></button>\r\n\r\n <button [disabled]=\"!menu || !menu.length\" type=\"button\" pButton icon=\"pi pi-ellipsis-v\"\r\n class=\"link-or-action p-button-text p-button-rounded\" pTooltip=\"Th\u00EAm\" tooltipPosition=\"top\"\r\n (click)=\"showContextMenu($event)\"></button>\r\n </div>\r\n\r\n <div style=\"display: none;\">\r\n <p-fileUpload #file [accept]=\"accept\" class=\"file-upload\" mode=\"basic\" [chooseLabel]=\"chooseLabel\" name=\"file[]\"\r\n [maxFileSize]=\"control.maxFileSize\" pTooltip=\"Ch\u1ECDn t\u1EEB m\u00E1y t\u00EDnh\" toolStipPosition=\"top\" [multiple]=\"false\"\r\n [invalidFileSizeMessageSummary]=\"control.invalidFileSizeMessageSummary\"\r\n [invalidFileSizeMessageDetail]=\"control.invalidFileSizeMessageDetail\"\r\n [invalidFileTypeMessageSummary]=\"control.invalidFileTypeMessageSummary\"\r\n [invalidFileTypeMessageDetail]=\"control.invalidFileTypeMessageDetail\"\r\n [invalidFileLimitMessageSummary]=\"control.invalidFileLimitMessageSummary\"\r\n [invalidFileLimitMessageDetail]=\"control.invalidFileLimitMessageDetail\" (onSelect)=\"onSelectFile($event)\">\r\n </p-fileUpload>\r\n </div>\r\n\r\n</div>\r\n\r\n<p-contextMenu #contextMenu [appendTo]=\"'body'\" [model]=\"menu\" styleClass=\"fm-contextMenu-panel\">\r\n</p-contextMenu>\r\n\r\n<!-- Xem file tr\u1EF1c tuy\u1EBFn -->\r\n<file-viewer *ngIf=\"forms.fileViewer.show\" [parentModel]=\"model\" [parentContext]=\"context\"
|
|
418
|
+
template: "<div class=\"file-upload\">\r\n <div class=\"fl-icon\">\r\n <i *ngIf=\"loading\" class=\"pi pi-spin pi-spinner\"></i>\r\n <i *ngIf=\"!loading\" class=\"pi pi-file-o\"></i>\r\n </div>\r\n\r\n <div class=\"fl-file-name\" (click)=\"openFileViewer()\">\r\n <div>\r\n <ng-container *ngIf=\"!showNoti\">\r\n <span pTooltip=\"{{selectedFileName}}\">{{selectedFileNameShort}}</span>\r\n <span *ngIf=\"extension\">.{{extension}} </span>\r\n </ng-container>\r\n <span *ngIf=\"showNoti\"> {{notification}} </span>\r\n </div>\r\n </div>\r\n\r\n <div class=\"fl-buttons\">\r\n <button *ngIf=\"!hasFile && !readonly\" pTooltip=\"Ch\u1ECDn file\" class=\"fl-choose\"\r\n class=\"link-or-action p-button-text p-button-rounded fl-choose\" tooltipPosition=\"top\" pButton type=\"button\"\r\n icon=\"pi pi-plus\" (click)=\"onOpenSelect()\"></button>\r\n\r\n <button *ngIf=\"hasFile && !readonly\" (click)=\"onRemoveFile()\"\r\n class=\"link-or-action p-button-text p-button-rounded p-button-danger fl-remove\" pTooltip=\"X\u00F3a file\"\r\n tooltipPosition=\"top\" pButton type=\"button\" icon=\"pi pi-trash\"></button>\r\n\r\n <button [disabled]=\"!menu || !menu.length\" type=\"button\" pButton icon=\"pi pi-ellipsis-v\"\r\n class=\"link-or-action p-button-text p-button-rounded\" pTooltip=\"Th\u00EAm\" tooltipPosition=\"top\"\r\n (click)=\"showContextMenu($event)\"></button>\r\n </div>\r\n\r\n <div style=\"display: none;\">\r\n <p-fileUpload #file [accept]=\"accept\" class=\"file-upload\" mode=\"basic\" [chooseLabel]=\"chooseLabel\" name=\"file[]\"\r\n [maxFileSize]=\"control.maxFileSize\" pTooltip=\"Ch\u1ECDn t\u1EEB m\u00E1y t\u00EDnh\" toolStipPosition=\"top\" [multiple]=\"false\"\r\n [invalidFileSizeMessageSummary]=\"control.invalidFileSizeMessageSummary\"\r\n [invalidFileSizeMessageDetail]=\"control.invalidFileSizeMessageDetail\"\r\n [invalidFileTypeMessageSummary]=\"control.invalidFileTypeMessageSummary\"\r\n [invalidFileTypeMessageDetail]=\"control.invalidFileTypeMessageDetail\"\r\n [invalidFileLimitMessageSummary]=\"control.invalidFileLimitMessageSummary\"\r\n [invalidFileLimitMessageDetail]=\"control.invalidFileLimitMessageDetail\" (onSelect)=\"onSelectFile($event)\">\r\n </p-fileUpload>\r\n </div>\r\n\r\n</div>\r\n\r\n<p-contextMenu #contextMenu [appendTo]=\"'body'\" [model]=\"menu\" styleClass=\"fm-contextMenu-panel\">\r\n</p-contextMenu>\r\n\r\n<!-- Xem file tr\u1EF1c tuy\u1EBFn -->\r\n<file-viewer #fileViewerNew *ngIf=\"forms.fileViewer.show\" [parentModel]=\"model\" [parentContext]=\"context\"\r\n [readonly]=\"readonly\" [model]=\"forms.fileViewer.formData\" (onClose)=\"this.forms.fileViewer.show = false;\">\r\n</file-viewer>",
|
|
419
419
|
providers: [
|
|
420
420
|
{
|
|
421
421
|
provide: NG_VALUE_ACCESSOR,
|
|
@@ -455,4 +455,4 @@ ServiceFileUploadComponent.propDecorators = {
|
|
|
455
455
|
onRemove: [{ type: Output }],
|
|
456
456
|
onChanged: [{ type: Output }]
|
|
457
457
|
};
|
|
458
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS1maWxlLXVwbG9hZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4vLi4vcHJvamVjdHMvdG54LXNoYXJlZC9zcmMvbGliLyIsInNvdXJjZXMiOlsiY29tcG9uZW50cy9zZXJ2aWNlLWZpbGUtdXBsb2FkL3NlcnZpY2UtZmlsZS11cGxvYWQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQ0gsU0FBUyxFQUNULFlBQVksRUFDWixVQUFVLEVBQ1YsUUFBUSxFQUNSLEtBQUssRUFHTCxNQUFNLEVBQ04sU0FBUyxFQUNaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBd0IsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV6RSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDNUQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzFELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUU5RCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUN0RixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDbEUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDcEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBRTNFLE9BQU8sRUFBRSxXQUFXLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDOUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzlELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNsRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDaEUsT0FB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O2dCQUNwQixRQUFRO2dCQUNSLE9BQU8sRUFBRSxJQUFJLENBQUMsV0FBVztnQkFDekIsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO2dCQUNuQixTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVM7YUFDNUIsQ0FBQztZQUNGLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDdEMsQ0FBQztLQUFBOzs7WUFsZEosU0FBUyxTQUFDO2dCQUNQLFFBQVEsRUFBRSxxQkFBcUI7Z0JBQy9CLCszRkFBbUQ7Z0JBRW5ELFNBQVMsRUFBRTtvQkFDUDt3QkFDSSxPQUFPLEVBQUUsaUJBQWlCO3dCQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLDBCQUEwQixDQUFDO3dCQUN6RCxLQUFLLEVBQUUsSUFBSTtxQkFDZDtvQkFDRCx1QkFBdUI7aUJBQzFCOzthQUNKOzs7WUFmUSxpQkFBaUI7WUFWakIsY0FBYztZQUZkLG1CQUFtQjtZQUduQixlQUFlO1lBSmYsYUFBYTtZQUtiLFdBQVc7WUFIWCxlQUFlO1lBUWYsbUJBQW1CO1lBRW5CLG1CQUFtQjtZQS9CeEIsUUFBUTs7OzBCQWlEUCxTQUFTLFNBQUMsYUFBYTttQkFDdkIsU0FBUyxTQUFDLE1BQU07Z0NBQ2hCLFNBQVMsU0FBQyxtQkFBbUI7NEJBQzdCLFNBQVMsU0FBQyxlQUFlOzhCQUV6QixLQUFLO3NCQUNMLEtBQUs7MEJBQ0wsS0FBSztxQkFDTCxLQUFLO3dCQUVMLEtBQUs7MEJBSUwsS0FBSztxQkFFTCxNQUFNO3VCQUNOLE1BQU07dUJBQ04sTUFBTTt3QkFDTixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICAgIENvbXBvbmVudCxcclxuICAgIEV2ZW50RW1pdHRlcixcclxuICAgIGZvcndhcmRSZWYsXHJcbiAgICBJbmplY3RvcixcclxuICAgIElucHV0LFxyXG4gICAgT25EZXN0cm95LFxyXG4gICAgT25Jbml0LFxyXG4gICAgT3V0cHV0LFxyXG4gICAgVmlld0NoaWxkXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IENvbnRleHRNZW51IH0gZnJvbSAndG4tY3VzdG9tLXByaW1lbmcvY29udGV4dG1lbnUnO1xyXG5pbXBvcnQgeyBGaWxlVXBsb2FkIH0gZnJvbSAndG4tY3VzdG9tLXByaW1lbmcvZmlsZXVwbG9hZCc7XHJcbmltcG9ydCB7IE92ZXJsYXlQYW5lbCB9IGZyb20gJ3RuLWN1c3RvbS1wcmltZW5nL292ZXJsYXlwYW5lbCc7XHJcblxyXG5pbXBvcnQgeyBDb21wb25lbnRDb250ZXh0U2VydmljZSB9IGZyb20gJy4uLy4uL2FwcC1jb250ZXh0L2NvbXBvbmVudC1jb250ZXh0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb21wb25lbnRCYXNlIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9iYXNlL2NvbXBvbmVudC1iYXNlJztcclxuaW1wb3J0IHsgRmlsZVVwbG9hZENvbnRyb2xTY2hlbWEgfSBmcm9tICcuLi8uLi9jbGFzc2VzL2Zvcm0tc2NoZW1hJztcclxuaW1wb3J0IHsgQ29tQ3R4Q29uc3RhbnRzIH0gZnJvbSAnLi4vLi4vY29uZmlncy9jb21wb25lbnQtY29udGV4dC5jb25zdGFudCc7XHJcbmltcG9ydCB7IE1vZHVsZUNvbmZpZyB9IGZyb20gJy4uLy4uL2NvbmZpZ3MvbW9kdWxlLWNvbmZpZyc7XHJcbmltcG9ydCB7IENvbW1hbmRUeXBlLCBUbkNsaWVudENvbW1hbmQgfSBmcm9tICcuLi8uLi9tb2RlbHMvdG4tY2xpZW50LWNvbW1hbmQnO1xyXG5pbXBvcnQgeyBBdXRoZW5TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYXV0aGVuLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBNb2R1bGVDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbW9kdWxlLWNvbmZpZy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTm90aWZpZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbm90aWZpZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IFNpZ25hbFJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc2lnbmFsci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVG5DbGllbnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdG4tY2xpZW50LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBVc2VyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3VzZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IEZpbGVWaWV3ZXJDb21wb25lbnQgfSBmcm9tICcuLi9maWxlLWV4cGxvcmVyL2ZpbGUtdmlld2VyL2ZpbGUtdmlld2VyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEZpbGVFeHBsb3Jlckl0ZW0gfSBmcm9tICcuLi9maWxlLWV4cGxvcmVyL21vZGVscy9maWxlLWV4cGxvcmVyLWl0ZW0nO1xyXG5pbXBvcnQgeyBHZW5lcmF0ZUxpbmtEb3dubG9hZERUTyB9IGZyb20gJy4uL2ZpbGUtZXhwbG9yZXIvbW9kZWxzL2dlbmVyYXRlLWxpbmstZG93bmxvYWQtZHRvJztcclxuaW1wb3J0IHsgSVNlcnZpY2VGaWxlVXBsb2FkQ29tcG9uZW50IH0gZnJvbSAnLi4vZmlsZS1leHBsb3Jlci9tb2RlbHMvaW50ZXJmYWNlcyc7XHJcbmltcG9ydCB7IERvd25sb2FkTGlua1NlcnZpY2UgfSBmcm9tICcuLi9maWxlLWV4cGxvcmVyL3NlcnZpY2VzL2Rvd25sb2FkLWxpbmsuc2VydmljZSc7XHJcbmltcG9ydCB7IEZpbGVEYXRhU2VydmljZSB9IGZyb20gJy4uL2ZpbGUtZXhwbG9yZXIvc2VydmljZXMvZmlsZS1kYXRhLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBGaWxlRXhwbG9yZXJTZXJ2aWNlIH0gZnJvbSAnLi4vZmlsZS1leHBsb3Jlci9zZXJ2aWNlcy9maWxlLWV4cGxvcmVyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBGaWxlT2JqZWN0U2VydmljZSB9IGZyb20gJy4uL2ZpbGUtZXhwbG9yZXIvc2VydmljZXMvZmlsZS1vYmplY3Quc2VydmljZSc7XHJcblxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ3NlcnZpY2UtZmlsZS11cGxvYWQnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL3NlcnZpY2UtZmlsZS11cGxvYWQuY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmxzOiBbJy4vc2VydmljZS1maWxlLXVwbG9hZC5jb21wb25lbnQuc2NzcyddLFxyXG4gICAgcHJvdmlkZXJzOiBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcclxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gU2VydmljZUZpbGVVcGxvYWRDb21wb25lbnQpLFxyXG4gICAgICAgICAgICBtdWx0aTogdHJ1ZVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgQ29tcG9uZW50Q29udGV4dFNlcnZpY2VcclxuICAgIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIFNlcnZpY2VGaWxlVXBsb2FkQ29tcG9uZW50IGV4dGVuZHMgQ29tcG9uZW50QmFzZSBpbXBsZW1lbnRzIElTZXJ2aWNlRmlsZVVwbG9hZENvbXBvbmVudCwgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICAgIEBWaWV3Q2hpbGQoJ2NvbnRleHRNZW51JykgY29udGV4dE1lbnU6IENvbnRleHRNZW51O1xyXG4gICAgQFZpZXdDaGlsZCgnZmlsZScpIGZpbGU6IEZpbGVVcGxvYWQ7XHJcbiAgICBAVmlld0NoaWxkKCdmaWxlRGV0YWlsQ29tbWFuZCcpIGZpbGVEZXRhaWxDb21tYW5kOiBPdmVybGF5UGFuZWw7XHJcbiAgICBAVmlld0NoaWxkKCdmaWxlVmlld2VyTmV3JykgZmlsZVZpZXdlck5ldzogRmlsZVZpZXdlckNvbXBvbmVudDtcclxuXHJcbiAgICBASW5wdXQoKSBmaWxlRGF0YVNlcnZpY2U6IEZpbGVEYXRhU2VydmljZTtcclxuICAgIEBJbnB1dCgpIGNvbnRyb2w6IEZpbGVVcGxvYWRDb250cm9sU2NoZW1hID0gbmV3IEZpbGVVcGxvYWRDb250cm9sU2NoZW1hKCk7XHJcbiAgICBASW5wdXQoKSBzZXJ2aWNlQ29kZSA9ICcnO1xyXG4gICAgQElucHV0KCkgZW50aXR5ID0gJyc7XHJcbiAgICBfZW50aXR5S2V5OiBzdHJpbmc7XHJcbiAgICBASW5wdXQoKSBzZXQgZW50aXR5S2V5KHZhbDogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5fZW50aXR5S2V5ID0gdmFsO1xyXG4gICAgfTtcclxuXHJcbiAgICBASW5wdXQoKSBjaG9vc2VMYWJlbCA9ICdDaOG7jW4nO1xyXG5cclxuICAgIEBPdXRwdXQoKSBvbkluaXQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgICBAT3V0cHV0KCkgb25TZWxlY3Q6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgICBAT3V0cHV0KCkgb25SZW1vdmU6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgICBAT3V0cHV0KCkgb25DaGFuZ2VkOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cclxuICAgIGdldCBlbnRpdHlLZXkoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VudGl0eUtleTtcclxuICAgIH1cclxuXHJcbiAgICBmaWxlSWQ6IHN0cmluZyA9IG51bGw7XHJcbiAgICBzZWxlY3RlZEZpbGUgPSBudWxsO1xyXG4gICAgc2VsZWN0ZWRGaWxlTmFtZTogc3RyaW5nID0gbnVsbDtcclxuICAgIGV4dGVuc2lvbjogc3RyaW5nID0gbnVsbDtcclxuICAgIHNlbGVjdGVkRmlsZU5hbWVTaG9ydDogc3RyaW5nID0gbnVsbDtcclxuICAgIGhhc0ZpbGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIGxvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHNob3dOb3RpOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBmaWxlT2JqOiBGaWxlRXhwbG9yZXJJdGVtID0gbmV3IEZpbGVFeHBsb3Jlckl0ZW0oKTtcclxuICAgIHVzZXJJZDogc3RyaW5nID0gbnVsbDtcclxuICAgIG5vdGlmaWNhdGlvbjogc3RyaW5nID0gbnVsbDtcclxuICAgIF9tb2R1bGVDb25maWc6IE1vZHVsZUNvbmZpZztcclxuICAgIGFjY2VwdDogc3RyaW5nID0gJyc7XHJcbiAgICAvLyA9ICdpbWFnZS8qLC54bHN4LC54bHMsLnBkZiwuZG9jLC5kb2N4LC56aXAsLnJhciwnO1xyXG4gICAgcmVhZG9ubHkgPSBudWxsO1xyXG4gICAgZGVmYXVsdFNjYW5GaWxlTmFtZSA9IG51bGw7XHJcbiAgICBtZW51OiBBcnJheTxhbnk+ID0gW107XHJcblxyXG4gICAgb25DaGFuZ2VCYXNlOiAodmFsKSA9PiB2b2lkO1xyXG4gICAgb25Ub3VjaGVkOiAodmFsKSA9PiB2b2lkO1xyXG4gICAgaXNEaXNhYmxlZDogYm9vbGVhbjtcclxuICAgIF9zdWJzY3JpYmU6IFN1YnNjcmlwdGlvbiA9IG51bGw7XHJcblxyXG4gICAgZGF0YU1vZGVsOiBhbnkgPSB7fTtcclxuICAgIGZvcm1zOiBhbnkgPSB7fTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIF9maWxlT2JqZWN0U2VydmljZTogRmlsZU9iamVjdFNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBfc2lnbmFsUlNlcnZpY2U6IFNpZ25hbFJTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgX21vZHVsZUNvbmZpZ1NlcnZpY2U6IE1vZHVsZUNvbmZpZ1NlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBfdG5DbGllbnRTZXJ2aWNlOiBUbkNsaWVudFNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBfYXV0aGVuU2VydmljZTogQXV0aGVuU2VydmljZSxcclxuICAgICAgICBwcm90ZWN0ZWQgX3VzZXJTZXJ2aWNlOiBVc2VyU2VydmljZSxcclxuICAgICAgICBwcm90ZWN0ZWQgX25vdGlmaWVyU2VydmljZTogTm90aWZpZXJTZXJ2aWNlLFxyXG4gICAgICAgIHByb3RlY3RlZCBfZG93bmxvYWRMaW5rU2VydmljZTogRG93bmxvYWRMaW5rU2VydmljZSxcclxuICAgICAgICBwcm90ZWN0ZWQgX2ZpbGVFeHBsb3JlclNlcnZpY2U6IEZpbGVFeHBsb3JlclNlcnZpY2UsXHJcbiAgICAgICAgX2luamVjdG9yOiBJbmplY3RvclxyXG4gICAgKSB7XHJcbiAgICAgICAgc3VwZXIoX2luamVjdG9yKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX3VzZXJTZXJ2aWNlLmlzVmFsaWRBY2Nlc3NUb2tlbigpKSB7XHJcbiAgICAgICAgICAgIHRoaXMudXNlcklkID0gdGhpcy5fdXNlclNlcnZpY2UuZ2V0VXNlcklkQ29tYmluZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmRhdGFNb2RlbC5maWxlVmlld2VyID0ge307XHJcbiAgICAgICAgdGhpcy5kYXRhTW9kZWwuZHJpdmVGaWxlRGlhbG9nID0geyBwb3B1cFNpemU6IDxhbnk+e30gfTtcclxuXHJcbiAgICAgICAgdGhpcy5fbW9kdWxlQ29uZmlnID0gX21vZHVsZUNvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnKCk7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgdGhpcy5zZXRVcCgpO1xyXG4gICAgICAgIHRoaXMuc3Vic2NyaWJlKCk7XHJcbiAgICAgICAgdGhpcy5vbkluaXQuZW1pdCh0aGlzKTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRVcCgpIHtcclxuICAgICAgICBpZiAodGhpcy5jb250cm9sLmFjY2VwdCkge1xyXG4gICAgICAgICAgICB0aGlzLmFjY2VwdCA9IHRoaXMuY29udHJvbC5hY2NlcHQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHRoaXMuY29udHJvbC5hY2NlcHRGaWxlVHlwZXMpIHtcclxuICAgICAgICAgICAgdGhpcy5hY2NlcHQgPSB0aGlzLl9maWxlT2JqZWN0U2VydmljZS5nZXRBY2NlcHRlZEV4dGVuc2lvbnModGhpcy5jb250cm9sLmFjY2VwdEZpbGVUeXBlcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucmVhZG9ubHkgPSB0aGlzLmNvbnRyb2wucmVhZG9ubHk7XHJcbiAgICAgICAgdGhpcy5mb3Jtc1snZmlsZVZpZXdlciddID0ge1xyXG4gICAgICAgICAgICBzaG93OiBmYWxzZSxcclxuICAgICAgICAgICAgZm9ybURhdGE6IHt9LFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgaWYgKHRoaXMuZmlsZURhdGFTZXJ2aWNlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZmlsZURhdGFTZXJ2aWNlLnJlZ2lzdGVyKHRoaXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5lbnRpdHlLZXkgJiYgIXRoaXMuZmlsZURhdGFTZXJ2aWNlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0U2VydmljZUZpbGUoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZ2V0U2VydmljZUZpbGUoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaGFzS2V5cygpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNlcnZpY2VSZXF1ZXN0TW9kZWwgPSB7XHJcbiAgICAgICAgICAgICAgICBzZXJ2aWNlQ29kZTogdGhpcy5zZXJ2aWNlQ29kZSxcclxuICAgICAgICAgICAgICAgIGVudGl0eTogdGhpcy5lbnRpdHksXHJcbiAgICAgICAgICAgICAgICBlbnRpdHlLZXk6IHRoaXMuZW50aXR5S2V5LFxyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5zZXROb3RpKCfEkGFuZyBs4bqleSDEkcOtbmgga8OobS4uLicpO1xyXG4gICAgICAgICAgICBjb25zdCBmaWxlT2JqZWN0ID0gKGF3YWl0IHRoaXMuX2ZpbGVPYmplY3RTZXJ2aWNlLmdldFNpbmdsZVNlcnZpY2VGaWxlKHNlcnZpY2VSZXF1ZXN0TW9kZWwpKS5kYXRhO1xyXG4gICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5zZXROb3RpKG51bGwpO1xyXG4gICAgICAgICAgICBpZiAoZmlsZU9iamVjdCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRGaWxlT2JqZWN0KGZpbGVPYmplY3QpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnNldEZpbGVPYmplY3QobnVsbCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNldE1lbnUoKTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRGaWxlT2JqZWN0KGZpbGVPYmplY3Q6IGFueSkge1xyXG4gICAgICAgIGlmIChmaWxlT2JqZWN0ID09IG51bGwpIHtcclxuICAgICAgICAgICAgdGhpcy5maWxlT2JqID0gbnVsbDtcclxuICAgICAgICAgICAgdGhpcy5maWxlSWQgPSBudWxsO1xyXG4gICAgICAgICAgICB0aGlzLmhhc0ZpbGUgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEZpbGUgPSBudWxsO1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkRmlsZU5hbWUgPSBudWxsO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5vbkNoYW5nZUJhc2UobnVsbCk7XHJcbiAgICAgICAgICAgIHRoaXMub25DaGFuZ2VkLmVtaXQoKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmZpbGVPYmogPSBmaWxlT2JqZWN0O1xyXG4gICAgICAgIHRoaXMuZmlsZUlkID0gZmlsZU9iamVjdC5pZDtcclxuICAgICAgICB0aGlzLnNldEZpbGVOYW1lKGZpbGVPYmplY3QubmFtZSk7XHJcbiAgICAgICAgdGhpcy5oYXNGaWxlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgdGhpcy5vbkNoYW5nZUJhc2UoJ2hhcy12YWx1ZScpO1xyXG4gICAgICAgIHRoaXMub25Jbml0LmVtaXQoeyBmaWxlSWQ6IHRoaXMuZmlsZUlkIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGhhc0tleXMoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VydmljZUNvZGVcclxuICAgICAgICAgICAgJiYgdGhpcy5lbnRpdHlcclxuICAgICAgICAgICAgJiYgdGhpcy5lbnRpdHlLZXlcclxuICAgICAgICAgICAgJiYgdGhpcy5lbnRpdHlLZXkgIT0gdGhpcy5fY29tbW9uU2VydmljZS5ndWlkRW1wdHkoKTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRNZW51KCkge1xyXG4gICAgICAgIGlmICghdGhpcy5oYXNGaWxlKSB7XHJcbiAgICAgICAgICAgIHRoaXMubWVudSA9IFtdO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLm1lbnUgPSBbXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGxhYmVsOiAnVOG6o2kgduG7gScsXHJcbiAgICAgICAgICAgICAgICBpY29uOiAnZmFzIGZhLWRvd25sb2FkJyxcclxuICAgICAgICAgICAgICAgIGNvbW1hbmQ6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRvd25sb2FkKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICBdO1xyXG4gICAgfVxyXG5cclxuICAgIHN1YnNjcmliZSgpIHtcclxuICAgICAgICBpZiAodGhpcy5yb290Q29udGV4dCAmJiAhdGhpcy5jb250cm9sLmF1dG9TYXZlZCkge1xyXG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhgLS0tLS0tLS0tLS0tLS0tLS0+c3Vic2NyaWJlIGV2ZW50ICR7dGhpcy5jb250cm9sLmZpZWxkfV8ke3RoaXMucm9vdENvbnRleHQua2V5fWApO1xyXG4gICAgICAgICAgICB0aGlzLl9zdWJzY3JpYmUgPSB0aGlzLnJvb3RDb250ZXh0LnN1YnNjcmliZShDb21DdHhDb25zdGFudHMuQ09NTU9OLlNBVkVfRklMRV9JTl9GT1JNLCBycyA9PiB7XHJcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZygnLS0tLS0tLS0tLS0tLS0tLS0+c2F2ZSBldmVudCAnICsgdGhpcy5jb250cm9sLmZpZWxkKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlU2F2ZUZpbGUoKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG5nT25EZXN0cm95KCkge1xyXG4gICAgICAgIGlmICh0aGlzLl9zdWJzY3JpYmUpIHtcclxuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ3Vuc3Vic2NyaWJlICcgKyB0aGlzLmNvbnRyb2wuZmllbGQpO1xyXG4gICAgICAgICAgICB0aGlzLl9zdWJzY3JpYmUudW5zdWJzY3JpYmUoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuZmlsZURhdGFTZXJ2aWNlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZmlsZURhdGFTZXJ2aWNlLnVucmVnaXN0ZXIodGhpcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XHJcbiAgICB9XHJcblxyXG4gICAgb25PcGVuU2VsZWN0KCkge1xyXG4gICAgICAgIGlmICh0aGlzLmZpbGUuYmFzaWNGaWxlSW5wdXQpIHtcclxuICAgICAgICAgICAgdGhpcy5maWxlLmJhc2ljRmlsZUlucHV0Lm5hdGl2ZUVsZW1lbnQuY2xpY2soKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgb25TZWxlY3RGaWxlKGV2dCkge1xyXG4gICAgICAgIHRoaXMuaGFzRmlsZSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuZmlsZUlkID0gbnVsbDtcclxuICAgICAgICB0aGlzLmZpbGUuY2xlYXIoKTtcclxuICAgICAgICBpZiAoZXZ0LmVycm9yRmlsZXMgJiYgZXZ0LmVycm9yRmlsZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLnNob3dOb3RpID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb24gPSBgJHtldnQuZXJyb3JNZXNzYWdlc1swXS5zdW1tYXJ5fSR7ZXZ0LmVycm9yTWVzc2FnZXNbMF0uZGV0YWlsfWA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkRmlsZSA9IGV2dC5zdWNjZXNzRmlsZXNbMF07XHJcbiAgICAgICAgICAgIHRoaXMuc2V0RmlsZU5hbWUodGhpcy5zZWxlY3RlZEZpbGUgPyB0aGlzLnNlbGVjdGVkRmlsZS5uYW1lIDogbnVsbCk7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5jb250cm9sLmF1dG9TYXZlZCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVTYXZlRmlsZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5oYXNGaWxlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMub25DaGFuZ2VCYXNlKCdoYXMtdmFsdWUnKTtcclxuICAgICAgICAgICAgICAgIHRoaXMub25TZWxlY3QuZW1pdCh0aGlzLnNlbGVjdGVkRmlsZSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9uQ2hhbmdlZC5lbWl0KHRoaXMuc2VsZWN0ZWRGaWxlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBoYW5kbGVTYXZlRmlsZSgpIHtcclxuICAgICAgICAvLyDEkMOjIGzGsHUgZmlsZS5cclxuICAgICAgICBpZiAodGhpcy5maWxlSWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gVHLGsOG7nW5nIGjhu6NwIGtow7RuZyBjw7MgxJHhu6cga2V5cy5cclxuICAgICAgICBpZiAoIXRoaXMuaGFzS2V5cygpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZygnQ2jGsGEgY+G6pXUgaMOsbmgga2V5cycpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBDaMawYSBjaOG7jW4gZmlsZS5cclxuICAgICAgICBpZiAoIXRoaXMuc2VsZWN0ZWRGaWxlKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XHJcbiAgICAgICAgZm9ybURhdGEuYXBwZW5kKCdzZXJ2aWNlQ29kZScsIHRoaXMuc2VydmljZUNvZGUpO1xyXG4gICAgICAgIGZvcm1EYXRhLmFwcGVuZCgnZW50aXR5JywgdGhpcy5lbnRpdHkpO1xyXG4gICAgICAgIGZvcm1EYXRhLmFwcGVuZCgnZW50aXR5S2V5JywgdGhpcy5lbnRpdHlLZXkpO1xyXG4gICAgICAgIGZvcm1EYXRhLmFwcGVuZCgnaXNNdWx0aXBsZScsICdmYWxzZScpO1xyXG4gICAgICAgIGZvcm1EYXRhLmFwcGVuZCgnZmlsZScsIHRoaXMuc2VsZWN0ZWRGaWxlKTtcclxuXHJcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnNldE5vdGkoJ8SQYW5nIHThuqNpIGZpbGUgbMOqbi4uLicpO1xyXG4gICAgICAgIHRoaXMuX2ZpbGVPYmplY3RTZXJ2aWNlLmNyZWF0ZVNlcnZpY2VGaWxlKGZvcm1EYXRhKVxyXG4gICAgICAgICAgICAudGhlbihycyA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0Tm90aShudWxsKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAocnMuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRGaWxlID0gdGhpcy5zZWxlY3RlZEZpbGU7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEZpbGVOYW1lID0gdGhpcy5zZWxlY3RlZEZpbGUubmFtZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbGVJZCA9IHJzLmRhdGE7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oYXNGaWxlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uQ2hhbmdlZC5lbWl0KHsgZmlsZUlkOiB0aGlzLmZpbGVJZCwgc2VsZWN0ZWRGaWxlOiB0aGlzLnNlbGVjdGVkRmlsZSB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NydWRTZXJ2aWNlLnByb2Nlc3NFcnJvclJlc3BvbnNlKHJzKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSwgZXJyID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXROb3RpKG51bGwpO1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZygnVXBsb2FkIGZpbGUgY2jGsGEgdGjDoG5oIGPDtG5nJyk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXROb3RpKG1zZykge1xyXG4gICAgICAgIGlmIChtc2cpIHtcclxuICAgICAgICAgICAgdGhpcy5zaG93Tm90aSA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uID0gbXNnO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zaG93Tm90aSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbiA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHNldEZpbGVOYW1lKGZpbGVOYW1lKSB7XHJcbiAgICAgICAgaWYgKGZpbGVOYW1lKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRGaWxlTmFtZSA9IGZpbGVOYW1lO1xyXG4gICAgICAgICAgICB0aGlzLmV4dGVuc2lvbiA9IHRoaXMuX2ZpbGVPYmplY3RTZXJ2aWNlLmdldEZpbGVFeHRlbnNpb24oZmlsZU5hbWUpO1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkRmlsZU5hbWVTaG9ydCA9IGZpbGVOYW1lLnN1YnN0cigwLCBmaWxlTmFtZS5sZW5ndGggLSB0aGlzLmV4dGVuc2lvbi5sZW5ndGggLSAxKTtcclxuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkRmlsZU5hbWUgPSBudWxsO1xyXG4gICAgICAgICAgICB0aGlzLmV4dGVuc2lvbiA9IG51bGw7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRGaWxlTmFtZVNob3J0ID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgc2hvd0NvbnRleHRNZW51KGV2dCkge1xyXG4gICAgICAgIHRoaXMuY29udGV4dE1lbnUudG9nZ2xlKGV2dCk7XHJcbiAgICAgICAgZXZ0LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgfVxyXG5cclxuICAgIG9uUmVtb3ZlRmlsZSgpIHtcclxuICAgICAgICB0aGlzLmZpbGVPYmogPSBudWxsO1xyXG4gICAgICAgIHRoaXMuZmlsZUlkID0gbnVsbDtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkRmlsZSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5zZXRGaWxlTmFtZShudWxsKTtcclxuICAgICAgICB0aGlzLmhhc0ZpbGUgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5vbkNoYW5nZUJhc2UobnVsbCk7XHJcbiAgICAgICAgdGhpcy5vblJlbW92ZS5lbWl0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgb25Eb3dubG9hZEZpbGUoKSB7XHJcbiAgICAgICAgdGhpcy5kb3dubG9hZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHNjYW5GaWxlKGV2dCkge1xyXG4gICAgICAgIC8vIHNlbmQgdG4gY29tbWFuZFxyXG4gICAgICAgIGNvbnN0IGNvcnJlbGF0aW9uSWQgPSB0aGlzLl9jb21tb25TZXJ2aWNlLnJhbmRvbVN0cmluZygpO1xyXG4gICAgICAgIGNvbnN0IGNvbW1hbmQgPSBuZXcgVG5DbGllbnRDb21tYW5kKCk7XHJcbiAgICAgICAgY29tbWFuZC5jb21tYW5kVHlwZSA9IENvbW1hbmRUeXBlLlNjYW47XHJcbiAgICAgICAgLy8gY29tbWFuZC5rZXkgPSB0aGlzLl9tb2R1bGVDb25maWcuZW52aXJvbm1lbnQuc2lnbmFsci5jbGllbnRLZXk7XHJcbiAgICAgICAgY29tbWFuZC5rZXkgPSB0aGlzLl9tb2R1bGVDb25maWcuZW52aXJvbm1lbnQuc2lnbmFsci5jbGllbnRLZXk7XHJcblxyXG4gICAgICAgIGNvbnN0IHNjYW5GaWxlQ29tbWFuZCA9IHtcclxuICAgICAgICAgICAgY29ycmVsYXRpb25JZDogY29ycmVsYXRpb25JZCxcclxuICAgICAgICAgICAgdXBsb2FkRmlsZUFwaTogdGhpcy5fZmlsZU9iamVjdFNlcnZpY2UuZ2V0U2NhbkZpbGVVcGxvYWRFbmRwb2ludChjb3JyZWxhdGlvbklkKSxcclxuICAgICAgICAgICAgYWNjZXNzVG9rZW46IHRoaXMuX2F1dGhlblNlcnZpY2UuZ2V0QWNjZXNzVG9rZW4oKSxcclxuICAgICAgICAgICAgZGVmYXVsdEZpbGVOYW1lOiB0aGlzLmRlZmF1bHRTY2FuRmlsZU5hbWVcclxuICAgICAgICB9O1xyXG4gICAgICAgIGNvbW1hbmQuZGF0YSA9IHNjYW5GaWxlQ29tbWFuZDtcclxuXHJcbiAgICAgICAgdGhpcy5fdG5DbGllbnRTZXJ2aWNlLnNlbmRDb21tYW5kKGNvbW1hbmQpO1xyXG5cclxuICAgICAgICB0aGlzLl9zaWduYWxSU2VydmljZS51blN1YnNjcmliZVZpZXdDb2RlKG51bGwsIGBGSUxFLlNDQU5ORUQuJHtjb3JyZWxhdGlvbklkfWApO1xyXG4gICAgICAgIHRoaXMuX3NpZ25hbFJTZXJ2aWNlLnN0YXJ0KG51bGwsIGBGSUxFLlNDQU5ORUQuJHtjb3JyZWxhdGlvbklkfWAsIGRhdGEgPT4ge1xyXG4gICAgICAgICAgICBpZiAoZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgbGV0IG9iajogYW55O1xyXG4gICAgICAgICAgICAgICAgaWYgKGRhdGEgaW5zdGFuY2VvZiBPYmplY3QpIHtcclxuICAgICAgICAgICAgICAgICAgICBvYmogPSBkYXRhO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsZUlkID0gb2JqLm1lc3NhZ2UuY29udGVudDtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbGVPYmoubmFtZSA9IG9iai5tZXNzYWdlLnRpdGxlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgb2JqID0gSlNPTi5wYXJzZShkYXRhKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbGVJZCA9IG9iai5tZXNzYWdlLmNvbnRlbnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5maWxlT2JqLm5hbWUgPSBvYmoubWVzc2FnZS50aXRsZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHZpZXdPbmxpbmUoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2ZpbGVPYmplY3RTZXJ2aWNlLmlzU3VwcG9ydGVkVmlld09ubGluZSh0aGlzLmZpbGVPYmoubmFtZSkpIHtcclxuICAgICAgICAgICAgdGhpcy5kYXRhTW9kZWwuZmlsZVZpZXdlci5kYXRhID0ge307XHJcbiAgICAgICAgICAgIHRoaXMuZGF0YU1vZGVsLmZpbGVWaWV3ZXIuZGF0YS5maWxlSWQgPSB0aGlzLmZpbGVJZDtcclxuICAgICAgICAgICAgdGhpcy5kYXRhTW9kZWwuZmlsZVZpZXdlci5kYXRhLmZpbGVOYW1lID0gdGhpcy5maWxlT2JqLm5hbWU7XHJcbiAgICAgICAgICAgIHRoaXMuZGF0YU1vZGVsLmZpbGVWaWV3ZXIuZGF0YS5zZXJ2aWNlID0gdGhpcy5zZXJ2aWNlQ29kZTtcclxuICAgICAgICAgICAgdGhpcy5kYXRhTW9kZWwuZmlsZVZpZXdlci5kYXRhLmVudGl0eSA9IHRoaXMuZW50aXR5O1xyXG4gICAgICAgICAgICB0aGlzLmRhdGFNb2RlbC5maWxlVmlld2VyLmRhdGEuZW50aXR5S2V5ID0gdGhpcy5lbnRpdHlLZXk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmRhdGFNb2RlbC5maWxlVmlld2VyLmRhdGEuaXNGaWxlVmVyc2lvbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmRhdGFNb2RlbC5maWxlVmlld2VyLnNob3cgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5kb3dubG9hZCgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBkb3dubG9hZCgpIHtcclxuICAgICAgICBpZiAoIXRoaXMuZmlsZUlkKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IG1vZGVsID0gbmV3IEdlbmVyYXRlTGlua0Rvd25sb2FkRFRPKHtcclxuICAgICAgICAgICAgZmlsZUlkOiB0aGlzLmZpbGVJZFxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLl9kb3dubG9hZExpbmtTZXJ2aWNlLmRvd25sb2FkTGluayhtb2RlbCk7XHJcbiAgICB9XHJcblxyXG4gICAgdXBsb2FkRmlsZUZyb21Ecml2ZSgpIHtcclxuICAgICAgICAvLyB0aGlzLmRhdGFNb2RlbC5kcml2ZUZpbGVEaWFsb2cgPSB7XHJcbiAgICAgICAgLy8gICAgIHNob3c6IHRydWVcclxuICAgICAgICAvLyB9O1xyXG4gICAgfVxyXG5cclxuICAgIGNvcHlGaWxlVG9Ecml2ZSgpIHtcclxuICAgICAgICAvLyB0aGlzLl9maWxlRXhwbG9yZXJTZXJ2aWNlLmdldEZvbGRlcklkKHRoaXMudXNlcklkKS50aGVuKHJlc3BvbnNlID0+IHtcclxuICAgICAgICAvLyAgICAgdmFyIGNvcHlGaWxlRHRvID0gbmV3IENvcHlGaWxlRHRvKCk7XHJcbiAgICAgICAgLy8gICAgIGNvcHlGaWxlRHRvLmlkID0gdGhpcy5maWxlSWQ7XHJcbiAgICAgICAgLy8gICAgIGlmICh0aGlzLmZpbGVOYW1lID09IFwiXCIpIHtcclxuICAgICAgICAvLyAgICAgICAgIGlmICh0aGlzLmZpbGVPYmogIT0gbnVsbCkge1xyXG4gICAgICAgIC8vICAgICAgICAgICAgIGNvcHlGaWxlRHRvLm5hbWUgPSB0aGlzLmZpbGVPYmoubmFtZTtcclxuICAgICAgICAvLyAgICAgICAgIH1cclxuICAgICAgICAvLyAgICAgfSBlbHNlIHtcclxuICAgICAgICAvLyAgICAgICAgIGNvcHlGaWxlRHRvLm5hbWUgPSB0aGlzLmZpbGVOYW1lO1xyXG4gICAgICAgIC8vICAgICB9XHJcbiAgICAgICAgLy8gICAgIGNvcHlGaWxlRHRvLm93bmVyVHlwZSA9IHRoaXMudXNlcklkO1xyXG4gICAgICAgIC8vICAgICBjb3B5RmlsZUR0by5mb2xkZXJJZCA9IHJlc3BvbnNlLmRhdGE7XHJcblxyXG4gICAgICAgIC8vICAgICB0aGlzLl9maWxlRXhwbG9yZXJTZXJ2aWNlLmNvcHlGaWxlKGNvcHlGaWxlRHRvKS50aGVuKHJlc3BvbnNlID0+IHtcclxuICAgICAgICAvLyAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93U3VjY2VzcygnU2FvIGNow6lwIHTDoGkgbGnhu4d1IHbhu4EgdGjGsCBt4bulYyBjw6EgbmjDom4gdGjDoG5oIGPDtG5nJyk7XHJcbiAgICAgICAgLy8gICAgIH0sIGVycm9yID0+IHtcclxuICAgICAgICAvLyAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93QnVzaW5lc3NFcnJvcihlcnJvci5lcnJvci5tZXNzYWdlKTtcclxuICAgICAgICAvLyAgICAgfSk7XHJcbiAgICAgICAgLy8gfSk7XHJcbiAgICB9XHJcblxyXG4gICAgd3JpdGVWYWx1ZShvYmo6IGFueSk6IHZvaWQge1xyXG4gICAgfVxyXG5cclxuICAgIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMub25DaGFuZ2VCYXNlID0gZm47XHJcbiAgICB9XHJcblxyXG4gICAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMub25Ub3VjaGVkID0gZm47XHJcbiAgICB9XHJcblxyXG4gICAgc2V0RGlzYWJsZWRTdGF0ZT8oaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuaXNEaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgb3BlbkZpbGVWaWV3ZXIoKSB7XHJcbiAgICAgICAgLy8gY29uc3QgZmlsZUV4cGxvcmVyUmVzID0gYXdhaXQgdGhpcy5fZmlsZUV4cGxvcmVyU2VydmljZS5nZXRTZXJ2aWNlRmlsZUV4cGxvcmVyKHRoaXMuc2VydmljZUNvZGUsIHRoaXMuZW50aXR5LCB0aGlzLmVudGl0eUtleSk7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2codGhpcy5jb250cm9sKTtcclxuICAgICAgICAvLyBpZiAoIWZpbGVFeHBsb3JlclJlcy5zdWNjZXNzIHx8IGZpbGVFeHBsb3JlclJlcy5kYXRhKSB7XHJcbiAgICAgICAgLy8gICAgIHJldHVybjtcclxuICAgICAgICAvLyB9XHJcbiAgICAgICAgLy8gY29uc3QgZXhwbG9yZXJJdGVtID0gZmlsZUV4cGxvcmVyUmVzLmRhdGE7XHJcbiAgICAgICAgLy8gY29uc3QgY2FuVmlld09ubGluZSA9IHRoaXMuX2ZpbGVPYmplY3RTZXJ2aWNlLmlzU3VwcG9ydGVkVmlld09ubGluZShleHBsb3Jlckl0ZW0ubmFtZSk7XHJcbiAgICAgICAgY29uc3QgZmlsZUJpbmFyeSA9IGF3YWl0IHRoaXMuX2ZpbGVFeHBsb3JlclNlcnZpY2UuY2hlY2tQaHlzaWNhbEZpbGUodGhpcy5maWxlSWQpO1xyXG4gICAgICAgIGlmICghZmlsZUJpbmFyeS5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZygnRmlsZSBraMO0bmcgdOG7k24gdOG6oWksIHZ1aSBsw7JuZyBsacOqbiBo4buHIHF14bqjbiB0cuG7iyB2acOqbicpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGZpbGVPYmplY3QgPSBhd2FpdCB0aGlzLl9maWxlT2JqZWN0U2VydmljZS5nZXREZXRhaWwodGhpcy5maWxlSWQpO1xyXG4gICAgICAgIGxldCBmaWxlTmFtZSA9ICcnO1xyXG4gICAgICAgIGlmICghZmlsZU9iamVjdC5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZygnQ8OzIGzhu5dpIHRyb25nIGzDumMgbOG6pXkgZOG7ryBsaeG7h3UgZmlsZSwgdnVpIGzDsm5nIGxpw6puIGjhu4cgcXXhuqNuIHRy4buLIHZpw6puJyk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZmlsZU5hbWUgPSBmaWxlT2JqZWN0Py5uYW1lO1xyXG4gICAgICAgIHRoaXMuZm9ybXMuZmlsZVZpZXdlci5mb3JtRGF0YS5kYXRhID0ge1xyXG4gICAgICAgICAgICBmaWxlSWQ6IHRoaXMuZmlsZUlkLFxyXG4gICAgICAgICAgICBpc0ZpbGVWZXJzaW9uOiBmYWxzZSxcclxuICAgICAgICAgICAgZmlsZU5hbWUsXHJcbiAgICAgICAgICAgIHNlcnZpY2U6IHRoaXMuc2VydmljZUNvZGUsXHJcbiAgICAgICAgICAgIGVudGl0eTogdGhpcy5lbnRpdHksXHJcbiAgICAgICAgICAgIGVudGl0eUtleTogdGhpcy5lbnRpdHlLZXksXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLmZvcm1zLmZpbGVWaWV3ZXIuc2hvdyA9IHRydWU7XHJcbiAgICB9XHJcbn1cclxuIl19
|
|
458
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS1maWxlLXVwbG9hZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4vLi4vcHJvamVjdHMvdG54LXNoYXJlZC9zcmMvbGliLyIsInNvdXJjZXMiOlsiY29tcG9uZW50cy9zZXJ2aWNlLWZpbGUtdXBsb2FkL3NlcnZpY2UtZmlsZS11cGxvYWQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQ0gsU0FBUyxFQUNULFlBQVksRUFDWixVQUFVLEVBQ1YsUUFBUSxFQUNSLEtBQUssRUFHTCxNQUFNLEVBQ04sU0FBUyxFQUNaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBd0IsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV6RSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDNUQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzFELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUU5RCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUN0RixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDbEUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDcEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBRTNFLE9BQU8sRUFBRSxXQUFXLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDOUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzlELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNsRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDaEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUN6RixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUM5RSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUU3RixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUN0RixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDOUUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0saURBQWlELENBQUM7QUFDdEYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFnQmxGLE1BQU0sT0FBTywwQkFBMkIsU0FBUSxhQUFhO0lBb0R6RCxZQUNZLGtCQUFxQyxFQUNyQyxlQUErQixFQUMvQixvQkFBeUMsRUFDekMsZ0JBQWlDLEVBQ2pDLGNBQTZCLEVBQzNCLFlBQXlCLEVBQ3pCLGdCQUFpQyxFQUNqQyxvQkFBeUMsRUFDekMsb0JBQXlDLEVBQ25ELFNBQW1CO1FBRW5CLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztRQVhULHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBbUI7UUFDckMsb0JBQWUsR0FBZixlQUFlLENBQWdCO1FBQy9CLHlCQUFvQixHQUFwQixvQkFBb0IsQ0FBcUI7UUFDekMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFpQjtRQUNqQyxtQkFBYyxHQUFkLGNBQWMsQ0FBZTtRQUMzQixpQkFBWSxHQUFaLFlBQVksQ0FBYTtRQUN6QixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWlCO1FBQ2pDLHlCQUFvQixHQUFwQixvQkFBb0IsQ0FBcUI7UUFDekMseUJBQW9CLEdBQXBCLG9CQUFvQixDQUFxQjtRQXREOUMsWUFBTyxHQUE0QixJQUFJLHVCQUF1QixFQUFFLENBQUM7UUFDakUsZ0JBQVcsR0FBRyxFQUFFLENBQUM7UUFDakIsV0FBTSxHQUFHLEVBQUUsQ0FBQztRQU1aLGdCQUFXLEdBQUcsTUFBTSxDQUFDO1FBRXBCLFdBQU0sR0FBc0IsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUNwRCxhQUFRLEdBQXNCLElBQUksWUFBWSxFQUFPLENBQUM7UUFDdEQsYUFBUSxHQUFzQixJQUFJLFlBQVksRUFBTyxDQUFDO1FBQ3RELGNBQVMsR0FBc0IsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQU1qRSxXQUFNLEdBQVcsSUFBSSxDQUFDO1FBQ3RCLGlCQUFZLEdBQUcsSUFBSSxDQUFDO1FBQ3BCLHFCQUFnQixHQUFXLElBQUksQ0FBQztRQUNoQyxjQUFTLEdBQVcsSUFBSSxDQUFDO1FBQ3pCLDBCQUFxQixHQUFXLElBQUksQ0FBQztRQUNyQyxZQUFPLEdBQVksS0FBSyxDQUFDO1FBQ3pCLFlBQU8sR0FBWSxLQUFLLENBQUM7UUFDekIsYUFBUSxHQUFZLEtBQUssQ0FBQztRQUMxQixZQUFPLEdBQXFCLElBQUksZ0JBQWdCLEVBQUUsQ0FBQztRQUNuRCxXQUFNLEdBQVcsSUFBSSxDQUFDO1FBQ3RCLGlCQUFZLEdBQVcsSUFBSSxDQUFDO1FBRTVCLFdBQU0sR0FBVyxFQUFFLENBQUM7UUFDcEIscURBQXFEO1FBQ3JELGFBQVEsR0FBRyxJQUFJLENBQUM7UUFDaEIsd0JBQW1CLEdBQUcsSUFBSSxDQUFDO1FBQzNCLFNBQUksR0FBZSxFQUFFLENBQUM7UUFLdEIsZUFBVSxHQUFpQixJQUFJLENBQUM7UUFFaEMsY0FBUyxHQUFRLEVBQUUsQ0FBQztRQUNwQixVQUFLLEdBQVEsRUFBRSxDQUFDO1FBZ0JaLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxrQkFBa0IsRUFBRSxFQUFFO1lBQ3hDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1NBQ3REO1FBQ0QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDO1FBQy9CLElBQUksQ0FBQyxTQUFTLENBQUMsZUFBZSxHQUFHLEVBQUUsU0FBUyxFQUFPLEVBQUUsRUFBRSxDQUFDO1FBRXhELElBQUksQ0FBQyxhQUFhLEdBQUcsb0JBQW9CLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDMUQsQ0FBQztJQTlERCxJQUFhLFNBQVMsQ0FBQyxHQUFXO1FBQzlCLElBQUksQ0FBQyxVQUFVLEdBQUcsR0FBRyxDQUFDO0lBQzFCLENBQUM7SUFBQSxDQUFDO0lBU0YsSUFBSSxTQUFTO1FBQ1QsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDO0lBQzNCLENBQUM7SUFtREQsUUFBUTtRQUNKLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNiLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNqQixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMzQixDQUFDO0lBRUQsS0FBSztRQUNELElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUU7WUFDckIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQztTQUNyQzthQUNJLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxlQUFlLEVBQUU7WUFDbkMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQztTQUM3RjtRQUNELElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUM7UUFDdEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsR0FBRztZQUN2QixJQUFJLEVBQUUsS0FBSztZQUNYLFFBQVEsRUFBRSxFQUFFO1NBQ2YsQ0FBQztRQUNGLElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRTtZQUN0QixJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUN2QztRQUNELElBQUksSUFBSSxDQUFDLFNBQVMsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUU7WUFDekMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1NBQ3pCO0lBQ0wsQ0FBQztJQUVLLGNBQWM7O1lBQ2hCLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFO2dCQUNoQixNQUFNLG1CQUFtQixHQUFHO29CQUN4QixXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVc7b0JBQzdCLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTTtvQkFDbkIsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTO2lCQUM1QixDQUFDO2dCQUVGLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO2dCQUNwQixJQUFJLENBQUMsT0FBTyxDQUFDLHNCQUFzQixDQUFDLENBQUM7Z0JBQ3JDLE1BQU0sVUFBVSxHQUFHLENBQUMsTUFBTSxJQUFJLENBQUMsa0JBQWtCLENBQUMsb0JBQW9CLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztnQkFDbEcsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7Z0JBQ3JCLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ25CLElBQUksVUFBVSxFQUFFO29CQUNaLElBQUksQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLENBQUM7aUJBQ2xDO2FBQ0o7aUJBQ0k7Z0JBQ0QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUM1QjtZQUVELElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNuQixDQUFDO0tBQUE7SUFFRCxhQUFhLENBQUMsVUFBZTtRQUN6QixJQUFJLFVBQVUsSUFBSSxJQUFJLEVBQUU7WUFDcEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7WUFDcEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7WUFDbkIsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7WUFDckIsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7WUFDekIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQztZQUU3QixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3hCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDdEIsT0FBTztTQUNWO1FBQ0QsSUFBSSxDQUFDLE9BQU8sR0FBRyxVQUFVLENBQUM7UUFDMUIsSUFBSSxDQUFDLE1BQU0sR0FBRyxVQUFVLENBQUMsRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1FBRXBCLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDL0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUVELE9BQU87UUFDSCxPQUFPLElBQUksQ0FBQyxXQUFXO2VBQ2hCLElBQUksQ0FBQyxNQUFNO2VBQ1gsSUFBSSxDQUFDLFNBQVM7ZUFDZCxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDN0QsQ0FBQztJQUVELE9BQU87UUFDSCxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNmLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDO1lBQ2YsT0FBTztTQUNWO1FBRUQsSUFBSSxDQUFDLElBQUksR0FBRztZQUNSO2dCQUNJLEtBQUssRUFBRSxRQUFRO2dCQUNmLElBQUksRUFBRSxpQkFBaUI7Z0JBQ3ZCLE9BQU8sRUFBRSxHQUFHLEVBQUU7b0JBQ1YsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUNwQixDQUFDO2FBQ0o7U0FDSixDQUFDO0lBQ04sQ0FBQztJQUVELFNBQVM7UUFDTCxJQUFJLElBQUksQ0FBQyxXQUFXLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRTtZQUM3QyxrR0FBa0c7WUFDbEcsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLGlCQUFpQixFQUFFLEVBQUUsQ0FBQyxFQUFFO2dCQUN4RixxRUFBcUU7Z0JBQ3JFLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUMxQixDQUFDLENBQUMsQ0FBQztTQUNOO0lBQ0wsQ0FBQztJQUVELFdBQVc7UUFDUCxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDakIsb0RBQW9EO1lBQ3BELElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFLENBQUM7U0FDakM7UUFDRCxJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUU7WUFDdEIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDekM7UUFDRCxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDeEIsQ0FBQztJQUVELFlBQVk7UUFDUixJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFO1lBQzFCLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztTQUNsRDtJQUNMLENBQUM7SUFFRCxZQUFZLENBQUMsR0FBRztRQUNaLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ3JCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ25CLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDbEIsSUFBSSxHQUFHLENBQUMsVUFBVSxJQUFJLEdBQUcsQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUM3QyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztZQUNyQixJQUFJLENBQUMsWUFBWSxHQUFHLEdBQUcsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUcsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztTQUN2RjthQUNJO1lBQ0QsSUFBSSxDQUFDLFlBQVksR0FBRyxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3hDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBRXBFLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUU7Z0JBQ3hCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQzthQUN6QjtpQkFDSTtnQkFDRCxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztnQkFDcEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsQ0FBQztnQkFDL0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO2dCQUN0QyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7YUFDMUM7U0FDSjtJQUNMLENBQUM7SUFFRCxjQUFjO1FBQ1YsZUFBZTtRQUNmLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNiLE9BQU87U0FDVjtRQUVELCtCQUErQjtRQUMvQixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQ2pCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsb0JBQW9CLENBQUMsQ0FBQztZQUN4RCxPQUFPO1NBQ1Y7UUFFRCxrQkFBa0I7UUFDbEIsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDcEIsT0FBTztTQUNWO1FBRUQsTUFBTSxRQUFRLEdBQUcsSUFBSSxRQUFRLEVBQUUsQ0FBQztRQUNoQyxRQUFRLENBQUMsTUFBTSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDakQsUUFBUSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3ZDLFFBQVEsQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM3QyxRQUFRLENBQUMsTUFBTSxDQUFDLFlBQVksRUFBRSxPQUFPLENBQUMsQ0FBQztRQUN2QyxRQUFRLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFFM0MsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDcEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUM7YUFDOUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFO1lBQ1AsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7WUFDckIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUVuQixJQUFJLEVBQUUsQ0FBQyxPQUFPLEVBQUU7Z0JBQ1osSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDO2dCQUN0QyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUM7Z0JBQy9DLElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQztnQkFDdEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7Z0JBQ3BCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsWUFBWSxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDO2FBQ2pGO2lCQUNJO2dCQUNELElBQUksQ0FBQyxZQUFZLENBQUMsb0JBQW9CLENBQUMsRUFBRSxDQUFDLENBQUM7YUFDOUM7UUFDTCxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUU7WUFDTCxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztZQUNyQixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBRW5CLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsNkJBQTZCLENBQUMsQ0FBQztRQUNyRSxDQUFDLENBQUMsQ0FBQztJQUVYLENBQUM7SUFFRCxPQUFPLENBQUMsR0FBRztRQUNQLElBQUksR0FBRyxFQUFFO1lBQ0wsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7WUFDckIsSUFBSSxDQUFDLFlBQVksR0FBRyxHQUFHLENBQUM7U0FDM0I7YUFDSTtZQUNELElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO1lBQ3RCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1NBQzVCO0lBQ0wsQ0FBQztJQUVELFdBQVcsQ0FBQyxRQUFRO1FBQ2hCLElBQUksUUFBUSxFQUFFO1lBQ1YsSUFBSSxDQUFDLGdCQUFnQixHQUFHLFFBQVEsQ0FBQztZQUNqQyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNwRSxJQUFJLENBQUMscUJBQXFCLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztTQUVoRzthQUNJO1lBQ0QsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQztZQUM3QixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztZQUN0QixJQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDO1NBQ3JDO0lBQ0wsQ0FBQztJQUVELGVBQWUsQ0FBQyxHQUFHO1FBQ2YsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDN0IsR0FBRyxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFRCxZQUFZO1FBQ1IsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDcEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7UUFDbkIsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7UUFDekIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN2QixJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztRQUVyQixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3hCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDekIsQ0FBQztJQUVELGNBQWM7UUFDVixJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDcEIsQ0FBQztJQUVELFFBQVEsQ0FBQyxHQUFHO1FBQ1Isa0JBQWtCO1FBQ2xCLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDekQsTUFBTSxPQUFPLEdBQUcsSUFBSSxlQUFlLEVBQUUsQ0FBQztRQUN0QyxPQUFPLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUM7UUFDdkMsa0VBQWtFO1FBQ2xFLE9BQU8sQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQztRQUUvRCxNQUFNLGVBQWUsR0FBRztZQUNwQixhQUFhLEVBQUUsYUFBYTtZQUM1QixhQUFhLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLHlCQUF5QixDQUFDLGFBQWEsQ0FBQztZQUMvRSxXQUFXLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxjQUFjLEVBQUU7WUFDakQsZUFBZSxFQUFFLElBQUksQ0FBQyxtQkFBbUI7U0FDNUMsQ0FBQztRQUNGLE9BQU8sQ0FBQyxJQUFJLEdBQUcsZUFBZSxDQUFDO1FBRS9CLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFM0MsSUFBSSxDQUFDLGVBQWUsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLEVBQUUsZ0JBQWdCLGFBQWEsRUFBRSxDQUFDLENBQUM7UUFDaEYsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLGdCQUFnQixhQUFhLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRTtZQUNyRSxJQUFJLElBQUksRUFBRTtnQkFDTixJQUFJLEdBQVEsQ0FBQztnQkFDYixJQUFJLElBQUksWUFBWSxNQUFNLEVBQUU7b0JBQ3hCLEdBQUcsR0FBRyxJQUFJLENBQUM7b0JBQ1gsSUFBSSxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQztvQkFDbEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7aUJBQ3pDO3FCQUNJO29CQUNELEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUN2QixJQUFJLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDO29CQUNsQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztpQkFDekM7YUFDSjtRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELFVBQVU7UUFDTixJQUFJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ2xFLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUM7WUFDcEMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1lBQ3BELElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7WUFDNUQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO1lBQzFELElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztZQUNwRCxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7WUFFMUQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7WUFDckQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztTQUN6QzthQUNJO1lBQ0QsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1NBQ25CO0lBQ0wsQ0FBQztJQUVELFFBQVE7UUFDSixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNkLE9BQU87U0FDVjtRQUVELE1BQU0sS0FBSyxHQUFHLElBQUksdUJBQXVCLENBQUM7WUFDdEMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO1NBQ3RCLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUVELG1CQUFtQjtRQUNmLHFDQUFxQztRQUNyQyxpQkFBaUI7UUFDakIsS0FBSztJQUNULENBQUM7SUFFRCxlQUFlO1FBQ1gsd0VBQXdFO1FBQ3hFLDJDQUEyQztRQUMzQyxvQ0FBb0M7UUFDcEMsaUNBQWlDO1FBQ2pDLHNDQUFzQztRQUN0QyxvREFBb0Q7UUFDcEQsWUFBWTtRQUNaLGVBQWU7UUFDZiw0Q0FBNEM7UUFDNUMsUUFBUTtRQUNSLDJDQUEyQztRQUMzQyw0Q0FBNEM7UUFFNUMseUVBQXlFO1FBQ3pFLGdHQUFnRztRQUNoRyxvQkFBb0I7UUFDcEIsd0VBQXdFO1FBQ3hFLFVBQVU7UUFDVixNQUFNO0lBQ1YsQ0FBQztJQUVELFVBQVUsQ0FBQyxHQUFRO0lBQ25CLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxFQUFPO1FBQ3BCLElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxFQUFPO1FBQ3JCLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO0lBQ3hCLENBQUM7SUFFRCxnQkFBZ0IsQ0FBRSxVQUFtQjtRQUNqQyxJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztJQUNqQyxDQUFDO0lBRUssY0FBYzs7WUFDaEIsaUlBQWlJO1lBQ2pJLDZCQUE2QjtZQUM3QiwwREFBMEQ7WUFDMUQsY0FBYztZQUNkLElBQUk7WUFDSiw2Q0FBNkM7WUFDN0MsMEZBQTBGO1lBQzFGLE1BQU0sVUFBVSxHQUFHLE1BQU0sSUFBSSxDQUFDLG9CQUFvQixDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNsRixJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRTtnQkFDckIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxvREFBb0QsQ0FBQyxDQUFDO2dCQUN4RixPQUFPO2FBQ1Y7WUFDRCxNQUFNLFVBQVUsR0FBRyxNQUFNLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3hFLElBQUksUUFBUSxHQUFHLEVBQUUsQ0FBQztZQUNsQixJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRTtnQkFDckIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxtRUFBbUUsQ0FBQyxDQUFDO2dCQUN2RyxPQUFPO2FBQ1Y7WUFDRCxRQUFRLEdBQUcsVUFBVSxhQUFWLFVBQVUsdUJBQVYsVUFBVSxDQUFFLElBQUksQ0FBQztZQUM1QixJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsSUFBSSxHQUFHO2dCQUNsQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07Z0JBQ25CLGFBQWEsRUFBRSxLQUFLO2dCQUNwQixRQUFRO2dCQUNSLE9BQU8sRUFBRSxJQUFJLENBQUMsV0FBVztnQkFDekIsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO2dCQUNuQixTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVM7YUFDNUIsQ0FBQztZQUNGLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDdEMsQ0FBQztLQUFBOzs7WUFsZEosU0FBUyxTQUFDO2dCQUNQLFFBQVEsRUFBRSxxQkFBcUI7Z0JBQy9CLDg0RkFBbUQ7Z0JBRW5ELFNBQVMsRUFBRTtvQkFDUDt3QkFDSSxPQUFPLEVBQUUsaUJBQWlCO3dCQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLDBCQUEwQixDQUFDO3dCQUN6RCxLQUFLLEVBQUUsSUFBSTtxQkFDZDtvQkFDRCx1QkFBdUI7aUJBQzFCOzthQUNKOzs7WUFmUSxpQkFBaUI7WUFWakIsY0FBYztZQUZkLG1CQUFtQjtZQUduQixlQUFlO1lBSmYsYUFBYTtZQUtiLFdBQVc7WUFIWCxlQUFlO1lBUWYsbUJBQW1CO1lBRW5CLG1CQUFtQjtZQS9CeEIsUUFBUTs7OzBCQWlEUCxTQUFTLFNBQUMsYUFBYTttQkFDdkIsU0FBUyxTQUFDLE1BQU07Z0NBQ2hCLFNBQVMsU0FBQyxtQkFBbUI7NEJBQzdCLFNBQVMsU0FBQyxlQUFlOzhCQUV6QixLQUFLO3NCQUNMLEtBQUs7MEJBQ0wsS0FBSztxQkFDTCxLQUFLO3dCQUVMLEtBQUs7MEJBSUwsS0FBSztxQkFFTCxNQUFNO3VCQUNOLE1BQU07dUJBQ04sTUFBTTt3QkFDTixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICAgIENvbXBvbmVudCxcclxuICAgIEV2ZW50RW1pdHRlcixcclxuICAgIGZvcndhcmRSZWYsXHJcbiAgICBJbmplY3RvcixcclxuICAgIElucHV0LFxyXG4gICAgT25EZXN0cm95LFxyXG4gICAgT25Jbml0LFxyXG4gICAgT3V0cHV0LFxyXG4gICAgVmlld0NoaWxkXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IENvbnRleHRNZW51IH0gZnJvbSAndG4tY3VzdG9tLXByaW1lbmcvY29udGV4dG1lbnUnO1xyXG5pbXBvcnQgeyBGaWxlVXBsb2FkIH0gZnJvbSAndG4tY3VzdG9tLXByaW1lbmcvZmlsZXVwbG9hZCc7XHJcbmltcG9ydCB7IE92ZXJsYXlQYW5lbCB9IGZyb20gJ3RuLWN1c3RvbS1wcmltZW5nL292ZXJsYXlwYW5lbCc7XHJcblxyXG5pbXBvcnQgeyBDb21wb25lbnRDb250ZXh0U2VydmljZSB9IGZyb20gJy4uLy4uL2FwcC1jb250ZXh0L2NvbXBvbmVudC1jb250ZXh0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb21wb25lbnRCYXNlIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9iYXNlL2NvbXBvbmVudC1iYXNlJztcclxuaW1wb3J0IHsgRmlsZVVwbG9hZENvbnRyb2xTY2hlbWEgfSBmcm9tICcuLi8uLi9jbGFzc2VzL2Zvcm0tc2NoZW1hJztcclxuaW1wb3J0IHsgQ29tQ3R4Q29uc3RhbnRzIH0gZnJvbSAnLi4vLi4vY29uZmlncy9jb21wb25lbnQtY29udGV4dC5jb25zdGFudCc7XHJcbmltcG9ydCB7IE1vZHVsZUNvbmZpZyB9IGZyb20gJy4uLy4uL2NvbmZpZ3MvbW9kdWxlLWNvbmZpZyc7XHJcbmltcG9ydCB7IENvbW1hbmRUeXBlLCBUbkNsaWVudENvbW1hbmQgfSBmcm9tICcuLi8uLi9tb2RlbHMvdG4tY2xpZW50LWNvbW1hbmQnO1xyXG5pbXBvcnQgeyBBdXRoZW5TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYXV0aGVuLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBNb2R1bGVDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbW9kdWxlLWNvbmZpZy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTm90aWZpZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbm90aWZpZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IFNpZ25hbFJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc2lnbmFsci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVG5DbGllbnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdG4tY2xpZW50LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBVc2VyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3VzZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IEZpbGVWaWV3ZXJDb21wb25lbnQgfSBmcm9tICcuLi9maWxlLWV4cGxvcmVyL2ZpbGUtdmlld2VyL2ZpbGUtdmlld2VyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEZpbGVFeHBsb3Jlckl0ZW0gfSBmcm9tICcuLi9maWxlLWV4cGxvcmVyL21vZGVscy9maWxlLWV4cGxvcmVyLWl0ZW0nO1xyXG5pbXBvcnQgeyBHZW5lcmF0ZUxpbmtEb3dubG9hZERUTyB9IGZyb20gJy4uL2ZpbGUtZXhwbG9yZXIvbW9kZWxzL2dlbmVyYXRlLWxpbmstZG93bmxvYWQtZHRvJztcclxuaW1wb3J0IHsgSVNlcnZpY2VGaWxlVXBsb2FkQ29tcG9uZW50IH0gZnJvbSAnLi4vZmlsZS1leHBsb3Jlci9tb2RlbHMvaW50ZXJmYWNlcyc7XHJcbmltcG9ydCB7IERvd25sb2FkTGlua1NlcnZpY2UgfSBmcm9tICcuLi9maWxlLWV4cGxvcmVyL3NlcnZpY2VzL2Rvd25sb2FkLWxpbmsuc2VydmljZSc7XHJcbmltcG9ydCB7IEZpbGVEYXRhU2VydmljZSB9IGZyb20gJy4uL2ZpbGUtZXhwbG9yZXIvc2VydmljZXMvZmlsZS1kYXRhLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBGaWxlRXhwbG9yZXJTZXJ2aWNlIH0gZnJvbSAnLi4vZmlsZS1leHBsb3Jlci9zZXJ2aWNlcy9maWxlLWV4cGxvcmVyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBGaWxlT2JqZWN0U2VydmljZSB9IGZyb20gJy4uL2ZpbGUtZXhwbG9yZXIvc2VydmljZXMvZmlsZS1vYmplY3Quc2VydmljZSc7XHJcblxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ3NlcnZpY2UtZmlsZS11cGxvYWQnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL3NlcnZpY2UtZmlsZS11cGxvYWQuY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmxzOiBbJy4vc2VydmljZS1maWxlLXVwbG9hZC5jb21wb25lbnQuc2NzcyddLFxyXG4gICAgcHJvdmlkZXJzOiBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcclxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gU2VydmljZUZpbGVVcGxvYWRDb21wb25lbnQpLFxyXG4gICAgICAgICAgICBtdWx0aTogdHJ1ZVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgQ29tcG9uZW50Q29udGV4dFNlcnZpY2VcclxuICAgIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIFNlcnZpY2VGaWxlVXBsb2FkQ29tcG9uZW50IGV4dGVuZHMgQ29tcG9uZW50QmFzZSBpbXBsZW1lbnRzIElTZXJ2aWNlRmlsZVVwbG9hZENvbXBvbmVudCwgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICAgIEBWaWV3Q2hpbGQoJ2NvbnRleHRNZW51JykgY29udGV4dE1lbnU6IENvbnRleHRNZW51O1xyXG4gICAgQFZpZXdDaGlsZCgnZmlsZScpIGZpbGU6IEZpbGVVcGxvYWQ7XHJcbiAgICBAVmlld0NoaWxkKCdmaWxlRGV0YWlsQ29tbWFuZCcpIGZpbGVEZXRhaWxDb21tYW5kOiBPdmVybGF5UGFuZWw7XHJcbiAgICBAVmlld0NoaWxkKCdmaWxlVmlld2VyTmV3JykgZmlsZVZpZXdlck5ldzogRmlsZVZpZXdlckNvbXBvbmVudDtcclxuXHJcbiAgICBASW5wdXQoKSBmaWxlRGF0YVNlcnZpY2U6IEZpbGVEYXRhU2VydmljZTtcclxuICAgIEBJbnB1dCgpIGNvbnRyb2w6IEZpbGVVcGxvYWRDb250cm9sU2NoZW1hID0gbmV3IEZpbGVVcGxvYWRDb250cm9sU2NoZW1hKCk7XHJcbiAgICBASW5wdXQoKSBzZXJ2aWNlQ29kZSA9ICcnO1xyXG4gICAgQElucHV0KCkgZW50aXR5ID0gJyc7XHJcbiAgICBfZW50aXR5S2V5OiBzdHJpbmc7XHJcbiAgICBASW5wdXQoKSBzZXQgZW50aXR5S2V5KHZhbDogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5fZW50aXR5S2V5ID0gdmFsO1xyXG4gICAgfTtcclxuXHJcbiAgICBASW5wdXQoKSBjaG9vc2VMYWJlbCA9ICdDaOG7jW4nO1xyXG5cclxuICAgIEBPdXRwdXQoKSBvbkluaXQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgICBAT3V0cHV0KCkgb25TZWxlY3Q6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgICBAT3V0cHV0KCkgb25SZW1vdmU6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgICBAT3V0cHV0KCkgb25DaGFuZ2VkOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cclxuICAgIGdldCBlbnRpdHlLZXkoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VudGl0eUtleTtcclxuICAgIH1cclxuXHJcbiAgICBmaWxlSWQ6IHN0cmluZyA9IG51bGw7XHJcbiAgICBzZWxlY3RlZEZpbGUgPSBudWxsO1xyXG4gICAgc2VsZWN0ZWRGaWxlTmFtZTogc3RyaW5nID0gbnVsbDtcclxuICAgIGV4dGVuc2lvbjogc3RyaW5nID0gbnVsbDtcclxuICAgIHNlbGVjdGVkRmlsZU5hbWVTaG9ydDogc3RyaW5nID0gbnVsbDtcclxuICAgIGhhc0ZpbGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIGxvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHNob3dOb3RpOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBmaWxlT2JqOiBGaWxlRXhwbG9yZXJJdGVtID0gbmV3IEZpbGVFeHBsb3Jlckl0ZW0oKTtcclxuICAgIHVzZXJJZDogc3RyaW5nID0gbnVsbDtcclxuICAgIG5vdGlmaWNhdGlvbjogc3RyaW5nID0gbnVsbDtcclxuICAgIF9tb2R1bGVDb25maWc6IE1vZHVsZUNvbmZpZztcclxuICAgIGFjY2VwdDogc3RyaW5nID0gJyc7XHJcbiAgICAvLyA9ICdpbWFnZS8qLC54bHN4LC54bHMsLnBkZiwuZG9jLC5kb2N4LC56aXAsLnJhciwnO1xyXG4gICAgcmVhZG9ubHkgPSBudWxsO1xyXG4gICAgZGVmYXVsdFNjYW5GaWxlTmFtZSA9IG51bGw7XHJcbiAgICBtZW51OiBBcnJheTxhbnk+ID0gW107XHJcblxyXG4gICAgb25DaGFuZ2VCYXNlOiAodmFsKSA9PiB2b2lkO1xyXG4gICAgb25Ub3VjaGVkOiAodmFsKSA9PiB2b2lkO1xyXG4gICAgaXNEaXNhYmxlZDogYm9vbGVhbjtcclxuICAgIF9zdWJzY3JpYmU6IFN1YnNjcmlwdGlvbiA9IG51bGw7XHJcblxyXG4gICAgZGF0YU1vZGVsOiBhbnkgPSB7fTtcclxuICAgIGZvcm1zOiBhbnkgPSB7fTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIF9maWxlT2JqZWN0U2VydmljZTogRmlsZU9iamVjdFNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBfc2lnbmFsUlNlcnZpY2U6IFNpZ25hbFJTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgX21vZHVsZUNvbmZpZ1NlcnZpY2U6IE1vZHVsZUNvbmZpZ1NlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBfdG5DbGllbnRTZXJ2aWNlOiBUbkNsaWVudFNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBfYXV0aGVuU2VydmljZTogQXV0aGVuU2VydmljZSxcclxuICAgICAgICBwcm90ZWN0ZWQgX3VzZXJTZXJ2aWNlOiBVc2VyU2VydmljZSxcclxuICAgICAgICBwcm90ZWN0ZWQgX25vdGlmaWVyU2VydmljZTogTm90aWZpZXJTZXJ2aWNlLFxyXG4gICAgICAgIHByb3RlY3RlZCBfZG93bmxvYWRMaW5rU2VydmljZTogRG93bmxvYWRMaW5rU2VydmljZSxcclxuICAgICAgICBwcm90ZWN0ZWQgX2ZpbGVFeHBsb3JlclNlcnZpY2U6IEZpbGVFeHBsb3JlclNlcnZpY2UsXHJcbiAgICAgICAgX2luamVjdG9yOiBJbmplY3RvclxyXG4gICAgKSB7XHJcbiAgICAgICAgc3VwZXIoX2luamVjdG9yKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX3VzZXJTZXJ2aWNlLmlzVmFsaWRBY2Nlc3NUb2tlbigpKSB7XHJcbiAgICAgICAgICAgIHRoaXMudXNlcklkID0gdGhpcy5fdXNlclNlcnZpY2UuZ2V0VXNlcklkQ29tYmluZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmRhdGFNb2RlbC5maWxlVmlld2VyID0ge307XHJcbiAgICAgICAgdGhpcy5kYXRhTW9kZWwuZHJpdmVGaWxlRGlhbG9nID0geyBwb3B1cFNpemU6IDxhbnk+e30gfTtcclxuXHJcbiAgICAgICAgdGhpcy5fbW9kdWxlQ29uZmlnID0gX21vZHVsZUNvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnKCk7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgdGhpcy5zZXRVcCgpO1xyXG4gICAgICAgIHRoaXMuc3Vic2NyaWJlKCk7XHJcbiAgICAgICAgdGhpcy5vbkluaXQuZW1pdCh0aGlzKTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRVcCgpIHtcclxuICAgICAgICBpZiAodGhpcy5jb250cm9sLmFjY2VwdCkge1xyXG4gICAgICAgICAgICB0aGlzLmFjY2VwdCA9IHRoaXMuY29udHJvbC5hY2NlcHQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHRoaXMuY29udHJvbC5hY2NlcHRGaWxlVHlwZXMpIHtcclxuICAgICAgICAgICAgdGhpcy5hY2NlcHQgPSB0aGlzLl9maWxlT2JqZWN0U2VydmljZS5nZXRBY2NlcHRlZEV4dGVuc2lvbnModGhpcy5jb250cm9sLmFjY2VwdEZpbGVUeXBlcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucmVhZG9ubHkgPSB0aGlzLmNvbnRyb2wucmVhZG9ubHk7XHJcbiAgICAgICAgdGhpcy5mb3Jtc1snZmlsZVZpZXdlciddID0ge1xyXG4gICAgICAgICAgICBzaG93OiBmYWxzZSxcclxuICAgICAgICAgICAgZm9ybURhdGE6IHt9LFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgaWYgKHRoaXMuZmlsZURhdGFTZXJ2aWNlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZmlsZURhdGFTZXJ2aWNlLnJlZ2lzdGVyKHRoaXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5lbnRpdHlLZXkgJiYgIXRoaXMuZmlsZURhdGFTZXJ2aWNlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0U2VydmljZUZpbGUoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZ2V0U2VydmljZUZpbGUoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaGFzS2V5cygpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNlcnZpY2VSZXF1ZXN0TW9kZWwgPSB7XHJcbiAgICAgICAgICAgICAgICBzZXJ2aWNlQ29kZTogdGhpcy5zZXJ2aWNlQ29kZSxcclxuICAgICAgICAgICAgICAgIGVudGl0eTogdGhpcy5lbnRpdHksXHJcbiAgICAgICAgICAgICAgICBlbnRpdHlLZXk6IHRoaXMuZW50aXR5S2V5LFxyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5zZXROb3RpKCfEkGFuZyBs4bqleSDEkcOtbmgga8OobS4uLicpO1xyXG4gICAgICAgICAgICBjb25zdCBmaWxlT2JqZWN0ID0gKGF3YWl0IHRoaXMuX2ZpbGVPYmplY3RTZXJ2aWNlLmdldFNpbmdsZVNlcnZpY2VGaWxlKHNlcnZpY2VSZXF1ZXN0TW9kZWwpKS5kYXRhO1xyXG4gICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5zZXROb3RpKG51bGwpO1xyXG4gICAgICAgICAgICBpZiAoZmlsZU9iamVjdCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRGaWxlT2JqZWN0KGZpbGVPYmplY3QpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnNldEZpbGVPYmplY3QobnVsbCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNldE1lbnUoKTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRGaWxlT2JqZWN0KGZpbGVPYmplY3Q6IGFueSkge1xyXG4gICAgICAgIGlmIChmaWxlT2JqZWN0ID09IG51bGwpIHtcclxuICAgICAgICAgICAgdGhpcy5maWxlT2JqID0gbnVsbDtcclxuICAgICAgICAgICAgdGhpcy5maWxlSWQgPSBudWxsO1xyXG4gICAgICAgICAgICB0aGlzLmhhc0ZpbGUgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEZpbGUgPSBudWxsO1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkRmlsZU5hbWUgPSBudWxsO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5vbkNoYW5nZUJhc2UobnVsbCk7XHJcbiAgICAgICAgICAgIHRoaXMub25DaGFuZ2VkLmVtaXQoKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmZpbGVPYmogPSBmaWxlT2JqZWN0O1xyXG4gICAgICAgIHRoaXMuZmlsZUlkID0gZmlsZU9iamVjdC5pZDtcclxuICAgICAgICB0aGlzLnNldEZpbGVOYW1lKGZpbGVPYmplY3QubmFtZSk7XHJcbiAgICAgICAgdGhpcy5oYXNGaWxlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgdGhpcy5vbkNoYW5nZUJhc2UoJ2hhcy12YWx1ZScpO1xyXG4gICAgICAgIHRoaXMub25Jbml0LmVtaXQoeyBmaWxlSWQ6IHRoaXMuZmlsZUlkIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGhhc0tleXMoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VydmljZUNvZGVcclxuICAgICAgICAgICAgJiYgdGhpcy5lbnRpdHlcclxuICAgICAgICAgICAgJiYgdGhpcy5lbnRpdHlLZXlcclxuICAgICAgICAgICAgJiYgdGhpcy5lbnRpdHlLZXkgIT0gdGhpcy5fY29tbW9uU2VydmljZS5ndWlkRW1wdHkoKTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRNZW51KCkge1xyXG4gICAgICAgIGlmICghdGhpcy5oYXNGaWxlKSB7XHJcbiAgICAgICAgICAgIHRoaXMubWVudSA9IFtdO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLm1lbnUgPSBbXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGxhYmVsOiAnVOG6o2kgduG7gScsXHJcbiAgICAgICAgICAgICAgICBpY29uOiAnZmFzIGZhLWRvd25sb2FkJyxcclxuICAgICAgICAgICAgICAgIGNvbW1hbmQ6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRvd25sb2FkKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICBdO1xyXG4gICAgfVxyXG5cclxuICAgIHN1YnNjcmliZSgpIHtcclxuICAgICAgICBpZiAodGhpcy5yb290Q29udGV4dCAmJiAhdGhpcy5jb250cm9sLmF1dG9TYXZlZCkge1xyXG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhgLS0tLS0tLS0tLS0tLS0tLS0+c3Vic2NyaWJlIGV2ZW50ICR7dGhpcy5jb250cm9sLmZpZWxkfV8ke3RoaXMucm9vdENvbnRleHQua2V5fWApO1xyXG4gICAgICAgICAgICB0aGlzLl9zdWJzY3JpYmUgPSB0aGlzLnJvb3RDb250ZXh0LnN1YnNjcmliZShDb21DdHhDb25zdGFudHMuQ09NTU9OLlNBVkVfRklMRV9JTl9GT1JNLCBycyA9PiB7XHJcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZygnLS0tLS0tLS0tLS0tLS0tLS0+c2F2ZSBldmVudCAnICsgdGhpcy5jb250cm9sLmZpZWxkKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlU2F2ZUZpbGUoKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG5nT25EZXN0cm95KCkge1xyXG4gICAgICAgIGlmICh0aGlzLl9zdWJzY3JpYmUpIHtcclxuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ3Vuc3Vic2NyaWJlICcgKyB0aGlzLmNvbnRyb2wuZmllbGQpO1xyXG4gICAgICAgICAgICB0aGlzLl9zdWJzY3JpYmUudW5zdWJzY3JpYmUoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuZmlsZURhdGFTZXJ2aWNlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZmlsZURhdGFTZXJ2aWNlLnVucmVnaXN0ZXIodGhpcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XHJcbiAgICB9XHJcblxyXG4gICAgb25PcGVuU2VsZWN0KCkge1xyXG4gICAgICAgIGlmICh0aGlzLmZpbGUuYmFzaWNGaWxlSW5wdXQpIHtcclxuICAgICAgICAgICAgdGhpcy5maWxlLmJhc2ljRmlsZUlucHV0Lm5hdGl2ZUVsZW1lbnQuY2xpY2soKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgb25TZWxlY3RGaWxlKGV2dCkge1xyXG4gICAgICAgIHRoaXMuaGFzRmlsZSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuZmlsZUlkID0gbnVsbDtcclxuICAgICAgICB0aGlzLmZpbGUuY2xlYXIoKTtcclxuICAgICAgICBpZiAoZXZ0LmVycm9yRmlsZXMgJiYgZXZ0LmVycm9yRmlsZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLnNob3dOb3RpID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb24gPSBgJHtldnQuZXJyb3JNZXNzYWdlc1swXS5zdW1tYXJ5fSR7ZXZ0LmVycm9yTWVzc2FnZXNbMF0uZGV0YWlsfWA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkRmlsZSA9IGV2dC5zdWNjZXNzRmlsZXNbMF07XHJcbiAgICAgICAgICAgIHRoaXMuc2V0RmlsZU5hbWUodGhpcy5zZWxlY3RlZEZpbGUgPyB0aGlzLnNlbGVjdGVkRmlsZS5uYW1lIDogbnVsbCk7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5jb250cm9sLmF1dG9TYXZlZCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVTYXZlRmlsZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5oYXNGaWxlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMub25DaGFuZ2VCYXNlKCdoYXMtdmFsdWUnKTtcclxuICAgICAgICAgICAgICAgIHRoaXMub25TZWxlY3QuZW1pdCh0aGlzLnNlbGVjdGVkRmlsZSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9uQ2hhbmdlZC5lbWl0KHRoaXMuc2VsZWN0ZWRGaWxlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBoYW5kbGVTYXZlRmlsZSgpIHtcclxuICAgICAgICAvLyDEkMOjIGzGsHUgZmlsZS5cclxuICAgICAgICBpZiAodGhpcy5maWxlSWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gVHLGsOG7nW5nIGjhu6NwIGtow7RuZyBjw7MgxJHhu6cga2V5cy5cclxuICAgICAgICBpZiAoIXRoaXMuaGFzS2V5cygpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZygnQ2jGsGEgY+G6pXUgaMOsbmgga2V5cycpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBDaMawYSBjaOG7jW4gZmlsZS5cclxuICAgICAgICBpZiAoIXRoaXMuc2VsZWN0ZWRGaWxlKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XHJcbiAgICAgICAgZm9ybURhdGEuYXBwZW5kKCdzZXJ2aWNlQ29kZScsIHRoaXMuc2VydmljZUNvZGUpO1xyXG4gICAgICAgIGZvcm1EYXRhLmFwcGVuZCgnZW50aXR5JywgdGhpcy5lbnRpdHkpO1xyXG4gICAgICAgIGZvcm1EYXRhLmFwcGVuZCgnZW50aXR5S2V5JywgdGhpcy5lbnRpdHlLZXkpO1xyXG4gICAgICAgIGZvcm1EYXRhLmFwcGVuZCgnaXNNdWx0aXBsZScsICdmYWxzZScpO1xyXG4gICAgICAgIGZvcm1EYXRhLmFwcGVuZCgnZmlsZScsIHRoaXMuc2VsZWN0ZWRGaWxlKTtcclxuXHJcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnNldE5vdGkoJ8SQYW5nIHThuqNpIGZpbGUgbMOqbi4uLicpO1xyXG4gICAgICAgIHRoaXMuX2ZpbGVPYmplY3RTZXJ2aWNlLmNyZWF0ZVNlcnZpY2VGaWxlKGZvcm1EYXRhKVxyXG4gICAgICAgICAgICAudGhlbihycyA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0Tm90aShudWxsKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAocnMuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRGaWxlID0gdGhpcy5zZWxlY3RlZEZpbGU7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEZpbGVOYW1lID0gdGhpcy5zZWxlY3RlZEZpbGUubmFtZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbGVJZCA9IHJzLmRhdGE7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oYXNGaWxlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uQ2hhbmdlZC5lbWl0KHsgZmlsZUlkOiB0aGlzLmZpbGVJZCwgc2VsZWN0ZWRGaWxlOiB0aGlzLnNlbGVjdGVkRmlsZSB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NydWRTZXJ2aWNlLnByb2Nlc3NFcnJvclJlc3BvbnNlKHJzKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSwgZXJyID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXROb3RpKG51bGwpO1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZygnVXBsb2FkIGZpbGUgY2jGsGEgdGjDoG5oIGPDtG5nJyk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBzZXROb3RpKG1zZykge1xyXG4gICAgICAgIGlmIChtc2cpIHtcclxuICAgICAgICAgICAgdGhpcy5zaG93Tm90aSA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uID0gbXNnO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zaG93Tm90aSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbiA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHNldEZpbGVOYW1lKGZpbGVOYW1lKSB7XHJcbiAgICAgICAgaWYgKGZpbGVOYW1lKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRGaWxlTmFtZSA9IGZpbGVOYW1lO1xyXG4gICAgICAgICAgICB0aGlzLmV4dGVuc2lvbiA9IHRoaXMuX2ZpbGVPYmplY3RTZXJ2aWNlLmdldEZpbGVFeHRlbnNpb24oZmlsZU5hbWUpO1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkRmlsZU5hbWVTaG9ydCA9IGZpbGVOYW1lLnN1YnN0cigwLCBmaWxlTmFtZS5sZW5ndGggLSB0aGlzLmV4dGVuc2lvbi5sZW5ndGggLSAxKTtcclxuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkRmlsZU5hbWUgPSBudWxsO1xyXG4gICAgICAgICAgICB0aGlzLmV4dGVuc2lvbiA9IG51bGw7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRGaWxlTmFtZVNob3J0ID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgc2hvd0NvbnRleHRNZW51KGV2dCkge1xyXG4gICAgICAgIHRoaXMuY29udGV4dE1lbnUudG9nZ2xlKGV2dCk7XHJcbiAgICAgICAgZXZ0LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgfVxyXG5cclxuICAgIG9uUmVtb3ZlRmlsZSgpIHtcclxuICAgICAgICB0aGlzLmZpbGVPYmogPSBudWxsO1xyXG4gICAgICAgIHRoaXMuZmlsZUlkID0gbnVsbDtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkRmlsZSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5zZXRGaWxlTmFtZShudWxsKTtcclxuICAgICAgICB0aGlzLmhhc0ZpbGUgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5vbkNoYW5nZUJhc2UobnVsbCk7XHJcbiAgICAgICAgdGhpcy5vblJlbW92ZS5lbWl0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgb25Eb3dubG9hZEZpbGUoKSB7XHJcbiAgICAgICAgdGhpcy5kb3dubG9hZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHNjYW5GaWxlKGV2dCkge1xyXG4gICAgICAgIC8vIHNlbmQgdG4gY29tbWFuZFxyXG4gICAgICAgIGNvbnN0IGNvcnJlbGF0aW9uSWQgPSB0aGlzLl9jb21tb25TZXJ2aWNlLnJhbmRvbVN0cmluZygpO1xyXG4gICAgICAgIGNvbnN0IGNvbW1hbmQgPSBuZXcgVG5DbGllbnRDb21tYW5kKCk7XHJcbiAgICAgICAgY29tbWFuZC5jb21tYW5kVHlwZSA9IENvbW1hbmRUeXBlLlNjYW47XHJcbiAgICAgICAgLy8gY29tbWFuZC5rZXkgPSB0aGlzLl9tb2R1bGVDb25maWcuZW52aXJvbm1lbnQuc2lnbmFsci5jbGllbnRLZXk7XHJcbiAgICAgICAgY29tbWFuZC5rZXkgPSB0aGlzLl9tb2R1bGVDb25maWcuZW52aXJvbm1lbnQuc2lnbmFsci5jbGllbnRLZXk7XHJcblxyXG4gICAgICAgIGNvbnN0IHNjYW5GaWxlQ29tbWFuZCA9IHtcclxuICAgICAgICAgICAgY29ycmVsYXRpb25JZDogY29ycmVsYXRpb25JZCxcclxuICAgICAgICAgICAgdXBsb2FkRmlsZUFwaTogdGhpcy5fZmlsZU9iamVjdFNlcnZpY2UuZ2V0U2NhbkZpbGVVcGxvYWRFbmRwb2ludChjb3JyZWxhdGlvbklkKSxcclxuICAgICAgICAgICAgYWNjZXNzVG9rZW46IHRoaXMuX2F1dGhlblNlcnZpY2UuZ2V0QWNjZXNzVG9rZW4oKSxcclxuICAgICAgICAgICAgZGVmYXVsdEZpbGVOYW1lOiB0aGlzLmRlZmF1bHRTY2FuRmlsZU5hbWVcclxuICAgICAgICB9O1xyXG4gICAgICAgIGNvbW1hbmQuZGF0YSA9IHNjYW5GaWxlQ29tbWFuZDtcclxuXHJcbiAgICAgICAgdGhpcy5fdG5DbGllbnRTZXJ2aWNlLnNlbmRDb21tYW5kKGNvbW1hbmQpO1xyXG5cclxuICAgICAgICB0aGlzLl9zaWduYWxSU2VydmljZS51blN1YnNjcmliZVZpZXdDb2RlKG51bGwsIGBGSUxFLlNDQU5ORUQuJHtjb3JyZWxhdGlvbklkfWApO1xyXG4gICAgICAgIHRoaXMuX3NpZ25hbFJTZXJ2aWNlLnN0YXJ0KG51bGwsIGBGSUxFLlNDQU5ORUQuJHtjb3JyZWxhdGlvbklkfWAsIGRhdGEgPT4ge1xyXG4gICAgICAgICAgICBpZiAoZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgbGV0IG9iajogYW55O1xyXG4gICAgICAgICAgICAgICAgaWYgKGRhdGEgaW5zdGFuY2VvZiBPYmplY3QpIHtcclxuICAgICAgICAgICAgICAgICAgICBvYmogPSBkYXRhO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsZUlkID0gb2JqLm1lc3NhZ2UuY29udGVudDtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbGVPYmoubmFtZSA9IG9iai5tZXNzYWdlLnRpdGxlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgb2JqID0gSlNPTi5wYXJzZShkYXRhKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbGVJZCA9IG9iai5tZXNzYWdlLmNvbnRlbnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5maWxlT2JqLm5hbWUgPSBvYmoubWVzc2FnZS50aXRsZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHZpZXdPbmxpbmUoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2ZpbGVPYmplY3RTZXJ2aWNlLmlzU3VwcG9ydGVkVmlld09ubGluZSh0aGlzLmZpbGVPYmoubmFtZSkpIHtcclxuICAgICAgICAgICAgdGhpcy5kYXRhTW9kZWwuZmlsZVZpZXdlci5kYXRhID0ge307XHJcbiAgICAgICAgICAgIHRoaXMuZGF0YU1vZGVsLmZpbGVWaWV3ZXIuZGF0YS5maWxlSWQgPSB0aGlzLmZpbGVJZDtcclxuICAgICAgICAgICAgdGhpcy5kYXRhTW9kZWwuZmlsZVZpZXdlci5kYXRhLmZpbGVOYW1lID0gdGhpcy5maWxlT2JqLm5hbWU7XHJcbiAgICAgICAgICAgIHRoaXMuZGF0YU1vZGVsLmZpbGVWaWV3ZXIuZGF0YS5zZXJ2aWNlID0gdGhpcy5zZXJ2aWNlQ29kZTtcclxuICAgICAgICAgICAgdGhpcy5kYXRhTW9kZWwuZmlsZVZpZXdlci5kYXRhLmVudGl0eSA9IHRoaXMuZW50aXR5O1xyXG4gICAgICAgICAgICB0aGlzLmRhdGFNb2RlbC5maWxlVmlld2VyLmRhdGEuZW50aXR5S2V5ID0gdGhpcy5lbnRpdHlLZXk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmRhdGFNb2RlbC5maWxlVmlld2VyLmRhdGEuaXNGaWxlVmVyc2lvbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmRhdGFNb2RlbC5maWxlVmlld2VyLnNob3cgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5kb3dubG9hZCgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBkb3dubG9hZCgpIHtcclxuICAgICAgICBpZiAoIXRoaXMuZmlsZUlkKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IG1vZGVsID0gbmV3IEdlbmVyYXRlTGlua0Rvd25sb2FkRFRPKHtcclxuICAgICAgICAgICAgZmlsZUlkOiB0aGlzLmZpbGVJZFxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLl9kb3dubG9hZExpbmtTZXJ2aWNlLmRvd25sb2FkTGluayhtb2RlbCk7XHJcbiAgICB9XHJcblxyXG4gICAgdXBsb2FkRmlsZUZyb21Ecml2ZSgpIHtcclxuICAgICAgICAvLyB0aGlzLmRhdGFNb2RlbC5kcml2ZUZpbGVEaWFsb2cgPSB7XHJcbiAgICAgICAgLy8gICAgIHNob3c6IHRydWVcclxuICAgICAgICAvLyB9O1xyXG4gICAgfVxyXG5cclxuICAgIGNvcHlGaWxlVG9Ecml2ZSgpIHtcclxuICAgICAgICAvLyB0aGlzLl9maWxlRXhwbG9yZXJTZXJ2aWNlLmdldEZvbGRlcklkKHRoaXMudXNlcklkKS50aGVuKHJlc3BvbnNlID0+IHtcclxuICAgICAgICAvLyAgICAgdmFyIGNvcHlGaWxlRHRvID0gbmV3IENvcHlGaWxlRHRvKCk7XHJcbiAgICAgICAgLy8gICAgIGNvcHlGaWxlRHRvLmlkID0gdGhpcy5maWxlSWQ7XHJcbiAgICAgICAgLy8gICAgIGlmICh0aGlzLmZpbGVOYW1lID09IFwiXCIpIHtcclxuICAgICAgICAvLyAgICAgICAgIGlmICh0aGlzLmZpbGVPYmogIT0gbnVsbCkge1xyXG4gICAgICAgIC8vICAgICAgICAgICAgIGNvcHlGaWxlRHRvLm5hbWUgPSB0aGlzLmZpbGVPYmoubmFtZTtcclxuICAgICAgICAvLyAgICAgICAgIH1cclxuICAgICAgICAvLyAgICAgfSBlbHNlIHtcclxuICAgICAgICAvLyAgICAgICAgIGNvcHlGaWxlRHRvLm5hbWUgPSB0aGlzLmZpbGVOYW1lO1xyXG4gICAgICAgIC8vICAgICB9XHJcbiAgICAgICAgLy8gICAgIGNvcHlGaWxlRHRvLm93bmVyVHlwZSA9IHRoaXMudXNlcklkO1xyXG4gICAgICAgIC8vICAgICBjb3B5RmlsZUR0by5mb2xkZXJJZCA9IHJlc3BvbnNlLmRhdGE7XHJcblxyXG4gICAgICAgIC8vICAgICB0aGlzLl9maWxlRXhwbG9yZXJTZXJ2aWNlLmNvcHlGaWxlKGNvcHlGaWxlRHRvKS50aGVuKHJlc3BvbnNlID0+IHtcclxuICAgICAgICAvLyAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93U3VjY2VzcygnU2FvIGNow6lwIHTDoGkgbGnhu4d1IHbhu4EgdGjGsCBt4bulYyBjw6EgbmjDom4gdGjDoG5oIGPDtG5nJyk7XHJcbiAgICAgICAgLy8gICAgIH0sIGVycm9yID0+IHtcclxuICAgICAgICAvLyAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93QnVzaW5lc3NFcnJvcihlcnJvci5lcnJvci5tZXNzYWdlKTtcclxuICAgICAgICAvLyAgICAgfSk7XHJcbiAgICAgICAgLy8gfSk7XHJcbiAgICB9XHJcblxyXG4gICAgd3JpdGVWYWx1ZShvYmo6IGFueSk6IHZvaWQge1xyXG4gICAgfVxyXG5cclxuICAgIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMub25DaGFuZ2VCYXNlID0gZm47XHJcbiAgICB9XHJcblxyXG4gICAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMub25Ub3VjaGVkID0gZm47XHJcbiAgICB9XHJcblxyXG4gICAgc2V0RGlzYWJsZWRTdGF0ZT8oaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuaXNEaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgb3BlbkZpbGVWaWV3ZXIoKSB7XHJcbiAgICAgICAgLy8gY29uc3QgZmlsZUV4cGxvcmVyUmVzID0gYXdhaXQgdGhpcy5fZmlsZUV4cGxvcmVyU2VydmljZS5nZXRTZXJ2aWNlRmlsZUV4cGxvcmVyKHRoaXMuc2VydmljZUNvZGUsIHRoaXMuZW50aXR5LCB0aGlzLmVudGl0eUtleSk7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2codGhpcy5jb250cm9sKTtcclxuICAgICAgICAvLyBpZiAoIWZpbGVFeHBsb3JlclJlcy5zdWNjZXNzIHx8IGZpbGVFeHBsb3JlclJlcy5kYXRhKSB7XHJcbiAgICAgICAgLy8gICAgIHJldHVybjtcclxuICAgICAgICAvLyB9XHJcbiAgICAgICAgLy8gY29uc3QgZXhwbG9yZXJJdGVtID0gZmlsZUV4cGxvcmVyUmVzLmRhdGE7XHJcbiAgICAgICAgLy8gY29uc3QgY2FuVmlld09ubGluZSA9IHRoaXMuX2ZpbGVPYmplY3RTZXJ2aWNlLmlzU3VwcG9ydGVkVmlld09ubGluZShleHBsb3Jlckl0ZW0ubmFtZSk7XHJcbiAgICAgICAgY29uc3QgZmlsZUJpbmFyeSA9IGF3YWl0IHRoaXMuX2ZpbGVFeHBsb3JlclNlcnZpY2UuY2hlY2tQaHlzaWNhbEZpbGUodGhpcy5maWxlSWQpO1xyXG4gICAgICAgIGlmICghZmlsZUJpbmFyeS5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZygnRmlsZSBraMO0bmcgdOG7k24gdOG6oWksIHZ1aSBsw7JuZyBsacOqbiBo4buHIHF14bqjbiB0cuG7iyB2acOqbicpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGZpbGVPYmplY3QgPSBhd2FpdCB0aGlzLl9maWxlT2JqZWN0U2VydmljZS5nZXREZXRhaWwodGhpcy5maWxlSWQpO1xyXG4gICAgICAgIGxldCBmaWxlTmFtZSA9ICcnO1xyXG4gICAgICAgIGlmICghZmlsZU9iamVjdC5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZygnQ8OzIGzhu5dpIHRyb25nIGzDumMgbOG6pXkgZOG7ryBsaeG7h3UgZmlsZSwgdnVpIGzDsm5nIGxpw6puIGjhu4cgcXXhuqNuIHRy4buLIHZpw6puJyk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZmlsZU5hbWUgPSBmaWxlT2JqZWN0Py5uYW1lO1xyXG4gICAgICAgIHRoaXMuZm9ybXMuZmlsZVZpZXdlci5mb3JtRGF0YS5kYXRhID0ge1xyXG4gICAgICAgICAgICBmaWxlSWQ6IHRoaXMuZmlsZUlkLFxyXG4gICAgICAgICAgICBpc0ZpbGVWZXJzaW9uOiBmYWxzZSxcclxuICAgICAgICAgICAgZmlsZU5hbWUsXHJcbiAgICAgICAgICAgIHNlcnZpY2U6IHRoaXMuc2VydmljZUNvZGUsXHJcbiAgICAgICAgICAgIGVudGl0eTogdGhpcy5lbnRpdHksXHJcbiAgICAgICAgICAgIGVudGl0eUtleTogdGhpcy5lbnRpdHlLZXksXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLmZvcm1zLmZpbGVWaWV3ZXIuc2hvdyA9IHRydWU7XHJcbiAgICB9XHJcbn1cclxuIl19
|
|
@@ -4,7 +4,7 @@ import { NG_VALUE_ACCESSOR } from '@angular/forms';
|
|
|
4
4
|
import { TranslateService } from '@ngx-translate/core';
|
|
5
5
|
import { ComponentContextService } from '../../app-context/component-context.service';
|
|
6
6
|
import { ComponentBase } from '../../classes/base/component-base';
|
|
7
|
-
import { CrudListSetting, DropdownControlSchema, DropdownOptions, EntityPickerColumn, EntityPickerControlSchema, HeightType, Operator, PopupSize, UserPickerControlSchema } from '../../classes/form-schema';
|
|
7
|
+
import { CrudListSetting, DropdownControlSchema, DropdownOptions, EntityPickerColumn, EntityPickerControlSchema, HeightType, Operator, PopupSize, UserPickerControlSchema, UserType } from '../../classes/form-schema';
|
|
8
8
|
import { Filter } from '../../models/grid-info';
|
|
9
9
|
import { DmChucVuService } from '../../services/dm-chucvu.service';
|
|
10
10
|
import { UserV5Service } from '../../services/user-v5.service';
|
|
@@ -102,13 +102,15 @@ export class UserPickerComponent extends ComponentBase {
|
|
|
102
102
|
label: 'Giảng viên',
|
|
103
103
|
code: 'isGiangVien',
|
|
104
104
|
dataType: 'boolean',
|
|
105
|
-
width: '90px'
|
|
105
|
+
width: '90px',
|
|
106
|
+
isDisplay: this.control.userType === UserType.CanBo,
|
|
106
107
|
}),
|
|
107
108
|
new EntityPickerColumn({
|
|
108
109
|
label: 'Chuyên viên',
|
|
109
110
|
code: 'isChuyenVien',
|
|
110
111
|
dataType: 'boolean',
|
|
111
|
-
width: '90px'
|
|
112
|
+
width: '90px',
|
|
113
|
+
isDisplay: this.control.userType === UserType.CanBo,
|
|
112
114
|
})
|
|
113
115
|
], mdWidth: 12 }));
|
|
114
116
|
this.fieldSearchText = [...this.controlPicker.fieldSearchText];
|
|
@@ -219,7 +221,8 @@ export class UserPickerComponent extends ComponentBase {
|
|
|
219
221
|
if (this.controlPicker.fieldPlus) {
|
|
220
222
|
arrField.push(...this.controlPicker.fieldPlus.split(','));
|
|
221
223
|
}
|
|
222
|
-
const arrDisplayField = this.controlPicker.columns
|
|
224
|
+
const arrDisplayField = this.controlPicker.columns
|
|
225
|
+
.filter(x => x.isDisplay == true && !x.notInFields && x.dataType != 'custom')
|
|
223
226
|
.map(x => x.code);
|
|
224
227
|
this._commonService.addDistinct(arrDisplayField, arrField);
|
|
225
228
|
return arrField.toString();
|
|
@@ -575,4 +578,4 @@ UserPickerComponent.propDecorators = {
|
|
|
575
578
|
onBlur: [{ type: Output, args: ['onBlur',] }],
|
|
576
579
|
onReady: [{ type: Output, args: ['onReady',] }]
|
|
577
580
|
};
|
|
578
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uLy4uL3Byb2plY3RzL3RueC1zaGFyZWQvc3JjL2xpYi8iLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvdXNlci1waWNrZXIvdXNlci1waWNrZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQ0gsU0FBUyxFQUNULFlBQVksRUFDWixVQUFVLEVBQ1YsUUFBUSxFQUNSLEtBQUssRUFFTCxNQUFNLEVBQ04sV0FBVyxFQUNYLFNBQVMsRUFDWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFdkQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDdEYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ2xFLE9BQU8sRUFFSCxlQUFlLEVBQ2YscUJBQXFCLEVBQ3JCLGVBQWUsRUFDZixrQkFBa0IsRUFDbEIseUJBQXlCLEVBQ3pCLFVBQVUsRUFDVixRQUFRLEVBQ1IsU0FBUyxFQUNULHVCQUF1QixFQUMxQixNQUFNLDJCQUEyQixDQUFDO0FBQ25DLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDbkUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQy9ELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3pELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBZ0I5RSxNQUFNLE9BQU8sbUJBQW9CLFNBQVEsYUFBYTtJQXlEbEQsWUFDSSxTQUFtQixFQUNaLGNBQTZCLEVBQzVC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QWdCO1lBaUJoQixlQUFlOzs7OEJBb0JuQixTQUFTLFNBQUMsaUJBQWlCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO3NCQUk3QyxLQUFLO3dCQUNMLEtBQUs7dUJBS0wsS0FBSzt1QkFDTCxLQUFLOzZCQUVMLEtBQUs7cUJBU0wsTUFBTTt1QkFDTixNQUFNLFNBQUMsVUFBVTt5QkFDakIsTUFBTSxTQUFDLFlBQVk7d0JBQ25CLE1BQU0sU0FBQyxXQUFXO3NCQUNsQixNQUFNLFNBQUMsU0FBUztxQkFDaEIsTUFBTSxTQUFDLFFBQVE7c0JBQ2YsTUFBTSxTQUFDLFNBQVMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gICAgQ29tcG9uZW50LFxyXG4gICAgRXZlbnRFbWl0dGVyLFxyXG4gICAgZm9yd2FyZFJlZixcclxuICAgIEluamVjdG9yLFxyXG4gICAgSW5wdXQsXHJcbiAgICBPbkluaXQsXHJcbiAgICBPdXRwdXQsXHJcbiAgICBUZW1wbGF0ZVJlZixcclxuICAgIFZpZXdDaGlsZFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcclxuaW1wb3J0IHsgU2VsZWN0SXRlbSB9IGZyb20gJ3RuLWN1c3RvbS1wcmltZW5nL2FwaSc7XHJcbmltcG9ydCB7IENvbXBvbmVudENvbnRleHRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vYXBwLWNvbnRleHQvY29tcG9uZW50LWNvbnRleHQuc2VydmljZSc7XHJcbmltcG9ydCB7IENvbXBvbmVudEJhc2UgfSBmcm9tICcuLi8uLi9jbGFzc2VzL2Jhc2UvY29tcG9uZW50LWJhc2UnO1xyXG5pbXBvcnQge1xyXG4gICAgQXV0b0NvbXBsZXRlUGlja2VyQ29udHJvbFNjaGVtYSxcclxuICAgIENydWRMaXN0U2V0dGluZyxcclxuICAgIERyb3Bkb3duQ29udHJvbFNjaGVtYSxcclxuICAgIERyb3Bkb3duT3B0aW9ucyxcclxuICAgIEVudGl0eVBpY2tlckNvbHVtbixcclxuICAgIEVudGl0eVBpY2tlckNvbnRyb2xTY2hlbWEsXHJcbiAgICBIZWlnaHRUeXBlLFxyXG4gICAgT3BlcmF0b3IsXHJcbiAgICBQb3B1cFNpemUsXHJcbiAgICBVc2VyUGlja2VyQ29udHJvbFNjaGVtYVxyXG59IGZyb20gJy4uLy4uL2NsYXNzZXMvZm9ybS1zY2hlbWEnO1xyXG5pbXBvcnQgeyBGaWx0ZXIgfSBmcm9tICcuLi8uLi9tb2RlbHMvZ3JpZC1pbmZvJztcclxuaW1wb3J0IHsgRG1DaHVjVnVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZG0tY2h1Y3Z1LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBVc2VyVjVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdXNlci12NS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgYXBwZW5kRGVmYXVsdEZpbHRlciB9IGZyb20gJy4uLy4uL3V0aWxzL2NvbW1vbic7XHJcbmltcG9ydCB7IEFkdmFuY2VEYXRhRW50aXR5UGlja2VyIH0gZnJvbSAnLi4vZW50aXR5LXBpY2tlci9tb2RlbC9hZHZhbmNlLWRhdGEnO1xyXG5pbXBvcnQgeyBVc2VyUGlja2VyQm94Q29tcG9uZW50IH0gZnJvbSAnLi91c2VyLXBpY2tlci1ib3gvdXNlci1waWNrZXItYm94LmNvbXBvbmVudCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAndXNlci1waWNrZXInLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL3VzZXItcGlja2VyLmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL3VzZXItcGlja2VyLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgICBwcm92aWRlcnM6IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxyXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBVc2VyUGlja2VyQ29tcG9uZW50KSxcclxuICAgICAgICAgICAgbXVsdGk6IHRydWVcclxuICAgICAgICB9LFxyXG4gICAgICAgIENvbXBvbmVudENvbnRleHRTZXJ2aWNlXHJcbiAgICBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBVc2VyUGlja2VyQ29tcG9uZW50IGV4dGVuZHMgQ29tcG9uZW50QmFzZSBpbXBsZW1lbnRzIE9uSW5pdCwgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xyXG4gICAgQFZpZXdDaGlsZCgnZmlsdGVyQ2h1Y1Z1UmVmJywgeyBzdGF0aWM6IHRydWUgfSkgZmlsdGVyQ2h1Y1Z1UmVmOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gICAgb25DaGFuZ2VCYXNlOiBGdW5jdGlvbjtcclxuICAgIG9uVG91Y2hlZDogRnVuY3Rpb247XHJcblxyXG4gICAgQElucHV0KCkgY29udHJvbDogVXNlclBpY2tlckNvbnRyb2xTY2hlbWE7XHJcbiAgICBASW5wdXQoKSBwb3B1cFNpemU6IFBvcHVwU2l6ZSA9IG5ldyBQb3B1cFNpemUoe1xyXG4gICAgICAgIHdpZHRoOiAxMTAwLFxyXG4gICAgICAgIGhlaWdodDogOTAwLFxyXG4gICAgICAgIG1heGltaXplOiB0cnVlXHJcbiAgICB9KTtcclxuICAgIEBJbnB1dCgpIG11bHRpcGxlID0gZmFsc2U7XHJcbiAgICBASW5wdXQoKSBkaXNhYmxlZCA9IGZhbHNlO1xyXG4gICAgX3JlYWRPbmx5VmFsdWVzOiBzdHJpbmdbXTtcclxuICAgIEBJbnB1dCgpIHNldCByZWFkT25seVZhbHVlcyh2YWx1ZTogc3RyaW5nW10pIHtcclxuICAgICAgICB0aGlzLl9yZWFkT25seVZhbHVlcyA9IHZhbHVlO1xyXG4gICAgICAgIHRoaXMudXBkYXRlRnVuY0NoZWNrUmVhZE9ubHlJdGVtKCk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVSZWFkT25seUl0ZW0oKTtcclxuICAgIH1cclxuICAgIGdldCByZWFkT25seVZhbHVlcygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlWYWx1ZXM7XHJcbiAgICB9XHJcblxyXG4gICAgQE91dHB1dCgpIG9uSW5pdCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gICAgQE91dHB1dCgnb25TZWxlY3QnKSBvblNlbGVjdDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICAgIEBPdXRwdXQoJ29uVW5TZWxlY3QnKSBvblVuU2VsZWN0OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gICAgQE91dHB1dCgnb25DaGFuZ2VkJykgb25DaGFuZ2VkOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gICAgQE91dHB1dCgnb25Gb2N1cycpIG9uRm9jdXM6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgICBAT3V0cHV0KCdvbkJsdXInKSBvbkJsdXI6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgICBAT3V0cHV0KCdvblJlYWR5Jykgb25SZWFkeTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHJcbiAgICBjb250cm9sUGlja2VyOiBBdXRvQ29tcGxldGVQaWNrZXJDb250cm9sU2NoZW1hO1xyXG4gICAgc2V0dGluZ1BpY2tlcjogQ3J1ZExpc3RTZXR0aW5nID0gbmV3IENydWRMaXN0U2V0dGluZygpO1xyXG4gICAgYWR2YW5jZURhdGFQaWNrZXI6IEFkdmFuY2VEYXRhRW50aXR5UGlja2VyID0gbmV3IEFkdmFuY2VEYXRhRW50aXR5UGlja2VyKCk7XHJcblxyXG4gICAgdmFsdWU6IGFueTtcclxuICAgIGZ1bmNSZXR1cm5WYWx1ZTogKHZhbHVlKSA9PiB7fSA9IHZhbHVlID0+IHZhbHVlO1xyXG4gICAgc2VsZWN0ZWRSb3dEYXRhOiBhbnk7XHJcbiAgICBzZWxlY3RlZFZhbHVlOiBhbnk7XHJcbiAgICBzZWxlY3RlZFZhbHVlT2JqZWN0OiBhbnk7XHJcbiAgICBkYXRhU291cmNlOiBhbnlbXSA9IFtdO1xyXG4gICAgZnVuY0NoZWNrUmVhZE9ubHlJdGVtOiAoaXRlbTogYW55KSA9PiB2b2lkO1xyXG5cclxuICAgIGZpZWxkU2VhcmNoVGV4dDogc3RyaW5nW10gPSBbXTtcclxuXHJcbiAgICByZXN1bHRzOiBhbnlbXSA9IFtdO1xyXG5cclxuICAgIHNob3dGb3JtUGlja2VyID0gZmFsc2U7XHJcbiAgICBkaXJ0eSA9IGZhbHNlO1xyXG5cclxuICAgIHRvb2x0aXAgPSAnJztcclxuICAgIGhhc1ZhbHVlID0gZmFsc2U7XHJcbiAgICBzZWFyY2hTY2hlbWE6IGFueSA9IHt9O1xyXG4gICAgc2VhcmNoRGF0YTogYW55ID0ge307XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRGaWx0ZXJPblNlYXJjaD86IEZ1bmN0aW9uO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIF9pbmplY3RvcjogSW5qZWN0b3IsXHJcbiAgICAgICAgcHVibGljIF91c2VyVjVTZXJ2aWNlOiBVc2VyVjVTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgX3RyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBfZG1fQ2h1Y1Z1U2VydmljZTogRG1DaHVjVnVTZXJ2aWNlXHJcbiAgICApIHtcclxuICAgICAgICBzdXBlcihfaW5qZWN0b3IpO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25Jbml0KCkge1xyXG4gICAgICAgIHRoaXMuY29udHJvbC5fY29tcG9uZW50ID0gdGhpcztcclxuICAgICAgICBjb25zdCBjb21tb25GaWVsZFBsdXMgPSAnbWFDaHVjVnUsbHN0VGVuRG9uVmknO1xyXG4gICAgICAgIHRoaXMuY29udHJvbFBpY2tlciA9IG5ldyBFbnRpdHlQaWNrZXJDb250cm9sU2NoZW1hKHtcclxuICAgICAgICAgICAgLi4udGhpcy5jb250cm9sLFxyXG4gICAgICAgICAgICBmaWVsZDogJ2FycklkTmd1b2lEdW5nJyxcclxuICAgICAgICAgICAgbGFiZWw6ICdOZ8aw4budaSBkw7luZycsXHJcbiAgICAgICAgICAgIHRpdGxlOiAnQ2jhu41uIG5nxrDhu51pIGTDuW5nJyxcclxuICAgICAgICAgICAgYmFzZVNlcnZpY2U6IHRoaXMuX3VzZXJWNVNlcnZpY2UsXHJcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxyXG4gICAgICAgICAgICBkaXNwbGF5RmllbGQ6IHRoaXMuY29udHJvbC5nZXREaXNwbGF5TmFtZSA/ICdkaXNwbGF5TmFtZScgOiAnZnVsbE5hbWVOZXcnLFxyXG4gICAgICAgICAgICBmaWVsZFBsdXM6IHRoaXMuY29udHJvbC5maWVsZFBsdXMgPyBgJHt0aGlzLmNvbnRyb2wuZmllbGRQbHVzfSwke2NvbW1vbkZpZWxkUGx1c31gIDogY29tbW9uRmllbGRQbHVzLFxyXG4gICAgICAgICAgICB2YWx1ZUZpZWxkOiB0aGlzLmNvbnRyb2wudmFsdWVGaWVsZCxcclxuICAgICAgICAgICAgZGVmYXVsdEZpbHRlcnM6IHRoaXMuY29udHJvbC5kZWZhdWx0RmlsdGVycyxcclxuICAgICAgICAgICAgbXVsdGlwbGU6IHRoaXMuY29udHJvbC5tdWx0aXBsZSxcclxuICAgICAgICAgICAgZnVuY0dldExhYmVsOiAoaXRlbSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY29udHJvbC5mdW5jR2V0TGFiZWwpIHJldHVybiB0aGlzLmNvbnRyb2wuZnVuY0dldExhYmVsKGl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW0uZGlzcGxheU5hbWUgPz8gdGhpcy5fdXNlclY1U2VydmljZS5nZXRVc2VyTmFtZShpdGVtKTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgLy8gcGFnZVNpemU6IHRoaXMuY29udHJvbC5wYWdlU2l6ZSxcclxuICAgICAgICAgICAgLy8gZmllbGRQbHVzOiAnaG8sdGVuJyxcclxuICAgICAgICAgICAgLy8gZmllbGRTZWFyY2hUZXh0OiBbJ2hvJywgJ3RlbiddLFxyXG4gICAgICAgICAgICAvLyBhZnRlckdldERhdGE6IHRoaXMuZ2VuZXJhdGVIb1RlbixcclxuICAgICAgICAgICAgLy8gYWZ0ZXJHZXREYXRhVW5QaWNrZWQ6IHRoaXMuZ2VuZXJhdGVIb1RlbixcclxuICAgICAgICAgICAgLy8gYWZ0ZXJHZXREYXRhUGlja2VkOiB0aGlzLmdlbmVyYXRlSG9UZW4sXHJcbiAgICAgICAgICAgIGNvbHVtbnM6IFtcclxuICAgICAgICAgICAgICAgIG5ldyBFbnRpdHlQaWNrZXJDb2x1bW4oe1xyXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiAnVMOgaSBraG/huqNuJyxcclxuICAgICAgICAgICAgICAgICAgICBjb2RlOiAndXNlck5hbWUnLFxyXG4gICAgICAgICAgICAgICAgICAgIGRhdGFUeXBlOiAnc3RyaW5nJyxcclxuICAgICAgICAgICAgICAgICAgICBvcGVyYXRvcjogT3BlcmF0b3IuY29udGFpbixcclxuICAgICAgICAgICAgICAgICAgICBmdWxsVGV4dFNlYXJjaDogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICB3aWR0aDogJzEwMHB4J1xyXG4gICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICAgICBuZXcgRW50aXR5UGlja2VyQ29sdW1uKHtcclxuICAgICAgICAgICAgICAgICAgICBsYWJlbDogJ0jhu40gdsOgIHTDqm4nLFxyXG4gICAgICAgICAgICAgICAgICAgIGNvZGU6ICdmdWxsTmFtZU5ldycsXHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YVR5cGU6ICdzdHJpbmcnLFxyXG4gICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yOiBPcGVyYXRvci5jb250YWluLFxyXG4gICAgICAgICAgICAgICAgICAgIGZ1bGxUZXh0U2VhcmNoOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiAnMTYwcHgnXHJcbiAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgICAgIG5ldyBFbnRpdHlQaWNrZXJDb2x1bW4oe1xyXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiAnSMOybSB0aMawJyxcclxuICAgICAgICAgICAgICAgICAgICBjb2RlOiAnZW1haWwnLFxyXG4gICAgICAgICAgICAgICAgICAgIGRhdGFUeXBlOiAnc3RyaW5nJyxcclxuICAgICAgICAgICAgICAgICAgICBmdWxsVGV4dFNlYXJjaDogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICB3aWR0aDogJzE2MHB4J1xyXG4gICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICAgICBuZXcgRW50aXR5UGlja2VyQ29sdW1uKHtcclxuICAgICAgICAgICAgICAgICAgICBsYWJlbDogJ0No4bupYyB24bulJyxcclxuICAgICAgICAgICAgICAgICAgICBjb2RlOiAnbHN0VGVuQ2h1Y1Z1JyxcclxuICAgICAgICAgICAgICAgICAgICAvLyBjb2RlOiAnbWFDaHVjVnUnLFxyXG4gICAgICAgICAgICAgICAgICAgIC8vIGJhc2VTZXJ2aWNlOiB0aGlzLl9kbV9DaHVjVnVTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlRmlsdGVyOiB0aGlzLmZpbHRlckNodWNWdVJlZixcclxuICAgICAgICAgICAgICAgICAgICB3aWR0aDogJzE2MHB4J1xyXG4gICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICAgICBuZXcgRW50aXR5UGlja2VyQ29sdW1uKHtcclxuICAgICAgICAgICAgICAgICAgICBsYWJlbDogJ0dp4bqjbmcgdmnDqm4nLFxyXG4gICAgICAgICAgICAgICAgICAgIGNvZGU6ICdpc0dpYW5nVmllbicsXHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YVR5cGU6ICdib29sZWFuJyxcclxuICAgICAgICAgICAgICAgICAgICB3aWR0aDogJzkwcHgnXHJcbiAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgICAgIG5ldyBFbnRpdHlQaWNrZXJDb2x1bW4oe1xyXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiAnQ2h1ecOqbiB2acOqbicsXHJcbiAgICAgICAgICAgICAgICAgICAgY29kZTogJ2lzQ2h1eWVuVmllbicsXHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YVR5cGU6ICdib29sZWFuJyxcclxuICAgICAgICAgICAgICAgICAgICB3aWR0aDogJzkwcHgnXHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICBtZFdpZHRoOiAxMlxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuZmllbGRTZWFyY2hUZXh0ID0gWy4uLnRoaXMuY29udHJvbFBpY2tlci5maWVsZFNlYXJjaFRleHRdO1xyXG4gICAgICAgIGlmICghdGhpcy5maWVsZFNlYXJjaFRleHQuc29tZShpdGVtID0+IGl0ZW0gPT0gdGhpcy5jb250cm9sUGlja2VyLmRpc3BsYXlGaWVsZCkpIHtcclxuICAgICAgICAgICAgdGhpcy5maWVsZFNlYXJjaFRleHQucHVzaCh0aGlzLmNvbnRyb2xQaWNrZXIuZGlzcGxheUZpZWxkKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbC5yZXR1cm5UeXBlID09ICd2YWx1ZScpIHtcclxuICAgICAgICAgICAgdGhpcy5mdW5jUmV0dXJuVmFsdWUgPSAodmFsdWUpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvbnRyb2wubXVsdGlwbGUpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUubWFwKGl0ZW0gPT4gaXRlbVt0aGlzLmNvbnRyb2wudmFsdWVGaWVsZF0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlW3RoaXMuY29udHJvbC52YWx1ZUZpZWxkXTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB0aGlzLmZ1bmNSZXR1cm5WYWx1ZSA9IHZhbHVlID0+IHZhbHVlO1xyXG4gICAgICAgIHRoaXMuYnVpbGRGaWx0ZXJLZXl3b3JkKCk7XHJcbiAgICAgICAgdGhpcy5idWlsZFNldHRpbmdFbnRpdHlQaWNrZXIoKTtcclxuICAgICAgICB0aGlzLmNyZWF0ZVNjaGVtYVNlYXJjaCgpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlRnVuY0NoZWNrUmVhZE9ubHlJdGVtKCk7XHJcbiAgICAgICAgdGhpcy5vblJlYWR5LmVtaXQoKTtcclxuICAgICAgICB0aGlzLm9uSW5pdC5lbWl0KHRoaXMpO1xyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZUZ1bmNDaGVja1JlYWRPbmx5SXRlbSgpIHtcclxuICAgICAgICBpZiAodGhpcy5yZWFkT25seVZhbHVlcyAmJiB0aGlzLnJlYWRPbmx5VmFsdWVzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICB0aGlzLmZ1bmNDaGVja1JlYWRPbmx5SXRlbSA9IHRoaXMuX2Z1bmNDaGVja1JlYWRPbmx5SXRlbTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZnVuY0NoZWNrUmVhZE9ubHlJdGVtID0gKGl0ZW06IGFueSkgPT4geyB9O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBjcmVhdGVTY2hlbWFTZWFyY2goKSB7XHJcbiAgICAgICAgdGhpcy5zZWFyY2hTY2hlbWEuaWRDaHVjVnVzID0gbmV3IERyb3Bkb3duQ29udHJvbFNjaGVtYSh7XHJcbiAgICAgICAgICAgIGZpZWxkOiAnaWRDaHVjVnVzJyxcclxuICAgICAgICAgICAgbXVsdGlwbGU6IHRydWUsXHJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyOiAnQ2jhu41uIGNo4bupYyB24bulJyxcclxuICAgICAgICAgICAgYmFzZVNlcnZpY2U6IHRoaXMuX2RtX0NodWNWdVNlcnZpY2UsXHJcbiAgICAgICAgICAgIHNvcnRGaWVsZDogJ3NvVGh1VHUnLFxyXG4gICAgICAgICAgICBsb2FkT25Jbml0OiB0cnVlXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgYnVpbGRGaWx0ZXJLZXl3b3JkKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmZpZWxkU2VhcmNoVGV4dC5sZW5ndGggPT0gMSkge1xyXG4gICAgICAgICAgICB0aGlzLmdldEZpbHRlck9uU2VhcmNoID0gdmFsdWUgPT4gdGhpcy5uZXdGaWx0ZXIodGhpcy5jb250cm9sUGlja2VyLmRpc3BsYXlGaWVsZCwgT3BlcmF0b3IuY29udGFpbiwgdmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5nZXRGaWx0ZXJPblNlYXJjaCA9IHZhbHVlID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBGaWx0ZXIoe1xyXG4gICAgICAgICAgICAgICAgICAgIGxvZ2ljOiAnb3InLFxyXG4gICAgICAgICAgICAgICAgICAgIGZpbHRlcnM6IFtdXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZmllbGRTZWFyY2ggb2YgdGhpcy5maWVsZFNlYXJjaFRleHQpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHQuZmlsdGVycy5wdXNoKHRoaXMubmV3RmlsdGVyKGZpZWxkU2VhcmNoLCBPcGVyYXRvci5jb250YWluLCB2YWx1ZSkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYnVpbGRTZXR0aW5nRW50aXR5UGlja2VyKCkge1xyXG4gICAgICAgIHRoaXMuc2V0dGluZ1BpY2tlci5jb2xzID0gW107XHJcbiAgICAgICAgdGhpcy5zZXR0aW5nUGlja2VyLnRpdGxlID0gJyc7XHJcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbFBpY2tlci5wYWdlU2l6ZSkge1xyXG4gICAgICAgICAgICB0aGlzLnNldHRpbmdQaWNrZXIucGFnZVNldHRpbmcucGFnZVNpemUgPSB0aGlzLmNvbnRyb2xQaWNrZXIucGFnZVNpemU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2V0dGluZ1BpY2tlci5iYXNlU2VydmljZSA9IHRoaXMuY29udHJvbFBpY2tlci5iYXNlU2VydmljZTtcclxuICAgICAgICB0aGlzLnNldHRpbmdQaWNrZXIuaGVpZ2h0VHlwZSA9IEhlaWdodFR5cGUuZHluYW1pYztcclxuICAgICAgICB0aGlzLnNldHRpbmdQaWNrZXIuaGlkZGVuQ2hlY2tib3ggPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuc2V0dGluZ1BpY2tlci5zZXR0aW5nS2V5ID0gJ3VzZXJQaWNrZXInO1xyXG4gICAgICAgIHRoaXMuc2V0dGluZ1BpY2tlci5oaWRkZW5TZXR0aW5nV29ya2Zsb3cgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuc2V0dGluZ1BpY2tlci5oaWRkZW5TZXR0aW5nUGVybWlzc2lvbiA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5nUGlja2VyLmZpZWxkU2VhcmNoVGV4dCA9IHRoaXMuY29udHJvbFBpY2tlci5maWVsZFNlYXJjaFRleHQ7XHJcbiAgICAgICAgdGhpcy5jb250cm9sUGlja2VyLmNvbHVtbnMuZm9yRWFjaChjb2x1bW4gPT4ge1xyXG4gICAgICAgICAgICBpZiAoY29sdW1uLmlzRGlzcGxheSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGNvbHVtbi5kYXRhVHlwZSA9PSAnY3VzdG9tJykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0dGluZ1BpY2tlci5jb2xzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWVsZDogY29sdW1uLmNvZGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFUeXBlOiBjb2x1bW4uY29kZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChjb2x1bW4ubGFiZWwpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2aXNpYmxlOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBiYXNlU2VydmljZTogY29sdW1uLmJhc2VTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZUZpZWxkOiBjb2x1bW4udmFsdWVGaWVsZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheUZpZWxkOiBjb2x1bW4uZGlzcGxheUZpZWxkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWVsZFBsdXM6IGNvbHVtbi5maWVsZFBsdXMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNvcnRGaWVsZDogY29sdW1uLnNvcnRGaWVsZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgc29ydERpcjogY29sdW1uLnNvcnREaXIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmNHZXRMYWJlbDogY29sdW1uLmZ1bmNHZXRMYWJlbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVNvdXJjZTogY29sdW1uLmRhdGFTb3VyY2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwQ29kZTogY29sdW1uLmdyb3VwQ29kZVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXR0aW5nUGlja2VyLmNvbHMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLmNvbHVtbixcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQ6IGNvbHVtbi5jb2RlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy5fdHJhbnNsYXRlU2VydmljZS5pbnN0YW50KGNvbHVtbi5sYWJlbCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZpc2libGU6IHRydWVcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuYWR2YW5jZURhdGFQaWNrZXIuZmllbGRzID0gdGhpcy5nZXRGaWVsZHMoKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBM4bqleSB1bmlvbiBj4bunYTogc2VsZWN0ZWRGaWVsZCwgZmllbGRQbHVzLCBkaXNwbGF5IGZpZWxkcyBjw7MgdHJvbmcgdGFibGUuXHJcbiAgICBnZXRGaWVsZHMoKSB7XHJcbiAgICAgICAgY29uc3QgYXJyRmllbGQ6IHN0cmluZ1tdID0gW3RoaXMuY29udHJvbFBpY2tlci5kaXNwbGF5RmllbGQsICdpZCddO1xyXG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2xQaWNrZXIudmFsdWVGaWVsZCAmJiB0aGlzLmNvbnRyb2xQaWNrZXIudmFsdWVGaWVsZCAhPSAnaWQnKSB7XHJcbiAgICAgICAgICAgIGFyckZpZWxkLnB1c2godGhpcy5jb250cm9sUGlja2VyLnZhbHVlRmllbGQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbFBpY2tlci5maWVsZFBsdXMpIHtcclxuICAgICAgICAgICAgYXJyRmllbGQucHVzaCguLi50aGlzLmNvbnRyb2xQaWNrZXIuZmllbGRQbHVzLnNwbGl0KCcsJykpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgYXJyRGlzcGxheUZpZWxkID0gdGhpcy5jb250cm9sUGlja2VyLmNvbHVtbnMuZmlsdGVyKHggPT4geC5pc0Rpc3BsYXkgPT0gdHJ1ZSAmJiAheC5ub3RJbkZpZWxkcyAmJiB4LmRhdGFUeXBlICE9ICdjdXN0b20nKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAubWFwKHggPT4geC5jb2RlKTtcclxuXHJcbiAgICAgICAgdGhpcy5fY29tbW9uU2VydmljZS5hZGREaXN0aW5jdChhcnJEaXNwbGF5RmllbGQsIGFyckZpZWxkKTtcclxuICAgICAgICByZXR1cm4gYXJyRmllbGQudG9TdHJpbmcoKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXREcm9wZG93bk9wdGlvbnMoKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBEcm9wZG93bk9wdGlvbnMoe1xyXG4gICAgICAgICAgICBkaXNwbGF5RmllbGQ6IHRoaXMuY29udHJvbFBpY2tlci5kaXNwbGF5RmllbGQsXHJcbiAgICAgICAgICAgIHZhbHVlRmllbGQ6IHRoaXMuY29udHJvbFBpY2tlci52YWx1ZUZpZWxkLFxyXG4gICAgICAgICAgICBmaWVsZFBsdXM6IHRoaXMuY29udHJvbFBpY2tlci5maWVsZFBsdXMsXHJcbiAgICAgICAgICAgIGZ1bmNHZXRMYWJlbDogdGhpcy5jb250cm9sUGlja2VyLmZ1bmNHZXRMYWJlbCxcclxuICAgICAgICAgICAgcGx1c1VybDogdGhpcy5jb250cm9sUGlja2VyLnBsdXNVcmxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBzaG93UGlja0Zvcm0oKSB7XHJcbiAgICAgICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc2hvd0Zvcm1QaWNrZXIgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGdldERhdGEoa2V5V29yZCkge1xyXG4gICAgICAgIGNvbnN0IGZpbHRlcnMgPSBbXTtcclxuICAgICAgICBpZiAodGhpcy5jb250cm9sUGlja2VyLm11bHRpcGxlKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnZhbHVlICYmIHRoaXMudmFsdWUubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgZmlsdGVycy5wdXNoKHRoaXMubmV3RmlsdGVyKHRoaXMuY29udHJvbFBpY2tlci52YWx1ZUZpZWxkLCBPcGVyYXRvci5ub3RJbiwgdGhpcy52YWx1ZSkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAodGhpcy52YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgZmlsdGVycy5wdXNoKHRoaXMubmV3RmlsdGVyKHRoaXMuY29udHJvbFBpY2tlci52YWx1ZUZpZWxkLCBPcGVyYXRvci5ub3RFcXVhbCwgdGhpcy52YWx1ZSkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBhd2FpdCBhcHBlbmREZWZhdWx0RmlsdGVyKGZpbHRlcnMsIHRoaXMuY29udHJvbC5kZWZhdWx0RmlsdGVycyk7XHJcbiAgICAgICAgaWYgKGtleVdvcmQgJiYga2V5V29yZC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGZpbHRlcnMucHVzaCh0aGlzLmdldEZpbHRlck9uU2VhcmNoKGtleVdvcmQpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgZGF0YVNvdXJjZSA9IGF3YWl0IHRoaXMuY29udHJvbFBpY2tlci5iYXNlU2VydmljZS5nZXREYXRhRHJvcGRvd25CeUZpbHRlcihcclxuICAgICAgICAgICAgZmlsdGVycywgdGhpcy5nZXREcm9wZG93bk9wdGlvbnMoKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5yZVN0cnVjdHVyZURhdGFTb3VyY2UoZGF0YVNvdXJjZSk7XHJcbiAgICAgICAgdGhpcy5yZXN1bHRzID0gdGhpcy5kYXRhU291cmNlO1xyXG4gICAgICAgIC8vIFJldHVybiDEkeG7gyBt4buZdCBz4buRIG7GoWkga2jDoWMgZMO5bmcsIGsgcmVtb3ZlXHJcbiAgICAgICAgcmV0dXJuIHRoaXMucmVzdWx0cztcclxuICAgIH1cclxuXHJcbiAgICBzZWFyY2goZXZlbnQpIHtcclxuICAgICAgICB0aGlzLmdldERhdGEoZXZlbnQucXVlcnkpO1xyXG4gICAgfVxyXG5cclxuICAgIGNsZWFyVmFsdWUoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbFBpY2tlci5tdWx0aXBsZSkge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWVPYmplY3QgPSBbXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZU9iamVjdCA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucmVzdWx0cyA9IFtdO1xyXG4gICAgICAgIHRoaXMudXBkYXRlU2VsZWN0ZWRWYWx1ZSgpO1xyXG4gICAgICAgIHRoaXMuaGFzVmFsdWUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLm9uVW5TZWxlY3QuZW1pdCh7XHJcbiAgICAgICAgICAgIGl0ZW06IHRoaXMuc2VsZWN0ZWRWYWx1ZU9iamVjdCxcclxuICAgICAgICAgICAgdmFsdWU6IHRoaXMuc2VsZWN0ZWRWYWx1ZVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuZmlyZUNoYW5nZUV2ZW50KCk7XHJcbiAgICB9XHJcblxyXG4gICAgaGFuZGxlUm93U2VsZWN0KGl0ZW0pIHtcclxuICAgICAgICBpZiAodGhpcy5jb250cm9sLm11bHRpcGxlKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRSb3dEYXRhID0gaXRlbTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBTZWxlY3QgaXRlbSBj4bunYSBhdXRvY29tcGxldGVcclxuICAgIGhhbmRsZVNlbGVjdChpdGVtKSB7XHJcbiAgICAgICAgdGhpcy51cGRhdGVTZWxlY3RlZFZhbHVlKCk7XHJcbiAgICAgICAgY29uc3QgZXZ0ID0ge1xyXG4gICAgICAgICAgICBpdGVtLFxyXG4gICAgICAgICAgICB2YWx1ZTogdGhpcy5zZWxlY3RlZFZhbHVlXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLm9uU2VsZWN0LmVtaXQoZXZ0KTtcclxuICAgICAgICB0aGlzLmZpcmVDaGFuZ2VFdmVudCgpO1xyXG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2xQaWNrZXIuY2FsbEJhY2sgJiYgdGhpcy5jb250cm9sUGlja2VyLmNhbGxCYWNrLnNlbGVjdCkge1xyXG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xQaWNrZXIuY2FsbEJhY2suc2VsZWN0KGl0ZW0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBC4buPIHNlbGVjdCBpdGVtIGPhu6dhIGF1dG9jb21wbGV0ZVxyXG4gICAgaGFuZGxlVW5TZWxlY3QoJGV2ZW50KSB7XHJcbiAgICAgICAgdGhpcy51cGRhdGVTZWxlY3RlZFZhbHVlKCk7XHJcbiAgICAgICAgY29uc3QgZXZ0ID0ge1xyXG4gICAgICAgICAgICBpdGVtOiAkZXZlbnQsXHJcbiAgICAgICAgICAgIHZhbHVlOiB0aGlzLnNlbGVjdGVkVmFsdWVcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMub25VblNlbGVjdC5lbWl0KGV2dCk7XHJcbiAgICAgICAgdGhpcy5maXJlQ2hhbmdlRXZlbnQoKTtcclxuICAgIH1cclxuXHJcbiAgICBoYW5kbGVGb2N1cyhldnQpIHtcclxuICAgICAgICBpZiAoZXZ0LnRhcmdldC52YWx1ZSkge1xyXG4gICAgICAgICAgICBldnQudGFyZ2V0LnNlbGVjdCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLm9uRm9jdXMuZW1pdChldnQpO1xyXG4gICAgfVxyXG5cclxuICAgIGhhbmRsZUJsdXIoJGV2ZW50KSB7XHJcbiAgICAgICAgdGhpcy5vbkJsdXIuZW1pdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGhhbmRsZUtleVVwKGV2dCkge1xyXG4gICAgICAgIGxldCBoaWRlU3VnZ2Vzc2lvbnMgPSBmYWxzZTtcclxuICAgICAgICBpZiAodGhpcy5jb250cm9sLm11bHRpcGxlKSB7XHJcbiAgICAgICAgICAgIGhpZGVTdWdnZXNzaW9ucyA9IGV2dC50YXJnZXQucGFyZW50Tm9kZS5wYXJlbnROb2RlLnBhcmVudE5vZGUuY2hpbGRFbGVtZW50Q291bnQgPT0gMTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRWYWx1ZU9iamVjdCAmJiB0aGlzLnNlbGVjdGVkVmFsdWVPYmplY3QubGVuZ3RoID4gMFxyXG4gICAgICAgICAgICAgICAgJiYgZXZ0LmtleUNvZGUgPT0gNDAgJiYgaGlkZVN1Z2dlc3Npb25zKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlc3VsdHMgPSBbXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaGlkZVN1Z2dlc3Npb25zID0gZXZ0LnRhcmdldC5wYXJlbnROb2RlLmNoaWxkRWxlbWVudENvdW50ID09IDE7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoZXZ0LnRhcmdldC52YWx1ZSA9PSAnJyAmJiBoaWRlU3VnZ2Vzc2lvbnMgJiYgZXZ0LmtleUNvZGUgIT0gNDAgJiYgZXZ0LmtleUNvZGUgIT0gMzgpIHtcclxuICAgICAgICAgICAgdGhpcy5yZXN1bHRzID0gW107XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIEhhbmRsZSBzZWxlY3QgaXRlbSB0cm9uZyBlbnRpdHkgcGlja2VyIGJveCAoS2jDtG5nIGPhuqduIGVtaXQgY2hhbmdlKVxyXG4gICAgaGFuZGxlU2VsZWN0RW50aXR5KGV2dCkge1xyXG4gICAgICAgIHRoaXMub25TZWxlY3QuZW1pdChldnQpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEhhbmRsZSB1bnNlbGVjdCBpdGVtIHRyb25nIGVudGl0eSBwaWNrZXIgYm94IChLaMO0bmcgY+G6p24gZW1pdCBjaGFuZ2UpXHJcbiAgICBoYW5kbGVVblNlbGVjdEVudGl0eShldnQpIHtcclxuICAgICAgICB0aGlzLm9uVW5TZWxlY3QuZW1pdChldnQpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEhhbmRsZSBjaGFuZ2UgaXRlbSB0cm9uZyBlbnRpdHkgcGlja2VyIGJveFxyXG4gICAgaGFuZGxlQ2hhbmdlRW50aXR5KGV2dCkge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IGV2dC52YWx1ZTtcclxuICAgICAgICB0aGlzLnVwZGF0ZVB1cmVWYWx1ZSgpO1xyXG4gICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuZmlyZUNoYW5nZUV2ZW50KCk7XHJcbiAgICB9XHJcblxyXG4gICAgX2Z1bmNDaGVja1JlYWRPbmx5SXRlbShpdGVtOiBhbnkpIHtcclxuICAgICAgICBpZiAodGhpcy5yZWFkT25seVZhbHVlcy5zb21lKHEgPT4gcSA9PSBpdGVtLnZhbHVlW3RoaXMuY29udHJvbC52YWx1ZUZpZWxkXSkpIHtcclxuICAgICAgICAgICAgaXRlbS5fZGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGVSZWFkT25seUl0ZW0oKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbC5tdWx0aXBsZSAmJiB0aGlzLnNlbGVjdGVkVmFsdWVPYmplY3QpIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlT2JqZWN0LmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmZ1bmNDaGVja1JlYWRPbmx5SXRlbShpdGVtKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZVNlbGVjdGVkVmFsdWUoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbFBpY2tlci5tdWx0aXBsZSkge1xyXG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZFZhbHVlID0gW107XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZU9iamVjdC5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRWYWx1ZS5wdXNoKGl0ZW0udmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5mdW5jQ2hlY2tSZWFkT25seUl0ZW0oaXRlbSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWUgPSBzZWxlY3RlZFZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRWYWx1ZU9iamVjdCA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWUgPSBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlID0gdGhpcy5zZWxlY3RlZFZhbHVlT2JqZWN0LnZhbHVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMudXBkYXRlUHVyZVZhbHVlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlUHVyZVZhbHVlKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2xQaWNrZXIubXVsdGlwbGUpIHtcclxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuc2VsZWN0ZWRWYWx1ZS5tYXAoaXRlbSA9PiBpdGVtW3RoaXMuY29udHJvbFBpY2tlci52YWx1ZUZpZWxkXSk7XHJcbiAgICAgICAgICAgIHRoaXMuaGFzVmFsdWUgPSB0aGlzLnNlbGVjdGVkVmFsdWUubGVuZ3RoID4gMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkVmFsdWUgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmhhc1ZhbHVlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5zZWxlY3RlZFZhbHVlW3RoaXMuY29udHJvbFBpY2tlci52YWx1ZUZpZWxkXTtcclxuICAgICAgICAgICAgICAgIHRoaXMuaGFzVmFsdWUgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGdldFZhbHVlUmV0dXJuKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmZ1bmNSZXR1cm5WYWx1ZSh0aGlzLnNlbGVjdGVkVmFsdWUpO1xyXG4gICAgfVxyXG5cclxuICAgIGZpcmVDaGFuZ2VFdmVudCgpIHtcclxuICAgICAgICBjb25zdCB2YWx1ZVJldHVybiA9IHRoaXMuZ2V0VmFsdWVSZXR1cm4oKTtcclxuICAgICAgICB0aGlzLm9uQ2hhbmdlQmFzZSh2YWx1ZVJldHVybik7XHJcbiAgICAgICAgdGhpcy5vbkNoYW5nZWQuZW1pdCh7XHJcbiAgICAgICAgICAgIHZhbHVlOiB2YWx1ZVJldHVyblxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGhhbmRsZUhpZGUoZXZ0KSB7XHJcbiAgICAgICAgdGhpcy5zaG93Rm9ybVBpY2tlciA9IGZhbHNlO1xyXG4gICAgICAgIGlmICh0aGlzLmRpcnR5KSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbnRyb2xQaWNrZXIubXVsdGlwbGUpIHtcclxuICAgICAgICAgICAgICAgIGxldCBkYXRhU291cmNlID0gW107XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy52YWx1ZSAmJiB0aGlzLnZhbHVlLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBkYXRhU291cmNlID0gYXdhaXQgdGhpcy5jb250cm9sUGlja2VyLmJhc2VTZXJ2aWNlLmdldERhdGFEcm9wZG93bkJ5RmlsdGVyKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5ld0ZpbHRlcih0aGlzLmNvbnRyb2xQaWNrZXIudmFsdWVGaWVsZCwgT3BlcmF0b3IuaW4sIHRoaXMudmFsdWUpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF0sIHRoaXMuZ2V0RHJvcGRvd25PcHRpb25zKClcclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucmVTdHJ1Y3R1cmVEYXRhU291cmNlKGRhdGFTb3VyY2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZU9iamVjdCA9IHRoaXMuZGF0YVNvdXJjZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGxldCBkYXRhU291cmNlID0gW107XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy52YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGRhdGFTb3VyY2UgPSBhd2FpdCB0aGlzLmNvbnRyb2xQaWNrZXIuYmFzZVNlcnZpY2UuZ2V0RGF0YURyb3Bkb3duQnlGaWx0ZXIoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmV3RmlsdGVyKHRoaXMuY29udHJvbFBpY2tlci52YWx1ZUZpZWxkLCBPcGVyYXRvci5lcXVhbCwgdGhpcy52YWx1ZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgXSwgdGhpcy5nZXREcm9wZG93bk9wdGlvbnMoKVxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnJlU3RydWN0dXJlRGF0YVNvdXJjZShkYXRhU291cmNlKTtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmRhdGFTb3VyY2UubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZU9iamVjdCA9IHRoaXMuZGF0YVNvdXJjZVswXTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRvb2x0aXAgPSB0aGlzLnNlbGVjdGVkVmFsdWVPYmplY3QubGFiZWw7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWVPYmplY3QgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudG9vbHRpcCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy51cGRhdGVTZWxlY3RlZFZhbHVlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG9uQ2xpY2tTdWJtaXRCdXR0b24oZXZ0LCB1c2VyUGlja2VyQm94OiBVc2VyUGlja2VyQm94Q29tcG9uZW50KSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbC5tdWx0aXBsZSkge1xyXG4gICAgICAgICAgICB0aGlzLmhhbmRsZUhpZGUoZXZ0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodGhpcy5zZWxlY3RlZFJvd0RhdGEpIHtcclxuICAgICAgICAgICAgaWYgKHVzZXJQaWNrZXJCb3ggJiYgdXNlclBpY2tlckJveC5lbnRpdHlQaWNrZXJCb3gpIHtcclxuICAgICAgICAgICAgICAgIHVzZXJQaWNrZXJCb3guZW50aXR5UGlja2VyQm94LmhhbmRsZVBpY2sodGhpcy5zZWxlY3RlZFJvd0RhdGEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnNob3dGb3JtUGlja2VyID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXN5bmMgcmVTdHJ1Y3R1cmVEYXRhU291cmNlKHNvdXJjZXM6IGFueVtdKSB7XHJcbiAgICAgICAgaWYgKHNvdXJjZXMgIT0gbnVsbCAmJiBzb3VyY2VzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgLy8gTOG6pXkgdGjDqm0gdGjDtG5nIHRpbiBjaOG7qWMgduG7pSDEkeG7gyBoaeG7g24gdGjhu4tcclxuICAgICAgICAgICAgY29uc3QgYXJyID0gW107XHJcbiAgICAgICAgICAgIGZvciAobGV0IGl0ZW0gb2Ygc291cmNlcykge1xyXG4gICAgICAgICAgICAgICAgaXRlbSA9IHRoaXMucmVTdHJ1Y3R1cmVJdGVtT2JqZWN0KGl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgYXJyLnB1c2goaXRlbSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZSA9IGFycjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZSA9IFtdO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZVN0cnVjdHVyZUl0ZW1PYmplY3QoaXRlbSk6IFNlbGVjdEl0ZW0ge1xyXG4gICAgICAgIGNvbnN0IHRlbXA6IFNlbGVjdEl0ZW0gPSB7IHZhbHVlOiBpdGVtIH07XHJcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbC5mdW5jR2V0TGFiZWwpIHtcclxuICAgICAgICAgICAgdGVtcC5sYWJlbCA9IHRoaXMuY29udHJvbFBpY2tlci5mdW5jR2V0TGFiZWwoaXRlbSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2wuZGlzcGxheUZpZWxkICE9PSAnZnVsbE5hbWVOZXcnKSB7XHJcbiAgICAgICAgICAgIHRlbXAubGFiZWwgPSBpdGVtW3RoaXMuY29udHJvbFBpY2tlci5kaXNwbGF5RmllbGRdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGVtcC5sYWJlbCA9IHRoaXMuX3VzZXJWNVNlcnZpY2UuZ2V0RnVsbENhbkJvTGFiZWwoaXRlbSwgdHJ1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRlbXAudmFsdWUuX2Ryb3Bkb3dudmFsdWUgPSB0aGlzLmNvbnRyb2xQaWNrZXIudmFsdWVGaWVsZDtcclxuICAgICAgICByZXR1cm4gdGVtcDtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyB3cml0ZVZhbHVlKG9iajogYW55KSB7XHJcbiAgICAgICAgdGhpcy5oYXNWYWx1ZSA9IGZhbHNlO1xyXG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2xQaWNrZXIubXVsdGlwbGUpIHtcclxuICAgICAgICAgICAgaWYgKG9iaiAhPSBudWxsICYmIG9iai5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJzOiBGaWx0ZXJbXSA9IFtdO1xyXG4gICAgICAgICAgICAgICAgZmlsdGVycy5wdXNoKHRoaXMubmV3RmlsdGVyKHRoaXMuY29udHJvbFBpY2tlci52YWx1ZUZpZWxkLCBPcGVyYXRvci5pbiwgb2JqKSk7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCBhcHBlbmREZWZhdWx0RmlsdGVyKGZpbHRlcnMsIHRoaXMuY29udHJvbC5kZWZhdWx0RmlsdGVycyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRyb2xQaWNrZXIuYmFzZVNlcnZpY2UuZ2V0RGF0YURyb3Bkb3duQnlGaWx0ZXIoXHJcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVycyxcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmdldERyb3Bkb3duT3B0aW9ucygpXHJcbiAgICAgICAgICAgICAgICApLnRoZW4oYXN5bmMgcmVzID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnJlU3RydWN0dXJlRGF0YVNvdXJjZShyZXMpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVzdWx0cyA9IHRoaXMuZGF0YVNvdXJjZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWVPYmplY3QgPSB0aGlzLmRhdGFTb3VyY2U7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVTZWxlY3RlZFZhbHVlKCk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVzdWx0cyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlT2JqZWN0ID0gW107XHJcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkVmFsdWUoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKG9iaiAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRyb2xQaWNrZXIuYmFzZVNlcnZpY2UuZ2V0RGF0YURyb3Bkb3duQnlGaWx0ZXIoXHJcbiAgICAgICAgICAgICAgICAgICAgW3RoaXMubmV3RmlsdGVyKHRoaXMuY29udHJvbFBpY2tlci52YWx1ZUZpZWxkLCBPcGVyYXRvci5lcXVhbCwgb2JqKV0sXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXREcm9wZG93bk9wdGlvbnMoKVxyXG4gICAgICAgICAgICAgICAgKS50aGVuKGFzeW5jIHJlcyA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucmVTdHJ1Y3R1cmVEYXRhU291cmNlKHJlcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVzdWx0cyA9IHRoaXMuZGF0YVNvdXJjZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlT2JqZWN0ID0gdGhpcy5kYXRhU291cmNlWzBdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkVmFsdWUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50b29sdGlwID0gdGhpcy5zZWxlY3RlZFZhbHVlT2JqZWN0LmxhYmVsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5jb250cm9sUGlja2VyLmNhbGxCYWNrICYmIHRoaXMuY29udHJvbFBpY2tlci5jYWxsQmFjay5zZWxlY3QpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udHJvbFBpY2tlci5jYWxsQmFjay5zZWxlY3QodGhpcy5zZWxlY3RlZFZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZXN1bHRzID0gW107XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWVPYmplY3QgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVTZWxlY3RlZFZhbHVlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5vbkNoYW5nZUJhc2UgPSBmbjtcclxuICAgIH1cclxuXHJcbiAgICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcclxuICAgIH1cclxufVxyXG4iXX0=
|
|
581
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uLy4uL3Byb2plY3RzL3RueC1zaGFyZWQvc3JjL2xpYi8iLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvdXNlci1waWNrZXIvdXNlci1waWNrZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQ0gsU0FBUyxFQUNULFlBQVksRUFDWixVQUFVLEVBQ1YsUUFBUSxFQUNSLEtBQUssRUFFTCxNQUFNLEVBQ04sV0FBVyxFQUNYLFNBQVMsRUFDWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFdkQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDdEYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ2xFLE9BQU8sRUFFSCxlQUFlLEVBQ2YscUJBQXFCLEVBQ3JCLGVBQWUsRUFDZixrQkFBa0IsRUFDbEIseUJBQXlCLEVBQ3pCLFVBQVUsRUFDVixRQUFRLEVBQ1IsU0FBUyxFQUNULHVCQUF1QixFQUN2QixRQUFRLEVBQ1gsTUFBTSwyQkFBMkIsQ0FBQztBQUNuQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDaEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUMvRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQWdCOUUsTUFBTSxPQUFPLG1CQUFvQixTQUFRLGFBQWE7SUF5RGxELFlBQ0ksU0FBbUIsRUFDWixj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QUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLG1CQUFtQixDQUFDO3dCQUNsRCxLQUFLLEVBQUUsSUFBSTtxQkFDZDtvQkFDRCx1QkFBdUI7aUJBQzFCOzthQUNKOzs7WUE1Q0csUUFBUTtZQTJCSCxhQUFhO1lBbkJiLGdCQUFnQjtZQWtCaEIsZUFBZTs7OzhCQW9CbkIsU0FBUyxTQUFDLGlCQUFpQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtzQkFJN0MsS0FBSzt3QkFDTCxLQUFLO3VCQUtMLEtBQUs7dUJBQ0wsS0FBSzs2QkFFTCxLQUFLO3FCQVNMLE1BQU07dUJBQ04sTUFBTSxTQUFDLFVBQVU7eUJBQ2pCLE1BQU0sU0FBQyxZQUFZO3dCQUNuQixNQUFNLFNBQUMsV0FBVztzQkFDbEIsTUFBTSxTQUFDLFNBQVM7cUJBQ2hCLE1BQU0sU0FBQyxRQUFRO3NCQUNmLE1BQU0sU0FBQyxTQUFTIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICAgIENvbXBvbmVudCxcclxuICAgIEV2ZW50RW1pdHRlcixcclxuICAgIGZvcndhcmRSZWYsXHJcbiAgICBJbmplY3RvcixcclxuICAgIElucHV0LFxyXG4gICAgT25Jbml0LFxyXG4gICAgT3V0cHV0LFxyXG4gICAgVGVtcGxhdGVSZWYsXHJcbiAgICBWaWV3Q2hpbGRcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XHJcbmltcG9ydCB7IFNlbGVjdEl0ZW0gfSBmcm9tICd0bi1jdXN0b20tcHJpbWVuZy9hcGknO1xyXG5pbXBvcnQgeyBDb21wb25lbnRDb250ZXh0U2VydmljZSB9IGZyb20gJy4uLy4uL2FwcC1jb250ZXh0L2NvbXBvbmVudC1jb250ZXh0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb21wb25lbnRCYXNlIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9iYXNlL2NvbXBvbmVudC1iYXNlJztcclxuaW1wb3J0IHtcclxuICAgIEF1dG9Db21wbGV0ZVBpY2tlckNvbnRyb2xTY2hlbWEsXHJcbiAgICBDcnVkTGlzdFNldHRpbmcsXHJcbiAgICBEcm9wZG93bkNvbnRyb2xTY2hlbWEsXHJcbiAgICBEcm9wZG93bk9wdGlvbnMsXHJcbiAgICBFbnRpdHlQaWNrZXJDb2x1bW4sXHJcbiAgICBFbnRpdHlQaWNrZXJDb250cm9sU2NoZW1hLFxyXG4gICAgSGVpZ2h0VHlwZSxcclxuICAgIE9wZXJhdG9yLFxyXG4gICAgUG9wdXBTaXplLFxyXG4gICAgVXNlclBpY2tlckNvbnRyb2xTY2hlbWEsXHJcbiAgICBVc2VyVHlwZVxyXG59IGZyb20gJy4uLy4uL2NsYXNzZXMvZm9ybS1zY2hlbWEnO1xyXG5pbXBvcnQgeyBGaWx0ZXIgfSBmcm9tICcuLi8uLi9tb2RlbHMvZ3JpZC1pbmZvJztcclxuaW1wb3J0IHsgRG1DaHVjVnVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZG0tY2h1Y3Z1LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBVc2VyVjVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdXNlci12NS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgYXBwZW5kRGVmYXVsdEZpbHRlciB9IGZyb20gJy4uLy4uL3V0aWxzL2NvbW1vbic7XHJcbmltcG9ydCB7IEFkdmFuY2VEYXRhRW50aXR5UGlja2VyIH0gZnJvbSAnLi4vZW50aXR5LXBpY2tlci9tb2RlbC9hZHZhbmNlLWRhdGEnO1xyXG5pbXBvcnQgeyBVc2VyUGlja2VyQm94Q29tcG9uZW50IH0gZnJvbSAnLi91c2VyLXBpY2tlci1ib3gvdXNlci1waWNrZXItYm94LmNvbXBvbmVudCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAndXNlci1waWNrZXInLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL3VzZXItcGlja2VyLmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL3VzZXItcGlja2VyLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgICBwcm92aWRlcnM6IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxyXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBVc2VyUGlja2VyQ29tcG9uZW50KSxcclxuICAgICAgICAgICAgbXVsdGk6IHRydWVcclxuICAgICAgICB9LFxyXG4gICAgICAgIENvbXBvbmVudENvbnRleHRTZXJ2aWNlXHJcbiAgICBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBVc2VyUGlja2VyQ29tcG9uZW50IGV4dGVuZHMgQ29tcG9uZW50QmFzZSBpbXBsZW1lbnRzIE9uSW5pdCwgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xyXG4gICAgQFZpZXdDaGlsZCgnZmlsdGVyQ2h1Y1Z1UmVmJywgeyBzdGF0aWM6IHRydWUgfSkgZmlsdGVyQ2h1Y1Z1UmVmOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gICAgb25DaGFuZ2VCYXNlOiBGdW5jdGlvbjtcclxuICAgIG9uVG91Y2hlZDogRnVuY3Rpb247XHJcblxyXG4gICAgQElucHV0KCkgY29udHJvbDogVXNlclBpY2tlckNvbnRyb2xTY2hlbWE7XHJcbiAgICBASW5wdXQoKSBwb3B1cFNpemU6IFBvcHVwU2l6ZSA9IG5ldyBQb3B1cFNpemUoe1xyXG4gICAgICAgIHdpZHRoOiAxMTAwLFxyXG4gICAgICAgIGhlaWdodDogOTAwLFxyXG4gICAgICAgIG1heGltaXplOiB0cnVlXHJcbiAgICB9KTtcclxuICAgIEBJbnB1dCgpIG11bHRpcGxlID0gZmFsc2U7XHJcbiAgICBASW5wdXQoKSBkaXNhYmxlZCA9IGZhbHNlO1xyXG4gICAgX3JlYWRPbmx5VmFsdWVzOiBzdHJpbmdbXTtcclxuICAgIEBJbnB1dCgpIHNldCByZWFkT25seVZhbHVlcyh2YWx1ZTogc3RyaW5nW10pIHtcclxuICAgICAgICB0aGlzLl9yZWFkT25seVZhbHVlcyA9IHZhbHVlO1xyXG4gICAgICAgIHRoaXMudXBkYXRlRnVuY0NoZWNrUmVhZE9ubHlJdGVtKCk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVSZWFkT25seUl0ZW0oKTtcclxuICAgIH1cclxuICAgIGdldCByZWFkT25seVZhbHVlcygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlWYWx1ZXM7XHJcbiAgICB9XHJcblxyXG4gICAgQE91dHB1dCgpIG9uSW5pdCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gICAgQE91dHB1dCgnb25TZWxlY3QnKSBvblNlbGVjdDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICAgIEBPdXRwdXQoJ29uVW5TZWxlY3QnKSBvblVuU2VsZWN0OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gICAgQE91dHB1dCgnb25DaGFuZ2VkJykgb25DaGFuZ2VkOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gICAgQE91dHB1dCgnb25Gb2N1cycpIG9uRm9jdXM6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgICBAT3V0cHV0KCdvbkJsdXInKSBvbkJsdXI6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgICBAT3V0cHV0KCdvblJlYWR5Jykgb25SZWFkeTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHJcbiAgICBjb250cm9sUGlja2VyOiBBdXRvQ29tcGxldGVQaWNrZXJDb250cm9sU2NoZW1hO1xyXG4gICAgc2V0dGluZ1BpY2tlcjogQ3J1ZExpc3RTZXR0aW5nID0gbmV3IENydWRMaXN0U2V0dGluZygpO1xyXG4gICAgYWR2YW5jZURhdGFQaWNrZXI6IEFkdmFuY2VEYXRhRW50aXR5UGlja2VyID0gbmV3IEFkdmFuY2VEYXRhRW50aXR5UGlja2VyKCk7XHJcblxyXG4gICAgdmFsdWU6IGFueTtcclxuICAgIGZ1bmNSZXR1cm5WYWx1ZTogKHZhbHVlKSA9PiB7fSA9IHZhbHVlID0+IHZhbHVlO1xyXG4gICAgc2VsZWN0ZWRSb3dEYXRhOiBhbnk7XHJcbiAgICBzZWxlY3RlZFZhbHVlOiBhbnk7XHJcbiAgICBzZWxlY3RlZFZhbHVlT2JqZWN0OiBhbnk7XHJcbiAgICBkYXRhU291cmNlOiBhbnlbXSA9IFtdO1xyXG4gICAgZnVuY0NoZWNrUmVhZE9ubHlJdGVtOiAoaXRlbTogYW55KSA9PiB2b2lkO1xyXG5cclxuICAgIGZpZWxkU2VhcmNoVGV4dDogc3RyaW5nW10gPSBbXTtcclxuXHJcbiAgICByZXN1bHRzOiBhbnlbXSA9IFtdO1xyXG5cclxuICAgIHNob3dGb3JtUGlja2VyID0gZmFsc2U7XHJcbiAgICBkaXJ0eSA9IGZhbHNlO1xyXG5cclxuICAgIHRvb2x0aXAgPSAnJztcclxuICAgIGhhc1ZhbHVlID0gZmFsc2U7XHJcbiAgICBzZWFyY2hTY2hlbWE6IGFueSA9IHt9O1xyXG4gICAgc2VhcmNoRGF0YTogYW55ID0ge307XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRGaWx0ZXJPblNlYXJjaD86IEZ1bmN0aW9uO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIF9pbmplY3RvcjogSW5qZWN0b3IsXHJcbiAgICAgICAgcHVibGljIF91c2VyVjVTZXJ2aWNlOiBVc2VyVjVTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgX3RyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBfZG1fQ2h1Y1Z1U2VydmljZTogRG1DaHVjVnVTZXJ2aWNlXHJcbiAgICApIHtcclxuICAgICAgICBzdXBlcihfaW5qZWN0b3IpO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25Jbml0KCkge1xyXG4gICAgICAgIHRoaXMuY29udHJvbC5fY29tcG9uZW50ID0gdGhpcztcclxuICAgICAgICBjb25zdCBjb21tb25GaWVsZFBsdXMgPSAnbWFDaHVjVnUsbHN0VGVuRG9uVmknO1xyXG4gICAgICAgIHRoaXMuY29udHJvbFBpY2tlciA9IG5ldyBFbnRpdHlQaWNrZXJDb250cm9sU2NoZW1hKHtcclxuICAgICAgICAgICAgLi4udGhpcy5jb250cm9sLFxyXG4gICAgICAgICAgICBmaWVsZDogJ2FycklkTmd1b2lEdW5nJyxcclxuICAgICAgICAgICAgbGFiZWw6ICdOZ8aw4budaSBkw7luZycsXHJcbiAgICAgICAgICAgIHRpdGxlOiAnQ2jhu41uIG5nxrDhu51pIGTDuW5nJyxcclxuICAgICAgICAgICAgYmFzZVNlcnZpY2U6IHRoaXMuX3VzZXJWNVNlcnZpY2UsXHJcbiAgICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLFxyXG4gICAgICAgICAgICBkaXNwbGF5RmllbGQ6IHRoaXMuY29udHJvbC5nZXREaXNwbGF5TmFtZSA/ICdkaXNwbGF5TmFtZScgOiAnZnVsbE5hbWVOZXcnLFxyXG4gICAgICAgICAgICBmaWVsZFBsdXM6IHRoaXMuY29udHJvbC5maWVsZFBsdXMgPyBgJHt0aGlzLmNvbnRyb2wuZmllbGRQbHVzfSwke2NvbW1vbkZpZWxkUGx1c31gIDogY29tbW9uRmllbGRQbHVzLFxyXG4gICAgICAgICAgICB2YWx1ZUZpZWxkOiB0aGlzLmNvbnRyb2wudmFsdWVGaWVsZCxcclxuICAgICAgICAgICAgZGVmYXVsdEZpbHRlcnM6IHRoaXMuY29udHJvbC5kZWZhdWx0RmlsdGVycyxcclxuICAgICAgICAgICAgbXVsdGlwbGU6IHRoaXMuY29udHJvbC5tdWx0aXBsZSxcclxuICAgICAgICAgICAgZnVuY0dldExhYmVsOiAoaXRlbSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY29udHJvbC5mdW5jR2V0TGFiZWwpIHJldHVybiB0aGlzLmNvbnRyb2wuZnVuY0dldExhYmVsKGl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW0uZGlzcGxheU5hbWUgPz8gdGhpcy5fdXNlclY1U2VydmljZS5nZXRVc2VyTmFtZShpdGVtKTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgLy8gcGFnZVNpemU6IHRoaXMuY29udHJvbC5wYWdlU2l6ZSxcclxuICAgICAgICAgICAgLy8gZmllbGRQbHVzOiAnaG8sdGVuJyxcclxuICAgICAgICAgICAgLy8gZmllbGRTZWFyY2hUZXh0OiBbJ2hvJywgJ3RlbiddLFxyXG4gICAgICAgICAgICAvLyBhZnRlckdldERhdGE6IHRoaXMuZ2VuZXJhdGVIb1RlbixcclxuICAgICAgICAgICAgLy8gYWZ0ZXJHZXREYXRhVW5QaWNrZWQ6IHRoaXMuZ2VuZXJhdGVIb1RlbixcclxuICAgICAgICAgICAgLy8gYWZ0ZXJHZXREYXRhUGlja2VkOiB0aGlzLmdlbmVyYXRlSG9UZW4sXHJcbiAgICAgICAgICAgIGNvbHVtbnM6IFtcclxuICAgICAgICAgICAgICAgIG5ldyBFbnRpdHlQaWNrZXJDb2x1bW4oe1xyXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiAnVMOgaSBraG/huqNuJyxcclxuICAgICAgICAgICAgICAgICAgICBjb2RlOiAndXNlck5hbWUnLFxyXG4gICAgICAgICAgICAgICAgICAgIGRhdGFUeXBlOiAnc3RyaW5nJyxcclxuICAgICAgICAgICAgICAgICAgICBvcGVyYXRvcjogT3BlcmF0b3IuY29udGFpbixcclxuICAgICAgICAgICAgICAgICAgICBmdWxsVGV4dFNlYXJjaDogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICB3aWR0aDogJzEwMHB4J1xyXG4gICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICAgICBuZXcgRW50aXR5UGlja2VyQ29sdW1uKHtcclxuICAgICAgICAgICAgICAgICAgICBsYWJlbDogJ0jhu40gdsOgIHTDqm4nLFxyXG4gICAgICAgICAgICAgICAgICAgIGNvZGU6ICdmdWxsTmFtZU5ldycsXHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YVR5cGU6ICdzdHJpbmcnLFxyXG4gICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yOiBPcGVyYXRvci5jb250YWluLFxyXG4gICAgICAgICAgICAgICAgICAgIGZ1bGxUZXh0U2VhcmNoOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiAnMTYwcHgnXHJcbiAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgICAgIG5ldyBFbnRpdHlQaWNrZXJDb2x1bW4oe1xyXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiAnSMOybSB0aMawJyxcclxuICAgICAgICAgICAgICAgICAgICBjb2RlOiAnZW1haWwnLFxyXG4gICAgICAgICAgICAgICAgICAgIGRhdGFUeXBlOiAnc3RyaW5nJyxcclxuICAgICAgICAgICAgICAgICAgICBmdWxsVGV4dFNlYXJjaDogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICB3aWR0aDogJzE2MHB4J1xyXG4gICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICAgICBuZXcgRW50aXR5UGlja2VyQ29sdW1uKHtcclxuICAgICAgICAgICAgICAgICAgICBsYWJlbDogJ0No4bupYyB24bulJyxcclxuICAgICAgICAgICAgICAgICAgICBjb2RlOiAnbHN0VGVuQ2h1Y1Z1JyxcclxuICAgICAgICAgICAgICAgICAgICAvLyBjb2RlOiAnbWFDaHVjVnUnLFxyXG4gICAgICAgICAgICAgICAgICAgIC8vIGJhc2VTZXJ2aWNlOiB0aGlzLl9kbV9DaHVjVnVTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlRmlsdGVyOiB0aGlzLmZpbHRlckNodWNWdVJlZixcclxuICAgICAgICAgICAgICAgICAgICB3aWR0aDogJzE2MHB4J1xyXG4gICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICAgICBuZXcgRW50aXR5UGlja2VyQ29sdW1uKHtcclxuICAgICAgICAgICAgICAgICAgICBsYWJlbDogJ0dp4bqjbmcgdmnDqm4nLFxyXG4gICAgICAgICAgICAgICAgICAgIGNvZGU6ICdpc0dpYW5nVmllbicsXHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YVR5cGU6ICdib29sZWFuJyxcclxuICAgICAgICAgICAgICAgICAgICB3aWR0aDogJzkwcHgnLFxyXG4gICAgICAgICAgICAgICAgICAgIGlzRGlzcGxheTogdGhpcy5jb250cm9sLnVzZXJUeXBlID09PSBVc2VyVHlwZS5DYW5CbyxcclxuICAgICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICAgICAgbmV3IEVudGl0eVBpY2tlckNvbHVtbih7XHJcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6ICdDaHV5w6puIHZpw6puJyxcclxuICAgICAgICAgICAgICAgICAgICBjb2RlOiAnaXNDaHV5ZW5WaWVuJyxcclxuICAgICAgICAgICAgICAgICAgICBkYXRhVHlwZTogJ2Jvb2xlYW4nLFxyXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiAnOTBweCcsXHJcbiAgICAgICAgICAgICAgICAgICAgaXNEaXNwbGF5OiB0aGlzLmNvbnRyb2wudXNlclR5cGUgPT09IFVzZXJUeXBlLkNhbkJvLFxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgbWRXaWR0aDogMTJcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmZpZWxkU2VhcmNoVGV4dCA9IFsuLi50aGlzLmNvbnRyb2xQaWNrZXIuZmllbGRTZWFyY2hUZXh0XTtcclxuICAgICAgICBpZiAoIXRoaXMuZmllbGRTZWFyY2hUZXh0LnNvbWUoaXRlbSA9PiBpdGVtID09IHRoaXMuY29udHJvbFBpY2tlci5kaXNwbGF5RmllbGQpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZmllbGRTZWFyY2hUZXh0LnB1c2godGhpcy5jb250cm9sUGlja2VyLmRpc3BsYXlGaWVsZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2wucmV0dXJuVHlwZSA9PSAndmFsdWUnKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZnVuY1JldHVyblZhbHVlID0gKHZhbHVlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jb250cm9sLm11bHRpcGxlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLm1hcChpdGVtID0+IGl0ZW1bdGhpcy5jb250cm9sLnZhbHVlRmllbGRdKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZVt0aGlzLmNvbnRyb2wudmFsdWVGaWVsZF07XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgdGhpcy5mdW5jUmV0dXJuVmFsdWUgPSB2YWx1ZSA9PiB2YWx1ZTtcclxuICAgICAgICB0aGlzLmJ1aWxkRmlsdGVyS2V5d29yZCgpO1xyXG4gICAgICAgIHRoaXMuYnVpbGRTZXR0aW5nRW50aXR5UGlja2VyKCk7XHJcbiAgICAgICAgdGhpcy5jcmVhdGVTY2hlbWFTZWFyY2goKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZUZ1bmNDaGVja1JlYWRPbmx5SXRlbSgpO1xyXG4gICAgICAgIHRoaXMub25SZWFkeS5lbWl0KCk7XHJcbiAgICAgICAgdGhpcy5vbkluaXQuZW1pdCh0aGlzKTtcclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGVGdW5jQ2hlY2tSZWFkT25seUl0ZW0oKSB7XHJcbiAgICAgICAgaWYgKHRoaXMucmVhZE9ubHlWYWx1ZXMgJiYgdGhpcy5yZWFkT25seVZhbHVlcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgdGhpcy5mdW5jQ2hlY2tSZWFkT25seUl0ZW0gPSB0aGlzLl9mdW5jQ2hlY2tSZWFkT25seUl0ZW07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmZ1bmNDaGVja1JlYWRPbmx5SXRlbSA9IChpdGVtOiBhbnkpID0+IHsgfTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgY3JlYXRlU2NoZW1hU2VhcmNoKCkge1xyXG4gICAgICAgIHRoaXMuc2VhcmNoU2NoZW1hLmlkQ2h1Y1Z1cyA9IG5ldyBEcm9wZG93bkNvbnRyb2xTY2hlbWEoe1xyXG4gICAgICAgICAgICBmaWVsZDogJ2lkQ2h1Y1Z1cycsXHJcbiAgICAgICAgICAgIG11bHRpcGxlOiB0cnVlLFxyXG4gICAgICAgICAgICBwbGFjZWhvbGRlcjogJ0No4buNbiBjaOG7qWMgduG7pScsXHJcbiAgICAgICAgICAgIGJhc2VTZXJ2aWNlOiB0aGlzLl9kbV9DaHVjVnVTZXJ2aWNlLFxyXG4gICAgICAgICAgICBzb3J0RmllbGQ6ICdzb1RodVR1JyxcclxuICAgICAgICAgICAgbG9hZE9uSW5pdDogdHJ1ZVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGJ1aWxkRmlsdGVyS2V5d29yZCgpIHtcclxuICAgICAgICBpZiAodGhpcy5maWVsZFNlYXJjaFRleHQubGVuZ3RoID09IDEpIHtcclxuICAgICAgICAgICAgdGhpcy5nZXRGaWx0ZXJPblNlYXJjaCA9IHZhbHVlID0+IHRoaXMubmV3RmlsdGVyKHRoaXMuY29udHJvbFBpY2tlci5kaXNwbGF5RmllbGQsIE9wZXJhdG9yLmNvbnRhaW4sIHZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0RmlsdGVyT25TZWFyY2ggPSB2YWx1ZSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBuZXcgRmlsdGVyKHtcclxuICAgICAgICAgICAgICAgICAgICBsb2dpYzogJ29yJyxcclxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJzOiBbXVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGZpZWxkU2VhcmNoIG9mIHRoaXMuZmllbGRTZWFyY2hUZXh0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmZpbHRlcnMucHVzaCh0aGlzLm5ld0ZpbHRlcihmaWVsZFNlYXJjaCwgT3BlcmF0b3IuY29udGFpbiwgdmFsdWUpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGJ1aWxkU2V0dGluZ0VudGl0eVBpY2tlcigpIHtcclxuICAgICAgICB0aGlzLnNldHRpbmdQaWNrZXIuY29scyA9IFtdO1xyXG4gICAgICAgIHRoaXMuc2V0dGluZ1BpY2tlci50aXRsZSA9ICcnO1xyXG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2xQaWNrZXIucGFnZVNpemUpIHtcclxuICAgICAgICAgICAgdGhpcy5zZXR0aW5nUGlja2VyLnBhZ2VTZXR0aW5nLnBhZ2VTaXplID0gdGhpcy5jb250cm9sUGlja2VyLnBhZ2VTaXplO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNldHRpbmdQaWNrZXIuYmFzZVNlcnZpY2UgPSB0aGlzLmNvbnRyb2xQaWNrZXIuYmFzZVNlcnZpY2U7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5nUGlja2VyLmhlaWdodFR5cGUgPSBIZWlnaHRUeXBlLmR5bmFtaWM7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5nUGlja2VyLmhpZGRlbkNoZWNrYm94ID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnNldHRpbmdQaWNrZXIuc2V0dGluZ0tleSA9ICd1c2VyUGlja2VyJztcclxuICAgICAgICB0aGlzLnNldHRpbmdQaWNrZXIuaGlkZGVuU2V0dGluZ1dvcmtmbG93ID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnNldHRpbmdQaWNrZXIuaGlkZGVuU2V0dGluZ1Blcm1pc3Npb24gPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuc2V0dGluZ1BpY2tlci5maWVsZFNlYXJjaFRleHQgPSB0aGlzLmNvbnRyb2xQaWNrZXIuZmllbGRTZWFyY2hUZXh0O1xyXG4gICAgICAgIHRoaXMuY29udHJvbFBpY2tlci5jb2x1bW5zLmZvckVhY2goY29sdW1uID0+IHtcclxuICAgICAgICAgICAgaWYgKGNvbHVtbi5pc0Rpc3BsYXkpIHtcclxuICAgICAgICAgICAgICAgIGlmIChjb2x1bW4uZGF0YVR5cGUgPT0gJ2N1c3RvbScpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldHRpbmdQaWNrZXIuY29scy5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQ6IGNvbHVtbi5jb2RlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhVHlwZTogY29sdW1uLmNvZGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoY29sdW1uLmxhYmVsKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmlzaWJsZTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYmFzZVNlcnZpY2U6IGNvbHVtbi5iYXNlU2VydmljZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVGaWVsZDogY29sdW1uLnZhbHVlRmllbGQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXlGaWVsZDogY29sdW1uLmRpc3BsYXlGaWVsZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRQbHVzOiBjb2x1bW4uZmllbGRQbHVzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzb3J0RmllbGQ6IGNvbHVtbi5zb3J0RmllbGQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNvcnREaXI6IGNvbHVtbi5zb3J0RGlyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jR2V0TGFiZWw6IGNvbHVtbi5mdW5jR2V0TGFiZWwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFTb3VyY2U6IGNvbHVtbi5kYXRhU291cmNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBncm91cENvZGU6IGNvbHVtbi5ncm91cENvZGVcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0dGluZ1BpY2tlci5jb2xzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5jb2x1bW4sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkOiBjb2x1bW4uY29kZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChjb2x1bW4ubGFiZWwpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2aXNpYmxlOiB0cnVlXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmFkdmFuY2VEYXRhUGlja2VyLmZpZWxkcyA9IHRoaXMuZ2V0RmllbGRzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gTOG6pXkgdW5pb24gY+G7p2E6IHNlbGVjdGVkRmllbGQsIGZpZWxkUGx1cywgZGlzcGxheSBmaWVsZHMgY8OzIHRyb25nIHRhYmxlLlxyXG4gICAgZ2V0RmllbGRzKCkge1xyXG4gICAgICAgIGNvbnN0IGFyckZpZWxkOiBzdHJpbmdbXSA9IFt0aGlzLmNvbnRyb2xQaWNrZXIuZGlzcGxheUZpZWxkLCAnaWQnXTtcclxuICAgICAgICBpZiAodGhpcy5jb250cm9sUGlja2VyLnZhbHVlRmllbGQgJiYgdGhpcy5jb250cm9sUGlja2VyLnZhbHVlRmllbGQgIT0gJ2lkJykge1xyXG4gICAgICAgICAgICBhcnJGaWVsZC5wdXNoKHRoaXMuY29udHJvbFBpY2tlci52YWx1ZUZpZWxkKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2xQaWNrZXIuZmllbGRQbHVzKSB7XHJcbiAgICAgICAgICAgIGFyckZpZWxkLnB1c2goLi4udGhpcy5jb250cm9sUGlja2VyLmZpZWxkUGx1cy5zcGxpdCgnLCcpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGFyckRpc3BsYXlGaWVsZCA9IHRoaXMuY29udHJvbFBpY2tlci5jb2x1bW5zXHJcbiAgICAgICAgICAgIC5maWx0ZXIoeCA9PiB4LmlzRGlzcGxheSA9PSB0cnVlICYmICF4Lm5vdEluRmllbGRzICYmIHguZGF0YVR5cGUgIT0gJ2N1c3RvbScpXHJcbiAgICAgICAgICAgIC5tYXAoeCA9PiB4LmNvZGUpO1xyXG5cclxuICAgICAgICB0aGlzLl9jb21tb25TZXJ2aWNlLmFkZERpc3RpbmN0KGFyckRpc3BsYXlGaWVsZCwgYXJyRmllbGQpO1xyXG4gICAgICAgIHJldHVybiBhcnJGaWVsZC50b1N0cmluZygpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldERyb3Bkb3duT3B0aW9ucygpIHtcclxuICAgICAgICByZXR1cm4gbmV3IERyb3Bkb3duT3B0aW9ucyh7XHJcbiAgICAgICAgICAgIGRpc3BsYXlGaWVsZDogdGhpcy5jb250cm9sUGlja2VyLmRpc3BsYXlGaWVsZCxcclxuICAgICAgICAgICAgdmFsdWVGaWVsZDogdGhpcy5jb250cm9sUGlja2VyLnZhbHVlRmllbGQsXHJcbiAgICAgICAgICAgIGZpZWxkUGx1czogdGhpcy5jb250cm9sUGlja2VyLmZpZWxkUGx1cyxcclxuICAgICAgICAgICAgZnVuY0dldExhYmVsOiB0aGlzLmNvbnRyb2xQaWNrZXIuZnVuY0dldExhYmVsLFxyXG4gICAgICAgICAgICBwbHVzVXJsOiB0aGlzLmNvbnRyb2xQaWNrZXIucGx1c1VybFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHNob3dQaWNrRm9ybSgpIHtcclxuICAgICAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5zaG93Rm9ybVBpY2tlciA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZ2V0RGF0YShrZXlXb3JkKSB7XHJcbiAgICAgICAgY29uc3QgZmlsdGVycyA9IFtdO1xyXG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2xQaWNrZXIubXVsdGlwbGUpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMudmFsdWUgJiYgdGhpcy52YWx1ZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBmaWx0ZXJzLnB1c2godGhpcy5uZXdGaWx0ZXIodGhpcy5jb250cm9sUGlja2VyLnZhbHVlRmllbGQsIE9wZXJhdG9yLm5vdEluLCB0aGlzLnZhbHVlKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICBmaWx0ZXJzLnB1c2godGhpcy5uZXdGaWx0ZXIodGhpcy5jb250cm9sUGlja2VyLnZhbHVlRmllbGQsIE9wZXJhdG9yLm5vdEVxdWFsLCB0aGlzLnZhbHVlKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGF3YWl0IGFwcGVuZERlZmF1bHRGaWx0ZXIoZmlsdGVycywgdGhpcy5jb250cm9sLmRlZmF1bHRGaWx0ZXJzKTtcclxuICAgICAgICBpZiAoa2V5V29yZCAmJiBrZXlXb3JkLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgZmlsdGVycy5wdXNoKHRoaXMuZ2V0RmlsdGVyT25TZWFyY2goa2V5V29yZCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBkYXRhU291cmNlID0gYXdhaXQgdGhpcy5jb250cm9sUGlja2VyLmJhc2VTZXJ2aWNlLmdldERhdGFEcm9wZG93bkJ5RmlsdGVyKFxyXG4gICAgICAgICAgICBmaWx0ZXJzLCB0aGlzLmdldERyb3Bkb3duT3B0aW9ucygpXHJcbiAgICAgICAgKTtcclxuICAgICAgICBhd2FpdCB0aGlzLnJlU3RydWN0dXJlRGF0YVNvdXJjZShkYXRhU291cmNlKTtcclxuICAgICAgICB0aGlzLnJlc3VsdHMgPSB0aGlzLmRhdGFTb3VyY2U7XHJcbiAgICAgICAgLy8gUmV0dXJuIMSR4buDIG3hu5l0IHPhu5EgbsahaSBraMOhYyBkw7luZywgayByZW1vdmVcclxuICAgICAgICByZXR1cm4gdGhpcy5yZXN1bHRzO1xyXG4gICAgfVxyXG5cclxuICAgIHNlYXJjaChldmVudCkge1xyXG4gICAgICAgIHRoaXMuZ2V0RGF0YShldmVudC5xdWVyeSk7XHJcbiAgICB9XHJcblxyXG4gICAgY2xlYXJWYWx1ZSgpIHtcclxuICAgICAgICBpZiAodGhpcy5jb250cm9sUGlja2VyLm11bHRpcGxlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZU9iamVjdCA9IFtdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlT2JqZWN0ID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5yZXN1bHRzID0gW107XHJcbiAgICAgICAgdGhpcy51cGRhdGVTZWxlY3RlZFZhbHVlKCk7XHJcbiAgICAgICAgdGhpcy5oYXNWYWx1ZSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMub25VblNlbGVjdC5lbWl0KHtcclxuICAgICAgICAgICAgaXRlbTogdGhpcy5zZWxlY3RlZFZhbHVlT2JqZWN0LFxyXG4gICAgICAgICAgICB2YWx1ZTogdGhpcy5zZWxlY3RlZFZhbHVlXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5maXJlQ2hhbmdlRXZlbnQoKTtcclxuICAgIH1cclxuXHJcbiAgICBoYW5kbGVSb3dTZWxlY3QoaXRlbSkge1xyXG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2wubXVsdGlwbGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFJvd0RhdGEgPSBpdGVtO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFNlbGVjdCBpdGVtIGPhu6dhIGF1dG9jb21wbGV0ZVxyXG4gICAgaGFuZGxlU2VsZWN0KGl0ZW0pIHtcclxuICAgICAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkVmFsdWUoKTtcclxuICAgICAgICBjb25zdCBldnQgPSB7XHJcbiAgICAgICAgICAgIGl0ZW0sXHJcbiAgICAgICAgICAgIHZhbHVlOiB0aGlzLnNlbGVjdGVkVmFsdWVcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMub25TZWxlY3QuZW1pdChldnQpO1xyXG4gICAgICAgIHRoaXMuZmlyZUNoYW5nZUV2ZW50KCk7XHJcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbFBpY2tlci5jYWxsQmFjayAmJiB0aGlzLmNvbnRyb2xQaWNrZXIuY2FsbEJhY2suc2VsZWN0KSB7XHJcbiAgICAgICAgICAgIHRoaXMuY29udHJvbFBpY2tlci5jYWxsQmFjay5zZWxlY3QoaXRlbSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIELhu48gc2VsZWN0IGl0ZW0gY+G7p2EgYXV0b2NvbXBsZXRlXHJcbiAgICBoYW5kbGVVblNlbGVjdCgkZXZlbnQpIHtcclxuICAgICAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkVmFsdWUoKTtcclxuICAgICAgICBjb25zdCBldnQgPSB7XHJcbiAgICAgICAgICAgIGl0ZW06ICRldmVudCxcclxuICAgICAgICAgICAgdmFsdWU6IHRoaXMuc2VsZWN0ZWRWYWx1ZVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5vblVuU2VsZWN0LmVtaXQoZXZ0KTtcclxuICAgICAgICB0aGlzLmZpcmVDaGFuZ2VFdmVudCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGhhbmRsZUZvY3VzKGV2dCkge1xyXG4gICAgICAgIGlmIChldnQudGFyZ2V0LnZhbHVlKSB7XHJcbiAgICAgICAgICAgIGV2dC50YXJnZXQuc2VsZWN0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMub25Gb2N1cy5lbWl0KGV2dCk7XHJcbiAgICB9XHJcblxyXG4gICAgaGFuZGxlQmx1cigkZXZlbnQpIHtcclxuICAgICAgICB0aGlzLm9uQmx1ci5lbWl0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgaGFuZGxlS2V5VXAoZXZ0KSB7XHJcbiAgICAgICAgbGV0IGhpZGVTdWdnZXNzaW9ucyA9IGZhbHNlO1xyXG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2wubXVsdGlwbGUpIHtcclxuICAgICAgICAgICAgaGlkZVN1Z2dlc3Npb25zID0gZXZ0LnRhcmdldC5wYXJlbnROb2RlLnBhcmVudE5vZGUucGFyZW50Tm9kZS5jaGlsZEVsZW1lbnRDb3VudCA9PSAxO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZFZhbHVlT2JqZWN0ICYmIHRoaXMuc2VsZWN0ZWRWYWx1ZU9iamVjdC5sZW5ndGggPiAwXHJcbiAgICAgICAgICAgICAgICAmJiBldnQua2V5Q29kZSA9PSA0MCAmJiBoaWRlU3VnZ2Vzc2lvbnMpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVzdWx0cyA9IFtdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBoaWRlU3VnZ2Vzc2lvbnMgPSBldnQudGFyZ2V0LnBhcmVudE5vZGUuY2hpbGRFbGVtZW50Q291bnQgPT0gMTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChldnQudGFyZ2V0LnZhbHVlID09ICcnICYmIGhpZGVTdWdnZXNzaW9ucyAmJiBldnQua2V5Q29kZSAhPSA0MCAmJiBldnQua2V5Q29kZSAhPSAzOCkge1xyXG4gICAgICAgICAgICB0aGlzLnJlc3VsdHMgPSBbXTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gSGFuZGxlIHNlbGVjdCBpdGVtIHRyb25nIGVudGl0eSBwaWNrZXIgYm94IChLaMO0bmcgY+G6p24gZW1pdCBjaGFuZ2UpXHJcbiAgICBoYW5kbGVTZWxlY3RFbnRpdHkoZXZ0KSB7XHJcbiAgICAgICAgdGhpcy5vblNlbGVjdC5lbWl0KGV2dCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gSGFuZGxlIHVuc2VsZWN0IGl0ZW0gdHJvbmcgZW50aXR5IHBpY2tlciBib3ggKEtow7RuZyBj4bqnbiBlbWl0IGNoYW5nZSlcclxuICAgIGhhbmRsZVVuU2VsZWN0RW50aXR5KGV2dCkge1xyXG4gICAgICAgIHRoaXMub25VblNlbGVjdC5lbWl0KGV2dCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gSGFuZGxlIGNoYW5nZSBpdGVtIHRyb25nIGVudGl0eSBwaWNrZXIgYm94XHJcbiAgICBoYW5kbGVDaGFuZ2VFbnRpdHkoZXZ0KSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlID0gZXZ0LnZhbHVlO1xyXG4gICAgICAgIHRoaXMudXBkYXRlUHVyZVZhbHVlKCk7XHJcbiAgICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5maXJlQ2hhbmdlRXZlbnQoKTtcclxuICAgIH1cclxuXHJcbiAgICBfZnVuY0NoZWNrUmVhZE9ubHlJdGVtKGl0ZW06IGFueSkge1xyXG4gICAgICAgIGlmICh0aGlzLnJlYWRPbmx5VmFsdWVzLnNvbWUocSA9PiBxID09IGl0ZW0udmFsdWVbdGhpcy5jb250cm9sLnZhbHVlRmllbGRdKSkge1xyXG4gICAgICAgICAgICBpdGVtLl9kaXNhYmxlZCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZVJlYWRPbmx5SXRlbSgpIHtcclxuICAgICAgICBpZiAodGhpcy5jb250cm9sLm11bHRpcGxlICYmIHRoaXMuc2VsZWN0ZWRWYWx1ZU9iamVjdCkge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWVPYmplY3QuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZnVuY0NoZWNrUmVhZE9ubHlJdGVtKGl0ZW0pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlU2VsZWN0ZWRWYWx1ZSgpIHtcclxuICAgICAgICBpZiAodGhpcy5jb250cm9sUGlja2VyLm11bHRpcGxlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkVmFsdWUgPSBbXTtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlT2JqZWN0LmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgICAgICAgICAgICBzZWxlY3RlZFZhbHVlLnB1c2goaXRlbS52YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmZ1bmNDaGVja1JlYWRPbmx5SXRlbShpdGVtKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IHNlbGVjdGVkVmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZFZhbHVlT2JqZWN0ID09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWUgPSB0aGlzLnNlbGVjdGVkVmFsdWVPYmplY3QudmFsdWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy51cGRhdGVQdXJlVmFsdWUoKTtcclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGVQdXJlVmFsdWUoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbFBpY2tlci5tdWx0aXBsZSkge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5zZWxlY3RlZFZhbHVlLm1hcChpdGVtID0+IGl0ZW1bdGhpcy5jb250cm9sUGlja2VyLnZhbHVlRmllbGRdKTtcclxuICAgICAgICAgICAgdGhpcy5oYXNWYWx1ZSA9IHRoaXMuc2VsZWN0ZWRWYWx1ZS5sZW5ndGggPiAwO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRWYWx1ZSA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIHRoaXMuaGFzVmFsdWUgPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLnNlbGVjdGVkVmFsdWVbdGhpcy5jb250cm9sUGlja2VyLnZhbHVlRmllbGRdO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5oYXNWYWx1ZSA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0VmFsdWVSZXR1cm4oKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZnVuY1JldHVyblZhbHVlKHRoaXMuc2VsZWN0ZWRWYWx1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgZmlyZUNoYW5nZUV2ZW50KCkge1xyXG4gICAgICAgIGNvbnN0IHZhbHVlUmV0dXJuID0gdGhpcy5nZXRWYWx1ZVJldHVybigpO1xyXG4gICAgICAgIHRoaXMub25DaGFuZ2VCYXNlKHZhbHVlUmV0dXJuKTtcclxuICAgICAgICB0aGlzLm9uQ2hhbmdlZC5lbWl0KHtcclxuICAgICAgICAgICAgdmFsdWU6IHZhbHVlUmV0dXJuXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgaGFuZGxlSGlkZShldnQpIHtcclxuICAgICAgICB0aGlzLnNob3dGb3JtUGlja2VyID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKHRoaXMuZGlydHkpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuY29udHJvbFBpY2tlci5tdWx0aXBsZSkge1xyXG4gICAgICAgICAgICAgICAgbGV0IGRhdGFTb3VyY2UgPSBbXTtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnZhbHVlICYmIHRoaXMudmFsdWUubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGRhdGFTb3VyY2UgPSBhd2FpdCB0aGlzLmNvbnRyb2xQaWNrZXIuYmFzZVNlcnZpY2UuZ2V0RGF0YURyb3Bkb3duQnlGaWx0ZXIoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmV3RmlsdGVyKHRoaXMuY29udHJvbFBpY2tlci52YWx1ZUZpZWxkLCBPcGVyYXRvci5pbiwgdGhpcy52YWx1ZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgXSwgdGhpcy5nZXREcm9wZG93bk9wdGlvbnMoKVxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5yZVN0cnVjdHVyZURhdGFTb3VyY2UoZGF0YVNvdXJjZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlT2JqZWN0ID0gdGhpcy5kYXRhU291cmNlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbGV0IGRhdGFTb3VyY2UgPSBbXTtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YVNvdXJjZSA9IGF3YWl0IHRoaXMuY29udHJvbFBpY2tlci5iYXNlU2VydmljZS5nZXREYXRhRHJvcGRvd25CeUZpbHRlcihcclxuICAgICAgICAgICAgICAgICAgICAgICAgW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXdGaWx0ZXIodGhpcy5jb250cm9sUGlja2VyLnZhbHVlRmllbGQsIE9wZXJhdG9yLmVxdWFsLCB0aGlzLnZhbHVlKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBdLCB0aGlzLmdldERyb3Bkb3duT3B0aW9ucygpXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucmVTdHJ1Y3R1cmVEYXRhU291cmNlKGRhdGFTb3VyY2UpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZGF0YVNvdXJjZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlT2JqZWN0ID0gdGhpcy5kYXRhU291cmNlWzBdO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudG9vbHRpcCA9IHRoaXMuc2VsZWN0ZWRWYWx1ZU9iamVjdC5sYWJlbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZU9iamVjdCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50b29sdGlwID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkVmFsdWUoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgb25DbGlja1N1Ym1pdEJ1dHRvbihldnQsIHVzZXJQaWNrZXJCb3g6IFVzZXJQaWNrZXJCb3hDb21wb25lbnQpIHtcclxuICAgICAgICBpZiAodGhpcy5jb250cm9sLm11bHRpcGxlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlSGlkZShldnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0aGlzLnNlbGVjdGVkUm93RGF0YSkge1xyXG4gICAgICAgICAgICBpZiAodXNlclBpY2tlckJveCAmJiB1c2VyUGlja2VyQm94LmVudGl0eVBpY2tlckJveCkge1xyXG4gICAgICAgICAgICAgICAgdXNlclBpY2tlckJveC5lbnRpdHlQaWNrZXJCb3guaGFuZGxlUGljayh0aGlzLnNlbGVjdGVkUm93RGF0YSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2hvd0Zvcm1QaWNrZXIgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhc3luYyByZVN0cnVjdHVyZURhdGFTb3VyY2Uoc291cmNlczogYW55W10pIHtcclxuICAgICAgICBpZiAoc291cmNlcyAhPSBudWxsICYmIHNvdXJjZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAvLyBM4bqleSB0aMOqbSB0aMO0bmcgdGluIGNo4bupYyB24bulIMSR4buDIGhp4buDbiB0aOG7i1xyXG4gICAgICAgICAgICBjb25zdCBhcnIgPSBbXTtcclxuICAgICAgICAgICAgZm9yIChsZXQgaXRlbSBvZiBzb3VyY2VzKSB7XHJcbiAgICAgICAgICAgICAgICBpdGVtID0gdGhpcy5yZVN0cnVjdHVyZUl0ZW1PYmplY3QoaXRlbSk7XHJcbiAgICAgICAgICAgICAgICBhcnIucHVzaChpdGVtKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5kYXRhU291cmNlID0gYXJyO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5kYXRhU291cmNlID0gW107XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJlU3RydWN0dXJlSXRlbU9iamVjdChpdGVtKTogU2VsZWN0SXRlbSB7XHJcbiAgICAgICAgY29uc3QgdGVtcDogU2VsZWN0SXRlbSA9IHsgdmFsdWU6IGl0ZW0gfTtcclxuICAgICAgICBpZiAodGhpcy5jb250cm9sLmZ1bmNHZXRMYWJlbCkge1xyXG4gICAgICAgICAgICB0ZW1wLmxhYmVsID0gdGhpcy5jb250cm9sUGlja2VyLmZ1bmNHZXRMYWJlbChpdGVtKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbC5kaXNwbGF5RmllbGQgIT09ICdmdWxsTmFtZU5ldycpIHtcclxuICAgICAgICAgICAgdGVtcC5sYWJlbCA9IGl0ZW1bdGhpcy5jb250cm9sUGlja2VyLmRpc3BsYXlGaWVsZF07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0ZW1wLmxhYmVsID0gdGhpcy5fdXNlclY1U2VydmljZS5nZXRGdWxsQ2FuQm9MYWJlbChpdGVtLCB0cnVlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGVtcC52YWx1ZS5fZHJvcGRvd252YWx1ZSA9IHRoaXMuY29udHJvbFBpY2tlci52YWx1ZUZpZWxkO1xyXG4gICAgICAgIHJldHVybiB0ZW1wO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHdyaXRlVmFsdWUob2JqOiBhbnkpIHtcclxuICAgICAgICB0aGlzLmhhc1ZhbHVlID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbFBpY2tlci5tdWx0aXBsZSkge1xyXG4gICAgICAgICAgICBpZiAob2JqICE9IG51bGwgJiYgb2JqLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlcnM6IEZpbHRlcltdID0gW107XHJcbiAgICAgICAgICAgICAgICBmaWx0ZXJzLnB1c2godGhpcy5uZXdGaWx0ZXIodGhpcy5jb250cm9sUGlja2VyLnZhbHVlRmllbGQsIE9wZXJhdG9yLmluLCBvYmopKTtcclxuICAgICAgICAgICAgICAgIGF3YWl0IGFwcGVuZERlZmF1bHRGaWx0ZXIoZmlsdGVycywgdGhpcy5jb250cm9sLmRlZmF1bHRGaWx0ZXJzKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29udHJvbFBpY2tlci5iYXNlU2VydmljZS5nZXREYXRhRHJvcGRvd25CeUZpbHRlcihcclxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJzLFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0RHJvcGRvd25PcHRpb25zKClcclxuICAgICAgICAgICAgICAgICkudGhlbihhc3luYyByZXMgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucmVTdHJ1Y3R1cmVEYXRhU291cmNlKHJlcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXN1bHRzID0gdGhpcy5kYXRhU291cmNlO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZU9iamVjdCA9IHRoaXMuZGF0YVNvdXJjZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkVmFsdWUoKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZXN1bHRzID0gW107XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWVPYmplY3QgPSBbXTtcclxuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlU2VsZWN0ZWRWYWx1ZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAob2JqICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29udHJvbFBpY2tlci5iYXNlU2VydmljZS5nZXREYXRhRHJvcGRvd25CeUZpbHRlcihcclxuICAgICAgICAgICAgICAgICAgICBbdGhpcy5uZXdGaWx0ZXIodGhpcy5jb250cm9sUGlja2VyLnZhbHVlRmllbGQsIE9wZXJhdG9yLmVxdWFsLCBvYmopXSxcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmdldERyb3Bkb3duT3B0aW9ucygpXHJcbiAgICAgICAgICAgICAgICApLnRoZW4oYXN5bmMgcmVzID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5yZVN0cnVjdHVyZURhdGFTb3VyY2UocmVzKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXN1bHRzID0gdGhpcy5kYXRhU291cmNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWVPYmplY3QgPSB0aGlzLmRhdGFTb3VyY2VbMF07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlU2VsZWN0ZWRWYWx1ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRvb2x0aXAgPSB0aGlzLnNlbGVjdGVkVmFsdWVPYmplY3QubGFiZWw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvbnRyb2xQaWNrZXIuY2FsbEJhY2sgJiYgdGhpcy5jb250cm9sUGlja2VyLmNhbGxCYWNrLnNlbGVjdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250cm9sUGlja2VyLmNhbGxCYWNrLnNlbGVjdCh0aGlzLnNlbGVjdGVkVmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlc3VsdHMgPSBbXTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZU9iamVjdCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkVmFsdWUoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLm9uQ2hhbmdlQmFzZSA9IGZuO1xyXG4gICAgfVxyXG5cclxuICAgIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
|