@talrace/ngx-noder 0.0.18 → 0.0.20
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/fesm2022/talrace-ngx-noder.mjs +181 -181
- package/fesm2022/talrace-ngx-noder.mjs.map +1 -1
- package/lib/apart-components/editor-toolbar/components/base-toolbar.component.d.ts +1 -1
- package/lib/editor/components/external-element/external.component.d.ts +1 -1
- package/lib/editor/components/shared/abstract/base.component.d.ts +1 -1
- package/lib/editor/components/shared/abstract/destroy.component.d.ts +1 -1
- package/package.json +1 -3
- package/src/lib/apart-components/add-link-dialog/_add-link-dialog.theme.scss +3 -6
- package/src/lib/apart-components/add-link-mobile/_add-link-mobile.theme.scss +4 -7
- package/src/lib/apart-components/confirm-dialog/_theme.scss +6 -9
- package/src/lib/apart-components/editor-title/_editor-title.theme.scss +6 -9
- package/src/lib/apart-components/editor-title-mobile/_editor-title-mobile.theme.scss +9 -12
- package/src/lib/apart-components/editor-toolbar/_editor-toolbar.theme.scss +5 -8
- package/src/lib/apart-components/editor-toolbar/components/buttons/color-picker/_color-picker.theme.scss +1 -3
- package/src/lib/apart-components/editor-toolbar/components/buttons/font/_font.theme.scss +1 -3
- package/src/lib/apart-components/editor-toolbar/components/buttons/font-size/_font-size.theme.scss +2 -5
- package/src/lib/apart-components/editor-toolbar/components/buttons/font-style/_font-style.theme.scss +3 -6
- package/src/lib/apart-components/editor-toolbar/components/buttons/format/_format.theme.scss +3 -6
- package/src/lib/apart-components/editor-toolbar/components/buttons/numbering/_numbering.theme.scss +15 -18
- package/src/lib/apart-components/editor-toolbar/components/buttons/undo-redo/_undo-redo.theme.scss +2 -4
- package/src/lib/apart-components/editor-toolbar/components/menu-dropdowns/_menu-dropdowns.theme.scss +5 -8
- package/src/lib/apart-components/editor-toolbar/components/menu-dropdowns-mobile/_menu-dropdowns-mobile.theme.scss +6 -9
- package/src/lib/apart-components/editor-toolbar/components/toolbar-actions/_toolbar-actions.theme.scss +3 -6
- package/src/lib/apart-components/insert-table/_insert-table.theme.scss +6 -9
- package/src/lib/apart-components/insert-table-mobile/_insert-table-mobile.theme.scss +12 -15
- package/src/lib/apart-components/text-format-mobile/_text-format-mobile.theme.scss +22 -25
- package/src/lib/editor/components/_editor.theme.scss +25 -28
- package/esm2022/lib/apart-components/add-link-dialog/add-link-dialog.component.mjs +0 -73
- package/esm2022/lib/apart-components/add-link-dialog/validation.helper.mjs +0 -7
- package/esm2022/lib/apart-components/add-link-mobile/add-link-mobile.component.mjs +0 -49
- package/esm2022/lib/apart-components/confirm-dialog/confirm-dialog.component.mjs +0 -34
- package/esm2022/lib/apart-components/editor-search/editor-search-dialog.component.mjs +0 -75
- package/esm2022/lib/apart-components/editor-title/editor-title.component.mjs +0 -95
- package/esm2022/lib/apart-components/editor-title-mobile/editor-title-mobile.component.mjs +0 -24
- package/esm2022/lib/apart-components/editor-toolbar/components/base-toolbar.component.mjs +0 -117
- package/esm2022/lib/apart-components/editor-toolbar/components/buttons/color-picker/color-picker.component.mjs +0 -37
- package/esm2022/lib/apart-components/editor-toolbar/components/buttons/font/font.component.mjs +0 -49
- package/esm2022/lib/apart-components/editor-toolbar/components/buttons/font-size/font-size.component.mjs +0 -90
- package/esm2022/lib/apart-components/editor-toolbar/components/buttons/font-style/font-style.component.mjs +0 -81
- package/esm2022/lib/apart-components/editor-toolbar/components/buttons/format/format.component.mjs +0 -28
- package/esm2022/lib/apart-components/editor-toolbar/components/buttons/numbering/numbering.component.mjs +0 -53
- package/esm2022/lib/apart-components/editor-toolbar/components/buttons/print/print.component.mjs +0 -18
- package/esm2022/lib/apart-components/editor-toolbar/components/buttons/undo-redo/undo-redo.component.mjs +0 -27
- package/esm2022/lib/apart-components/editor-toolbar/components/buttons/zoom/zoom.component.mjs +0 -71
- package/esm2022/lib/apart-components/editor-toolbar/components/menu-dropdowns/menu-dropdowns.component.mjs +0 -107
- package/esm2022/lib/apart-components/editor-toolbar/components/menu-dropdowns-mobile/menu-dropdowns-mobile.component.mjs +0 -25
- package/esm2022/lib/apart-components/editor-toolbar/components/toolbar-actions/toolbar-actions.component.mjs +0 -65
- package/esm2022/lib/apart-components/editor-toolbar/editor-mobile-toolbar/editor-mobile-toolbar.component.mjs +0 -86
- package/esm2022/lib/apart-components/editor-toolbar/editor-toolbar/editor-toolbar.component.mjs +0 -90
- package/esm2022/lib/apart-components/editor-toolbar/editor-toolbar.module.mjs +0 -122
- package/esm2022/lib/apart-components/editor-toolbar/shared/constants/editor-toolbar-modes.const.mjs +0 -8
- package/esm2022/lib/apart-components/editor-toolbar/shared/constants/numbering-templates.const.mjs +0 -1148
- package/esm2022/lib/apart-components/editor-toolbar/shared/constants/svg-icons.const.mjs +0 -157
- package/esm2022/lib/apart-components/editor-toolbar/shared/enums/alignment.enum.mjs +0 -8
- package/esm2022/lib/apart-components/editor-toolbar/shared/enums/editor-toolbar-mode.enum.mjs +0 -11
- package/esm2022/lib/apart-components/editor-toolbar/shared/enums/numbering-template-type.enum.mjs +0 -16
- package/esm2022/lib/apart-components/editor-toolbar/shared/enums/numbering-type.enum.mjs +0 -6
- package/esm2022/lib/apart-components/editor-toolbar/shared/services/custom-icon.service.mjs +0 -34
- package/esm2022/lib/apart-components/editor-toolbar/shared/services/editor-toolbar.service.mjs +0 -26
- package/esm2022/lib/apart-components/editor-toolbar/shared/services/toolbar-core.service.mjs +0 -60
- package/esm2022/lib/apart-components/editor-toolbar/shared/toolbar-styles.helper.mjs +0 -48
- package/esm2022/lib/apart-components/insert-table/insert-table.component.mjs +0 -54
- package/esm2022/lib/apart-components/insert-table-mobile/insert-table-mobile.component.mjs +0 -86
- package/esm2022/lib/apart-components/text-format-mobile/text-format-mobile.component.mjs +0 -134
- package/esm2022/lib/editor/components/edges/edge-element.model.mjs +0 -38
- package/esm2022/lib/editor/components/edges/edge-type.enum.mjs +0 -6
- package/esm2022/lib/editor/components/edges/edge.component.mjs +0 -141
- package/esm2022/lib/editor/components/edges/edges.mjs +0 -120
- package/esm2022/lib/editor/components/edges/page-type.enum.mjs +0 -7
- package/esm2022/lib/editor/components/editor.component.mjs +0 -112
- package/esm2022/lib/editor/components/external-element/external-element.service.mjs +0 -6
- package/esm2022/lib/editor/components/external-element/external-elements.const.mjs +0 -4
- package/esm2022/lib/editor/components/external-element/external-sidenav.interface.mjs +0 -2
- package/esm2022/lib/editor/components/external-element/external.component.mjs +0 -41
- package/esm2022/lib/editor/components/external-element/models/element-data.model.mjs +0 -9
- package/esm2022/lib/editor/components/external-element/models/external-element.model.mjs +0 -11
- package/esm2022/lib/editor/components/external-element/models/external-sidenav.model.mjs +0 -15
- package/esm2022/lib/editor/components/image/components/image.component.mjs +0 -88
- package/esm2022/lib/editor/components/image/image-api.service.mjs +0 -36
- package/esm2022/lib/editor/components/image/input-handler/image-input.handler.mjs +0 -46
- package/esm2022/lib/editor/components/image/resizer/coordinate.mjs +0 -2
- package/esm2022/lib/editor/components/image/resizer/direction-wrapper.mjs +0 -19
- package/esm2022/lib/editor/components/image/resizer/direction.enum.mjs +0 -12
- package/esm2022/lib/editor/components/image/resizer/resizer.component.mjs +0 -106
- package/esm2022/lib/editor/components/image/resizer/size-delta.mjs +0 -2
- package/esm2022/lib/editor/components/image/resizer/size-wrapper.mjs +0 -52
- package/esm2022/lib/editor/components/image/size.mjs +0 -2
- package/esm2022/lib/editor/components/shared/abstract/base.component.mjs +0 -60
- package/esm2022/lib/editor/components/shared/abstract/destroy.component.mjs +0 -18
- package/esm2022/lib/editor/components/shared/custom-component.hepler.mjs +0 -43
- package/esm2022/lib/editor/components/shared/custom-components.interface.mjs +0 -2
- package/esm2022/lib/editor/components/shared/custom-content-markers.const.mjs +0 -3
- package/esm2022/lib/editor/components/shared/custom-content.mjs +0 -2
- package/esm2022/lib/editor/components/shared/services/component.service.mjs +0 -52
- package/esm2022/lib/editor/components/shared/services/custom-content.service.mjs +0 -123
- package/esm2022/lib/editor/components/shared/services/overlay.service.mjs +0 -55
- package/esm2022/lib/editor/components/tab/tab.component.mjs +0 -44
- package/esm2022/lib/editor/components/tab/tab.helper.mjs +0 -6
- package/esm2022/lib/editor/components/table/cell-resizer/cell-resizer.mjs +0 -118
- package/esm2022/lib/editor/components/table/components/table-cell.component.mjs +0 -99
- package/esm2022/lib/editor/components/table/components/table.component.mjs +0 -412
- package/esm2022/lib/editor/components/table/enums/hrule.enum.mjs +0 -7
- package/esm2022/lib/editor/components/table/enums/reisizer-side.enum.mjs +0 -8
- package/esm2022/lib/editor/components/table/enums/vertical-merge.enum.mjs +0 -6
- package/esm2022/lib/editor/components/table/models/cell-data.model.mjs +0 -17
- package/esm2022/lib/editor/components/table/models/cell-resizer-parameters.model.mjs +0 -9
- package/esm2022/lib/editor/components/table/models/row-data.model.mjs +0 -8
- package/esm2022/lib/editor/components/table/models/selection-range.model.mjs +0 -7
- package/esm2022/lib/editor/components/table/overlay-menu/overlay-menu.component.mjs +0 -84
- package/esm2022/lib/editor/components/table/selection/table-selection.mjs +0 -383
- package/esm2022/lib/editor/content/constants/display-values.const.mjs +0 -8
- package/esm2022/lib/editor/content/constants/document-info.const.mjs +0 -13
- package/esm2022/lib/editor/content/constants/editor.const.mjs +0 -70
- package/esm2022/lib/editor/content/contents.interface.mjs +0 -2
- package/esm2022/lib/editor/content/display-data/display-data.mjs +0 -839
- package/esm2022/lib/editor/content/display-data/display-token.model.mjs +0 -12
- package/esm2022/lib/editor/content/display-data/format-ext.model.mjs +0 -10
- package/esm2022/lib/editor/content/display-data/general-properties.model.mjs +0 -11
- package/esm2022/lib/editor/content/display-data/indent.model.mjs +0 -9
- package/esm2022/lib/editor/content/display-data/line-info.model.mjs +0 -9
- package/esm2022/lib/editor/content/display-data/lines.mjs +0 -96
- package/esm2022/lib/editor/content/display-data/models/paragraph-info.model.mjs +0 -8
- package/esm2022/lib/editor/content/display-data/paragraph-info.interface.mjs +0 -2
- package/esm2022/lib/editor/content/display-data/paragraph.mjs +0 -56
- package/esm2022/lib/editor/content/display-data/text-line-info.mjs +0 -35
- package/esm2022/lib/editor/content/display-data/toolbar-styles.interface.mjs +0 -2
- package/esm2022/lib/editor/content/helpers/content-style.helper.mjs +0 -78
- package/esm2022/lib/editor/content/helpers/display-token.helper.mjs +0 -62
- package/esm2022/lib/editor/content/helpers/format.helper.mjs +0 -23
- package/esm2022/lib/editor/content/helpers/indexed-element.helper.mjs +0 -6
- package/esm2022/lib/editor/content/helpers/link.helper.mjs +0 -42
- package/esm2022/lib/editor/content/helpers/scaling.helper.mjs +0 -9
- package/esm2022/lib/editor/content/margin.model.mjs +0 -16
- package/esm2022/lib/editor/content/page-vertical-data.model.mjs +0 -9
- package/esm2022/lib/editor/content/vertical-alignment.enum.mjs +0 -11
- package/esm2022/lib/editor/core/event-emitting.mjs +0 -56
- package/esm2022/lib/editor/display/cell.interface.mjs +0 -2
- package/esm2022/lib/editor/display/event.helper.mjs +0 -18
- package/esm2022/lib/editor/display/layers/cursor.layer.mjs +0 -102
- package/esm2022/lib/editor/display/layers/layer.config.mjs +0 -2
- package/esm2022/lib/editor/display/layers/pages.layer.mjs +0 -109
- package/esm2022/lib/editor/display/layers/print.pages.layer.mjs +0 -7
- package/esm2022/lib/editor/display/layers/print.text.layer.mjs +0 -7
- package/esm2022/lib/editor/display/layers/selection.layer.mjs +0 -119
- package/esm2022/lib/editor/display/layers/text.layer.mjs +0 -226
- package/esm2022/lib/editor/display/print/print.helper.mjs +0 -40
- package/esm2022/lib/editor/display/print/print.renderer.mjs +0 -67
- package/esm2022/lib/editor/display/print/print.rendering.helper.mjs +0 -7
- package/esm2022/lib/editor/display/render-changes.interface.mjs +0 -2
- package/esm2022/lib/editor/display/render-changes.model.mjs +0 -25
- package/esm2022/lib/editor/display/renderer.mjs +0 -204
- package/esm2022/lib/editor/display/rendering.helper.mjs +0 -185
- package/esm2022/lib/editor/display/renderloop.mjs +0 -26
- package/esm2022/lib/editor/display/virtual.renderer.mjs +0 -284
- package/esm2022/lib/editor/display/visible-range.interface.mjs +0 -2
- package/esm2022/lib/editor/editor.module.mjs +0 -91
- package/esm2022/lib/editor/execution/distance.model.mjs +0 -10
- package/esm2022/lib/editor/execution/edit.session.mjs +0 -602
- package/esm2022/lib/editor/execution/editor.mjs +0 -1368
- package/esm2022/lib/editor/execution/helpers/dom.helper.mjs +0 -42
- package/esm2022/lib/editor/execution/helpers/format-style.helper.mjs +0 -73
- package/esm2022/lib/editor/execution/helpers/image.helpet.mjs +0 -12
- package/esm2022/lib/editor/execution/helpers/page.helper.mjs +0 -12
- package/esm2022/lib/editor/execution/helpers/paragraph-style.helper.mjs +0 -41
- package/esm2022/lib/editor/execution/helpers/paragraph.helper.mjs +0 -177
- package/esm2022/lib/editor/execution/regulator.service.mjs +0 -212
- package/esm2022/lib/editor/execution/targeting/cell-session-source.model.mjs +0 -18
- package/esm2022/lib/editor/execution/targeting/edge-session-source.model.mjs +0 -14
- package/esm2022/lib/editor/execution/targeting/main-session-source.model.mjs +0 -8
- package/esm2022/lib/editor/execution/targeting/session-source.model.mjs +0 -3
- package/esm2022/lib/editor/execution/targeting/session.model.mjs +0 -10
- package/esm2022/lib/editor/gadgets/font-metrics/editor-version.const.mjs +0 -2
- package/esm2022/lib/editor/gadgets/font-metrics/font-metric-size.interface.mjs +0 -2
- package/esm2022/lib/editor/gadgets/font-metrics/font-metrics.helper.mjs +0 -88
- package/esm2022/lib/editor/gadgets/history/operation-history.mjs +0 -208
- package/esm2022/lib/editor/gadgets/history/operation.type.mjs +0 -2
- package/esm2022/lib/editor/gadgets/history/operations-history-info.model.mjs +0 -7
- package/esm2022/lib/editor/gadgets/numbering/numbering-data.model.mjs +0 -9
- package/esm2022/lib/editor/gadgets/numbering/numbering-marker-type.enum.mjs +0 -12
- package/esm2022/lib/editor/gadgets/numbering/numbering-paragraph-style.model.mjs +0 -13
- package/esm2022/lib/editor/gadgets/numbering/numbering.helper.mjs +0 -149
- package/esm2022/lib/editor/gadgets/page-break/break-types.enum.mjs +0 -7
- package/esm2022/lib/editor/gadgets/page-break/break.helper.mjs +0 -18
- package/esm2022/lib/editor/gadgets/scrollbar.mjs +0 -86
- package/esm2022/lib/editor/gadgets/search/replace.interface.mjs +0 -2
- package/esm2022/lib/editor/gadgets/search/search-iteration.interface.mjs +0 -2
- package/esm2022/lib/editor/gadgets/search/search.mjs +0 -231
- package/esm2022/lib/editor/gadgets/unicode/unicode-chars.const.mjs +0 -5
- package/esm2022/lib/editor/gadgets/unicode/unicode.helper.mjs +0 -20
- package/esm2022/lib/editor/interaction/base.handler.mjs +0 -19
- package/esm2022/lib/editor/interaction/document.handler.mjs +0 -27
- package/esm2022/lib/editor/interaction/editor.service.mjs +0 -386
- package/esm2022/lib/editor/interaction/input.handler.mjs +0 -152
- package/esm2022/lib/editor/interaction/mode.enum.mjs +0 -7
- package/esm2022/lib/editor/interaction/mouse-button.enum.mjs +0 -7
- package/esm2022/lib/editor/interaction/mouse.handler.mjs +0 -50
- package/esm2022/lib/editor/interaction/text-input.mjs +0 -53
- package/esm2022/lib/editor/operations/commands.service.mjs +0 -20
- package/esm2022/lib/editor/operations/enums/command-type.enum.mjs +0 -32
- package/esm2022/lib/editor/operations/enums/target-type.enum.mjs +0 -7
- package/esm2022/lib/editor/operations/helpers/break-operations.helper.mjs +0 -9
- package/esm2022/lib/editor/operations/helpers/content-operations.helper.mjs +0 -15
- package/esm2022/lib/editor/operations/helpers/format-operations.helper.mjs +0 -85
- package/esm2022/lib/editor/operations/helpers/image-operations.helper.mjs +0 -19
- package/esm2022/lib/editor/operations/helpers/indexed-element-operations.helper.mjs +0 -43
- package/esm2022/lib/editor/operations/helpers/link-operations.helper.mjs +0 -136
- package/esm2022/lib/editor/operations/helpers/numbering-operations.helper.mjs +0 -55
- package/esm2022/lib/editor/operations/helpers/paragraph-operations.helper.mjs +0 -114
- package/esm2022/lib/editor/operations/helpers/tab-operations.helper.mjs +0 -16
- package/esm2022/lib/editor/operations/helpers/table-operations.helper.mjs +0 -374
- package/esm2022/lib/editor/operations/operations-helper.helper.mjs +0 -438
- package/esm2022/lib/editor/operations/save-commands.helper.mjs +0 -128
- package/esm2022/lib/editor/operations/target-operations.helper.mjs +0 -23
- package/esm2022/lib/editor/positioning/alignments.const.mjs +0 -8
- package/esm2022/lib/editor/positioning/content.helper.mjs +0 -45
- package/esm2022/lib/editor/positioning/cursor-paragraph.mjs +0 -13
- package/esm2022/lib/editor/positioning/cursor-position.interface.mjs +0 -2
- package/esm2022/lib/editor/positioning/insert-index.interface.mjs +0 -2
- package/esm2022/lib/editor/positioning/line-width.helper.mjs +0 -13
- package/esm2022/lib/editor/positioning/position.helper.mjs +0 -210
- package/esm2022/lib/editor/positioning/range.mjs +0 -94
- package/esm2022/lib/editor/positioning/selection.mjs +0 -351
- package/esm2022/lib/editor/revision.helper.mjs +0 -94
- package/esm2022/lib/models/generated/add-numbering.model.mjs +0 -8
- package/esm2022/lib/models/generated/apply-element-style.model.mjs +0 -8
- package/esm2022/lib/models/generated/apply-image-style.model.mjs +0 -8
- package/esm2022/lib/models/generated/apply-paragraph-style.model.mjs +0 -12
- package/esm2022/lib/models/generated/apply-text-style.model.mjs +0 -12
- package/esm2022/lib/models/generated/borders-style.model.mjs +0 -8
- package/esm2022/lib/models/generated/break.model.mjs +0 -8
- package/esm2022/lib/models/generated/cell.model.mjs +0 -12
- package/esm2022/lib/models/generated/column-section.model.mjs +0 -8
- package/esm2022/lib/models/generated/column.model.mjs +0 -8
- package/esm2022/lib/models/generated/command.model.mjs +0 -120
- package/esm2022/lib/models/generated/delete.model.mjs +0 -8
- package/esm2022/lib/models/generated/document-name.model.mjs +0 -8
- package/esm2022/lib/models/generated/document.model.mjs +0 -8
- package/esm2022/lib/models/generated/docx.model.mjs +0 -12
- package/esm2022/lib/models/generated/edge-target.model.mjs +0 -8
- package/esm2022/lib/models/generated/edge.model.mjs +0 -8
- package/esm2022/lib/models/generated/element.model.mjs +0 -8
- package/esm2022/lib/models/generated/file-source.model.mjs +0 -8
- package/esm2022/lib/models/generated/format.model.mjs +0 -12
- package/esm2022/lib/models/generated/heading.model.mjs +0 -16
- package/esm2022/lib/models/generated/image-data.model.mjs +0 -8
- package/esm2022/lib/models/generated/image.model.mjs +0 -12
- package/esm2022/lib/models/generated/insert-break.model.mjs +0 -8
- package/esm2022/lib/models/generated/insert-element.model.mjs +0 -12
- package/esm2022/lib/models/generated/insert-image.model.mjs +0 -12
- package/esm2022/lib/models/generated/insert-link.model.mjs +0 -12
- package/esm2022/lib/models/generated/insert-paragraph.model.mjs +0 -20
- package/esm2022/lib/models/generated/insert-styled-text.model.mjs +0 -12
- package/esm2022/lib/models/generated/insert-tab.model.mjs +0 -8
- package/esm2022/lib/models/generated/insert-table-columns.model.mjs +0 -8
- package/esm2022/lib/models/generated/insert-table-rows.model.mjs +0 -8
- package/esm2022/lib/models/generated/insert-table.model.mjs +0 -8
- package/esm2022/lib/models/generated/insert-text.model.mjs +0 -8
- package/esm2022/lib/models/generated/last-document-revision.model.mjs +0 -12
- package/esm2022/lib/models/generated/link-data.model.mjs +0 -8
- package/esm2022/lib/models/generated/link.model.mjs +0 -8
- package/esm2022/lib/models/generated/margins.model.mjs +0 -8
- package/esm2022/lib/models/generated/numbering-level.model.mjs +0 -12
- package/esm2022/lib/models/generated/numbering.model.mjs +0 -8
- package/esm2022/lib/models/generated/operation.model.mjs +0 -12
- package/esm2022/lib/models/generated/page-numbers.model.mjs +0 -8
- package/esm2022/lib/models/generated/paragraph-style.model.mjs +0 -8
- package/esm2022/lib/models/generated/paragraph.model.mjs +0 -12
- package/esm2022/lib/models/generated/remove-numberings.model.mjs +0 -8
- package/esm2022/lib/models/generated/remove-table-columns.model.mjs +0 -8
- package/esm2022/lib/models/generated/remove-table-rows.model.mjs +0 -8
- package/esm2022/lib/models/generated/replace-by-text.model.mjs +0 -8
- package/esm2022/lib/models/generated/replace.model.mjs +0 -44
- package/esm2022/lib/models/generated/resize-table-columns.model.mjs +0 -8
- package/esm2022/lib/models/generated/restore-numberings.model.mjs +0 -8
- package/esm2022/lib/models/generated/restore-paragraph-styles.model.mjs +0 -8
- package/esm2022/lib/models/generated/restore-table.model.mjs +0 -12
- package/esm2022/lib/models/generated/restore-text-styles.model.mjs +0 -8
- package/esm2022/lib/models/generated/restore.model.mjs +0 -8
- package/esm2022/lib/models/generated/revision.model.mjs +0 -12
- package/esm2022/lib/models/generated/row.model.mjs +0 -8
- package/esm2022/lib/models/generated/tab.model.mjs +0 -8
- package/esm2022/lib/models/generated/table-cell.model.mjs +0 -8
- package/esm2022/lib/models/generated/table.model.mjs +0 -12
- package/esm2022/lib/models/generated/target.model.mjs +0 -16
- package/esm2022/lib/models/generated/text-style.model.mjs +0 -8
- package/esm2022/lib/translate/noder-translate.loader.mjs +0 -22
- package/esm2022/public-api.mjs +0 -54
- package/esm2022/talrace-ngx-noder.mjs +0 -5
|
@@ -1,226 +0,0 @@
|
|
|
1
|
-
import { DistanceModel } from '../../execution/distance.model';
|
|
2
|
-
import { DomHelper } from '../../execution/helpers/dom.helper';
|
|
3
|
-
import { EdgeElementModel } from '../../components/edges/edge-element.model';
|
|
4
|
-
import { EdgeType } from '../../components/edges/edge-type.enum';
|
|
5
|
-
import { FormatExtModel } from '../../content/display-data/format-ext.model';
|
|
6
|
-
import { FormatStyleHelper } from '../../execution/helpers/format-style.helper';
|
|
7
|
-
import { Lines } from '../../content/display-data/lines';
|
|
8
|
-
import { ParagraphHelper } from '../../execution/helpers/paragraph.helper';
|
|
9
|
-
import { RenderingHelper } from '../rendering.helper';
|
|
10
|
-
export class TextLayer {
|
|
11
|
-
constructor(parentElement, session, renderingHelper = RenderingHelper) {
|
|
12
|
-
this.parentElement = parentElement;
|
|
13
|
-
this.session = session;
|
|
14
|
-
this.renderingHelper = renderingHelper;
|
|
15
|
-
this.edgeElements = [];
|
|
16
|
-
this.pagesCountChangedHandler = (event) => {
|
|
17
|
-
this.lines.setSizes(event.pagesCount, event.pageHeight);
|
|
18
|
-
};
|
|
19
|
-
this.element = document.createElement('div');
|
|
20
|
-
this.element.className = 'noder-layer noder-text-layer';
|
|
21
|
-
this.parentElement.appendChild(this.element);
|
|
22
|
-
this.lines = new Lines(this.element);
|
|
23
|
-
this.session.displayData.addEventListener('pagesCountChanged', this.pagesCountChangedHandler);
|
|
24
|
-
this.element.style.width = `${this.session.displayData.pageWidth}px`;
|
|
25
|
-
}
|
|
26
|
-
destroy() {
|
|
27
|
-
this.session.displayData.removeEventListener('pagesCountChanged', this.pagesCountChangedHandler);
|
|
28
|
-
}
|
|
29
|
-
updateEdge(type, pageType) {
|
|
30
|
-
const pages = [];
|
|
31
|
-
let index = this.edgeElements.findIndex(x => x.isCopy(type, pageType));
|
|
32
|
-
while (index !== -1) {
|
|
33
|
-
pages.push(this.edgeElements[index].page);
|
|
34
|
-
DomHelper.removeElement(this.edgeElements[index].container);
|
|
35
|
-
this.edgeElements.splice(index, 1);
|
|
36
|
-
index = this.edgeElements.findIndex(x => x.isCopy(type, pageType));
|
|
37
|
-
}
|
|
38
|
-
const start = -this.element.offsetTop;
|
|
39
|
-
const end = start + this.parentElement.clientHeight;
|
|
40
|
-
for (let page of pages) {
|
|
41
|
-
if (type === EdgeType.Header) {
|
|
42
|
-
this.renderPageHeaderComponent(page, start, end);
|
|
43
|
-
}
|
|
44
|
-
else {
|
|
45
|
-
this.renderPageFooterComponent(page, start, end);
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
let origin = this.edgeElements.find(x => x.isNotCopy(type, pageType));
|
|
49
|
-
if (origin) {
|
|
50
|
-
const edge = this.session.customComponents.edges.getComponentByPageType(pageType, type);
|
|
51
|
-
const height = this.session.customComponents.edges.getComponentHeight(edge.instance);
|
|
52
|
-
const topOffset = type === EdgeType.Footer ? this.session.displayData.pageHeight - height : 0;
|
|
53
|
-
const edgeTop = this.getEdgeTop(topOffset, origin.page);
|
|
54
|
-
DomHelper.setStyle(origin.container.style, 'height', `${height}px`);
|
|
55
|
-
DomHelper.setStyle(origin.container.style, 'top', `${edgeTop}px`);
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
updateEdges(config) {
|
|
59
|
-
DomHelper.translate(this.element, 0, -config.scrollTop);
|
|
60
|
-
while (this.edgeElements.length) {
|
|
61
|
-
const removed = this.edgeElements.pop();
|
|
62
|
-
DomHelper.removeElement(removed.container);
|
|
63
|
-
}
|
|
64
|
-
const start = -this.element.offsetTop;
|
|
65
|
-
const end = start + this.parentElement.clientHeight;
|
|
66
|
-
for (let page of config.pages) {
|
|
67
|
-
this.renderPageHeaderComponent(page, start, end);
|
|
68
|
-
this.renderPageFooterComponent(page, start, end);
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
scrollEdges(config) {
|
|
72
|
-
DomHelper.translate(this.element, 0, -config.scrollTop);
|
|
73
|
-
const start = -this.element.offsetTop;
|
|
74
|
-
const end = start + this.parentElement.clientHeight;
|
|
75
|
-
let removeIndex = this.edgeElements.findIndex(x => !x.isWithin(start, end));
|
|
76
|
-
while (removeIndex !== -1) {
|
|
77
|
-
const element = this.edgeElements[removeIndex];
|
|
78
|
-
if (element.isOrigin) {
|
|
79
|
-
const copy = this.edgeElements.find(x => x.isCopy(element.edgeType, element.pageType));
|
|
80
|
-
if (copy) {
|
|
81
|
-
copy.substitute(element);
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
DomHelper.removeElement(this.edgeElements[removeIndex].container);
|
|
85
|
-
this.edgeElements.splice(removeIndex, 1);
|
|
86
|
-
removeIndex = this.edgeElements.findIndex(x => !x.isWithin(start, end));
|
|
87
|
-
}
|
|
88
|
-
for (let page of config.pages) {
|
|
89
|
-
if (!this.edgeElements.some(x => x.page === page && x.edgeType === EdgeType.Header)) {
|
|
90
|
-
this.renderPageHeaderComponent(page, start, end);
|
|
91
|
-
}
|
|
92
|
-
if (!this.edgeElements.some(x => x.page === page && x.edgeType === EdgeType.Footer)) {
|
|
93
|
-
this.renderPageFooterComponent(page, start, end);
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
updateLines(config) {
|
|
98
|
-
DomHelper.translate(this.element, 0, -config.scrollTop);
|
|
99
|
-
this.config = config;
|
|
100
|
-
while (this.lines.length) {
|
|
101
|
-
this.lines.pop();
|
|
102
|
-
}
|
|
103
|
-
this.lines.push(this.renderTextParagraph(config.contentRange));
|
|
104
|
-
}
|
|
105
|
-
scrollLines(config) {
|
|
106
|
-
const oldConfig = this.config;
|
|
107
|
-
this.config = config;
|
|
108
|
-
DomHelper.translate(this.element, 0, -config.scrollTop);
|
|
109
|
-
const oldLastRow = oldConfig ? oldConfig.contentRange.end : -1;
|
|
110
|
-
if (!oldConfig || oldLastRow < config.contentRange.start || config.contentRange.end < oldConfig.contentRange.start) {
|
|
111
|
-
return this.updateLines(config);
|
|
112
|
-
}
|
|
113
|
-
if (oldConfig.contentRange.start < config.contentRange.start) {
|
|
114
|
-
for (let row = config.contentRange.start - oldConfig.contentRange.start; row > 0; row--) {
|
|
115
|
-
this.lines.shift();
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
if (oldConfig.contentRange.end > config.contentRange.end) {
|
|
119
|
-
for (let row = oldConfig.contentRange.end - config.contentRange.end; row > 0; row--) {
|
|
120
|
-
this.lines.pop();
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
if (oldConfig.contentRange.start > config.contentRange.start) {
|
|
124
|
-
const lines = this.renderTextParagraph(new DistanceModel({ start: config.contentRange.start, end: oldConfig.contentRange.start - 1 }));
|
|
125
|
-
this.lines.unshift(lines);
|
|
126
|
-
}
|
|
127
|
-
if (oldConfig.contentRange.end < config.contentRange.end) {
|
|
128
|
-
const lines = this.renderTextParagraph(new DistanceModel({ start: oldConfig.contentRange.end + 1, end: config.contentRange.end }));
|
|
129
|
-
this.lines.push(lines);
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
getParagraphTop(row) {
|
|
133
|
-
return this.session.displayData.getDistanceFromTop(row);
|
|
134
|
-
}
|
|
135
|
-
getEdgeTop(topOffset, page) {
|
|
136
|
-
const paragraphTop = this.session.displayData.pagesSpace + topOffset;
|
|
137
|
-
return paragraphTop + (page - 1) * (this.session.displayData.pageHeight + this.session.displayData.pagesSpace);
|
|
138
|
-
}
|
|
139
|
-
renderPageHeaderComponent(page, start, end) {
|
|
140
|
-
const header = this.session.customComponents.edges.getComponentByPage(page, EdgeType.Header);
|
|
141
|
-
if (header) {
|
|
142
|
-
const height = this.session.customComponents.edges.getComponentHeight(header.instance);
|
|
143
|
-
const edgeTop = this.getEdgeTop(0, page);
|
|
144
|
-
if (edgeTop > end || edgeTop + height < start) {
|
|
145
|
-
return;
|
|
146
|
-
}
|
|
147
|
-
this.renderEdgeComponent(header, height, page, edgeTop);
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
renderPageFooterComponent(page, start, end) {
|
|
151
|
-
const footer = this.session.customComponents.edges.getComponentByPage(page, EdgeType.Footer);
|
|
152
|
-
if (footer) {
|
|
153
|
-
const height = this.session.customComponents.edges.getComponentHeight(footer.instance);
|
|
154
|
-
const topOffset = this.session.displayData.pageHeight - height;
|
|
155
|
-
const edgeTop = this.getEdgeTop(topOffset, page);
|
|
156
|
-
if (edgeTop > end || edgeTop + height < start) {
|
|
157
|
-
return;
|
|
158
|
-
}
|
|
159
|
-
this.renderEdgeComponent(footer, height, page, edgeTop);
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
renderEdgeComponent(component, edgeHeight, page, edgeTop) {
|
|
163
|
-
const container = RenderingHelper.createDivContainer('noder-edge-group');
|
|
164
|
-
DomHelper.setStyle(container.style, 'height', `${edgeHeight}px`);
|
|
165
|
-
DomHelper.setStyle(container.style, 'top', `${edgeTop}px`);
|
|
166
|
-
const componentElement = component.hostView.rootNodes[0];
|
|
167
|
-
const edge = component.instance;
|
|
168
|
-
const isOrigin = !this.edgeElements.some(x => x.isNotCopy(edge.type, edge.model.pageType));
|
|
169
|
-
const element = isOrigin ? componentElement : componentElement.cloneNode(true);
|
|
170
|
-
container.appendChild(element);
|
|
171
|
-
this.element.appendChild(container);
|
|
172
|
-
const model = new EdgeElementModel({ page, container, pageType: edge.model.pageType, edgeType: edge.type, isOrigin });
|
|
173
|
-
this.edgeElements.push(model);
|
|
174
|
-
if (!isOrigin) {
|
|
175
|
-
element.onmouseenter = () => model.replace(this.edgeElements.find(x => x.isNotCopy(model.edgeType, model.pageType)));
|
|
176
|
-
}
|
|
177
|
-
}
|
|
178
|
-
renderTextParagraph(rowsDistance) {
|
|
179
|
-
const fragment = [];
|
|
180
|
-
for (let row = rowsDistance.start; row <= rowsDistance.end; row++) {
|
|
181
|
-
const paragraphCell = this.lines.createCell(row);
|
|
182
|
-
paragraphCell.element.className = 'noder-line-group';
|
|
183
|
-
DomHelper.removeChildren(paragraphCell.element);
|
|
184
|
-
const paragraphHeight = this.session.displayData.getParagraphHeight(row);
|
|
185
|
-
const paragraphTop = this.getParagraphTop(row);
|
|
186
|
-
DomHelper.setStyle(paragraphCell.element.style, 'height', `${paragraphHeight}px`);
|
|
187
|
-
DomHelper.setStyle(paragraphCell.element.style, 'top', `${paragraphTop}px`);
|
|
188
|
-
DomHelper.setStyle(paragraphCell.element.style, 'padding-left', `${this.session.displayData.pageMargin.left}px`);
|
|
189
|
-
DomHelper.setStyle(paragraphCell.element.style, 'padding-right', `${this.session.displayData.pageMargin.right}px`);
|
|
190
|
-
const paragraphSettings = this.session.displayData.getParagraphSettings(row);
|
|
191
|
-
if (paragraphSettings.numberingData.numberingId !== null) {
|
|
192
|
-
const numberingElement = this.renderingHelper.renderNumberingMarker(paragraphSettings, this.element, this.session.generalProperties.scalingRatio);
|
|
193
|
-
numberingElement.className = 'numberingMarker';
|
|
194
|
-
paragraphCell.element.appendChild(numberingElement);
|
|
195
|
-
}
|
|
196
|
-
this.renderTextLines(paragraphCell.element, row);
|
|
197
|
-
fragment.push(paragraphCell);
|
|
198
|
-
}
|
|
199
|
-
return fragment;
|
|
200
|
-
}
|
|
201
|
-
renderTextLines(parent, row) {
|
|
202
|
-
const linesContainerElement = this.renderingHelper.createDivContainer('lines-container');
|
|
203
|
-
const paragraphSettings = this.session.displayData.getParagraphSettings(row);
|
|
204
|
-
const paragraphHeight = ParagraphHelper.getParagraphHeight(paragraphSettings.textLinesInfo);
|
|
205
|
-
DomHelper.setStyle(linesContainerElement.style, 'height', `${paragraphHeight}px`);
|
|
206
|
-
parent.appendChild(linesContainerElement);
|
|
207
|
-
const startIndex = this.session.displayData.positionToIndex({ row, column: 0 });
|
|
208
|
-
const endIndex = this.session.displayData.positionToIndex({ row: row + 1, column: 0 }) - 1;
|
|
209
|
-
const combinedFormats = FormatStyleHelper.combineSection(this.session.model.formats, this.session.model.links, startIndex, endIndex).map(x => new FormatExtModel({ ...x, content: this.session.model.content.substring(x.startIndex, x.endIndex + 1) }));
|
|
210
|
-
const splits = this.session.displayData.paragraphs[row].nextLineIndexes;
|
|
211
|
-
if (splits?.length) {
|
|
212
|
-
const distance = new DistanceModel({ start: startIndex, end: endIndex });
|
|
213
|
-
this.renderingHelper.renderContentWrappedLine({ currentElement: this.element, parentNode: linesContainerElement }, splits, paragraphSettings, combinedFormats, distance, this.session.customContentService, this.session.customComponents, this.session.generalProperties.scalingRatio, this.session.model.breaks);
|
|
214
|
-
}
|
|
215
|
-
else {
|
|
216
|
-
const numberingOffsetLeft = paragraphSettings.numberingData.numberingId === null
|
|
217
|
-
? 0
|
|
218
|
-
: paragraphSettings.numberingData.width + paragraphSettings.numberingData.paddingLeft;
|
|
219
|
-
const lastLineEl = this.renderingHelper.createLineElement(paragraphSettings.textLinesInfo[0], numberingOffsetLeft, this.session.generalProperties.scalingRatio);
|
|
220
|
-
linesContainerElement.appendChild(lastLineEl);
|
|
221
|
-
const rowDistance = new DistanceModel({ start: startIndex, end: endIndex });
|
|
222
|
-
this.renderingHelper.renderContentSimpleLine({ currentElement: this.element, parentNode: lastLineEl }, combinedFormats, rowDistance, this.session.customContentService, this.session.customComponents, this.session.model.breaks);
|
|
223
|
-
}
|
|
224
|
-
}
|
|
225
|
-
}
|
|
226
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dC5sYXllci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1ub2Rlci9zcmMvbGliL2VkaXRvci9kaXNwbGF5L2xheWVycy90ZXh0LmxheWVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUMvRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDL0QsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDN0UsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBRWpFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUM3RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUVoRixPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFHekQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUV0RCxNQUFNLE9BQU8sU0FBUztJQVNsQixZQUFvQixhQUEwQixFQUFZLE9BQW9CLEVBQVUsa0JBQWtCLGVBQWU7UUFBckcsa0JBQWEsR0FBYixhQUFhLENBQWE7UUFBWSxZQUFPLEdBQVAsT0FBTyxDQUFhO1FBQVUsb0JBQWUsR0FBZixlQUFlLENBQWtCO1FBRnpILGlCQUFZLEdBQXVCLEVBQUUsQ0FBQztRQWdSOUIsNkJBQXdCLEdBQUcsQ0FBQyxLQUFpRCxFQUFFLEVBQUU7WUFDckYsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDNUQsQ0FBQyxDQUFDO1FBL1FFLElBQUksQ0FBQyxPQUFPLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM3QyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsR0FBRyw4QkFBOEIsQ0FBQztRQUN4RCxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFN0MsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFckMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLENBQUMsbUJBQW1CLEVBQUUsSUFBSSxDQUFDLHdCQUF3QixDQUFDLENBQUM7UUFDOUYsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsU0FBUyxJQUFJLENBQUM7SUFDekUsQ0FBQztJQUVELE9BQU87UUFDSCxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxtQkFBbUIsQ0FBQyxtQkFBbUIsRUFBRSxJQUFJLENBQUMsd0JBQXdCLENBQUMsQ0FBQztJQUNyRyxDQUFDO0lBRUQsVUFBVSxDQUFDLElBQWMsRUFBRSxRQUFrQjtRQUN6QyxNQUFNLEtBQUssR0FBYSxFQUFFLENBQUM7UUFDM0IsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBQ3ZFLE9BQU8sS0FBSyxLQUFLLENBQUMsQ0FBQyxFQUFFO1lBQ2pCLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMxQyxTQUFTLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDNUQsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ25DLEtBQUssR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUM7U0FDdEU7UUFDRCxNQUFNLEtBQUssR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDO1FBQ3RDLE1BQU0sR0FBRyxHQUFHLEtBQUssR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQztRQUNwRCxLQUFLLElBQUksSUFBSSxJQUFJLEtBQUssRUFBRTtZQUNwQixJQUFJLElBQUksS0FBSyxRQUFRLENBQUMsTUFBTSxFQUFFO2dCQUMxQixJQUFJLENBQUMseUJBQXlCLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQzthQUNwRDtpQkFBTTtnQkFDSCxJQUFJLENBQUMseUJBQXlCLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQzthQUNwRDtTQUNKO1FBQ0QsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBQ3RFLElBQUksTUFBTSxFQUFFO1lBQ1IsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsc0JBQXNCLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ3hGLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNyRixNQUFNLFNBQVMsR0FBRyxJQUFJLEtBQUssUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzlGLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN4RCxTQUFTLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxHQUFHLE1BQU0sSUFBSSxDQUFDLENBQUM7WUFDcEUsU0FBUyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsR0FBRyxPQUFPLElBQUksQ0FBQyxDQUFDO1NBQ3JFO0lBQ0wsQ0FBQztJQUVELFdBQVcsQ0FBQyxNQUFvQjtRQUM1QixTQUFTLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3hELE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUU7WUFDN0IsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUN4QyxTQUFTLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztTQUM5QztRQUVELE1BQU0sS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUM7UUFDdEMsTUFBTSxHQUFHLEdBQUcsS0FBSyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDO1FBQ3BELEtBQUssSUFBSSxJQUFJLElBQUksTUFBTSxDQUFDLEtBQUssRUFBRTtZQUMzQixJQUFJLENBQUMseUJBQXlCLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztZQUNqRCxJQUFJLENBQUMseUJBQXlCLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztTQUNwRDtJQUNMLENBQUM7SUFFRCxXQUFXLENBQUMsTUFBb0I7UUFDNUIsU0FBUyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUV4RCxNQUFNLEtBQUssR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDO1FBQ3RDLE1BQU0sR0FBRyxHQUFHLEtBQUssR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQztRQUNwRCxJQUFJLFdBQVcsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUM1RSxPQUFPLFdBQVcsS0FBSyxDQUFDLENBQUMsRUFBRTtZQUN2QixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQy9DLElBQUksT0FBTyxDQUFDLFFBQVEsRUFBRTtnQkFDbEIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7Z0JBQ3ZGLElBQUksSUFBSSxFQUFFO29CQUNOLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7aUJBQzVCO2FBQ0o7WUFDRCxTQUFTLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDbEUsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3pDLFdBQVcsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztTQUMzRTtRQUVELEtBQUssSUFBSSxJQUFJLElBQUksTUFBTSxDQUFDLEtBQUssRUFBRTtZQUMzQixJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLElBQUksSUFBSSxDQUFDLENBQUMsUUFBUSxLQUFLLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRTtnQkFDakYsSUFBSSxDQUFDLHlCQUF5QixDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7YUFDcEQ7WUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLElBQUksSUFBSSxDQUFDLENBQUMsUUFBUSxLQUFLLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRTtnQkFDakYsSUFBSSxDQUFDLHlCQUF5QixDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7YUFDcEQ7U0FDSjtJQUNMLENBQUM7SUFFRCxXQUFXLENBQUMsTUFBb0I7UUFDNUIsU0FBUyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN4RCxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUNyQixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFO1lBQ3RCLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUM7U0FDcEI7UUFFRCxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7SUFDbkUsQ0FBQztJQUVELFdBQVcsQ0FBQyxNQUFvQjtRQUM1QixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQzlCLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3JCLFNBQVMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFeEQsTUFBTSxVQUFVLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFL0QsSUFBSSxDQUFDLFNBQVMsSUFBSSxVQUFVLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxLQUFLLElBQUksTUFBTSxDQUFDLFlBQVksQ0FBQyxHQUFHLEdBQUcsU0FBUyxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUU7WUFDaEgsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ25DO1FBRUQsSUFBSSxTQUFTLENBQUMsWUFBWSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRTtZQUMxRCxLQUFLLElBQUksR0FBRyxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsS0FBSyxHQUFHLFNBQVMsQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLEdBQUcsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUU7Z0JBQ3JGLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7YUFDdEI7U0FDSjtRQUVELElBQUksU0FBUyxDQUFDLFlBQVksQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUU7WUFDdEQsS0FBSyxJQUFJLEdBQUcsR0FBRyxTQUFTLENBQUMsWUFBWSxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFO2dCQUNqRixJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO2FBQ3BCO1NBQ0o7UUFFRCxJQUFJLFNBQVMsQ0FBQyxZQUFZLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFO1lBQzFELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FDbEMsSUFBSSxhQUFhLENBQUMsRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLFNBQVMsQ0FBQyxZQUFZLENBQUMsS0FBSyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQ2pHLENBQUM7WUFDRixJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUM3QjtRQUVELElBQUksU0FBUyxDQUFDLFlBQVksQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUU7WUFDdEQsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUNsQyxJQUFJLGFBQWEsQ0FBQyxFQUFFLEtBQUssRUFBRSxTQUFTLENBQUMsWUFBWSxDQUFDLEdBQUcsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLE1BQU0sQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FDN0YsQ0FBQztZQUNGLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQzFCO0lBQ0wsQ0FBQztJQUVTLGVBQWUsQ0FBQyxHQUFXO1FBQ2pDLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUVPLFVBQVUsQ0FBQyxTQUFpQixFQUFFLElBQVk7UUFDOUMsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQztRQUNyRSxPQUFPLFlBQVksR0FBRyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNuSCxDQUFDO0lBRU8seUJBQXlCLENBQUMsSUFBWSxFQUFFLEtBQWEsRUFBRSxHQUFXO1FBQ3RFLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLGtCQUFrQixDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDN0YsSUFBSSxNQUFNLEVBQUU7WUFDUixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDdkYsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDekMsSUFBSSxPQUFPLEdBQUcsR0FBRyxJQUFJLE9BQU8sR0FBRyxNQUFNLEdBQUcsS0FBSyxFQUFFO2dCQUMzQyxPQUFPO2FBQ1Y7WUFDRCxJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7U0FDM0Q7SUFDTCxDQUFDO0lBRU8seUJBQXlCLENBQUMsSUFBWSxFQUFFLEtBQWEsRUFBRSxHQUFXO1FBQ3RFLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLGtCQUFrQixDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDN0YsSUFBSSxNQUFNLEVBQUU7WUFDUixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDdkYsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQztZQUMvRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUNqRCxJQUFJLE9BQU8sR0FBRyxHQUFHLElBQUksT0FBTyxHQUFHLE1BQU0sR0FBRyxLQUFLLEVBQUU7Z0JBQzNDLE9BQU87YUFDVjtZQUNELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztTQUMzRDtJQUNMLENBQUM7SUFFTyxtQkFBbUIsQ0FBQyxTQUEyQyxFQUFFLFVBQWtCLEVBQUUsSUFBWSxFQUFFLE9BQWU7UUFDdEgsTUFBTSxTQUFTLEdBQUcsZUFBZSxDQUFDLGtCQUFrQixDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDekUsU0FBUyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxHQUFHLFVBQVUsSUFBSSxDQUFDLENBQUM7UUFDakUsU0FBUyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxHQUFHLE9BQU8sSUFBSSxDQUFDLENBQUM7UUFFM0QsTUFBTSxnQkFBZ0IsR0FBSSxTQUFTLENBQUMsUUFBaUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFnQixDQUFDO1FBQ2xHLE1BQU0sSUFBSSxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUM7UUFDaEMsTUFBTSxRQUFRLEdBQUcsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQW9CLENBQUMsQ0FBQyxDQUFDO1FBQ3ZHLE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFFLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQWlCLENBQUM7UUFDaEcsU0FBUyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMvQixJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNwQyxNQUFNLEtBQUssR0FBRyxJQUFJLGdCQUFnQixDQUFDLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUN0SCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM5QixJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ1gsT0FBTyxDQUFDLFlBQVksR0FBRyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDeEg7SUFDTCxDQUFDO0lBRU8sbUJBQW1CLENBQUMsWUFBMkI7UUFDbkQsTUFBTSxRQUFRLEdBQVcsRUFBRSxDQUFDO1FBQzVCLEtBQUssSUFBSSxHQUFHLEdBQUcsWUFBWSxDQUFDLEtBQUssRUFBRSxHQUFHLElBQUksWUFBWSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRTtZQUMvRCxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNqRCxhQUFhLENBQUMsT0FBTyxDQUFDLFNBQVMsR0FBRyxrQkFBa0IsQ0FBQztZQUNyRCxTQUFTLENBQUMsY0FBYyxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNoRCxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN6RSxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQy9DLFNBQVMsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLEdBQUcsZUFBZSxJQUFJLENBQUMsQ0FBQztZQUNsRixTQUFTLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxHQUFHLFlBQVksSUFBSSxDQUFDLENBQUM7WUFDNUUsU0FBUyxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxjQUFjLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQztZQUNqSCxTQUFTLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLGVBQWUsRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDO1lBQ25ILE1BQU0saUJBQWlCLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsb0JBQW9CLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDN0UsSUFBSSxpQkFBaUIsQ0FBQyxhQUFhLENBQUMsV0FBVyxLQUFLLElBQUksRUFBRTtnQkFDdEQsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLHFCQUFxQixDQUMvRCxpQkFBaUIsRUFDakIsSUFBSSxDQUFDLE9BQU8sRUFDWixJQUFJLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLFlBQVksQ0FDOUMsQ0FBQztnQkFDRixnQkFBZ0IsQ0FBQyxTQUFTLEdBQUcsaUJBQWlCLENBQUM7Z0JBQy9DLGFBQWEsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLGdCQUFnQixDQUFDLENBQUM7YUFDdkQ7WUFFRCxJQUFJLENBQUMsZUFBZSxDQUFDLGFBQWEsQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDakQsUUFBUSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztTQUNoQztRQUVELE9BQU8sUUFBUSxDQUFDO0lBQ3BCLENBQUM7SUFFTyxlQUFlLENBQUMsTUFBWSxFQUFFLEdBQVc7UUFDN0MsTUFBTSxxQkFBcUIsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLGtCQUFrQixDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDekYsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM3RSxNQUFNLGVBQWUsR0FBRyxlQUFlLENBQUMsa0JBQWtCLENBQUMsaUJBQWlCLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDNUYsU0FBUyxDQUFDLFFBQVEsQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLEdBQUcsZUFBZSxJQUFJLENBQUMsQ0FBQztRQUNsRixNQUFNLENBQUMsV0FBVyxDQUFDLHFCQUFxQixDQUFDLENBQUM7UUFFMUMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUFDLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2hGLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMzRixNQUFNLGVBQWUsR0FBRyxpQkFBaUIsQ0FBQyxjQUFjLENBQ3BELElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFDMUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUN4QixVQUFVLEVBQ1YsUUFBUSxDQUNYLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxjQUFjLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDdEgsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLGVBQWUsQ0FBQztRQUN4RSxJQUFJLE1BQU0sRUFBRSxNQUFNLEVBQUU7WUFDaEIsTUFBTSxRQUFRLEdBQUcsSUFBSSxhQUFhLENBQUMsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO1lBQ3pFLElBQUksQ0FBQyxlQUFlLENBQUMsd0JBQXdCLENBQ3pDLEVBQUUsY0FBYyxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsVUFBVSxFQUFFLHFCQUFxQixFQUFFLEVBQ25FLE1BQU0sRUFDTixpQkFBaUIsRUFDakIsZUFBZSxFQUNmLFFBQVEsRUFDUixJQUFJLENBQUMsT0FBTyxDQUFDLG9CQUFvQixFQUNqQyxJQUFJLENBQUMsT0FBTyxDQUFDLGdCQUFnQixFQUM3QixJQUFJLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLFlBQVksRUFDM0MsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUM1QixDQUFDO1NBQ0w7YUFBTTtZQUNILE1BQU0sbUJBQW1CLEdBQ3JCLGlCQUFpQixDQUFDLGFBQWEsQ0FBQyxXQUFXLEtBQUssSUFBSTtnQkFDaEQsQ0FBQyxDQUFDLENBQUM7Z0JBQ0gsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLGFBQWEsQ0FBQyxLQUFLLEdBQUcsaUJBQWlCLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQztZQUM5RixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLGlCQUFpQixDQUNyRCxpQkFBaUIsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEVBQ2xDLG1CQUFtQixFQUNuQixJQUFJLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLFlBQVksQ0FDOUMsQ0FBQztZQUNGLHFCQUFxQixDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUM5QyxNQUFNLFdBQVcsR0FBRyxJQUFJLGFBQWEsQ0FBQyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7WUFDNUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyx1QkFBdUIsQ0FDeEMsRUFBRSxjQUFjLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLEVBQ3hELGVBQWUsRUFDZixXQUFXLEVBQ1gsSUFBSSxDQUFDLE9BQU8sQ0FBQyxvQkFBb0IsRUFDakMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsRUFDN0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUM1QixDQUFDO1NBQ0w7SUFDTCxDQUFDO0NBS0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnRSZWYsIEVtYmVkZGVkVmlld1JlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBDZWxsIH0gZnJvbSAnLi4vY2VsbC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgRGlzdGFuY2VNb2RlbCB9IGZyb20gJy4uLy4uL2V4ZWN1dGlvbi9kaXN0YW5jZS5tb2RlbCc7XG5pbXBvcnQgeyBEb21IZWxwZXIgfSBmcm9tICcuLi8uLi9leGVjdXRpb24vaGVscGVycy9kb20uaGVscGVyJztcbmltcG9ydCB7IEVkZ2VFbGVtZW50TW9kZWwgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2VkZ2VzL2VkZ2UtZWxlbWVudC5tb2RlbCc7XG5pbXBvcnQgeyBFZGdlVHlwZSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvZWRnZXMvZWRnZS10eXBlLmVudW0nO1xuaW1wb3J0IHsgRWRpdFNlc3Npb24gfSBmcm9tICcuLi8uLi9leGVjdXRpb24vZWRpdC5zZXNzaW9uJztcbmltcG9ydCB7IEZvcm1hdEV4dE1vZGVsIH0gZnJvbSAnLi4vLi4vY29udGVudC9kaXNwbGF5LWRhdGEvZm9ybWF0LWV4dC5tb2RlbCc7XG5pbXBvcnQgeyBGb3JtYXRTdHlsZUhlbHBlciB9IGZyb20gJy4uLy4uL2V4ZWN1dGlvbi9oZWxwZXJzL2Zvcm1hdC1zdHlsZS5oZWxwZXInO1xuaW1wb3J0IHsgSUxheWVyQ29uZmlnIH0gZnJvbSAnLi9sYXllci5jb25maWcnO1xuaW1wb3J0IHsgTGluZXMgfSBmcm9tICcuLi8uLi9jb250ZW50L2Rpc3BsYXktZGF0YS9saW5lcyc7XG5pbXBvcnQgeyBOb2RlckVkZ2VDb21wb25lbnQgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2VkZ2VzL2VkZ2UuY29tcG9uZW50JztcbmltcG9ydCB7IFBhZ2VUeXBlIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9lZGdlcy9wYWdlLXR5cGUuZW51bSc7XG5pbXBvcnQgeyBQYXJhZ3JhcGhIZWxwZXIgfSBmcm9tICcuLi8uLi9leGVjdXRpb24vaGVscGVycy9wYXJhZ3JhcGguaGVscGVyJztcbmltcG9ydCB7IFJlbmRlcmluZ0hlbHBlciB9IGZyb20gJy4uL3JlbmRlcmluZy5oZWxwZXInO1xuXG5leHBvcnQgY2xhc3MgVGV4dExheWVyIHtcbiAgICBlbGVtZW50OiBIVE1MRWxlbWVudDtcblxuICAgIGxpbmVzOiBMaW5lcztcblxuICAgIGNvbmZpZzogSUxheWVyQ29uZmlnO1xuXG4gICAgZWRnZUVsZW1lbnRzOiBFZGdlRWxlbWVudE1vZGVsW10gPSBbXTtcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgcGFyZW50RWxlbWVudDogSFRNTEVsZW1lbnQsIHByb3RlY3RlZCBzZXNzaW9uOiBFZGl0U2Vzc2lvbiwgcHJpdmF0ZSByZW5kZXJpbmdIZWxwZXIgPSBSZW5kZXJpbmdIZWxwZXIpIHtcbiAgICAgICAgdGhpcy5lbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgIHRoaXMuZWxlbWVudC5jbGFzc05hbWUgPSAnbm9kZXItbGF5ZXIgbm9kZXItdGV4dC1sYXllcic7XG4gICAgICAgIHRoaXMucGFyZW50RWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLmVsZW1lbnQpO1xuXG4gICAgICAgIHRoaXMubGluZXMgPSBuZXcgTGluZXModGhpcy5lbGVtZW50KTtcblxuICAgICAgICB0aGlzLnNlc3Npb24uZGlzcGxheURhdGEuYWRkRXZlbnRMaXN0ZW5lcigncGFnZXNDb3VudENoYW5nZWQnLCB0aGlzLnBhZ2VzQ291bnRDaGFuZ2VkSGFuZGxlcik7XG4gICAgICAgIHRoaXMuZWxlbWVudC5zdHlsZS53aWR0aCA9IGAke3RoaXMuc2Vzc2lvbi5kaXNwbGF5RGF0YS5wYWdlV2lkdGh9cHhgO1xuICAgIH1cblxuICAgIGRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2Vzc2lvbi5kaXNwbGF5RGF0YS5yZW1vdmVFdmVudExpc3RlbmVyKCdwYWdlc0NvdW50Q2hhbmdlZCcsIHRoaXMucGFnZXNDb3VudENoYW5nZWRIYW5kbGVyKTtcbiAgICB9XG5cbiAgICB1cGRhdGVFZGdlKHR5cGU6IEVkZ2VUeXBlLCBwYWdlVHlwZTogUGFnZVR5cGUpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcGFnZXM6IG51bWJlcltdID0gW107XG4gICAgICAgIGxldCBpbmRleCA9IHRoaXMuZWRnZUVsZW1lbnRzLmZpbmRJbmRleCh4ID0+IHguaXNDb3B5KHR5cGUsIHBhZ2VUeXBlKSk7XG4gICAgICAgIHdoaWxlIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgIHBhZ2VzLnB1c2godGhpcy5lZGdlRWxlbWVudHNbaW5kZXhdLnBhZ2UpO1xuICAgICAgICAgICAgRG9tSGVscGVyLnJlbW92ZUVsZW1lbnQodGhpcy5lZGdlRWxlbWVudHNbaW5kZXhdLmNvbnRhaW5lcik7XG4gICAgICAgICAgICB0aGlzLmVkZ2VFbGVtZW50cy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgICAgaW5kZXggPSB0aGlzLmVkZ2VFbGVtZW50cy5maW5kSW5kZXgoeCA9PiB4LmlzQ29weSh0eXBlLCBwYWdlVHlwZSkpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gLXRoaXMuZWxlbWVudC5vZmZzZXRUb3A7XG4gICAgICAgIGNvbnN0IGVuZCA9IHN0YXJ0ICsgdGhpcy5wYXJlbnRFbGVtZW50LmNsaWVudEhlaWdodDtcbiAgICAgICAgZm9yIChsZXQgcGFnZSBvZiBwYWdlcykge1xuICAgICAgICAgICAgaWYgKHR5cGUgPT09IEVkZ2VUeXBlLkhlYWRlcikge1xuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyUGFnZUhlYWRlckNvbXBvbmVudChwYWdlLCBzdGFydCwgZW5kKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJQYWdlRm9vdGVyQ29tcG9uZW50KHBhZ2UsIHN0YXJ0LCBlbmQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxldCBvcmlnaW4gPSB0aGlzLmVkZ2VFbGVtZW50cy5maW5kKHggPT4geC5pc05vdENvcHkodHlwZSwgcGFnZVR5cGUpKTtcbiAgICAgICAgaWYgKG9yaWdpbikge1xuICAgICAgICAgICAgY29uc3QgZWRnZSA9IHRoaXMuc2Vzc2lvbi5jdXN0b21Db21wb25lbnRzLmVkZ2VzLmdldENvbXBvbmVudEJ5UGFnZVR5cGUocGFnZVR5cGUsIHR5cGUpO1xuICAgICAgICAgICAgY29uc3QgaGVpZ2h0ID0gdGhpcy5zZXNzaW9uLmN1c3RvbUNvbXBvbmVudHMuZWRnZXMuZ2V0Q29tcG9uZW50SGVpZ2h0KGVkZ2UuaW5zdGFuY2UpO1xuICAgICAgICAgICAgY29uc3QgdG9wT2Zmc2V0ID0gdHlwZSA9PT0gRWRnZVR5cGUuRm9vdGVyID8gdGhpcy5zZXNzaW9uLmRpc3BsYXlEYXRhLnBhZ2VIZWlnaHQgLSBoZWlnaHQgOiAwO1xuICAgICAgICAgICAgY29uc3QgZWRnZVRvcCA9IHRoaXMuZ2V0RWRnZVRvcCh0b3BPZmZzZXQsIG9yaWdpbi5wYWdlKTtcbiAgICAgICAgICAgIERvbUhlbHBlci5zZXRTdHlsZShvcmlnaW4uY29udGFpbmVyLnN0eWxlLCAnaGVpZ2h0JywgYCR7aGVpZ2h0fXB4YCk7XG4gICAgICAgICAgICBEb21IZWxwZXIuc2V0U3R5bGUob3JpZ2luLmNvbnRhaW5lci5zdHlsZSwgJ3RvcCcsIGAke2VkZ2VUb3B9cHhgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHVwZGF0ZUVkZ2VzKGNvbmZpZzogSUxheWVyQ29uZmlnKTogdm9pZCB7XG4gICAgICAgIERvbUhlbHBlci50cmFuc2xhdGUodGhpcy5lbGVtZW50LCAwLCAtY29uZmlnLnNjcm9sbFRvcCk7XG4gICAgICAgIHdoaWxlICh0aGlzLmVkZ2VFbGVtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlbW92ZWQgPSB0aGlzLmVkZ2VFbGVtZW50cy5wb3AoKTtcbiAgICAgICAgICAgIERvbUhlbHBlci5yZW1vdmVFbGVtZW50KHJlbW92ZWQuY29udGFpbmVyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gLXRoaXMuZWxlbWVudC5vZmZzZXRUb3A7XG4gICAgICAgIGNvbnN0IGVuZCA9IHN0YXJ0ICsgdGhpcy5wYXJlbnRFbGVtZW50LmNsaWVudEhlaWdodDtcbiAgICAgICAgZm9yIChsZXQgcGFnZSBvZiBjb25maWcucGFnZXMpIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyUGFnZUhlYWRlckNvbXBvbmVudChwYWdlLCBzdGFydCwgZW5kKTtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyUGFnZUZvb3RlckNvbXBvbmVudChwYWdlLCBzdGFydCwgZW5kKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNjcm9sbEVkZ2VzKGNvbmZpZzogSUxheWVyQ29uZmlnKTogdm9pZCB7XG4gICAgICAgIERvbUhlbHBlci50cmFuc2xhdGUodGhpcy5lbGVtZW50LCAwLCAtY29uZmlnLnNjcm9sbFRvcCk7XG5cbiAgICAgICAgY29uc3Qgc3RhcnQgPSAtdGhpcy5lbGVtZW50Lm9mZnNldFRvcDtcbiAgICAgICAgY29uc3QgZW5kID0gc3RhcnQgKyB0aGlzLnBhcmVudEVsZW1lbnQuY2xpZW50SGVpZ2h0O1xuICAgICAgICBsZXQgcmVtb3ZlSW5kZXggPSB0aGlzLmVkZ2VFbGVtZW50cy5maW5kSW5kZXgoeCA9PiAheC5pc1dpdGhpbihzdGFydCwgZW5kKSk7XG4gICAgICAgIHdoaWxlIChyZW1vdmVJbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLmVkZ2VFbGVtZW50c1tyZW1vdmVJbmRleF07XG4gICAgICAgICAgICBpZiAoZWxlbWVudC5pc09yaWdpbikge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvcHkgPSB0aGlzLmVkZ2VFbGVtZW50cy5maW5kKHggPT4geC5pc0NvcHkoZWxlbWVudC5lZGdlVHlwZSwgZWxlbWVudC5wYWdlVHlwZSkpO1xuICAgICAgICAgICAgICAgIGlmIChjb3B5KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvcHkuc3Vic3RpdHV0ZShlbGVtZW50KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBEb21IZWxwZXIucmVtb3ZlRWxlbWVudCh0aGlzLmVkZ2VFbGVtZW50c1tyZW1vdmVJbmRleF0uY29udGFpbmVyKTtcbiAgICAgICAgICAgIHRoaXMuZWRnZUVsZW1lbnRzLnNwbGljZShyZW1vdmVJbmRleCwgMSk7XG4gICAgICAgICAgICByZW1vdmVJbmRleCA9IHRoaXMuZWRnZUVsZW1lbnRzLmZpbmRJbmRleCh4ID0+ICF4LmlzV2l0aGluKHN0YXJ0LCBlbmQpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAobGV0IHBhZ2Ugb2YgY29uZmlnLnBhZ2VzKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuZWRnZUVsZW1lbnRzLnNvbWUoeCA9PiB4LnBhZ2UgPT09IHBhZ2UgJiYgeC5lZGdlVHlwZSA9PT0gRWRnZVR5cGUuSGVhZGVyKSkge1xuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyUGFnZUhlYWRlckNvbXBvbmVudChwYWdlLCBzdGFydCwgZW5kKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghdGhpcy5lZGdlRWxlbWVudHMuc29tZSh4ID0+IHgucGFnZSA9PT0gcGFnZSAmJiB4LmVkZ2VUeXBlID09PSBFZGdlVHlwZS5Gb290ZXIpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJQYWdlRm9vdGVyQ29tcG9uZW50KHBhZ2UsIHN0YXJ0LCBlbmQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgdXBkYXRlTGluZXMoY29uZmlnOiBJTGF5ZXJDb25maWcpOiB2b2lkIHtcbiAgICAgICAgRG9tSGVscGVyLnRyYW5zbGF0ZSh0aGlzLmVsZW1lbnQsIDAsIC1jb25maWcuc2Nyb2xsVG9wKTtcbiAgICAgICAgdGhpcy5jb25maWcgPSBjb25maWc7XG4gICAgICAgIHdoaWxlICh0aGlzLmxpbmVzLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5saW5lcy5wb3AoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubGluZXMucHVzaCh0aGlzLnJlbmRlclRleHRQYXJhZ3JhcGgoY29uZmlnLmNvbnRlbnRSYW5nZSkpO1xuICAgIH1cblxuICAgIHNjcm9sbExpbmVzKGNvbmZpZzogSUxheWVyQ29uZmlnKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG9sZENvbmZpZyA9IHRoaXMuY29uZmlnO1xuICAgICAgICB0aGlzLmNvbmZpZyA9IGNvbmZpZztcbiAgICAgICAgRG9tSGVscGVyLnRyYW5zbGF0ZSh0aGlzLmVsZW1lbnQsIDAsIC1jb25maWcuc2Nyb2xsVG9wKTtcblxuICAgICAgICBjb25zdCBvbGRMYXN0Um93ID0gb2xkQ29uZmlnID8gb2xkQ29uZmlnLmNvbnRlbnRSYW5nZS5lbmQgOiAtMTtcblxuICAgICAgICBpZiAoIW9sZENvbmZpZyB8fCBvbGRMYXN0Um93IDwgY29uZmlnLmNvbnRlbnRSYW5nZS5zdGFydCB8fCBjb25maWcuY29udGVudFJhbmdlLmVuZCA8IG9sZENvbmZpZy5jb250ZW50UmFuZ2Uuc3RhcnQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnVwZGF0ZUxpbmVzKGNvbmZpZyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob2xkQ29uZmlnLmNvbnRlbnRSYW5nZS5zdGFydCA8IGNvbmZpZy5jb250ZW50UmFuZ2Uuc3RhcnQpIHtcbiAgICAgICAgICAgIGZvciAobGV0IHJvdyA9IGNvbmZpZy5jb250ZW50UmFuZ2Uuc3RhcnQgLSBvbGRDb25maWcuY29udGVudFJhbmdlLnN0YXJ0OyByb3cgPiAwOyByb3ctLSkge1xuICAgICAgICAgICAgICAgIHRoaXMubGluZXMuc2hpZnQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvbGRDb25maWcuY29udGVudFJhbmdlLmVuZCA+IGNvbmZpZy5jb250ZW50UmFuZ2UuZW5kKSB7XG4gICAgICAgICAgICBmb3IgKGxldCByb3cgPSBvbGRDb25maWcuY29udGVudFJhbmdlLmVuZCAtIGNvbmZpZy5jb250ZW50UmFuZ2UuZW5kOyByb3cgPiAwOyByb3ctLSkge1xuICAgICAgICAgICAgICAgIHRoaXMubGluZXMucG9wKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob2xkQ29uZmlnLmNvbnRlbnRSYW5nZS5zdGFydCA+IGNvbmZpZy5jb250ZW50UmFuZ2Uuc3RhcnQpIHtcbiAgICAgICAgICAgIGNvbnN0IGxpbmVzID0gdGhpcy5yZW5kZXJUZXh0UGFyYWdyYXBoKFxuICAgICAgICAgICAgICAgIG5ldyBEaXN0YW5jZU1vZGVsKHsgc3RhcnQ6IGNvbmZpZy5jb250ZW50UmFuZ2Uuc3RhcnQsIGVuZDogb2xkQ29uZmlnLmNvbnRlbnRSYW5nZS5zdGFydCAtIDEgfSlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLmxpbmVzLnVuc2hpZnQobGluZXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9sZENvbmZpZy5jb250ZW50UmFuZ2UuZW5kIDwgY29uZmlnLmNvbnRlbnRSYW5nZS5lbmQpIHtcbiAgICAgICAgICAgIGNvbnN0IGxpbmVzID0gdGhpcy5yZW5kZXJUZXh0UGFyYWdyYXBoKFxuICAgICAgICAgICAgICAgIG5ldyBEaXN0YW5jZU1vZGVsKHsgc3RhcnQ6IG9sZENvbmZpZy5jb250ZW50UmFuZ2UuZW5kICsgMSwgZW5kOiBjb25maWcuY29udGVudFJhbmdlLmVuZCB9KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMubGluZXMucHVzaChsaW5lcyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2V0UGFyYWdyYXBoVG9wKHJvdzogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2Vzc2lvbi5kaXNwbGF5RGF0YS5nZXREaXN0YW5jZUZyb21Ub3Aocm93KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEVkZ2VUb3AodG9wT2Zmc2V0OiBudW1iZXIsIHBhZ2U6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIGNvbnN0IHBhcmFncmFwaFRvcCA9IHRoaXMuc2Vzc2lvbi5kaXNwbGF5RGF0YS5wYWdlc1NwYWNlICsgdG9wT2Zmc2V0O1xuICAgICAgICByZXR1cm4gcGFyYWdyYXBoVG9wICsgKHBhZ2UgLSAxKSAqICh0aGlzLnNlc3Npb24uZGlzcGxheURhdGEucGFnZUhlaWdodCArIHRoaXMuc2Vzc2lvbi5kaXNwbGF5RGF0YS5wYWdlc1NwYWNlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlbmRlclBhZ2VIZWFkZXJDb21wb25lbnQocGFnZTogbnVtYmVyLCBzdGFydDogbnVtYmVyLCBlbmQ6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBjb25zdCBoZWFkZXIgPSB0aGlzLnNlc3Npb24uY3VzdG9tQ29tcG9uZW50cy5lZGdlcy5nZXRDb21wb25lbnRCeVBhZ2UocGFnZSwgRWRnZVR5cGUuSGVhZGVyKTtcbiAgICAgICAgaWYgKGhlYWRlcikge1xuICAgICAgICAgICAgY29uc3QgaGVpZ2h0ID0gdGhpcy5zZXNzaW9uLmN1c3RvbUNvbXBvbmVudHMuZWRnZXMuZ2V0Q29tcG9uZW50SGVpZ2h0KGhlYWRlci5pbnN0YW5jZSk7XG4gICAgICAgICAgICBjb25zdCBlZGdlVG9wID0gdGhpcy5nZXRFZGdlVG9wKDAsIHBhZ2UpO1xuICAgICAgICAgICAgaWYgKGVkZ2VUb3AgPiBlbmQgfHwgZWRnZVRvcCArIGhlaWdodCA8IHN0YXJ0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5yZW5kZXJFZGdlQ29tcG9uZW50KGhlYWRlciwgaGVpZ2h0LCBwYWdlLCBlZGdlVG9wKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcmVuZGVyUGFnZUZvb3RlckNvbXBvbmVudChwYWdlOiBudW1iZXIsIHN0YXJ0OiBudW1iZXIsIGVuZDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGZvb3RlciA9IHRoaXMuc2Vzc2lvbi5jdXN0b21Db21wb25lbnRzLmVkZ2VzLmdldENvbXBvbmVudEJ5UGFnZShwYWdlLCBFZGdlVHlwZS5Gb290ZXIpO1xuICAgICAgICBpZiAoZm9vdGVyKSB7XG4gICAgICAgICAgICBjb25zdCBoZWlnaHQgPSB0aGlzLnNlc3Npb24uY3VzdG9tQ29tcG9uZW50cy5lZGdlcy5nZXRDb21wb25lbnRIZWlnaHQoZm9vdGVyLmluc3RhbmNlKTtcbiAgICAgICAgICAgIGNvbnN0IHRvcE9mZnNldCA9IHRoaXMuc2Vzc2lvbi5kaXNwbGF5RGF0YS5wYWdlSGVpZ2h0IC0gaGVpZ2h0O1xuICAgICAgICAgICAgY29uc3QgZWRnZVRvcCA9IHRoaXMuZ2V0RWRnZVRvcCh0b3BPZmZzZXQsIHBhZ2UpO1xuICAgICAgICAgICAgaWYgKGVkZ2VUb3AgPiBlbmQgfHwgZWRnZVRvcCArIGhlaWdodCA8IHN0YXJ0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5yZW5kZXJFZGdlQ29tcG9uZW50KGZvb3RlciwgaGVpZ2h0LCBwYWdlLCBlZGdlVG9wKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcmVuZGVyRWRnZUNvbXBvbmVudChjb21wb25lbnQ6IENvbXBvbmVudFJlZjxOb2RlckVkZ2VDb21wb25lbnQ+LCBlZGdlSGVpZ2h0OiBudW1iZXIsIHBhZ2U6IG51bWJlciwgZWRnZVRvcDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IFJlbmRlcmluZ0hlbHBlci5jcmVhdGVEaXZDb250YWluZXIoJ25vZGVyLWVkZ2UtZ3JvdXAnKTtcbiAgICAgICAgRG9tSGVscGVyLnNldFN0eWxlKGNvbnRhaW5lci5zdHlsZSwgJ2hlaWdodCcsIGAke2VkZ2VIZWlnaHR9cHhgKTtcbiAgICAgICAgRG9tSGVscGVyLnNldFN0eWxlKGNvbnRhaW5lci5zdHlsZSwgJ3RvcCcsIGAke2VkZ2VUb3B9cHhgKTtcblxuICAgICAgICBjb25zdCBjb21wb25lbnRFbGVtZW50ID0gKGNvbXBvbmVudC5ob3N0VmlldyBhcyBFbWJlZGRlZFZpZXdSZWY8YW55Pikucm9vdE5vZGVzWzBdIGFzIEhUTUxFbGVtZW50O1xuICAgICAgICBjb25zdCBlZGdlID0gY29tcG9uZW50Lmluc3RhbmNlO1xuICAgICAgICBjb25zdCBpc09yaWdpbiA9ICF0aGlzLmVkZ2VFbGVtZW50cy5zb21lKHggPT4geC5pc05vdENvcHkoZWRnZS50eXBlLCBlZGdlLm1vZGVsLnBhZ2VUeXBlIGFzIFBhZ2VUeXBlKSk7XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSBpc09yaWdpbiA/IGNvbXBvbmVudEVsZW1lbnQgOiAoY29tcG9uZW50RWxlbWVudC5jbG9uZU5vZGUodHJ1ZSkgYXMgSFRNTEVsZW1lbnQpO1xuICAgICAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQoZWxlbWVudCk7XG4gICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChjb250YWluZXIpO1xuICAgICAgICBjb25zdCBtb2RlbCA9IG5ldyBFZGdlRWxlbWVudE1vZGVsKHsgcGFnZSwgY29udGFpbmVyLCBwYWdlVHlwZTogZWRnZS5tb2RlbC5wYWdlVHlwZSwgZWRnZVR5cGU6IGVkZ2UudHlwZSwgaXNPcmlnaW4gfSk7XG4gICAgICAgIHRoaXMuZWRnZUVsZW1lbnRzLnB1c2gobW9kZWwpO1xuICAgICAgICBpZiAoIWlzT3JpZ2luKSB7XG4gICAgICAgICAgICBlbGVtZW50Lm9ubW91c2VlbnRlciA9ICgpID0+IG1vZGVsLnJlcGxhY2UodGhpcy5lZGdlRWxlbWVudHMuZmluZCh4ID0+IHguaXNOb3RDb3B5KG1vZGVsLmVkZ2VUeXBlLCBtb2RlbC5wYWdlVHlwZSkpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcmVuZGVyVGV4dFBhcmFncmFwaChyb3dzRGlzdGFuY2U6IERpc3RhbmNlTW9kZWwpOiBDZWxsW10ge1xuICAgICAgICBjb25zdCBmcmFnbWVudDogQ2VsbFtdID0gW107XG4gICAgICAgIGZvciAobGV0IHJvdyA9IHJvd3NEaXN0YW5jZS5zdGFydDsgcm93IDw9IHJvd3NEaXN0YW5jZS5lbmQ7IHJvdysrKSB7XG4gICAgICAgICAgICBjb25zdCBwYXJhZ3JhcGhDZWxsID0gdGhpcy5saW5lcy5jcmVhdGVDZWxsKHJvdyk7XG4gICAgICAgICAgICBwYXJhZ3JhcGhDZWxsLmVsZW1lbnQuY2xhc3NOYW1lID0gJ25vZGVyLWxpbmUtZ3JvdXAnO1xuICAgICAgICAgICAgRG9tSGVscGVyLnJlbW92ZUNoaWxkcmVuKHBhcmFncmFwaENlbGwuZWxlbWVudCk7XG4gICAgICAgICAgICBjb25zdCBwYXJhZ3JhcGhIZWlnaHQgPSB0aGlzLnNlc3Npb24uZGlzcGxheURhdGEuZ2V0UGFyYWdyYXBoSGVpZ2h0KHJvdyk7XG4gICAgICAgICAgICBjb25zdCBwYXJhZ3JhcGhUb3AgPSB0aGlzLmdldFBhcmFncmFwaFRvcChyb3cpO1xuICAgICAgICAgICAgRG9tSGVscGVyLnNldFN0eWxlKHBhcmFncmFwaENlbGwuZWxlbWVudC5zdHlsZSwgJ2hlaWdodCcsIGAke3BhcmFncmFwaEhlaWdodH1weGApO1xuICAgICAgICAgICAgRG9tSGVscGVyLnNldFN0eWxlKHBhcmFncmFwaENlbGwuZWxlbWVudC5zdHlsZSwgJ3RvcCcsIGAke3BhcmFncmFwaFRvcH1weGApO1xuICAgICAgICAgICAgRG9tSGVscGVyLnNldFN0eWxlKHBhcmFncmFwaENlbGwuZWxlbWVudC5zdHlsZSwgJ3BhZGRpbmctbGVmdCcsIGAke3RoaXMuc2Vzc2lvbi5kaXNwbGF5RGF0YS5wYWdlTWFyZ2luLmxlZnR9cHhgKTtcbiAgICAgICAgICAgIERvbUhlbHBlci5zZXRTdHlsZShwYXJhZ3JhcGhDZWxsLmVsZW1lbnQuc3R5bGUsICdwYWRkaW5nLXJpZ2h0JywgYCR7dGhpcy5zZXNzaW9uLmRpc3BsYXlEYXRhLnBhZ2VNYXJnaW4ucmlnaHR9cHhgKTtcbiAgICAgICAgICAgIGNvbnN0IHBhcmFncmFwaFNldHRpbmdzID0gdGhpcy5zZXNzaW9uLmRpc3BsYXlEYXRhLmdldFBhcmFncmFwaFNldHRpbmdzKHJvdyk7XG4gICAgICAgICAgICBpZiAocGFyYWdyYXBoU2V0dGluZ3MubnVtYmVyaW5nRGF0YS5udW1iZXJpbmdJZCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG51bWJlcmluZ0VsZW1lbnQgPSB0aGlzLnJlbmRlcmluZ0hlbHBlci5yZW5kZXJOdW1iZXJpbmdNYXJrZXIoXG4gICAgICAgICAgICAgICAgICAgIHBhcmFncmFwaFNldHRpbmdzLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5nZW5lcmFsUHJvcGVydGllcy5zY2FsaW5nUmF0aW9cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIG51bWJlcmluZ0VsZW1lbnQuY2xhc3NOYW1lID0gJ251bWJlcmluZ01hcmtlcic7XG4gICAgICAgICAgICAgICAgcGFyYWdyYXBoQ2VsbC5lbGVtZW50LmFwcGVuZENoaWxkKG51bWJlcmluZ0VsZW1lbnQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnJlbmRlclRleHRMaW5lcyhwYXJhZ3JhcGhDZWxsLmVsZW1lbnQsIHJvdyk7XG4gICAgICAgICAgICBmcmFnbWVudC5wdXNoKHBhcmFncmFwaENlbGwpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZyYWdtZW50O1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVuZGVyVGV4dExpbmVzKHBhcmVudDogTm9kZSwgcm93OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgbGluZXNDb250YWluZXJFbGVtZW50ID0gdGhpcy5yZW5kZXJpbmdIZWxwZXIuY3JlYXRlRGl2Q29udGFpbmVyKCdsaW5lcy1jb250YWluZXInKTtcbiAgICAgICAgY29uc3QgcGFyYWdyYXBoU2V0dGluZ3MgPSB0aGlzLnNlc3Npb24uZGlzcGxheURhdGEuZ2V0UGFyYWdyYXBoU2V0dGluZ3Mocm93KTtcbiAgICAgICAgY29uc3QgcGFyYWdyYXBoSGVpZ2h0ID0gUGFyYWdyYXBoSGVscGVyLmdldFBhcmFncmFwaEhlaWdodChwYXJhZ3JhcGhTZXR0aW5ncy50ZXh0TGluZXNJbmZvKTtcbiAgICAgICAgRG9tSGVscGVyLnNldFN0eWxlKGxpbmVzQ29udGFpbmVyRWxlbWVudC5zdHlsZSwgJ2hlaWdodCcsIGAke3BhcmFncmFwaEhlaWdodH1weGApO1xuICAgICAgICBwYXJlbnQuYXBwZW5kQ2hpbGQobGluZXNDb250YWluZXJFbGVtZW50KTtcblxuICAgICAgICBjb25zdCBzdGFydEluZGV4ID0gdGhpcy5zZXNzaW9uLmRpc3BsYXlEYXRhLnBvc2l0aW9uVG9JbmRleCh7IHJvdywgY29sdW1uOiAwIH0pO1xuICAgICAgICBjb25zdCBlbmRJbmRleCA9IHRoaXMuc2Vzc2lvbi5kaXNwbGF5RGF0YS5wb3NpdGlvblRvSW5kZXgoeyByb3c6IHJvdyArIDEsIGNvbHVtbjogMCB9KSAtIDE7XG4gICAgICAgIGNvbnN0IGNvbWJpbmVkRm9ybWF0cyA9IEZvcm1hdFN0eWxlSGVscGVyLmNvbWJpbmVTZWN0aW9uKFxuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLm1vZGVsLmZvcm1hdHMsXG4gICAgICAgICAgICB0aGlzLnNlc3Npb24ubW9kZWwubGlua3MsXG4gICAgICAgICAgICBzdGFydEluZGV4LFxuICAgICAgICAgICAgZW5kSW5kZXhcbiAgICAgICAgKS5tYXAoeCA9PiBuZXcgRm9ybWF0RXh0TW9kZWwoeyAuLi54LCBjb250ZW50OiB0aGlzLnNlc3Npb24ubW9kZWwuY29udGVudC5zdWJzdHJpbmcoeC5zdGFydEluZGV4LCB4LmVuZEluZGV4ICsgMSkgfSkpO1xuICAgICAgICBjb25zdCBzcGxpdHMgPSB0aGlzLnNlc3Npb24uZGlzcGxheURhdGEucGFyYWdyYXBoc1tyb3ddLm5leHRMaW5lSW5kZXhlcztcbiAgICAgICAgaWYgKHNwbGl0cz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCBkaXN0YW5jZSA9IG5ldyBEaXN0YW5jZU1vZGVsKHsgc3RhcnQ6IHN0YXJ0SW5kZXgsIGVuZDogZW5kSW5kZXggfSk7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmluZ0hlbHBlci5yZW5kZXJDb250ZW50V3JhcHBlZExpbmUoXG4gICAgICAgICAgICAgICAgeyBjdXJyZW50RWxlbWVudDogdGhpcy5lbGVtZW50LCBwYXJlbnROb2RlOiBsaW5lc0NvbnRhaW5lckVsZW1lbnQgfSxcbiAgICAgICAgICAgICAgICBzcGxpdHMsXG4gICAgICAgICAgICAgICAgcGFyYWdyYXBoU2V0dGluZ3MsXG4gICAgICAgICAgICAgICAgY29tYmluZWRGb3JtYXRzLFxuICAgICAgICAgICAgICAgIGRpc3RhbmNlLFxuICAgICAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5jdXN0b21Db250ZW50U2VydmljZSxcbiAgICAgICAgICAgICAgICB0aGlzLnNlc3Npb24uY3VzdG9tQ29tcG9uZW50cyxcbiAgICAgICAgICAgICAgICB0aGlzLnNlc3Npb24uZ2VuZXJhbFByb3BlcnRpZXMuc2NhbGluZ1JhdGlvLFxuICAgICAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5tb2RlbC5icmVha3NcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBudW1iZXJpbmdPZmZzZXRMZWZ0ID1cbiAgICAgICAgICAgICAgICBwYXJhZ3JhcGhTZXR0aW5ncy5udW1iZXJpbmdEYXRhLm51bWJlcmluZ0lkID09PSBudWxsXG4gICAgICAgICAgICAgICAgICAgID8gMFxuICAgICAgICAgICAgICAgICAgICA6IHBhcmFncmFwaFNldHRpbmdzLm51bWJlcmluZ0RhdGEud2lkdGggKyBwYXJhZ3JhcGhTZXR0aW5ncy5udW1iZXJpbmdEYXRhLnBhZGRpbmdMZWZ0O1xuICAgICAgICAgICAgY29uc3QgbGFzdExpbmVFbCA9IHRoaXMucmVuZGVyaW5nSGVscGVyLmNyZWF0ZUxpbmVFbGVtZW50KFxuICAgICAgICAgICAgICAgIHBhcmFncmFwaFNldHRpbmdzLnRleHRMaW5lc0luZm9bMF0sXG4gICAgICAgICAgICAgICAgbnVtYmVyaW5nT2Zmc2V0TGVmdCxcbiAgICAgICAgICAgICAgICB0aGlzLnNlc3Npb24uZ2VuZXJhbFByb3BlcnRpZXMuc2NhbGluZ1JhdGlvXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgbGluZXNDb250YWluZXJFbGVtZW50LmFwcGVuZENoaWxkKGxhc3RMaW5lRWwpO1xuICAgICAgICAgICAgY29uc3Qgcm93RGlzdGFuY2UgPSBuZXcgRGlzdGFuY2VNb2RlbCh7IHN0YXJ0OiBzdGFydEluZGV4LCBlbmQ6IGVuZEluZGV4IH0pO1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJpbmdIZWxwZXIucmVuZGVyQ29udGVudFNpbXBsZUxpbmUoXG4gICAgICAgICAgICAgICAgeyBjdXJyZW50RWxlbWVudDogdGhpcy5lbGVtZW50LCBwYXJlbnROb2RlOiBsYXN0TGluZUVsIH0sXG4gICAgICAgICAgICAgICAgY29tYmluZWRGb3JtYXRzLFxuICAgICAgICAgICAgICAgIHJvd0Rpc3RhbmNlLFxuICAgICAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5jdXN0b21Db250ZW50U2VydmljZSxcbiAgICAgICAgICAgICAgICB0aGlzLnNlc3Npb24uY3VzdG9tQ29tcG9uZW50cyxcbiAgICAgICAgICAgICAgICB0aGlzLnNlc3Npb24ubW9kZWwuYnJlYWtzXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwYWdlc0NvdW50Q2hhbmdlZEhhbmRsZXIgPSAoZXZlbnQ6IHsgcGFnZXNDb3VudDogbnVtYmVyOyBwYWdlSGVpZ2h0OiBudW1iZXIgfSkgPT4ge1xuICAgICAgICB0aGlzLmxpbmVzLnNldFNpemVzKGV2ZW50LnBhZ2VzQ291bnQsIGV2ZW50LnBhZ2VIZWlnaHQpO1xuICAgIH07XG59XG4iXX0=
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
import { PrintRenderer } from './print.renderer';
|
|
2
|
-
import { RenderingHelper } from '../rendering.helper';
|
|
3
|
-
export class PrintHelper extends RenderingHelper {
|
|
4
|
-
static printDocument(session) {
|
|
5
|
-
this.removePrintContainers();
|
|
6
|
-
const renderer = new PrintRenderer(session);
|
|
7
|
-
renderer.renderPrintDocument();
|
|
8
|
-
this.printDocumentHtml(renderer.documentHtml);
|
|
9
|
-
}
|
|
10
|
-
static printDocumentHtml(html, openInNewTab = false) {
|
|
11
|
-
if (openInNewTab) {
|
|
12
|
-
const winUrl = URL.createObjectURL(new Blob([html], { type: 'text/html' }));
|
|
13
|
-
window.open(winUrl, '_blank');
|
|
14
|
-
return;
|
|
15
|
-
}
|
|
16
|
-
const printFrame = this.getPrintFrame();
|
|
17
|
-
printFrame.onload = () => {
|
|
18
|
-
window.setTimeout(() => {
|
|
19
|
-
printFrame.contentWindow.print();
|
|
20
|
-
}, 100);
|
|
21
|
-
};
|
|
22
|
-
printFrame.srcdoc = html;
|
|
23
|
-
}
|
|
24
|
-
static getPrintFrame() {
|
|
25
|
-
const printFrame = document.createElement('iframe');
|
|
26
|
-
document.body.appendChild(printFrame);
|
|
27
|
-
printFrame.contentWindow.addEventListener('afterprint', _event => {
|
|
28
|
-
printFrame.remove();
|
|
29
|
-
});
|
|
30
|
-
printFrame.id = 'print-frame';
|
|
31
|
-
return printFrame;
|
|
32
|
-
}
|
|
33
|
-
static removePrintContainers() {
|
|
34
|
-
const printFrame = document.getElementById('print-frame');
|
|
35
|
-
if (printFrame) {
|
|
36
|
-
printFrame.remove();
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJpbnQuaGVscGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LW5vZGVyL3NyYy9saWIvZWRpdG9yL2Rpc3BsYXkvcHJpbnQvcHJpbnQuaGVscGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFdEQsTUFBTSxPQUFPLFdBQVksU0FBUSxlQUFlO0lBQzVDLE1BQU0sQ0FBQyxhQUFhLENBQUMsT0FBb0I7UUFDckMsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDN0IsTUFBTSxRQUFRLEdBQUcsSUFBSSxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDNUMsUUFBUSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFDL0IsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRU8sTUFBTSxDQUFDLGlCQUFpQixDQUFDLElBQVksRUFBRSxZQUFZLEdBQUcsS0FBSztRQUMvRCxJQUFJLFlBQVksRUFBRTtZQUNkLE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxlQUFlLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDNUUsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDOUIsT0FBTztTQUNWO1FBRUQsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBRXhDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsR0FBRyxFQUFFO1lBQ3JCLE1BQU0sQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFO2dCQUNuQixVQUFVLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ3JDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNaLENBQUMsQ0FBQztRQUNGLFVBQVUsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO0lBQzdCLENBQUM7SUFFTyxNQUFNLENBQUMsYUFBYTtRQUN4QixNQUFNLFVBQVUsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3BELFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3RDLFVBQVUsQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxFQUFFLE1BQU0sQ0FBQyxFQUFFO1lBQzdELFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUN4QixDQUFDLENBQUMsQ0FBQztRQUNILFVBQVUsQ0FBQyxFQUFFLEdBQUcsYUFBYSxDQUFDO1FBQzlCLE9BQU8sVUFBVSxDQUFDO0lBQ3RCLENBQUM7SUFFTyxNQUFNLENBQUMscUJBQXFCO1FBQ2hDLE1BQU0sVUFBVSxHQUFHLFFBQVEsQ0FBQyxjQUFjLENBQUMsYUFBYSxDQUFzQixDQUFDO1FBQy9FLElBQUksVUFBVSxFQUFFO1lBQ1osVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDO1NBQ3ZCO0lBQ0wsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRWRpdFNlc3Npb24gfSBmcm9tICcuLi8uLi9leGVjdXRpb24vZWRpdC5zZXNzaW9uJztcbmltcG9ydCB7IFByaW50UmVuZGVyZXIgfSBmcm9tICcuL3ByaW50LnJlbmRlcmVyJztcbmltcG9ydCB7IFJlbmRlcmluZ0hlbHBlciB9IGZyb20gJy4uL3JlbmRlcmluZy5oZWxwZXInO1xuXG5leHBvcnQgY2xhc3MgUHJpbnRIZWxwZXIgZXh0ZW5kcyBSZW5kZXJpbmdIZWxwZXIge1xuICAgIHN0YXRpYyBwcmludERvY3VtZW50KHNlc3Npb246IEVkaXRTZXNzaW9uKTogdm9pZCB7XG4gICAgICAgIHRoaXMucmVtb3ZlUHJpbnRDb250YWluZXJzKCk7XG4gICAgICAgIGNvbnN0IHJlbmRlcmVyID0gbmV3IFByaW50UmVuZGVyZXIoc2Vzc2lvbik7XG4gICAgICAgIHJlbmRlcmVyLnJlbmRlclByaW50RG9jdW1lbnQoKTtcbiAgICAgICAgdGhpcy5wcmludERvY3VtZW50SHRtbChyZW5kZXJlci5kb2N1bWVudEh0bWwpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIHByaW50RG9jdW1lbnRIdG1sKGh0bWw6IHN0cmluZywgb3BlbkluTmV3VGFiID0gZmFsc2UpOiB2b2lkIHtcbiAgICAgICAgaWYgKG9wZW5Jbk5ld1RhYikge1xuICAgICAgICAgICAgY29uc3Qgd2luVXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTChuZXcgQmxvYihbaHRtbF0sIHsgdHlwZTogJ3RleHQvaHRtbCcgfSkpO1xuICAgICAgICAgICAgd2luZG93Lm9wZW4od2luVXJsLCAnX2JsYW5rJyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwcmludEZyYW1lID0gdGhpcy5nZXRQcmludEZyYW1lKCk7XG5cbiAgICAgICAgcHJpbnRGcmFtZS5vbmxvYWQgPSAoKSA9PiB7XG4gICAgICAgICAgICB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgcHJpbnRGcmFtZS5jb250ZW50V2luZG93LnByaW50KCk7XG4gICAgICAgICAgICB9LCAxMDApO1xuICAgICAgICB9O1xuICAgICAgICBwcmludEZyYW1lLnNyY2RvYyA9IGh0bWw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgZ2V0UHJpbnRGcmFtZSgpOiBIVE1MSUZyYW1lRWxlbWVudCB7XG4gICAgICAgIGNvbnN0IHByaW50RnJhbWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpZnJhbWUnKTtcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChwcmludEZyYW1lKTtcbiAgICAgICAgcHJpbnRGcmFtZS5jb250ZW50V2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2FmdGVycHJpbnQnLCBfZXZlbnQgPT4ge1xuICAgICAgICAgICAgcHJpbnRGcmFtZS5yZW1vdmUoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHByaW50RnJhbWUuaWQgPSAncHJpbnQtZnJhbWUnO1xuICAgICAgICByZXR1cm4gcHJpbnRGcmFtZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyByZW1vdmVQcmludENvbnRhaW5lcnMoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHByaW50RnJhbWUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncHJpbnQtZnJhbWUnKSBhcyBIVE1MSUZyYW1lRWxlbWVudDtcbiAgICAgICAgaWYgKHByaW50RnJhbWUpIHtcbiAgICAgICAgICAgIHByaW50RnJhbWUucmVtb3ZlKCk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=
|
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
import { DistanceModel } from '../../execution/distance.model';
|
|
2
|
-
import { PrintPagesLayer } from '../layers/print.pages.layer';
|
|
3
|
-
import { PrintRenderingHelper } from './print.rendering.helper';
|
|
4
|
-
import { PrintTextLayer } from '../layers/print.text.layer';
|
|
5
|
-
export class PrintRenderer {
|
|
6
|
-
constructor(mainSession) {
|
|
7
|
-
this.mainSession = mainSession;
|
|
8
|
-
this.pagesCount = Math.round((mainSession.displayData.pagesSpace * 2 + mainSession.displayData.allPagesHeight) / mainSession.displayData.minHeight);
|
|
9
|
-
this.createContent();
|
|
10
|
-
this.createLayers();
|
|
11
|
-
}
|
|
12
|
-
renderPrintDocument() {
|
|
13
|
-
const layerConfig = this.computeLayerConfig();
|
|
14
|
-
this.pagesLayer.update(layerConfig);
|
|
15
|
-
this.textLayer.updateLines(layerConfig);
|
|
16
|
-
this.textLayer.updateEdges(layerConfig);
|
|
17
|
-
this.createDocumentHtml(layerConfig);
|
|
18
|
-
}
|
|
19
|
-
computeLayerConfig() {
|
|
20
|
-
const pages = Array.from(Array(this.pagesCount).keys()).map(x => x + 1);
|
|
21
|
-
const displayData = this.mainSession.displayData;
|
|
22
|
-
const maxHeight = displayData.pageHeight * this.pagesCount;
|
|
23
|
-
const minHeight = displayData.pageHeight;
|
|
24
|
-
return {
|
|
25
|
-
width: this.textLayer.element.clientWidth + displayData.pageMargin.left + displayData.pageMargin.right,
|
|
26
|
-
height: displayData.defaultVerticalData.contentHeight,
|
|
27
|
-
contentRange: new DistanceModel({ start: 0, end: displayData.paragraphs.length - 1 }),
|
|
28
|
-
minHeight,
|
|
29
|
-
maxHeight,
|
|
30
|
-
offset: 0,
|
|
31
|
-
pages,
|
|
32
|
-
scrollTop: 0
|
|
33
|
-
};
|
|
34
|
-
}
|
|
35
|
-
createContent() {
|
|
36
|
-
this.content = document.createElement('div');
|
|
37
|
-
this.content.className = 'noder-content print';
|
|
38
|
-
}
|
|
39
|
-
createLayers() {
|
|
40
|
-
this.textLayer = new PrintTextLayer(this.content, this.mainSession, PrintRenderingHelper);
|
|
41
|
-
this.pagesLayer = new PrintPagesLayer(this.content, this.mainSession);
|
|
42
|
-
}
|
|
43
|
-
createDocumentHtml(layerConfig) {
|
|
44
|
-
const head = this.createHeadWithStyles();
|
|
45
|
-
let body = `<div class="noder-scroller print" style="width: 100%;">${this.content.innerHTML}</div>`;
|
|
46
|
-
body = `<div class="edit-container noder-editor print">${body}</div>`;
|
|
47
|
-
body = `<div class="container print" style="height: ${layerConfig.maxHeight}px;">${body}</div>`;
|
|
48
|
-
body = `<div class="mat-drawer-content print">${body}</div>`;
|
|
49
|
-
body = `<div class="mat-drawer-container sidenav-container print">${body}</div>`;
|
|
50
|
-
body = `<div class="base-editor print">${body}</div>`;
|
|
51
|
-
this.documentHtml = `<!DOCTYPE html><html>${head}${body}</html>`;
|
|
52
|
-
}
|
|
53
|
-
createHeadWithStyles() {
|
|
54
|
-
let styles = '';
|
|
55
|
-
for (let i = 0; i < document.styleSheets.length; i++) {
|
|
56
|
-
const cssRules = Array.from(document.styleSheets[i].cssRules);
|
|
57
|
-
cssRules.forEach(rule => (styles += `<style>${rule.cssText}</style>`));
|
|
58
|
-
}
|
|
59
|
-
return `<head><title>Print</title>${styles}${this.getPrintPageStyle()}</head>`;
|
|
60
|
-
}
|
|
61
|
-
getPrintPageStyle() {
|
|
62
|
-
const pageStyle = '@page { margin: 0; }';
|
|
63
|
-
const contentStyle = `@media print { html, body { width: 100%; height: 100%; } }`;
|
|
64
|
-
return `<style>${pageStyle} ${contentStyle}</style>`;
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJpbnQucmVuZGVyZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbm9kZXIvc3JjL2xpYi9lZGl0b3IvZGlzcGxheS9wcmludC9wcmludC5yZW5kZXJlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFJL0QsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzlELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUU1RCxNQUFNLE9BQU8sYUFBYTtJQWF0QixZQUFvQixXQUF3QjtRQUF4QixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQ3hCLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLEdBQUcsV0FBVyxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQ3hILENBQUM7UUFDRixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDckIsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3hCLENBQUM7SUFFRCxtQkFBbUI7UUFDZixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUU5QyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNwQyxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUN4QyxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUV4QyxJQUFJLENBQUMsa0JBQWtCLENBQUMsV0FBVyxD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QUFNLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixFQUFFLFNBQVMsQ0FBQztJQUNuRixDQUFDO0lBRU8saUJBQWlCO1FBQ3JCLE1BQU0sU0FBUyxHQUFHLHNCQUFzQixDQUFDO1FBQ3pDLE1BQU0sWUFBWSxHQUFHLDREQUE0RCxDQUFDO1FBQ2xGLE9BQU8sVUFBVSxTQUFTLElBQUksWUFBWSxVQUFVLENBQUM7SUFDekQsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlzdGFuY2VNb2RlbCB9IGZyb20gJy4uLy4uL2V4ZWN1dGlvbi9kaXN0YW5jZS5tb2RlbCc7XG5pbXBvcnQgeyBFZGl0U2Vzc2lvbiB9IGZyb20gJy4uLy4uL2V4ZWN1dGlvbi9lZGl0LnNlc3Npb24nO1xuaW1wb3J0IHsgSUxheWVyQ29uZmlnIH0gZnJvbSAnLi4vbGF5ZXJzL2xheWVyLmNvbmZpZyc7XG5pbXBvcnQgeyBQYWdlc0xheWVyIH0gZnJvbSAnLi4vbGF5ZXJzL3BhZ2VzLmxheWVyJztcbmltcG9ydCB7IFByaW50UGFnZXNMYXllciB9IGZyb20gJy4uL2xheWVycy9wcmludC5wYWdlcy5sYXllcic7XG5pbXBvcnQgeyBQcmludFJlbmRlcmluZ0hlbHBlciB9IGZyb20gJy4vcHJpbnQucmVuZGVyaW5nLmhlbHBlcic7XG5pbXBvcnQgeyBQcmludFRleHRMYXllciB9IGZyb20gJy4uL2xheWVycy9wcmludC50ZXh0LmxheWVyJztcblxuZXhwb3J0IGNsYXNzIFByaW50UmVuZGVyZXIge1xuICAgIGNvbnRlbnQ6IEhUTUxFbGVtZW50O1xuXG4gICAgdGV4dExheWVyOiBQcmludFRleHRMYXllcjtcblxuICAgIHBhZ2VzTGF5ZXI6IFBhZ2VzTGF5ZXI7XG5cbiAgICBkb2N1bWVudEh0bWw6IHN0cmluZztcblxuICAgIGhlYWRIdG1sOiBzdHJpbmc7XG5cbiAgICBwYWdlc0NvdW50OiBudW1iZXI7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIG1haW5TZXNzaW9uOiBFZGl0U2Vzc2lvbikge1xuICAgICAgICB0aGlzLnBhZ2VzQ291bnQgPSBNYXRoLnJvdW5kKFxuICAgICAgICAgICAgKG1haW5TZXNzaW9uLmRpc3BsYXlEYXRhLnBhZ2VzU3BhY2UgKiAyICsgbWFpblNlc3Npb24uZGlzcGxheURhdGEuYWxsUGFnZXNIZWlnaHQpIC8gbWFpblNlc3Npb24uZGlzcGxheURhdGEubWluSGVpZ2h0XG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuY3JlYXRlQ29udGVudCgpO1xuICAgICAgICB0aGlzLmNyZWF0ZUxheWVycygpO1xuICAgIH1cblxuICAgIHJlbmRlclByaW50RG9jdW1lbnQoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGxheWVyQ29uZmlnID0gdGhpcy5jb21wdXRlTGF5ZXJDb25maWcoKTtcblxuICAgICAgICB0aGlzLnBhZ2VzTGF5ZXIudXBkYXRlKGxheWVyQ29uZmlnKTtcbiAgICAgICAgdGhpcy50ZXh0TGF5ZXIudXBkYXRlTGluZXMobGF5ZXJDb25maWcpO1xuICAgICAgICB0aGlzLnRleHRMYXllci51cGRhdGVFZGdlcyhsYXllckNvbmZpZyk7XG5cbiAgICAgICAgdGhpcy5jcmVhdGVEb2N1bWVudEh0bWwobGF5ZXJDb25maWcpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY29tcHV0ZUxheWVyQ29uZmlnKCk6IElMYXllckNvbmZpZyB7XG4gICAgICAgIGNvbnN0IHBhZ2VzID0gQXJyYXkuZnJvbShBcnJheSh0aGlzLnBhZ2VzQ291bnQpLmtleXMoKSkubWFwKHggPT4geCArIDEpO1xuICAgICAgICBjb25zdCBkaXNwbGF5RGF0YSA9IHRoaXMubWFpblNlc3Npb24uZGlzcGxheURhdGE7XG4gICAgICAgIGNvbnN0IG1heEhlaWdodCA9IGRpc3BsYXlEYXRhLnBhZ2VIZWlnaHQgKiB0aGlzLnBhZ2VzQ291bnQ7XG4gICAgICAgIGNvbnN0IG1pbkhlaWdodCA9IGRpc3BsYXlEYXRhLnBhZ2VIZWlnaHQ7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHdpZHRoOiB0aGlzLnRleHRMYXllci5lbGVtZW50LmNsaWVudFdpZHRoICsgZGlzcGxheURhdGEucGFnZU1hcmdpbi5sZWZ0ICsgZGlzcGxheURhdGEucGFnZU1hcmdpbi5yaWdodCxcbiAgICAgICAgICAgIGhlaWdodDogZGlzcGxheURhdGEuZGVmYXVsdFZlcnRpY2FsRGF0YS5jb250ZW50SGVpZ2h0LFxuICAgICAgICAgICAgY29udGVudFJhbmdlOiBuZXcgRGlzdGFuY2VNb2RlbCh7IHN0YXJ0OiAwLCBlbmQ6IGRpc3BsYXlEYXRhLnBhcmFncmFwaHMubGVuZ3RoIC0gMSB9KSxcbiAgICAgICAgICAgIG1pbkhlaWdodCxcbiAgICAgICAgICAgIG1heEhlaWdodCxcbiAgICAgICAgICAgIG9mZnNldDogMCxcbiAgICAgICAgICAgIHBhZ2VzLFxuICAgICAgICAgICAgc2Nyb2xsVG9wOiAwXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVDb250ZW50KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNvbnRlbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgdGhpcy5jb250ZW50LmNsYXNzTmFtZSA9ICdub2Rlci1jb250ZW50IHByaW50JztcbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZUxheWVycygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy50ZXh0TGF5ZXIgPSBuZXcgUHJpbnRUZXh0TGF5ZXIodGhpcy5jb250ZW50LCB0aGlzLm1haW5TZXNzaW9uLCBQcmludFJlbmRlcmluZ0hlbHBlcik7XG4gICAgICAgIHRoaXMucGFnZXNMYXllciA9IG5ldyBQcmludFBhZ2VzTGF5ZXIodGhpcy5jb250ZW50LCB0aGlzLm1haW5TZXNzaW9uKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZURvY3VtZW50SHRtbChsYXllckNvbmZpZzogSUxheWVyQ29uZmlnKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGhlYWQgPSB0aGlzLmNyZWF0ZUhlYWRXaXRoU3R5bGVzKCk7XG4gICAgICAgIGxldCBib2R5ID0gYDxkaXYgY2xhc3M9XCJub2Rlci1zY3JvbGxlciBwcmludFwiIHN0eWxlPVwid2lkdGg6IDEwMCU7XCI+JHt0aGlzLmNvbnRlbnQuaW5uZXJIVE1MfTwvZGl2PmA7XG4gICAgICAgIGJvZHkgPSBgPGRpdiBjbGFzcz1cImVkaXQtY29udGFpbmVyIG5vZGVyLWVkaXRvciBwcmludFwiPiR7Ym9keX08L2Rpdj5gO1xuICAgICAgICBib2R5ID0gYDxkaXYgY2xhc3M9XCJjb250YWluZXIgcHJpbnRcIiBzdHlsZT1cImhlaWdodDogJHtsYXllckNvbmZpZy5tYXhIZWlnaHR9cHg7XCI+JHtib2R5fTwvZGl2PmA7XG4gICAgICAgIGJvZHkgPSBgPGRpdiBjbGFzcz1cIm1hdC1kcmF3ZXItY29udGVudCBwcmludFwiPiR7Ym9keX08L2Rpdj5gO1xuICAgICAgICBib2R5ID0gYDxkaXYgY2xhc3M9XCJtYXQtZHJhd2VyLWNvbnRhaW5lciBzaWRlbmF2LWNvbnRhaW5lciBwcmludFwiPiR7Ym9keX08L2Rpdj5gO1xuICAgICAgICBib2R5ID0gYDxkaXYgY2xhc3M9XCJiYXNlLWVkaXRvciBwcmludFwiPiR7Ym9keX08L2Rpdj5gO1xuXG4gICAgICAgIHRoaXMuZG9jdW1lbnRIdG1sID0gYDwhRE9DVFlQRSBodG1sPjxodG1sPiR7aGVhZH0ke2JvZHl9PC9odG1sPmA7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVIZWFkV2l0aFN0eWxlcygpOiBzdHJpbmcge1xuICAgICAgICBsZXQgc3R5bGVzID0gJyc7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZG9jdW1lbnQuc3R5bGVTaGVldHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGNzc1J1bGVzID0gQXJyYXkuZnJvbShkb2N1bWVudC5zdHlsZVNoZWV0c1tpXS5jc3NSdWxlcyk7XG4gICAgICAgICAgICBjc3NSdWxlcy5mb3JFYWNoKHJ1bGUgPT4gKHN0eWxlcyArPSBgPHN0eWxlPiR7cnVsZS5jc3NUZXh0fTwvc3R5bGU+YCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGA8aGVhZD48dGl0bGU+UHJpbnQ8L3RpdGxlPiR7c3R5bGVzfSR7dGhpcy5nZXRQcmludFBhZ2VTdHlsZSgpfTwvaGVhZD5gO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0UHJpbnRQYWdlU3R5bGUoKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgcGFnZVN0eWxlID0gJ0BwYWdlIHsgbWFyZ2luOiAwOyB9JztcbiAgICAgICAgY29uc3QgY29udGVudFN0eWxlID0gYEBtZWRpYSBwcmludCB7IGh0bWwsIGJvZHkgeyB3aWR0aDogMTAwJTsgaGVpZ2h0OiAxMDAlOyB9IH1gO1xuICAgICAgICByZXR1cm4gYDxzdHlsZT4ke3BhZ2VTdHlsZX0gJHtjb250ZW50U3R5bGV9PC9zdHlsZT5gO1xuICAgIH1cbn1cbiJdfQ==
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import { RenderingHelper } from '../rendering.helper';
|
|
2
|
-
export class PrintRenderingHelper extends RenderingHelper {
|
|
3
|
-
static attachComponent(fragment, component, customContentService) {
|
|
4
|
-
customContentService.componentService.cloneAndAttachComponent(fragment, component);
|
|
5
|
-
}
|
|
6
|
-
}
|
|
7
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJpbnQucmVuZGVyaW5nLmhlbHBlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1ub2Rlci9zcmMvbGliL2VkaXRvci9kaXNwbGF5L3ByaW50L3ByaW50LnJlbmRlcmluZy5oZWxwZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRXRELE1BQU0sT0FBTyxvQkFBcUIsU0FBUSxlQUFlO0lBQ3JELE1BQU0sQ0FBVSxlQUFlLENBQzNCLFFBQTBCLEVBQzFCLFNBQWdDLEVBQ2hDLG9CQUEwQztRQUUxQyxvQkFBb0IsQ0FBQyxnQkFBZ0IsQ0FBQyx1QkFBdUIsQ0FBQyxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDdkYsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50UmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IEN1c3RvbUNvbnRlbnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9zaGFyZWQvc2VydmljZXMvY3VzdG9tLWNvbnRlbnQuc2VydmljZSc7XG5pbXBvcnQgeyBSZW5kZXJpbmdIZWxwZXIgfSBmcm9tICcuLi9yZW5kZXJpbmcuaGVscGVyJztcblxuZXhwb3J0IGNsYXNzIFByaW50UmVuZGVyaW5nSGVscGVyIGV4dGVuZHMgUmVuZGVyaW5nSGVscGVyIHtcbiAgICBzdGF0aWMgb3ZlcnJpZGUgYXR0YWNoQ29tcG9uZW50KFxuICAgICAgICBmcmFnbWVudDogRG9jdW1lbnRGcmFnbWVudCxcbiAgICAgICAgY29tcG9uZW50OiBDb21wb25lbnRSZWY8dW5rbm93bj4sXG4gICAgICAgIGN1c3RvbUNvbnRlbnRTZXJ2aWNlOiBDdXN0b21Db250ZW50U2VydmljZVxuICAgICk6IHZvaWQge1xuICAgICAgICBjdXN0b21Db250ZW50U2VydmljZS5jb21wb25lbnRTZXJ2aWNlLmNsb25lQW5kQXR0YWNoQ29tcG9uZW50KGZyYWdtZW50LCBjb21wb25lbnQpO1xuICAgIH1cbn1cbiJdfQ==
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVuZGVyLWNoYW5nZXMuaW50ZXJmYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LW5vZGVyL3NyYy9saWIvZWRpdG9yL2Rpc3BsYXkvcmVuZGVyLWNoYW5nZXMuaW50ZXJmYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgaW50ZXJmYWNlIElSZW5kZXJDaGFuZ2VzIHtcbiAgICBjdXJzb3I/OiBib29sZWFuO1xuICAgIGZ1bGw/OiBib29sZWFuO1xuICAgIGxpbmVzPzogYm9vbGVhbjtcbiAgICBtYXJrZXI/OiBib29sZWFuO1xuICAgIHNlbGVjdGlvbj86IGJvb2xlYW47XG4gICAgc2Nyb2xsPzogYm9vbGVhbjtcbiAgICBzaXplPzogYm9vbGVhbjtcbiAgICB0ZXh0PzogYm9vbGVhbjtcbn1cbiJdfQ==
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
export class RenderChangesModel {
|
|
2
|
-
get any() {
|
|
3
|
-
return this.cursor || this.full || this.lines || this.marker || this.selection || this.scroll || this.size || this.text;
|
|
4
|
-
}
|
|
5
|
-
constructor(fields) {
|
|
6
|
-
this.cursor = false;
|
|
7
|
-
this.full = false;
|
|
8
|
-
this.lines = false;
|
|
9
|
-
this.marker = false;
|
|
10
|
-
this.selection = false;
|
|
11
|
-
this.scroll = false;
|
|
12
|
-
this.size = false;
|
|
13
|
-
this.text = false;
|
|
14
|
-
if (!fields) {
|
|
15
|
-
return;
|
|
16
|
-
}
|
|
17
|
-
Object.assign(this, fields);
|
|
18
|
-
}
|
|
19
|
-
apply(changes) {
|
|
20
|
-
for (let key of Object.keys(this)) {
|
|
21
|
-
this[key] ||= changes[key];
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVuZGVyLWNoYW5nZXMubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbm9kZXIvc3JjL2xpYi9lZGl0b3IvZGlzcGxheS9yZW5kZXItY2hhbmdlcy5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxNQUFNLE9BQU8sa0JBQWtCO0lBVTNCLElBQUksR0FBRztRQUNILE9BQU8sSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDO0lBQzVILENBQUM7SUFFRCxZQUFZLE1BQW9DO1FBYmhELFdBQU0sR0FBRyxLQUFLLENBQUM7UUFDZixTQUFJLEdBQUcsS0FBSyxDQUFDO1FBQ2IsVUFBSyxHQUFHLEtBQUssQ0FBQztRQUNkLFdBQU0sR0FBRyxLQUFLLENBQUM7UUFDZixjQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ2xCLFdBQU0sR0FBRyxLQUFLLENBQUM7UUFDZixTQUFJLEdBQUcsS0FBSyxDQUFDO1FBQ2IsU0FBSSxHQUFHLEtBQUssQ0FBQztRQU9ULElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDVCxPQUFPO1NBQ1Y7UUFFRCxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQsS0FBSyxDQUFDLE9BQXVCO1FBQ3pCLEtBQUssSUFBSSxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUMvQixJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQzlCO0lBQ0wsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSVJlbmRlckNoYW5nZXMgfSBmcm9tICcuL3JlbmRlci1jaGFuZ2VzLmludGVyZmFjZSc7XG5cbmV4cG9ydCBjbGFzcyBSZW5kZXJDaGFuZ2VzTW9kZWwgaW1wbGVtZW50cyBJUmVuZGVyQ2hhbmdlcyB7XG4gICAgY3Vyc29yID0gZmFsc2U7XG4gICAgZnVsbCA9IGZhbHNlO1xuICAgIGxpbmVzID0gZmFsc2U7XG4gICAgbWFya2VyID0gZmFsc2U7XG4gICAgc2VsZWN0aW9uID0gZmFsc2U7XG4gICAgc2Nyb2xsID0gZmFsc2U7XG4gICAgc2l6ZSA9IGZhbHNlO1xuICAgIHRleHQgPSBmYWxzZTtcblxuICAgIGdldCBhbnkoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmN1cnNvciB8fCB0aGlzLmZ1bGwgfHwgdGhpcy5saW5lcyB8fCB0aGlzLm1hcmtlciB8fCB0aGlzLnNlbGVjdGlvbiB8fCB0aGlzLnNjcm9sbCB8fCB0aGlzLnNpemUgfHwgdGhpcy50ZXh0O1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKGZpZWxkcz86IFBhcnRpYWw8UmVuZGVyQ2hhbmdlc01vZGVsPikge1xuICAgICAgICBpZiAoIWZpZWxkcykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBmaWVsZHMpO1xuICAgIH1cblxuICAgIGFwcGx5KGNoYW5nZXM6IElSZW5kZXJDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIGZvciAobGV0IGtleSBvZiBPYmplY3Qua2V5cyh0aGlzKSkge1xuICAgICAgICAgICAgdGhpc1trZXldIHx8PSBjaGFuZ2VzW2tleV07XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=
|