@colijnit/sharedcomponents 1.0.64 → 1.0.66
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/3rdpartylicenses.txt +1200 -0
- package/README.md +24 -24
- package/bundles/colijnit-sharedcomponents.umd.js +10078 -9926
- package/bundles/colijnit-sharedcomponents.umd.js.map +1 -1
- package/colijnit-sharedcomponents.d.ts +92 -91
- package/colijnit-sharedcomponents.metadata.json +1 -1
- package/esm2015/colijnit-sharedcomponents.js +93 -92
- package/esm2015/lib/assets/dictionary/text.properties.js +11 -11
- package/esm2015/lib/businessobject/build-images-and-documentation-result.js +2 -2
- package/esm2015/lib/businessobject/co-document-right.bo.js +3 -3
- package/esm2015/lib/businessobject/drag-drop-container-element.js +2 -2
- package/esm2015/lib/businessobject/drag-drop-container.js +7 -7
- package/esm2015/lib/components/activity-list/activity-list.component.js +130 -130
- package/esm2015/lib/components/activity-list/activity-list.module.js +24 -24
- package/esm2015/lib/components/app-file-dropzone/app-file-dropzone.component.js +47 -47
- package/esm2015/lib/components/app-file-dropzone/app-file-dropzone.module.js +20 -20
- package/esm2015/lib/components/date-planning/component/agenda/agenda-base-view.component.js +61 -61
- package/esm2015/lib/components/date-planning/component/agenda/agenda-day-view.component.js +36 -36
- package/esm2015/lib/components/date-planning/component/agenda/agenda-event.component.js +56 -56
- package/esm2015/lib/components/date-planning/component/agenda/agenda-events.component.js +47 -47
- package/esm2015/lib/components/date-planning/component/agenda/agenda-half-hour-cell.component.js +68 -68
- package/esm2015/lib/components/date-planning/component/agenda/agenda-header.component.js +243 -243
- package/esm2015/lib/components/date-planning/component/agenda/agenda-hour-cell.component.js +36 -36
- package/esm2015/lib/components/date-planning/component/agenda/agenda-hour-view-labels.component.js +50 -50
- package/esm2015/lib/components/date-planning/component/agenda/agenda-hour-view.component.js +46 -46
- package/esm2015/lib/components/date-planning/component/agenda/agenda-month-view.component.js +61 -61
- package/esm2015/lib/components/date-planning/component/agenda/agenda-select-event.component.js +39 -39
- package/esm2015/lib/components/date-planning/component/agenda/agenda-view.component.js +35 -35
- package/esm2015/lib/components/date-planning/component/agenda/agenda-week-select-view.component.js +64 -64
- package/esm2015/lib/components/date-planning/component/agenda/agenda-week-view.component.js +48 -48
- package/esm2015/lib/components/date-planning/component/agenda/view-select.component.js +42 -42
- package/esm2015/lib/components/date-planning/component/calendar/calendar-all-months.component.js +34 -34
- package/esm2015/lib/components/date-planning/component/calendar/calendar-all-years.component.js +48 -48
- package/esm2015/lib/components/date-planning/component/calendar/calendar-header.component.js +107 -107
- package/esm2015/lib/components/date-planning/component/calendar/calendar-view.component.js +178 -178
- package/esm2015/lib/components/date-planning/component/calendar/calendar.component.js +34 -34
- package/esm2015/lib/components/date-planning/date-planning.component.js +113 -113
- package/esm2015/lib/components/date-planning/date-planning.module.js +63 -63
- package/esm2015/lib/components/docsign/component/signature/signature.component.js +75 -75
- package/esm2015/lib/components/docsign/component/signatures/signatures.component.js +44 -44
- package/esm2015/lib/components/docsign/docsign.component.js +242 -242
- package/esm2015/lib/components/docsign/docsign.module.js +23 -23
- package/esm2015/lib/components/file-upload/file-upload.component.js +189 -189
- package/esm2015/lib/components/file-upload/file-upload.module.js +25 -25
- package/esm2015/lib/components/file-upload-popup/file-upload-popup.component.js +397 -397
- package/esm2015/lib/components/file-upload-popup/file-upload-popup.module.js +30 -30
- package/esm2015/lib/components/files-upload/components/base-file-upload.component.js +469 -469
- package/esm2015/lib/components/files-upload/components/drag-drop-container.component.js +115 -115
- package/esm2015/lib/components/files-upload/files-upload.component.js +131 -131
- package/esm2015/lib/components/files-upload/files-upload.module.js +47 -47
- package/esm2015/lib/components/image-display/image-display.component.js +36 -36
- package/esm2015/lib/components/image-display/image-display.module.js +23 -23
- package/esm2015/lib/components/key-pad/key-pad.component.js +200 -200
- package/esm2015/lib/components/key-pad/key-pad.module.js +22 -22
- package/esm2015/lib/components/layout-switcher/layout-switcher.component.js +74 -74
- package/esm2015/lib/components/layout-switcher/layout-switcher.module.js +21 -21
- package/esm2015/lib/components/linear-gauge/co-linear-gauge.component.js +59 -59
- package/esm2015/lib/components/linear-gauge/co-linear-gauge.module.js +19 -19
- package/esm2015/lib/components/multi-property-toggler/multiple-property-toggler.component.js +89 -89
- package/esm2015/lib/components/multi-property-toggler/multiple-property-toggler.module.js +21 -21
- package/esm2015/lib/components/send-method-dialog/components/layout-selection/layout-selection.component.js +79 -79
- package/esm2015/lib/components/send-method-dialog/components/layout-selection/layout-selection.module.js +21 -21
- package/esm2015/lib/components/send-method-dialog/components/printer-selection/printer-selection.component.js +85 -85
- package/esm2015/lib/components/send-method-dialog/components/printer-selection/printer-selection.module.js +21 -21
- package/esm2015/lib/components/send-method-dialog/components/send-method-email/send-method-email.component.js +64 -64
- package/esm2015/lib/components/send-method-dialog/components/send-method-email/send-method-email.module.js +26 -26
- package/esm2015/lib/components/send-method-dialog/components/send-method-pdf/send-method-pdf.component.js +40 -40
- package/esm2015/lib/components/send-method-dialog/components/send-method-pdf/send-method-pdf.module.js +23 -23
- package/esm2015/lib/components/send-method-dialog/components/send-method-printer/send-method-printer.component.js +61 -61
- package/esm2015/lib/components/send-method-dialog/components/send-method-printer/send-method-printer.module.js +28 -28
- package/esm2015/lib/components/send-method-dialog/components/signature-button/signature-button.component.js +38 -38
- package/esm2015/lib/components/send-method-dialog/components/signature-button/signature-button.module.js +21 -21
- package/esm2015/lib/components/send-method-dialog/model/email-address-viewmodel.js +7 -7
- package/esm2015/lib/components/send-method-dialog/send-method-dialog.component.js +258 -258
- package/esm2015/lib/components/send-method-dialog/send-method-dialog.module.js +35 -35
- package/esm2015/lib/components/send-method-dialog/send-method-params.interface.js +2 -2
- package/esm2015/lib/components/send-method-dialog/service/send-method.service.js +59 -59
- package/esm2015/lib/components/simple-tags/simple-tags.component.js +229 -229
- package/esm2015/lib/components/simple-tags/simple-tags.module.js +26 -26
- package/esm2015/lib/components/statusbar/statusbar-popup.component.js +97 -97
- package/esm2015/lib/components/statusbar/statusbar.component.js +81 -81
- package/esm2015/lib/components/statusbar/statusbar.module.js +27 -27
- package/esm2015/lib/components/stock/components/allocation-stock-history/allocation-stock-history.component.js +47 -47
- package/esm2015/lib/components/stock/components/order-commission-stock-history/order-commission-stock-history.component.js +47 -47
- package/esm2015/lib/components/stock/components/order-stock-history/order-stock-history.component.js +47 -47
- package/esm2015/lib/components/stock/components/order-stock-tab/order-stock-tab.component.js +47 -47
- package/esm2015/lib/components/stock/components/order-supply-stock-history/order-supply-stock-history.component.js +47 -47
- package/esm2015/lib/components/stock/components/order-tab/order-tab.component.js +67 -67
- package/esm2015/lib/components/stock/components/stock-history/stock-history.component.js +53 -53
- package/esm2015/lib/components/stock/components/stock-location/components/stock-location-popup/stock-location-popup.component.js +210 -0
- package/esm2015/lib/components/stock/components/stock-location/stock-location.component.js +248 -251
- package/esm2015/lib/components/stock/components/stock-prognose/stock-prognose.component.js +52 -52
- package/esm2015/lib/components/stock/components/stock-tab/stock-tab.component.js +39 -39
- package/esm2015/lib/components/stock/localization/translation.js +74 -72
- package/esm2015/lib/components/stock/stock-history-tabs/stock-history-tabs.component.js +33 -33
- package/esm2015/lib/components/stock/stock-information/stock-information.component.js +48 -48
- package/esm2015/lib/components/stock/stock-information-grid/stock-information-grid.component.js +457 -457
- package/esm2015/lib/components/stock/stock-tabs/stock-tabs.component.js +251 -243
- package/esm2015/lib/components/stock/stock-transfer/co-drop-down-list-fields.interface.js +2 -2
- package/esm2015/lib/components/stock/stock-transfer/stock-change-amount.component.js +72 -72
- package/esm2015/lib/components/stock/stock-transfer/stock-transfer.component.js +160 -160
- package/esm2015/lib/components/stock/stock.component.js +237 -237
- package/esm2015/lib/components/stock/stock.module.js +82 -80
- package/esm2015/lib/components/stock-statusbar/stock-statusbar.component.js +23 -23
- package/esm2015/lib/components/stock-statusbar/stock-statusbar.module.js +19 -19
- package/esm2015/lib/components/tab-bar/tab-bar.component.js +90 -90
- package/esm2015/lib/components/tab-bar/tab-bar.module.js +21 -21
- package/esm2015/lib/components/tab-bar/tab.interface.js +2 -2
- package/esm2015/lib/components/tile-renderer/tile-render.component.js +80 -80
- package/esm2015/lib/components/tile-renderer/tile-render.module.js +26 -26
- package/esm2015/lib/decorator/input-boolean.decorator.js +34 -34
- package/esm2015/lib/enum/calendar-view.enum.js +9 -9
- package/esm2015/lib/enum/document-email-report.enum.js +18 -18
- package/esm2015/lib/enum/domain-multiple-name.enum.js +13 -13
- package/esm2015/lib/enum/file-type.js +14 -14
- package/esm2015/lib/enum/files-upload-config-objects.js +3 -3
- package/esm2015/lib/enum/gauge-color.enum.js +10 -10
- package/esm2015/lib/enum/icon.enum.js +49 -48
- package/esm2015/lib/enum/internal-param.enum.js +38 -38
- package/esm2015/lib/enum/keyboard-code.enum.js +32 -32
- package/esm2015/lib/enum/language-code.enum.js +8 -8
- package/esm2015/lib/enum/month.enum.js +17 -17
- package/esm2015/lib/enum/read-write-access-config-names.enum.js +2 -2
- package/esm2015/lib/enum/table-name.enum.js +86 -86
- package/esm2015/lib/enum/tag-category.enum.js +22 -22
- package/esm2015/lib/enum/tags-component-config-names.js +2 -2
- package/esm2015/lib/enum/thumb-three-way-state.js +19 -19
- package/esm2015/lib/enum/tile-size-type.js +7 -7
- package/esm2015/lib/enum/time-period.enum.js +11 -11
- package/esm2015/lib/event/co-drag-event.js +2 -2
- package/esm2015/lib/event/co-drop-event.js +2 -2
- package/esm2015/lib/interface/key-value-pair.js +2 -2
- package/esm2015/lib/interface/operation-callback-simple-function.js +4 -4
- package/esm2015/lib/localization/localization.module.js +19 -19
- package/esm2015/lib/localization/localize.pipe.js +26 -26
- package/esm2015/lib/localization/localize.service.js +30 -30
- package/esm2015/lib/localization/translation.js +3 -3
- package/esm2015/lib/model/agenda-event-per-day.model.js +6 -6
- package/esm2015/lib/model/agenda-event.model.js +8 -8
- package/esm2015/lib/model/agenda-null-objects.js +11 -11
- package/esm2015/lib/model/constant/all-months.js +17 -17
- package/esm2015/lib/model/date-range.js +5 -5
- package/esm2015/lib/model/day.model.js +7 -7
- package/esm2015/lib/model/icon-svg.js +48 -47
- package/esm2015/lib/model/month.model.js +11 -11
- package/esm2015/lib/model/send-method.js +8 -8
- package/esm2015/lib/model/settings.js +4 -4
- package/esm2015/lib/model/tag-tree-item.bo.js +16 -16
- package/esm2015/lib/model/time-window.bo.js +26 -26
- package/esm2015/lib/model/tree-object.js +15 -15
- package/esm2015/lib/model/week.model.js +6 -6
- package/esm2015/lib/model/weekday.model.js +10 -10
- package/esm2015/lib/pipe/array-number.pipe.js +15 -15
- package/esm2015/lib/pipe/file-type-image.pipe.js +51 -51
- package/esm2015/lib/pipe/master-pipes.js +9 -9
- package/esm2015/lib/pipe/ucfirst.pipe.js +16 -16
- package/esm2015/lib/service/dictionary.service.js +76 -76
- package/esm2015/lib/service/drag-drop.service.js +365 -365
- package/esm2015/lib/service/icon-cache.service.js +51 -51
- package/esm2015/lib/service/options.service.js +48 -48
- package/esm2015/lib/service/shared-connector.service.js +433 -433
- package/esm2015/lib/service/shared.service.js +60 -60
- package/esm2015/lib/service/stock.service.js +110 -110
- package/esm2015/lib/utils/array-utils.js +202 -202
- package/esm2015/lib/utils/calendar.utils.js +68 -68
- package/esm2015/lib/utils/check-precision-and-scale-result.js +2 -2
- package/esm2015/lib/utils/check-within-stepped-bounds-result.js +2 -2
- package/esm2015/lib/utils/co-document-shared-field-logic.js +50 -50
- package/esm2015/lib/utils/date-utils.js +264 -264
- package/esm2015/lib/utils/enum-utils.js +128 -128
- package/esm2015/lib/utils/function/not-nill.function.js +5 -5
- package/esm2015/lib/utils/is-nill.function.js +5 -5
- package/esm2015/lib/utils/map-utils.js +41 -41
- package/esm2015/lib/utils/number-utils.js +390 -390
- package/esm2015/lib/utils/object-utils.js +278 -278
- package/esm2015/lib/utils/ref-code-utils.js +49 -49
- package/esm2015/lib/utils/string-utils.js +93 -93
- package/esm2015/public-api.js +31 -31
- package/favicon.ico +0 -0
- package/fesm2015/colijnit-sharedcomponents.js +10622 -10408
- package/fesm2015/colijnit-sharedcomponents.js.map +1 -1
- package/index.html +12 -0
- package/lib/assets/dictionary/text.properties.d.ts +3 -3
- package/lib/businessobject/build-images-and-documentation-result.d.ts +5 -5
- package/lib/businessobject/co-document-right.bo.d.ts +6 -6
- package/lib/businessobject/drag-drop-container-element.d.ts +6 -6
- package/lib/businessobject/drag-drop-container.d.ts +6 -6
- package/lib/components/access/read-write-access.scss +25 -25
- package/lib/components/access/style/_layout.scss +23 -23
- package/lib/components/access/style/_material-definition.scss +12 -12
- package/lib/components/access/style/_theme.scss +4 -4
- package/lib/components/access/style/material.scss +4 -4
- package/lib/components/activity-list/activity-list.component.d.ts +33 -33
- package/lib/components/activity-list/activity-list.module.d.ts +2 -2
- package/lib/components/activity-list/style/_layout.scss +68 -68
- package/lib/components/activity-list/style/_theme.scss +4 -4
- package/lib/components/activity-list/style/material.scss +4 -4
- package/lib/components/app-file-dropzone/app-file-dropzone.component.d.ts +14 -14
- package/lib/components/app-file-dropzone/app-file-dropzone.module.d.ts +2 -2
- package/lib/components/app-file-dropzone/style/_layout.scss +61 -61
- package/lib/components/app-file-dropzone/style/_theme.scss +4 -4
- package/lib/components/app-file-dropzone/style/material.scss +4 -4
- package/lib/components/date-planning/component/agenda/agenda-base-view.component.d.ts +21 -21
- package/lib/components/date-planning/component/agenda/agenda-day-view.component.d.ts +7 -7
- package/lib/components/date-planning/component/agenda/agenda-event.component.d.ts +18 -18
- package/lib/components/date-planning/component/agenda/agenda-events.component.d.ts +13 -13
- package/lib/components/date-planning/component/agenda/agenda-half-hour-cell.component.d.ts +18 -18
- package/lib/components/date-planning/component/agenda/agenda-header.component.d.ts +48 -48
- package/lib/components/date-planning/component/agenda/agenda-hour-cell.component.d.ts +9 -9
- package/lib/components/date-planning/component/agenda/agenda-hour-view-labels.component.d.ts +8 -8
- package/lib/components/date-planning/component/agenda/agenda-hour-view.component.d.ts +7 -7
- package/lib/components/date-planning/component/agenda/agenda-month-view.component.d.ts +10 -10
- package/lib/components/date-planning/component/agenda/agenda-select-event.component.d.ts +12 -12
- package/lib/components/date-planning/component/agenda/agenda-view.component.d.ts +12 -12
- package/lib/components/date-planning/component/agenda/agenda-week-select-view.component.d.ts +10 -10
- package/lib/components/date-planning/component/agenda/agenda-week-view.component.d.ts +9 -9
- package/lib/components/date-planning/component/agenda/style/_layout.scss +443 -443
- package/lib/components/date-planning/component/agenda/style/_material-definition.scss +12 -12
- package/lib/components/date-planning/component/agenda/style/_theme.scss +7 -7
- package/lib/components/date-planning/component/agenda/style/material.scss +5 -5
- package/lib/components/date-planning/component/agenda/view-select.component.d.ts +11 -11
- package/lib/components/date-planning/component/calendar/calendar-all-months.component.d.ts +9 -9
- package/lib/components/date-planning/component/calendar/calendar-all-years.component.d.ts +9 -9
- package/lib/components/date-planning/component/calendar/calendar-header.component.d.ts +23 -23
- package/lib/components/date-planning/component/calendar/calendar-view.component.d.ts +31 -31
- package/lib/components/date-planning/component/calendar/calendar.component.d.ts +10 -10
- package/lib/components/date-planning/component/calendar/style/_layout.scss +167 -167
- package/lib/components/date-planning/component/calendar/style/_material-definition.scss +7 -7
- package/lib/components/date-planning/component/calendar/style/_theme.scss +7 -7
- package/lib/components/date-planning/component/calendar/style/material.scss +5 -5
- package/lib/components/date-planning/date-planning.component.d.ts +28 -28
- package/lib/components/date-planning/date-planning.module.d.ts +2 -2
- package/lib/components/date-planning/style/_layout.scss +45 -45
- package/lib/components/date-planning/style/_theme.scss +5 -5
- package/lib/components/date-planning/style/material.scss +7 -7
- package/lib/components/docsign/component/signature/signature.component.d.ts +16 -16
- package/lib/components/docsign/component/signature/style/_layout.scss +40 -40
- package/lib/components/docsign/component/signature/style/_material-definition.scss +11 -11
- package/lib/components/docsign/component/signature/style/_theme.scss +13 -13
- package/lib/components/docsign/component/signature/style/material.scss +4 -4
- package/lib/components/docsign/component/signatures/signatures.component.d.ts +12 -12
- package/lib/components/docsign/component/signatures/style/_layout.scss +13 -13
- package/lib/components/docsign/component/signatures/style/_material-definition.scss +1 -1
- package/lib/components/docsign/component/signatures/style/_theme.scss +4 -4
- package/lib/components/docsign/component/signatures/style/material.scss +5 -5
- package/lib/components/docsign/docsign.component.d.ts +94 -94
- package/lib/components/docsign/docsign.module.d.ts +2 -2
- package/lib/components/docsign/style/_layout.scss +40 -40
- package/lib/components/docsign/style/_material-definition.scss +12 -12
- package/lib/components/docsign/style/_theme.scss +12 -12
- package/lib/components/docsign/style/material.scss +15 -15
- package/lib/components/file-upload/file-upload.component.d.ts +42 -42
- package/lib/components/file-upload/file-upload.module.d.ts +2 -2
- package/lib/components/file-upload/style/_layout.scss +59 -59
- package/lib/components/file-upload/style/_material-definition.scss +2 -2
- package/lib/components/file-upload/style/_theme.scss +4 -4
- package/lib/components/file-upload/style/material.scss +4 -4
- package/lib/components/file-upload-popup/file-upload-popup.component.d.ts +75 -75
- package/lib/components/file-upload-popup/file-upload-popup.module.d.ts +2 -2
- package/lib/components/file-upload-popup/style/_layout.scss +48 -48
- package/lib/components/file-upload-popup/style/_material-definition.scss +2 -2
- package/lib/components/file-upload-popup/style/_theme.scss +5 -5
- package/lib/components/file-upload-popup/style/material.scss +4 -4
- package/lib/components/files-upload/components/base-file-upload.component.d.ts +98 -98
- package/lib/components/files-upload/components/drag-drop-container.component.d.ts +34 -34
- package/lib/components/files-upload/files-upload.component.d.ts +32 -32
- package/lib/components/files-upload/files-upload.module.d.ts +2 -2
- package/lib/components/files-upload/style/_layout.scss +49 -49
- package/lib/components/files-upload/style/_theme.scss +5 -5
- package/lib/components/files-upload/style/material.scss +4 -4
- package/lib/components/image-display/image-display.component.d.ts +14 -14
- package/lib/components/image-display/image-display.module.d.ts +2 -2
- package/lib/components/image-display/style/_layout.scss +56 -56
- package/lib/components/image-display/style/_material-definition.scss +4 -4
- package/lib/components/image-display/style/_theme.scss +6 -6
- package/lib/components/image-display/style/material.scss +3 -3
- package/lib/components/key-pad/key-pad.component.d.ts +38 -38
- package/lib/components/key-pad/key-pad.module.d.ts +2 -2
- package/lib/components/key-pad/style/_layout.scss +160 -160
- package/lib/components/key-pad/style/_material-definition.scss +19 -19
- package/lib/components/key-pad/style/_theme.scss +35 -35
- package/lib/components/key-pad/style/material.scss +4 -4
- package/lib/components/layout-switcher/layout-switcher.component.d.ts +16 -16
- package/lib/components/layout-switcher/layout-switcher.module.d.ts +2 -2
- package/lib/components/layout-switcher/style/_layout.scss +94 -94
- package/lib/components/layout-switcher/style/_material-definition.scss +16 -16
- package/lib/components/layout-switcher/style/_theme.scss +4 -4
- package/lib/components/layout-switcher/style/material.scss +6 -6
- package/lib/components/linear-gauge/co-linear-gauge.component.d.ts +11 -11
- package/lib/components/linear-gauge/co-linear-gauge.module.d.ts +2 -2
- package/lib/components/linear-gauge/style/_layout.scss +20 -20
- package/lib/components/linear-gauge/style/_material-definition.scss +8 -8
- package/lib/components/linear-gauge/style/_theme.scss +4 -4
- package/lib/components/linear-gauge/style/material.scss +6 -6
- package/lib/components/login/style/_layout.scss +57 -57
- package/lib/components/login/style/_material-definition.scss +23 -23
- package/lib/components/login/style/_theme.scss +7 -7
- package/lib/components/login/style/material.scss +4 -4
- package/lib/components/multi-property-toggler/multiple-property-toggler.component.d.ts +27 -27
- package/lib/components/multi-property-toggler/multiple-property-toggler.module.d.ts +2 -2
- package/lib/components/multi-property-toggler/style/_layout.scss +24 -24
- package/lib/components/multi-property-toggler/style/_theme.scss +4 -4
- package/lib/components/multi-property-toggler/style/material.scss +4 -4
- package/lib/components/screen-config-generator/style/_layout.scss +95 -95
- package/lib/components/screen-config-generator/style/_theme.scss +4 -4
- package/lib/components/screen-config-generator/style/material.scss +4 -4
- package/lib/components/send-method-dialog/components/layout-selection/layout-selection.component.d.ts +19 -19
- package/lib/components/send-method-dialog/components/layout-selection/layout-selection.module.d.ts +2 -2
- package/lib/components/send-method-dialog/components/layout-selection/style/_layout.scss +44 -44
- package/lib/components/send-method-dialog/components/layout-selection/style/_material-definition.scss +19 -19
- package/lib/components/send-method-dialog/components/layout-selection/style/_theme.scss +17 -17
- package/lib/components/send-method-dialog/components/layout-selection/style/material.scss +4 -4
- package/lib/components/send-method-dialog/components/printer-selection/printer-selection.component.d.ts +19 -19
- package/lib/components/send-method-dialog/components/printer-selection/printer-selection.module.d.ts +2 -2
- package/lib/components/send-method-dialog/components/printer-selection/style/_layout.scss +69 -69
- package/lib/components/send-method-dialog/components/printer-selection/style/_material-definition.scss +37 -37
- package/lib/components/send-method-dialog/components/printer-selection/style/_theme.scss +23 -23
- package/lib/components/send-method-dialog/components/printer-selection/style/material.scss +4 -4
- package/lib/components/send-method-dialog/components/send-method-email/send-method-email.component.d.ts +14 -14
- package/lib/components/send-method-dialog/components/send-method-email/send-method-email.module.d.ts +2 -2
- package/lib/components/send-method-dialog/components/send-method-email/style/_layout.scss +29 -29
- package/lib/components/send-method-dialog/components/send-method-email/style/_material-definition.scss +8 -8
- package/lib/components/send-method-dialog/components/send-method-email/style/_theme.scss +5 -5
- package/lib/components/send-method-dialog/components/send-method-email/style/material.scss +4 -4
- package/lib/components/send-method-dialog/components/send-method-pdf/send-method-pdf.component.d.ts +8 -8
- package/lib/components/send-method-dialog/components/send-method-pdf/send-method-pdf.module.d.ts +2 -2
- package/lib/components/send-method-dialog/components/send-method-pdf/style/_layout.scss +25 -25
- package/lib/components/send-method-dialog/components/send-method-pdf/style/_material-definition.scss +5 -5
- package/lib/components/send-method-dialog/components/send-method-pdf/style/_theme.scss +5 -5
- package/lib/components/send-method-dialog/components/send-method-pdf/style/material.scss +4 -4
- package/lib/components/send-method-dialog/components/send-method-printer/send-method-printer.component.d.ts +13 -13
- package/lib/components/send-method-dialog/components/send-method-printer/send-method-printer.module.d.ts +2 -2
- package/lib/components/send-method-dialog/components/send-method-printer/style/_layout.scss +30 -30
- package/lib/components/send-method-dialog/components/send-method-printer/style/_material-definition.scss +5 -5
- package/lib/components/send-method-dialog/components/send-method-printer/style/_theme.scss +5 -5
- package/lib/components/send-method-dialog/components/send-method-printer/style/material.scss +4 -4
- package/lib/components/send-method-dialog/components/signature-button/signature-button.component.d.ts +12 -12
- package/lib/components/send-method-dialog/components/signature-button/signature-button.module.d.ts +2 -2
- package/lib/components/send-method-dialog/components/signature-button/style/_layout.scss +28 -28
- package/lib/components/send-method-dialog/components/signature-button/style/_material-definition.scss +8 -8
- package/lib/components/send-method-dialog/components/signature-button/style/_theme.scss +4 -4
- package/lib/components/send-method-dialog/components/signature-button/style/material.scss +4 -4
- package/lib/components/send-method-dialog/model/email-address-viewmodel.d.ts +5 -5
- package/lib/components/send-method-dialog/send-method-dialog.component.d.ts +71 -71
- package/lib/components/send-method-dialog/send-method-dialog.module.d.ts +2 -2
- package/lib/components/send-method-dialog/send-method-params.interface.d.ts +13 -13
- package/lib/components/send-method-dialog/service/send-method.service.d.ts +23 -23
- package/lib/components/send-method-dialog/style/_layout.scss +165 -165
- package/lib/components/send-method-dialog/style/_material-definition.scss +48 -48
- package/lib/components/send-method-dialog/style/_theme.scss +33 -33
- package/lib/components/send-method-dialog/style/material.scss +10 -10
- package/lib/components/simple-tags/simple-tags.component.d.ts +31 -31
- package/lib/components/simple-tags/simple-tags.module.d.ts +2 -2
- package/lib/components/simple-tags/style/_layout.scss +272 -272
- package/lib/components/simple-tags/style/_material-definition.scss +39 -39
- package/lib/components/simple-tags/style/_theme.scss +4 -4
- package/lib/components/simple-tags/style/material.scss +4 -4
- package/lib/components/statusbar/statusbar-popup.component.d.ts +21 -21
- package/lib/components/statusbar/statusbar.component.d.ts +26 -26
- package/lib/components/statusbar/statusbar.module.d.ts +2 -2
- package/lib/components/statusbar/style/_layout.scss +70 -70
- package/lib/components/statusbar/style/_material-definition.scss +23 -23
- package/lib/components/statusbar/style/_theme.scss +13 -13
- package/lib/components/statusbar/style/material.scss +5 -5
- package/lib/components/stock/components/allocation-stock-history/allocation-stock-history.component.d.ts +9 -9
- package/lib/components/stock/components/order-commission-stock-history/order-commission-stock-history.component.d.ts +9 -9
- package/lib/components/stock/components/order-stock-history/order-stock-history.component.d.ts +9 -9
- package/lib/components/stock/components/order-stock-tab/order-stock-tab.component.d.ts +11 -11
- package/lib/components/stock/components/order-supply-stock-history/order-supply-stock-history.component.d.ts +9 -9
- package/lib/components/stock/components/order-tab/order-tab.component.d.ts +20 -20
- package/lib/components/stock/components/stock-history/stock-history.component.d.ts +13 -13
- package/lib/components/stock/components/stock-location/components/stock-location-popup/stock-location-popup.component.d.ts +41 -0
- package/lib/components/stock/components/stock-location/stock-location.component.d.ts +54 -52
- package/lib/components/stock/components/stock-prognose/stock-prognose.component.d.ts +11 -11
- package/lib/components/stock/components/stock-tab/stock-tab.component.d.ts +7 -7
- package/lib/components/stock/localization/translation.d.ts +71 -69
- package/lib/components/stock/stock-history-tabs/stock-history-tabs.component.d.ts +7 -7
- package/lib/components/stock/stock-information/stock-information.component.d.ts +9 -9
- package/lib/components/stock/stock-information-grid/stock-information-grid.component.d.ts +75 -75
- package/lib/components/stock/stock-tabs/stock-tabs.component.d.ts +59 -56
- package/lib/components/stock/stock-transfer/co-drop-down-list-fields.interface.d.ts +4 -4
- package/lib/components/stock/stock-transfer/stock-change-amount.component.d.ts +18 -18
- package/lib/components/stock/stock-transfer/stock-transfer.component.d.ts +38 -38
- package/lib/components/stock/stock.component.d.ts +64 -64
- package/lib/components/stock/stock.module.d.ts +2 -2
- package/lib/components/stock/style/_layout.scss +519 -473
- package/lib/components/stock/style/_material-definition.scss +28 -28
- package/lib/components/stock/style/_theme.scss +5 -5
- package/lib/components/stock/style/material.scss +4 -4
- package/lib/components/stock-statusbar/stock-statusbar.component.d.ts +4 -4
- package/lib/components/stock-statusbar/stock-statusbar.module.d.ts +2 -2
- package/lib/components/stock-statusbar/style/_layout.scss +24 -24
- package/lib/components/stock-statusbar/style/material.scss +4 -4
- package/lib/components/tab-bar/style/_layout.scss +83 -83
- package/lib/components/tab-bar/style/_material-definition.scss +6 -6
- package/lib/components/tab-bar/style/material.scss +4 -4
- package/lib/components/tab-bar/tab-bar.component.d.ts +21 -21
- package/lib/components/tab-bar/tab-bar.module.d.ts +2 -2
- package/lib/components/tab-bar/tab.interface.d.ts +5 -5
- package/lib/components/tags/component/style/_layout.scss +67 -67
- package/lib/components/tags/component/style/_material-definition.scss +1 -1
- package/lib/components/tags/component/style/_theme.scss +8 -8
- package/lib/components/tags/component/style/material.scss +3 -3
- package/lib/components/tags/component/tag-join-label/style/_layout.scss +97 -97
- package/lib/components/tags/component/tag-join-label/style/_material-definition.scss +4 -4
- package/lib/components/tags/component/tag-join-label/style/_theme.scss +8 -8
- package/lib/components/tags/component/tag-join-label/style/material.scss +3 -3
- package/lib/components/tile-renderer/style/_layout.scss +90 -90
- package/lib/components/tile-renderer/style/_theme.scss +4 -4
- package/lib/components/tile-renderer/style/material.scss +4 -4
- package/lib/components/tile-renderer/tile-render.component.d.ts +31 -31
- package/lib/components/tile-renderer/tile-render.module.d.ts +2 -2
- package/lib/decorator/input-boolean.decorator.d.ts +8 -8
- package/lib/enum/calendar-view.enum.d.ts +7 -7
- package/lib/enum/document-email-report.enum.d.ts +15 -15
- package/lib/enum/domain-multiple-name.enum.d.ts +10 -10
- package/lib/enum/file-type.d.ts +7 -7
- package/lib/enum/files-upload-config-objects.d.ts +22 -22
- package/lib/enum/gauge-color.enum.d.ts +8 -8
- package/lib/enum/icon.enum.d.ts +47 -46
- package/lib/enum/internal-param.enum.d.ts +34 -34
- package/lib/enum/keyboard-code.enum.d.ts +30 -30
- package/lib/enum/language-code.enum.d.ts +6 -6
- package/lib/enum/month.enum.d.ts +14 -14
- package/lib/enum/read-write-access-config-names.enum.d.ts +4 -4
- package/lib/enum/table-name.enum.d.ts +84 -84
- package/lib/enum/tag-category.enum.d.ts +19 -19
- package/lib/enum/tags-component-config-names.d.ts +4 -4
- package/lib/enum/thumb-three-way-state.d.ts +6 -6
- package/lib/enum/tile-size-type.d.ts +4 -4
- package/lib/enum/time-period.enum.d.ts +8 -8
- package/lib/event/co-drag-event.d.ts +5 -5
- package/lib/event/co-drop-event.d.ts +8 -8
- package/lib/interface/key-value-pair.d.ts +4 -4
- package/lib/interface/operation-callback-simple-function.d.ts +4 -4
- package/lib/localization/localization.module.d.ts +2 -2
- package/lib/localization/localize.pipe.d.ts +7 -7
- package/lib/localization/localize.service.d.ts +7 -7
- package/lib/localization/translation.d.ts +2 -2
- package/lib/model/agenda-event-per-day.model.d.ts +5 -5
- package/lib/model/agenda-event.model.d.ts +17 -17
- package/lib/model/agenda-null-objects.d.ts +10 -10
- package/lib/model/constant/all-months.d.ts +2 -2
- package/lib/model/date-range.d.ts +7 -7
- package/lib/model/day.model.d.ts +8 -8
- package/lib/model/icon-svg.d.ts +4 -4
- package/lib/model/month.model.d.ts +5 -5
- package/lib/model/send-method.d.ts +7 -7
- package/lib/model/settings.d.ts +3 -3
- package/lib/model/tag-tree-item.bo.d.ts +18 -18
- package/lib/model/time-window.bo.d.ts +13 -13
- package/lib/model/tree-object.d.ts +8 -8
- package/lib/model/week.model.d.ts +4 -4
- package/lib/model/weekday.model.d.ts +16 -16
- package/lib/pipe/array-number.pipe.d.ts +4 -4
- package/lib/pipe/file-type-image.pipe.d.ts +12 -12
- package/lib/pipe/master-pipes.d.ts +1 -1
- package/lib/pipe/ucfirst.pipe.d.ts +4 -4
- package/lib/service/dictionary.service.d.ts +21 -21
- package/lib/service/drag-drop.service.d.ts +86 -86
- package/lib/service/icon-cache.service.d.ts +18 -18
- package/lib/service/options.service.d.ts +13 -13
- package/lib/service/shared-connector.service.d.ts +55 -55
- package/lib/service/shared.service.d.ts +18 -18
- package/lib/service/stock.service.d.ts +41 -41
- package/lib/style/_mixin.scss +14 -14
- package/lib/style/_variables.scss +21 -21
- package/lib/style/sharedcomponents-globals.scss +10 -10
- package/lib/utils/array-utils.d.ts +63 -63
- package/lib/utils/calendar.utils.d.ts +10 -10
- package/lib/utils/check-precision-and-scale-result.d.ts +4 -4
- package/lib/utils/check-within-stepped-bounds-result.d.ts +8 -8
- package/lib/utils/co-document-shared-field-logic.d.ts +7 -7
- package/lib/utils/date-utils.d.ts +44 -44
- package/lib/utils/enum-utils.d.ts +31 -31
- package/lib/utils/function/not-nill.function.d.ts +1 -1
- package/lib/utils/is-nill.function.d.ts +1 -1
- package/lib/utils/map-utils.d.ts +16 -16
- package/lib/utils/number-utils.d.ts +125 -125
- package/lib/utils/object-utils.d.ts +40 -40
- package/lib/utils/ref-code-utils.d.ts +10 -10
- package/lib/utils/string-utils.d.ts +38 -38
- package/main.1d1ac86d8023edac29b1.js +1 -0
- package/package.json +1 -1
- package/polyfills.907fe9d1887c5de17993.js +1 -0
- package/public-api.d.ts +27 -27
- package/runtime.8aac21847ed3d3829cca.js +1 -0
- package/styles.42e2561063e306e59f45.css +1 -0
|
@@ -1,469 +1,469 @@
|
|
|
1
|
-
import { __awaiter, __decorate } from "tslib";
|
|
2
|
-
import { ComponentFactoryResolver, Directive, EventEmitter, HostBinding, HostListener, Input, Output, ViewContainerRef } from "@angular/core";
|
|
3
|
-
import { TableName } from "../../../enum/table-name.enum";
|
|
4
|
-
import { DictionaryService } from "../../../service/dictionary.service";
|
|
5
|
-
import { FileType } from "@colijnit/mainapi/build/enum/file-type.enum";
|
|
6
|
-
import { OperationWithAlwaysSuccessCallback } from "../../../interface/operation-callback-simple-function";
|
|
7
|
-
import { ArrayUtils } from "../../../utils/array-utils";
|
|
8
|
-
import { RefCodeUtils } from "../../../utils/ref-code-utils";
|
|
9
|
-
import { CoDocumentSharedFieldLogic } from "../../../utils/co-document-shared-field-logic";
|
|
10
|
-
import { ObjectRightType } from "@colijnit/sharedapi/build/enum/object-right-type.enum";
|
|
11
|
-
import { InputBoolean } from "../../../decorator/input-boolean.decorator";
|
|
12
|
-
import { AppFileDropzoneComponent } from "../../app-file-dropzone/app-file-dropzone.component";
|
|
13
|
-
import { FileUtils } from "@colijnit/mainapi/build/utils/file-utils";
|
|
14
|
-
import { CoDocument } from "@colijnit/mainapi/build/model/co-document";
|
|
15
|
-
import { CoDocumentType } from "@colijnit/mainapi/build/enum/co-document-type.enum";
|
|
16
|
-
import { FileUploadPopupComponent } from "../../file-upload-popup/file-upload-popup.component";
|
|
17
|
-
// A base component that lets the user make a list of files from its device. Doesn't actually upload, but outputs chosen files as filesChanged.
|
|
18
|
-
export class BaseFileUploadComponent {
|
|
19
|
-
// private static readonly _dummyTrueFunction: OperationCallbackSimpleFunction = (object: any) => Promise.resolve(true);
|
|
20
|
-
constructor(
|
|
21
|
-
//protected _promptService: PromptService,
|
|
22
|
-
_dictionaryService,
|
|
23
|
-
//protected _userService: UserService,
|
|
24
|
-
_container, _factory) {
|
|
25
|
-
this._dictionaryService = _dictionaryService;
|
|
26
|
-
this._container = _container;
|
|
27
|
-
this._factory = _factory;
|
|
28
|
-
this.documents = [];
|
|
29
|
-
// The ability to drop files on the page
|
|
30
|
-
this.fullPageDrop = false;
|
|
31
|
-
// If user gets the ability of adding files.
|
|
32
|
-
this.canAdd = true;
|
|
33
|
-
// Show add button
|
|
34
|
-
this.addWithButton = true;
|
|
35
|
-
// If user gets the ability of deleting files.
|
|
36
|
-
this.canDelete = true;
|
|
37
|
-
this.noDragDropOrdering = false;
|
|
38
|
-
this.askBeforeDelete = true;
|
|
39
|
-
this.resizeImages = false;
|
|
40
|
-
this.lockOperation = OperationWithAlwaysSuccessCallback;
|
|
41
|
-
this.unlockOperation = OperationWithAlwaysSuccessCallback;
|
|
42
|
-
this.beforeDeleteOperation = OperationWithAlwaysSuccessCallback;
|
|
43
|
-
this.afterDeleteOperation = OperationWithAlwaysSuccessCallback;
|
|
44
|
-
this.beforeCreateOperation = OperationWithAlwaysSuccessCallback;
|
|
45
|
-
this.afterCreateOperation = OperationWithAlwaysSuccessCallback;
|
|
46
|
-
this.beforeEditOperation = OperationWithAlwaysSuccessCallback;
|
|
47
|
-
this.dontAskBeforeDelete = false;
|
|
48
|
-
this.noOwnDeleteOperation = false;
|
|
49
|
-
this.useWithoutSettingProps = false;
|
|
50
|
-
this.medicalUserGroups = false;
|
|
51
|
-
// Use with customFileDropEvent
|
|
52
|
-
this.useCustomFileDropEvent = false;
|
|
53
|
-
// Use in conjunction with useCustomFileDropEvent
|
|
54
|
-
this.customFileDropEvent = new EventEmitter();
|
|
55
|
-
// Emits if user wants to add multiple documents at once
|
|
56
|
-
this.documentsAdded = new EventEmitter();
|
|
57
|
-
this.documentDeleted = new EventEmitter();
|
|
58
|
-
// Emits every time the order of documents was changed
|
|
59
|
-
this.sortableListChanged = new EventEmitter();
|
|
60
|
-
this.documentChangeEvent = new EventEmitter();
|
|
61
|
-
// Use this if consumer requires to perform extra actions, like locking a parent businessObject if it contains the collection of documents. Emit with true when popup opened, false for close
|
|
62
|
-
this.popupOpenedStateChange = new EventEmitter();
|
|
63
|
-
this._documentKey = "";
|
|
64
|
-
this._readonly = false;
|
|
65
|
-
}
|
|
66
|
-
// The fileType that the documents should be saved as, leave empty to automatically detect filetype. Also determines file picker filter
|
|
67
|
-
set fileType(value) {
|
|
68
|
-
if (value) {
|
|
69
|
-
this._fileType = value;
|
|
70
|
-
//TODO Documentdataloader fix
|
|
71
|
-
//this._coDocumentDataLoader.loadAllowedTypes().then(() => {this.handleAcceptedFileTypesLoaded(value)});
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
get fileType() {
|
|
75
|
-
return this._fileType;
|
|
76
|
-
}
|
|
77
|
-
set documentKey(value) {
|
|
78
|
-
this._documentKey = value + ""; // force string
|
|
79
|
-
}
|
|
80
|
-
get documentKey() {
|
|
81
|
-
return this._documentKey;
|
|
82
|
-
}
|
|
83
|
-
set readonly(value) {
|
|
84
|
-
this._readonly = value;
|
|
85
|
-
if (this._popup && this._popup.instance) {
|
|
86
|
-
this._popup.instance.readonly = value;
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
get readonly() {
|
|
90
|
-
return this._readonly;
|
|
91
|
-
}
|
|
92
|
-
set maxUploadSizeParam(value) {
|
|
93
|
-
if (value) {
|
|
94
|
-
this._setInternalParamObj(value);
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
onDrop(event) {
|
|
98
|
-
event.preventDefault();
|
|
99
|
-
event.stopPropagation();
|
|
100
|
-
if (!this.useCustomFileDropEvent) {
|
|
101
|
-
this.filesPicked(event.dataTransfer.files);
|
|
102
|
-
}
|
|
103
|
-
else {
|
|
104
|
-
this.customFileDropEvent.emit(event.dataTransfer.files);
|
|
105
|
-
}
|
|
106
|
-
this._clearDropzone();
|
|
107
|
-
}
|
|
108
|
-
onDragEnd(event) {
|
|
109
|
-
event.dataTransfer.clearData();
|
|
110
|
-
this._clearDropzone();
|
|
111
|
-
}
|
|
112
|
-
onDragOver(event) {
|
|
113
|
-
event.preventDefault();
|
|
114
|
-
}
|
|
115
|
-
onDragEnter(event) {
|
|
116
|
-
this._dragEnterTarget = event.target;
|
|
117
|
-
this._showDropzone();
|
|
118
|
-
}
|
|
119
|
-
onDragLeave(event) {
|
|
120
|
-
if (event.target === this._dragEnterTarget) {
|
|
121
|
-
this._clearDropzone();
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
ngOnDestroy() {
|
|
125
|
-
this._clearDropzone();
|
|
126
|
-
}
|
|
127
|
-
_showDropzone() {
|
|
128
|
-
if (!this._dropZone) {
|
|
129
|
-
const fact = this._factory.resolveComponentFactory(AppFileDropzoneComponent);
|
|
130
|
-
this._dropZone = this._container.createComponent(fact);
|
|
131
|
-
this._dropZone.instance.customDropActionMessage = this.dropMessage;
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
_clearDropzone() {
|
|
135
|
-
this._container.clear();
|
|
136
|
-
if (this._dropZone) {
|
|
137
|
-
this._dropZone.destroy();
|
|
138
|
-
this._dropZone = undefined;
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
// Remove file from upload array.
|
|
142
|
-
handleDelete(file) {
|
|
143
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
144
|
-
let success = yield this.beforeDeleteOperation(file);
|
|
145
|
-
try {
|
|
146
|
-
if (success) {
|
|
147
|
-
yield this._delete(file);
|
|
148
|
-
success = true;
|
|
149
|
-
}
|
|
150
|
-
}
|
|
151
|
-
finally {
|
|
152
|
-
yield this.afterDeleteOperation(file);
|
|
153
|
-
}
|
|
154
|
-
return Promise.resolve(success);
|
|
155
|
-
});
|
|
156
|
-
}
|
|
157
|
-
_delete(file) {
|
|
158
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
159
|
-
let doDelete = true;
|
|
160
|
-
if (!this.dontAskBeforeDelete) {
|
|
161
|
-
//TODO make dialogService
|
|
162
|
-
//doDelete = await this._promptService.showYesNo("MESSAGE_DELETE_RECORD_QUESTION");
|
|
163
|
-
}
|
|
164
|
-
if (doDelete) {
|
|
165
|
-
if (!this.noOwnDeleteOperation) {
|
|
166
|
-
ArrayUtils.RemoveElement(file, this.documents);
|
|
167
|
-
}
|
|
168
|
-
this.documentDeleted.emit(file);
|
|
169
|
-
}
|
|
170
|
-
});
|
|
171
|
-
}
|
|
172
|
-
handleSortingChange(docs) {
|
|
173
|
-
this.sortableListChanged.emit(docs);
|
|
174
|
-
}
|
|
175
|
-
handleFileChange(event) {
|
|
176
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
177
|
-
if (event && event.target && event.target.files && event.target.files.length > 0) {
|
|
178
|
-
// check file sizes and extension
|
|
179
|
-
//Todo: fix this
|
|
180
|
-
//const allowedExtensions = await this._baseDataDalRepository.getAllowedExtensions();
|
|
181
|
-
let allFilesAreSmallEnough = true;
|
|
182
|
-
let allFilesHaveAllowedExtensions = true;
|
|
183
|
-
const sizeToCompare = this._maxUploadFileSize ? this._maxUploadFileSize : undefined;
|
|
184
|
-
const len = event.target.files.length;
|
|
185
|
-
for (let i = 0; i < len; i++) {
|
|
186
|
-
const uploadSizeAllowed = FileUtils.CheckMaxUploadSize(event.target.files[i], sizeToCompare);
|
|
187
|
-
if (!uploadSizeAllowed) {
|
|
188
|
-
allFilesAreSmallEnough = false;
|
|
189
|
-
break;
|
|
190
|
-
}
|
|
191
|
-
const extensionAllowed = true; //FileUtils.CheckExtension(event.target.files[i], allowedExtensions);
|
|
192
|
-
if (!extensionAllowed) {
|
|
193
|
-
allFilesHaveAllowedExtensions = false;
|
|
194
|
-
break;
|
|
195
|
-
}
|
|
196
|
-
}
|
|
197
|
-
if (!allFilesAreSmallEnough) {
|
|
198
|
-
//TODO make dialogService
|
|
199
|
-
//this._promptService.showWarning(this._dictionaryService.get("FILE_TOO_LARGE_TO_UPLOAD", true, "" + [FileUtils.getMaxUploadSizeInMb(sizeToCompare)]));
|
|
200
|
-
}
|
|
201
|
-
else if (!allFilesHaveAllowedExtensions) {
|
|
202
|
-
//const extensionsList = allowedExtensions.map(allowedExtension => allowedExtension.extension).sort().join(", ");
|
|
203
|
-
//this._promptService.showWarning(this._dictionaryService.get("FILE_HAS_DISALLOWED_EXTENSION", false, extensionsList));
|
|
204
|
-
}
|
|
205
|
-
else {
|
|
206
|
-
const filesToAdd = yield this.convertFilesIntoCoDocuments(event.target.files);
|
|
207
|
-
if (filesToAdd.length > 1) {
|
|
208
|
-
this.documentsAdded.emit(filesToAdd);
|
|
209
|
-
}
|
|
210
|
-
else {
|
|
211
|
-
if (this.useWithoutSettingProps) {
|
|
212
|
-
this.documentsAdded.next(filesToAdd);
|
|
213
|
-
}
|
|
214
|
-
else {
|
|
215
|
-
this.documentUnderEdit = filesToAdd[0];
|
|
216
|
-
this.openPopup();
|
|
217
|
-
}
|
|
218
|
-
}
|
|
219
|
-
}
|
|
220
|
-
}
|
|
221
|
-
});
|
|
222
|
-
}
|
|
223
|
-
handleEditDocumentClick(docToEdit) {
|
|
224
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
225
|
-
this.documentUnderEdit = docToEdit;
|
|
226
|
-
const showPopup = yield this.beforeEditOperation(docToEdit);
|
|
227
|
-
if (showPopup) {
|
|
228
|
-
this.openPopup();
|
|
229
|
-
}
|
|
230
|
-
});
|
|
231
|
-
}
|
|
232
|
-
openPopup() {
|
|
233
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
234
|
-
this._createAndFillPopupInstance();
|
|
235
|
-
this._docChangeSub = this._popup.instance.documentChangeEvent.subscribe((doc) => {
|
|
236
|
-
this.documentChangeEvent.emit(doc);
|
|
237
|
-
});
|
|
238
|
-
});
|
|
239
|
-
}
|
|
240
|
-
openPopupToAddDocumentByUrl() {
|
|
241
|
-
this._createDocumentToAddByUrl();
|
|
242
|
-
this._createAndFillPopupInstance(true);
|
|
243
|
-
this._docChangeSub = this._popup.instance.documentChangeEvent.subscribe((doc) => {
|
|
244
|
-
doc.fileName = doc.filePath;
|
|
245
|
-
this.documentChangeEvent.emit(doc);
|
|
246
|
-
});
|
|
247
|
-
}
|
|
248
|
-
_createDocumentToAddByUrl() {
|
|
249
|
-
this.documentUnderEdit = new CoDocument();
|
|
250
|
-
this.documentUnderEdit.table = this.documentTable;
|
|
251
|
-
this.documentUnderEdit.key = this.documentKey;
|
|
252
|
-
this.documentUnderEdit.fileType = this.fileType;
|
|
253
|
-
this.documentUnderEdit.documentType = CoDocumentType.SaveAsLinkOnRandomLocation;
|
|
254
|
-
this.documentUnderEdit.pathIsUrl = true;
|
|
255
|
-
//TODO Fix user Input
|
|
256
|
-
//this.documentUnderEdit.creationUser = this._userService.userName.toUpperCase();
|
|
257
|
-
//this.documentUnderEdit.modifiedUser = this._userService.userName.toUpperCase();
|
|
258
|
-
this.documentUnderEdit.creationDate = new Date();
|
|
259
|
-
this.documentUnderEdit.modifiedDate = new Date();
|
|
260
|
-
}
|
|
261
|
-
_createAndFillPopupInstance(addDocumentByUrl = false) {
|
|
262
|
-
this.popupOpenedStateChange.emit(true);
|
|
263
|
-
const factory = this._factory.resolveComponentFactory(FileUploadPopupComponent);
|
|
264
|
-
this._popup = this._container.createComponent(factory);
|
|
265
|
-
this._popup.instance.readonly = this._readonly;
|
|
266
|
-
this._popup.instance.addDocumentByUrl = addDocumentByUrl;
|
|
267
|
-
this._popup.instance.hasPublicAccessVisible = this.documentTable === TableName.Goods;
|
|
268
|
-
this._popup.instance.showDocumentReportPicker = (this.documentTable === TableName.Transactions || this.documentTable === TableName.TransactionLines);
|
|
269
|
-
this._popup.instance.documentUnderEdit = this.documentUnderEdit;
|
|
270
|
-
this._popup.instance.filesUploadConfigObjects = this.filesUploadConfigObjects;
|
|
271
|
-
this._popup.instance.medicalUserGroups = this.medicalUserGroups;
|
|
272
|
-
this._popup.instance.tagCategory = this.tagCategory;
|
|
273
|
-
this._popup.instance.displayReadWriteAccess = this.displayReadWriteAccess;
|
|
274
|
-
this._popup.instance.tagReferenceTable = this.tagReferenceTable;
|
|
275
|
-
this._popup.instance.publicationIds = RefCodeUtils.GetMultiRefCodeChoices(this.documentUnderEdit.publication);
|
|
276
|
-
this._popup.instance.storeGroupIds = this.documentUnderEdit.retailFormulas;
|
|
277
|
-
this._popup.instance.fileType = this.fileType;
|
|
278
|
-
this._prepareFileRights();
|
|
279
|
-
this._popupCloseSub = this._popup.instance.popupCloseEvent.subscribe(() => {
|
|
280
|
-
this._unlockDocument();
|
|
281
|
-
this.popupOpenedStateChange.emit(false);
|
|
282
|
-
this._popupCloseSub.unsubscribe();
|
|
283
|
-
this._docChangeSub.unsubscribe();
|
|
284
|
-
this._popup.destroy();
|
|
285
|
-
this._popup = undefined;
|
|
286
|
-
});
|
|
287
|
-
}
|
|
288
|
-
convertFilesIntoCoDocuments(files) {
|
|
289
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
290
|
-
const amountOfFiles = files.length;
|
|
291
|
-
const filesToAdd = [];
|
|
292
|
-
for (let i = 0; i < amountOfFiles; i++) {
|
|
293
|
-
const fileAsDocument = yield this._getFileAsDocument(files[i]);
|
|
294
|
-
fileAsDocument.index = CoDocumentSharedFieldLogic.GenerateAvailableIndexNr(this.documents || []) + i;
|
|
295
|
-
filesToAdd.push(fileAsDocument);
|
|
296
|
-
}
|
|
297
|
-
return filesToAdd;
|
|
298
|
-
});
|
|
299
|
-
}
|
|
300
|
-
filesPicked(files) {
|
|
301
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
302
|
-
if (files && files.length) {
|
|
303
|
-
let allFilesAreValid = true;
|
|
304
|
-
const amountOfFiles = files.length;
|
|
305
|
-
for (let i = 0; i < amountOfFiles; i++) {
|
|
306
|
-
if (!FileUtils.CheckMaxUploadSize(files[i], this._maxUploadFileSize)) {
|
|
307
|
-
allFilesAreValid = false;
|
|
308
|
-
break;
|
|
309
|
-
}
|
|
310
|
-
}
|
|
311
|
-
if (!allFilesAreValid) {
|
|
312
|
-
//TODO make dialogService
|
|
313
|
-
//this._promptService.showWarning(this._dictionaryService.get("FILE_TOO_LARGE_TO_UPLOAD", true, "" + FileUtils.getMaxUploadSizeInMb(this._maxUploadFileSize).toString()));
|
|
314
|
-
}
|
|
315
|
-
else {
|
|
316
|
-
const filesToAdd = yield this.convertFilesIntoCoDocuments(files);
|
|
317
|
-
if (filesToAdd.length > 1 || this.useWithoutSettingProps) {
|
|
318
|
-
this.documentsAdded.emit(filesToAdd);
|
|
319
|
-
}
|
|
320
|
-
else {
|
|
321
|
-
this.documentUnderEdit = filesToAdd[0]; // Setting docUnderEdit opens the popup window
|
|
322
|
-
this.openPopup();
|
|
323
|
-
}
|
|
324
|
-
}
|
|
325
|
-
}
|
|
326
|
-
});
|
|
327
|
-
}
|
|
328
|
-
handleAcceptedFileTypesLoaded(value) {
|
|
329
|
-
//TODO fix loading
|
|
330
|
-
//this.acceptedUploadFormats = this._coDocumentDataLoader.getAllowedExtensionsForType(value);
|
|
331
|
-
}
|
|
332
|
-
_getFileAsDocument(file) {
|
|
333
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
334
|
-
const fileAsCoDocument = yield FileUtils.ReadFileAsNewCoDocument(file, this.resizeImages);
|
|
335
|
-
// set some extra known fields for the codocument:
|
|
336
|
-
fileAsCoDocument.table = this.documentTable;
|
|
337
|
-
fileAsCoDocument.key = this.documentKey;
|
|
338
|
-
//TODO fix add users
|
|
339
|
-
//fileAsCoDocument.creationUser = this._userService.userName.toUpperCase();
|
|
340
|
-
//fileAsCoDocument.modifiedUser = this._userService.userName.toUpperCase();
|
|
341
|
-
fileAsCoDocument.creationDate = new Date();
|
|
342
|
-
fileAsCoDocument.modifiedDate = new Date();
|
|
343
|
-
fileAsCoDocument.fileType = this.fileType ? this.fileType : FileUtils.IsImageFile(file) ? FileType.Image : FileType.Document;
|
|
344
|
-
if (fileAsCoDocument) {
|
|
345
|
-
return fileAsCoDocument;
|
|
346
|
-
}
|
|
347
|
-
});
|
|
348
|
-
}
|
|
349
|
-
_setInternalParamObj(value) {
|
|
350
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
351
|
-
//TODO fix params
|
|
352
|
-
//const param: InternalParameterObject = await this._generalDalRepository.getInternalParamObject(value);
|
|
353
|
-
//this._maxUploadFileSize = isNaN(parseInt(param.value, 0)) ? undefined : parseInt(param.value, 0);
|
|
354
|
-
});
|
|
355
|
-
}
|
|
356
|
-
_lockDocument() {
|
|
357
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
358
|
-
if (!this.documentUnderEdit.documentId) {
|
|
359
|
-
return true; // New document does not have an ID and therefore does not have to be locked
|
|
360
|
-
}
|
|
361
|
-
const lockOk = yield this.lockOperation(CoDocument);
|
|
362
|
-
return lockOk;
|
|
363
|
-
});
|
|
364
|
-
}
|
|
365
|
-
_unlockDocument() {
|
|
366
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
367
|
-
if (!this.documentUnderEdit.documentId) {
|
|
368
|
-
return true; // New document does not have an ID and therefore does not have to be locked
|
|
369
|
-
}
|
|
370
|
-
const unlockOk = yield this.unlockOperation(CoDocument);
|
|
371
|
-
return unlockOk;
|
|
372
|
-
});
|
|
373
|
-
}
|
|
374
|
-
_prepareFileRights() {
|
|
375
|
-
const len = this.documentUnderEdit.rights.length;
|
|
376
|
-
for (let i = 0; i < len; i++) {
|
|
377
|
-
const right = this.documentUnderEdit.rights[i];
|
|
378
|
-
if (right.rightLevel === ObjectRightType.ReadWrite) {
|
|
379
|
-
this._popup.instance.userGroupsForWrite.push(right.userGroupId);
|
|
380
|
-
}
|
|
381
|
-
if (right.rightLevel === ObjectRightType.ReadOnly) {
|
|
382
|
-
this._popup.instance.userGroupsForRead.push(right.userGroupId);
|
|
383
|
-
}
|
|
384
|
-
}
|
|
385
|
-
}
|
|
386
|
-
}
|
|
387
|
-
BaseFileUploadComponent.decorators = [
|
|
388
|
-
{ type: Directive }
|
|
389
|
-
];
|
|
390
|
-
BaseFileUploadComponent.ctorParameters = () => [
|
|
391
|
-
{ type: DictionaryService },
|
|
392
|
-
{ type: ViewContainerRef },
|
|
393
|
-
{ type: ComponentFactoryResolver }
|
|
394
|
-
];
|
|
395
|
-
BaseFileUploadComponent.propDecorators = {
|
|
396
|
-
fileType: [{ type: Input }],
|
|
397
|
-
documents: [{ type: Input }],
|
|
398
|
-
documentTable: [{ type: Input }],
|
|
399
|
-
documentKey: [{ type: Input }],
|
|
400
|
-
fullPageDrop: [{ type: Input }],
|
|
401
|
-
canAdd: [{ type: Input }],
|
|
402
|
-
dropMessage: [{ type: Input }],
|
|
403
|
-
addWithButton: [{ type: Input }],
|
|
404
|
-
canDelete: [{ type: Input }],
|
|
405
|
-
noDragDropOrdering: [{ type: Input }],
|
|
406
|
-
readonly: [{ type: Input }],
|
|
407
|
-
askBeforeDelete: [{ type: Input }],
|
|
408
|
-
resizeImages: [{ type: Input }],
|
|
409
|
-
lockOperation: [{ type: Input }],
|
|
410
|
-
unlockOperation: [{ type: Input }],
|
|
411
|
-
beforeDeleteOperation: [{ type: Input }],
|
|
412
|
-
afterDeleteOperation: [{ type: Input }],
|
|
413
|
-
beforeCreateOperation: [{ type: Input }],
|
|
414
|
-
afterCreateOperation: [{ type: Input }],
|
|
415
|
-
beforeEditOperation: [{ type: Input }],
|
|
416
|
-
dontAskBeforeDelete: [{ type: Input }],
|
|
417
|
-
noOwnDeleteOperation: [{ type: Input }],
|
|
418
|
-
maxUploadSizeParam: [{ type: Input }],
|
|
419
|
-
useWithoutSettingProps: [{ type: Input }],
|
|
420
|
-
filesUploadConfigObjects: [{ type: Input }],
|
|
421
|
-
medicalUserGroups: [{ type: Input }],
|
|
422
|
-
tagCategory: [{ type: Input }],
|
|
423
|
-
tagReferenceTable: [{ type: Input }],
|
|
424
|
-
displayReadWriteAccess: [{ type: Input }],
|
|
425
|
-
useCustomFileDropEvent: [{ type: Input }],
|
|
426
|
-
customFileDropEvent: [{ type: Output }],
|
|
427
|
-
documentsAdded: [{ type: Output }],
|
|
428
|
-
documentDeleted: [{ type: Output }],
|
|
429
|
-
sortableListChanged: [{ type: Output }],
|
|
430
|
-
documentChangeEvent: [{ type: Output }],
|
|
431
|
-
popupOpenedStateChange: [{ type: Output }],
|
|
432
|
-
hidden: [{ type: HostBinding, args: ["class.hidden",] }],
|
|
433
|
-
onDrop: [{ type: HostListener, args: ["drop", ["$event"],] }],
|
|
434
|
-
onDragEnd: [{ type: HostListener, args: ["dragend", ["$event"],] }],
|
|
435
|
-
onDragOver: [{ type: HostListener, args: ["dragover", ["$event"],] }],
|
|
436
|
-
onDragEnter: [{ type: HostListener, args: ["dragenter", ["$event"],] }],
|
|
437
|
-
onDragLeave: [{ type: HostListener, args: ["dragleave", ["$event"],] }]
|
|
438
|
-
};
|
|
439
|
-
__decorate([
|
|
440
|
-
InputBoolean()
|
|
441
|
-
], BaseFileUploadComponent.prototype, "noDragDropOrdering", void 0);
|
|
442
|
-
__decorate([
|
|
443
|
-
InputBoolean()
|
|
444
|
-
], BaseFileUploadComponent.prototype, "readonly", null);
|
|
445
|
-
__decorate([
|
|
446
|
-
InputBoolean()
|
|
447
|
-
], BaseFileUploadComponent.prototype, "askBeforeDelete", void 0);
|
|
448
|
-
__decorate([
|
|
449
|
-
InputBoolean()
|
|
450
|
-
], BaseFileUploadComponent.prototype, "resizeImages", void 0);
|
|
451
|
-
__decorate([
|
|
452
|
-
InputBoolean()
|
|
453
|
-
], BaseFileUploadComponent.prototype, "dontAskBeforeDelete", void 0);
|
|
454
|
-
__decorate([
|
|
455
|
-
InputBoolean()
|
|
456
|
-
], BaseFileUploadComponent.prototype, "noOwnDeleteOperation", void 0);
|
|
457
|
-
__decorate([
|
|
458
|
-
InputBoolean()
|
|
459
|
-
], BaseFileUploadComponent.prototype, "useWithoutSettingProps", void 0);
|
|
460
|
-
__decorate([
|
|
461
|
-
InputBoolean()
|
|
462
|
-
], BaseFileUploadComponent.prototype, "medicalUserGroups", void 0);
|
|
463
|
-
__decorate([
|
|
464
|
-
InputBoolean()
|
|
465
|
-
], BaseFileUploadComponent.prototype, "displayReadWriteAccess", void 0);
|
|
466
|
-
__decorate([
|
|
467
|
-
InputBoolean()
|
|
468
|
-
], BaseFileUploadComponent.prototype, "useCustomFileDropEvent", void 0);
|
|
469
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1maWxlLXVwbG9hZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaGFyZWRjb21wb25lbnRzL3NyYy9saWIvY29tcG9uZW50cy9maWxlcy11cGxvYWQvY29tcG9uZW50cy9iYXNlLWZpbGUtdXBsb2FkLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUVILHdCQUF3QixFQUV4QixTQUFTLEVBQ1QsWUFBWSxFQUNaLFdBQVcsRUFDWCxZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sRUFDTixnQkFBZ0IsRUFDbkIsTUFBTSxlQUFlLENBQUM7QUFHdkIsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLCtCQUErQixDQUFDO0FBQ3hELE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLHFDQUFxQyxDQUFDO0FBQ3RFLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSw2Q0FBNkMsQ0FBQztBQUNyRSxPQUFPLEVBRUgsa0NBQWtDLEVBQ3JDLE1BQU0sdURBQXVELENBQUM7QUFJL0QsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLDRCQUE0QixDQUFDO0FBQ3RELE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSwrQkFBK0IsQ0FBQztBQUMzRCxPQUFPLEVBQUMsMEJBQTBCLEVBQUMsTUFBTSwrQ0FBK0MsQ0FBQztBQUV6RixPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sdURBQXVELENBQUM7QUFDdEYsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLDRDQUE0QyxDQUFDO0FBQ3hFLE9BQU8sRUFBQyx3QkFBd0IsRUFBQyxNQUFNLHFEQUFxRCxDQUFDO0FBQzdGLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSwwQ0FBMEMsQ0FBQztBQUNuRSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sMkNBQTJDLENBQUM7QUFDckUsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLG9EQUFvRCxDQUFDO0FBQ2xGLE9BQU8sRUFBQyx3QkFBd0IsRUFBQyxNQUFNLHFEQUFxRCxDQUFDO0FBSTdGLCtJQUErSTtBQUUvSSxNQUFNLE9BQWdCLHVCQUF1QjtJQWdPekMsd0hBQXdIO0lBRXhIO0lBRUksMENBQTBDO0lBQ2hDLGtCQUFxQztJQUMvQyxzQ0FBc0M7SUFDNUIsVUFBNEIsRUFDNUIsUUFBa0M7UUFIbEMsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFtQjtRQUVyQyxlQUFVLEdBQVYsVUFBVSxDQUFrQjtRQUM1QixhQUFRLEdBQVIsUUFBUSxDQUEwQjtRQWpOekMsY0FBUyxHQUFpQixFQUFFLENBQUM7UUFjcEMsd0NBQXdDO1FBRWpDLGlCQUFZLEdBQVksS0FBSyxDQUFDO1FBRXJDLDRDQUE0QztRQUVyQyxXQUFNLEdBQVksSUFBSSxDQUFDO1FBSzlCLGtCQUFrQjtRQUVYLGtCQUFhLEdBQVksSUFBSSxDQUFDO1FBRXJDLDhDQUE4QztRQUV2QyxjQUFTLEdBQVksSUFBSSxDQUFDO1FBSTFCLHVCQUFrQixHQUFZLEtBQUssQ0FBQztRQWtCcEMsb0JBQWUsR0FBWSxJQUFJLENBQUM7UUFJaEMsaUJBQVksR0FBWSxLQUFLLENBQUM7UUFHOUIsa0JBQWEsR0FBb0Msa0NBQWtDLENBQUM7UUFHcEYsb0JBQWUsR0FBb0Msa0NBQWtDLENBQUM7UUFNdEYsMEJBQXFCLEdBQW9DLGtDQUFrQyxDQUFDO1FBRzVGLHlCQUFvQixHQUFvQyxrQ0FBa0MsQ0FBQztRQUczRiwwQkFBcUIsR0FBb0Msa0NBQWtDLENBQUM7UUFHNUYseUJBQW9CLEdBQW9DLGtDQUFrQyxDQUFDO1FBRzNGLHdCQUFtQixHQUFvQyxrQ0FBa0MsQ0FBQztRQUkxRix3QkFBbUIsR0FBWSxLQUFLLENBQUM7UUFJckMseUJBQW9CLEdBQVksS0FBSyxDQUFDO1FBYXRDLDJCQUFzQixHQUFZLEtBQUssQ0FBQztRQU94QyxzQkFBaUIsR0FBWSxLQUFLLENBQUM7UUFZMUMsK0JBQStCO1FBRXhCLDJCQUFzQixHQUFZLEtBQUssQ0FBQztRQUUvQyxpREFBaUQ7UUFFMUMsd0JBQW1CLEdBQTJCLElBQUksWUFBWSxFQUFZLENBQUM7UUFFbEYsd0RBQXdEO1FBRXhDLG1CQUFjLEdBQStCLElBQUksWUFBWSxFQUFnQixDQUFDO1FBRzlFLG9CQUFlLEdBQTZCLElBQUksWUFBWSxFQUFjLENBQUM7UUFFM0Ysc0RBQXNEO1FBRXRDLHdCQUFtQixHQUErQixJQUFJLFlBQVksRUFBZ0IsQ0FBQztRQUc1Rix3QkFBbUIsR0FBNkIsSUFBSSxZQUFZLEVBQWMsQ0FBQztRQUV0Riw2TEFBNkw7UUFFdEwsMkJBQXNCLEdBQTBCLElBQUksWUFBWSxFQUFXLENBQUM7UUFpRDNFLGlCQUFZLEdBQVcsRUFBRSxDQUFDO1FBSzFCLGNBQVMsR0FBWSxLQUFLLENBQUM7SUFpQm5DLENBQUM7SUF2T0QsdUlBQXVJO0lBQ3ZJLElBQ1csUUFBUSxDQUFDLEtBQWU7UUFDL0IsSUFBSSxLQUFLLEVBQUU7WUFDUCxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztZQUN2Qiw2QkFBNkI7WUFDN0Isd0dBQXdHO1NBQzNHO0lBQ0wsQ0FBQztJQUVELElBQVcsUUFBUTtRQUNmLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUMxQixDQUFDO0lBUUQsSUFDVyxXQUFXLENBQUMsS0FBYTtRQUNoQyxJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssR0FBRyxFQUFFLENBQUMsQ0FBQyxlQUFlO0lBQ25ELENBQUM7SUFFRCxJQUFXLFdBQVc7UUFDbEIsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzdCLENBQUM7SUEyQkQsSUFBVyxRQUFRLENBQUMsS0FBYztRQUM5QixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztRQUV2QixJQUFJLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUU7WUFDckMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztTQUN6QztJQUNMLENBQUM7SUFFRCxJQUFXLFFBQVE7UUFDZixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDMUIsQ0FBQztJQTRDRCxJQUNXLGtCQUFrQixDQUFDLEtBQW9CO1FBQzlDLElBQUksS0FBSyxFQUFFO1lBQ1AsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ3BDO0lBQ0wsQ0FBQztJQXFETSxNQUFNLENBQUMsS0FBZ0I7UUFDMUIsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3ZCLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUV4QixJQUFJLENBQUMsSUFBSSxDQUFDLHNCQUFzQixFQUFFO1lBQzlCLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUM5QzthQUFNO1lBQ0gsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQzNEO1FBRUQsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFHTSxTQUFTLENBQUMsS0FBZ0I7UUFDN0IsS0FBSyxDQUFDLFlBQVksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUMvQixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUdNLFVBQVUsQ0FBQyxLQUFnQjtRQUM5QixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUdNLFdBQVcsQ0FBQyxLQUFnQjtRQUMvQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztRQUNyQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDekIsQ0FBQztJQUdNLFdBQVcsQ0FBQyxLQUFnQjtRQUMvQixJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLGdCQUFnQixFQUFFO1lBQ3hDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztTQUN6QjtJQUNMLENBQUM7SUFnQ0QsV0FBVztRQUNQLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRU8sYUFBYTtRQUNqQixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNqQixNQUFNLElBQUksR0FBK0MsSUFBSSxDQUFDLFFBQVEsQ0FBQyx1QkFBdUIsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO1lBQ3pILElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDdkQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsdUJBQXVCLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztTQUN0RTtJQUNMLENBQUM7SUFFTyxjQUFjO1FBQ2xCLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDeEIsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQ2hCLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDekIsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7U0FDOUI7SUFDTCxDQUFDO0lBRUQsaUNBQWlDO0lBQ3BCLFlBQVksQ0FBQyxJQUFnQjs7WUFDdEMsSUFBSSxPQUFPLEdBQVksTUFBTSxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDOUQsSUFBSTtnQkFDQSxJQUFJLE9BQU8sRUFBRTtvQkFDVCxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQ3pCLE9BQU8sR0FBRyxJQUFJLENBQUM7aUJBQ2xCO2FBQ0o7b0JBQVM7Z0JBQ04sTUFBTSxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDekM7WUFDRCxPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDcEMsQ0FBQztLQUFBO0lBRWEsT0FBTyxDQUFDLElBQWdCOztZQUNsQyxJQUFJLFFBQVEsR0FBWSxJQUFJLENBQUM7WUFDN0IsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsRUFBRTtnQkFDN0IseUJBQXlCO2dCQUN2QixtRkFBbUY7YUFDdEY7WUFDRCxJQUFJLFFBQVEsRUFBRTtnQkFDVixJQUFJLENBQUMsSUFBSSxDQUFDLG9CQUFvQixFQUFFO29CQUM1QixVQUFVLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7aUJBQ2xEO2dCQUNELElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQ25DO1FBQ0wsQ0FBQztLQUFBO0lBRU0sbUJBQW1CLENBQUMsSUFBa0I7UUFDekMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBRVksZ0JBQWdCLENBQUMsS0FBVTs7WUFDcEMsSUFBSSxLQUFLLElBQUksS0FBSyxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dCQUM5RSxpQ0FBaUM7Z0JBQ2pDLGdCQUFnQjtnQkFDaEIscUZBQXFGO2dCQUNyRixJQUFJLHNCQUFzQixHQUFZLElBQUksQ0FBQztnQkFDM0MsSUFBSSw2QkFBNkIsR0FBWSxJQUFJLENBQUM7Z0JBQ2xELE1BQU0sYUFBYSxHQUFXLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7Z0JBQzVGLE1BQU0sR0FBRyxHQUFXLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztnQkFDOUMsS0FBSyxJQUFJLENBQUMsR0FBVyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtvQkFDbEMsTUFBTSxpQkFBaUIsR0FBRyxTQUFTLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsYUFBYSxDQUFDLENBQUM7b0JBQzdGLElBQUksQ0FBQyxpQkFBaUIsRUFBRTt3QkFDcEIsc0JBQXNCLEdBQUcsS0FBSyxDQUFDO3dCQUMvQixNQUFNO3FCQUNUO29CQUNELE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFBLENBQUEscUVBQXFFO29CQUNsRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7d0JBQ25CLDZCQUE2QixHQUFHLEtBQUssQ0FBQzt3QkFDdEMsTUFBTTtxQkFDVDtpQkFDSjtnQkFFRCxJQUFJLENBQUMsc0JBQXNCLEVBQUU7b0JBQzNCLHlCQUF5QjtvQkFDdkIsdUpBQXVKO2lCQUMxSjtxQkFBTSxJQUFJLENBQUMsNkJBQTZCLEVBQUU7b0JBQ3ZDLGlIQUFpSDtvQkFDakgsdUhBQXVIO2lCQUMxSDtxQkFBTTtvQkFDSCxNQUFNLFVBQVUsR0FBaUIsTUFBTSxJQUFJLENBQUMsMkJBQTJCLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFFNUYsSUFBSSxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTt3QkFDdkIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7cUJBQ3hDO3lCQUFNO3dCQUNILElBQUksSUFBSSxDQUFDLHNCQUFzQixFQUFFOzRCQUM3QixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQzt5QkFDeEM7NkJBQU07NEJBQ0gsSUFBSSxDQUFDLGlCQUFpQixHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQzs0QkFDdkMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO3lCQUNwQjtxQkFDSjtpQkFDSjthQUNKO1FBQ0wsQ0FBQztLQUFBO0lBRVksdUJBQXVCLENBQUMsU0FBcUI7O1lBQ3RELElBQUksQ0FBQyxpQkFBaUIsR0FBRyxTQUFTLENBQUM7WUFDbkMsTUFBTSxTQUFTLEdBQVksTUFBTSxJQUFJLENBQUMsbUJBQW1CLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDckUsSUFBSSxTQUFTLEVBQUU7Z0JBQ1gsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO2FBQ3BCO1FBQ0wsQ0FBQztLQUFBO0lBRVksU0FBUzs7WUFDbEIsSUFBSSxDQUFDLDJCQUEyQixFQUFFLENBQUM7WUFFbkMsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFlLEVBQUUsRUFBRTtnQkFDeEYsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN2QyxDQUFDLENBQUMsQ0FBQztRQUNQLENBQUM7S0FBQTtJQUVNLDJCQUEyQjtRQUM5QixJQUFJLENBQUMseUJBQXlCLEVBQUUsQ0FBQztRQUNqQyxJQUFJLENBQUMsMkJBQTJCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFdkMsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFlLEVBQUUsRUFBRTtZQUN4RixHQUFHLENBQUMsUUFBUSxHQUFHLEdBQUcsQ0FBQyxRQUFRLENBQUM7WUFDNUIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN2QyxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFTyx5QkFBeUI7UUFDN0IsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksVUFBVSxFQUFFLENBQUM7UUFDMUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDO1FBQ2xELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztRQUM5QyxJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7UUFDaEQsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFlBQVksR0FBRyxjQUFjLENBQUMsMEJBQTBCLENBQUM7UUFDaEYsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFDeEMscUJBQXFCO1FBQ3JCLGlGQUFpRjtRQUNqRixpRkFBaUY7UUFDakYsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFlBQVksR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ2pELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztJQUNyRCxDQUFDO0lBRU8sMkJBQTJCLENBQUMsbUJBQTRCLEtBQUs7UUFDakUsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUV2QyxNQUFNLE9BQU8sR0FBK0MsSUFBSSxDQUFDLFFBQVEsQ0FBQyx1QkFBdUIsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO1FBRTVILElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFdkQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7UUFDL0MsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLEdBQUcsZ0JBQWdCLENBQUM7UUFDekQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsc0JBQXNCLEdBQUcsSUFBSSxDQUFDLGFBQWEsS0FBSyxTQUFTLENBQUMsS0FBSyxDQUFDO1FBQ3JGLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLHdCQUF3QixHQUFHLENBQUMsSUFBSSxDQUFDLGFBQWEsS0FBSyxTQUFTLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQyxhQUFhLEtBQUssU0FBUyxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDckosSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDO1FBQ2hFLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLHdCQUF3QixHQUFHLElBQUksQ0FBQyx3QkFBd0IsQ0FBQztRQUM5RSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUM7UUFDaEUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7UUFDcEQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsc0JBQXNCLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDO1FBQzFFLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztRQUNoRSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxjQUFjLEdBQUcsWUFBWSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUM5RyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGNBQWMsQ0FBQztRQUMzRSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUU5QyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUUxQixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ3RFLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUN2QixJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3hDLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDbEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNqQyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3RCLElBQUksQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDO1FBQzVCLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVlLDJCQUEyQixDQUFDLEtBQWU7O1lBQ3ZELE1BQU0sYUFBYSxHQUFXLEtBQUssQ0FBQyxNQUFNLENBQUM7WUFDM0MsTUFBTSxVQUFVLEdBQWlCLEVBQUUsQ0FBQztZQUVwQyxLQUFLLElBQUksQ0FBQyxHQUFXLENBQUMsRUFBRSxDQUFDLEdBQUcsYUFBYSxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUM1QyxNQUFNLGNBQWMsR0FBZSxNQUFNLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDM0UsY0FBYyxDQUFDLEtBQUssR0FBRywwQkFBMEIsQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxJQUFJLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDckcsVUFBVSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQzthQUNuQztZQUNELE9BQU8sVUFBVSxDQUFDO1FBQ3RCLENBQUM7S0FBQTtJQUVZLFdBQVcsQ0FBQyxLQUFlOztZQUNwQyxJQUFJLEtBQUssSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFO2dCQUN2QixJQUFJLGdCQUFnQixHQUFZLElBQUksQ0FBQztnQkFDckMsTUFBTSxhQUFhLEdBQVcsS0FBSyxDQUFDLE1BQU0sQ0FBQztnQkFDM0MsS0FBSyxJQUFJLENBQUMsR0FBVyxDQUFDLEVBQUUsQ0FBQyxHQUFHLGFBQWEsRUFBRSxDQUFDLEVBQUUsRUFBRTtvQkFDNUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEVBQUU7d0JBQ2xFLGdCQUFnQixHQUFHLEtBQUssQ0FBQzt3QkFDekIsTUFBTTtxQkFDVDtpQkFDSjtnQkFFRCxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7b0JBQ3JCLHlCQUF5QjtvQkFDdkIsMEtBQTBLO2lCQUM3SztxQkFBTTtvQkFDSCxNQUFNLFVBQVUsR0FBaUIsTUFBTSxJQUFJLENBQUMsMkJBQTJCLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBRS9FLElBQUksVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLHNCQUFzQixFQUFFO3dCQUN0RCxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztxQkFDeEM7eUJBQU07d0JBQ0gsSUFBSSxDQUFDLGlCQUFpQixHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLDhDQUE4Qzt3QkFDdEYsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO3FCQUNwQjtpQkFDSjthQUNKO1FBQ0wsQ0FBQztLQUFBO0lBRU0sNkJBQTZCLENBQUMsS0FBZTtRQUNoRCxrQkFBa0I7UUFDbEIsNkZBQTZGO0lBQ2pHLENBQUM7SUFFYSxrQkFBa0IsQ0FBQyxJQUFVOztZQUN2QyxNQUFNLGdCQUFnQixHQUFlLE1BQU0sU0FBUyxDQUFDLHVCQUF1QixDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDdEcsa0RBQWtEO1lBQ2xELGdCQUFnQixDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDO1lBQzVDLGdCQUFnQixDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO1lBQ3hDLG9CQUFvQjtZQUNwQiwyRUFBMkU7WUFDM0UsMkVBQTJFO1lBQzNFLGdCQUFnQixDQUFDLFlBQVksR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1lBQzNDLGdCQUFnQixDQUFDLFlBQVksR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1lBQzNDLGdCQUFnQixDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDO1lBRTdILElBQUksZ0JBQWdCLEVBQUU7Z0JBQ2xCLE9BQU8sZ0JBQWdCLENBQUM7YUFDM0I7UUFDTCxDQUFDO0tBQUE7SUFFYSxvQkFBb0IsQ0FBQyxLQUFvQjs7WUFDbkQsaUJBQWlCO1lBQ2pCLHdHQUF3RztZQUN4RyxtR0FBbUc7UUFDdkcsQ0FBQztLQUFBO0lBRWEsYUFBYTs7WUFDdkIsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxVQUFVLEVBQUU7Z0JBQ3BDLE9BQU8sSUFBSSxDQUFDLENBQUMsNEVBQTRFO2FBQzVGO1lBRUQsTUFBTSxNQUFNLEdBQVksTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQzdELE9BQU8sTUFBTSxDQUFDO1FBQ2xCLENBQUM7S0FBQTtJQUVhLGVBQWU7O1lBQzNCLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsVUFBVSxFQUFFO2dCQUN0QyxPQUFPLElBQUksQ0FBQyxDQUFDLDRFQUE0RTthQUMxRjtZQUVELE1BQU0sUUFBUSxHQUFZLE1BQU0sSUFBSSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUNqRSxPQUFPLFFBQVEsQ0FBQztRQUNsQixDQUFDO0tBQUE7SUFFTyxrQkFBa0I7UUFDdEIsTUFBTSxHQUFHLEdBQVcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7UUFDekQsS0FBSyxJQUFJLENBQUMsR0FBVyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUNsQyxNQUFNLEtBQUssR0FBb0IsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNoRSxJQUFJLEtBQUssQ0FBQyxVQUFVLEtBQUssZUFBZSxDQUFDLFNBQVMsRUFBRTtnQkFDaEQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQzthQUNuRTtZQUNELElBQUksS0FBSyxDQUFDLFVBQVUsS0FBSyxlQUFlLENBQUMsUUFBUSxFQUFFO2dCQUMvQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO2FBQ2xFO1NBQ0o7SUFDTCxDQUFDOzs7WUE1ZkosU0FBUzs7O1lBeEJGLGlCQUFpQjtZQUxyQixnQkFBZ0I7WUFUaEIsd0JBQXdCOzs7dUJBZ0R2QixLQUFLO3dCQWFMLEtBQUs7NEJBR0wsS0FBSzswQkFHTCxLQUFLOzJCQVVMLEtBQUs7cUJBSUwsS0FBSzswQkFHTCxLQUFLOzRCQUlMLEtBQUs7d0JBSUwsS0FBSztpQ0FHTCxLQUFLO3VCQUlMLEtBQUs7OEJBY0wsS0FBSzsyQkFJTCxLQUFLOzRCQUlMLEtBQUs7OEJBR0wsS0FBSztvQ0FNTCxLQUFLO21DQUdMLEtBQUs7b0NBR0wsS0FBSzttQ0FHTCxLQUFLO2tDQUdMLEtBQUs7a0NBR0wsS0FBSzttQ0FJTCxLQUFLO2lDQU1MLEtBQUs7cUNBT0wsS0FBSzt1Q0FJTCxLQUFLO2dDQUdMLEtBQUs7MEJBSUwsS0FBSztnQ0FHTCxLQUFLO3FDQUdMLEtBQUs7cUNBS0wsS0FBSztrQ0FJTCxNQUFNOzZCQUlOLE1BQU07OEJBR04sTUFBTTtrQ0FJTixNQUFNO2tDQUdOLE1BQU07cUNBSU4sTUFBTTtxQkFHTixXQUFXLFNBQUMsY0FBYztxQkFHMUIsWUFBWSxTQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQzt3QkFjL0IsWUFBWSxTQUFDLFNBQVMsRUFBRSxDQUFDLFFBQVEsQ0FBQzt5QkFNbEMsWUFBWSxTQUFDLFVBQVUsRUFBRSxDQUFDLFFBQVEsQ0FBQzswQkFLbkMsWUFBWSxTQUFDLFdBQVcsRUFBRSxDQUFDLFFBQVEsQ0FBQzswQkFNcEMsWUFBWSxTQUFDLFdBQVcsRUFBRSxDQUFDLFFBQVEsQ0FBQzs7QUFsSnJDO0lBREMsWUFBWSxFQUFFO21FQUM0QjtBQUkzQztJQURDLFlBQVksRUFBRTt1REFPZDtBQVFEO0lBREMsWUFBWSxFQUFFO2dFQUN3QjtBQUl2QztJQURDLFlBQVksRUFBRTs2REFDc0I7QUE0QnJDO0lBREMsWUFBWSxFQUFFO29FQUM2QjtBQUk1QztJQURDLFlBQVksRUFBRTtxRUFDOEI7QUFhN0M7SUFEQyxZQUFZLEVBQUU7dUVBQ2dDO0FBTy9DO0lBREMsWUFBWSxFQUFFO2tFQUMyQjtBQVUxQztJQURDLFlBQVksRUFBRTt1RUFDd0I7QUFJdkM7SUFEVSxZQUFZLEVBQUU7dUVBQ3VCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDb21wb25lbnRGYWN0b3J5LFxuICAgIENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcbiAgICBDb21wb25lbnRSZWYsXG4gICAgRGlyZWN0aXZlLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBIb3N0QmluZGluZyxcbiAgICBIb3N0TGlzdGVuZXIsXG4gICAgSW5wdXQsXG4gICAgT25EZXN0cm95LFxuICAgIE91dHB1dCxcbiAgICBWaWV3Q29udGFpbmVyUmVmXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQge1NjcmVlbkNvbmZpZ0FkYXB0ZXJDb21wb25lbnR9IGZyb20gXCJAY29saWpuaXQvY29yZWNvbXBvbmVudHNfdjEyXCI7XG5pbXBvcnQge1N1YnNjcmlwdGlvbn0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB7VGFibGVOYW1lfSBmcm9tIFwiLi4vLi4vLi4vZW51bS90YWJsZS1uYW1lLmVudW1cIjtcbmltcG9ydCB7RGljdGlvbmFyeVNlcnZpY2V9IGZyb20gXCIuLi8uLi8uLi9zZXJ2aWNlL2RpY3Rpb25hcnkuc2VydmljZVwiO1xuaW1wb3J0IHtGaWxlVHlwZX0gZnJvbSBcIkBjb2xpam5pdC9tYWluYXBpL2J1aWxkL2VudW0vZmlsZS10eXBlLmVudW1cIjtcbmltcG9ydCB7XG4gICAgT3BlcmF0aW9uQ2FsbGJhY2tTaW1wbGVGdW5jdGlvbixcbiAgICBPcGVyYXRpb25XaXRoQWx3YXlzU3VjY2Vzc0NhbGxiYWNrXG59IGZyb20gXCIuLi8uLi8uLi9pbnRlcmZhY2Uvb3BlcmF0aW9uLWNhbGxiYWNrLXNpbXBsZS1mdW5jdGlvblwiO1xuaW1wb3J0IHtJbnRlcm5hbFBhcmFtfSBmcm9tIFwiLi4vLi4vLi4vZW51bS9pbnRlcm5hbC1wYXJhbS5lbnVtXCI7XG5pbXBvcnQge0ZpbGVzVXBsb2FkQ29uZmlnT2JqZWN0c30gZnJvbSBcIi4uLy4uLy4uL2VudW0vZmlsZXMtdXBsb2FkLWNvbmZpZy1vYmplY3RzXCI7XG5pbXBvcnQge1RhZ0NhdGVnb3J5fSBmcm9tIFwiLi4vLi4vLi4vZW51bS90YWctY2F0ZWdvcnkuZW51bVwiO1xuaW1wb3J0IHtBcnJheVV0aWxzfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvYXJyYXktdXRpbHNcIjtcbmltcG9ydCB7UmVmQ29kZVV0aWxzfSBmcm9tIFwiLi4vLi4vLi4vdXRpbHMvcmVmLWNvZGUtdXRpbHNcIjtcbmltcG9ydCB7Q29Eb2N1bWVudFNoYXJlZEZpZWxkTG9naWN9IGZyb20gXCIuLi8uLi8uLi91dGlscy9jby1kb2N1bWVudC1zaGFyZWQtZmllbGQtbG9naWNcIjtcbmltcG9ydCB7Q29Eb2N1bWVudFJpZ2h0fSBmcm9tIFwiLi4vLi4vLi4vYnVzaW5lc3NvYmplY3QvY28tZG9jdW1lbnQtcmlnaHQuYm9cIjtcbmltcG9ydCB7T2JqZWN0UmlnaHRUeXBlfSBmcm9tIFwiQGNvbGlqbml0L3NoYXJlZGFwaS9idWlsZC9lbnVtL29iamVjdC1yaWdodC10eXBlLmVudW1cIjtcbmltcG9ydCB7SW5wdXRCb29sZWFufSBmcm9tIFwiLi4vLi4vLi4vZGVjb3JhdG9yL2lucHV0LWJvb2xlYW4uZGVjb3JhdG9yXCI7XG5pbXBvcnQge0FwcEZpbGVEcm9wem9uZUNvbXBvbmVudH0gZnJvbSBcIi4uLy4uL2FwcC1maWxlLWRyb3B6b25lL2FwcC1maWxlLWRyb3B6b25lLmNvbXBvbmVudFwiO1xuaW1wb3J0IHtGaWxlVXRpbHN9IGZyb20gXCJAY29saWpuaXQvbWFpbmFwaS9idWlsZC91dGlscy9maWxlLXV0aWxzXCI7XG5pbXBvcnQge0NvRG9jdW1lbnR9IGZyb20gXCJAY29saWpuaXQvbWFpbmFwaS9idWlsZC9tb2RlbC9jby1kb2N1bWVudFwiO1xuaW1wb3J0IHtDb0RvY3VtZW50VHlwZX0gZnJvbSBcIkBjb2xpam5pdC9tYWluYXBpL2J1aWxkL2VudW0vY28tZG9jdW1lbnQtdHlwZS5lbnVtXCI7XG5pbXBvcnQge0ZpbGVVcGxvYWRQb3B1cENvbXBvbmVudH0gZnJvbSBcIi4uLy4uL2ZpbGUtdXBsb2FkLXBvcHVwL2ZpbGUtdXBsb2FkLXBvcHVwLmNvbXBvbmVudFwiO1xuXG5cblxuLy8gQSBiYXNlIGNvbXBvbmVudCB0aGF0IGxldHMgdGhlIHVzZXIgbWFrZSBhIGxpc3Qgb2YgZmlsZXMgZnJvbSBpdHMgZGV2aWNlLiBEb2Vzbid0IGFjdHVhbGx5IHVwbG9hZCwgYnV0IG91dHB1dHMgY2hvc2VuIGZpbGVzIGFzIGZpbGVzQ2hhbmdlZC5cbkBEaXJlY3RpdmUoKVxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEJhc2VGaWxlVXBsb2FkQ29tcG9uZW50IGltcGxlbWVudHMgU2NyZWVuQ29uZmlnQWRhcHRlckNvbXBvbmVudCwgT25EZXN0cm95IHtcbiAgICBkZWNpbWFsczogbnVtYmVyO1xuICAgIGZvcmNlUmVhZG9ubHk6IGJvb2xlYW47XG4gICAgbWF4TGVuZ3RoOiBudW1iZXI7XG4gICAgb2JqZWN0Q29uZmlnTmFtZTogc3RyaW5nO1xuICAgIHJlZEVycm9yQmFja2dyb3VuZDogYm9vbGVhbjtcbiAgICByZXF1aXJlZDogYm9vbGVhbjtcblxuICAgIC8vIFRoZSBmaWxlVHlwZSB0aGF0IHRoZSBkb2N1bWVudHMgc2hvdWxkIGJlIHNhdmVkIGFzLCBsZWF2ZSBlbXB0eSB0byBhdXRvbWF0aWNhbGx5IGRldGVjdCBmaWxldHlwZS4gQWxzbyBkZXRlcm1pbmVzIGZpbGUgcGlja2VyIGZpbHRlclxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNldCBmaWxlVHlwZSh2YWx1ZTogRmlsZVR5cGUpIHtcbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLl9maWxlVHlwZSA9IHZhbHVlO1xuICAgICAgICAgICAgLy9UT0RPIERvY3VtZW50ZGF0YWxvYWRlciBmaXhcbiAgICAgICAgICAgIC8vdGhpcy5fY29Eb2N1bWVudERhdGFMb2FkZXIubG9hZEFsbG93ZWRUeXBlcygpLnRoZW4oKCkgPT4ge3RoaXMuaGFuZGxlQWNjZXB0ZWRGaWxlVHlwZXNMb2FkZWQodmFsdWUpfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGZpbGVUeXBlKCk6IEZpbGVUeXBlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbGVUeXBlO1xuICAgIH1cblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGRvY3VtZW50czogQ29Eb2N1bWVudFtdID0gW107XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBkb2N1bWVudFRhYmxlOiBUYWJsZU5hbWU7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzZXQgZG9jdW1lbnRLZXkodmFsdWU6IHN0cmluZykge1xuICAgICAgICB0aGlzLl9kb2N1bWVudEtleSA9IHZhbHVlICsgXCJcIjsgLy8gZm9yY2Ugc3RyaW5nXG4gICAgfVxuXG4gICAgcHVibGljIGdldCBkb2N1bWVudEtleSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5fZG9jdW1lbnRLZXk7XG4gICAgfVxuXG4gICAgLy8gVGhlIGFiaWxpdHkgdG8gZHJvcCBmaWxlcyBvbiB0aGUgcGFnZVxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGZ1bGxQYWdlRHJvcDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgLy8gSWYgdXNlciBnZXRzIHRoZSBhYmlsaXR5IG9mIGFkZGluZyBmaWxlcy5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBjYW5BZGQ6IGJvb2xlYW4gPSB0cnVlO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZHJvcE1lc3NhZ2U6IHN0cmluZztcblxuICAgIC8vIFNob3cgYWRkIGJ1dHRvblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGFkZFdpdGhCdXR0b246IGJvb2xlYW4gPSB0cnVlO1xuXG4gICAgLy8gSWYgdXNlciBnZXRzIHRoZSBhYmlsaXR5IG9mIGRlbGV0aW5nIGZpbGVzLlxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGNhbkRlbGV0ZTogYm9vbGVhbiA9IHRydWU7XG5cbiAgICBASW5wdXQoKVxuICAgIEBJbnB1dEJvb2xlYW4oKVxuICAgIHB1YmxpYyBub0RyYWdEcm9wT3JkZXJpbmc6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpXG4gICAgQElucHV0Qm9vbGVhbigpXG4gICAgcHVibGljIHNldCByZWFkb25seSh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl9yZWFkb25seSA9IHZhbHVlO1xuXG4gICAgICAgIGlmICh0aGlzLl9wb3B1cCAmJiB0aGlzLl9wb3B1cC5pbnN0YW5jZSkge1xuICAgICAgICAgICAgdGhpcy5fcG9wdXAuaW5zdGFuY2UucmVhZG9ubHkgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgcmVhZG9ubHkoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZWFkb25seTtcbiAgICB9XG5cbiAgICBASW5wdXQoKVxuICAgIEBJbnB1dEJvb2xlYW4oKVxuICAgIHB1YmxpYyBhc2tCZWZvcmVEZWxldGU6IGJvb2xlYW4gPSB0cnVlO1xuXG4gICAgQElucHV0KClcbiAgICBASW5wdXRCb29sZWFuKClcbiAgICBwdWJsaWMgcmVzaXplSW1hZ2VzOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBsb2NrT3BlcmF0aW9uOiBPcGVyYXRpb25DYWxsYmFja1NpbXBsZUZ1bmN0aW9uID0gT3BlcmF0aW9uV2l0aEFsd2F5c1N1Y2Nlc3NDYWxsYmFjaztcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHVubG9ja09wZXJhdGlvbjogT3BlcmF0aW9uQ2FsbGJhY2tTaW1wbGVGdW5jdGlvbiA9IE9wZXJhdGlvbldpdGhBbHdheXNTdWNjZXNzQ2FsbGJhY2s7XG5cblxuXG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBiZWZvcmVEZWxldGVPcGVyYXRpb246IE9wZXJhdGlvbkNhbGxiYWNrU2ltcGxlRnVuY3Rpb24gPSBPcGVyYXRpb25XaXRoQWx3YXlzU3VjY2Vzc0NhbGxiYWNrO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgYWZ0ZXJEZWxldGVPcGVyYXRpb246IE9wZXJhdGlvbkNhbGxiYWNrU2ltcGxlRnVuY3Rpb24gPSBPcGVyYXRpb25XaXRoQWx3YXlzU3VjY2Vzc0NhbGxiYWNrO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgYmVmb3JlQ3JlYXRlT3BlcmF0aW9uOiBPcGVyYXRpb25DYWxsYmFja1NpbXBsZUZ1bmN0aW9uID0gT3BlcmF0aW9uV2l0aEFsd2F5c1N1Y2Nlc3NDYWxsYmFjaztcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGFmdGVyQ3JlYXRlT3BlcmF0aW9uOiBPcGVyYXRpb25DYWxsYmFja1NpbXBsZUZ1bmN0aW9uID0gT3BlcmF0aW9uV2l0aEFsd2F5c1N1Y2Nlc3NDYWxsYmFjaztcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGJlZm9yZUVkaXRPcGVyYXRpb246IE9wZXJhdGlvbkNhbGxiYWNrU2ltcGxlRnVuY3Rpb24gPSBPcGVyYXRpb25XaXRoQWx3YXlzU3VjY2Vzc0NhbGxiYWNrO1xuXG4gICAgQElucHV0KClcbiAgICBASW5wdXRCb29sZWFuKClcbiAgICBwdWJsaWMgZG9udEFza0JlZm9yZURlbGV0ZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgQElucHV0KClcbiAgICBASW5wdXRCb29sZWFuKClcbiAgICBwdWJsaWMgbm9Pd25EZWxldGVPcGVyYXRpb246IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIHByaXZhdGUgX2ZpbGVUeXBlOiBGaWxlVHlwZTtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNldCBtYXhVcGxvYWRTaXplUGFyYW0odmFsdWU6IEludGVybmFsUGFyYW0pIHtcbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLl9zZXRJbnRlcm5hbFBhcmFtT2JqKHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIEBJbnB1dCgpXG4gICAgQElucHV0Qm9vbGVhbigpXG4gICAgcHVibGljIHVzZVdpdGhvdXRTZXR0aW5nUHJvcHM6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGZpbGVzVXBsb2FkQ29uZmlnT2JqZWN0czogRmlsZXNVcGxvYWRDb25maWdPYmplY3RzO1xuXG4gICAgQElucHV0KClcbiAgICBASW5wdXRCb29sZWFuKClcbiAgICBwdWJsaWMgbWVkaWNhbFVzZXJHcm91cHM6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHRhZ0NhdGVnb3J5OiBUYWdDYXRlZ29yeTtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHRhZ1JlZmVyZW5jZVRhYmxlOiBUYWJsZU5hbWU7XG5cbiAgICBASW5wdXQoKVxuICAgIEBJbnB1dEJvb2xlYW4oKVxuICAgIHB1YmxpYyBkaXNwbGF5UmVhZFdyaXRlQWNjZXNzOiBib29sZWFuO1xuXG4gICAgLy8gVXNlIHdpdGggY3VzdG9tRmlsZURyb3BFdmVudFxuICAgIEBJbnB1dCgpIEBJbnB1dEJvb2xlYW4oKVxuICAgIHB1YmxpYyB1c2VDdXN0b21GaWxlRHJvcEV2ZW50OiBib29sZWFuID0gZmFsc2U7XG5cbiAgICAvLyBVc2UgaW4gY29uanVuY3Rpb24gd2l0aCB1c2VDdXN0b21GaWxlRHJvcEV2ZW50XG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIGN1c3RvbUZpbGVEcm9wRXZlbnQ6IEV2ZW50RW1pdHRlcjxGaWxlTGlzdD4gPSBuZXcgRXZlbnRFbWl0dGVyPEZpbGVMaXN0PigpO1xuXG4gICAgLy8gRW1pdHMgaWYgdXNlciB3YW50cyB0byBhZGQgbXVsdGlwbGUgZG9jdW1lbnRzIGF0IG9uY2VcbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgcmVhZG9ubHkgZG9jdW1lbnRzQWRkZWQ6IEV2ZW50RW1pdHRlcjxDb0RvY3VtZW50W10+ID0gbmV3IEV2ZW50RW1pdHRlcjxDb0RvY3VtZW50W10+KCk7XG5cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgcmVhZG9ubHkgZG9jdW1lbnREZWxldGVkOiBFdmVudEVtaXR0ZXI8Q29Eb2N1bWVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPENvRG9jdW1lbnQ+KCk7XG5cbiAgICAvLyBFbWl0cyBldmVyeSB0aW1lIHRoZSBvcmRlciBvZiBkb2N1bWVudHMgd2FzIGNoYW5nZWRcbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgcmVhZG9ubHkgc29ydGFibGVMaXN0Q2hhbmdlZDogRXZlbnRFbWl0dGVyPENvRG9jdW1lbnRbXT4gPSBuZXcgRXZlbnRFbWl0dGVyPENvRG9jdW1lbnRbXT4oKTtcblxuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBkb2N1bWVudENoYW5nZUV2ZW50OiBFdmVudEVtaXR0ZXI8Q29Eb2N1bWVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPENvRG9jdW1lbnQ+KCk7XG5cbiAgICAvLyBVc2UgdGhpcyBpZiBjb25zdW1lciByZXF1aXJlcyB0byBwZXJmb3JtIGV4dHJhIGFjdGlvbnMsIGxpa2UgbG9ja2luZyBhIHBhcmVudCBidXNpbmVzc09iamVjdCBpZiBpdCBjb250YWlucyB0aGUgY29sbGVjdGlvbiBvZiBkb2N1bWVudHMuIEVtaXQgd2l0aCB0cnVlIHdoZW4gcG9wdXAgb3BlbmVkLCBmYWxzZSBmb3IgY2xvc2VcbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgcG9wdXBPcGVuZWRTdGF0ZUNoYW5nZTogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gICAgQEhvc3RCaW5kaW5nKFwiY2xhc3MuaGlkZGVuXCIpXG4gICAgcHVibGljIGhpZGRlbjogYm9vbGVhbjtcblxuICAgIEBIb3N0TGlzdGVuZXIoXCJkcm9wXCIsIFtcIiRldmVudFwiXSlcbiAgICBwdWJsaWMgb25Ecm9wKGV2ZW50OiBEcmFnRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAgICAgaWYgKCF0aGlzLnVzZUN1c3RvbUZpbGVEcm9wRXZlbnQpIHtcbiAgICAgICAgICAgIHRoaXMuZmlsZXNQaWNrZWQoZXZlbnQuZGF0YVRyYW5zZmVyLmZpbGVzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY3VzdG9tRmlsZURyb3BFdmVudC5lbWl0KGV2ZW50LmRhdGFUcmFuc2Zlci5maWxlcyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9jbGVhckRyb3B6b25lKCk7XG4gICAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcihcImRyYWdlbmRcIiwgW1wiJGV2ZW50XCJdKVxuICAgIHB1YmxpYyBvbkRyYWdFbmQoZXZlbnQ6IERyYWdFdmVudCk6IHZvaWQge1xuICAgICAgICBldmVudC5kYXRhVHJhbnNmZXIuY2xlYXJEYXRhKCk7XG4gICAgICAgIHRoaXMuX2NsZWFyRHJvcHpvbmUoKTtcbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKFwiZHJhZ292ZXJcIiwgW1wiJGV2ZW50XCJdKVxuICAgIHB1YmxpYyBvbkRyYWdPdmVyKGV2ZW50OiBEcmFnRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKFwiZHJhZ2VudGVyXCIsIFtcIiRldmVudFwiXSlcbiAgICBwdWJsaWMgb25EcmFnRW50ZXIoZXZlbnQ6IERyYWdFdmVudCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9kcmFnRW50ZXJUYXJnZXQgPSBldmVudC50YXJnZXQ7XG4gICAgICAgIHRoaXMuX3Nob3dEcm9wem9uZSgpO1xuICAgIH1cblxuICAgIEBIb3N0TGlzdGVuZXIoXCJkcmFnbGVhdmVcIiwgW1wiJGV2ZW50XCJdKVxuICAgIHB1YmxpYyBvbkRyYWdMZWF2ZShldmVudDogRHJhZ0V2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmIChldmVudC50YXJnZXQgPT09IHRoaXMuX2RyYWdFbnRlclRhcmdldCkge1xuICAgICAgICAgICAgdGhpcy5fY2xlYXJEcm9wem9uZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGRvY3VtZW50VW5kZXJFZGl0OiBDb0RvY3VtZW50O1xuICAgIHB1YmxpYyBhY2NlcHRlZFVwbG9hZEZvcm1hdHM6IHN0cmluZztcblxuICAgIHByb3RlY3RlZCBfbWF4VXBsb2FkRmlsZVNpemU6IG51bWJlcjtcblxuICAgIHByaXZhdGUgX2RyYWdFbnRlclRhcmdldDogRXZlbnRUYXJnZXQ7XG4gICAgcHJpdmF0ZSBfZG9jdW1lbnRLZXk6IHN0cmluZyA9IFwiXCI7XG4gICAgcHJpdmF0ZSBfZHJvcFpvbmU6IENvbXBvbmVudFJlZjxBcHBGaWxlRHJvcHpvbmVDb21wb25lbnQ+O1xuICAgIHByaXZhdGUgX3BvcHVwOiBDb21wb25lbnRSZWY8RmlsZVVwbG9hZFBvcHVwQ29tcG9uZW50PjtcbiAgICBwcml2YXRlIF9kb2NDaGFuZ2VTdWI6IFN1YnNjcmlwdGlvbjtcbiAgICBwcml2YXRlIF9wb3B1cENsb3NlU3ViOiBTdWJzY3JpcHRpb247XG4gICAgcHJpdmF0ZSBfcmVhZG9ubHk6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIC8vIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9kdW1teVRydWVGdW5jdGlvbjogT3BlcmF0aW9uQ2FsbGJhY2tTaW1wbGVGdW5jdGlvbiA9IChvYmplY3Q6IGFueSkgPT4gUHJvbWlzZS5yZXNvbHZlKHRydWUpO1xuXG4gICAgY29uc3RydWN0b3IoXG5cbiAgICAgICAgLy9wcm90ZWN0ZWQgX3Byb21wdFNlcnZpY2U6IFByb21wdFNlcnZpY2UsXG4gICAgICAgIHByb3RlY3RlZCBfZGljdGlvbmFyeVNlcnZpY2U6IERpY3Rpb25hcnlTZXJ2aWNlLFxuICAgICAgICAvL3Byb3RlY3RlZCBfdXNlclNlcnZpY2U6IFVzZXJTZXJ2aWNlLFxuICAgICAgICBwcm90ZWN0ZWQgX2NvbnRhaW5lcjogVmlld0NvbnRhaW5lclJlZixcbiAgICAgICAgcHJvdGVjdGVkIF9mYWN0b3J5OiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG4gICAgICAgIC8vcHJvdGVjdGVkIF9nZW5lcmFsRGFsUmVwb3NpdG9yeTogR2VuZXJhbERhbFJlcG9zaXRvcnksXG4gICAgICAgIC8vcHJvdGVjdGVkIF9kYXRhU2VydmljZTogRGF0YVNlcnZpY2UsXG4gICAgICAgIC8vcHJvdGVjdGVkIF9iYXNlRGF0YURhbFJlcG9zaXRvcnk6IEJhc2VEYXRhRGFsUmVwb3NpdG9yeSxcbiAgICAgICAgLy9wcm90ZWN0ZWQgX2NvRG9jdW1lbnREYXRhTG9hZGVyOiBDb0RvY3VtZW50RGF0YUxvYWRlclNlcnZpY2VcbiAgICApIHtcblxuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9jbGVhckRyb3B6b25lKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfc2hvd0Ryb3B6b25lKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuX2Ryb3Bab25lKSB7XG4gICAgICAgICAgICBjb25zdCBmYWN0OiBDb21wb25lbnRGYWN0b3J5PEFwcEZpbGVEcm9wem9uZUNvbXBvbmVudD4gPSB0aGlzLl9mYWN0b3J5LnJlc29sdmVDb21wb25lbnRGYWN0b3J5KEFwcEZpbGVEcm9wem9uZUNvbXBvbmVudCk7XG4gICAgICAgICAgICB0aGlzLl9kcm9wWm9uZSA9IHRoaXMuX2NvbnRhaW5lci5jcmVhdGVDb21wb25lbnQoZmFjdCk7XG4gICAgICAgICAgICB0aGlzLl9kcm9wWm9uZS5pbnN0YW5jZS5jdXN0b21Ecm9wQWN0aW9uTWVzc2FnZSA9IHRoaXMuZHJvcE1lc3NhZ2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIF9jbGVhckRyb3B6b25lKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9jb250YWluZXIuY2xlYXIoKTtcbiAgICAgICAgaWYgKHRoaXMuX2Ryb3Bab25lKSB7XG4gICAgICAgICAgICB0aGlzLl9kcm9wWm9uZS5kZXN0cm95KCk7XG4gICAgICAgICAgICB0aGlzLl9kcm9wWm9uZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFJlbW92ZSBmaWxlIGZyb20gdXBsb2FkIGFycmF5LlxuICAgIHB1YmxpYyBhc3luYyBoYW5kbGVEZWxldGUoZmlsZTogQ29Eb2N1bWVudCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgICAgICBsZXQgc3VjY2VzczogYm9vbGVhbiA9IGF3YWl0IHRoaXMuYmVmb3JlRGVsZXRlT3BlcmF0aW9uKGZpbGUpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKHN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9kZWxldGUoZmlsZSk7XG4gICAgICAgICAgICAgICAgc3VjY2VzcyA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmFmdGVyRGVsZXRlT3BlcmF0aW9uKGZpbGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoc3VjY2Vzcyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBfZGVsZXRlKGZpbGU6IENvRG9jdW1lbnQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgbGV0IGRvRGVsZXRlOiBib29sZWFuID0gdHJ1ZTtcbiAgICAgICAgaWYgKCF0aGlzLmRvbnRBc2tCZWZvcmVEZWxldGUpIHtcbiAgICAgICAgICAvL1RPRE8gbWFrZSBkaWFsb2dTZXJ2aWNlXG4gICAgICAgICAgICAvL2RvRGVsZXRlID0gYXdhaXQgdGhpcy5fcHJvbXB0U2VydmljZS5zaG93WWVzTm8oXCJNRVNTQUdFX0RFTEVURV9SRUNPUkRfUVVFU1RJT05cIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRvRGVsZXRlKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMubm9Pd25EZWxldGVPcGVyYXRpb24pIHtcbiAgICAgICAgICAgICAgICBBcnJheVV0aWxzLlJlbW92ZUVsZW1lbnQoZmlsZSwgdGhpcy5kb2N1bWVudHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5kb2N1bWVudERlbGV0ZWQuZW1pdChmaWxlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBoYW5kbGVTb3J0aW5nQ2hhbmdlKGRvY3M6IENvRG9jdW1lbnRbXSk6IHZvaWQge1xuICAgICAgICB0aGlzLnNvcnRhYmxlTGlzdENoYW5nZWQuZW1pdChkb2NzKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgaGFuZGxlRmlsZUNoYW5nZShldmVudDogYW55KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGlmIChldmVudCAmJiBldmVudC50YXJnZXQgJiYgZXZlbnQudGFyZ2V0LmZpbGVzICYmIGV2ZW50LnRhcmdldC5maWxlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAvLyBjaGVjayBmaWxlIHNpemVzIGFuZCBleHRlbnNpb25cbiAgICAgICAgICAgIC8vVG9kbzogZml4IHRoaXNcbiAgICAgICAgICAgIC8vY29uc3QgYWxsb3dlZEV4dGVuc2lvbnMgPSBhd2FpdCB0aGlzLl9iYXNlRGF0YURhbFJlcG9zaXRvcnkuZ2V0QWxsb3dlZEV4dGVuc2lvbnMoKTtcbiAgICAgICAgICAgIGxldCBhbGxGaWxlc0FyZVNtYWxsRW5vdWdoOiBib29sZWFuID0gdHJ1ZTtcbiAgICAgICAgICAgIGxldCBhbGxGaWxlc0hhdmVBbGxvd2VkRXh0ZW5zaW9uczogYm9vbGVhbiA9IHRydWU7XG4gICAgICAgICAgICBjb25zdCBzaXplVG9Db21wYXJlOiBudW1iZXIgPSB0aGlzLl9tYXhVcGxvYWRGaWxlU2l6ZSA/IHRoaXMuX21heFVwbG9hZEZpbGVTaXplIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgY29uc3QgbGVuOiBudW1iZXIgPSBldmVudC50YXJnZXQuZmlsZXMubGVuZ3RoO1xuICAgICAgICAgICAgZm9yIChsZXQgaTogbnVtYmVyID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdXBsb2FkU2l6ZUFsbG93ZWQgPSBGaWxlVXRpbHMuQ2hlY2tNYXhVcGxvYWRTaXplKGV2ZW50LnRhcmdldC5maWxlc1tpXSwgc2l6ZVRvQ29tcGFyZSk7XG4gICAgICAgICAgICAgICAgaWYgKCF1cGxvYWRTaXplQWxsb3dlZCkge1xuICAgICAgICAgICAgICAgICAgICBhbGxGaWxlc0FyZVNtYWxsRW5vdWdoID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBleHRlbnNpb25BbGxvd2VkID0gdHJ1ZS8vRmlsZVV0aWxzLkNoZWNrRXh0ZW5zaW9uKGV2ZW50LnRhcmdldC5maWxlc1tpXSwgYWxsb3dlZEV4dGVuc2lvbnMpO1xuICAgICAgICAgICAgICAgIGlmICghZXh0ZW5zaW9uQWxsb3dlZCkge1xuICAgICAgICAgICAgICAgICAgICBhbGxGaWxlc0hhdmVBbGxvd2VkRXh0ZW5zaW9ucyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghYWxsRmlsZXNBcmVTbWFsbEVub3VnaCkge1xuICAgICAgICAgICAgICAvL1RPRE8gbWFrZSBkaWFsb2dTZXJ2aWNlXG4gICAgICAgICAgICAgICAgLy90aGlzLl9wcm9tcHRTZXJ2aWNlLnNob3dXYXJuaW5nKHRoaXMuX2RpY3Rpb25hcnlTZXJ2aWNlLmdldChcIkZJTEVfVE9PX0xBUkdFX1RPX1VQTE9BRFwiLCB0cnVlLCBcIlwiICsgW0ZpbGVVdGlscy5nZXRNYXhVcGxvYWRTaXplSW5NYihzaXplVG9Db21wYXJlKV0pKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIWFsbEZpbGVzSGF2ZUFsbG93ZWRFeHRlbnNpb25zKSB7XG4gICAgICAgICAgICAgICAgLy9jb25zdCBleHRlbnNpb25zTGlzdCA9IGFsbG93ZWRFeHRlbnNpb25zLm1hcChhbGxvd2VkRXh0ZW5zaW9uID0+IGFsbG93ZWRFeHRlbnNpb24uZXh0ZW5zaW9uKS5zb3J0KCkuam9pbihcIiwgXCIpO1xuICAgICAgICAgICAgICAgIC8vdGhpcy5fcHJvbXB0U2VydmljZS5zaG93V2FybmluZyh0aGlzLl9kaWN0aW9uYXJ5U2VydmljZS5nZXQoXCJGSUxFX0hBU19ESVNBTExPV0VEX0VYVEVOU0lPTlwiLCBmYWxzZSwgZXh0ZW5zaW9uc0xpc3QpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmlsZXNUb0FkZDogQ29Eb2N1bWVudFtdID0gYXdhaXQgdGhpcy5jb252ZXJ0RmlsZXNJbnRvQ29Eb2N1bWVudHMoZXZlbnQudGFyZ2V0LmZpbGVzKTtcblxuICAgICAgICAgICAgICAgIGlmIChmaWxlc1RvQWRkLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kb2N1bWVudHNBZGRlZC5lbWl0KGZpbGVzVG9BZGQpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnVzZVdpdGhvdXRTZXR0aW5nUHJvcHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZG9jdW1lbnRzQWRkZWQubmV4dChmaWxlc1RvQWRkKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZG9jdW1lbnRVbmRlckVkaXQgPSBmaWxlc1RvQWRkWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vcGVuUG9wdXAoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBoYW5kbGVFZGl0RG9jdW1lbnRDbGljayhkb2NUb0VkaXQ6IENvRG9jdW1lbnQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhpcy5kb2N1bWVudFVuZGVyRWRpdCA9IGRvY1RvRWRpdDtcbiAgICAgICAgY29uc3Qgc2hvd1BvcHVwOiBib29sZWFuID0gYXdhaXQgdGhpcy5iZWZvcmVFZGl0T3BlcmF0aW9uKGRvY1RvRWRpdCk7XG4gICAgICAgIGlmIChzaG93UG9wdXApIHtcbiAgICAgICAgICAgIHRoaXMub3BlblBvcHVwKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgb3BlblBvcHVwKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aGlzLl9jcmVhdGVBbmRGaWxsUG9wdXBJbnN0YW5jZSgpO1xuXG4gICAgICAgIHRoaXMuX2RvY0NoYW5nZVN1YiA9IHRoaXMuX3BvcHVwLmluc3RhbmNlLmRvY3VtZW50Q2hhbmdlRXZlbnQuc3Vic2NyaWJlKChkb2M6IENvRG9jdW1lbnQpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZG9jdW1lbnRDaGFuZ2VFdmVudC5lbWl0KGRvYyk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBvcGVuUG9wdXBUb0FkZERvY3VtZW50QnlVcmwoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2NyZWF0ZURvY3VtZW50VG9BZGRCeVVybCgpO1xuICAgICAgICB0aGlzLl9jcmVhdGVBbmRGaWxsUG9wdXBJbnN0YW5jZSh0cnVlKTtcblxuICAgICAgICB0aGlzLl9kb2NDaGFuZ2VTdWIgPSB0aGlzLl9wb3B1cC5pbnN0YW5jZS5kb2N1bWVudENoYW5nZUV2ZW50LnN1YnNjcmliZSgoZG9jOiBDb0RvY3VtZW50KSA9PiB7XG4gICAgICAgICAgICBkb2MuZmlsZU5hbWUgPSBkb2MuZmlsZVBhdGg7XG4gICAgICAgICAgICB0aGlzLmRvY3VtZW50Q2hhbmdlRXZlbnQuZW1pdChkb2MpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9jcmVhdGVEb2N1bWVudFRvQWRkQnlVcmwoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZG9jdW1lbnRVbmRlckVkaXQgPSBuZXcgQ29Eb2N1bWVudCgpO1xuICAgICAgICB0aGlzLmRvY3VtZW50VW5kZXJFZGl0LnRhYmxlID0gdGhpcy5kb2N1bWVudFRhYmxlO1xuICAgICAgICB0aGlzLmRvY3VtZW50VW5kZXJFZGl0LmtleSA9IHRoaXMuZG9jdW1lbnRLZXk7XG4gICAgICAgIHRoaXMuZG9jdW1lbnRVbmRlckVkaXQuZmlsZVR5cGUgPSB0aGlzLmZpbGVUeXBlO1xuICAgICAgICB0aGlzLmRvY3VtZW50VW5kZXJFZGl0LmRvY3VtZW50VHlwZSA9IENvRG9jdW1lbnRUeXBlLlNhdmVBc0xpbmtPblJhbmRvbUxvY2F0aW9uO1xuICAgICAgICB0aGlzLmRvY3VtZW50VW5kZXJFZGl0LnBhdGhJc1VybCA9IHRydWU7XG4gICAgICAgIC8vVE9ETyBGaXggdXNlciBJbnB1dFxuICAgICAgICAvL3RoaXMuZG9jdW1lbnRVbmRlckVkaXQuY3JlYXRpb25Vc2VyID0gdGhpcy5fdXNlclNlcnZpY2UudXNlck5hbWUudG9VcHBlckNhc2UoKTtcbiAgICAgICAgLy90aGlzLmRvY3VtZW50VW5kZXJFZGl0Lm1vZGlmaWVkVXNlciA9IHRoaXMuX3VzZXJTZXJ2aWNlLnVzZXJOYW1lLnRvVXBwZXJDYXNlKCk7XG4gICAgICAgIHRoaXMuZG9jdW1lbnRVbmRlckVkaXQuY3JlYXRpb25EYXRlID0gbmV3IERhdGUoKTtcbiAgICAgICAgdGhpcy5kb2N1bWVudFVuZGVyRWRpdC5tb2RpZmllZERhdGUgPSBuZXcgRGF0ZSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2NyZWF0ZUFuZEZpbGxQb3B1cEluc3RhbmNlKGFkZERvY3VtZW50QnlVcmw6IGJvb2xlYW4gPSBmYWxzZSk6IHZvaWQge1xuICAgICAgICB0aGlzLnBvcHVwT3BlbmVkU3RhdGVDaGFuZ2UuZW1pdCh0cnVlKTtcblxuICAgICAgICBjb25zdCBmYWN0b3J5OiBDb21wb25lbnRGYWN0b3J5PEZpbGVVcGxvYWRQb3B1cENvbXBvbmVudD4gPSB0aGlzLl9mYWN0b3J5LnJlc29sdmVDb21wb25lbnRGYWN0b3J5KEZpbGVVcGxvYWRQb3B1cENvbXBvbmVudCk7XG5cbiAgICAgICAgdGhpcy5fcG9wdXAgPSB0aGlzLl9jb250YWluZXIuY3JlYXRlQ29tcG9uZW50KGZhY3RvcnkpO1xuXG4gICAgICAgIHRoaXMuX3BvcHVwLmluc3RhbmNlLnJlYWRvbmx5ID0gdGhpcy5fcmVhZG9ubHk7XG4gICAgICAgIHRoaXMuX3BvcHVwLmluc3RhbmNlLmFkZERvY3VtZW50QnlVcmwgPSBhZGREb2N1bWVudEJ5VXJsO1xuICAgICAgICB0aGlzLl9wb3B1cC5pbnN0YW5jZS5oYXNQdWJsaWNBY2Nlc3NWaXNpYmxlID0gdGhpcy5kb2N1bWVudFRhYmxlID09PSBUYWJsZU5hbWUuR29vZHM7XG4gICAgICAgIHRoaXMuX3BvcHVwLmluc3RhbmNlLnNob3dEb2N1bWVudFJlcG9ydFBpY2tlciA9ICh0aGlzLmRvY3VtZW50VGFibGUgPT09IFRhYmxlTmFtZS5UcmFuc2FjdGlvbnMgfHwgdGhpcy5kb2N1bWVudFRhYmxlID09PSBUYWJsZU5hbWUuVHJhbnNhY3Rpb25MaW5lcyk7XG4gICAgICAgIHRoaXMuX3BvcHVwLmluc3RhbmNlLmRvY3VtZW50VW5kZXJFZGl0ID0gdGhpcy5kb2N1bWVudFVuZGVyRWRpdDtcbiAgICAgICAgdGhpcy5fcG9wdXAuaW5zdGFuY2UuZmlsZXNVcGxvYWRDb25maWdPYmplY3RzID0gdGhpcy5maWxlc1VwbG9hZENvbmZpZ09iamVjdHM7XG4gICAgICAgIHRoaXMuX3BvcHVwLmluc3RhbmNlLm1lZGljYWxVc2VyR3JvdXBzID0gdGhpcy5tZWRpY2FsVXNlckdyb3VwcztcbiAgICAgICAgdGhpcy5fcG9wdXAuaW5zdGFuY2UudGFnQ2F0ZWdvcnkgPSB0aGlzLnRhZ0NhdGVnb3J5O1xuICAgICAgICB0aGlzLl9wb3B1cC5pbnN0YW5jZS5kaXNwbGF5UmVhZFdyaXRlQWNjZXNzID0gdGhpcy5kaXNwbGF5UmVhZFdyaXRlQWNjZXNzO1xuICAgICAgICB0aGlzLl9wb3B1cC5pbnN0YW5jZS50YWdSZWZlcmVuY2VUYWJsZSA9IHRoaXMudGFnUmVmZXJlbmNlVGFibGU7XG4gICAgICAgIHRoaXMuX3BvcHVwLmluc3RhbmNlLnB1YmxpY2F0aW9uSWRzID0gUmVmQ29kZVV0aWxzLkdldE11bHRpUmVmQ29kZUNob2ljZXModGhpcy5kb2N1bWVudFVuZGVyRWRpdC5wdWJsaWNhdGlvbik7XG4gICAgICAgIHRoaXMuX3BvcHVwLmluc3RhbmNlLnN0b3JlR3JvdXBJZHMgPSB0aGlzLmRvY3VtZW50VW5kZXJFZGl0LnJldGFpbEZvcm11bGFzO1xuICAgICAgICB0aGlzLl9wb3B1cC5pbnN0YW5jZS5maWxlVHlwZSA9IHRoaXMuZmlsZVR5cGU7XG5cbiAgICAgICAgdGhpcy5fcHJlcGFyZUZpbGVSaWdodHMoKTtcblxuICAgICAgICB0aGlzLl9wb3B1cENsb3NlU3ViID0gdGhpcy5fcG9wdXAuaW5zdGFuY2UucG9wdXBDbG9zZUV2ZW50LnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl91bmxvY2tEb2N1bWVudCgpO1xuICAgICAgICAgICAgdGhpcy5wb3B1cE9wZW5lZFN0YXRlQ2hhbmdlLmVtaXQoZmFsc2UpO1xuICAgICAgICAgICAgdGhpcy5fcG9wdXBDbG9zZVN1Yi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgdGhpcy5fZG9jQ2hhbmdlU3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB0aGlzLl9wb3B1cC5kZXN0cm95KCk7XG4gICAgICAgICAgICB0aGlzLl9wb3B1cCA9IHVuZGVmaW5lZDtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGFzeW5jIGNvbnZlcnRGaWxlc0ludG9Db0RvY3VtZW50cyhmaWxlczogRmlsZUxpc3QpOiBQcm9taXNlPENvRG9jdW1lbnRbXT4ge1xuICAgICAgICBjb25zdCBhbW91bnRPZkZpbGVzOiBudW1iZXIgPSBmaWxlcy5sZW5ndGg7XG4gICAgICAgIGNvbnN0IGZpbGVzVG9BZGQ6IENvRG9jdW1lbnRbXSA9IFtdO1xuXG4gICAgICAgIGZvciAobGV0IGk6IG51bWJlciA9IDA7IGkgPCBhbW91bnRPZkZpbGVzOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGZpbGVBc0RvY3VtZW50OiBDb0RvY3VtZW50ID0gYXdhaXQgdGhpcy5fZ2V0RmlsZUFzRG9jdW1lbnQoZmlsZXNbaV0pO1xuICAgICAgICAgICAgZmlsZUFzRG9jdW1lbnQuaW5kZXggPSBDb0RvY3VtZW50U2hhcmVkRmllbGRMb2dpYy5HZW5lcmF0ZUF2YWlsYWJsZUluZGV4TnIodGhpcy5kb2N1bWVudHMgfHwgW10pICsgaTtcbiAgICAgICAgICAgIGZpbGVzVG9BZGQucHVzaChmaWxlQXNEb2N1bWVudCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZpbGVzVG9BZGQ7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGZpbGVzUGlja2VkKGZpbGVzOiBGaWxlTGlzdCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBpZiAoZmlsZXMgJiYgZmlsZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICBsZXQgYWxsRmlsZXNBcmVWYWxpZDogYm9vbGVhbiA9IHRydWU7XG4gICAgICAgICAgICBjb25zdCBhbW91bnRPZkZpbGVzOiBudW1iZXIgPSBmaWxlcy5sZW5ndGg7XG4gICAgICAgICAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgYW1vdW50T2ZGaWxlczsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFGaWxlVXRpbHMuQ2hlY2tNYXhVcGxvYWRTaXplKGZpbGVzW2ldLCB0aGlzLl9tYXhVcGxvYWRGaWxlU2l6ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgYWxsRmlsZXNBcmVWYWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghYWxsRmlsZXNBcmVWYWxpZCkge1xuICAgICAgICAgICAgICAvL1RPRE8gbWFrZSBkaWFsb2dTZXJ2aWNlXG4gICAgICAgICAgICAgICAgLy90aGlzLl9wcm9tcHRTZXJ2aWNlLnNob3dXYXJuaW5nKHRoaXMuX2RpY3Rpb25hcnlTZXJ2aWNlLmdldChcIkZJTEVfVE9PX0xBUkdFX1RPX1VQTE9BRFwiLCB0cnVlLCBcIlwiICsgRmlsZVV0aWxzLmdldE1heFVwbG9hZFNpemVJbk1iKHRoaXMuX21heFVwbG9hZEZpbGVTaXplKS50b1N0cmluZygpKSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpbGVzVG9BZGQ6IENvRG9jdW1lbnRbXSA9IGF3YWl0IHRoaXMuY29udmVydEZpbGVzSW50b0NvRG9jdW1lbnRzKGZpbGVzKTtcblxuICAgICAgICAgICAgICAgIGlmIChmaWxlc1RvQWRkLmxlbmd0aCA+IDEgfHwgdGhpcy51c2VXaXRob3V0U2V0dGluZ1Byb3BzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZG9jdW1lbnRzQWRkZWQuZW1pdChmaWxlc1RvQWRkKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRvY3VtZW50VW5kZXJFZGl0ID0gZmlsZXNUb0FkZFswXTsgLy8gU2V0dGluZyBkb2NVbmRlckVkaXQgb3BlbnMgdGhlIHBvcHVwIHdpbmRvd1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9wZW5Qb3B1cCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBoYW5kbGVBY2NlcHRlZEZpbGVUeXBlc0xvYWRlZCh2YWx1ZTogRmlsZVR5cGUpOiB2b2lkIHtcbiAgICAgICAgLy9UT0RPIGZpeCBsb2FkaW5nXG4gICAgICAgIC8vdGhpcy5hY2NlcHRlZFVwbG9hZEZvcm1hdHMgPSB0aGlzLl9jb0RvY3VtZW50RGF0YUxvYWRlci5nZXRBbGxvd2VkRXh0ZW5zaW9uc0ZvclR5cGUodmFsdWUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgX2dldEZpbGVBc0RvY3VtZW50KGZpbGU6IEZpbGUpOiBQcm9taXNlPENvRG9jdW1lbnQ+IHtcbiAgICAgICAgY29uc3QgZmlsZUFzQ29Eb2N1bWVudDogQ29Eb2N1bWVudCA9IGF3YWl0IEZpbGVVdGlscy5SZWFkRmlsZUFzTmV3Q29Eb2N1bWVudChmaWxlLCB0aGlzLnJlc2l6ZUltYWdlcyk7XG4gICAgICAgIC8vIHNldCBzb21lIGV4dHJhIGtub3duIGZpZWxkcyBmb3IgdGhlIGNvZG9jdW1lbnQ6XG4gICAgICAgIGZpbGVBc0NvRG9jdW1lbnQudGFibGUgPSB0aGlzLmRvY3VtZW50VGFibGU7XG4gICAgICAgIGZpbGVBc0NvRG9jdW1lbnQua2V5ID0gdGhpcy5kb2N1bWVudEtleTtcbiAgICAgICAgLy9UT0RPIGZpeCBhZGQgdXNlcnNcbiAgICAgICAgLy9maWxlQXNDb0RvY3VtZW50LmNyZWF0aW9uVXNlciA9IHRoaXMuX3VzZXJTZXJ2aWNlLnVzZXJOYW1lLnRvVXBwZXJDYXNlKCk7XG4gICAgICAgIC8vZmlsZUFzQ29Eb2N1bWVudC5tb2RpZmllZFVzZXIgPSB0aGlzLl91c2VyU2VydmljZS51c2VyTmFtZS50b1VwcGVyQ2FzZSgpO1xuICAgICAgICBmaWxlQXNDb0RvY3VtZW50LmNyZWF0aW9uRGF0ZSA9IG5ldyBEYXRlKCk7XG4gICAgICAgIGZpbGVBc0NvRG9jdW1lbnQubW9kaWZpZWREYXRlID0gbmV3IERhdGUoKTtcbiAgICAgICAgZmlsZUFzQ29Eb2N1bWVudC5maWxlVHlwZSA9IHRoaXMuZmlsZVR5cGUgPyB0aGlzLmZpbGVUeXBlIDogRmlsZVV0aWxzLklzSW1hZ2VGaWxlKGZpbGUpID8gRmlsZVR5cGUuSW1hZ2UgOiBGaWxlVHlwZS5Eb2N1bWVudDtcblxuICAgICAgICBpZiAoZmlsZUFzQ29Eb2N1bWVudCkge1xuICAgICAgICAgICAgcmV0dXJuIGZpbGVBc0NvRG9jdW1lbnQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIF9zZXRJbnRlcm5hbFBhcmFtT2JqKHZhbHVlOiBJbnRlcm5hbFBhcmFtKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIC8vVE9ETyBmaXggcGFyYW1zXG4gICAgICAgIC8vY29uc3QgcGFyYW06IEludGVybmFsUGFyYW1ldGVyT2JqZWN0ID0gYXdhaXQgdGhpcy5fZ2VuZXJhbERhbFJlcG9zaXRvcnkuZ2V0SW50ZXJuYWxQYXJhbU9iamVjdCh2YWx1ZSk7XG4gICAgICAgIC8vdGhpcy5fbWF4VXBsb2FkRmlsZVNpemUgPSBpc05hTihwYXJzZUludChwYXJhbS52YWx1ZSwgMCkpID8gdW5kZWZpbmVkIDogcGFyc2VJbnQocGFyYW0udmFsdWUsIDApO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgX2xvY2tEb2N1bWVudCgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAgICAgaWYgKCF0aGlzLmRvY3VtZW50VW5kZXJFZGl0LmRvY3VtZW50SWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlOyAvLyBOZXcgZG9jdW1lbnQgZG9lcyBub3QgaGF2ZSBhbiBJRCBhbmQgdGhlcmVmb3JlIGRvZXMgbm90IGhhdmUgdG8gYmUgbG9ja2VkXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBsb2NrT2s6IGJvb2xlYW4gPSBhd2FpdCB0aGlzLmxvY2tPcGVyYXRpb24oQ29Eb2N1bWVudCk7XG4gICAgICAgIHJldHVybiBsb2NrT2s7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBfdW5sb2NrRG9jdW1lbnQoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgICBpZiAoIXRoaXMuZG9jdW1lbnRVbmRlckVkaXQuZG9jdW1lbnRJZCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gTmV3IGRvY3VtZW50IGRvZXMgbm90IGhhdmUgYW4gSUQgYW5kIHRoZXJlZm9yZSBkb2VzIG5vdCBoYXZlIHRvIGJlIGxvY2tlZFxuICAgICAgfVxuXG4gICAgICBjb25zdCB1bmxvY2tPazogYm9vbGVhbiA9IGF3YWl0IHRoaXMudW5sb2NrT3BlcmF0aW9uKENvRG9jdW1lbnQpO1xuICAgICAgcmV0dXJuIHVubG9ja09rO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3ByZXBhcmVGaWxlUmlnaHRzKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBsZW46IG51bWJlciA9IHRoaXMuZG9jdW1lbnRVbmRlckVkaXQucmlnaHRzLmxlbmd0aDtcbiAgICAgICAgZm9yIChsZXQgaTogbnVtYmVyID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCByaWdodDogQ29Eb2N1bWVudFJpZ2h0ID0gdGhpcy5kb2N1bWVudFVuZGVyRWRpdC5yaWdodHNbaV07XG4gICAgICAgICAgICBpZiAocmlnaHQucmlnaHRMZXZlbCA9PT0gT2JqZWN0UmlnaHRUeXBlLlJlYWRXcml0ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3BvcHVwLmluc3RhbmNlLnVzZXJHcm91cHNGb3JXcml0ZS5wdXNoKHJpZ2h0LnVzZXJHcm91cElkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyaWdodC5yaWdodExldmVsID09PSBPYmplY3RSaWdodFR5cGUuUmVhZE9ubHkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9wb3B1cC5pbnN0YW5jZS51c2VyR3JvdXBzRm9yUmVhZC5wdXNoKHJpZ2h0LnVzZXJHcm91cElkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==
|
|
1
|
+
import { __awaiter, __decorate } from "tslib";
|
|
2
|
+
import { ComponentFactoryResolver, Directive, EventEmitter, HostBinding, HostListener, Input, Output, ViewContainerRef } from "@angular/core";
|
|
3
|
+
import { TableName } from "../../../enum/table-name.enum";
|
|
4
|
+
import { DictionaryService } from "../../../service/dictionary.service";
|
|
5
|
+
import { FileType } from "@colijnit/mainapi/build/enum/file-type.enum";
|
|
6
|
+
import { OperationWithAlwaysSuccessCallback } from "../../../interface/operation-callback-simple-function";
|
|
7
|
+
import { ArrayUtils } from "../../../utils/array-utils";
|
|
8
|
+
import { RefCodeUtils } from "../../../utils/ref-code-utils";
|
|
9
|
+
import { CoDocumentSharedFieldLogic } from "../../../utils/co-document-shared-field-logic";
|
|
10
|
+
import { ObjectRightType } from "@colijnit/sharedapi/build/enum/object-right-type.enum";
|
|
11
|
+
import { InputBoolean } from "../../../decorator/input-boolean.decorator";
|
|
12
|
+
import { AppFileDropzoneComponent } from "../../app-file-dropzone/app-file-dropzone.component";
|
|
13
|
+
import { FileUtils } from "@colijnit/mainapi/build/utils/file-utils";
|
|
14
|
+
import { CoDocument } from "@colijnit/mainapi/build/model/co-document";
|
|
15
|
+
import { CoDocumentType } from "@colijnit/mainapi/build/enum/co-document-type.enum";
|
|
16
|
+
import { FileUploadPopupComponent } from "../../file-upload-popup/file-upload-popup.component";
|
|
17
|
+
// A base component that lets the user make a list of files from its device. Doesn't actually upload, but outputs chosen files as filesChanged.
|
|
18
|
+
export class BaseFileUploadComponent {
|
|
19
|
+
// private static readonly _dummyTrueFunction: OperationCallbackSimpleFunction = (object: any) => Promise.resolve(true);
|
|
20
|
+
constructor(
|
|
21
|
+
//protected _promptService: PromptService,
|
|
22
|
+
_dictionaryService,
|
|
23
|
+
//protected _userService: UserService,
|
|
24
|
+
_container, _factory) {
|
|
25
|
+
this._dictionaryService = _dictionaryService;
|
|
26
|
+
this._container = _container;
|
|
27
|
+
this._factory = _factory;
|
|
28
|
+
this.documents = [];
|
|
29
|
+
// The ability to drop files on the page
|
|
30
|
+
this.fullPageDrop = false;
|
|
31
|
+
// If user gets the ability of adding files.
|
|
32
|
+
this.canAdd = true;
|
|
33
|
+
// Show add button
|
|
34
|
+
this.addWithButton = true;
|
|
35
|
+
// If user gets the ability of deleting files.
|
|
36
|
+
this.canDelete = true;
|
|
37
|
+
this.noDragDropOrdering = false;
|
|
38
|
+
this.askBeforeDelete = true;
|
|
39
|
+
this.resizeImages = false;
|
|
40
|
+
this.lockOperation = OperationWithAlwaysSuccessCallback;
|
|
41
|
+
this.unlockOperation = OperationWithAlwaysSuccessCallback;
|
|
42
|
+
this.beforeDeleteOperation = OperationWithAlwaysSuccessCallback;
|
|
43
|
+
this.afterDeleteOperation = OperationWithAlwaysSuccessCallback;
|
|
44
|
+
this.beforeCreateOperation = OperationWithAlwaysSuccessCallback;
|
|
45
|
+
this.afterCreateOperation = OperationWithAlwaysSuccessCallback;
|
|
46
|
+
this.beforeEditOperation = OperationWithAlwaysSuccessCallback;
|
|
47
|
+
this.dontAskBeforeDelete = false;
|
|
48
|
+
this.noOwnDeleteOperation = false;
|
|
49
|
+
this.useWithoutSettingProps = false;
|
|
50
|
+
this.medicalUserGroups = false;
|
|
51
|
+
// Use with customFileDropEvent
|
|
52
|
+
this.useCustomFileDropEvent = false;
|
|
53
|
+
// Use in conjunction with useCustomFileDropEvent
|
|
54
|
+
this.customFileDropEvent = new EventEmitter();
|
|
55
|
+
// Emits if user wants to add multiple documents at once
|
|
56
|
+
this.documentsAdded = new EventEmitter();
|
|
57
|
+
this.documentDeleted = new EventEmitter();
|
|
58
|
+
// Emits every time the order of documents was changed
|
|
59
|
+
this.sortableListChanged = new EventEmitter();
|
|
60
|
+
this.documentChangeEvent = new EventEmitter();
|
|
61
|
+
// Use this if consumer requires to perform extra actions, like locking a parent businessObject if it contains the collection of documents. Emit with true when popup opened, false for close
|
|
62
|
+
this.popupOpenedStateChange = new EventEmitter();
|
|
63
|
+
this._documentKey = "";
|
|
64
|
+
this._readonly = false;
|
|
65
|
+
}
|
|
66
|
+
// The fileType that the documents should be saved as, leave empty to automatically detect filetype. Also determines file picker filter
|
|
67
|
+
set fileType(value) {
|
|
68
|
+
if (value) {
|
|
69
|
+
this._fileType = value;
|
|
70
|
+
//TODO Documentdataloader fix
|
|
71
|
+
//this._coDocumentDataLoader.loadAllowedTypes().then(() => {this.handleAcceptedFileTypesLoaded(value)});
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
get fileType() {
|
|
75
|
+
return this._fileType;
|
|
76
|
+
}
|
|
77
|
+
set documentKey(value) {
|
|
78
|
+
this._documentKey = value + ""; // force string
|
|
79
|
+
}
|
|
80
|
+
get documentKey() {
|
|
81
|
+
return this._documentKey;
|
|
82
|
+
}
|
|
83
|
+
set readonly(value) {
|
|
84
|
+
this._readonly = value;
|
|
85
|
+
if (this._popup && this._popup.instance) {
|
|
86
|
+
this._popup.instance.readonly = value;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
get readonly() {
|
|
90
|
+
return this._readonly;
|
|
91
|
+
}
|
|
92
|
+
set maxUploadSizeParam(value) {
|
|
93
|
+
if (value) {
|
|
94
|
+
this._setInternalParamObj(value);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
onDrop(event) {
|
|
98
|
+
event.preventDefault();
|
|
99
|
+
event.stopPropagation();
|
|
100
|
+
if (!this.useCustomFileDropEvent) {
|
|
101
|
+
this.filesPicked(event.dataTransfer.files);
|
|
102
|
+
}
|
|
103
|
+
else {
|
|
104
|
+
this.customFileDropEvent.emit(event.dataTransfer.files);
|
|
105
|
+
}
|
|
106
|
+
this._clearDropzone();
|
|
107
|
+
}
|
|
108
|
+
onDragEnd(event) {
|
|
109
|
+
event.dataTransfer.clearData();
|
|
110
|
+
this._clearDropzone();
|
|
111
|
+
}
|
|
112
|
+
onDragOver(event) {
|
|
113
|
+
event.preventDefault();
|
|
114
|
+
}
|
|
115
|
+
onDragEnter(event) {
|
|
116
|
+
this._dragEnterTarget = event.target;
|
|
117
|
+
this._showDropzone();
|
|
118
|
+
}
|
|
119
|
+
onDragLeave(event) {
|
|
120
|
+
if (event.target === this._dragEnterTarget) {
|
|
121
|
+
this._clearDropzone();
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
ngOnDestroy() {
|
|
125
|
+
this._clearDropzone();
|
|
126
|
+
}
|
|
127
|
+
_showDropzone() {
|
|
128
|
+
if (!this._dropZone) {
|
|
129
|
+
const fact = this._factory.resolveComponentFactory(AppFileDropzoneComponent);
|
|
130
|
+
this._dropZone = this._container.createComponent(fact);
|
|
131
|
+
this._dropZone.instance.customDropActionMessage = this.dropMessage;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
_clearDropzone() {
|
|
135
|
+
this._container.clear();
|
|
136
|
+
if (this._dropZone) {
|
|
137
|
+
this._dropZone.destroy();
|
|
138
|
+
this._dropZone = undefined;
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
// Remove file from upload array.
|
|
142
|
+
handleDelete(file) {
|
|
143
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
144
|
+
let success = yield this.beforeDeleteOperation(file);
|
|
145
|
+
try {
|
|
146
|
+
if (success) {
|
|
147
|
+
yield this._delete(file);
|
|
148
|
+
success = true;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
finally {
|
|
152
|
+
yield this.afterDeleteOperation(file);
|
|
153
|
+
}
|
|
154
|
+
return Promise.resolve(success);
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
_delete(file) {
|
|
158
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
159
|
+
let doDelete = true;
|
|
160
|
+
if (!this.dontAskBeforeDelete) {
|
|
161
|
+
//TODO make dialogService
|
|
162
|
+
//doDelete = await this._promptService.showYesNo("MESSAGE_DELETE_RECORD_QUESTION");
|
|
163
|
+
}
|
|
164
|
+
if (doDelete) {
|
|
165
|
+
if (!this.noOwnDeleteOperation) {
|
|
166
|
+
ArrayUtils.RemoveElement(file, this.documents);
|
|
167
|
+
}
|
|
168
|
+
this.documentDeleted.emit(file);
|
|
169
|
+
}
|
|
170
|
+
});
|
|
171
|
+
}
|
|
172
|
+
handleSortingChange(docs) {
|
|
173
|
+
this.sortableListChanged.emit(docs);
|
|
174
|
+
}
|
|
175
|
+
handleFileChange(event) {
|
|
176
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
177
|
+
if (event && event.target && event.target.files && event.target.files.length > 0) {
|
|
178
|
+
// check file sizes and extension
|
|
179
|
+
//Todo: fix this
|
|
180
|
+
//const allowedExtensions = await this._baseDataDalRepository.getAllowedExtensions();
|
|
181
|
+
let allFilesAreSmallEnough = true;
|
|
182
|
+
let allFilesHaveAllowedExtensions = true;
|
|
183
|
+
const sizeToCompare = this._maxUploadFileSize ? this._maxUploadFileSize : undefined;
|
|
184
|
+
const len = event.target.files.length;
|
|
185
|
+
for (let i = 0; i < len; i++) {
|
|
186
|
+
const uploadSizeAllowed = FileUtils.CheckMaxUploadSize(event.target.files[i], sizeToCompare);
|
|
187
|
+
if (!uploadSizeAllowed) {
|
|
188
|
+
allFilesAreSmallEnough = false;
|
|
189
|
+
break;
|
|
190
|
+
}
|
|
191
|
+
const extensionAllowed = true; //FileUtils.CheckExtension(event.target.files[i], allowedExtensions);
|
|
192
|
+
if (!extensionAllowed) {
|
|
193
|
+
allFilesHaveAllowedExtensions = false;
|
|
194
|
+
break;
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
if (!allFilesAreSmallEnough) {
|
|
198
|
+
//TODO make dialogService
|
|
199
|
+
//this._promptService.showWarning(this._dictionaryService.get("FILE_TOO_LARGE_TO_UPLOAD", true, "" + [FileUtils.getMaxUploadSizeInMb(sizeToCompare)]));
|
|
200
|
+
}
|
|
201
|
+
else if (!allFilesHaveAllowedExtensions) {
|
|
202
|
+
//const extensionsList = allowedExtensions.map(allowedExtension => allowedExtension.extension).sort().join(", ");
|
|
203
|
+
//this._promptService.showWarning(this._dictionaryService.get("FILE_HAS_DISALLOWED_EXTENSION", false, extensionsList));
|
|
204
|
+
}
|
|
205
|
+
else {
|
|
206
|
+
const filesToAdd = yield this.convertFilesIntoCoDocuments(event.target.files);
|
|
207
|
+
if (filesToAdd.length > 1) {
|
|
208
|
+
this.documentsAdded.emit(filesToAdd);
|
|
209
|
+
}
|
|
210
|
+
else {
|
|
211
|
+
if (this.useWithoutSettingProps) {
|
|
212
|
+
this.documentsAdded.next(filesToAdd);
|
|
213
|
+
}
|
|
214
|
+
else {
|
|
215
|
+
this.documentUnderEdit = filesToAdd[0];
|
|
216
|
+
this.openPopup();
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
});
|
|
222
|
+
}
|
|
223
|
+
handleEditDocumentClick(docToEdit) {
|
|
224
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
225
|
+
this.documentUnderEdit = docToEdit;
|
|
226
|
+
const showPopup = yield this.beforeEditOperation(docToEdit);
|
|
227
|
+
if (showPopup) {
|
|
228
|
+
this.openPopup();
|
|
229
|
+
}
|
|
230
|
+
});
|
|
231
|
+
}
|
|
232
|
+
openPopup() {
|
|
233
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
234
|
+
this._createAndFillPopupInstance();
|
|
235
|
+
this._docChangeSub = this._popup.instance.documentChangeEvent.subscribe((doc) => {
|
|
236
|
+
this.documentChangeEvent.emit(doc);
|
|
237
|
+
});
|
|
238
|
+
});
|
|
239
|
+
}
|
|
240
|
+
openPopupToAddDocumentByUrl() {
|
|
241
|
+
this._createDocumentToAddByUrl();
|
|
242
|
+
this._createAndFillPopupInstance(true);
|
|
243
|
+
this._docChangeSub = this._popup.instance.documentChangeEvent.subscribe((doc) => {
|
|
244
|
+
doc.fileName = doc.filePath;
|
|
245
|
+
this.documentChangeEvent.emit(doc);
|
|
246
|
+
});
|
|
247
|
+
}
|
|
248
|
+
_createDocumentToAddByUrl() {
|
|
249
|
+
this.documentUnderEdit = new CoDocument();
|
|
250
|
+
this.documentUnderEdit.table = this.documentTable;
|
|
251
|
+
this.documentUnderEdit.key = this.documentKey;
|
|
252
|
+
this.documentUnderEdit.fileType = this.fileType;
|
|
253
|
+
this.documentUnderEdit.documentType = CoDocumentType.SaveAsLinkOnRandomLocation;
|
|
254
|
+
this.documentUnderEdit.pathIsUrl = true;
|
|
255
|
+
//TODO Fix user Input
|
|
256
|
+
//this.documentUnderEdit.creationUser = this._userService.userName.toUpperCase();
|
|
257
|
+
//this.documentUnderEdit.modifiedUser = this._userService.userName.toUpperCase();
|
|
258
|
+
this.documentUnderEdit.creationDate = new Date();
|
|
259
|
+
this.documentUnderEdit.modifiedDate = new Date();
|
|
260
|
+
}
|
|
261
|
+
_createAndFillPopupInstance(addDocumentByUrl = false) {
|
|
262
|
+
this.popupOpenedStateChange.emit(true);
|
|
263
|
+
const factory = this._factory.resolveComponentFactory(FileUploadPopupComponent);
|
|
264
|
+
this._popup = this._container.createComponent(factory);
|
|
265
|
+
this._popup.instance.readonly = this._readonly;
|
|
266
|
+
this._popup.instance.addDocumentByUrl = addDocumentByUrl;
|
|
267
|
+
this._popup.instance.hasPublicAccessVisible = this.documentTable === TableName.Goods;
|
|
268
|
+
this._popup.instance.showDocumentReportPicker = (this.documentTable === TableName.Transactions || this.documentTable === TableName.TransactionLines);
|
|
269
|
+
this._popup.instance.documentUnderEdit = this.documentUnderEdit;
|
|
270
|
+
this._popup.instance.filesUploadConfigObjects = this.filesUploadConfigObjects;
|
|
271
|
+
this._popup.instance.medicalUserGroups = this.medicalUserGroups;
|
|
272
|
+
this._popup.instance.tagCategory = this.tagCategory;
|
|
273
|
+
this._popup.instance.displayReadWriteAccess = this.displayReadWriteAccess;
|
|
274
|
+
this._popup.instance.tagReferenceTable = this.tagReferenceTable;
|
|
275
|
+
this._popup.instance.publicationIds = RefCodeUtils.GetMultiRefCodeChoices(this.documentUnderEdit.publication);
|
|
276
|
+
this._popup.instance.storeGroupIds = this.documentUnderEdit.retailFormulas;
|
|
277
|
+
this._popup.instance.fileType = this.fileType;
|
|
278
|
+
this._prepareFileRights();
|
|
279
|
+
this._popupCloseSub = this._popup.instance.popupCloseEvent.subscribe(() => {
|
|
280
|
+
this._unlockDocument();
|
|
281
|
+
this.popupOpenedStateChange.emit(false);
|
|
282
|
+
this._popupCloseSub.unsubscribe();
|
|
283
|
+
this._docChangeSub.unsubscribe();
|
|
284
|
+
this._popup.destroy();
|
|
285
|
+
this._popup = undefined;
|
|
286
|
+
});
|
|
287
|
+
}
|
|
288
|
+
convertFilesIntoCoDocuments(files) {
|
|
289
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
290
|
+
const amountOfFiles = files.length;
|
|
291
|
+
const filesToAdd = [];
|
|
292
|
+
for (let i = 0; i < amountOfFiles; i++) {
|
|
293
|
+
const fileAsDocument = yield this._getFileAsDocument(files[i]);
|
|
294
|
+
fileAsDocument.index = CoDocumentSharedFieldLogic.GenerateAvailableIndexNr(this.documents || []) + i;
|
|
295
|
+
filesToAdd.push(fileAsDocument);
|
|
296
|
+
}
|
|
297
|
+
return filesToAdd;
|
|
298
|
+
});
|
|
299
|
+
}
|
|
300
|
+
filesPicked(files) {
|
|
301
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
302
|
+
if (files && files.length) {
|
|
303
|
+
let allFilesAreValid = true;
|
|
304
|
+
const amountOfFiles = files.length;
|
|
305
|
+
for (let i = 0; i < amountOfFiles; i++) {
|
|
306
|
+
if (!FileUtils.CheckMaxUploadSize(files[i], this._maxUploadFileSize)) {
|
|
307
|
+
allFilesAreValid = false;
|
|
308
|
+
break;
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
if (!allFilesAreValid) {
|
|
312
|
+
//TODO make dialogService
|
|
313
|
+
//this._promptService.showWarning(this._dictionaryService.get("FILE_TOO_LARGE_TO_UPLOAD", true, "" + FileUtils.getMaxUploadSizeInMb(this._maxUploadFileSize).toString()));
|
|
314
|
+
}
|
|
315
|
+
else {
|
|
316
|
+
const filesToAdd = yield this.convertFilesIntoCoDocuments(files);
|
|
317
|
+
if (filesToAdd.length > 1 || this.useWithoutSettingProps) {
|
|
318
|
+
this.documentsAdded.emit(filesToAdd);
|
|
319
|
+
}
|
|
320
|
+
else {
|
|
321
|
+
this.documentUnderEdit = filesToAdd[0]; // Setting docUnderEdit opens the popup window
|
|
322
|
+
this.openPopup();
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
});
|
|
327
|
+
}
|
|
328
|
+
handleAcceptedFileTypesLoaded(value) {
|
|
329
|
+
//TODO fix loading
|
|
330
|
+
//this.acceptedUploadFormats = this._coDocumentDataLoader.getAllowedExtensionsForType(value);
|
|
331
|
+
}
|
|
332
|
+
_getFileAsDocument(file) {
|
|
333
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
334
|
+
const fileAsCoDocument = yield FileUtils.ReadFileAsNewCoDocument(file, this.resizeImages);
|
|
335
|
+
// set some extra known fields for the codocument:
|
|
336
|
+
fileAsCoDocument.table = this.documentTable;
|
|
337
|
+
fileAsCoDocument.key = this.documentKey;
|
|
338
|
+
//TODO fix add users
|
|
339
|
+
//fileAsCoDocument.creationUser = this._userService.userName.toUpperCase();
|
|
340
|
+
//fileAsCoDocument.modifiedUser = this._userService.userName.toUpperCase();
|
|
341
|
+
fileAsCoDocument.creationDate = new Date();
|
|
342
|
+
fileAsCoDocument.modifiedDate = new Date();
|
|
343
|
+
fileAsCoDocument.fileType = this.fileType ? this.fileType : FileUtils.IsImageFile(file) ? FileType.Image : FileType.Document;
|
|
344
|
+
if (fileAsCoDocument) {
|
|
345
|
+
return fileAsCoDocument;
|
|
346
|
+
}
|
|
347
|
+
});
|
|
348
|
+
}
|
|
349
|
+
_setInternalParamObj(value) {
|
|
350
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
351
|
+
//TODO fix params
|
|
352
|
+
//const param: InternalParameterObject = await this._generalDalRepository.getInternalParamObject(value);
|
|
353
|
+
//this._maxUploadFileSize = isNaN(parseInt(param.value, 0)) ? undefined : parseInt(param.value, 0);
|
|
354
|
+
});
|
|
355
|
+
}
|
|
356
|
+
_lockDocument() {
|
|
357
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
358
|
+
if (!this.documentUnderEdit.documentId) {
|
|
359
|
+
return true; // New document does not have an ID and therefore does not have to be locked
|
|
360
|
+
}
|
|
361
|
+
const lockOk = yield this.lockOperation(CoDocument);
|
|
362
|
+
return lockOk;
|
|
363
|
+
});
|
|
364
|
+
}
|
|
365
|
+
_unlockDocument() {
|
|
366
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
367
|
+
if (!this.documentUnderEdit.documentId) {
|
|
368
|
+
return true; // New document does not have an ID and therefore does not have to be locked
|
|
369
|
+
}
|
|
370
|
+
const unlockOk = yield this.unlockOperation(CoDocument);
|
|
371
|
+
return unlockOk;
|
|
372
|
+
});
|
|
373
|
+
}
|
|
374
|
+
_prepareFileRights() {
|
|
375
|
+
const len = this.documentUnderEdit.rights.length;
|
|
376
|
+
for (let i = 0; i < len; i++) {
|
|
377
|
+
const right = this.documentUnderEdit.rights[i];
|
|
378
|
+
if (right.rightLevel === ObjectRightType.ReadWrite) {
|
|
379
|
+
this._popup.instance.userGroupsForWrite.push(right.userGroupId);
|
|
380
|
+
}
|
|
381
|
+
if (right.rightLevel === ObjectRightType.ReadOnly) {
|
|
382
|
+
this._popup.instance.userGroupsForRead.push(right.userGroupId);
|
|
383
|
+
}
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
BaseFileUploadComponent.decorators = [
|
|
388
|
+
{ type: Directive }
|
|
389
|
+
];
|
|
390
|
+
BaseFileUploadComponent.ctorParameters = () => [
|
|
391
|
+
{ type: DictionaryService },
|
|
392
|
+
{ type: ViewContainerRef },
|
|
393
|
+
{ type: ComponentFactoryResolver }
|
|
394
|
+
];
|
|
395
|
+
BaseFileUploadComponent.propDecorators = {
|
|
396
|
+
fileType: [{ type: Input }],
|
|
397
|
+
documents: [{ type: Input }],
|
|
398
|
+
documentTable: [{ type: Input }],
|
|
399
|
+
documentKey: [{ type: Input }],
|
|
400
|
+
fullPageDrop: [{ type: Input }],
|
|
401
|
+
canAdd: [{ type: Input }],
|
|
402
|
+
dropMessage: [{ type: Input }],
|
|
403
|
+
addWithButton: [{ type: Input }],
|
|
404
|
+
canDelete: [{ type: Input }],
|
|
405
|
+
noDragDropOrdering: [{ type: Input }],
|
|
406
|
+
readonly: [{ type: Input }],
|
|
407
|
+
askBeforeDelete: [{ type: Input }],
|
|
408
|
+
resizeImages: [{ type: Input }],
|
|
409
|
+
lockOperation: [{ type: Input }],
|
|
410
|
+
unlockOperation: [{ type: Input }],
|
|
411
|
+
beforeDeleteOperation: [{ type: Input }],
|
|
412
|
+
afterDeleteOperation: [{ type: Input }],
|
|
413
|
+
beforeCreateOperation: [{ type: Input }],
|
|
414
|
+
afterCreateOperation: [{ type: Input }],
|
|
415
|
+
beforeEditOperation: [{ type: Input }],
|
|
416
|
+
dontAskBeforeDelete: [{ type: Input }],
|
|
417
|
+
noOwnDeleteOperation: [{ type: Input }],
|
|
418
|
+
maxUploadSizeParam: [{ type: Input }],
|
|
419
|
+
useWithoutSettingProps: [{ type: Input }],
|
|
420
|
+
filesUploadConfigObjects: [{ type: Input }],
|
|
421
|
+
medicalUserGroups: [{ type: Input }],
|
|
422
|
+
tagCategory: [{ type: Input }],
|
|
423
|
+
tagReferenceTable: [{ type: Input }],
|
|
424
|
+
displayReadWriteAccess: [{ type: Input }],
|
|
425
|
+
useCustomFileDropEvent: [{ type: Input }],
|
|
426
|
+
customFileDropEvent: [{ type: Output }],
|
|
427
|
+
documentsAdded: [{ type: Output }],
|
|
428
|
+
documentDeleted: [{ type: Output }],
|
|
429
|
+
sortableListChanged: [{ type: Output }],
|
|
430
|
+
documentChangeEvent: [{ type: Output }],
|
|
431
|
+
popupOpenedStateChange: [{ type: Output }],
|
|
432
|
+
hidden: [{ type: HostBinding, args: ["class.hidden",] }],
|
|
433
|
+
onDrop: [{ type: HostListener, args: ["drop", ["$event"],] }],
|
|
434
|
+
onDragEnd: [{ type: HostListener, args: ["dragend", ["$event"],] }],
|
|
435
|
+
onDragOver: [{ type: HostListener, args: ["dragover", ["$event"],] }],
|
|
436
|
+
onDragEnter: [{ type: HostListener, args: ["dragenter", ["$event"],] }],
|
|
437
|
+
onDragLeave: [{ type: HostListener, args: ["dragleave", ["$event"],] }]
|
|
438
|
+
};
|
|
439
|
+
__decorate([
|
|
440
|
+
InputBoolean()
|
|
441
|
+
], BaseFileUploadComponent.prototype, "noDragDropOrdering", void 0);
|
|
442
|
+
__decorate([
|
|
443
|
+
InputBoolean()
|
|
444
|
+
], BaseFileUploadComponent.prototype, "readonly", null);
|
|
445
|
+
__decorate([
|
|
446
|
+
InputBoolean()
|
|
447
|
+
], BaseFileUploadComponent.prototype, "askBeforeDelete", void 0);
|
|
448
|
+
__decorate([
|
|
449
|
+
InputBoolean()
|
|
450
|
+
], BaseFileUploadComponent.prototype, "resizeImages", void 0);
|
|
451
|
+
__decorate([
|
|
452
|
+
InputBoolean()
|
|
453
|
+
], BaseFileUploadComponent.prototype, "dontAskBeforeDelete", void 0);
|
|
454
|
+
__decorate([
|
|
455
|
+
InputBoolean()
|
|
456
|
+
], BaseFileUploadComponent.prototype, "noOwnDeleteOperation", void 0);
|
|
457
|
+
__decorate([
|
|
458
|
+
InputBoolean()
|
|
459
|
+
], BaseFileUploadComponent.prototype, "useWithoutSettingProps", void 0);
|
|
460
|
+
__decorate([
|
|
461
|
+
InputBoolean()
|
|
462
|
+
], BaseFileUploadComponent.prototype, "medicalUserGroups", void 0);
|
|
463
|
+
__decorate([
|
|
464
|
+
InputBoolean()
|
|
465
|
+
], BaseFileUploadComponent.prototype, "displayReadWriteAccess", void 0);
|
|
466
|
+
__decorate([
|
|
467
|
+
InputBoolean()
|
|
468
|
+
], BaseFileUploadComponent.prototype, "useCustomFileDropEvent", void 0);
|
|
469
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1maWxlLXVwbG9hZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaGFyZWRjb21wb25lbnRzL3NyYy9saWIvY29tcG9uZW50cy9maWxlcy11cGxvYWQvY29tcG9uZW50cy9iYXNlLWZpbGUtdXBsb2FkLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUVILHdCQUF3QixFQUV4QixTQUFTLEVBQ1QsWUFBWSxFQUNaLFdBQVcsRUFDWCxZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sRUFDTixnQkFBZ0IsRUFDbkIsTUFBTSxlQUFlLENBQUM7QUFHdkIsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLCtCQUErQixDQUFDO0FBQ3hELE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLHFDQUFxQyxDQUFDO0FBQ3RFLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSw2Q0FBNkMsQ0FBQztBQUNyRSxPQUFPLEVBRUgsa0NBQWtDLEVBQ3JDLE1BQU0sdURBQXVELENBQUM7QUFJL0QsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLDRCQUE0QixDQUFDO0FBQ3RELE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSwrQkFBK0IsQ0FBQztBQUMzRCxPQUFPLEVBQUMsMEJBQTBCLEVBQUMsTUFBTSwrQ0FBK0MsQ0FBQztBQUV6RixPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sdURBQXVELENBQUM7QUFDdEYsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLDRDQUE0QyxDQUFDO0FBQ3hFLE9BQU8sRUFBQyx3QkFBd0IsRUFBQyxNQUFNLHFEQUFxRCxDQUFDO0FBQzdGLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSwwQ0FBMEMsQ0FBQztBQUNuRSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sMkNBQTJDLENBQUM7QUFDckUsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLG9E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REMsWUFBWSxFQUFFO2dFQUN3QjtBQUl2QztJQURDLFlBQVksRUFBRTs2REFDc0I7QUE0QnJDO0lBREMsWUFBWSxFQUFFO29FQUM2QjtBQUk1QztJQURDLFlBQVksRUFBRTtxRUFDOEI7QUFhN0M7SUFEQyxZQUFZLEVBQUU7dUVBQ2dDO0FBTy9DO0lBREMsWUFBWSxFQUFFO2tFQUMyQjtBQVUxQztJQURDLFlBQVksRUFBRTt1RUFDd0I7QUFJdkM7SUFEVSxZQUFZLEVBQUU7dUVBQ3VCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICAgIENvbXBvbmVudEZhY3RvcnksXHJcbiAgICBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXHJcbiAgICBDb21wb25lbnRSZWYsXHJcbiAgICBEaXJlY3RpdmUsXHJcbiAgICBFdmVudEVtaXR0ZXIsXHJcbiAgICBIb3N0QmluZGluZyxcclxuICAgIEhvc3RMaXN0ZW5lcixcclxuICAgIElucHV0LFxyXG4gICAgT25EZXN0cm95LFxyXG4gICAgT3V0cHV0LFxyXG4gICAgVmlld0NvbnRhaW5lclJlZlxyXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7U2NyZWVuQ29uZmlnQWRhcHRlckNvbXBvbmVudH0gZnJvbSBcIkBjb2xpam5pdC9jb3JlY29tcG9uZW50c192MTJcIjtcclxuaW1wb3J0IHtTdWJzY3JpcHRpb259IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7VGFibGVOYW1lfSBmcm9tIFwiLi4vLi4vLi4vZW51bS90YWJsZS1uYW1lLmVudW1cIjtcclxuaW1wb3J0IHtEaWN0aW9uYXJ5U2VydmljZX0gZnJvbSBcIi4uLy4uLy4uL3NlcnZpY2UvZGljdGlvbmFyeS5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7RmlsZVR5cGV9IGZyb20gXCJAY29saWpuaXQvbWFpbmFwaS9idWlsZC9lbnVtL2ZpbGUtdHlwZS5lbnVtXCI7XHJcbmltcG9ydCB7XHJcbiAgICBPcGVyYXRpb25DYWxsYmFja1NpbXBsZUZ1bmN0aW9uLFxyXG4gICAgT3BlcmF0aW9uV2l0aEFsd2F5c1N1Y2Nlc3NDYWxsYmFja1xyXG59IGZyb20gXCIuLi8uLi8uLi9pbnRlcmZhY2Uvb3BlcmF0aW9uLWNhbGxiYWNrLXNpbXBsZS1mdW5jdGlvblwiO1xyXG5pbXBvcnQge0ludGVybmFsUGFyYW19IGZyb20gXCIuLi8uLi8uLi9lbnVtL2ludGVybmFsLXBhcmFtLmVudW1cIjtcclxuaW1wb3J0IHtGaWxlc1VwbG9hZENvbmZpZ09iamVjdHN9IGZyb20gXCIuLi8uLi8uLi9lbnVtL2ZpbGVzLXVwbG9hZC1jb25maWctb2JqZWN0c1wiO1xyXG5pbXBvcnQge1RhZ0NhdGVnb3J5fSBmcm9tIFwiLi4vLi4vLi4vZW51bS90YWctY2F0ZWdvcnkuZW51bVwiO1xyXG5pbXBvcnQge0FycmF5VXRpbHN9IGZyb20gXCIuLi8uLi8uLi91dGlscy9hcnJheS11dGlsc1wiO1xyXG5pbXBvcnQge1JlZkNvZGVVdGlsc30gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL3JlZi1jb2RlLXV0aWxzXCI7XHJcbmltcG9ydCB7Q29Eb2N1bWVudFNoYXJlZEZpZWxkTG9naWN9IGZyb20gXCIuLi8uLi8uLi91dGlscy9jby1kb2N1bWVudC1zaGFyZWQtZmllbGQtbG9naWNcIjtcclxuaW1wb3J0IHtDb0RvY3VtZW50UmlnaHR9IGZyb20gXCIuLi8uLi8uLi9idXNpbmVzc29iamVjdC9jby1kb2N1bWVudC1yaWdodC5ib1wiO1xyXG5pbXBvcnQge09iamVjdFJpZ2h0VHlwZX0gZnJvbSBcIkBjb2xpam5pdC9zaGFyZWRhcGkvYnVpbGQvZW51bS9vYmplY3QtcmlnaHQtdHlwZS5lbnVtXCI7XHJcbmltcG9ydCB7SW5wdXRCb29sZWFufSBmcm9tIFwiLi4vLi4vLi4vZGVjb3JhdG9yL2lucHV0LWJvb2xlYW4uZGVjb3JhdG9yXCI7XHJcbmltcG9ydCB7QXBwRmlsZURyb3B6b25lQ29tcG9uZW50fSBmcm9tIFwiLi4vLi4vYXBwLWZpbGUtZHJvcHpvbmUvYXBwLWZpbGUtZHJvcHpvbmUuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7RmlsZVV0aWxzfSBmcm9tIFwiQGNvbGlqbml0L21haW5hcGkvYnVpbGQvdXRpbHMvZmlsZS11dGlsc1wiO1xyXG5pbXBvcnQge0NvRG9jdW1lbnR9IGZyb20gXCJAY29saWpuaXQvbWFpbmFwaS9idWlsZC9tb2RlbC9jby1kb2N1bWVudFwiO1xyXG5pbXBvcnQge0NvRG9jdW1lbnRUeXBlfSBmcm9tIFwiQGNvbGlqbml0L21haW5hcGkvYnVpbGQvZW51bS9jby1kb2N1bWVudC10eXBlLmVudW1cIjtcclxuaW1wb3J0IHtGaWxlVXBsb2FkUG9wdXBDb21wb25lbnR9IGZyb20gXCIuLi8uLi9maWxlLXVwbG9hZC1wb3B1cC9maWxlLXVwbG9hZC1wb3B1cC5jb21wb25lbnRcIjtcclxuXHJcblxyXG5cclxuLy8gQSBiYXNlIGNvbXBvbmVudCB0aGF0IGxldHMgdGhlIHVzZXIgbWFrZSBhIGxpc3Qgb2YgZmlsZXMgZnJvbSBpdHMgZGV2aWNlLiBEb2Vzbid0IGFjdHVhbGx5IHVwbG9hZCwgYnV0IG91dHB1dHMgY2hvc2VuIGZpbGVzIGFzIGZpbGVzQ2hhbmdlZC5cclxuQERpcmVjdGl2ZSgpXHJcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCYXNlRmlsZVVwbG9hZENvbXBvbmVudCBpbXBsZW1lbnRzIFNjcmVlbkNvbmZpZ0FkYXB0ZXJDb21wb25lbnQsIE9uRGVzdHJveSB7XHJcbiAgICBkZWNpbWFsczogbnVtYmVyO1xyXG4gICAgZm9yY2VSZWFkb25seTogYm9vbGVhbjtcclxuICAgIG1heExlbmd0aDogbnVtYmVyO1xyXG4gICAgb2JqZWN0Q29uZmlnTmFtZTogc3RyaW5nO1xyXG4gICAgcmVkRXJyb3JCYWNrZ3JvdW5kOiBib29sZWFuO1xyXG4gICAgcmVxdWlyZWQ6IGJvb2xlYW47XHJcblxyXG4gICAgLy8gVGhlIGZpbGVUeXBlIHRoYXQgdGhlIGRvY3VtZW50cyBzaG91bGQgYmUgc2F2ZWQgYXMsIGxlYXZlIGVtcHR5IHRvIGF1dG9tYXRpY2FsbHkgZGV0ZWN0IGZpbGV0eXBlLiBBbHNvIGRldGVybWluZXMgZmlsZSBwaWNrZXIgZmlsdGVyXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIHNldCBmaWxlVHlwZSh2YWx1ZTogRmlsZVR5cGUpIHtcclxuICAgICAgICBpZiAodmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5fZmlsZVR5cGUgPSB2YWx1ZTtcclxuICAgICAgICAgICAgLy9UT0RPIERvY3VtZW50ZGF0YWxvYWRlciBmaXhcclxuICAgICAgICAgICAgLy90aGlzLl9jb0RvY3VtZW50RGF0YUxvYWRlci5sb2FkQWxsb3dlZFR5cGVzKCkudGhlbigoKSA9PiB7dGhpcy5oYW5kbGVBY2NlcHRlZEZpbGVUeXBlc0xvYWRlZCh2YWx1ZSl9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldCBmaWxlVHlwZSgpOiBGaWxlVHlwZSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbGVUeXBlO1xyXG4gICAgfVxyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgZG9jdW1lbnRzOiBDb0RvY3VtZW50W10gPSBbXTtcclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGRvY3VtZW50VGFibGU6IFRhYmxlTmFtZTtcclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIHNldCBkb2N1bWVudEtleSh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5fZG9jdW1lbnRLZXkgPSB2YWx1ZSArIFwiXCI7IC8vIGZvcmNlIHN0cmluZ1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgZG9jdW1lbnRLZXkoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZG9jdW1lbnRLZXk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gVGhlIGFiaWxpdHkgdG8gZHJvcCBmaWxlcyBvbiB0aGUgcGFnZVxyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBmdWxsUGFnZURyb3A6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICAvLyBJZiB1c2VyIGdldHMgdGhlIGFiaWxpdHkgb2YgYWRkaW5nIGZpbGVzLlxyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBjYW5BZGQ6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgZHJvcE1lc3NhZ2U6IHN0cmluZztcclxuXHJcbiAgICAvLyBTaG93IGFkZCBidXR0b25cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgYWRkV2l0aEJ1dHRvbjogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gICAgLy8gSWYgdXNlciBnZXRzIHRoZSBhYmlsaXR5IG9mIGRlbGV0aW5nIGZpbGVzLlxyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBjYW5EZWxldGU6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBASW5wdXRCb29sZWFuKClcclxuICAgIHB1YmxpYyBub0RyYWdEcm9wT3JkZXJpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgQElucHV0Qm9vbGVhbigpXHJcbiAgICBwdWJsaWMgc2V0IHJlYWRvbmx5KHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICAgICAgdGhpcy5fcmVhZG9ubHkgPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX3BvcHVwICYmIHRoaXMuX3BvcHVwLmluc3RhbmNlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3BvcHVwLmluc3RhbmNlLnJlYWRvbmx5ID0gdmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgcmVhZG9ubHkoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JlYWRvbmx5O1xyXG4gICAgfVxyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBASW5wdXRCb29sZWFuKClcclxuICAgIHB1YmxpYyBhc2tCZWZvcmVEZWxldGU6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBASW5wdXRCb29sZWFuKClcclxuICAgIHB1YmxpYyByZXNpemVJbWFnZXM6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGxvY2tPcGVyYXRpb246IE9wZXJhdGlvbkNhbGxiYWNrU2ltcGxlRnVuY3Rpb24gPSBPcGVyYXRpb25XaXRoQWx3YXlzU3VjY2Vzc0NhbGxiYWNrO1xyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgdW5sb2NrT3BlcmF0aW9uOiBPcGVyYXRpb25DYWxsYmFja1NpbXBsZUZ1bmN0aW9uID0gT3BlcmF0aW9uV2l0aEFsd2F5c1N1Y2Nlc3NDYWxsYmFjaztcclxuXHJcblxyXG5cclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGJlZm9yZURlbGV0ZU9wZXJhdGlvbjogT3BlcmF0aW9uQ2FsbGJhY2tTaW1wbGVGdW5jdGlvbiA9IE9wZXJhdGlvbldpdGhBbHdheXNTdWNjZXNzQ2FsbGJhY2s7XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBhZnRlckRlbGV0ZU9wZXJhdGlvbjogT3BlcmF0aW9uQ2FsbGJhY2tTaW1wbGVGdW5jdGlvbiA9IE9wZXJhdGlvbldpdGhBbHdheXNTdWNjZXNzQ2FsbGJhY2s7XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBiZWZvcmVDcmVhdGVPcGVyYXRpb246IE9wZXJhdGlvbkNhbGxiYWNrU2ltcGxlRnVuY3Rpb24gPSBPcGVyYXRpb25XaXRoQWx3YXlzU3VjY2Vzc0NhbGxiYWNrO1xyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgYWZ0ZXJDcmVhdGVPcGVyYXRpb246IE9wZXJhdGlvbkNhbGxiYWNrU2ltcGxlRnVuY3Rpb24gPSBPcGVyYXRpb25XaXRoQWx3YXlzU3VjY2Vzc0NhbGxiYWNrO1xyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgYmVmb3JlRWRpdE9wZXJhdGlvbjogT3BlcmF0aW9uQ2FsbGJhY2tTaW1wbGVGdW5jdGlvbiA9IE9wZXJhdGlvbldpdGhBbHdheXNTdWNjZXNzQ2FsbGJhY2s7XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIEBJbnB1dEJvb2xlYW4oKVxyXG4gICAgcHVibGljIGRvbnRBc2tCZWZvcmVEZWxldGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgQElucHV0Qm9vbGVhbigpXHJcbiAgICBwdWJsaWMgbm9Pd25EZWxldGVPcGVyYXRpb246IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBwcml2YXRlIF9maWxlVHlwZTogRmlsZVR5cGU7XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBzZXQgbWF4VXBsb2FkU2l6ZVBhcmFtKHZhbHVlOiBJbnRlcm5hbFBhcmFtKSB7XHJcbiAgICAgICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3NldEludGVybmFsUGFyYW1PYmoodmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgQElucHV0Qm9vbGVhbigpXHJcbiAgICBwdWJsaWMgdXNlV2l0aG91dFNldHRpbmdQcm9wczogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgZmlsZXNVcGxvYWRDb25maWdPYmplY3RzOiBGaWxlc1VwbG9hZENvbmZpZ09iamVjdHM7XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIEBJbnB1dEJvb2xlYW4oKVxyXG4gICAgcHVibGljIG1lZGljYWxVc2VyR3JvdXBzOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyB0YWdDYXRlZ29yeTogVGFnQ2F0ZWdvcnk7XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyB0YWdSZWZlcmVuY2VUYWJsZTogVGFibGVOYW1lO1xyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBASW5wdXRCb29sZWFuKClcclxuICAgIHB1YmxpYyBkaXNwbGF5UmVhZFdyaXRlQWNjZXNzOiBib29sZWFuO1xyXG5cclxuICAgIC8vIFVzZSB3aXRoIGN1c3RvbUZpbGVEcm9wRXZlbnRcclxuICAgIEBJbnB1dCgpIEBJbnB1dEJvb2xlYW4oKVxyXG4gICAgcHVibGljIHVzZUN1c3RvbUZpbGVEcm9wRXZlbnQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICAvLyBVc2UgaW4gY29uanVuY3Rpb24gd2l0aCB1c2VDdXN0b21GaWxlRHJvcEV2ZW50XHJcbiAgICBAT3V0cHV0KClcclxuICAgIHB1YmxpYyBjdXN0b21GaWxlRHJvcEV2ZW50OiBFdmVudEVtaXR0ZXI8RmlsZUxpc3Q+ID0gbmV3IEV2ZW50RW1pdHRlcjxGaWxlTGlzdD4oKTtcclxuXHJcbiAgICAvLyBFbWl0cyBpZiB1c2VyIHdhbnRzIHRvIGFkZCBtdWx0aXBsZSBkb2N1bWVudHMgYXQgb25jZVxyXG4gICAgQE91dHB1dCgpXHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgZG9jdW1lbnRzQWRkZWQ6IEV2ZW50RW1pdHRlcjxDb0RvY3VtZW50W10+ID0gbmV3IEV2ZW50RW1pdHRlcjxDb0RvY3VtZW50W10+KCk7XHJcblxyXG4gICAgQE91dHB1dCgpXHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgZG9jdW1lbnREZWxldGVkOiBFdmVudEVtaXR0ZXI8Q29Eb2N1bWVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPENvRG9jdW1lbnQ+KCk7XHJcblxyXG4gICAgLy8gRW1pdHMgZXZlcnkgdGltZSB0aGUgb3JkZXIgb2YgZG9jdW1lbnRzIHdhcyBjaGFuZ2VkXHJcbiAgICBAT3V0cHV0KClcclxuICAgIHB1YmxpYyByZWFkb25seSBzb3J0YWJsZUxpc3RDaGFuZ2VkOiBFdmVudEVtaXR0ZXI8Q29Eb2N1bWVudFtdPiA9IG5ldyBFdmVudEVtaXR0ZXI8Q29Eb2N1bWVudFtdPigpO1xyXG5cclxuICAgIEBPdXRwdXQoKVxyXG4gICAgcHVibGljIGRvY3VtZW50Q2hhbmdlRXZlbnQ6IEV2ZW50RW1pdHRlcjxDb0RvY3VtZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8Q29Eb2N1bWVudD4oKTtcclxuXHJcbiAgICAvLyBVc2UgdGhpcyBpZiBjb25zdW1lciByZXF1aXJlcyB0byBwZXJmb3JtIGV4dHJhIGFjdGlvbnMsIGxpa2UgbG9ja2luZyBhIHBhcmVudCBidXNpbmVzc09iamVjdCBpZiBpdCBjb250YWlucyB0aGUgY29sbGVjdGlvbiBvZiBkb2N1bWVudHMuIEVtaXQgd2l0aCB0cnVlIHdoZW4gcG9wdXAgb3BlbmVkLCBmYWxzZSBmb3IgY2xvc2VcclxuICAgIEBPdXRwdXQoKVxyXG4gICAgcHVibGljIHBvcHVwT3BlbmVkU3RhdGVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcclxuXHJcbiAgICBASG9zdEJpbmRpbmcoXCJjbGFzcy5oaWRkZW5cIilcclxuICAgIHB1YmxpYyBoaWRkZW46IGJvb2xlYW47XHJcblxyXG4gICAgQEhvc3RMaXN0ZW5lcihcImRyb3BcIiwgW1wiJGV2ZW50XCJdKVxyXG4gICAgcHVibGljIG9uRHJvcChldmVudDogRHJhZ0V2ZW50KTogdm9pZCB7XHJcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLnVzZUN1c3RvbUZpbGVEcm9wRXZlbnQpIHtcclxuICAgICAgICAgICAgdGhpcy5maWxlc1BpY2tlZChldmVudC5kYXRhVHJhbnNmZXIuZmlsZXMpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3VzdG9tRmlsZURyb3BFdmVudC5lbWl0KGV2ZW50LmRhdGFUcmFuc2Zlci5maWxlcyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9jbGVhckRyb3B6b25lKCk7XHJcbiAgICB9XHJcblxyXG4gICAgQEhvc3RMaXN0ZW5lcihcImRyYWdlbmRcIiwgW1wiJGV2ZW50XCJdKVxyXG4gICAgcHVibGljIG9uRHJhZ0VuZChldmVudDogRHJhZ0V2ZW50KTogdm9pZCB7XHJcbiAgICAgICAgZXZlbnQuZGF0YVRyYW5zZmVyLmNsZWFyRGF0YSgpO1xyXG4gICAgICAgIHRoaXMuX2NsZWFyRHJvcHpvbmUoKTtcclxuICAgIH1cclxuXHJcbiAgICBASG9zdExpc3RlbmVyKFwiZHJhZ292ZXJcIiwgW1wiJGV2ZW50XCJdKVxyXG4gICAgcHVibGljIG9uRHJhZ092ZXIoZXZlbnQ6IERyYWdFdmVudCk6IHZvaWQge1xyXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgQEhvc3RMaXN0ZW5lcihcImRyYWdlbnRlclwiLCBbXCIkZXZlbnRcIl0pXHJcbiAgICBwdWJsaWMgb25EcmFnRW50ZXIoZXZlbnQ6IERyYWdFdmVudCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX2RyYWdFbnRlclRhcmdldCA9IGV2ZW50LnRhcmdldDtcclxuICAgICAgICB0aGlzLl9zaG93RHJvcHpvbmUoKTtcclxuICAgIH1cclxuXHJcbiAgICBASG9zdExpc3RlbmVyKFwiZHJhZ2xlYXZlXCIsIFtcIiRldmVudFwiXSlcclxuICAgIHB1YmxpYyBvbkRyYWdMZWF2ZShldmVudDogRHJhZ0V2ZW50KTogdm9pZCB7XHJcbiAgICAgICAgaWYgKGV2ZW50LnRhcmdldCA9PT0gdGhpcy5fZHJhZ0VudGVyVGFyZ2V0KSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2NsZWFyRHJvcHpvbmUoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGRvY3VtZW50VW5kZXJFZGl0OiBDb0RvY3VtZW50O1xyXG4gICAgcHVibGljIGFjY2VwdGVkVXBsb2FkRm9ybWF0czogc3RyaW5nO1xyXG5cclxuICAgIHByb3RlY3RlZCBfbWF4VXBsb2FkRmlsZVNpemU6IG51bWJlcjtcclxuXHJcbiAgICBwcml2YXRlIF9kcmFnRW50ZXJUYXJnZXQ6IEV2ZW50VGFyZ2V0O1xyXG4gICAgcHJpdmF0ZSBfZG9jdW1lbnRLZXk6IHN0cmluZyA9IFwiXCI7XHJcbiAgICBwcml2YXRlIF9kcm9wWm9uZTogQ29tcG9uZW50UmVmPEFwcEZpbGVEcm9wem9uZUNvbXBvbmVudD47XHJcbiAgICBwcml2YXRlIF9wb3B1cDogQ29tcG9uZW50UmVmPEZpbGVVcGxvYWRQb3B1cENvbXBvbmVudD47XHJcbiAgICBwcml2YXRlIF9kb2NDaGFuZ2VTdWI6IFN1YnNjcmlwdGlvbjtcclxuICAgIHByaXZhdGUgX3BvcHVwQ2xvc2VTdWI6IFN1YnNjcmlwdGlvbjtcclxuICAgIHByaXZhdGUgX3JlYWRvbmx5OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgLy8gcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2R1bW15VHJ1ZUZ1bmN0aW9uOiBPcGVyYXRpb25DYWxsYmFja1NpbXBsZUZ1bmN0aW9uID0gKG9iamVjdDogYW55KSA9PiBQcm9taXNlLnJlc29sdmUodHJ1ZSk7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcblxyXG4gICAgICAgIC8vcHJvdGVjdGVkIF9wcm9tcHRTZXJ2aWNlOiBQcm9tcHRTZXJ2aWNlLFxyXG4gICAgICAgIHByb3RlY3RlZCBfZGljdGlvbmFyeVNlcnZpY2U6IERpY3Rpb25hcnlTZXJ2aWNlLFxyXG4gICAgICAgIC8vcHJvdGVjdGVkIF91c2VyU2VydmljZTogVXNlclNlcnZpY2UsXHJcbiAgICAgICAgcHJvdGVjdGVkIF9jb250YWluZXI6IFZpZXdDb250YWluZXJSZWYsXHJcbiAgICAgICAgcHJvdGVjdGVkIF9mYWN0b3J5OiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXHJcbiAgICAgICAgLy9wcm90ZWN0ZWQgX2dlbmVyYWxEYWxSZXBvc2l0b3J5OiBHZW5lcmFsRGFsUmVwb3NpdG9yeSxcclxuICAgICAgICAvL3Byb3RlY3RlZCBfZGF0YVNlcnZpY2U6IERhdGFTZXJ2aWNlLFxyXG4gICAgICAgIC8vcHJvdGVjdGVkIF9iYXNlRGF0YURhbFJlcG9zaXRvcnk6IEJhc2VEYXRhRGFsUmVwb3NpdG9yeSxcclxuICAgICAgICAvL3Byb3RlY3RlZCBfY29Eb2N1bWVudERhdGFMb2FkZXI6IENvRG9jdW1lbnREYXRhTG9hZGVyU2VydmljZVxyXG4gICAgKSB7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX2NsZWFyRHJvcHpvbmUoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9zaG93RHJvcHpvbmUoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9kcm9wWm9uZSkge1xyXG4gICAgICAgICAgICBjb25zdCBmYWN0OiBDb21wb25lbnRGYWN0b3J5PEFwcEZpbGVEcm9wem9uZUNvbXBvbmVudD4gPSB0aGlzLl9mYWN0b3J5LnJlc29sdmVDb21wb25lbnRGYWN0b3J5KEFwcEZpbGVEcm9wem9uZUNvbXBvbmVudCk7XHJcbiAgICAgICAgICAgIHRoaXMuX2Ryb3Bab25lID0gdGhpcy5fY29udGFpbmVyLmNyZWF0ZUNvbXBvbmVudChmYWN0KTtcclxuICAgICAgICAgICAgdGhpcy5fZHJvcFpvbmUuaW5zdGFuY2UuY3VzdG9tRHJvcEFjdGlvbk1lc3NhZ2UgPSB0aGlzLmRyb3BNZXNzYWdlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9jbGVhckRyb3B6b25lKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX2NvbnRhaW5lci5jbGVhcigpO1xyXG4gICAgICAgIGlmICh0aGlzLl9kcm9wWm9uZSkge1xyXG4gICAgICAgICAgICB0aGlzLl9kcm9wWm9uZS5kZXN0cm95KCk7XHJcbiAgICAgICAgICAgIHRoaXMuX2Ryb3Bab25lID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBSZW1vdmUgZmlsZSBmcm9tIHVwbG9hZCBhcnJheS5cclxuICAgIHB1YmxpYyBhc3luYyBoYW5kbGVEZWxldGUoZmlsZTogQ29Eb2N1bWVudCk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgICAgIGxldCBzdWNjZXNzOiBib29sZWFuID0gYXdhaXQgdGhpcy5iZWZvcmVEZWxldGVPcGVyYXRpb24oZmlsZSk7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKHN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX2RlbGV0ZShmaWxlKTtcclxuICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBmaW5hbGx5IHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5hZnRlckRlbGV0ZU9wZXJhdGlvbihmaWxlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShzdWNjZXNzKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFzeW5jIF9kZWxldGUoZmlsZTogQ29Eb2N1bWVudCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgICAgIGxldCBkb0RlbGV0ZTogYm9vbGVhbiA9IHRydWU7XHJcbiAgICAgICAgaWYgKCF0aGlzLmRvbnRBc2tCZWZvcmVEZWxldGUpIHtcclxuICAgICAgICAgIC8vVE9ETyBtYWtlIGRpYWxvZ1NlcnZpY2VcclxuICAgICAgICAgICAgLy9kb0RlbGV0ZSA9IGF3YWl0IHRoaXMuX3Byb21wdFNlcnZpY2Uuc2hvd1llc05vKFwiTUVTU0FHRV9ERUxFVEVfUkVDT1JEX1FVRVNUSU9OXCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZG9EZWxldGUpIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLm5vT3duRGVsZXRlT3BlcmF0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICBBcnJheVV0aWxzLlJlbW92ZUVsZW1lbnQoZmlsZSwgdGhpcy5kb2N1bWVudHMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuZG9jdW1lbnREZWxldGVkLmVtaXQoZmlsZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBoYW5kbGVTb3J0aW5nQ2hhbmdlKGRvY3M6IENvRG9jdW1lbnRbXSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuc29ydGFibGVMaXN0Q2hhbmdlZC5lbWl0KGRvY3MpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhc3luYyBoYW5kbGVGaWxlQ2hhbmdlKGV2ZW50OiBhbnkpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgICAgICBpZiAoZXZlbnQgJiYgZXZlbnQudGFyZ2V0ICYmIGV2ZW50LnRhcmdldC5maWxlcyAmJiBldmVudC50YXJnZXQuZmlsZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAvLyBjaGVjayBmaWxlIHNpemVzIGFuZCBleHRlbnNpb25cclxuICAgICAgICAgICAgLy9Ub2RvOiBmaXggdGhpc1xyXG4gICAgICAgICAgICAvL2NvbnN0IGFsbG93ZWRFeHRlbnNpb25zID0gYXdhaXQgdGhpcy5fYmFzZURhdGFEYWxSZXBvc2l0b3J5LmdldEFsbG93ZWRFeHRlbnNpb25zKCk7XHJcbiAgICAgICAgICAgIGxldCBhbGxGaWxlc0FyZVNtYWxsRW5vdWdoOiBib29sZWFuID0gdHJ1ZTtcclxuICAgICAgICAgICAgbGV0IGFsbEZpbGVzSGF2ZUFsbG93ZWRFeHRlbnNpb25zOiBib29sZWFuID0gdHJ1ZTtcclxuICAgICAgICAgICAgY29uc3Qgc2l6ZVRvQ29tcGFyZTogbnVtYmVyID0gdGhpcy5fbWF4VXBsb2FkRmlsZVNpemUgPyB0aGlzLl9tYXhVcGxvYWRGaWxlU2l6ZSA6IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgY29uc3QgbGVuOiBudW1iZXIgPSBldmVudC50YXJnZXQuZmlsZXMubGVuZ3RoO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHVwbG9hZFNpemVBbGxvd2VkID0gRmlsZVV0aWxzLkNoZWNrTWF4VXBsb2FkU2l6ZShldmVudC50YXJnZXQuZmlsZXNbaV0sIHNpemVUb0NvbXBhcmUpO1xyXG4gICAgICAgICAgICAgICAgaWYgKCF1cGxvYWRTaXplQWxsb3dlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGFsbEZpbGVzQXJlU21hbGxFbm91Z2ggPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNvbnN0IGV4dGVuc2lvbkFsbG93ZWQgPSB0cnVlLy9GaWxlVXRpbHMuQ2hlY2tFeHRlbnNpb24oZXZlbnQudGFyZ2V0LmZpbGVzW2ldLCBhbGxvd2VkRXh0ZW5zaW9ucyk7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWV4dGVuc2lvbkFsbG93ZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBhbGxGaWxlc0hhdmVBbGxvd2VkRXh0ZW5zaW9ucyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoIWFsbEZpbGVzQXJlU21hbGxFbm91Z2gpIHtcclxuICAgICAgICAgICAgICAvL1RPRE8gbWFrZSBkaWFsb2dTZXJ2aWNlXHJcbiAgICAgICAgICAgICAgICAvL3RoaXMuX3Byb21wdFNlcnZpY2Uuc2hvd1dhcm5pbmcodGhpcy5fZGljdGlvbmFyeVNlcnZpY2UuZ2V0KFwiRklMRV9UT09fTEFSR0VfVE9fVVBMT0FEXCIsIHRydWUsIFwiXCIgKyBbRmlsZVV0aWxzLmdldE1heFVwbG9hZFNpemVJbk1iKHNpemVUb0NvbXBhcmUpXSkpO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKCFhbGxGaWxlc0hhdmVBbGxvd2VkRXh0ZW5zaW9ucykge1xyXG4gICAgICAgICAgICAgICAgLy9jb25zdCBleHRlbnNpb25zTGlzdCA9IGFsbG93ZWRFeHRlbnNpb25zLm1hcChhbGxvd2VkRXh0ZW5zaW9uID0+IGFsbG93ZWRFeHRlbnNpb24uZXh0ZW5zaW9uKS5zb3J0KCkuam9pbihcIiwgXCIpO1xyXG4gICAgICAgICAgICAgICAgLy90aGlzLl9wcm9tcHRTZXJ2aWNlLnNob3dXYXJuaW5nKHRoaXMuX2RpY3Rpb25hcnlTZXJ2aWNlLmdldChcIkZJTEVfSEFTX0RJU0FMTE9XRURfRVhURU5TSU9OXCIsIGZhbHNlLCBleHRlbnNpb25zTGlzdCkpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZmlsZXNUb0FkZDogQ29Eb2N1bWVudFtdID0gYXdhaXQgdGhpcy5jb252ZXJ0RmlsZXNJbnRvQ29Eb2N1bWVudHMoZXZlbnQudGFyZ2V0LmZpbGVzKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoZmlsZXNUb0FkZC5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kb2N1bWVudHNBZGRlZC5lbWl0KGZpbGVzVG9BZGQpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy51c2VXaXRob3V0U2V0dGluZ1Byb3BzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZG9jdW1lbnRzQWRkZWQubmV4dChmaWxlc1RvQWRkKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRvY3VtZW50VW5kZXJFZGl0ID0gZmlsZXNUb0FkZFswXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vcGVuUG9wdXAoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFzeW5jIGhhbmRsZUVkaXREb2N1bWVudENsaWNrKGRvY1RvRWRpdDogQ29Eb2N1bWVudCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgICAgIHRoaXMuZG9jdW1lbnRVbmRlckVkaXQgPSBkb2NUb0VkaXQ7XHJcbiAgICAgICAgY29uc3Qgc2hvd1BvcHVwOiBib29sZWFuID0gYXdhaXQgdGhpcy5iZWZvcmVFZGl0T3BlcmF0aW9uKGRvY1RvRWRpdCk7XHJcbiAgICAgICAgaWYgKHNob3dQb3B1cCkge1xyXG4gICAgICAgICAgICB0aGlzLm9wZW5Qb3B1cCgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYXN5bmMgb3BlblBvcHVwKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgICAgIHRoaXMuX2NyZWF0ZUFuZEZpbGxQb3B1cEluc3RhbmNlKCk7XHJcblxyXG4gICAgICAgIHRoaXMuX2RvY0NoYW5nZVN1YiA9IHRoaXMuX3BvcHVwLmluc3RhbmNlLmRvY3VtZW50Q2hhbmdlRXZlbnQuc3Vic2NyaWJlKChkb2M6IENvRG9jdW1lbnQpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5kb2N1bWVudENoYW5nZUV2ZW50LmVtaXQoZG9jKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb3BlblBvcHVwVG9BZGREb2N1bWVudEJ5VXJsKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX2NyZWF0ZURvY3VtZW50VG9BZGRCeVVybCgpO1xyXG4gICAgICAgIHRoaXMuX2NyZWF0ZUFuZEZpbGxQb3B1cEluc3RhbmNlKHRydWUpO1xyXG5cclxuICAgICAgICB0aGlzLl9kb2NDaGFuZ2VTdWIgPSB0aGlzLl9wb3B1cC5pbnN0YW5jZS5kb2N1bWVudENoYW5nZUV2ZW50LnN1YnNjcmliZSgoZG9jOiBDb0RvY3VtZW50KSA9PiB7XHJcbiAgICAgICAgICAgIGRvYy5maWxlTmFtZSA9IGRvYy5maWxlUGF0aDtcclxuICAgICAgICAgICAgdGhpcy5kb2N1bWVudENoYW5nZUV2ZW50LmVtaXQoZG9jKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9jcmVhdGVEb2N1bWVudFRvQWRkQnlVcmwoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5kb2N1bWVudFVuZGVyRWRpdCA9IG5ldyBDb0RvY3VtZW50KCk7XHJcbiAgICAgICAgdGhpcy5kb2N1bWVudFVuZGVyRWRpdC50YWJsZSA9IHRoaXMuZG9jdW1lbnRUYWJsZTtcclxuICAgICAgICB0aGlzLmRvY3VtZW50VW5kZXJFZGl0LmtleSA9IHRoaXMuZG9jdW1lbnRLZXk7XHJcbiAgICAgICAgdGhpcy5kb2N1bWVudFVuZGVyRWRpdC5maWxlVHlwZSA9IHRoaXMuZmlsZVR5cGU7XHJcbiAgICAgICAgdGhpcy5kb2N1bWVudFVuZGVyRWRpdC5kb2N1bWVudFR5cGUgPSBDb0RvY3VtZW50VHlwZS5TYXZlQXNMaW5rT25SYW5kb21Mb2NhdGlvbjtcclxuICAgICAgICB0aGlzLmRvY3VtZW50VW5kZXJFZGl0LnBhdGhJc1VybCA9IHRydWU7XHJcbiAgICAgICAgLy9UT0RPIEZpeCB1c2VyIElucHV0XHJcbiAgICAgICAgLy90aGlzLmRvY3VtZW50VW5kZXJFZGl0LmNyZWF0aW9uVXNlciA9IHRoaXMuX3VzZXJTZXJ2aWNlLnVzZXJOYW1lLnRvVXBwZXJDYXNlKCk7XHJcbiAgICAgICAgLy90aGlzLmRvY3VtZW50VW5kZXJFZGl0Lm1vZGlmaWVkVXNlciA9IHRoaXMuX3VzZXJTZXJ2aWNlLnVzZXJOYW1lLnRvVXBwZXJDYXNlKCk7XHJcbiAgICAgICAgdGhpcy5kb2N1bWVudFVuZGVyRWRpdC5jcmVhdGlvbkRhdGUgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICAgIHRoaXMuZG9jdW1lbnRVbmRlckVkaXQubW9kaWZpZWREYXRlID0gbmV3IERhdGUoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9jcmVhdGVBbmRGaWxsUG9wdXBJbnN0YW5jZShhZGREb2N1bWVudEJ5VXJsOiBib29sZWFuID0gZmFsc2UpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnBvcHVwT3BlbmVkU3RhdGVDaGFuZ2UuZW1pdCh0cnVlKTtcclxuXHJcbiAgICAgICAgY29uc3QgZmFjdG9yeTogQ29tcG9uZW50RmFjdG9yeTxGaWxlVXBsb2FkUG9wdXBDb21wb25lbnQ+ID0gdGhpcy5fZmFjdG9yeS5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeShGaWxlVXBsb2FkUG9wdXBDb21wb25lbnQpO1xyXG5cclxuICAgICAgICB0aGlzLl9wb3B1cCA9IHRoaXMuX2NvbnRhaW5lci5jcmVhdGVDb21wb25lbnQoZmFjdG9yeSk7XHJcblxyXG4gICAgICAgIHRoaXMuX3BvcHVwLmluc3RhbmNlLnJlYWRvbmx5ID0gdGhpcy5fcmVhZG9ubHk7XHJcbiAgICAgICAgdGhpcy5fcG9wdXAuaW5zdGFuY2UuYWRkRG9jdW1lbnRCeVVybCA9IGFkZERvY3VtZW50QnlVcmw7XHJcbiAgICAgICAgdGhpcy5fcG9wdXAuaW5zdGFuY2UuaGFzUHVibGljQWNjZXNzVmlzaWJsZSA9IHRoaXMuZG9jdW1lbnRUYWJsZSA9PT0gVGFibGVOYW1lLkdvb2RzO1xyXG4gICAgICAgIHRoaXMuX3BvcHVwLmluc3RhbmNlLnNob3dEb2N1bWVudFJlcG9ydFBpY2tlciA9ICh0aGlzLmRvY3VtZW50VGFibGUgPT09IFRhYmxlTmFtZS5UcmFuc2FjdGlvbnMgfHwgdGhpcy5kb2N1bWVudFRhYmxlID09PSBUYWJsZU5hbWUuVHJhbnNhY3Rpb25MaW5lcyk7XHJcbiAgICAgICAgdGhpcy5fcG9wdXAuaW5zdGFuY2UuZG9jdW1lbnRVbmRlckVkaXQgPSB0aGlzLmRvY3VtZW50VW5kZXJFZGl0O1xyXG4gICAgICAgIHRoaXMuX3BvcHVwLmluc3RhbmNlLmZpbGVzVXBsb2FkQ29uZmlnT2JqZWN0cyA9IHRoaXMuZmlsZXNVcGxvYWRDb25maWdPYmplY3RzO1xyXG4gICAgICAgIHRoaXMuX3BvcHVwLmluc3RhbmNlLm1lZGljYWxVc2VyR3JvdXBzID0gdGhpcy5tZWRpY2FsVXNlckdyb3VwcztcclxuICAgICAgICB0aGlzLl9wb3B1cC5pbnN0YW5jZS50YWdDYXRlZ29yeSA9IHRoaXMudGFnQ2F0ZWdvcnk7XHJcbiAgICAgICAgdGhpcy5fcG9wdXAuaW5zdGFuY2UuZGlzcGxheVJlYWRXcml0ZUFjY2VzcyA9IHRoaXMuZGlzcGxheVJlYWRXcml0ZUFjY2VzcztcclxuICAgICAgICB0aGlzLl9wb3B1cC5pbnN0YW5jZS50YWdSZWZlcmVuY2VUYWJsZSA9IHRoaXMudGFnUmVmZXJlbmNlVGFibGU7XHJcbiAgICAgICAgdGhpcy5fcG9wdXAuaW5zdGFuY2UucHVibGljYXRpb25JZHMgPSBSZWZDb2RlVXRpbHMuR2V0TXVsdGlSZWZDb2RlQ2hvaWNlcyh0aGlzLmRvY3VtZW50VW5kZXJFZGl0LnB1YmxpY2F0aW9uKTtcclxuICAgICAgICB0aGlzLl9wb3B1cC5pbnN0YW5jZS5zdG9yZUdyb3VwSWRzID0gdGhpcy5kb2N1bWVudFVuZGVyRWRpdC5yZXRhaWxGb3JtdWxhcztcclxuICAgICAgICB0aGlzLl9wb3B1cC5pbnN0YW5jZS5maWxlVHlwZSA9IHRoaXMuZmlsZVR5cGU7XHJcblxyXG4gICAgICAgIHRoaXMuX3ByZXBhcmVGaWxlUmlnaHRzKCk7XHJcblxyXG4gICAgICAgIHRoaXMuX3BvcHVwQ2xvc2VTdWIgPSB0aGlzLl9wb3B1cC5pbnN0YW5jZS5wb3B1cENsb3NlRXZlbnQuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5fdW5sb2NrRG9jdW1lbnQoKTtcclxuICAgICAgICAgICAgdGhpcy5wb3B1cE9wZW5lZFN0YXRlQ2hhbmdlLmVtaXQoZmFsc2UpO1xyXG4gICAgICAgICAgICB0aGlzLl9wb3B1cENsb3NlU3ViLnVuc3Vic2NyaWJlKCk7XHJcbiAgICAgICAgICAgIHRoaXMuX2RvY0NoYW5nZVN1Yi51bnN1YnNjcmliZSgpO1xyXG4gICAgICAgICAgICB0aGlzLl9wb3B1cC5kZXN0cm95KCk7XHJcbiAgICAgICAgICAgIHRoaXMuX3BvcHVwID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBhc3luYyBjb252ZXJ0RmlsZXNJbnRvQ29Eb2N1bWVudHMoZmlsZXM6IEZpbGVMaXN0KTogUHJvbWlzZTxDb0RvY3VtZW50W10+IHtcclxuICAgICAgICBjb25zdCBhbW91bnRPZkZpbGVzOiBudW1iZXIgPSBmaWxlcy5sZW5ndGg7XHJcbiAgICAgICAgY29uc3QgZmlsZXNUb0FkZDogQ29Eb2N1bWVudFtdID0gW107XHJcblxyXG4gICAgICAgIGZvciAobGV0IGk6IG51bWJlciA9IDA7IGkgPCBhbW91bnRPZkZpbGVzOyBpKyspIHtcclxuICAgICAgICAgICAgY29uc3QgZmlsZUFzRG9jdW1lbnQ6IENvRG9jdW1lbnQgPSBhd2FpdCB0aGlzLl9nZXRGaWxlQXNEb2N1bWVudChmaWxlc1tpXSk7XHJcbiAgICAgICAgICAgIGZpbGVBc0RvY3VtZW50LmluZGV4ID0gQ29Eb2N1bWVudFNoYXJlZEZpZWxkTG9naWMuR2VuZXJhdGVBdmFpbGFibGVJbmRleE5yKHRoaXMuZG9jdW1lbnRzIHx8IFtdKSArIGk7XHJcbiAgICAgICAgICAgIGZpbGVzVG9BZGQucHVzaChmaWxlQXNEb2N1bWVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmaWxlc1RvQWRkO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhc3luYyBmaWxlc1BpY2tlZChmaWxlczogRmlsZUxpc3QpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgICAgICBpZiAoZmlsZXMgJiYgZmlsZXMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGxldCBhbGxGaWxlc0FyZVZhbGlkOiBib29sZWFuID0gdHJ1ZTtcclxuICAgICAgICAgICAgY29uc3QgYW1vdW50T2ZGaWxlczogbnVtYmVyID0gZmlsZXMubGVuZ3RoO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgYW1vdW50T2ZGaWxlczsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIUZpbGVVdGlscy5DaGVja01heFVwbG9hZFNpemUoZmlsZXNbaV0sIHRoaXMuX21heFVwbG9hZEZpbGVTaXplKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGFsbEZpbGVzQXJlVmFsaWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKCFhbGxGaWxlc0FyZVZhbGlkKSB7XHJcbiAgICAgICAgICAgICAgLy9UT0RPIG1ha2UgZGlhbG9nU2VydmljZVxyXG4gICAgICAgICAgICAgICAgLy90aGlzLl9wcm9tcHRTZXJ2aWNlLnNob3dXYXJuaW5nKHRoaXMuX2RpY3Rpb25hcnlTZXJ2aWNlLmdldChcIkZJTEVfVE9PX0xBUkdFX1RPX1VQTE9BRFwiLCB0cnVlLCBcIlwiICsgRmlsZVV0aWxzLmdldE1heFVwbG9hZFNpemVJbk1iKHRoaXMuX21heFVwbG9hZEZpbGVTaXplKS50b1N0cmluZygpKSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBmaWxlc1RvQWRkOiBDb0RvY3VtZW50W10gPSBhd2FpdCB0aGlzLmNvbnZlcnRGaWxlc0ludG9Db0RvY3VtZW50cyhmaWxlcyk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGZpbGVzVG9BZGQubGVuZ3RoID4gMSB8fCB0aGlzLnVzZVdpdGhvdXRTZXR0aW5nUHJvcHMpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRvY3VtZW50c0FkZGVkLmVtaXQoZmlsZXNUb0FkZCk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZG9jdW1lbnRVbmRlckVkaXQgPSBmaWxlc1RvQWRkWzBdOyAvLyBTZXR0aW5nIGRvY1VuZGVyRWRpdCBvcGVucyB0aGUgcG9wdXAgd2luZG93XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vcGVuUG9wdXAoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaGFuZGxlQWNjZXB0ZWRGaWxlVHlwZXNMb2FkZWQodmFsdWU6IEZpbGVUeXBlKTogdm9pZCB7XHJcbiAgICAgICAgLy9UT0RPIGZpeCBsb2FkaW5nXHJcbiAgICAgICAgLy90aGlzLmFjY2VwdGVkVXBsb2FkRm9ybWF0cyA9IHRoaXMuX2NvRG9jdW1lbnREYXRhTG9hZGVyLmdldEFsbG93ZWRFeHRlbnNpb25zRm9yVHlwZSh2YWx1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhc3luYyBfZ2V0RmlsZUFzRG9jdW1lbnQoZmlsZTogRmlsZSk6IFByb21pc2U8Q29Eb2N1bWVudD4ge1xyXG4gICAgICAgIGNvbnN0IGZpbGVBc0NvRG9jdW1lbnQ6IENvRG9jdW1lbnQgPSBhd2FpdCBGaWxlVXRpbHMuUmVhZEZpbGVBc05ld0NvRG9jdW1lbnQoZmlsZSwgdGhpcy5yZXNpemVJbWFnZXMpO1xyXG4gICAgICAgIC8vIHNldCBzb21lIGV4dHJhIGtub3duIGZpZWxkcyBmb3IgdGhlIGNvZG9jdW1lbnQ6XHJcbiAgICAgICAgZmlsZUFzQ29Eb2N1bWVudC50YWJsZSA9IHRoaXMuZG9jdW1lbnRUYWJsZTtcclxuICAgICAgICBmaWxlQXNDb0RvY3VtZW50LmtleSA9IHRoaXMuZG9jdW1lbnRLZXk7XHJcbiAgICAgICAgLy9UT0RPIGZpeCBhZGQgdXNlcnNcclxuICAgICAgICAvL2ZpbGVBc0NvRG9jdW1lbnQuY3JlYXRpb25Vc2VyID0gdGhpcy5fdXNlclNlcnZpY2UudXNlck5hbWUudG9VcHBlckNhc2UoKTtcclxuICAgICAgICAvL2ZpbGVBc0NvRG9jdW1lbnQubW9kaWZpZWRVc2VyID0gdGhpcy5fdXNlclNlcnZpY2UudXNlck5hbWUudG9VcHBlckNhc2UoKTtcclxuICAgICAgICBmaWxlQXNDb0RvY3VtZW50LmNyZWF0aW9uRGF0ZSA9IG5ldyBEYXRlKCk7XHJcbiAgICAgICAgZmlsZUFzQ29Eb2N1bWVudC5tb2RpZmllZERhdGUgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICAgIGZpbGVBc0NvRG9jdW1lbnQuZmlsZVR5cGUgPSB0aGlzLmZpbGVUeXBlID8gdGhpcy5maWxlVHlwZSA6IEZpbGVVdGlscy5Jc0ltYWdlRmlsZShmaWxlKSA/IEZpbGVUeXBlLkltYWdlIDogRmlsZVR5cGUuRG9jdW1lbnQ7XHJcblxyXG4gICAgICAgIGlmIChmaWxlQXNDb0RvY3VtZW50KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmaWxlQXNDb0RvY3VtZW50O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFzeW5jIF9zZXRJbnRlcm5hbFBhcmFtT2JqKHZhbHVlOiBJbnRlcm5hbFBhcmFtKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICAgICAgLy9UT0RPIGZpeCBwYXJhbXNcclxuICAgICAgICAvL2NvbnN0IHBhcmFtOiBJbnRlcm5hbFBhcmFtZXRlck9iamVjdCA9IGF3YWl0IHRoaXMuX2dlbmVyYWxEYWxSZXBvc2l0b3J5LmdldEludGVybmFsUGFyYW1PYmplY3QodmFsdWUpO1xyXG4gICAgICAgIC8vdGhpcy5fbWF4VXBsb2FkRmlsZVNpemUgPSBpc05hTihwYXJzZUludChwYXJhbS52YWx1ZSwgMCkpID8gdW5kZWZpbmVkIDogcGFyc2VJbnQocGFyYW0udmFsdWUsIDApO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXN5bmMgX2xvY2tEb2N1bWVudCgpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgICAgICBpZiAoIXRoaXMuZG9jdW1lbnRVbmRlckVkaXQuZG9jdW1lbnRJZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gTmV3IGRvY3VtZW50IGRvZXMgbm90IGhhdmUgYW4gSUQgYW5kIHRoZXJlZm9yZSBkb2VzIG5vdCBoYXZlIHRvIGJlIGxvY2tlZFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgbG9ja09rOiBib29sZWFuID0gYXdhaXQgdGhpcy5sb2NrT3BlcmF0aW9uKENvRG9jdW1lbnQpO1xyXG4gICAgICAgIHJldHVybiBsb2NrT2s7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhc3luYyBfdW5sb2NrRG9jdW1lbnQoKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICAgIGlmICghdGhpcy5kb2N1bWVudFVuZGVyRWRpdC5kb2N1bWVudElkKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7IC8vIE5ldyBkb2N1bWVudCBkb2VzIG5vdCBoYXZlIGFuIElEIGFuZCB0aGVyZWZvcmUgZG9lcyBub3QgaGF2ZSB0byBiZSBsb2NrZWRcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgdW5sb2NrT2s6IGJvb2xlYW4gPSBhd2FpdCB0aGlzLnVubG9ja09wZXJhdGlvbihDb0RvY3VtZW50KTtcclxuICAgICAgcmV0dXJuIHVubG9ja09rO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX3ByZXBhcmVGaWxlUmlnaHRzKCk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IGxlbjogbnVtYmVyID0gdGhpcy5kb2N1bWVudFVuZGVyRWRpdC5yaWdodHMubGVuZ3RoO1xyXG4gICAgICAgIGZvciAobGV0IGk6IG51bWJlciA9IDA7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICBjb25zdCByaWdodDogQ29Eb2N1bWVudFJpZ2h0ID0gdGhpcy5kb2N1bWVudFVuZGVyRWRpdC5yaWdodHNbaV07XHJcbiAgICAgICAgICAgIGlmIChyaWdodC5yaWdodExldmVsID09PSBPYmplY3RSaWdodFR5cGUuUmVhZFdyaXRlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9wb3B1cC5pbnN0YW5jZS51c2VyR3JvdXBzRm9yV3JpdGUucHVzaChyaWdodC51c2VyR3JvdXBJZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHJpZ2h0LnJpZ2h0TGV2ZWwgPT09IE9iamVjdFJpZ2h0VHlwZS5SZWFkT25seSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fcG9wdXAuaW5zdGFuY2UudXNlckdyb3Vwc0ZvclJlYWQucHVzaChyaWdodC51c2VyR3JvdXBJZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIl19
|