@bizdoc/core 2.3.32 → 2.3.35
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/assets/bizdoc-schema.json +1 -0
- package/esm2022/lib/admin/admin-dismiss.service.mjs +3 -3
- package/esm2022/lib/admin/admin-menu.component.mjs +5 -5
- package/esm2022/lib/admin/architecture/cube-axes-filter.component.mjs +3 -3
- package/esm2022/lib/admin/architecture/designer-element.component.mjs +15 -15
- package/esm2022/lib/admin/architecture/designer-privileges.component.mjs +3 -3
- package/esm2022/lib/admin/architecture/designer.base.mjs +9 -9
- package/esm2022/lib/admin/architecture/designer.component.mjs +16 -8
- package/esm2022/lib/admin/architecture/elements/action.component.mjs +3 -3
- package/esm2022/lib/admin/architecture/elements/analysis-view.component.mjs +3 -3
- package/esm2022/lib/admin/architecture/elements/analysis-widget.component.mjs +3 -3
- package/esm2022/lib/admin/architecture/elements/anomaly-rule.component.mjs +3 -3
- package/esm2022/lib/admin/architecture/elements/attribute.component.mjs +3 -3
- package/esm2022/lib/admin/architecture/elements/box-form.component.mjs +3 -3
- package/esm2022/lib/admin/architecture/elements/configuration-datasource.component.mjs +3 -3
- package/esm2022/lib/admin/architecture/elements/control.component.mjs +3 -3
- package/esm2022/lib/admin/architecture/elements/cube-index-utility.component.mjs +3 -3
- package/esm2022/lib/admin/architecture/elements/cube-view.component.mjs +3 -3
- package/esm2022/lib/admin/architecture/elements/cube.component.mjs +3 -3
- package/esm2022/lib/admin/architecture/elements/document-state-widget.component.mjs +3 -3
- package/esm2022/lib/admin/architecture/elements/documents-report.component.mjs +3 -3
- package/esm2022/lib/admin/architecture/elements/documents-widget.component.mjs +3 -3
- package/esm2022/lib/admin/architecture/elements/explore-view.component.mjs +3 -3
- package/esm2022/lib/admin/architecture/elements/folder.component.mjs +3 -3
- package/esm2022/lib/admin/architecture/elements/form-invite.dialog.mjs +3 -3
- package/esm2022/lib/admin/architecture/elements/form.component.mjs +3 -3
- package/esm2022/lib/admin/architecture/elements/guide.component.mjs +3 -3
- package/esm2022/lib/admin/architecture/elements/job.component.mjs +3 -3
- package/esm2022/lib/admin/architecture/elements/matrix-view.component.mjs +5 -5
- package/esm2022/lib/admin/architecture/elements/node.component.mjs +3 -3
- package/esm2022/lib/admin/architecture/elements/parallel-view.component.mjs +3 -3
- package/esm2022/lib/admin/architecture/elements/performance-report.component.mjs +3 -3
- package/esm2022/lib/admin/architecture/elements/performance-widget.component.mjs +3 -3
- package/esm2022/lib/admin/architecture/elements/pivot-view.component.mjs +3 -3
- package/esm2022/lib/admin/architecture/elements/policy.component.mjs +3 -3
- package/esm2022/lib/admin/architecture/elements/report.component.mjs +3 -3
- package/esm2022/lib/admin/architecture/elements/return-to-role-action.component.mjs +3 -3
- package/esm2022/lib/admin/architecture/elements/role.component.mjs +3 -3
- package/esm2022/lib/admin/architecture/elements/rule.component.mjs +3 -3
- package/esm2022/lib/admin/architecture/elements/source.component.mjs +3 -3
- package/esm2022/lib/admin/architecture/elements/state.component.mjs +3 -3
- package/esm2022/lib/admin/architecture/elements/sum-view.component.mjs +3 -3
- package/esm2022/lib/admin/architecture/elements/tasks-report.component.mjs +3 -3
- package/esm2022/lib/admin/architecture/elements/type.component.mjs +3 -3
- package/esm2022/lib/admin/architecture/elements/usage-report.component.mjs +3 -3
- package/esm2022/lib/admin/architecture/elements/utility.component.mjs +3 -3
- package/esm2022/lib/admin/architecture/elements/view.component.mjs +3 -3
- package/esm2022/lib/admin/architecture/elements/widget.component.mjs +3 -3
- package/esm2022/lib/admin/architecture/icon-picker.component.mjs +3 -3
- package/esm2022/lib/admin/core/ace.input.mjs +3 -3
- package/esm2022/lib/admin/core/color-picker.input.mjs +3 -3
- package/esm2022/lib/admin/core/localized-string.component.mjs +3 -3
- package/esm2022/lib/admin/core/search.input.mjs +3 -3
- package/esm2022/lib/admin/diff/configuration-diff.component.mjs +5 -7
- package/esm2022/lib/admin/document-trace/document-trace.component.mjs +5 -7
- package/esm2022/lib/admin/document-trace/reassign.dialog.mjs +3 -3
- package/esm2022/lib/admin/document-trace/trace-element.component.mjs +3 -3
- package/esm2022/lib/admin/form/designer/box-designer.component.mjs +3 -3
- package/esm2022/lib/admin/form/designer/design-control.component.mjs +3 -3
- package/esm2022/lib/admin/form/designer/properties.component.mjs +3 -3
- package/esm2022/lib/admin/form/designer/section.component.mjs +3 -3
- package/esm2022/lib/admin/form/designer/settings.component.mjs +3 -3
- package/esm2022/lib/admin/form/form.resolve.service.mjs +3 -3
- package/esm2022/lib/admin/form/workflow/node.component.mjs +3 -3
- package/esm2022/lib/admin/form/workflow/role-node.component.mjs +3 -3
- package/esm2022/lib/admin/form/workflow/workflow.component.mjs +5 -7
- package/esm2022/lib/admin/indices/manage-cube-index.component.mjs +3 -3
- package/esm2022/lib/admin/patterns/patterns.component.mjs +3 -3
- package/esm2022/lib/admin/permissions/permissions.component.mjs +3 -3
- package/esm2022/lib/admin/positions/positions-popup.component.mjs +3 -3
- package/esm2022/lib/admin/positions/positions.component.mjs +3 -3
- package/esm2022/lib/admin/profiler/outofoffice.component.mjs +3 -3
- package/esm2022/lib/admin/profiler/profiler.component.mjs +5 -7
- package/esm2022/lib/admin/system.service.mjs +3 -3
- package/esm2022/lib/admin/utility-wrapper.component.mjs +3 -3
- package/esm2022/lib/admin/utility.pane.component.mjs +5 -8
- package/esm2022/lib/app.component.mjs +6 -6
- package/esm2022/lib/bizdoc.module.mjs +4 -4
- package/esm2022/lib/browse/browse-items.component.mjs +3 -3
- package/esm2022/lib/browse/browse.mobile.component.mjs +3 -3
- package/esm2022/lib/browse/browse.pane.component.mjs +22 -13
- package/esm2022/lib/browse/expanded-item/expanded-item.component.mjs +3 -3
- package/esm2022/lib/browse/filter/filter.component.mjs +28 -38
- package/esm2022/lib/browse/folders-menu.component.mjs +3 -3
- package/esm2022/lib/chat/chat-info.mjs +5 -5
- package/esm2022/lib/chat/chat.mobile.component.mjs +3 -3
- package/esm2022/lib/chat/chat.service.mjs +3 -3
- package/esm2022/lib/chat/contacts.component.mjs +15 -14
- package/esm2022/lib/chat/contacts.pane.component.mjs +5 -8
- package/esm2022/lib/chat/conversation.component.mjs +5 -6
- package/esm2022/lib/chat/conversation.pane.component.mjs +5 -7
- package/esm2022/lib/compose/action/action-picker.component.mjs +3 -3
- package/esm2022/lib/compose/action/action.dialog.mjs +3 -3
- package/esm2022/lib/compose/action/action.pane.dialog.exp.mjs +5 -7
- package/esm2022/lib/compose/action/assign-action.component.mjs +3 -3
- package/esm2022/lib/compose/action/moveto-action.component.mjs +3 -3
- package/esm2022/lib/compose/action/return-action.component.mjs +3 -3
- package/esm2022/lib/compose/attachments/attachments.component.mjs +3 -3
- package/esm2022/lib/compose/attachments/preview/attachment-preview.component.mjs +3 -3
- package/esm2022/lib/compose/attachments/progress-button.directive.mjs +3 -3
- package/esm2022/lib/compose/box/box.component.mjs +3 -3
- package/esm2022/lib/compose/box/control.component.mjs +3 -3
- package/esm2022/lib/compose/box/row.component.mjs +3 -3
- package/esm2022/lib/compose/can-deactivate-changes.service.mjs +3 -3
- package/esm2022/lib/compose/comments/comment.component.mjs +5 -5
- package/esm2022/lib/compose/comments/comments.component.mjs +5 -6
- package/esm2022/lib/compose/comments/comments.pane.component.mjs +5 -7
- package/esm2022/lib/compose/comments/edit-comment.component.mjs +5 -5
- package/esm2022/lib/compose/comments/edits.component.mjs +3 -3
- package/esm2022/lib/compose/comments/quick-comment.component.exp.mjs +3 -3
- package/esm2022/lib/compose/comments/votes.component.mjs +3 -3
- package/esm2022/lib/compose/compose-resolve.service.mjs +6 -6
- package/esm2022/lib/compose/compose.mobile.component.mjs +3 -3
- package/esm2022/lib/compose/compose.pane.component.mjs +5 -7
- package/esm2022/lib/compose/copy/copy.dialog.mjs +3 -3
- package/esm2022/lib/compose/dismiss.service.mjs +3 -3
- package/esm2022/lib/compose/document-resolver.service.mjs +3 -3
- package/esm2022/lib/compose/document.component.mjs +3 -3
- package/esm2022/lib/compose/document.mobile.component.mjs +3 -3
- package/esm2022/lib/compose/document.pane.component.mjs +3 -3
- package/esm2022/lib/compose/events/events.component.mjs +3 -3
- package/esm2022/lib/compose/form-selector/form-selector.sheet.mjs +3 -3
- package/esm2022/lib/compose/form.component.mjs +3 -3
- package/esm2022/lib/compose/new-menu.component.mjs +5 -5
- package/esm2022/lib/compose/privilage.directive.mjs +6 -6
- package/esm2022/lib/compose/recipient-resolver.service.mjs +3 -3
- package/esm2022/lib/compose/state.component.mjs +3 -3
- package/esm2022/lib/compose/tag/tags.component.mjs +5 -5
- package/esm2022/lib/compose/trace/flow.component.mjs +8 -4
- package/esm2022/lib/compose/trace/people.component.mjs +3 -3
- package/esm2022/lib/compose/trace/trace.base.mjs +3 -3
- package/esm2022/lib/compose/trace/trace.component.mjs +3 -3
- package/esm2022/lib/compose/trace/trace.pane.component.mjs +7 -11
- package/esm2022/lib/compose/version-compare/version-compare.component.mjs +3 -3
- package/esm2022/lib/compose/version-compare/version-compare.directive.mjs +9 -9
- package/esm2022/lib/compose/version-compare/version.pane.component.mjs +5 -7
- package/esm2022/lib/core/StickyToolbar.mjs +3 -3
- package/esm2022/lib/core/account.service.mjs +3 -3
- package/esm2022/lib/core/animated-icon/animated-icon.directive.mjs +3 -3
- package/esm2022/lib/core/animations.mjs +6 -1
- package/esm2022/lib/core/avatar/avatar.component.mjs +3 -3
- package/esm2022/lib/core/checkbox.mjs +3 -3
- package/esm2022/lib/core/component-factory-resolver.mjs +3 -3
- package/esm2022/lib/core/datasource.service.mjs +3 -3
- package/esm2022/lib/core/fields/address.designer.mjs +3 -3
- package/esm2022/lib/core/fields/address.field.mjs +3 -3
- package/esm2022/lib/core/fields/autocomplete.field.mjs +6 -6
- package/esm2022/lib/core/fields/checkbox.designer.mjs +3 -3
- package/esm2022/lib/core/fields/checkbox.field.mjs +3 -3
- package/esm2022/lib/core/fields/checklist.designer.mjs +3 -3
- package/esm2022/lib/core/fields/checklist.field.mjs +3 -3
- package/esm2022/lib/core/fields/date-range.designer.mjs +3 -3
- package/esm2022/lib/core/fields/date-range.field.mjs +3 -3
- package/esm2022/lib/core/fields/date.designer.mjs +3 -3
- package/esm2022/lib/core/fields/date.field.mjs +3 -3
- package/esm2022/lib/core/fields/expression.field.mjs +6 -6
- package/esm2022/lib/core/fields/file.designer.mjs +3 -3
- package/esm2022/lib/core/fields/file.field.mjs +3 -3
- package/esm2022/lib/core/fields/html.designer.mjs +3 -3
- package/esm2022/lib/core/fields/html.field.mjs +3 -3
- package/esm2022/lib/core/fields/input.designer.mjs +3 -3
- package/esm2022/lib/core/fields/input.field.mjs +3 -3
- package/esm2022/lib/core/fields/localized-string.field.mjs +6 -6
- package/esm2022/lib/core/fields/numeric.designer.mjs +3 -3
- package/esm2022/lib/core/fields/numeric.field.mjs +3 -3
- package/esm2022/lib/core/fields/options.base.mjs +6 -6
- package/esm2022/lib/core/fields/options.component.mjs +3 -3
- package/esm2022/lib/core/fields/radio-button.designer.mjs +3 -3
- package/esm2022/lib/core/fields/radio-button.field.mjs +3 -3
- package/esm2022/lib/core/fields/select.designer.mjs +3 -3
- package/esm2022/lib/core/fields/select.field.mjs +3 -3
- package/esm2022/lib/core/fields/signature.designer.mjs +3 -3
- package/esm2022/lib/core/fields/signature.field.mjs +3 -3
- package/esm2022/lib/core/fields/switch.field.mjs +3 -3
- package/esm2022/lib/core/fields/tags.designer.mjs +3 -3
- package/esm2022/lib/core/fields/tags.field.mjs +3 -3
- package/esm2022/lib/core/fields/textarea.designer.mjs +3 -3
- package/esm2022/lib/core/fields/textarea.field.mjs +3 -3
- package/esm2022/lib/core/fields/time.designer.mjs +3 -3
- package/esm2022/lib/core/fields/time.field.mjs +3 -3
- package/esm2022/lib/core/fields/timespan.field.mjs +6 -6
- package/esm2022/lib/core/fields/yesno.designer.mjs +3 -3
- package/esm2022/lib/core/fields/yesno.field.mjs +3 -3
- package/esm2022/lib/core/guide/guide.component.mjs +8 -8
- package/esm2022/lib/core/guide/guide.service.mjs +3 -3
- package/esm2022/lib/core/guide/help-tip.component.mjs +3 -3
- package/esm2022/lib/core/http.interceptor.mjs +3 -3
- package/esm2022/lib/core/hub.service.mjs +3 -3
- package/esm2022/lib/core/identity/identity.component.mjs +3 -3
- package/esm2022/lib/core/info/attachment-info.service.mjs +3 -3
- package/esm2022/lib/core/info/document-info.service.mjs +3 -3
- package/esm2022/lib/core/info/location-info.component.mjs +3 -3
- package/esm2022/lib/core/info/map-info.mjs +3 -3
- package/esm2022/lib/core/inputs/address.input.mjs +3 -3
- package/esm2022/lib/core/inputs/auto-complete.input.mjs +3 -3
- package/esm2022/lib/core/inputs/combination-picker-body.mjs +3 -3
- package/esm2022/lib/core/inputs/combination-picker.mjs +5 -5
- package/esm2022/lib/core/inputs/combination-pool.mjs +3 -3
- package/esm2022/lib/core/inputs/file.input.mjs +3 -3
- package/esm2022/lib/core/inputs/select.input.mjs +3 -3
- package/esm2022/lib/core/inputs/signature.input.mjs +3 -3
- package/esm2022/lib/core/inputs/time-picker.mjs +3 -3
- package/esm2022/lib/core/inputs/timespan.input.mjs +3 -3
- package/esm2022/lib/core/layout.component.mjs +3 -3
- package/esm2022/lib/core/lottie-animation.mjs +3 -3
- package/esm2022/lib/core/mailbox.service.mjs +3 -3
- package/esm2022/lib/core/none.component.mjs +3 -3
- package/esm2022/lib/core/pipes/action.pipe.mjs +3 -3
- package/esm2022/lib/core/pipes/calendar.pipe.mjs +3 -3
- package/esm2022/lib/core/pipes/date-format.pipe.mjs +3 -3
- package/esm2022/lib/core/pipes/daterange.pipe.mjs +6 -6
- package/esm2022/lib/core/pipes/difference.pipe.mjs +3 -3
- package/esm2022/lib/core/pipes/duration-format.pipe.mjs +3 -3
- package/esm2022/lib/core/pipes/duration.pipe.mjs +3 -3
- package/esm2022/lib/core/pipes/form.pipe.mjs +3 -3
- package/esm2022/lib/core/pipes/join.pipe.mjs +3 -3
- package/esm2022/lib/core/pipes/localized-string.pipe.mjs +3 -3
- package/esm2022/lib/core/pipes/role.pipe.mjs +3 -3
- package/esm2022/lib/core/pipes/sanitize-html.pipe.mjs +3 -3
- package/esm2022/lib/core/pipes/sort.pipe.mjs +9 -9
- package/esm2022/lib/core/pipes/state.pipe.mjs +3 -3
- package/esm2022/lib/core/pipes/time-ago.pipe.mjs +6 -6
- package/esm2022/lib/core/pipes/translate.pipe.mjs +9 -9
- package/esm2022/lib/core/pipes/type-value.pipe.mjs +3 -3
- package/esm2022/lib/core/pipes/user-name.pipe.mjs +3 -3
- package/esm2022/lib/core/popup/popup.component.mjs +3 -3
- package/esm2022/lib/core/popup/popup.service.mjs +3 -3
- package/esm2022/lib/core/popup/tooltip.directive.mjs +6 -6
- package/esm2022/lib/core/prompt/ask/ask.dialog.mjs +3 -3
- package/esm2022/lib/core/prompt/mask/mask.component.mjs +3 -3
- package/esm2022/lib/core/prompt.service.mjs +3 -3
- package/esm2022/lib/core/router.mjs +6 -6
- package/esm2022/lib/core/save-changes.dialog.mjs +3 -3
- package/esm2022/lib/core/session.service.mjs +3 -3
- package/esm2022/lib/core/slots/router.directive.mjs +3 -3
- package/esm2022/lib/core/slots/router.service.mjs +3 -3
- package/esm2022/lib/core/slots/slots.component.mjs +37 -37
- package/esm2022/lib/core/tagging/documents.component.mjs +3 -3
- package/esm2022/lib/core/tagging/edit-input.component.mjs +5 -5
- package/esm2022/lib/core/tagging/emoji.component.mjs +3 -3
- package/esm2022/lib/core/tagging/tagging-item.directive.mjs +3 -3
- package/esm2022/lib/core/tagging/tagging.component-base.mjs +3 -3
- package/esm2022/lib/core/tagging/tagging.directive.mjs +3 -3
- package/esm2022/lib/core/tagging/tagging.pipe.mjs +3 -3
- package/esm2022/lib/core/tagging/users.component.mjs +3 -3
- package/esm2022/lib/core/translate.service.mjs +3 -3
- package/esm2022/lib/core/translations.mjs +34 -12
- package/esm2022/lib/core/window-title.service.mjs +3 -3
- package/esm2022/lib/cube/accum/accum.component.mjs +3 -3
- package/esm2022/lib/cube/chart/chart.component.mjs +3 -3
- package/esm2022/lib/cube/cube-info.service.mjs +3 -3
- package/esm2022/lib/cube/cube-menu.component.mjs +5 -5
- package/esm2022/lib/cube/cube-view.component.mjs +3 -3
- package/esm2022/lib/cube/cube.service.mjs +3 -3
- package/esm2022/lib/cube/explore/document-item.component.mjs +3 -3
- package/esm2022/lib/cube/explore/explore-item.component.mjs +3 -3
- package/esm2022/lib/cube/explore/explore-items.component.mjs +3 -3
- package/esm2022/lib/cube/explore/explore.pane.component.mjs +5 -7
- package/esm2022/lib/cube/explore/item-resolver.service.mjs +6 -6
- package/esm2022/lib/cube/explore/item.pane.component.mjs +5 -7
- package/esm2022/lib/cube/filter/filter-tags.component.exp.mjs +3 -3
- package/esm2022/lib/cube/filter/filter.component.mjs +3 -3
- package/esm2022/lib/cube/grid/grid.component.mjs +3 -3
- package/esm2022/lib/cube/matrix/matrix.base.mjs +3 -3
- package/esm2022/lib/cube/matrix/matrix.mobile.component.mjs +3 -3
- package/esm2022/lib/cube/matrix/matrix.pane.component.mjs +5 -7
- package/esm2022/lib/cube/matrix/popup.component.mjs +3 -3
- package/esm2022/lib/cube/matrix/table.component.mjs +122 -101
- package/esm2022/lib/cube/parallel/parallel.component.mjs +3 -3
- package/esm2022/lib/cube/pivot/pivot.component.mjs +3 -3
- package/esm2022/lib/cube/spreadsheet/spreadsheet.component.mjs +3 -3
- package/esm2022/lib/cube/spreadsheet/spreadsheet.container.mjs +3 -3
- package/esm2022/lib/cube/sum/sum.component.mjs +3 -3
- package/esm2022/lib/cube/view-base.mjs +3 -3
- package/esm2022/lib/cube/view.mobile.component.mjs +3 -3
- package/esm2022/lib/cube/view.pane.component.mjs +27 -15
- package/esm2022/lib/dashboard/actions/actions.widget.mjs +3 -3
- package/esm2022/lib/dashboard/cube/accum-cube.widget.mjs +3 -3
- package/esm2022/lib/dashboard/cube/compare.widget.mjs +3 -3
- package/esm2022/lib/dashboard/cube/cube-analysis.base.mjs +3 -3
- package/esm2022/lib/dashboard/cube/cube-analysis.widget.mjs +3 -3
- package/esm2022/lib/dashboard/cube/cube-chart.widget.mjs +3 -3
- package/esm2022/lib/dashboard/cube/document-state.widget.mjs +3 -3
- package/esm2022/lib/dashboard/cube/documents.widget.mjs +3 -3
- package/esm2022/lib/dashboard/cube/filter/filter.component.mjs +3 -3
- package/esm2022/lib/dashboard/dashboard.component.mjs +3 -3
- package/esm2022/lib/dashboard/dashboard.pane.component.mjs +5 -5
- package/esm2022/lib/dashboard/recents/recents.widget.mjs +3 -3
- package/esm2022/lib/dashboard/score/activity.widget.mjs +3 -3
- package/esm2022/lib/dashboard/score/compare-groups.widget.mjs +3 -3
- package/esm2022/lib/dashboard/score/peers-performance.widget.mjs +3 -3
- package/esm2022/lib/dashboard/score/pending-results.widget.mjs +3 -3
- package/esm2022/lib/dashboard/score/personal-score.widget.mjs +3 -3
- package/esm2022/lib/dashboard/widget-item.component.mjs +3 -3
- package/esm2022/lib/designer.module.mjs +4 -4
- package/esm2022/lib/desktop.module.mjs +5 -8
- package/esm2022/lib/home/about/about.dialog.mjs +3 -3
- package/esm2022/lib/home/home-base.component.mjs +5 -5
- package/esm2022/lib/home/home.desktop.component.mjs +133 -42
- package/esm2022/lib/home/home.mobile.component.mjs +5 -5
- package/esm2022/lib/home/notifications/notifications.component.mjs +3 -3
- package/esm2022/lib/home/options/options.component.mjs +34 -37
- package/esm2022/lib/home/outofoffice/outofoffice.component.mjs +5 -5
- package/esm2022/lib/home/sign/sign.component.mjs +3 -3
- package/esm2022/lib/impersonate/impersonate.component.mjs +3 -3
- package/esm2022/lib/mobile.module.mjs +4 -4
- package/esm2022/lib/modules/chart.module.mjs +4 -4
- package/esm2022/lib/modules/circular-gauge.module.mjs +4 -4
- package/esm2022/lib/modules/datepicker.intl.mjs +3 -3
- package/esm2022/lib/modules/dayjs.module.mjs +4 -4
- package/esm2022/lib/modules/diagram.module.mjs +4 -4
- package/esm2022/lib/modules/gantt.module.mjs +4 -4
- package/esm2022/lib/modules/grid.module.mjs +4 -4
- package/esm2022/lib/modules/linear-gauge.module.mjs +4 -4
- package/esm2022/lib/modules/material.module.mjs +4 -4
- package/esm2022/lib/modules/paginator.intl.mjs +3 -3
- package/esm2022/lib/modules/pivot.module.mjs +4 -4
- package/esm2022/lib/modules/schedule.module.mjs +4 -4
- package/esm2022/lib/modules/spreadsheet.module.mjs +4 -4
- package/esm2022/lib/modules/stepper.intl.mjs +3 -3
- package/esm2022/lib/modules/texteditor.module.mjs +4 -4
- package/esm2022/lib/notifications/filter.component.mjs +3 -3
- package/esm2022/lib/notifications/notifications-table.component.mjs +3 -3
- package/esm2022/lib/notifications/notifications.mobile.component.mjs +3 -3
- package/esm2022/lib/notifications/notifications.pane.component.mjs +5 -8
- package/esm2022/lib/notifications/notifications.service.mjs +3 -3
- package/esm2022/lib/notifications/types/commented.notification.mjs +3 -3
- package/esm2022/lib/notifications/types/cube-anomaly.notification.mjs +3 -3
- package/esm2022/lib/notifications/types/escalated.notification.mjs +3 -3
- package/esm2022/lib/notifications/types/invite.notification.mjs +3 -3
- package/esm2022/lib/notifications/types/liked.notification.mjs +3 -3
- package/esm2022/lib/notifications/types/long-running-task.notification.mjs +3 -3
- package/esm2022/lib/notifications/types/notification-base.mjs +3 -3
- package/esm2022/lib/notifications/types/nudge.notification.mjs +3 -3
- package/esm2022/lib/notifications/types/state-changed.notification.mjs +3 -3
- package/esm2022/lib/notifications/types/tagged.notification.mjs +3 -3
- package/esm2022/lib/notifications/types/text.notification.mjs +3 -3
- package/esm2022/lib/notifications/types/upcoming-event.notification.mjs +3 -3
- package/esm2022/lib/options/options.component.mjs +87 -91
- package/esm2022/lib/options/options.service.mjs +10 -29
- package/esm2022/lib/reports/arguments-component.mjs +3 -3
- package/esm2022/lib/reports/cube/documents.component.mjs +3 -3
- package/esm2022/lib/reports/cube/grid-documents.component.mjs +3 -3
- package/esm2022/lib/reports/cube/role-performance.component.mjs +3 -3
- package/esm2022/lib/reports/cube/table-documents.component.mjs +3 -3
- package/esm2022/lib/reports/cube/usage-args.component.mjs +3 -3
- package/esm2022/lib/reports/cube/usage-base.mjs +3 -3
- package/esm2022/lib/reports/cube/usage-chart.component.mjs +3 -3
- package/esm2022/lib/reports/cube/usage-pivot.component.mjs +3 -3
- package/esm2022/lib/reports/cube/usage.component.mjs +3 -3
- package/esm2022/lib/reports/report-viewer.component.mjs +3 -3
- package/esm2022/lib/reports/report.mobile.component.mjs +3 -3
- package/esm2022/lib/reports/report.pane.component.mjs +28 -13
- package/esm2022/lib/reports/reports-menu.component.mjs +5 -5
- package/esm2022/lib/reports/substitution/substitution.component.mjs +3 -3
- package/esm2022/lib/reports/table/table-view.component.mjs +3 -3
- package/esm2022/lib/reports/tasks/tasks.component.mjs +3 -3
- package/esm2022/lib/routes.desktop.mjs +2 -2
- package/esm2022/lib/scheduler/schedule.component.mjs +5 -5
- package/esm2022/lib/scheduler/scheduler.mobile.component.mjs +3 -3
- package/esm2022/lib/scheduler/scheduler.pane.component.mjs +5 -8
- package/esm2022/lib/search/cube.component.mjs +9 -7
- package/esm2022/lib/search/document.component.mjs +6 -6
- package/esm2022/lib/search/guide.component.mjs +10 -9
- package/esm2022/lib/search/path.component.mjs +6 -6
- package/esm2022/lib/search/search.service.mjs +3 -3
- package/esm2022/lib/shared.module.mjs +7 -7
- package/esm2022/lib/system.module.mjs +9 -5
- package/esm2022/lib/views/cube/chart.component.mjs +3 -3
- package/esm2022/lib/views/cube/cube-base.mjs +3 -3
- package/esm2022/lib/views/cube/explore.component.mjs +3 -3
- package/esm2022/lib/views/cube/matrix.component.mjs +7 -5
- package/esm2022/lib/views/cube/parallel.component.mjs +3 -3
- package/esm2022/lib/views/cube/pivot.component.mjs +3 -3
- package/esm2022/lib/views/cube/sum.component.mjs +3 -3
- package/esm2022/lib/views/cube/view.component.mjs +3 -3
- package/esm2022/lib/views/timeline/timeline.component.mjs +3 -3
- package/esm2022/lib/views/view-item.component.mjs +3 -3
- package/esm2022/lib/views/views.component.mjs +3 -3
- package/esm2022/lib/views/views.mobile.component.mjs +3 -3
- package/esm2022/lib/views/views.pane.component.mjs +3 -3
- package/esm2022/public-api.mjs +2 -1
- package/fesm2022/bizdoc-core.mjs +3092 -3043
- package/fesm2022/bizdoc-core.mjs.map +1 -1
- package/lib/admin/architecture/designer.component.d.ts +2 -1
- package/lib/browse/browse.pane.component.d.ts +3 -2
- package/lib/browse/filter/filter.component.d.ts +2 -5
- package/lib/chat/conversation.component.d.ts +0 -1
- package/lib/compose/comments/comments.component.d.ts +0 -1
- package/lib/compose/trace/trace.pane.component.d.ts +1 -1
- package/lib/core/animations.d.ts +2 -0
- package/lib/core/guide/guide.component.d.ts +1 -1
- package/lib/core/slots/slots.component.d.ts +7 -5
- package/lib/core/translations.d.ts +29 -7
- package/lib/cube/matrix/table.component.d.ts +13 -7
- package/lib/cube/view.pane.component.d.ts +8 -3
- package/lib/desktop.module.d.ts +37 -38
- package/lib/home/home-base.component.d.ts +1 -1
- package/lib/home/home.desktop.component.d.ts +31 -6
- package/lib/home/home.mobile.component.d.ts +1 -1
- package/lib/home/options/options.component.d.ts +10 -13
- package/lib/options/options.component.d.ts +21 -23
- package/lib/options/options.service.d.ts +2 -7
- package/lib/reports/report.pane.component.d.ts +8 -2
- package/lib/shared.module.d.ts +1 -1
- package/lib/views/cube/matrix.component.d.ts +2 -0
- package/package.json +6 -6
- package/public-api.d.ts +1 -0
- package/esm2022/lib/home/tools.component.mjs +0 -82
- package/lib/home/tools.component.d.ts +0 -35
@@ -1,49 +1,42 @@
|
|
1
|
-
import { Component, ViewChild, InjectionToken, Inject, Optional } from '@angular/core';
|
1
|
+
import { Component, ViewChild, InjectionToken, Inject, Optional, Input } from '@angular/core';
|
2
2
|
import { Subject, merge } from 'rxjs';
|
3
3
|
import { debounceTime, takeUntil, filter, map, switchMap, tap } from 'rxjs/operators';
|
4
|
-
import { MatExpansionPanel } from '@angular/material/expansion';
|
5
4
|
import { MatChipInput } from '@angular/material/chips';
|
6
5
|
import { COMMA, ENTER, SEMICOLON } from '@angular/cdk/keycodes';
|
7
6
|
import { MatInput } from '@angular/material/input';
|
8
7
|
import { BIZDOC_CONFIG } from '../core/configuration';
|
9
8
|
import { isMobile, isString } from '../core/functions';
|
9
|
+
import { verticalSwapAnimation } from '../core/animations';
|
10
10
|
import * as i0 from "@angular/core";
|
11
|
-
import * as i1 from "
|
12
|
-
import * as i2 from "@angular/
|
13
|
-
import * as i3 from "
|
14
|
-
import * as i4 from "../core/
|
15
|
-
import * as i5 from "../core/
|
16
|
-
import * as i6 from "
|
11
|
+
import * as i1 from "@angular/cdk/overlay";
|
12
|
+
import * as i2 from "@angular/forms";
|
13
|
+
import * as i3 from "../core/account.service";
|
14
|
+
import * as i4 from "../core/prompt.service";
|
15
|
+
import * as i5 from "../core/session.service";
|
16
|
+
import * as i6 from "@angular/common";
|
17
17
|
import * as i7 from "@angular/material/chips";
|
18
|
-
import * as i8 from "@angular/material/
|
19
|
-
import * as i9 from "@angular/material/
|
20
|
-
import * as i10 from "@angular/material/
|
21
|
-
import * as i11 from "@angular/material/
|
22
|
-
import * as i12 from "@angular/material/
|
23
|
-
import * as i13 from "@angular/material/
|
24
|
-
import * as i14 from "@angular/material/
|
25
|
-
import * as i15 from "@angular/material/
|
26
|
-
import * as i16 from "@angular/material/
|
27
|
-
import * as i17 from "
|
28
|
-
import * as i18 from "
|
29
|
-
import * as i19 from "../core/
|
30
|
-
import * as i20 from "@angular/common";
|
31
|
-
import * as i21 from "../core/pipes/translate.pipe";
|
32
|
-
import * as i22 from "../core/pipes/user-name.pipe";
|
18
|
+
import * as i8 from "@angular/material/datepicker";
|
19
|
+
import * as i9 from "@angular/material/list";
|
20
|
+
import * as i10 from "@angular/material/autocomplete";
|
21
|
+
import * as i11 from "@angular/material/core";
|
22
|
+
import * as i12 from "@angular/material/form-field";
|
23
|
+
import * as i13 from "@angular/material/slide-toggle";
|
24
|
+
import * as i14 from "@angular/material/button";
|
25
|
+
import * as i15 from "@angular/material/input";
|
26
|
+
import * as i16 from "@angular/material/icon";
|
27
|
+
import * as i17 from "../core/popup/tooltip.directive";
|
28
|
+
import * as i18 from "../core/pipes/translate.pipe";
|
29
|
+
import * as i19 from "../core/pipes/user-name.pipe";
|
33
30
|
export const OPTION_PANEL = new InjectionToken('options');
|
34
31
|
/** options component*/
|
35
32
|
export class OptionsComponent {
|
36
|
-
|
37
|
-
constructor(_option, paneRef, overlayRef, _fb, _accounts, _sb, _session, config) {
|
38
|
-
this._option = _option;
|
33
|
+
constructor(options, overlayRef, _fb, _accounts, _sb, _session, config) {
|
39
34
|
this._fb = _fb;
|
40
35
|
this._accounts = _accounts;
|
41
36
|
this._sb = _sb;
|
42
37
|
this._session = _session;
|
38
|
+
this.sectionIndex = 0;
|
43
39
|
this.saveing = false;
|
44
|
-
this._destroy = new Subject();
|
45
|
-
this.today = new Date();
|
46
|
-
this.isMobile = isMobile();
|
47
40
|
this._requiredValidator = (control) => {
|
48
41
|
const parent = control.parent;
|
49
42
|
if (parent && parent.controls.active.value && !control.value)
|
@@ -51,11 +44,8 @@ export class OptionsComponent {
|
|
51
44
|
required: true
|
52
45
|
};
|
53
46
|
};
|
54
|
-
this.
|
55
|
-
this.
|
56
|
-
this.languages = this._session.languages;
|
57
|
-
this.gusers = this._fb.control([]);
|
58
|
-
this.substitueId = this._fb.control(null);
|
47
|
+
this.grantUserIds = this._fb.control([]);
|
48
|
+
this.oooId = this._fb.control(null);
|
59
49
|
this.form = this._fb.group({
|
60
50
|
notifications: this._fb.group({
|
61
51
|
active: this._fb.control(false),
|
@@ -88,43 +78,38 @@ export class OptionsComponent {
|
|
88
78
|
users: this._fb.control(null, this._requiredValidator)
|
89
79
|
})
|
90
80
|
});
|
81
|
+
this.today = new Date();
|
82
|
+
this.isMobile = isMobile();
|
91
83
|
this.separatorKeysCodes = [ENTER, COMMA, SEMICOLON];
|
84
|
+
/** options ctor */
|
85
|
+
this._destroy = new Subject();
|
92
86
|
this.display = (item) => {
|
93
87
|
return item ? item.name : null;
|
94
88
|
};
|
95
|
-
|
96
|
-
|
97
|
-
|
89
|
+
this.voating = !config.comments || config.comments.voting !== false;
|
90
|
+
this.sectionName = options?.section;
|
91
|
+
this.options = this._session.profile.options;
|
98
92
|
overlayRef && merge(overlayRef.keydownEvents().pipe(filter(k => k.key === 'Escape')), overlayRef.backdropClick()).
|
99
93
|
subscribe(() => {
|
100
94
|
this.form.valid &&
|
101
95
|
this.save();
|
102
96
|
overlayRef.dispose();
|
103
97
|
});
|
104
|
-
paneRef && paneRef.closed().subscribe(() => this.form.valid &&
|
105
|
-
this.save());
|
106
98
|
}
|
107
99
|
ngOnInit() {
|
108
|
-
this.
|
109
|
-
|
110
|
-
this.
|
111
|
-
const outOfOffice = this.form.controls.outOfOffice;
|
112
|
-
const grantAccess = this.form.controls.grantAccess;
|
113
|
-
const notifications = this.form.controls.notifications;
|
114
|
-
const emails = this.form.controls.emails;
|
115
|
-
const options = this.options = this._session.profile.options;
|
116
|
-
this.form.patchValue(options, { emitEvent: false });
|
117
|
-
if (!options.notifications.active)
|
100
|
+
const { outOfOffice, grantAccess, notifications, emails } = this.form.controls;
|
101
|
+
this.form.patchValue(this.options, { emitEvent: false });
|
102
|
+
if (!this.options.notifications.active)
|
118
103
|
this._toggle(notifications, false, 'likes', 'commentMyDocument', 'commentAnyDocument', 'upcomingEvents', 'tagged', 'anyDocumentStateChange', 'myDocumentStateChange', 'cubeAnomaly');
|
119
|
-
if (!options.emails.active)
|
104
|
+
if (!this.options.emails.active)
|
120
105
|
this._toggle(emails, false, 'mail', 'chat', 'notifications', 'events');
|
121
|
-
if (!options.grantAccess.active)
|
122
|
-
this.
|
123
|
-
if (!options.outOfOffice.active) {
|
124
|
-
this.
|
106
|
+
if (!this.options.grantAccess.active)
|
107
|
+
this.grantUserIds.disable();
|
108
|
+
if (!this.options.outOfOffice.active) {
|
109
|
+
this.oooId.disable();
|
125
110
|
this._toggle(outOfOffice, false, 'from', 'to');
|
126
111
|
}
|
127
|
-
else if (!options.outOfOffice.from)
|
112
|
+
else if (!this.options.outOfOffice.from)
|
128
113
|
this._toggle(outOfOffice, false, 'to');
|
129
114
|
// change
|
130
115
|
notifications.controls.active.valueChanges.pipe(takeUntil(this._destroy)).
|
@@ -134,49 +119,58 @@ export class OptionsComponent {
|
|
134
119
|
grantAccess.controls.active.valueChanges.pipe(takeUntil(this._destroy)).
|
135
120
|
subscribe(active => {
|
136
121
|
if (active) {
|
137
|
-
this.
|
122
|
+
this.grantUserIds.enable();
|
138
123
|
this.grantInput.focus();
|
139
124
|
}
|
140
125
|
else
|
141
|
-
this.
|
126
|
+
this.grantUserIds.enable();
|
142
127
|
});
|
143
128
|
outOfOffice.controls.active.valueChanges.pipe(takeUntil(this._destroy)).
|
144
129
|
subscribe(active => {
|
145
130
|
if (active) {
|
146
|
-
this.
|
131
|
+
this.oooId.enable();
|
147
132
|
this.substitueInput.focus();
|
148
133
|
}
|
149
134
|
else
|
150
|
-
this.
|
135
|
+
this.oooId.disable();
|
151
136
|
this._toggle(outOfOffice, active, 'from');
|
152
137
|
this._toggle(outOfOffice, active && outOfOffice.controls.from.value, 'to');
|
153
138
|
});
|
154
139
|
outOfOffice.controls.from.valueChanges.pipe(takeUntil(this._destroy)).
|
155
140
|
subscribe(from => this._toggle(outOfOffice, from !== null, 'to'));
|
156
|
-
this.gusers$ = this.
|
141
|
+
this.gusers$ = this.grantUserIds.valueChanges.pipe(takeUntil(this._destroy), filter(v => isString(v)), debounceTime(100), switchMap(v => this._accounts.findAll(v)), map(r => {
|
157
142
|
const exclude = grantAccess.value.users?.slice() || [];
|
158
143
|
exclude.push(this._session.profile.userId);
|
159
144
|
return r.filter(u => exclude.indexOf(u.id) < 0);
|
160
145
|
}));
|
161
|
-
this.susers$ = this.
|
162
|
-
if (options.outOfOffice.substitueId)
|
163
|
-
this._accounts.get(options.outOfOffice.substitueId).subscribe(u => this.
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
146
|
+
this.susers$ = this.oooId.valueChanges.pipe(takeUntil(this._destroy), tap(v => !v && outOfOffice.controls.substitueId.setValue(null)), filter(v => isString(v)), switchMap(v => this._accounts.findAll(v)), map(r => r.filter(u => u.id !== this._session.profile.userId)));
|
147
|
+
if (this.options.outOfOffice.substitueId)
|
148
|
+
this._accounts.get(this.options.outOfOffice.substitueId).subscribe(u => this.oooId.setValue(u, { emitEvent: false }));
|
149
|
+
// auto save
|
150
|
+
this.form.valueChanges.pipe(takeUntil(this._destroy), debounceTime(400)).subscribe(() => this.form.valid && this.save());
|
151
|
+
switch (this.sectionName) {
|
152
|
+
case 'out_of_office':
|
153
|
+
this.sectionTmpl = this.oooTmpl;
|
154
|
+
this.sectionIndex = 2;
|
155
|
+
break;
|
156
|
+
case 'notifications':
|
157
|
+
this.sectionTmpl = this.notificationsTmpl;
|
158
|
+
this.sectionIndex = 0;
|
159
|
+
break;
|
160
|
+
}
|
161
|
+
}
|
162
|
+
nav(sectionName, template, index) {
|
163
|
+
this.sectionName = sectionName;
|
164
|
+
this.sectionTmpl = template;
|
165
|
+
this.sectionIndex = index;
|
172
166
|
}
|
173
167
|
save() {
|
174
168
|
this.saveing = true;
|
175
|
-
this.form.
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
169
|
+
this._session.update(this.form.getRawValue()).subscribe({
|
170
|
+
next: () => this.form.markAsPristine(),
|
171
|
+
error: () => this._sb.error(),
|
172
|
+
complete: () => this.saveing = false
|
173
|
+
});
|
180
174
|
}
|
181
175
|
_toggle(group, active, ...controls) {
|
182
176
|
controls.forEach(name => {
|
@@ -187,7 +181,7 @@ export class OptionsComponent {
|
|
187
181
|
});
|
188
182
|
}
|
189
183
|
toggleSound() {
|
190
|
-
this.form.controls.notifications.controls.sound.setValue(!this.
|
184
|
+
this.form.controls.notifications.controls.sound.setValue(!this.form.controls.notifications.controls.sound.value);
|
191
185
|
}
|
192
186
|
addTag(event) {
|
193
187
|
const { chipInput, value } = event;
|
@@ -229,29 +223,28 @@ export class OptionsComponent {
|
|
229
223
|
inp.value = '';
|
230
224
|
this.form.patchValue({});
|
231
225
|
}
|
232
|
-
|
226
|
+
oooSelected(event) {
|
233
227
|
(this.form.controls.outOfOffice).controls.substitueId.setValue(event.option.value.id);
|
234
228
|
}
|
235
229
|
ngOnDestroy() {
|
230
|
+
this.form.dirty && this.save();
|
236
231
|
this._destroy.next();
|
237
232
|
this._destroy.complete();
|
238
233
|
}
|
239
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.
|
240
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.2.0", type: OptionsComponent, selector: "bizdoc-options", viewQueries: [{ propertyName: "substitueInput", first: true, predicate: ["substitueInput"], descendants: true, read: MatInput }, { propertyName: "grantInput", first: true, predicate: ["grantInput"], descendants: true, read: MatChipInput }, { propertyName: "outOfOffice", first: true, predicate: ["outOfOffice"], descendants: true, read: MatExpansionPanel, static: true }, { propertyName: "notifications", first: true, predicate: ["notifications"], descendants: true, read: MatExpansionPanel, static: true }], ngImport: i0, template: "<mat-toolbar>\n <button mat-icon-button (click)=\"save()\" [disabled]=\"!form.dirty || !form.valid || saveing\" [bizdocTooltip]=\"'Save'|translate\"><mat-icon>save</mat-icon></button>\n</mat-toolbar>\n<mat-progress-bar mode=\"indeterminate\" [style.visibility]=\"saveing ? 'visible':'hidden'\"></mat-progress-bar>\n<form [formGroup]=\"form\" autocomplete=\"off\">\n <mat-accordion>\n <mat-expansion-panel #notifications>\n <mat-expansion-panel-header>\n <mat-panel-title>\n {{'Notifications' | translate}}\n </mat-panel-title>\n <mat-panel-description>\n <!--<mat-icon>notifications</mat-icon>-->\n </mat-panel-description>\n </mat-expansion-panel-header>\n <div formGroupName=\"notifications\" class=\"column\">\n <div class=\"row\">\n <mat-slide-toggle formControlName=\"active\">{{'Active' | translate}}</mat-slide-toggle>\n <span class=\"divider\"></span>\n <button mat-icon-button (click)=\"toggleSound()\" [bizdocTooltip]=\"'Sound'|translate\"><mat-icon>{{options.notifications.sound ? 'volume_up' : 'volume_off'}}</mat-icon></button>\n </div>\n <br />\n <mat-slide-toggle formControlName=\"myDocumentStateChange\">{{'MyStateChange' | translate}}</mat-slide-toggle>\n <mat-slide-toggle formControlName=\"anyDocumentStateChange\">{{'AnyStateChange' | translate}}</mat-slide-toggle>\n <mat-slide-toggle formControlName=\"commentMyDocument\">{{'CommentMyDocument' | translate}}</mat-slide-toggle>\n <mat-slide-toggle formControlName=\"commentAnyDocument\">{{'CommentAnyDocument' | translate}}</mat-slide-toggle>\n <mat-slide-toggle formControlName=\"likes\" [style.display]=\"voating?'':'none'\">{{'LikedComment' | translate}}</mat-slide-toggle>\n <mat-slide-toggle formControlName=\"tagged\">{{'TaggedInComments' | translate}}</mat-slide-toggle>\n <mat-slide-toggle formControlName=\"upcomingEvents\">{{'UpcomingEvents' | translate}}</mat-slide-toggle>\n <mat-slide-toggle formControlName=\"cubeAnomaly\">{{'CubeAnomaly' | translate}}</mat-slide-toggle>\n </div>\n </mat-expansion-panel>\n <mat-expansion-panel #emails>\n <mat-expansion-panel-header>\n <mat-panel-title>\n {{'Emails' | translate}}\n </mat-panel-title>\n <mat-panel-description>\n <!--<mat-icon>alternate_email</mat-icon>-->\n </mat-panel-description>\n </mat-expansion-panel-header>\n <div formGroupName=\"emails\" class=\"column\">\n <mat-slide-toggle formControlName=\"active\">{{'Active' | translate}}</mat-slide-toggle>\n <br />\n <mat-slide-toggle formControlName=\"mail\">{{'Mails' | translate}}</mat-slide-toggle>\n <mat-slide-toggle formControlName=\"chat\">{{'Conversations' | translate}}</mat-slide-toggle>\n <mat-slide-toggle formControlName=\"notifications\">{{'EmailNotifications' | translate}}</mat-slide-toggle>\n <mat-slide-toggle formControlName=\"events\">{{'AlarmEvents' | translate}}</mat-slide-toggle>\n </div>\n </mat-expansion-panel>\n <mat-expansion-panel #outOfOffice>\n <mat-expansion-panel-header>\n <mat-panel-title>\n {{'OutOfOffice' | translate}}\n </mat-panel-title>\n <mat-panel-description>\n <!--<mat-icon>trending_flat</mat-icon>-->\n <!--{{'OutOfOfficeTip' | translate}}-->\n </mat-panel-description>\n </mat-expansion-panel-header>\n <div formGroupName=\"outOfOffice\" class=\"column\">\n <mat-slide-toggle formControlName=\"active\">{{'Active' | translate}}</mat-slide-toggle>\n <br />\n <mat-form-field class=\"flex\">\n <input matInput [formControl]=\"substitueId\" type=\"search\" [matAutocomplete]=\"sauto\" #substitueInput\n [placeholder]=\"'Associate' | translate\" [required]=\"form.value.outOfOffice.active\" />\n <mat-autocomplete #sauto=\"matAutocomplete\" [displayWith]=\"display\"\n (optionSelected)=\"setSubstitute($event)\">\n @for (u of susers$ | async; track u) {\n <mat-option [value]=\"u\">\n <span>{{u.name}}</span>\n </mat-option>\n }\n </mat-autocomplete>\n <mat-hint>{{'OutOfOfficeTip' | translate}}</mat-hint>\n </mat-form-field>\n <mat-form-field>\n <mat-label>{{'Dates'|translate}}</mat-label>\n <mat-date-range-input [rangePicker]=\"dates\" required>\n <input matStartDate formControlName=\"from\" [placeholder]=\"'From'|translate\" [min]=\"today\">\n <input matEndDate formControlName=\"to\" [placeholder]=\"'To'|translate\">\n </mat-date-range-input>\n <mat-datepicker-toggle matSuffix [for]=\"dates\"></mat-datepicker-toggle>\n <mat-date-range-picker #dates [touchUi]=\"isMobile\"></mat-date-range-picker>\n @if (form.controls.outOfOffice.controls.from.hasError('required') || form.controls.outOfOffice.controls.to.hasError('required')) {\n <mat-error [innerHTML]=\"'AreRequiredErr'|translate : ('Dates'|translate)\"></mat-error>\n }\n </mat-form-field>\n </div>\n </mat-expansion-panel>\n <mat-expansion-panel #grantAccess>\n <mat-expansion-panel-header>\n <mat-panel-title>\n {{'GrantAccess' | translate}}\n </mat-panel-title>\n <mat-panel-description>\n <!--<mat-icon>account_circle</mat-icon>-->\n </mat-panel-description>\n </mat-expansion-panel-header>\n <div formGroupName=\"grantAccess\" class=\"grant-section\">\n <mat-slide-toggle formControlName=\"active\">{{'Active' | translate}}</mat-slide-toggle>\n <mat-form-field>\n <mat-chip-grid #grantList [attr.aria-label]=\"\" [disabled]=\"!form.value.grantAccess.active\">\n @for (u of form.value.grantAccess.users || []; track u) {\n <mat-chip-row (removed)=\"removeGrant(u)\">\n {{u | userName | async}}\n <mat-icon matChipRemove>cancel</mat-icon>\n </mat-chip-row>\n }\n </mat-chip-grid>\n <input [formControl]=\"gusers\" placeholder=\"{{'Users'| translate}}\"\n #grantInput\n [matAutocomplete]=\"grantAuto\"\n [matChipInputFor]=\"grantList\"\n [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\">\n <mat-autocomplete #grantAuto=\"matAutocomplete\" (optionSelected)=\"addGrant(grantInput, $event)\">\n @for (u of gusers$ | async; track u) {\n <mat-option [value]=\"u.id\">\n {{u.name}}\n @if (u.email) {\n <span> - {{u.email}}</span>\n }\n </mat-option>\n }\n </mat-autocomplete>\n <mat-hint>{{'GrantTip' | translate}}</mat-hint>\n </mat-form-field>\n </div>\n </mat-expansion-panel>\n <mat-expansion-panel #preferences>\n <mat-expansion-panel-header>\n <mat-panel-title>\n {{'Preferences' | translate}}\n </mat-panel-title>\n <mat-panel-description>\n <!--<mat-icon></mat-icon>-->\n </mat-panel-description>\n </mat-expansion-panel-header>\n <div class=\"column\">\n <mat-form-field>\n <mat-chip-grid #chips>\n @for (item of form.value.tags; track item) {\n <mat-chip-row [removable]=\"true\" (removed)=\"removeTag(item)\">\n {{item}}\n <mat-icon matChipRemove>cancel</mat-icon>\n </mat-chip-row>\n }\n </mat-chip-grid>\n <input [placeholder]=\"'Tags'|translate\"\n [matChipInputFor]=\"chips\"\n [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\"\n [matChipInputAddOnBlur]=\"true\"\n (matChipInputTokenEnd)=\"addTag($event)\">\n </mat-form-field>\n <mat-slide-toggle [formControl]=\"aRIA\">{{'ARIA' | translate}}</mat-slide-toggle>\n </div>\n </mat-expansion-panel>\n </mat-accordion>\n</form>\n", styles: [":host{max-width:80vw;min-width:420px}.grant-section{display:flex;flex-direction:column}\n"], dependencies: [{ kind: "directive", type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i3.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "component", type: i7.MatChipGrid, selector: "mat-chip-grid", inputs: ["disabled", "placeholder", "required", "value", "errorStateMatcher"], outputs: ["change", "valueChange"] }, { kind: "directive", type: i7.MatChipInput, selector: "input[matChipInputFor]", inputs: ["matChipInputFor", "matChipInputAddOnBlur", "matChipInputSeparatorKeyCodes", "placeholder", "id", "disabled"], outputs: ["matChipInputTokenEnd"], exportAs: ["matChipInput", "matChipInputFor"] }, { kind: "directive", type: i7.MatChipRemove, selector: "[matChipRemove]" }, { kind: "component", type: i7.MatChipRow, selector: "mat-chip-row, [mat-chip-row], mat-basic-chip-row, [mat-basic-chip-row]", inputs: ["editable"], outputs: ["edited"] }, { kind: "directive", type: i8.MatAccordion, selector: "mat-accordion", inputs: ["hideToggle", "displayMode", "togglePosition"], exportAs: ["matAccordion"] }, { kind: "component", type: i8.MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["hideToggle", "togglePosition"], outputs: ["afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { kind: "component", type: i8.MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["expandedHeight", "collapsedHeight", "tabIndex"] }, { kind: "directive", type: i8.MatExpansionPanelTitle, selector: "mat-panel-title" }, { kind: "directive", type: i8.MatExpansionPanelDescription, selector: "mat-panel-description" }, { kind: "component", type: i9.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "component", type: i9.MatDateRangeInput, selector: "mat-date-range-input", inputs: ["rangePicker", "required", "dateFilter", "min", "max", "disabled", "separator", "comparisonStart", "comparisonEnd"], exportAs: ["matDateRangeInput"] }, { kind: "directive", type: i9.MatStartDate, selector: "input[matStartDate]", outputs: ["dateChange", "dateInput"] }, { kind: "directive", type: i9.MatEndDate, selector: "input[matEndDate]", outputs: ["dateChange", "dateInput"] }, { kind: "component", type: i9.MatDateRangePicker, selector: "mat-date-range-picker", exportAs: ["matDateRangePicker"] }, { kind: "component", type: i10.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "component", type: i11.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { kind: "component", type: i12.MatAutocomplete, selector: "mat-autocomplete", inputs: ["aria-label", "aria-labelledby", "displayWith", "autoActiveFirstOption", "autoSelectActiveOption", "requireSelection", "panelWidth", "disableRipple", "class", "hideSingleSelectionIndicator"], outputs: ["optionSelected", "opened", "closed", "optionActivated"], exportAs: ["matAutocomplete"] }, { kind: "component", type: i13.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: i12.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", inputs: ["matAutocomplete", "matAutocompletePosition", "matAutocompleteConnectedTo", "autocomplete", "matAutocompleteDisabled"], exportAs: ["matAutocompleteTrigger"] }, { kind: "component", type: i14.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i14.MatLabel, selector: "mat-label" }, { kind: "directive", type: i14.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i14.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i14.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "component", type: i15.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["name", "id", "labelPosition", "aria-label", "aria-labelledby", "aria-describedby", "required", "color", "disabled", "disableRipple", "tabIndex", "checked", "hideIcon"], outputs: ["change", "toggleChange"], exportAs: ["matSlideToggle"] }, { kind: "component", type: i16.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "directive", type: i17.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i18.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i19.TooltipDirective, selector: "[bizdocTooltip]", inputs: ["bizdocTooltip", "bizdocTooltipTemplate", "bizdocTooltipContext", "bizdocTooltipPosition", "bizdocTooltipDuration", "bizdocTooltipDisabled"] }, { kind: "pipe", type: i20.AsyncPipe, name: "async" }, { kind: "pipe", type: i21.TranslatePipe, name: "translate" }, { kind: "pipe", type: i22.UserNamePipe, name: "userName" }] }); }
|
234
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: OptionsComponent, deps: [{ token: OPTION_PANEL, optional: true }, { token: i1.OverlayRef, optional: true }, { token: i2.FormBuilder }, { token: i3.AccountService }, { token: i4.PromptService }, { token: i5.SessionService }, { token: BIZDOC_CONFIG }], target: i0.ɵɵFactoryTarget.Component }); }
|
235
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.2.1", type: OptionsComponent, selector: "bizdoc-options", inputs: { sectionName: ["section", "sectionName"] }, viewQueries: [{ propertyName: "substitueInput", first: true, predicate: ["substitueInput"], descendants: true, read: MatInput }, { propertyName: "grantInput", first: true, predicate: ["grantInput"], descendants: true, read: MatChipInput }, { propertyName: "oooTmpl", first: true, predicate: ["oooTmpl"], descendants: true, static: true }, { propertyName: "notificationsTmpl", first: true, predicate: ["notificationsTmpl"], descendants: true, static: true }], ngImport: i0, template: "<!--<bizdov-v-tabs [initialName]=\"sectionName\">\n <tab name=\"notifications\" title=\"Notifications\">\n <ng-template>\n <div [formGroup]=\"form.controls.notifications\" class=\"column\">\n <mat-slide-toggle formControlName=\"active\">{{'Active' | translate}}</mat-slide-toggle>\n <br />\n <mat-slide-toggle formControlName=\"myDocumentStateChange\">{{'MyStateChange' | translate}}</mat-slide-toggle>\n <mat-slide-toggle formControlName=\"anyDocumentStateChange\">{{'AnyStateChange' | translate}}</mat-slide-toggle>\n <mat-slide-toggle formControlName=\"commentMyDocument\">{{'CommentMyDocument' | translate}}</mat-slide-toggle>\n <mat-slide-toggle formControlName=\"commentAnyDocument\">{{'CommentAnyDocument' | translate}}</mat-slide-toggle>\n <mat-slide-toggle formControlName=\"likes\" [style.display]=\"voating?'':'none'\">{{'LikedComment' | translate}}</mat-slide-toggle>\n <mat-slide-toggle formControlName=\"tagged\">{{'TaggedInComments' | translate}}</mat-slide-toggle>\n <mat-slide-toggle formControlName=\"upcomingEvents\">{{'UpcomingEvents' | translate}}</mat-slide-toggle>\n <mat-slide-toggle formControlName=\"cubeAnomaly\">{{'CubeAnomaly' | translate}}</mat-slide-toggle>\n <div class=\"row\">\n <span class=\"divider\"></span>\n <button mat-icon-button type=\"button\" (click)=\"toggleSound()\" [disabled]=\"!form.value.notifications.active\" [bizdocTooltip]=\"(form.value.notifications.sound ? 'SoundOn': 'SoundOff')|translate\"><mat-icon>{{form.value.notifications.sound ? 'volume_up' : 'volume_off'}}</mat-icon></button>\n </div>\n </div>\n </ng-template>\n </tab>\n <tab name=\"emails\" title=\"Emails\">\n <ng-template>\n <div [formGroup]=\"form.controls.emails\" class=\"column\">\n <mat-slide-toggle formControlName=\"active\">{{'Active' | translate}}</mat-slide-toggle>\n <br />\n <mat-slide-toggle formControlName=\"mail\">{{'Mails' | translate}}</mat-slide-toggle>\n <mat-slide-toggle formControlName=\"chat\">{{'Conversations' | translate}}</mat-slide-toggle>\n <mat-slide-toggle formControlName=\"notifications\">{{'EmailNotifications' | translate}}</mat-slide-toggle>\n <mat-slide-toggle formControlName=\"events\">{{'AlarmEvents' | translate}}</mat-slide-toggle>\n </div>\n </ng-template>\n </tab>\n <tab name=\"out_of_office\" title=\"OutOfOffice\">\n <ng-template>\n <div [formGroup]=\"form.controls.outOfOffice\" class=\"column\">\n <mat-slide-toggle formControlName=\"active\">{{'Active' | translate}}</mat-slide-toggle>\n <br />\n <mat-form-field class=\"flex\">\n <input matInput [formControl]=\"oooId\" type=\"search\" [matAutocomplete]=\"sauto\" #substitueInput\n [placeholder]=\"'Associate' | translate\" [required]=\"form.value.outOfOffice.active\" />\n <mat-autocomplete #sauto=\"matAutocomplete\" [displayWith]=\"display\"\n (optionSelected)=\"oooSelected($event)\">\n @for (u of susers$ | async; track u) {\n <mat-option [value]=\"u\">\n <span>{{u.name}}</span>\n </mat-option>\n }\n </mat-autocomplete>\n <mat-hint>{{'OutOfOfficeTip' | translate}}</mat-hint>\n </mat-form-field>\n <mat-form-field>\n <mat-label>{{'Dates'|translate}}</mat-label>\n <mat-date-range-input [rangePicker]=\"dates\">\n <input matStartDate formControlName=\"from\" [placeholder]=\"'From'|translate\" [min]=\"today\">\n <input matEndDate formControlName=\"to\" [placeholder]=\"'To'|translate\">\n </mat-date-range-input>\n <mat-datepicker-toggle matSuffix [for]=\"dates\"></mat-datepicker-toggle>\n <mat-date-range-picker #dates [touchUi]=\"isMobile\"></mat-date-range-picker>\n </mat-form-field>\n </div>\n </ng-template>\n </tab>\n <tab name=\"grant_access\" title=\"GrantAccess\">\n <ng-template>\n <div [formGroup]=\"form.controls.grantAccess\" class=\"column\">\n <mat-slide-toggle formControlName=\"active\">{{'Active' | translate}}</mat-slide-toggle>\n <mat-form-field>\n <mat-chip-grid #grantList [attr.aria-label]=\"\" [disabled]=\"!form.value.grantAccess.active\">\n @for (u of form.value.grantAccess.users || []; track u) {\n <mat-chip-row (removed)=\"removeGrant(u)\">\n {{u | userName | async}}\n <mat-icon matChipRemove>cancel</mat-icon>\n </mat-chip-row>\n }\n </mat-chip-grid>\n <input [formControl]=\"grantUsers\" placeholder=\"{{'Users'| translate}}\"\n #grantInput\n [matAutocomplete]=\"grantAuto\"\n [matChipInputFor]=\"grantList\"\n [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\">\n <mat-autocomplete #grantAuto=\"matAutocomplete\" (optionSelected)=\"addGrant(grantInput, $event)\">\n @for (u of gusers$ | async; track u) {\n <mat-option [value]=\"u.id\">\n {{u.name}}\n @if (u.email) {\n <span> - {{u.email}}</span>\n }\n </mat-option>\n }\n </mat-autocomplete>\n <mat-hint>{{'GrantTip' | translate}}</mat-hint>\n </mat-form-field>\n </div>\n </ng-template>\n </tab>\n <tab name=\"preferences\" title=\"Preferences\">\n <ng-template>\n <div class=\"column\">\n <mat-form-field>\n <mat-chip-grid #chips>\n @for (item of form.value.tags; track item) {\n <mat-chip-row [removable]=\"true\" (removed)=\"removeTag(item)\">\n {{item}}\n <mat-icon matChipRemove>cancel</mat-icon>\n </mat-chip-row>\n }\n </mat-chip-grid>\n <input [placeholder]=\"'Tags'|translate\"\n [matChipInputFor]=\"chips\"\n [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\"\n [matChipInputAddOnBlur]=\"true\"\n (matChipInputTokenEnd)=\"addTag($event)\">\n </mat-form-field>\n </div>\n </ng-template>\n </tab>\n</bizdov-v-tabs>-->\n<div class=\"row\">\n <mat-nav-list class=\"nav-list\">\n <mat-list-item (click)=\"nav('notifications', notificationsTmpl, 0)\" [class.active]=\"sectionName === 'notifications'\">\n <span matListItemTitle>{{'Notifications' | translate}}</span>\n </mat-list-item>\n <mat-list-item (click)=\"nav('emails', emailsTmpl, 1)\" [class.active]=\"sectionName === 'emails'\">\n <span matListItemTitle>{{'Emails' | translate}}</span>\n </mat-list-item>\n <mat-list-item (click)=\"nav('out_of_office', oooTmpl, 2)\" [class.active]=\"sectionName === 'out_of_office'\">\n <span matListItemTitle>{{'OutOfOffice' | translate}}</span>\n </mat-list-item>\n <mat-list-item (click)=\"nav('grant_access', grantAccessTmpl, 3)\" [class.active]=\"sectionName === 'grant_access'\">\n <span matListItemTitle>{{'GrantAccess' | translate}}</span>\n </mat-list-item>\n <mat-list-item (click)=\"nav('preferences', preferencesTmpl, 4)\" [class.active]=\"sectionName === 'preferences'\">\n <span matListItemTitle>{{'Preferences' | translate}}</span>\n </mat-list-item>\n </mat-nav-list>\n <div class=\"separator\"></div>\n <form autocomplete=\"off\" [@v-swape]=\"sectionIndex\">\n <ng-container *ngTemplateOutlet=\"sectionTmpl\"></ng-container>\n </form>\n</div>\n<!--preferences-->\n<ng-template #preferencesTmpl>\n <div class=\"column\">\n <mat-form-field>\n <mat-chip-grid #chips>\n @for (item of form.value.tags; track item) {\n <mat-chip-row [removable]=\"true\" (removed)=\"removeTag(item)\">\n {{item}}\n <mat-icon matChipRemove>cancel</mat-icon>\n </mat-chip-row>\n }\n </mat-chip-grid>\n <input [placeholder]=\"'Tags'|translate\"\n [matChipInputFor]=\"chips\"\n [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\"\n [matChipInputAddOnBlur]=\"true\"\n (matChipInputTokenEnd)=\"addTag($event)\">\n </mat-form-field>\n </div>\n</ng-template>\n<!--notifications-->\n<ng-template #notificationsTmpl>\n <div [formGroup]=\"form.controls.notifications\" class=\"column\">\n <mat-slide-toggle formControlName=\"active\">{{'Active' | translate}}</mat-slide-toggle>\n <br />\n <mat-slide-toggle formControlName=\"myDocumentStateChange\">{{'MyStateChange' | translate}}</mat-slide-toggle>\n <mat-slide-toggle formControlName=\"anyDocumentStateChange\">{{'AnyStateChange' | translate}}</mat-slide-toggle>\n <mat-slide-toggle formControlName=\"commentMyDocument\">{{'CommentMyDocument' | translate}}</mat-slide-toggle>\n <mat-slide-toggle formControlName=\"commentAnyDocument\">{{'CommentAnyDocument' | translate}}</mat-slide-toggle>\n <mat-slide-toggle formControlName=\"likes\" [style.display]=\"voating?'':'none'\">{{'LikedComment' | translate}}</mat-slide-toggle>\n <mat-slide-toggle formControlName=\"tagged\">{{'TaggedInComments' | translate}}</mat-slide-toggle>\n <mat-slide-toggle formControlName=\"upcomingEvents\">{{'UpcomingEvents' | translate}}</mat-slide-toggle>\n <mat-slide-toggle formControlName=\"cubeAnomaly\">{{'CubeAnomaly' | translate}}</mat-slide-toggle>\n <div class=\"row\">\n <span class=\"divider\"></span>\n <button mat-icon-button type=\"button\" (click)=\"toggleSound()\" [disabled]=\"!form.value.notifications.active\" [bizdocTooltip]=\"(form.value.notifications.sound ? 'SoundOn': 'SoundOff')|translate\"><mat-icon>{{form.value.notifications.sound ? 'volume_up' : 'volume_off'}}</mat-icon></button>\n </div>\n </div>\n</ng-template>\n<!--emails-->\n<ng-template #emailsTmpl>\n <div [formGroup]=\"form.controls.emails\" class=\"column\">\n <mat-slide-toggle formControlName=\"active\">{{'Active' | translate}}</mat-slide-toggle>\n <br />\n <mat-slide-toggle formControlName=\"mail\">{{'Mails' | translate}}</mat-slide-toggle>\n <mat-slide-toggle formControlName=\"chat\">{{'Conversations' | translate}}</mat-slide-toggle>\n <mat-slide-toggle formControlName=\"notifications\">{{'EmailNotifications' | translate}}</mat-slide-toggle>\n <mat-slide-toggle formControlName=\"events\">{{'AlarmEvents' | translate}}</mat-slide-toggle>\n </div>\n</ng-template>\n<!--ooo-->\n<ng-template #oooTmpl>\n <div [formGroup]=\"form.controls.outOfOffice\" class=\"column\">\n <mat-slide-toggle formControlName=\"active\">{{'Active' | translate}}</mat-slide-toggle>\n <br />\n <mat-form-field class=\"flex\">\n <input matInput [formControl]=\"oooId\" type=\"search\" [matAutocomplete]=\"sauto\" #substitueInput\n [placeholder]=\"'Associate' | translate\" [required]=\"form.value.outOfOffice.active\" />\n <mat-autocomplete #sauto=\"matAutocomplete\" [displayWith]=\"display\"\n (optionSelected)=\"oooSelected($event)\">\n @for (u of susers$ | async; track u) {\n <mat-option [value]=\"u\">\n <span>{{u.name}}</span>\n </mat-option>\n }\n </mat-autocomplete>\n <mat-hint>{{'OutOfOfficeTip' | translate}}</mat-hint>\n </mat-form-field>\n <mat-form-field>\n <mat-label>{{'Dates'|translate}}</mat-label>\n <mat-date-range-input [rangePicker]=\"dates\">\n <input matStartDate formControlName=\"from\" [placeholder]=\"'From'|translate\" [min]=\"today\">\n <input matEndDate formControlName=\"to\" [placeholder]=\"'To'|translate\">\n </mat-date-range-input>\n <mat-datepicker-toggle matSuffix [for]=\"dates\"></mat-datepicker-toggle>\n <mat-date-range-picker #dates [touchUi]=\"isMobile\"></mat-date-range-picker>\n </mat-form-field>\n </div>\n</ng-template>\n<!--grantAccess-->\n<ng-template #grantAccessTmpl>\n <div [formGroup]=\"form.controls.grantAccess\" class=\"column\">\n <mat-slide-toggle formControlName=\"active\">{{'Active' | translate}}</mat-slide-toggle>\n <mat-form-field>\n <mat-label>{{'Associates'| translate}}</mat-label>\n <mat-chip-grid #grantList [attr.aria-label]=\"\" [disabled]=\"!form.value.grantAccess.active\">\n @for (u of form.value.grantAccess.users || []; track u) {\n <mat-chip-row (removed)=\"removeGrant(u)\">\n {{u | userName | async}}\n <mat-icon matChipRemove>cancel</mat-icon>\n </mat-chip-row>\n }\n </mat-chip-grid>\n <input [formControl]=\"grantUserIds\"\n #grantInput\n [matAutocomplete]=\"grantAuto\"\n [matChipInputFor]=\"grantList\"\n [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\">\n <mat-autocomplete #grantAuto=\"matAutocomplete\" (optionSelected)=\"addGrant(grantInput, $event)\">\n @for (u of gusers$ | async; track u.id) {\n <mat-option [value]=\"u.id\">\n {{u.name}}\n @if (u.email) {\n <span> - {{u.email}}</span>\n }\n </mat-option>\n }\n </mat-autocomplete>\n <mat-hint>{{'GrantTip' | translate}}</mat-hint>\n </mat-form-field>\n </div>\n</ng-template>\n", styles: [":host{max-width:80vw;min-width:420px}.separator{height:280px;width:1px;background-color:#0003}form{padding:20px 8px 0;min-width:320px}\n"], dependencies: [{ kind: "directive", type: i6.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i7.MatChipGrid, selector: "mat-chip-grid", inputs: ["disabled", "placeholder", "required", "value", "errorStateMatcher"], outputs: ["change", "valueChange"] }, { kind: "directive", type: i7.MatChipInput, selector: "input[matChipInputFor]", inputs: ["matChipInputFor", "matChipInputAddOnBlur", "matChipInputSeparatorKeyCodes", "placeholder", "id", "disabled"], outputs: ["matChipInputTokenEnd"], exportAs: ["matChipInput", "matChipInputFor"] }, { kind: "directive", type: i7.MatChipRemove, selector: "[matChipRemove]" }, { kind: "component", type: i7.MatChipRow, selector: "mat-chip-row, [mat-chip-row], mat-basic-chip-row, [mat-basic-chip-row]", inputs: ["editable"], outputs: ["edited"] }, { kind: "component", type: i8.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "component", type: i8.MatDateRangeInput, selector: "mat-date-range-input", inputs: ["rangePicker", "required", "dateFilter", "min", "max", "disabled", "separator", "comparisonStart", "comparisonEnd"], exportAs: ["matDateRangeInput"] }, { kind: "directive", type: i8.MatStartDate, selector: "input[matStartDate]", outputs: ["dateChange", "dateInput"] }, { kind: "directive", type: i8.MatEndDate, selector: "input[matEndDate]", outputs: ["dateChange", "dateInput"] }, { kind: "component", type: i8.MatDateRangePicker, selector: "mat-date-range-picker", exportAs: ["matDateRangePicker"] }, { kind: "component", type: i9.MatNavList, selector: "mat-nav-list", exportAs: ["matNavList"] }, { kind: "component", type: i9.MatListItem, selector: "mat-list-item, a[mat-list-item], button[mat-list-item]", inputs: ["activated"], exportAs: ["matListItem"] }, { kind: "directive", type: i9.MatListItemTitle, selector: "[matListItemTitle]" }, { kind: "component", type: i10.MatAutocomplete, selector: "mat-autocomplete", inputs: ["aria-label", "aria-labelledby", "displayWith", "autoActiveFirstOption", "autoSelectActiveOption", "requireSelection", "panelWidth", "disableRipple", "class", "hideSingleSelectionIndicator"], outputs: ["optionSelected", "opened", "closed", "optionActivated"], exportAs: ["matAutocomplete"] }, { kind: "component", type: i11.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: i10.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", inputs: ["matAutocomplete", "matAutocompletePosition", "matAutocompleteConnectedTo", "autocomplete", "matAutocompleteDisabled"], exportAs: ["matAutocompleteTrigger"] }, { kind: "component", type: i12.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i12.MatLabel, selector: "mat-label" }, { kind: "directive", type: i12.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i12.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "component", type: i13.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["name", "id", "labelPosition", "aria-label", "aria-labelledby", "aria-describedby", "required", "color", "disabled", "disableRipple", "tabIndex", "checked", "hideIcon"], outputs: ["change", "toggleChange"], exportAs: ["matSlideToggle"] }, { kind: "component", type: i14.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "directive", type: i15.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i16.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i17.TooltipDirective, selector: "[bizdocTooltip]", inputs: ["bizdocTooltip", "bizdocTooltipTemplate", "bizdocTooltipContext", "bizdocTooltipPosition", "bizdocTooltipDuration", "bizdocTooltipDisabled"] }, { kind: "pipe", type: i6.AsyncPipe, name: "async" }, { kind: "pipe", type: i18.TranslatePipe, name: "translate" }, { kind: "pipe", type: i19.UserNamePipe, name: "userName" }], animations: [verticalSwapAnimation] }); }
|
241
236
|
}
|
242
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.
|
237
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: OptionsComponent, decorators: [{
|
243
238
|
type: Component,
|
244
|
-
args: [{ selector: 'bizdoc-options', template: "<mat-toolbar>\n <button mat-icon-button (click)=\"save()\" [disabled]=\"!form.dirty || !form.valid || saveing\" [bizdocTooltip]=\"'Save'|translate\"><mat-icon>save</mat-icon></button>\n</mat-toolbar>\n<mat-progress-bar mode=\"indeterminate\" [style.visibility]=\"saveing ? 'visible':'hidden'\"></mat-progress-bar>\n<form [formGroup]=\"form\" autocomplete=\"off\">\n <mat-accordion>\n <mat-expansion-panel #notifications>\n <mat-expansion-panel-header>\n <mat-panel-title>\n {{'Notifications' | translate}}\n </mat-panel-title>\n <mat-panel-description>\n <!--<mat-icon>notifications</mat-icon>-->\n </mat-panel-description>\n </mat-expansion-panel-header>\n <div formGroupName=\"notifications\" class=\"column\">\n <div class=\"row\">\n <mat-slide-toggle formControlName=\"active\">{{'Active' | translate}}</mat-slide-toggle>\n <span class=\"divider\"></span>\n <button mat-icon-button (click)=\"toggleSound()\" [bizdocTooltip]=\"'Sound'|translate\"><mat-icon>{{options.notifications.sound ? 'volume_up' : 'volume_off'}}</mat-icon></button>\n </div>\n <br />\n <mat-slide-toggle formControlName=\"myDocumentStateChange\">{{'MyStateChange' | translate}}</mat-slide-toggle>\n <mat-slide-toggle formControlName=\"anyDocumentStateChange\">{{'AnyStateChange' | translate}}</mat-slide-toggle>\n <mat-slide-toggle formControlName=\"commentMyDocument\">{{'CommentMyDocument' | translate}}</mat-slide-toggle>\n <mat-slide-toggle formControlName=\"commentAnyDocument\">{{'CommentAnyDocument' | translate}}</mat-slide-toggle>\n <mat-slide-toggle formControlName=\"likes\" [style.display]=\"voating?'':'none'\">{{'LikedComment' | translate}}</mat-slide-toggle>\n <mat-slide-toggle formControlName=\"tagged\">{{'TaggedInComments' | translate}}</mat-slide-toggle>\n <mat-slide-toggle formControlName=\"upcomingEvents\">{{'UpcomingEvents' | translate}}</mat-slide-toggle>\n <mat-slide-toggle formControlName=\"cubeAnomaly\">{{'CubeAnomaly' | translate}}</mat-slide-toggle>\n </div>\n </mat-expansion-panel>\n <mat-expansion-panel #emails>\n <mat-expansion-panel-header>\n <mat-panel-title>\n {{'Emails' | translate}}\n </mat-panel-title>\n <mat-panel-description>\n <!--<mat-icon>alternate_email</mat-icon>-->\n </mat-panel-description>\n </mat-expansion-panel-header>\n <div formGroupName=\"emails\" class=\"column\">\n <mat-slide-toggle formControlName=\"active\">{{'Active' | translate}}</mat-slide-toggle>\n <br />\n <mat-slide-toggle formControlName=\"mail\">{{'Mails' | translate}}</mat-slide-toggle>\n <mat-slide-toggle formControlName=\"chat\">{{'Conversations' | translate}}</mat-slide-toggle>\n <mat-slide-toggle formControlName=\"notifications\">{{'EmailNotifications' | translate}}</mat-slide-toggle>\n <mat-slide-toggle formControlName=\"events\">{{'AlarmEvents' | translate}}</mat-slide-toggle>\n </div>\n </mat-expansion-panel>\n <mat-expansion-panel #outOfOffice>\n <mat-expansion-panel-header>\n <mat-panel-title>\n {{'OutOfOffice' | translate}}\n </mat-panel-title>\n <mat-panel-description>\n <!--<mat-icon>trending_flat</mat-icon>-->\n <!--{{'OutOfOfficeTip' | translate}}-->\n </mat-panel-description>\n </mat-expansion-panel-header>\n <div formGroupName=\"outOfOffice\" class=\"column\">\n <mat-slide-toggle formControlName=\"active\">{{'Active' | translate}}</mat-slide-toggle>\n <br />\n <mat-form-field class=\"flex\">\n <input matInput [formControl]=\"substitueId\" type=\"search\" [matAutocomplete]=\"sauto\" #substitueInput\n [placeholder]=\"'Associate' | translate\" [required]=\"form.value.outOfOffice.active\" />\n <mat-autocomplete #sauto=\"matAutocomplete\" [displayWith]=\"display\"\n (optionSelected)=\"setSubstitute($event)\">\n @for (u of susers$ | async; track u) {\n <mat-option [value]=\"u\">\n <span>{{u.name}}</span>\n </mat-option>\n }\n </mat-autocomplete>\n <mat-hint>{{'OutOfOfficeTip' | translate}}</mat-hint>\n </mat-form-field>\n <mat-form-field>\n <mat-label>{{'Dates'|translate}}</mat-label>\n <mat-date-range-input [rangePicker]=\"dates\" required>\n <input matStartDate formControlName=\"from\" [placeholder]=\"'From'|translate\" [min]=\"today\">\n <input matEndDate formControlName=\"to\" [placeholder]=\"'To'|translate\">\n </mat-date-range-input>\n <mat-datepicker-toggle matSuffix [for]=\"dates\"></mat-datepicker-toggle>\n <mat-date-range-picker #dates [touchUi]=\"isMobile\"></mat-date-range-picker>\n @if (form.controls.outOfOffice.controls.from.hasError('required') || form.controls.outOfOffice.controls.to.hasError('required')) {\n <mat-error [innerHTML]=\"'AreRequiredErr'|translate : ('Dates'|translate)\"></mat-error>\n }\n </mat-form-field>\n </div>\n </mat-expansion-panel>\n <mat-expansion-panel #grantAccess>\n <mat-expansion-panel-header>\n <mat-panel-title>\n {{'GrantAccess' | translate}}\n </mat-panel-title>\n <mat-panel-description>\n <!--<mat-icon>account_circle</mat-icon>-->\n </mat-panel-description>\n </mat-expansion-panel-header>\n <div formGroupName=\"grantAccess\" class=\"grant-section\">\n <mat-slide-toggle formControlName=\"active\">{{'Active' | translate}}</mat-slide-toggle>\n <mat-form-field>\n <mat-chip-grid #grantList [attr.aria-label]=\"\" [disabled]=\"!form.value.grantAccess.active\">\n @for (u of form.value.grantAccess.users || []; track u) {\n <mat-chip-row (removed)=\"removeGrant(u)\">\n {{u | userName | async}}\n <mat-icon matChipRemove>cancel</mat-icon>\n </mat-chip-row>\n }\n </mat-chip-grid>\n <input [formControl]=\"gusers\" placeholder=\"{{'Users'| translate}}\"\n #grantInput\n [matAutocomplete]=\"grantAuto\"\n [matChipInputFor]=\"grantList\"\n [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\">\n <mat-autocomplete #grantAuto=\"matAutocomplete\" (optionSelected)=\"addGrant(grantInput, $event)\">\n @for (u of gusers$ | async; track u) {\n <mat-option [value]=\"u.id\">\n {{u.name}}\n @if (u.email) {\n <span> - {{u.email}}</span>\n }\n </mat-option>\n }\n </mat-autocomplete>\n <mat-hint>{{'GrantTip' | translate}}</mat-hint>\n </mat-form-field>\n </div>\n </mat-expansion-panel>\n <mat-expansion-panel #preferences>\n <mat-expansion-panel-header>\n <mat-panel-title>\n {{'Preferences' | translate}}\n </mat-panel-title>\n <mat-panel-description>\n <!--<mat-icon></mat-icon>-->\n </mat-panel-description>\n </mat-expansion-panel-header>\n <div class=\"column\">\n <mat-form-field>\n <mat-chip-grid #chips>\n @for (item of form.value.tags; track item) {\n <mat-chip-row [removable]=\"true\" (removed)=\"removeTag(item)\">\n {{item}}\n <mat-icon matChipRemove>cancel</mat-icon>\n </mat-chip-row>\n }\n </mat-chip-grid>\n <input [placeholder]=\"'Tags'|translate\"\n [matChipInputFor]=\"chips\"\n [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\"\n [matChipInputAddOnBlur]=\"true\"\n (matChipInputTokenEnd)=\"addTag($event)\">\n </mat-form-field>\n <mat-slide-toggle [formControl]=\"aRIA\">{{'ARIA' | translate}}</mat-slide-toggle>\n </div>\n </mat-expansion-panel>\n </mat-accordion>\n</form>\n", styles: [":host{max-width:80vw;min-width:420px}.grant-section{display:flex;flex-direction:column}\n"] }]
|
239
|
+
args: [{ selector: 'bizdoc-options', animations: [verticalSwapAnimation], template: "<!--<bizdov-v-tabs [initialName]=\"sectionName\">\n <tab name=\"notifications\" title=\"Notifications\">\n <ng-template>\n <div [formGroup]=\"form.controls.notifications\" class=\"column\">\n <mat-slide-toggle formControlName=\"active\">{{'Active' | translate}}</mat-slide-toggle>\n <br />\n <mat-slide-toggle formControlName=\"myDocumentStateChange\">{{'MyStateChange' | translate}}</mat-slide-toggle>\n <mat-slide-toggle formControlName=\"anyDocumentStateChange\">{{'AnyStateChange' | translate}}</mat-slide-toggle>\n <mat-slide-toggle formControlName=\"commentMyDocument\">{{'CommentMyDocument' | translate}}</mat-slide-toggle>\n <mat-slide-toggle formControlName=\"commentAnyDocument\">{{'CommentAnyDocument' | translate}}</mat-slide-toggle>\n <mat-slide-toggle formControlName=\"likes\" [style.display]=\"voating?'':'none'\">{{'LikedComment' | translate}}</mat-slide-toggle>\n <mat-slide-toggle formControlName=\"tagged\">{{'TaggedInComments' | translate}}</mat-slide-toggle>\n <mat-slide-toggle formControlName=\"upcomingEvents\">{{'UpcomingEvents' | translate}}</mat-slide-toggle>\n <mat-slide-toggle formControlName=\"cubeAnomaly\">{{'CubeAnomaly' | translate}}</mat-slide-toggle>\n <div class=\"row\">\n <span class=\"divider\"></span>\n <button mat-icon-button type=\"button\" (click)=\"toggleSound()\" [disabled]=\"!form.value.notifications.active\" [bizdocTooltip]=\"(form.value.notifications.sound ? 'SoundOn': 'SoundOff')|translate\"><mat-icon>{{form.value.notifications.sound ? 'volume_up' : 'volume_off'}}</mat-icon></button>\n </div>\n </div>\n </ng-template>\n </tab>\n <tab name=\"emails\" title=\"Emails\">\n <ng-template>\n <div [formGroup]=\"form.controls.emails\" class=\"column\">\n <mat-slide-toggle formControlName=\"active\">{{'Active' | translate}}</mat-slide-toggle>\n <br />\n <mat-slide-toggle formControlName=\"mail\">{{'Mails' | translate}}</mat-slide-toggle>\n <mat-slide-toggle formControlName=\"chat\">{{'Conversations' | translate}}</mat-slide-toggle>\n <mat-slide-toggle formControlName=\"notifications\">{{'EmailNotifications' | translate}}</mat-slide-toggle>\n <mat-slide-toggle formControlName=\"events\">{{'AlarmEvents' | translate}}</mat-slide-toggle>\n </div>\n </ng-template>\n </tab>\n <tab name=\"out_of_office\" title=\"OutOfOffice\">\n <ng-template>\n <div [formGroup]=\"form.controls.outOfOffice\" class=\"column\">\n <mat-slide-toggle formControlName=\"active\">{{'Active' | translate}}</mat-slide-toggle>\n <br />\n <mat-form-field class=\"flex\">\n <input matInput [formControl]=\"oooId\" type=\"search\" [matAutocomplete]=\"sauto\" #substitueInput\n [placeholder]=\"'Associate' | translate\" [required]=\"form.value.outOfOffice.active\" />\n <mat-autocomplete #sauto=\"matAutocomplete\" [displayWith]=\"display\"\n (optionSelected)=\"oooSelected($event)\">\n @for (u of susers$ | async; track u) {\n <mat-option [value]=\"u\">\n <span>{{u.name}}</span>\n </mat-option>\n }\n </mat-autocomplete>\n <mat-hint>{{'OutOfOfficeTip' | translate}}</mat-hint>\n </mat-form-field>\n <mat-form-field>\n <mat-label>{{'Dates'|translate}}</mat-label>\n <mat-date-range-input [rangePicker]=\"dates\">\n <input matStartDate formControlName=\"from\" [placeholder]=\"'From'|translate\" [min]=\"today\">\n <input matEndDate formControlName=\"to\" [placeholder]=\"'To'|translate\">\n </mat-date-range-input>\n <mat-datepicker-toggle matSuffix [for]=\"dates\"></mat-datepicker-toggle>\n <mat-date-range-picker #dates [touchUi]=\"isMobile\"></mat-date-range-picker>\n </mat-form-field>\n </div>\n </ng-template>\n </tab>\n <tab name=\"grant_access\" title=\"GrantAccess\">\n <ng-template>\n <div [formGroup]=\"form.controls.grantAccess\" class=\"column\">\n <mat-slide-toggle formControlName=\"active\">{{'Active' | translate}}</mat-slide-toggle>\n <mat-form-field>\n <mat-chip-grid #grantList [attr.aria-label]=\"\" [disabled]=\"!form.value.grantAccess.active\">\n @for (u of form.value.grantAccess.users || []; track u) {\n <mat-chip-row (removed)=\"removeGrant(u)\">\n {{u | userName | async}}\n <mat-icon matChipRemove>cancel</mat-icon>\n </mat-chip-row>\n }\n </mat-chip-grid>\n <input [formControl]=\"grantUsers\" placeholder=\"{{'Users'| translate}}\"\n #grantInput\n [matAutocomplete]=\"grantAuto\"\n [matChipInputFor]=\"grantList\"\n [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\">\n <mat-autocomplete #grantAuto=\"matAutocomplete\" (optionSelected)=\"addGrant(grantInput, $event)\">\n @for (u of gusers$ | async; track u) {\n <mat-option [value]=\"u.id\">\n {{u.name}}\n @if (u.email) {\n <span> - {{u.email}}</span>\n }\n </mat-option>\n }\n </mat-autocomplete>\n <mat-hint>{{'GrantTip' | translate}}</mat-hint>\n </mat-form-field>\n </div>\n </ng-template>\n </tab>\n <tab name=\"preferences\" title=\"Preferences\">\n <ng-template>\n <div class=\"column\">\n <mat-form-field>\n <mat-chip-grid #chips>\n @for (item of form.value.tags; track item) {\n <mat-chip-row [removable]=\"true\" (removed)=\"removeTag(item)\">\n {{item}}\n <mat-icon matChipRemove>cancel</mat-icon>\n </mat-chip-row>\n }\n </mat-chip-grid>\n <input [placeholder]=\"'Tags'|translate\"\n [matChipInputFor]=\"chips\"\n [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\"\n [matChipInputAddOnBlur]=\"true\"\n (matChipInputTokenEnd)=\"addTag($event)\">\n </mat-form-field>\n </div>\n </ng-template>\n </tab>\n</bizdov-v-tabs>-->\n<div class=\"row\">\n <mat-nav-list class=\"nav-list\">\n <mat-list-item (click)=\"nav('notifications', notificationsTmpl, 0)\" [class.active]=\"sectionName === 'notifications'\">\n <span matListItemTitle>{{'Notifications' | translate}}</span>\n </mat-list-item>\n <mat-list-item (click)=\"nav('emails', emailsTmpl, 1)\" [class.active]=\"sectionName === 'emails'\">\n <span matListItemTitle>{{'Emails' | translate}}</span>\n </mat-list-item>\n <mat-list-item (click)=\"nav('out_of_office', oooTmpl, 2)\" [class.active]=\"sectionName === 'out_of_office'\">\n <span matListItemTitle>{{'OutOfOffice' | translate}}</span>\n </mat-list-item>\n <mat-list-item (click)=\"nav('grant_access', grantAccessTmpl, 3)\" [class.active]=\"sectionName === 'grant_access'\">\n <span matListItemTitle>{{'GrantAccess' | translate}}</span>\n </mat-list-item>\n <mat-list-item (click)=\"nav('preferences', preferencesTmpl, 4)\" [class.active]=\"sectionName === 'preferences'\">\n <span matListItemTitle>{{'Preferences' | translate}}</span>\n </mat-list-item>\n </mat-nav-list>\n <div class=\"separator\"></div>\n <form autocomplete=\"off\" [@v-swape]=\"sectionIndex\">\n <ng-container *ngTemplateOutlet=\"sectionTmpl\"></ng-container>\n </form>\n</div>\n<!--preferences-->\n<ng-template #preferencesTmpl>\n <div class=\"column\">\n <mat-form-field>\n <mat-chip-grid #chips>\n @for (item of form.value.tags; track item) {\n <mat-chip-row [removable]=\"true\" (removed)=\"removeTag(item)\">\n {{item}}\n <mat-icon matChipRemove>cancel</mat-icon>\n </mat-chip-row>\n }\n </mat-chip-grid>\n <input [placeholder]=\"'Tags'|translate\"\n [matChipInputFor]=\"chips\"\n [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\"\n [matChipInputAddOnBlur]=\"true\"\n (matChipInputTokenEnd)=\"addTag($event)\">\n </mat-form-field>\n </div>\n</ng-template>\n<!--notifications-->\n<ng-template #notificationsTmpl>\n <div [formGroup]=\"form.controls.notifications\" class=\"column\">\n <mat-slide-toggle formControlName=\"active\">{{'Active' | translate}}</mat-slide-toggle>\n <br />\n <mat-slide-toggle formControlName=\"myDocumentStateChange\">{{'MyStateChange' | translate}}</mat-slide-toggle>\n <mat-slide-toggle formControlName=\"anyDocumentStateChange\">{{'AnyStateChange' | translate}}</mat-slide-toggle>\n <mat-slide-toggle formControlName=\"commentMyDocument\">{{'CommentMyDocument' | translate}}</mat-slide-toggle>\n <mat-slide-toggle formControlName=\"commentAnyDocument\">{{'CommentAnyDocument' | translate}}</mat-slide-toggle>\n <mat-slide-toggle formControlName=\"likes\" [style.display]=\"voating?'':'none'\">{{'LikedComment' | translate}}</mat-slide-toggle>\n <mat-slide-toggle formControlName=\"tagged\">{{'TaggedInComments' | translate}}</mat-slide-toggle>\n <mat-slide-toggle formControlName=\"upcomingEvents\">{{'UpcomingEvents' | translate}}</mat-slide-toggle>\n <mat-slide-toggle formControlName=\"cubeAnomaly\">{{'CubeAnomaly' | translate}}</mat-slide-toggle>\n <div class=\"row\">\n <span class=\"divider\"></span>\n <button mat-icon-button type=\"button\" (click)=\"toggleSound()\" [disabled]=\"!form.value.notifications.active\" [bizdocTooltip]=\"(form.value.notifications.sound ? 'SoundOn': 'SoundOff')|translate\"><mat-icon>{{form.value.notifications.sound ? 'volume_up' : 'volume_off'}}</mat-icon></button>\n </div>\n </div>\n</ng-template>\n<!--emails-->\n<ng-template #emailsTmpl>\n <div [formGroup]=\"form.controls.emails\" class=\"column\">\n <mat-slide-toggle formControlName=\"active\">{{'Active' | translate}}</mat-slide-toggle>\n <br />\n <mat-slide-toggle formControlName=\"mail\">{{'Mails' | translate}}</mat-slide-toggle>\n <mat-slide-toggle formControlName=\"chat\">{{'Conversations' | translate}}</mat-slide-toggle>\n <mat-slide-toggle formControlName=\"notifications\">{{'EmailNotifications' | translate}}</mat-slide-toggle>\n <mat-slide-toggle formControlName=\"events\">{{'AlarmEvents' | translate}}</mat-slide-toggle>\n </div>\n</ng-template>\n<!--ooo-->\n<ng-template #oooTmpl>\n <div [formGroup]=\"form.controls.outOfOffice\" class=\"column\">\n <mat-slide-toggle formControlName=\"active\">{{'Active' | translate}}</mat-slide-toggle>\n <br />\n <mat-form-field class=\"flex\">\n <input matInput [formControl]=\"oooId\" type=\"search\" [matAutocomplete]=\"sauto\" #substitueInput\n [placeholder]=\"'Associate' | translate\" [required]=\"form.value.outOfOffice.active\" />\n <mat-autocomplete #sauto=\"matAutocomplete\" [displayWith]=\"display\"\n (optionSelected)=\"oooSelected($event)\">\n @for (u of susers$ | async; track u) {\n <mat-option [value]=\"u\">\n <span>{{u.name}}</span>\n </mat-option>\n }\n </mat-autocomplete>\n <mat-hint>{{'OutOfOfficeTip' | translate}}</mat-hint>\n </mat-form-field>\n <mat-form-field>\n <mat-label>{{'Dates'|translate}}</mat-label>\n <mat-date-range-input [rangePicker]=\"dates\">\n <input matStartDate formControlName=\"from\" [placeholder]=\"'From'|translate\" [min]=\"today\">\n <input matEndDate formControlName=\"to\" [placeholder]=\"'To'|translate\">\n </mat-date-range-input>\n <mat-datepicker-toggle matSuffix [for]=\"dates\"></mat-datepicker-toggle>\n <mat-date-range-picker #dates [touchUi]=\"isMobile\"></mat-date-range-picker>\n </mat-form-field>\n </div>\n</ng-template>\n<!--grantAccess-->\n<ng-template #grantAccessTmpl>\n <div [formGroup]=\"form.controls.grantAccess\" class=\"column\">\n <mat-slide-toggle formControlName=\"active\">{{'Active' | translate}}</mat-slide-toggle>\n <mat-form-field>\n <mat-label>{{'Associates'| translate}}</mat-label>\n <mat-chip-grid #grantList [attr.aria-label]=\"\" [disabled]=\"!form.value.grantAccess.active\">\n @for (u of form.value.grantAccess.users || []; track u) {\n <mat-chip-row (removed)=\"removeGrant(u)\">\n {{u | userName | async}}\n <mat-icon matChipRemove>cancel</mat-icon>\n </mat-chip-row>\n }\n </mat-chip-grid>\n <input [formControl]=\"grantUserIds\"\n #grantInput\n [matAutocomplete]=\"grantAuto\"\n [matChipInputFor]=\"grantList\"\n [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\">\n <mat-autocomplete #grantAuto=\"matAutocomplete\" (optionSelected)=\"addGrant(grantInput, $event)\">\n @for (u of gusers$ | async; track u.id) {\n <mat-option [value]=\"u.id\">\n {{u.name}}\n @if (u.email) {\n <span> - {{u.email}}</span>\n }\n </mat-option>\n }\n </mat-autocomplete>\n <mat-hint>{{'GrantTip' | translate}}</mat-hint>\n </mat-form-field>\n </div>\n</ng-template>\n", styles: [":host{max-width:80vw;min-width:420px}.separator{height:280px;width:1px;background-color:#0003}form{padding:20px 8px 0;min-width:320px}\n"] }]
|
245
240
|
}], ctorParameters: () => [{ type: undefined, decorators: [{
|
246
241
|
type: Inject,
|
247
242
|
args: [OPTION_PANEL]
|
248
243
|
}, {
|
249
244
|
type: Optional
|
250
|
-
}] }, { type: i1.
|
251
|
-
type: Optional
|
252
|
-
}] }, { type: i2.OverlayRef, decorators: [{
|
245
|
+
}] }, { type: i1.OverlayRef, decorators: [{
|
253
246
|
type: Optional
|
254
|
-
}] }, { type:
|
247
|
+
}] }, { type: i2.FormBuilder }, { type: i3.AccountService }, { type: i4.PromptService }, { type: i5.SessionService }, { type: undefined, decorators: [{
|
255
248
|
type: Inject,
|
256
249
|
args: [BIZDOC_CONFIG]
|
257
250
|
}] }], propDecorators: { substitueInput: [{
|
@@ -260,11 +253,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.0", ngImpor
|
|
260
253
|
}], grantInput: [{
|
261
254
|
type: ViewChild,
|
262
255
|
args: ['grantInput', { read: MatChipInput }]
|
263
|
-
}],
|
256
|
+
}], sectionName: [{
|
257
|
+
type: Input,
|
258
|
+
args: ['section']
|
259
|
+
}], oooTmpl: [{
|
264
260
|
type: ViewChild,
|
265
|
-
args: ['
|
266
|
-
}],
|
261
|
+
args: ['oooTmpl', { static: true }]
|
262
|
+
}], notificationsTmpl: [{
|
267
263
|
type: ViewChild,
|
268
|
-
args: ['
|
264
|
+
args: ['notificationsTmpl', { static: true }]
|
269
265
|
}] } });
|
270
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3B0aW9ucy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJyYXJpZXMvY29yZS9zcmMvbGliL29wdGlvbnMvb3B0aW9ucy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9saWJyYXJpZXMvY29yZS9zcmMvbGliL29wdGlvbnMvb3B0aW9ucy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFxQixTQUFTLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFMUcsT0FBTyxFQUFFLE9BQU8sRUFBYyxLQUFLLEVBQU0sTUFBTSxNQUFNLENBQUM7QUFDdEQsT0FBTyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFdEYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDaEUsT0FBTyxFQUFFLFlBQVksRUFBcUIsTUFBTSx5QkFBeUIsQ0FBQztBQUMxRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUVoRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDbkQsT0FBTyxFQUFFLGFBQWEsRUFBZ0IsTUFBTSx1QkFBdUIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxNQUFNLG1CQUFtQixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFTdkQsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLElBQUksY0FBYyxDQUFhLFNBQVMsQ0FBQyxDQUFDO0FBV3RFLHVCQUF1QjtBQUN2QixNQUFNLE9BQU8sZ0JBQWdCO0lBeUQzQixtQkFBbUI7SUFDbkIsWUFBc0QsT0FB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LGlCQUFpQix1SEFDZixpQkFBaUIsMkNDeEZ2RCx5L1BBK0pBOzsyRkQvSGEsZ0JBQWdCO2tCQU41QixTQUFTOytCQUNFLGdCQUFnQjs7MEJBK0RiLE1BQU07MkJBQUMsWUFBWTs7MEJBQUcsUUFBUTs7MEJBQ3hDLFFBQVE7OzBCQUNSLFFBQVE7OzBCQUlSLE1BQU07MkJBQUMsYUFBYTt5Q0FyRDBCLGNBQWM7c0JBQTlELFNBQVM7dUJBQUMsZ0JBQWdCLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFO2dCQUNFLFVBQVU7c0JBQTFELFNBQVM7dUJBQUMsWUFBWSxFQUFFLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRTtnQkEyQ3NCLFdBQVc7c0JBQS9FLFNBQVM7dUJBQUMsYUFBYSxFQUFFLEVBQUUsSUFBSSxFQUFFLGlCQUFpQixFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBQ0ksYUFBYTtzQkFBbkYsU0FBUzt1QkFBQyxlQUFlLEVBQUUsRUFBRSxJQUFJLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBPbkRlc3Ryb3ksIFZpZXdDaGlsZCwgSW5qZWN0aW9uVG9rZW4sIEluamVjdCwgT3B0aW9uYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBGb3JtQnVpbGRlciwgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBTdWJqZWN0LCBPYnNlcnZhYmxlLCBtZXJnZSwgb2YgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCB0YWtlVW50aWwsIGZpbHRlciwgbWFwLCBzd2l0Y2hNYXAsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgT3ZlcmxheVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcclxuaW1wb3J0IHsgTWF0RXhwYW5zaW9uUGFuZWwgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9leHBhbnNpb24nO1xyXG5pbXBvcnQgeyBNYXRDaGlwSW5wdXQsIE1hdENoaXBJbnB1dEV2ZW50IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY2hpcHMnO1xyXG5pbXBvcnQgeyBDT01NQSwgRU5URVIsIFNFTUlDT0xPTiB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9rZXljb2Rlcyc7XHJcbmltcG9ydCB7IE1hdEF1dG9jb21wbGV0ZVNlbGVjdGVkRXZlbnQgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9hdXRvY29tcGxldGUnO1xyXG5pbXBvcnQgeyBNYXRJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2lucHV0JztcclxuaW1wb3J0IHsgQklaRE9DX0NPTkZJRywgQml6RG9jQ29uZmlnIH0gZnJvbSAnLi4vY29yZS9jb25maWd1cmF0aW9uJztcclxuaW1wb3J0IHsgaXNNb2JpbGUsIGlzU3RyaW5nIH0gZnJvbSAnLi4vY29yZS9mdW5jdGlvbnMnO1xyXG5pbXBvcnQgeyBPcHRpb25zLCBVc2VySW5mbyB9IGZyb20gJy4uL2NvcmUvbW9kZWxzJztcclxuaW1wb3J0IHsgQWNjb3VudFNlcnZpY2UgfSBmcm9tICcuLi9jb3JlL2FjY291bnQuc2VydmljZSc7XHJcbmltcG9ydCB7IFNlc3Npb25TZXJ2aWNlIH0gZnJvbSAnLi4vY29yZS9zZXNzaW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBQcm9tcHRTZXJ2aWNlIH0gZnJvbSAnLi4vY29yZS9wcm9tcHQuc2VydmljZSc7XHJcbmltcG9ydCB7IFBhbmVSZWYgfSBmcm9tIFwiLi4vY29yZS9zbG90cy9wYW5lLXJlZlwiO1xyXG5cclxuZXhwb3J0IHR5cGUgT3B0aW9uVHlwZSA9ICdub3RpZmljYXRpb25zJyB8ICdvdXRvZm9mZmljZScgfCAnZW1haWxzJyB8ICdncmFudGFjY2Vzcyc7XHJcblxyXG5leHBvcnQgY29uc3QgT1BUSU9OX1BBTkVMID0gbmV3IEluamVjdGlvblRva2VuPE9wdGlvbkRhdGE+KCdvcHRpb25zJyk7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIE9wdGlvbkRhdGEge1xyXG4gIG9wZW46IE9wdGlvblR5cGU7XHJcbn1cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYml6ZG9jLW9wdGlvbnMnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9vcHRpb25zLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9vcHRpb25zLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuLyoqIG9wdGlvbnMgY29tcG9uZW50Ki9cclxuZXhwb3J0IGNsYXNzIE9wdGlvbnNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgc2F2ZWluZyA9IGZhbHNlO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgX2Rlc3Ryb3kgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG4gIHJlYWRvbmx5IHRvZGF5ID0gbmV3IERhdGUoKTtcclxuICByZWFkb25seSBpc01vYmlsZSA9IGlzTW9iaWxlKCk7XHJcbiAgcHJpdmF0ZSBfcmVxdWlyZWRWYWxpZGF0b3IgPSAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSB8IG51bGwgPT4ge1xyXG4gICAgY29uc3QgcGFyZW50ID0gKGNvbnRyb2wucGFyZW50IGFzIEZvcm1Hcm91cCk7XHJcbiAgICBpZiAocGFyZW50ICYmIHBhcmVudC5jb250cm9scy5hY3RpdmUudmFsdWUgJiYgIWNvbnRyb2wudmFsdWUpIHJldHVybiB7XHJcbiAgICAgIHJlcXVpcmVkOiB0cnVlXHJcbiAgICB9XHJcbiAgfVxyXG4gIEBWaWV3Q2hpbGQoJ3N1YnN0aXR1ZUlucHV0JywgeyByZWFkOiBNYXRJbnB1dCB9KSBzdWJzdGl0dWVJbnB1dDogTWF0SW5wdXQ7XHJcbiAgQFZpZXdDaGlsZCgnZ3JhbnRJbnB1dCcsIHsgcmVhZDogTWF0Q2hpcElucHV0IH0pIGdyYW50SW5wdXQ6IE1hdENoaXBJbnB1dDtcclxuICByZWFkb25seSBsYW5ndWFnZSA9IHRoaXMuX2ZiLmNvbnRyb2wodGhpcy5fc2Vzc2lvbi5sYW5ndWFnZSk7XHJcbiAgcmVhZG9ubHkgYVJJQSA9IHRoaXMuX2ZiLmNvbnRyb2wodGhpcy5fc2Vzc2lvbi5hcmlhKTtcclxuICByZWFkb25seSBsYW5ndWFnZXMgPSB0aGlzLl9zZXNzaW9uLmxhbmd1YWdlcztcclxuICByZWFkb25seSBndXNlcnMgPSB0aGlzLl9mYi5jb250cm9sKFtdKTtcclxuICByZWFkb25seSBzdWJzdGl0dWVJZCA9IHRoaXMuX2ZiLmNvbnRyb2wobnVsbCk7XHJcbiAgcmVhZG9ubHkgZm9ybSA9IHRoaXMuX2ZiLmdyb3VwKHtcclxuICAgIG5vdGlmaWNhdGlvbnM6IHRoaXMuX2ZiLmdyb3VwKHtcclxuICAgICAgYWN0aXZlOiB0aGlzLl9mYi5jb250cm9sKGZhbHNlKSxcclxuICAgICAgbGlrZXM6IHRoaXMuX2ZiLmNvbnRyb2woZmFsc2UpLFxyXG4gICAgICBjb21tZW50TXlEb2N1bWVudDogdGhpcy5fZmIuY29udHJvbChmYWxzZSksXHJcbiAgICAgIGNvbW1lbnRBbnlEb2N1bWVudDogdGhpcy5fZmIuY29udHJvbChmYWxzZSksXHJcbiAgICAgIHVwY29taW5nRXZlbnRzOiB0aGlzLl9mYi5jb250cm9sKGZhbHNlKSxcclxuICAgICAgdGFnZ2VkOiB0aGlzLl9mYi5jb250cm9sKGZhbHNlKSxcclxuICAgICAgYW55RG9jdW1lbnRTdGF0ZUNoYW5nZTogdGhpcy5fZmIuY29udHJvbChmYWxzZSksXHJcbiAgICAgIG15RG9jdW1lbnRTdGF0ZUNoYW5nZTogdGhpcy5fZmIuY29udHJvbChmYWxzZSksXHJcbiAgICAgIGN1YmVBbm9tYWx5OiB0aGlzLl9mYi5jb250cm9sKGZhbHNlKSxcclxuICAgICAgc291bmQ6IHRoaXMuX2ZiLmNvbnRyb2woZmFsc2UpLFxyXG4gICAgfSksXHJcbiAgICB0YWdzOiB0aGlzLl9mYi5jb250cm9sKG51bGwpLFxyXG4gICAgZW1haWxzOiB0aGlzLl9mYi5ncm91cCh7XHJcbiAgICAgIGFjdGl2ZTogdGhpcy5fZmIuY29udHJvbChmYWxzZSksXHJcbiAgICAgIG1haWw6IHRoaXMuX2ZiLmNvbnRyb2woZmFsc2UpLFxyXG4gICAgICBjaGF0OiB0aGlzLl9mYi5jb250cm9sKGZhbHNlKSxcclxuICAgICAgbm90aWZpY2F0aW9uczogdGhpcy5fZmIuY29udHJvbChmYWxzZSksXHJcbiAgICAgIGV2ZW50czogdGhpcy5fZmIuY29udHJvbChmYWxzZSlcclxuICAgIH0pLFxyXG4gICAgb3V0T2ZPZmZpY2U6IHRoaXMuX2ZiLmdyb3VwKHtcclxuICAgICAgYWN0aXZlOiB0aGlzLl9mYi5jb250cm9sKGZhbHNlKSxcclxuICAgICAgc3Vic3RpdHVlSWQ6IHRoaXMuX2ZiLmNvbnRyb2wobnVsbCwgdGhpcy5fcmVxdWlyZWRWYWxpZGF0b3IpLFxyXG4gICAgICBmcm9tOiB0aGlzLl9mYi5jb250cm9sKG51bGwpLFxyXG4gICAgICB0bzogdGhpcy5fZmIuY29udHJvbChudWxsKVxyXG4gICAgfSksXHJcbiAgICBncmFudEFjY2VzczogdGhpcy5fZmIuZ3JvdXAoe1xyXG4gICAgICBhY3RpdmU6IHRoaXMuX2ZiLmNvbnRyb2woZmFsc2UpLFxyXG4gICAgICB1c2VyczogdGhpcy5fZmIuY29udHJvbChudWxsLCB0aGlzLl9yZXF1aXJlZFZhbGlkYXRvcilcclxuICAgIH0pXHJcbiAgfSk7XHJcbiAgc3VzZXJzJDogT2JzZXJ2YWJsZTxVc2VySW5mb1tdPjtcclxuICBndXNlcnMkOiBPYnNlcnZhYmxlPFVzZXJJbmZvW10+O1xyXG4gIHZvYXRpbmc6IGJvb2xlYW47XHJcbiAgb3B0aW9uczogT3B0aW9ucztcclxuICByZWFkb25seSBzZXBhcmF0b3JLZXlzQ29kZXM6IG51bWJlcltdID0gW0VOVEVSLCBDT01NQSwgU0VNSUNPTE9OXTtcclxuICBAVmlld0NoaWxkKCdvdXRPZk9mZmljZScsIHsgcmVhZDogTWF0RXhwYW5zaW9uUGFuZWwsIHN0YXRpYzogdHJ1ZSB9KSBvdXRPZk9mZmljZTogTWF0RXhwYW5zaW9uUGFuZWw7XHJcbiAgQFZpZXdDaGlsZCgnbm90aWZpY2F0aW9ucycsIHsgcmVhZDogTWF0RXhwYW5zaW9uUGFuZWwsIHN0YXRpYzogdHJ1ZSB9KSBub3RpZmljYXRpb25zOiBNYXRFeHBhbnNpb25QYW5lbDtcclxuICAvKiogb3B0aW9ucyBjdG9yICovXHJcbiAgY29uc3RydWN0b3IoQEluamVjdChPUFRJT05fUEFORUwpIEBPcHRpb25hbCgpIHByaXZhdGUgX29wdGlvbjogT3B0aW9uRGF0YSxcclxuICAgIEBPcHRpb25hbCgpIHBhbmVSZWY6IFBhbmVSZWY8YW55LCBPcHRpb25EYXRhPixcclxuICAgIEBPcHRpb25hbCgpIG92ZXJsYXlSZWY6IE92ZXJsYXlSZWYsXHJcbiAgICBwcml2YXRlIF9mYjogRm9ybUJ1aWxkZXIsXHJcbiAgICBwcml2YXRlIF9hY2NvdW50czogQWNjb3VudFNlcnZpY2UsIHByaXZhdGUgX3NiOiBQcm9tcHRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfc2Vzc2lvbjogU2Vzc2lvblNlcnZpY2UsXHJcbiAgICBASW5qZWN0KEJJWkRPQ19DT05GSUcpIGNvbmZpZzogQml6RG9jQ29uZmlnKSB7XHJcbiAgICBpZiAocGFuZVJlZikgX29wdGlvbiA9IHBhbmVSZWYuZGF0YSxcclxuICAgICAgdGhpcy52b2F0aW5nID0gIWNvbmZpZy5jb21tZW50cyB8fCBjb25maWcuY29tbWVudHMudm90aW5nICE9PSBmYWxzZTtcclxuICAgIG92ZXJsYXlSZWYgJiYgbWVyZ2Uob3ZlcmxheVJlZi5rZXlkb3duRXZlbnRzKCkucGlwZShmaWx0ZXIoayA9PiBrLmtleSA9PT0gJ0VzY2FwZScpKSwgb3ZlcmxheVJlZi5iYWNrZHJvcENsaWNrKCkpLlxyXG4gICAgICBzdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuZm9ybS52YWxpZCAmJlxyXG4gICAgICAgICAgdGhpcy5zYXZlKCk7XHJcbiAgICAgICAgb3ZlcmxheVJlZi5kaXNwb3NlKCk7XHJcbiAgICAgIH0pO1xyXG4gICAgcGFuZVJlZiAmJiBwYW5lUmVmLmNsb3NlZCgpLnN1YnNjcmliZSgoKSA9PlxyXG4gICAgICB0aGlzLmZvcm0udmFsaWQgJiZcclxuICAgICAgdGhpcy5zYXZlKCkpO1xyXG4gIH1cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuYVJJQS52YWx1ZUNoYW5nZXMucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSkpLlxyXG4gICAgICBzdWJzY3JpYmUodiA9PiB0aGlzLl9zZXNzaW9uLmFyaWEgPSB2KTtcclxuICAgIHRoaXMubGFuZ3VhZ2UudmFsdWVDaGFuZ2VzLnN1YnNjcmliZSh2ID0+IHRoaXMuX3Nlc3Npb24ubGFuZ3VhZ2UgPSB2KTtcclxuICAgIGNvbnN0IG91dE9mT2ZmaWNlID0gdGhpcy5mb3JtLmNvbnRyb2xzLm91dE9mT2ZmaWNlO1xyXG4gICAgY29uc3QgZ3JhbnRBY2Nlc3MgPSB0aGlzLmZvcm0uY29udHJvbHMuZ3JhbnRBY2Nlc3M7XHJcbiAgICBjb25zdCBub3RpZmljYXRpb25zID0gdGhpcy5mb3JtLmNvbnRyb2xzLm5vdGlmaWNhdGlvbnM7XHJcbiAgICBjb25zdCBlbWFpbHMgPSB0aGlzLmZvcm0uY29udHJvbHMuZW1haWxzO1xyXG4gICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMub3B0aW9ucyA9IHRoaXMuX3Nlc3Npb24ucHJvZmlsZS5vcHRpb25zO1xyXG4gICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUob3B0aW9ucywgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgaWYgKCFvcHRpb25zLm5vdGlmaWNhdGlvbnMuYWN0aXZlKVxyXG4gICAgICB0aGlzLl90b2dnbGUobm90aWZpY2F0aW9ucywgZmFsc2UsICdsaWtlcycsXHJcbiAgICAgICAgJ2NvbW1lbnRNeURvY3VtZW50JyxcclxuICAgICAgICAnY29tbWVudEFueURvY3VtZW50JyxcclxuICAgICAgICAndXBjb21pbmdFdmVudHMnLFxyXG4gICAgICAgICd0YWdnZWQnLFxyXG4gICAgICAgICdhbnlEb2N1bWVudFN0YXRlQ2hhbmdlJyxcclxuICAgICAgICAnbXlEb2N1bWVudFN0YXRlQ2hhbmdlJyxcclxuICAgICAgICAnY3ViZUFub21hbHknKTtcclxuICAgIGlmICghb3B0aW9ucy5lbWFpbHMuYWN0aXZlKVxyXG4gICAgICB0aGlzLl90b2dnbGUoZW1haWxzLCBmYWxzZSwgJ21haWwnLFxyXG4gICAgICAgICdjaGF0JyxcclxuICAgICAgICAnbm90aWZpY2F0aW9ucycsXHJcbiAgICAgICAgJ2V2ZW50cycpO1xyXG4gICAgaWYgKCFvcHRpb25zLmdyYW50QWNjZXNzLmFjdGl2ZSlcclxuICAgICAgdGhpcy5ndXNlcnMuZGlzYWJsZSgpO1xyXG4gICAgaWYgKCFvcHRpb25zLm91dE9mT2ZmaWNlLmFjdGl2ZSkge1xyXG4gICAgICB0aGlzLnN1YnN0aXR1ZUlkLmRpc2FibGUoKTtcclxuICAgICAgdGhpcy5fdG9nZ2xlKG91dE9mT2ZmaWNlLCBmYWxzZSwgJ2Zyb20nLCAndG8nKTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKCFvcHRpb25zLm91dE9mT2ZmaWNlLmZyb20pXHJcbiAgICAgIHRoaXMuX3RvZ2dsZShvdXRPZk9mZmljZSwgZmFsc2UsICd0bycpO1xyXG4gICAgLy8gY2hhbmdlXHJcbiAgICBub3RpZmljYXRpb25zLmNvbnRyb2xzLmFjdGl2ZS52YWx1ZUNoYW5nZXMucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSkpLlxyXG4gICAgICBzdWJzY3JpYmUoYWN0aXZlID0+XHJcbiAgICAgICAgdGhpcy5fdG9nZ2xlKG5vdGlmaWNhdGlvbnMsIGFjdGl2ZSwgJ2xpa2VzJyxcclxuICAgICAgICAgICdjb21tZW50TXlEb2N1bWVudCcsXHJcbiAgICAgICAgICAnY29tbWVudEFueURvY3VtZW50JyxcclxuICAgICAgICAgICd1cGNvbWluZ0V2ZW50cycsXHJcbiAgICAgICAgICAndGFnZ2VkJyxcclxuICAgICAgICAgICdhbnlEb2N1bWVudFN0YXRlQ2hhbmdlJyxcclxuICAgICAgICAgICdteURvY3VtZW50U3RhdGVDaGFuZ2UnLFxyXG4gICAgICAgICAgJ2N1YmVBbm9tYWx5JykpO1xyXG4gICAgZW1haWxzLmNvbnRyb2xzLmFjdGl2ZS52YWx1ZUNoYW5nZXMucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSkpLlxyXG4gICAgICBzdWJzY3JpYmUoYWN0aXZlID0+IHRoaXMuX3RvZ2dsZShlbWFpbHMsIGFjdGl2ZSwgJ21haWwnLFxyXG4gICAgICAgICdjaGF0JyxcclxuICAgICAgICAnbm90aWZpY2F0aW9ucycsXHJcbiAgICAgICAgJ2V2ZW50cycpKTtcclxuICAgIGdyYW50QWNjZXNzLmNvbnRyb2xzLmFjdGl2ZS52YWx1ZUNoYW5nZXMucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSkpLlxyXG4gICAgICBzdWJzY3JpYmUoYWN0aXZlID0+IHtcclxuICAgICAgICBpZiAoYWN0aXZlKSB7XHJcbiAgICAgICAgICB0aGlzLmd1c2Vycy5lbmFibGUoKTtcclxuICAgICAgICAgIHRoaXMuZ3JhbnRJbnB1dC5mb2N1cygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHRoaXMuZ3VzZXJzLmVuYWJsZSgpO1xyXG4gICAgICB9KTtcclxuICAgIG91dE9mT2ZmaWNlLmNvbnRyb2xzLmFjdGl2ZS52YWx1ZUNoYW5nZXMucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSkpLlxyXG4gICAgICBzdWJzY3JpYmUoYWN0aXZlID0+IHtcclxuICAgICAgICBpZiAoYWN0aXZlKSB7XHJcbiAgICAgICAgICB0aGlzLnN1YnN0aXR1ZUlkLmVuYWJsZSgpO1xyXG4gICAgICAgICAgdGhpcy5zdWJzdGl0dWVJbnB1dC5mb2N1cygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICB0aGlzLnN1YnN0aXR1ZUlkLmRpc2FibGUoKTtcclxuICAgICAgICB0aGlzLl90b2dnbGUob3V0T2ZPZmZpY2UsIGFjdGl2ZSwgJ2Zyb20nKTtcclxuICAgICAgICB0aGlzLl90b2dnbGUob3V0T2ZPZmZpY2UsIGFjdGl2ZSAmJiBvdXRPZk9mZmljZS5jb250cm9scy5mcm9tLnZhbHVlLCAndG8nKTtcclxuICAgICAgfSk7XHJcbiAgICBvdXRPZk9mZmljZS5jb250cm9scy5mcm9tLnZhbHVlQ2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95KSkuXHJcbiAgICAgIHN1YnNjcmliZShmcm9tID0+XHJcbiAgICAgICAgdGhpcy5fdG9nZ2xlKG91dE9mT2ZmaWNlLCBmcm9tICE9PSBudWxsLCAndG8nKSk7XHJcbiAgICB0aGlzLmd1c2VycyQgPSB0aGlzLmd1c2Vycy52YWx1ZUNoYW5nZXMucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSksXHJcbiAgICAgIGZpbHRlcih2ID0+IGlzU3RyaW5nKHYpKSxcclxuICAgICAgZGVib3VuY2VUaW1lKDEwMCksXHJcbiAgICAgIHN3aXRjaE1hcCh2ID0+IHRoaXMuX2FjY291bnRzLmZpbmRBbGwodiBhcyBhbnkpKSxcclxuICAgICAgbWFwKHIgPT4ge1xyXG4gICAgICAgIGNvbnN0IGV4Y2x1ZGUgPSAoZ3JhbnRBY2Nlc3MudmFsdWUudXNlcnMgYXMgc3RyaW5nW10pPy5zbGljZSgpIHx8IFtdO1xyXG4gICAgICAgIGV4Y2x1ZGUucHVzaCh0aGlzLl9zZXNzaW9uLnByb2ZpbGUudXNlcklkKTtcclxuICAgICAgICByZXR1cm4gci5maWx0ZXIodSA9PiBleGNsdWRlLmluZGV4T2YodS5pZCkgPCAwKTtcclxuICAgICAgfSkpO1xyXG4gICAgdGhpcy5zdXNlcnMkID0gdGhpcy5zdWJzdGl0dWVJZC52YWx1ZUNoYW5nZXMucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSksXHJcbiAgICAgIHRhcCh2ID0+XHJcbiAgICAgICAgIXYgJiYgb3V0T2ZPZmZpY2UuY29udHJvbHMuc3Vic3RpdHVlSWQuc2V0VmFsdWUobnVsbClcclxuICAgICAgKSxcclxuICAgICAgZmlsdGVyKHYgPT4gaXNTdHJpbmcodikpLFxyXG4gICAgICBzd2l0Y2hNYXAodiA9PiB0aGlzLl9hY2NvdW50cy5maW5kQWxsKHYpKSxcclxuICAgICAgbWFwKHIgPT4gci5maWx0ZXIodSA9PiB1LmlkICE9PSB0aGlzLl9zZXNzaW9uLnByb2ZpbGUudXNlcklkKSkpO1xyXG4gICAgaWYgKG9wdGlvbnMub3V0T2ZPZmZpY2Uuc3Vic3RpdHVlSWQpXHJcbiAgICAgIHRoaXMuX2FjY291bnRzLmdldChvcHRpb25zLm91dE9mT2ZmaWNlLnN1YnN0aXR1ZUlkKS5zdWJzY3JpYmUodSA9PlxyXG4gICAgICAgIHRoaXMuc3Vic3RpdHVlSWQuc2V0VmFsdWUodSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pKTtcclxuICAgIGlmICh0aGlzLl9vcHRpb24pXHJcbiAgICAgIHN3aXRjaCAodGhpcy5fb3B0aW9uLm9wZW4pIHtcclxuICAgICAgICBjYXNlICdvdXRvZm9mZmljZSc6XHJcbiAgICAgICAgICB0aGlzLm91dE9mT2ZmaWNlLm9wZW4oKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbnMub3BlbigpO1xyXG4gICAgICB9XHJcbiAgfVxyXG4gIHNhdmUoKSB7XHJcbiAgICB0aGlzLnNhdmVpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy5mb3JtLnZhbGlkICYmXHJcbiAgICAgIHRoaXMuX3Nlc3Npb24udXBkYXRlKHRoaXMuZm9ybS5nZXRSYXdWYWx1ZSgpKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgIGVycm9yOiAoKSA9PiB0aGlzLl9zYi5lcnJvcigpLFxyXG4gICAgICAgIGNvbXBsZXRlOiAoKSA9PlxyXG4gICAgICAgICAgdGhpcy5zYXZlaW5nID0gZmFsc2VcclxuICAgICAgfSk7XHJcbiAgfVxyXG4gIHByaXZhdGUgX3RvZ2dsZShncm91cDogRm9ybUdyb3VwLCBhY3RpdmU6IGJvb2xlYW4sIC4uLmNvbnRyb2xzOiBzdHJpbmdbXSkge1xyXG4gICAgY29udHJvbHMuZm9yRWFjaChuYW1lID0+IHtcclxuICAgICAgaWYgKCFhY3RpdmUpIGdyb3VwLmNvbnRyb2xzW25hbWVdLmRpc2FibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgICBlbHNlIGdyb3VwLmNvbnRyb2xzW25hbWVdLmVuYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcbiAgdG9nZ2xlU291bmQoKSB7XHJcbiAgICB0aGlzLmZvcm0uY29udHJvbHMubm90aWZpY2F0aW9ucy5jb250cm9scy5zb3VuZC5zZXRWYWx1ZSghdGhpcy5vcHRpb25zLm5vdGlmaWNhdGlvbnMuc291bmQpO1xyXG4gIH1cclxuICBkaXNwbGF5ID0gKGl0ZW06IFVzZXJJbmZvKSA9PiB7XHJcbiAgICByZXR1cm4gaXRlbSA/IGl0ZW0ubmFtZSA6IG51bGw7XHJcbiAgfVxyXG5cclxuICBhZGRUYWcoZXZlbnQ6IE1hdENoaXBJbnB1dEV2ZW50KSB7XHJcbiAgICBjb25zdCB7IGNoaXBJbnB1dCwgdmFsdWUgfSA9IGV2ZW50O1xyXG5cclxuICAgIC8vIEFkZCBvdXIgZnJ1aXRcclxuICAgIGlmICgodmFsdWUgfHwgJycpLnRyaW0oKSkge1xyXG4gICAgICB0aGlzLm9wdGlvbnMudGFncy5wdXNoKHZhbHVlLnRyaW0oKSk7XHJcbiAgICAgIHRoaXMuZm9ybS5wYXRjaFZhbHVlKHt9KTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBSZXNldCB0aGUgaW5wdXQgdmFsdWUgXHJcbiAgICBjaGlwSW5wdXQ/LmNsZWFyKCk7XHJcbiAgfVxyXG4gIHJlbW92ZVRhZyh0YWc6IHN0cmluZykge1xyXG4gICAgdGhpcy5vcHRpb25zLnRhZ3MucmVtb3ZlKHRhZyk7XHJcbiAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZSh7fSk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSBpZFxyXG4gICAqL1xyXG4gIHJlbW92ZUdyYW50KGlkOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGNvbnN0IHVzZXJzID0gdGhpcy5mb3JtLnZhbHVlLmdyYW50QWNjZXNzLnVzZXJzIGFzIHN0cmluZ1tdO1xyXG4gICAgY29uc3QgaW5kZXggPSB1c2Vycy5pbmRleE9mKGlkKTtcclxuXHJcbiAgICBpZiAoaW5kZXggPj0gMClcclxuICAgICAgdXNlcnMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgIHRoaXMuZm9ybS5wYXRjaFZhbHVlKHt9KTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogXHJcbiAgICogQHBhcmFtIGlucFxyXG4gICAqIEBwYXJhbSBldmVudFxyXG4gICAqL1xyXG4gIGFkZEdyYW50KGlucDogSFRNTElucHV0RWxlbWVudCwgZXZlbnQ6IE1hdEF1dG9jb21wbGV0ZVNlbGVjdGVkRXZlbnQpOiB2b2lkIHtcclxuICAgIGNvbnN0IHVzZXJzID0gdGhpcy5mb3JtLnZhbHVlLmdyYW50QWNjZXNzLnVzZXJzIGFzIHN0cmluZ1tdO1xyXG4gICAgY29uc3QgaWQgPSBldmVudC5vcHRpb24udmFsdWUgYXMgc3RyaW5nO1xyXG4gICAgaWYgKCF1c2VycylcclxuICAgICAgKHRoaXMuZm9ybS5jb250cm9scy5ncmFudEFjY2VzcykuY29udHJvbHMudXNlcnMuc2V0VmFsdWUoW2lkXSk7XHJcbiAgICBlbHNlXHJcbiAgICAgIHVzZXJzLnB1c2goaWQpO1xyXG4gICAgaW5wLnZhbHVlID0gJyc7XHJcbiAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZSh7fSk7XHJcbiAgfVxyXG4gIHNldFN1YnN0aXR1dGUoZXZlbnQ6IE1hdEF1dG9jb21wbGV0ZVNlbGVjdGVkRXZlbnQpIHtcclxuICAgICh0aGlzLmZvcm0uY29udHJvbHMub3V0T2ZPZmZpY2UpLmNvbnRyb2xzLnN1YnN0aXR1ZUlkLnNldFZhbHVlKChldmVudC5vcHRpb24udmFsdWUgYXMgVXNlckluZm8pLmlkKTtcclxuICB9XHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLl9kZXN0cm95Lm5leHQoKTtcclxuICAgIHRoaXMuX2Rlc3Ryb3kuY29tcGxldGUoKTtcclxuICB9XHJcbn1cclxuIiwiPG1hdC10b29sYmFyPlxuICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwic2F2ZSgpXCIgW2Rpc2FibGVkXT1cIiFmb3JtLmRpcnR5IHx8ICFmb3JtLnZhbGlkIHx8IHNhdmVpbmdcIiBbYml6ZG9jVG9vbHRpcF09XCInU2F2ZSd8dHJhbnNsYXRlXCI+PG1hdC1pY29uPnNhdmU8L21hdC1pY29uPjwvYnV0dG9uPlxuPC9tYXQtdG9vbGJhcj5cbjxtYXQtcHJvZ3Jlc3MtYmFyIG1vZGU9XCJpbmRldGVybWluYXRlXCIgW3N0eWxlLnZpc2liaWxpdHldPVwic2F2ZWluZyA/ICd2aXNpYmxlJzonaGlkZGVuJ1wiPjwvbWF0LXByb2dyZXNzLWJhcj5cbjxmb3JtIFtmb3JtR3JvdXBdPVwiZm9ybVwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiPlxuICA8bWF0LWFjY29yZGlvbj5cbiAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbCAjbm90aWZpY2F0aW9ucz5cbiAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cbiAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICB7eydOb3RpZmljYXRpb25zJyB8IHRyYW5zbGF0ZX19XG4gICAgICAgIDwvbWF0LXBhbmVsLXRpdGxlPlxuICAgICAgICA8bWF0LXBhbmVsLWRlc2NyaXB0aW9uPlxuICAgICAgICAgIDwhLS08bWF0LWljb24+bm90aWZpY2F0aW9uczwvbWF0LWljb24+LS0+XG4gICAgICAgIDwvbWF0LXBhbmVsLWRlc2NyaXB0aW9uPlxuICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cbiAgICAgIDxkaXYgZm9ybUdyb3VwTmFtZT1cIm5vdGlmaWNhdGlvbnNcIiBjbGFzcz1cImNvbHVtblwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgZm9ybUNvbnRyb2xOYW1lPVwiYWN0aXZlXCI+e3snQWN0aXZlJyB8IHRyYW5zbGF0ZX19PC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZGl2aWRlclwiPjwvc3Bhbj5cbiAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwidG9nZ2xlU291bmQoKVwiIFtiaXpkb2NUb29sdGlwXT1cIidTb3VuZCd8dHJhbnNsYXRlXCI+PG1hdC1pY29uPnt7b3B0aW9ucy5ub3RpZmljYXRpb25zLnNvdW5kID8gJ3ZvbHVtZV91cCcgOiAndm9sdW1lX29mZid9fTwvbWF0LWljb24+PC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8YnIgLz5cbiAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgZm9ybUNvbnRyb2xOYW1lPVwibXlEb2N1bWVudFN0YXRlQ2hhbmdlXCI+e3snTXlTdGF0ZUNoYW5nZScgfCB0cmFuc2xhdGV9fTwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgZm9ybUNvbnRyb2xOYW1lPVwiYW55RG9jdW1lbnRTdGF0ZUNoYW5nZVwiPnt7J0FueVN0YXRlQ2hhbmdlJyB8IHRyYW5zbGF0ZX19PC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBmb3JtQ29udHJvbE5hbWU9XCJjb21tZW50TXlEb2N1bWVudFwiPnt7J0NvbW1lbnRNeURvY3VtZW50JyB8IHRyYW5zbGF0ZX19PC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBmb3JtQ29udHJvbE5hbWU9XCJjb21tZW50QW55RG9jdW1lbnRcIj57eydDb21tZW50QW55RG9jdW1lbnQnIHwgdHJhbnNsYXRlfX08L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGZvcm1Db250cm9sTmFtZT1cImxpa2VzXCIgW3N0eWxlLmRpc3BsYXldPVwidm9hdGluZz8nJzonbm9uZSdcIj57eydMaWtlZENvbW1lbnQnIHwgdHJhbnNsYXRlfX08L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGZvcm1Db250cm9sTmFtZT1cInRhZ2dlZFwiPnt7J1RhZ2dlZEluQ29tbWVudHMnIHwgdHJhbnNsYXRlfX08L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGZvcm1Db250cm9sTmFtZT1cInVwY29taW5nRXZlbnRzXCI+e3snVXBjb21pbmdFdmVudHMnIHwgdHJhbnNsYXRlfX08L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGZvcm1Db250cm9sTmFtZT1cImN1YmVBbm9tYWx5XCI+e3snQ3ViZUFub21hbHknIHwgdHJhbnNsYXRlfX08L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICA8L2Rpdj5cbiAgICA8L21hdC1leHBhbnNpb24tcGFuZWw+XG4gICAgPG1hdC1leHBhbnNpb24tcGFuZWwgI2VtYWlscz5cbiAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cbiAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICB7eydFbWFpbHMnIHwgdHJhbnNsYXRlfX1cbiAgICAgICAgPC9tYXQtcGFuZWwtdGl0bGU+XG4gICAgICAgIDxtYXQtcGFuZWwtZGVzY3JpcHRpb24+XG4gICAgICAgICAgPCEtLTxtYXQtaWNvbj5hbHRlcm5hdGVfZW1haWw8L21hdC1pY29uPi0tPlxuICAgICAgICA8L21hdC1wYW5lbC1kZXNjcmlwdGlvbj5cbiAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgICA8ZGl2IGZvcm1Hcm91cE5hbWU9XCJlbWFpbHNcIiBjbGFzcz1cImNvbHVtblwiPlxuICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBmb3JtQ29udHJvbE5hbWU9XCJhY3RpdmVcIj57eydBY3RpdmUnIHwgdHJhbnNsYXRlfX08L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgIDxiciAvPlxuICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBmb3JtQ29udHJvbE5hbWU9XCJtYWlsXCI+e3snTWFpbHMnIHwgdHJhbnNsYXRlfX08L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGZvcm1Db250cm9sTmFtZT1cImNoYXRcIj57eydDb252ZXJzYXRpb25zJyB8IHRyYW5zbGF0ZX19PC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBmb3JtQ29udHJvbE5hbWU9XCJub3RpZmljYXRpb25zXCI+e3snRW1haWxOb3RpZmljYXRpb25zJyB8IHRyYW5zbGF0ZX19PC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBmb3JtQ29udHJvbE5hbWU9XCJldmVudHNcIj57eydBbGFybUV2ZW50cycgfCB0cmFuc2xhdGV9fTwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgIDwvZGl2PlxuICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbD5cbiAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbCAjb3V0T2ZPZmZpY2U+XG4gICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgICAgIDxtYXQtcGFuZWwtdGl0bGU+XG4gICAgICAgICAge3snT3V0T2ZPZmZpY2UnIHwgdHJhbnNsYXRlfX1cbiAgICAgICAgPC9tYXQtcGFuZWwtdGl0bGU+XG4gICAgICAgIDxtYXQtcGFuZWwtZGVzY3JpcHRpb24+XG4gICAgICAgICAgPCEtLTxtYXQtaWNvbj50cmVuZGluZ19mbGF0PC9tYXQtaWNvbj4tLT5cbiAgICAgICAgICA8IS0te3snT3V0T2ZPZmZpY2VUaXAnIHwgdHJhbnNsYXRlfX0tLT5cbiAgICAgICAgPC9tYXQtcGFuZWwtZGVzY3JpcHRpb24+XG4gICAgICA8L21hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxuICAgICAgPGRpdiBmb3JtR3JvdXBOYW1lPVwib3V0T2ZPZmZpY2VcIiBjbGFzcz1cImNvbHVtblwiPlxuICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBmb3JtQ29udHJvbE5hbWU9XCJhY3RpdmVcIj57eydBY3RpdmUnIHwgdHJhbnNsYXRlfX08L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgIDxiciAvPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJmbGV4XCI+XG4gICAgICAgICAgPGlucHV0IG1hdElucHV0IFtmb3JtQ29udHJvbF09XCJzdWJzdGl0dWVJZFwiIHR5cGU9XCJzZWFyY2hcIiBbbWF0QXV0b2NvbXBsZXRlXT1cInNhdXRvXCIgI3N1YnN0aXR1ZUlucHV0XG4gICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInQXNzb2NpYXRlJyB8IHRyYW5zbGF0ZVwiIFtyZXF1aXJlZF09XCJmb3JtLnZhbHVlLm91dE9mT2ZmaWNlLmFjdGl2ZVwiIC8+XG4gICAgICAgICAgPG1hdC1hdXRvY29tcGxldGUgI3NhdXRvPVwibWF0QXV0b2NvbXBsZXRlXCIgW2Rpc3BsYXlXaXRoXT1cImRpc3BsYXlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvcHRpb25TZWxlY3RlZCk9XCJzZXRTdWJzdGl0dXRlKCRldmVudClcIj5cbiAgICAgICAgICAgIEBmb3IgKHUgb2Ygc3VzZXJzJCB8IGFzeW5jOyB0cmFjayB1KSB7XG4gICAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwidVwiPlxuICAgICAgICAgICAgICA8c3Bhbj57e3UubmFtZX19PC9zcGFuPlxuICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvbWF0LWF1dG9jb21wbGV0ZT5cbiAgICAgICAgICA8bWF0LWhpbnQ+e3snT3V0T2ZPZmZpY2VUaXAnIHwgdHJhbnNsYXRlfX08L21hdC1oaW50PlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eydEYXRlcyd8dHJhbnNsYXRlfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8bWF0LWRhdGUtcmFuZ2UtaW5wdXQgW3JhbmdlUGlja2VyXT1cImRhdGVzXCIgcmVxdWlyZWQ+XG4gICAgICAgICAgICA8aW5wdXQgbWF0U3RhcnREYXRlIGZvcm1Db250cm9sTmFtZT1cImZyb21cIiBbcGxhY2Vob2xkZXJdPVwiJ0Zyb20nfHRyYW5zbGF0ZVwiIFttaW5dPVwidG9kYXlcIj5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRFbmREYXRlIGZvcm1Db250cm9sTmFtZT1cInRvXCIgW3BsYWNlaG9sZGVyXT1cIidUbyd8dHJhbnNsYXRlXCI+XG4gICAgICAgICAgPC9tYXQtZGF0ZS1yYW5nZS1pbnB1dD5cbiAgICAgICAgICA8bWF0LWRhdGVwaWNrZXItdG9nZ2xlIG1hdFN1ZmZpeCBbZm9yXT1cImRhdGVzXCI+PC9tYXQtZGF0ZXBpY2tlci10b2dnbGU+XG4gICAgICAgICAgPG1hdC1kYXRlLXJhbmdlLXBpY2tlciAjZGF0ZXMgW3RvdWNoVWldPVwiaXNNb2JpbGVcIj48L21hdC1kYXRlLXJhbmdlLXBpY2tlcj5cbiAgICAgICAgICBAaWYgKGZvcm0uY29udHJvbHMub3V0T2ZPZmZpY2UuY29udHJvbHMuZnJvbS5oYXNFcnJvcigncmVxdWlyZWQnKSB8fCBmb3JtLmNvbnRyb2xzLm91dE9mT2ZmaWNlLmNvbnRyb2xzLnRvLmhhc0Vycm9yKCdyZXF1aXJlZCcpKSB7XG4gICAgICAgICAgPG1hdC1lcnJvciBbaW5uZXJIVE1MXT1cIidBcmVSZXF1aXJlZEVycid8dHJhbnNsYXRlIDogKCdEYXRlcyd8dHJhbnNsYXRlKVwiPjwvbWF0LWVycm9yPlxuICAgICAgICAgIH1cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDwvZGl2PlxuICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbD5cbiAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbCAjZ3JhbnRBY2Nlc3M+XG4gICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgICAgIDxtYXQtcGFuZWwtdGl0bGU+XG4gICAgICAgICAge3snR3JhbnRBY2Nlc3MnIHwgdHJhbnNsYXRlfX1cbiAgICAgICAgPC9tYXQtcGFuZWwtdGl0bGU+XG4gICAgICAgIDxtYXQtcGFuZWwtZGVzY3JpcHRpb24+XG4gICAgICAgICAgPCEtLTxtYXQtaWNvbj5hY2NvdW50X2NpcmNsZTwvbWF0LWljb24+LS0+XG4gICAgICAgIDwvbWF0LXBhbmVsLWRlc2NyaXB0aW9uPlxuICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cbiAgICAgIDxkaXYgZm9ybUdyb3VwTmFtZT1cImdyYW50QWNjZXNzXCIgY2xhc3M9XCJncmFudC1zZWN0aW9uXCI+XG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGZvcm1Db250cm9sTmFtZT1cImFjdGl2ZVwiPnt7J0FjdGl2ZScgfCB0cmFuc2xhdGV9fTwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDxtYXQtY2hpcC1ncmlkICNncmFudExpc3QgW2F0dHIuYXJpYS1sYWJlbF09XCJcIiBbZGlzYWJsZWRdPVwiIWZvcm0udmFsdWUuZ3JhbnRBY2Nlc3MuYWN0aXZlXCI+XG4gICAgICAgICAgICBAZm9yICh1IG9mIGZvcm0udmFsdWUuZ3JhbnRBY2Nlc3MudXNlcnMgfHwgW107IHRyYWNrIHUpIHtcbiAgICAgICAgICAgIDxtYXQtY2hpcC1yb3cgKHJlbW92ZWQpPVwicmVtb3ZlR3JhbnQodSlcIj5cbiAgICAgICAgICAgICAge3t1IHwgdXNlck5hbWUgfCBhc3luY319XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRDaGlwUmVtb3ZlPmNhbmNlbDwvbWF0LWljb24+XG4gICAgICAgICAgICA8L21hdC1jaGlwLXJvdz5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L21hdC1jaGlwLWdyaWQ+XG4gICAgICAgICAgPGlucHV0IFtmb3JtQ29udHJvbF09XCJndXNlcnNcIiBwbGFjZWhvbGRlcj1cInt7J1VzZXJzJ3wgdHJhbnNsYXRlfX1cIlxuICAgICAgICAgICAgICAgICAjZ3JhbnRJbnB1dFxuICAgICAgICAgICAgICAgICBbbWF0QXV0b2NvbXBsZXRlXT1cImdyYW50QXV0b1wiXG4gICAgICAgICAgICAgICAgIFttYXRDaGlwSW5wdXRGb3JdPVwiZ3JhbnRMaXN0XCJcbiAgICAgICAgICAgICAgICAgW21hdENoaXBJbnB1dFNlcGFyYXRvcktleUNvZGVzXT1cInNlcGFyYXRvcktleXNDb2Rlc1wiPlxuICAgICAgICAgIDxtYXQtYXV0b2NvbXBsZXRlICNncmFudEF1dG89XCJtYXRBdXRvY29tcGxldGVcIiAob3B0aW9uU2VsZWN0ZWQpPVwiYWRkR3JhbnQoZ3JhbnRJbnB1dCwgJGV2ZW50KVwiPlxuICAgICAgICAgICAgQGZvciAodSBvZiBndXNlcnMkIHwgYXN5bmM7IHRyYWNrIHUpIHtcbiAgICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCJ1LmlkXCI+XG4gICAgICAgICAgICAgIHt7dS5uYW1lfX1cbiAgICAgICAgICAgICAgQGlmICh1LmVtYWlsKSB7XG4gICAgICAgICAgICAgIDxzcGFuPiZuYnNwOyAtIHt7dS5lbWFpbH19PC9zcGFuPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9tYXQtYXV0b2NvbXBsZXRlPlxuICAgICAgICAgIDxtYXQtaGludD57eydHcmFudFRpcCcgfCB0cmFuc2xhdGV9fTwvbWF0LWhpbnQ+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8L2Rpdj5cbiAgICA8L21hdC1leHBhbnNpb24tcGFuZWw+XG4gICAgPG1hdC1leHBhbnNpb24tcGFuZWwgI3ByZWZlcmVuY2VzPlxuICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxuICAgICAgICA8bWF0LXBhbmVsLXRpdGxlPlxuICAgICAgICAgIHt7J1ByZWZlcmVuY2VzJyB8IHRyYW5zbGF0ZX19XG4gICAgICAgIDwvbWF0LXBhbmVsLXRpdGxlPlxuICAgICAgICA8bWF0LXBhbmVsLWRlc2NyaXB0aW9uPlxuICAgICAgICAgIDwhLS08bWF0LWljb24+PC9tYXQtaWNvbj4tLT5cbiAgICAgICAgPC9tYXQtcGFuZWwtZGVzY3JpcHRpb24+XG4gICAgICA8L21hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbHVtblwiPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1jaGlwLWdyaWQgI2NoaXBzPlxuICAgICAgICAgICAgQGZvciAoaXRlbSBvZiBmb3JtLnZhbHVlLnRhZ3M7IHRyYWNrIGl0ZW0pIHtcbiAgICAgICAgICAgIDxtYXQtY2hpcC1yb3cgW3JlbW92YWJsZV09XCJ0cnVlXCIgKHJlbW92ZWQpPVwicmVtb3ZlVGFnKGl0ZW0pXCI+XG4gICAgICAgICAgICAgIHt7aXRlbX19XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRDaGlwUmVtb3ZlPmNhbmNlbDwvbWF0LWljb24+XG4gICAgICAgICAgICA8L21hdC1jaGlwLXJvdz5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L21hdC1jaGlwLWdyaWQ+XG4gICAgICAgICAgPGlucHV0IFtwbGFjZWhvbGRlcl09XCInVGFncyd8dHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgW21hdENoaXBJbnB1dEZvcl09XCJjaGlwc1wiXG4gICAgICAgICAgICAgICAgIFttYXRDaGlwSW5wdXRTZXBhcmF0b3JLZXlDb2Rlc109XCJzZXBhcmF0b3JLZXlzQ29kZXNcIlxuICAgICAgICAgICAgICAgICBbbWF0Q2hpcElucHV0QWRkT25CbHVyXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAobWF0Q2hpcElucHV0VG9rZW5FbmQpPVwiYWRkVGFnKCRldmVudClcIj5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgW2Zvcm1Db250cm9sXT1cImFSSUFcIj57eydBUklBJyB8IHRyYW5zbGF0ZX19PC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgPC9kaXY+XG4gICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxuICA8L21hdC1hY2NvcmRpb24+XG48L2Zvcm0+XG4iXX0=
|
266
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3B0aW9ucy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJyYXJpZXMvY29yZS9zcmMvbGliL29wdGlvbnMvb3B0aW9ucy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9saWJyYXJpZXMvY29yZS9zcmMvbGliL29wdGlvbnMvb3B0aW9ucy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFxQixTQUFTLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQWUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTlILE9BQU8sRUFBRSxPQUFPLEVBQWMsS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2xELE9BQU8sRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXRGLE9BQU8sRUFBRSxZQUFZLEVBQXFCLE1BQU0seUJBQXlCLENBQUM7QUFDMUUsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFaEUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ25ELE9BQU8sRUFBRSxhQUFhLEVBQWdCLE1BQU0sdUJBQXVCLENBQUM7QUFDcEUsT0FBTyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUt2RCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBSTNELE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxJQUFJLGNBQWMsQ0FBYSxTQUFTLENBQUMsQ0FBQztBQVd0RSx1QkFBdUI7QUFDdkIsTUFBTSxPQUFPLGdCQUFnQjtJQTBEM0IsWUFBOEMsT0FBbUIsRUFDbkQsVUFBc0IsRUFDMUIsR0FBZ0IsRUFDaEIsU0FBeUIsRUFDekIsR0FBa0IsRUFDbEIsUUFBd0IsRUFDVCxNQUFvQjtRQUpuQyxRQUFHLEdBQUgsR0FBRyxDQUFhO1FBQ2hCLGNBQVMsR0FBVCxTQUFTLENBQWdCO1FBQ3pCLFFBQUcsR0FBSCxHQUFHLENBQWU7UUFDbEIsYUFBUSxHQUFSLFFBQVEsQ0FBZ0I7UUF6RGxDLGlCQUFZLEdBQUcsQ0FBQyxDQUFDO1FBRWpCLFlBQU8sR0FBRyxLQUFLLENBQUM7UUFDUix1QkFBa0IsR0FBRyxDQUFDLE9BQXdCLEVBQWlDLEVBQUU7WUFDdkYsTUFBTSxNQUFNLEdBQUksT0FBTyxDQUFDLE1BQW9CLENBQUM7WUFDN0MsSUFBSSxNQUFNLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsS0FBSyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUs7Z0JBQUUsT0FBTztvQkFDbkUsUUFBUSxFQUFFLElBQUk7aUJBQ2YsQ0FBQTtRQUNILENBQUMsQ0FBQTtRQUNRLGlCQUFZLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDcEMsVUFBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQy9CLFNBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQztZQUM3QixhQUFhLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUM7Z0JBQzVCLE1BQU0sRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7Z0JBQy9CLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7Z0JBQzlCLGlCQUFpQixFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztnQkFDMUMsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO2dCQUMzQyxjQUFjLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO2dCQUN2QyxNQUFNLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO2dCQUMvQixzQkFBc0IsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7Z0JBQy9DLHFCQUFxQixFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztnQkFDOUMsV0FBVyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztnQkFDcEMsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQzthQUMvQixDQUFDO1lBQ0YsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztZQUM1QixNQUFNLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUM7Z0JBQ3JCLE1BQU0sRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7Z0JBQy9CLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7Z0JBQzdCLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7Z0JBQzdCLGFBQWEsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7Z0JBQ3RDLE1BQU0sRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7YUFDaEMsQ0FBQztZQUNGLFdBQVcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQztnQkFDMUIsTUFBTSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztnQkFDL0IsV0FBVyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsa0JBQWtCLENBQUM7Z0JBQzVELElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7Z0JBQzVCLEVBQUUsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7YUFDM0IsQ0FBQztZQUNGLFdBQVcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQztnQkFDMUIsTUFBTSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztnQkFDL0IsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsa0JBQWtCLENBQUM7YUFDdkQsQ0FBQztTQUNILENBQUMsQ0FBQztRQUtNLFVBQUssR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ25CLGFBQVEsR0FBRyxRQUFRLEVBQUUsQ0FBQztRQUN0Qix1QkFBa0IsR0FBYSxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDbEUsbUJBQW1CO1FBQ0YsYUFBUSxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUEwSWhELFlBQU8sR0FBRyxDQUFDLElBQWMsRUFBRSxFQUFFO1lBQzNCLE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDakMsQ0FBQyxDQUFBO1FBcElDLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxNQUFNLENBQUMsUUFBUSxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxLQUFLLEtBQUssQ0FBQztRQUNwRSxJQUFJLENBQUMsV0FBVyxHQUFHLE9BQU8sRUFBRSxPQUFPLENBQUM7UUFDcEMsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUM7UUFDN0MsVUFBVSxJQUFJLEtBQUssQ0FBQyxVQUFVLENBQUMsYUFBYSxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssUUFBUSxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDL0csU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUNiLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSztnQkFDYixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDZCxVQUFVLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDdkIsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBQ0QsUUFBUTtRQUNOLE1BQU0sRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLGFBQWEsRUFBRSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUMvRSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDekQsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLE1BQU07WUFDcEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFDeEMsbUJBQW1CLEVBQ25CLG9CQUFvQixFQUNwQixnQkFBZ0IsRUFDaEIsUUFBUSxFQUNSLHdCQUF3QixFQUN4Qix1QkFBdUIsRUFDdkIsYUFBYSxDQUFDLENBQUM7UUFDbkIsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU07WUFDN0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFDaEMsTUFBTSxFQUNOLGVBQWUsRUFDZixRQUFRLENBQUMsQ0FBQztRQUNkLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxNQUFNO1lBQ2xDLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDOUIsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ3JDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDckIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNqRCxDQUFDO2FBQ0ksSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLElBQUk7WUFDckMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3pDLFNBQVM7UUFDVCxhQUFhLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDdkUsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQ2pCLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQ3pDLG1CQUFtQixFQUNuQixvQkFBb0IsRUFDcEIsZ0JBQWdCLEVBQ2hCLFFBQVEsRUFDUix3QkFBd0IsRUFDeEIsdUJBQXVCLEVBQ3ZCLGFBQWEsQ0FBQyxDQUFDLENBQUM7UUFDdEIsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ2hFLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQ3JELE1BQU0sRUFDTixlQUFlLEVBQ2YsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUNmLFdBQVcsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNyRSxTQUFTLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDakIsSUFBSSxNQUFNLEVBQUUsQ0FBQztnQkFDWCxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUMzQixJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQzFCLENBQUM7O2dCQUNJLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDbEMsQ0FBQyxDQUFDLENBQUM7UUFDTCxXQUFXLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDckUsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ2pCLElBQUksTUFBTSxFQUFFLENBQUM7Z0JBQ1gsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDcEIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUM5QixDQUFDOztnQkFFQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztZQUMxQyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxNQUFNLElBQUksV0FBVyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzdFLENBQUMsQ0FBQyxDQUFDO1FBQ0wsV0FBVyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ25FLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUNmLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLElBQUksS0FBSyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUNwRCxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUN6RSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFDeEIsWUFBWSxDQUFDLEdBQUcsQ0FBQyxFQUNqQixTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFRLENBQUMsQ0FBQyxFQUNoRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDTixNQUFNLE9BQU8sR0FBSSxXQUFXLENBQUMsS0FBSyxDQUFDLEtBQWtCLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDO1lBQ3JFLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDM0MsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDbEQsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNOLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQ2xFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUNOLENBQUMsQ0FBQyxJQUFJLFdBQVcsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FDdEQsRUFDRCxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFDeEIsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFDekMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xFLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsV0FBVztZQUN0QyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FDckUsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNsRCxZQUFZO1FBQ1osSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUN0RixJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQy9CLENBQUM7UUFDRixRQUFRLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUN6QixLQUFLLGVBQWU7Z0JBQ2xCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztnQkFDaEMsSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUM7Z0JBQ3RCLE1BQU07WUFDUixLQUFLLGVBQWU7Z0JBQ2xCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDO2dCQUMxQyxJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQztnQkFDdEIsTUFBTTtRQUNWLENBQUM7SUFDSCxDQUFDO0lBQ0QsR0FBRyxDQUFDLFdBQXVCLEVBQUUsUUFBMEIsRUFBRSxLQUFhO1FBQ3BFLElBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO1FBQy9CLElBQUksQ0FBQyxXQUFXLEdBQUcsUUFBUSxDQUFDO1FBQzVCLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO0lBQzVCLENBQUM7SUFDRCxJQUFJO1FBQ0YsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDcEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQztZQUN0RCxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFDdEMsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFO1lBQzdCLFFBQVEsRUFBRSxHQUFHLEVBQUUsQ0FDYixJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUs7U0FDdkIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUNPLE9BQU8sQ0FBQyxLQUFnQixFQUFFLE1BQWUsRUFBRSxHQUFHLFFBQWtCO1FBQ3RFLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDdEIsSUFBSSxDQUFDLE1BQU07Z0JBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQzs7Z0JBQzNELEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDekQsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBQ0QsV0FBVztRQUNULElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ25ILENBQUM7SUFLRCxNQUFNLENBQUMsS0FBd0I7UUFDN0IsTUFBTSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsR0FBRyxLQUFLLENBQUM7UUFFbkMsZ0JBQWdCO1FBQ2hCLElBQUksQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQztZQUN6QixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7WUFDckMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDM0IsQ0FBQztRQUVELHlCQUF5QjtRQUN6QixTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUM7SUFDckIsQ0FBQztJQUNELFNBQVMsQ0FBQyxHQUFXO1FBQ25CLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM5QixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUMzQixDQUFDO0lBQ0Q7OztPQUdHO0lBQ0gsV0FBVyxDQUFDLEVBQVU7UUFDcEIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLEtBQWlCLENBQUM7UUFDNUQsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUVoQyxJQUFJLEtBQUssSUFBSSxDQUFDO1lBQ1osS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDekIsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDM0IsQ0FBQztJQUNEOzs7O09BSUc7SUFDSCxRQUFRLENBQUMsR0FBcUIsRUFBRSxLQUFtQztRQUNqRSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsS0FBaUIsQ0FBQztRQUM1RCxNQUFNLEVBQUUsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQWUsQ0FBQztRQUN4QyxJQUFJLENBQUMsS0FBSztZQUNSLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDOztZQUUvRCxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2pCLEdBQUcsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ2YsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDM0IsQ0FBQztJQUNELFdBQVcsQ0FBQyxLQUFtQztRQUM3QyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBa0IsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUN0RyxDQUFDO0lBQ0QsV0FBVztRQUNULElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUMvQixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDM0IsQ0FBQzs4R0F6UFUsZ0JBQWdCLGtCQTBEUCxZQUFZLDJMQU10QixhQUFhO2tHQWhFWixnQkFBZ0Isd01BQ1UsUUFBUSxtR0FDWixZQUFZLHVQQ2pDL0MscWdhQTZQQSxvaU1Eak9jLENBQUMscUJBQXFCLENBQUM7OzJGQUd4QixnQkFBZ0I7a0JBUDVCLFNBQVM7K0JBQ0UsZ0JBQWdCLGNBR2QsQ0FBQyxxQkFBcUIsQ0FBQzs7MEJBNkR0QixNQUFNOzJCQUFDLFlBQVk7OzBCQUFHLFFBQVE7OzBCQUN4QyxRQUFROzswQkFLUixNQUFNOzJCQUFDLGFBQWE7eUNBL0QwQixjQUFjO3NCQUE5RCxTQUFTO3VCQUFDLGdCQUFnQixFQUFFLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRTtnQkFDRSxVQUFVO3NCQUExRCxTQUFTO3VCQUFDLFlBQVksRUFBRSxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUU7Z0JBQzdCLFdBQVc7c0JBQTVCLEtBQUs7dUJBQUMsU0FBUztnQkFDd0IsT0FBTztzQkFBOUMsU0FBUzt1QkFBQyxTQUFTLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUNZLGlCQUFpQjtzQkFBbEUsU0FBUzt1QkFBQyxtQkFBbUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgT25EZXN0cm95LCBWaWV3Q2hpbGQsIEluamVjdGlvblRva2VuLCBJbmplY3QsIE9wdGlvbmFsLCBUZW1wbGF0ZVJlZiwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBGb3JtQnVpbGRlciwgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBTdWJqZWN0LCBPYnNlcnZhYmxlLCBtZXJnZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIHRha2VVbnRpbCwgZmlsdGVyLCBtYXAsIHN3aXRjaE1hcCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBPdmVybGF5UmVmIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xyXG5pbXBvcnQgeyBNYXRDaGlwSW5wdXQsIE1hdENoaXBJbnB1dEV2ZW50IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY2hpcHMnO1xyXG5pbXBvcnQgeyBDT01NQSwgRU5URVIsIFNFTUlDT0xPTiB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9rZXljb2Rlcyc7XHJcbmltcG9ydCB7IE1hdEF1dG9jb21wbGV0ZVNlbGVjdGVkRXZlbnQgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9hdXRvY29tcGxldGUnO1xyXG5pbXBvcnQgeyBNYXRJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2lucHV0JztcclxuaW1wb3J0IHsgQklaRE9DX0NPTkZJRywgQml6RG9jQ29uZmlnIH0gZnJvbSAnLi4vY29yZS9jb25maWd1cmF0aW9uJztcclxuaW1wb3J0IHsgaXNNb2JpbGUsIGlzU3RyaW5nIH0gZnJvbSAnLi4vY29yZS9mdW5jdGlvbnMnO1xyXG5pbXBvcnQgeyBPcHRpb25zLCBVc2VySW5mbyB9IGZyb20gJy4uL2NvcmUvbW9kZWxzJztcclxuaW1wb3J0IHsgQWNjb3VudFNlcnZpY2UgfSBmcm9tICcuLi9jb3JlL2FjY291bnQuc2VydmljZSc7XHJcbmltcG9ydCB7IFNlc3Npb25TZXJ2aWNlIH0gZnJvbSAnLi4vY29yZS9zZXNzaW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBQcm9tcHRTZXJ2aWNlIH0gZnJvbSAnLi4vY29yZS9wcm9tcHQuc2VydmljZSc7XHJcbmltcG9ydCB7IHZlcnRpY2FsU3dhcEFuaW1hdGlvbiB9IGZyb20gJy4uL2NvcmUvYW5pbWF0aW9ucyc7XHJcblxyXG5leHBvcnQgdHlwZSBPcHRpb25UeXBlID0gJ25vdGlmaWNhdGlvbnMnIHwgJ2VtYWlscycgfCAnb3V0X29mX29mZmljZScgfCAnZ3JhbnRfYWNjZXNzJyB8ICdwcmVmZXJlbmNlcyc7XHJcblxyXG5leHBvcnQgY29uc3QgT1BUSU9OX1BBTkVMID0gbmV3IEluamVjdGlvblRva2VuPE9wdGlvbkRhdGE+KCdvcHRpb25zJyk7XHJcbmV4cG9ydCBpbnRlcmZhY2UgT3B0aW9uRGF0YSB7XHJcbiAgc2VjdGlvbjogT3B0aW9uVHlwZTtcclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdiaXpkb2Mtb3B0aW9ucycsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL29wdGlvbnMuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL29wdGlvbnMuY29tcG9uZW50LnNjc3MnXSxcclxuICBhbmltYXRpb25zOiBbdmVydGljYWxTd2FwQW5pbWF0aW9uXVxyXG59KVxyXG4vKiogb3B0aW9ucyBjb21wb25lbnQqL1xyXG5leHBvcnQgY2xhc3MgT3B0aW9uc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICBAVmlld0NoaWxkKCdzdWJzdGl0dWVJbnB1dCcsIHsgcmVhZDogTWF0SW5wdXQgfSkgc3Vic3RpdHVlSW5wdXQ6IE1hdElucHV0O1xyXG4gIEBWaWV3Q2hpbGQoJ2dyYW50SW5wdXQnLCB7IHJlYWQ6IE1hdENoaXBJbnB1dCB9KSBncmFudElucHV0OiBNYXRDaGlwSW5wdXQ7XHJcbiAgQElucHV0KCdzZWN0aW9uJykgc2VjdGlvbk5hbWU6IE9wdGlvblR5cGU7XHJcbiAgQFZpZXdDaGlsZCgnb29vVG1wbCcsIHsgc3RhdGljOiB0cnVlIH0pIG9vb1RtcGw6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQFZpZXdDaGlsZCgnbm90aWZpY2F0aW9uc1RtcGwnLCB7IHN0YXRpYzogdHJ1ZSB9KSBub3RpZmljYXRpb25zVG1wbDogVGVtcGxhdGVSZWY8YW55PjtcclxuICBzZWN0aW9uSW5kZXggPSAwO1xyXG4gIHNlY3Rpb25UbXBsOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIHNhdmVpbmcgPSBmYWxzZTtcclxuICBwcml2YXRlIF9yZXF1aXJlZFZhbGlkYXRvciA9IChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiB7IFtrZXk6IHN0cmluZ106IGFueSB9IHwgbnVsbCA9PiB7XHJcbiAgICBjb25zdCBwYXJlbnQgPSAoY29udHJvbC5wYXJlbnQgYXMgRm9ybUdyb3VwKTtcclxuICAgIGlmIChwYXJlbnQgJiYgcGFyZW50LmNvbnRyb2xzLmFjdGl2ZS52YWx1ZSAmJiAhY29udHJvbC52YWx1ZSkgcmV0dXJuIHtcclxuICAgICAgcmVxdWlyZWQ6IHRydWVcclxuICAgIH1cclxuICB9XHJcbiAgcmVhZG9ubHkgZ3JhbnRVc2VySWRzID0gdGhpcy5fZmIuY29udHJvbChbXSk7XHJcbiAgcmVhZG9ubHkgb29vSWQgPSB0aGlzLl9mYi5jb250cm9sKG51bGwpO1xyXG4gIHJlYWRvbmx5IGZvcm0gPSB0aGlzLl9mYi5ncm91cCh7XHJcbiAgICBub3RpZmljYXRpb25zOiB0aGlzLl9mYi5ncm91cCh7XHJcbiAgICAgIGFjdGl2ZTogdGhpcy5fZmIuY29udHJvbChmYWxzZSksXHJcbiAgICAgIGxpa2VzOiB0aGlzLl9mYi5jb250cm9sKGZhbHNlKSxcclxuICAgICAgY29tbWVudE15RG9jdW1lbnQ6IHRoaXMuX2ZiLmNvbnRyb2woZmFsc2UpLFxyXG4gICAgICBjb21tZW50QW55RG9jdW1lbnQ6IHRoaXMuX2ZiLmNvbnRyb2woZmFsc2UpLFxyXG4gICAgICB1cGNvbWluZ0V2ZW50czogdGhpcy5fZmIuY29udHJvbChmYWxzZSksXHJcbiAgICAgIHRhZ2dlZDogdGhpcy5fZmIuY29udHJvbChmYWxzZSksXHJcbiAgICAgIGFueURvY3VtZW50U3RhdGVDaGFuZ2U6IHRoaXMuX2ZiLmNvbnRyb2woZmFsc2UpLFxyXG4gICAgICBteURvY3VtZW50U3RhdGVDaGFuZ2U6IHRoaXMuX2ZiLmNvbnRyb2woZmFsc2UpLFxyXG4gICAgICBjdWJlQW5vbWFseTogdGhpcy5fZmIuY29udHJvbChmYWxzZSksXHJcbiAgICAgIHNvdW5kOiB0aGlzLl9mYi5jb250cm9sKGZhbHNlKSxcclxuICAgIH0pLFxyXG4gICAgdGFnczogdGhpcy5fZmIuY29udHJvbChudWxsKSxcclxuICAgIGVtYWlsczogdGhpcy5fZmIuZ3JvdXAoe1xyXG4gICAgICBhY3RpdmU6IHRoaXMuX2ZiLmNvbnRyb2woZmFsc2UpLFxyXG4gICAgICBtYWlsOiB0aGlzLl9mYi5jb250cm9sKGZhbHNlKSxcclxuICAgICAgY2hhdDogdGhpcy5fZmIuY29udHJvbChmYWxzZSksXHJcbiAgICAgIG5vdGlmaWNhdGlvbnM6IHRoaXMuX2ZiLmNvbnRyb2woZmFsc2UpLFxyXG4gICAgICBldmVudHM6IHRoaXMuX2ZiLmNvbnRyb2woZmFsc2UpXHJcbiAgICB9KSxcclxuICAgIG91dE9mT2ZmaWNlOiB0aGlzLl9mYi5ncm91cCh7XHJcbiAgICAgIGFjdGl2ZTogdGhpcy5fZmIuY29udHJvbChmYWxzZSksXHJcbiAgICAgIHN1YnN0aXR1ZUlkOiB0aGlzLl9mYi5jb250cm9sKG51bGwsIHRoaXMuX3JlcXVpcmVkVmFsaWRhdG9yKSxcclxuICAgICAgZnJvbTogdGhpcy5fZmIuY29udHJvbChudWxsKSxcclxuICAgICAgdG86IHRoaXMuX2ZiLmNvbnRyb2wobnVsbClcclxuICAgIH0pLFxyXG4gICAgZ3JhbnRBY2Nlc3M6IHRoaXMuX2ZiLmdyb3VwKHtcclxuICAgICAgYWN0aXZlOiB0aGlzLl9mYi5jb250cm9sKGZhbHNlKSxcclxuICAgICAgdXNlcnM6IHRoaXMuX2ZiLmNvbnRyb2wobnVsbCwgdGhpcy5fcmVxdWlyZWRWYWxpZGF0b3IpXHJcbiAgICB9KVxyXG4gIH0pO1xyXG4gIHN1c2VycyQ6IE9ic2VydmFibGU8VXNlckluZm9bXT47XHJcbiAgZ3VzZXJzJDogT2JzZXJ2YWJsZTxVc2VySW5mb1tdPjtcclxuICB2b2F0aW5nOiBib29sZWFuO1xyXG4gIHJlYWRvbmx5IG9wdGlvbnM6IE9wdGlvbnM7XHJcbiAgcmVhZG9ubHkgdG9kYXkgPSBuZXcgRGF0ZSgpO1xyXG4gIHJlYWRvbmx5IGlzTW9iaWxlID0gaXNNb2JpbGUoKTtcclxuICByZWFkb25seSBzZXBhcmF0b3JLZXlzQ29kZXM6IG51bWJlcltdID0gW0VOVEVSLCBDT01NQSwgU0VNSUNPTE9OXTtcclxuICAvKiogb3B0aW9ucyBjdG9yICovXHJcbiAgcHJpdmF0ZSByZWFkb25seSBfZGVzdHJveSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcbiAgY29uc3RydWN0b3IoQEluamVjdChPUFRJT05fUEFORUwpIEBPcHRpb25hbCgpIG9wdGlvbnM6IE9wdGlvbkRhdGEsXHJcbiAgICBAT3B0aW9uYWwoKSBvdmVybGF5UmVmOiBPdmVybGF5UmVmLFxyXG4gICAgcHJpdmF0ZSBfZmI6IEZvcm1CdWlsZGVyLFxyXG4gICAgcHJpdmF0ZSBfYWNjb3VudHM6IEFjY291bnRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfc2I6IFByb21wdFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9zZXNzaW9uOiBTZXNzaW9uU2VydmljZSxcclxuICAgIEBJbmplY3QoQklaRE9DX0NPTkZJRykgY29uZmlnOiBCaXpEb2NDb25maWcpIHtcclxuICAgIHRoaXMudm9hdGluZyA9ICFjb25maWcuY29tbWVudHMgfHwgY29uZmlnLmNvbW1lbnRzLnZvdGluZyAhPT0gZmFsc2U7XHJcbiAgICB0aGlzLnNlY3Rpb25OYW1lID0gb3B0aW9ucz8uc2VjdGlvbjtcclxuICAgIHRoaXMub3B0aW9ucyA9IHRoaXMuX3Nlc3Npb24ucHJvZmlsZS5vcHRpb25zO1xyXG4gICAgb3ZlcmxheVJlZiAmJiBtZXJnZShvdmVybGF5UmVmLmtleWRvd25FdmVudHMoKS5waXBlKGZpbHRlcihrID0+IGsua2V5ID09PSAnRXNjYXBlJykpLCBvdmVybGF5UmVmLmJhY2tkcm9wQ2xpY2soKSkuXHJcbiAgICAgIHN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5mb3JtLnZhbGlkICYmXHJcbiAgICAgICAgICB0aGlzLnNhdmUoKTtcclxuICAgICAgICBvdmVybGF5UmVmLmRpc3Bvc2UoKTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgY29uc3QgeyBvdXRPZk9mZmljZSwgZ3JhbnRBY2Nlc3MsIG5vdGlmaWNhdGlvbnMsIGVtYWlscyB9ID0gdGhpcy5mb3JtLmNvbnRyb2xzO1xyXG4gICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUodGhpcy5vcHRpb25zLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgICBpZiAoIXRoaXMub3B0aW9ucy5ub3RpZmljYXRpb25zLmFjdGl2ZSlcclxuICAgICAgdGhpcy5fdG9nZ2xlKG5vdGlmaWNhdGlvbnMsIGZhbHNlLCAnbGlrZXMnLFxyXG4gICAgICAgICdjb21tZW50TXlEb2N1bWVudCcsXHJcbiAgICAgICAgJ2NvbW1lbnRBbnlEb2N1bWVudCcsXHJcbiAgICAgICAgJ3VwY29taW5nRXZlbnRzJyxcclxuICAgICAgICAndGFnZ2VkJyxcclxuICAgICAgICAnYW55RG9jdW1lbnRTdGF0ZUNoYW5nZScsXHJcbiAgICAgICAgJ215RG9jdW1lbnRTdGF0ZUNoYW5nZScsXHJcbiAgICAgICAgJ2N1YmVBbm9tYWx5Jyk7XHJcbiAgICBpZiAoIXRoaXMub3B0aW9ucy5lbWFpbHMuYWN0aXZlKVxyXG4gICAgICB0aGlzLl90b2dnbGUoZW1haWxzLCBmYWxzZSwgJ21haWwnLFxyXG4gICAgICAgICdjaGF0JyxcclxuICAgICAgICAnbm90aWZpY2F0aW9ucycsXHJcbiAgICAgICAgJ2V2ZW50cycpO1xyXG4gICAgaWYgKCF0aGlzLm9wdGlvbnMuZ3JhbnRBY2Nlc3MuYWN0aXZlKVxyXG4gICAgICB0aGlzLmdyYW50VXNlcklkcy5kaXNhYmxlKCk7XHJcbiAgICBpZiAoIXRoaXMub3B0aW9ucy5vdXRPZk9mZmljZS5hY3RpdmUpIHtcclxuICAgICAgdGhpcy5vb29JZC5kaXNhYmxlKCk7XHJcbiAgICAgIHRoaXMuX3RvZ2dsZShvdXRPZk9mZmljZSwgZmFsc2UsICdmcm9tJywgJ3RvJyk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICghdGhpcy5vcHRpb25zLm91dE9mT2ZmaWNlLmZyb20pXHJcbiAgICAgIHRoaXMuX3RvZ2dsZShvdXRPZk9mZmljZSwgZmFsc2UsICd0bycpO1xyXG4gICAgLy8gY2hhbmdlXHJcbiAgICBub3RpZmljYXRpb25zLmNvbnRyb2xzLmFjdGl2ZS52YWx1ZUNoYW5nZXMucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSkpLlxyXG4gICAgICBzdWJzY3JpYmUoYWN0aXZlID0+XHJcbiAgICAgICAgdGhpcy5fdG9nZ2xlKG5vdGlmaWNhdGlvbnMsIGFjdGl2ZSwgJ2xpa2VzJyxcclxuICAgICAgICAgICdjb21tZW50TXlEb2N1bWVudCcsXHJcbiAgICAgICAgICAnY29tbWVudEFueURvY3VtZW50JyxcclxuICAgICAgICAgICd1cGNvbWluZ0V2ZW50cycsXHJcbiAgICAgICAgICAndGFnZ2VkJyxcclxuICAgICAgICAgICdhbnlEb2N1bWVudFN0YXRlQ2hhbmdlJyxcclxuICAgICAgICAgICdteURvY3VtZW50U3RhdGVDaGFuZ2UnLFxyXG4gICAgICAgICAgJ2N1YmVBbm9tYWx5JykpO1xyXG4gICAgZW1haWxzLmNvbnRyb2xzLmFjdGl2ZS52YWx1ZUNoYW5nZXMucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSkpLlxyXG4gICAgICBzdWJzY3JpYmUoYWN0aXZlID0+IHRoaXMuX3RvZ2dsZShlbWFpbHMsIGFjdGl2ZSwgJ21haWwnLFxyXG4gICAgICAgICdjaGF0JyxcclxuICAgICAgICAnbm90aWZpY2F0aW9ucycsXHJcbiAgICAgICAgJ2V2ZW50cycpKTtcclxuICAgIGdyYW50QWNjZXNzLmNvbnRyb2xzLmFjdGl2ZS52YWx1ZUNoYW5nZXMucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSkpLlxyXG4gICAgICBzdWJzY3JpYmUoYWN0aXZlID0+IHtcclxuICAgICAgICBpZiAoYWN0aXZlKSB7XHJcbiAgICAgICAgICB0aGlzLmdyYW50VXNlcklkcy5lbmFibGUoKTtcclxuICAgICAgICAgIHRoaXMuZ3JhbnRJbnB1dC5mb2N1cygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHRoaXMuZ3JhbnRVc2VySWRzLmVuYWJsZSgpO1xyXG4gICAgICB9KTtcclxuICAgIG91dE9mT2ZmaWNlLmNvbnRyb2xzLmFjdGl2ZS52YWx1ZUNoYW5nZXMucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSkpLlxyXG4gICAgICBzdWJzY3JpYmUoYWN0aXZlID0+IHtcclxuICAgICAgICBpZiAoYWN0aXZlKSB7XHJcbiAgICAgICAgICB0aGlzLm9vb0lkLmVuYWJsZSgpO1xyXG4gICAgICAgICAgdGhpcy5zdWJzdGl0dWVJbnB1dC5mb2N1cygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICB0aGlzLm9vb0lkLmRpc2FibGUoKTtcclxuICAgICAgICB0aGlzLl90b2dnbGUob3V0T2ZPZmZpY2UsIGFjdGl2ZSwgJ2Zyb20nKTtcclxuICAgICAgICB0aGlzLl90b2dnbGUob3V0T2ZPZmZpY2UsIGFjdGl2ZSAmJiBvdXRPZk9mZmljZS5jb250cm9scy5mcm9tLnZhbHVlLCAndG8nKTtcclxuICAgICAgfSk7XHJcbiAgICBvdXRPZk9mZmljZS5jb250cm9scy5mcm9tLnZhbHVlQ2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95KSkuXHJcbiAgICAgIHN1YnNjcmliZShmcm9tID0+XHJcbiAgICAgICAgdGhpcy5fdG9nZ2xlKG91dE9mT2ZmaWNlLCBmcm9tICE9PSBudWxsLCAndG8nKSk7XHJcbiAgICB0aGlzLmd1c2VycyQgPSB0aGlzLmdyYW50VXNlcklkcy52YWx1ZUNoYW5nZXMucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSksXHJcbiAgICAgIGZpbHRlcih2ID0+IGlzU3RyaW5nKHYpKSxcclxuICAgICAgZGVib3VuY2VUaW1lKDEwMCksXHJcbiAgICAgIHN3aXRjaE1hcCh2ID0+IHRoaXMuX2FjY291bnRzLmZpbmRBbGwodiBhcyBhbnkpKSxcclxuICAgICAgbWFwKHIgPT4ge1xyXG4gICAgICAgIGNvbnN0IGV4Y2x1ZGUgPSAoZ3JhbnRBY2Nlc3MudmFsdWUudXNlcnMgYXMgc3RyaW5nW10pPy5zbGljZSgpIHx8IFtdO1xyXG4gICAgICAgIGV4Y2x1ZGUucHVzaCh0aGlzLl9zZXNzaW9uLnByb2ZpbGUudXNlcklkKTtcclxuICAgICAgICByZXR1cm4gci5maWx0ZXIodSA9PiBleGNsdWRlLmluZGV4T2YodS5pZCkgPCAwKTtcclxuICAgICAgfSkpO1xyXG4gICAgdGhpcy5zdXNlcnMkID0gdGhpcy5vb29JZC52YWx1ZUNoYW5nZXMucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSksXHJcbiAgICAgIHRhcCh2ID0+XHJcbiAgICAgICAgIXYgJiYgb3V0T2ZPZmZpY2UuY29udHJvbHMuc3Vic3RpdHVlSWQuc2V0VmFsdWUobnVsbClcclxuICAgICAgKSxcclxuICAgICAgZmlsdGVyKHYgPT4gaXNTdHJpbmcodikpLFxyXG4gICAgICBzd2l0Y2hNYXAodiA9PiB0aGlzLl9hY2NvdW50cy5maW5kQWxsKHYpKSxcclxuICAgICAgbWFwKHIgPT4gci5maWx0ZXIodSA9PiB1LmlkICE9PSB0aGlzLl9zZXNzaW9uLnByb2ZpbGUudXNlcklkKSkpO1xyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5vdXRPZk9mZmljZS5zdWJzdGl0dWVJZClcclxuICAgICAgdGhpcy5fYWNjb3VudHMuZ2V0KHRoaXMub3B0aW9ucy5vdXRPZk9mZmljZS5zdWJzdGl0dWVJZCkuc3Vic2NyaWJlKHUgPT5cclxuICAgICAgICB0aGlzLm9vb0lkLnNldFZhbHVlKHUsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KSk7XHJcbiAgICAvLyBhdXRvIHNhdmVcclxuICAgIHRoaXMuZm9ybS52YWx1ZUNoYW5nZXMucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSksIGRlYm91bmNlVGltZSg0MDApKS5zdWJzY3JpYmUoKCkgPT5cclxuICAgICAgdGhpcy5mb3JtLnZhbGlkICYmIHRoaXMuc2F2ZSgpXHJcbiAgICApO1xyXG4gICAgc3dpdGNoICh0aGlzLnNlY3Rpb25OYW1lKSB7XHJcbiAgICAgIGNhc2UgJ291dF9vZl9vZmZpY2UnOlxyXG4gICAgICAgIHRoaXMuc2VjdGlvblRtcGwgPSB0aGlzLm9vb1RtcGw7XHJcbiAgICAgICAgdGhpcy5zZWN0aW9uSW5kZXggPSAyO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdub3RpZmljYXRpb25zJzpcclxuICAgICAgICB0aGlzLnNlY3Rpb25UbXBsID0gdGhpcy5ub3RpZmljYXRpb25zVG1wbDtcclxuICAgICAgICB0aGlzLnNlY3Rpb25JbmRleCA9IDA7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG4gIG5hdihzZWN0aW9uTmFtZTogT3B0aW9uVHlwZSwgdGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4sIGluZGV4OiBudW1iZXIpIHtcclxuICAgIHRoaXMuc2VjdGlvbk5hbWUgPSBzZWN0aW9uTmFtZTtcclxuICAgIHRoaXMuc2VjdGlvblRtcGwgPSB0ZW1wbGF0ZTtcclxuICAgIHRoaXMuc2VjdGlvbkluZGV4ID0gaW5kZXg7XHJcbiAgfVxyXG4gIHNhdmUoKSB7XHJcbiAgICB0aGlzLnNhdmVpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy5fc2Vzc2lvbi51cGRhdGUodGhpcy5mb3JtLmdldFJhd1ZhbHVlKCkpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6ICgpID0+IHRoaXMuZm9ybS5tYXJrQXNQcmlzdGluZSgpLFxyXG4gICAgICBlcnJvcjogKCkgPT4gdGhpcy5fc2IuZXJyb3IoKSxcclxuICAgICAgY29tcGxldGU6ICgpID0+XHJcbiAgICAgICAgdGhpcy5zYXZlaW5nID0gZmFsc2VcclxuICAgIH0pO1xyXG4gIH1cclxuICBwcml2YXRlIF90b2dnbGUoZ3JvdXA6IEZvcm1Hcm91cCwgYWN0aXZlOiBib29sZWFuLCAuLi5jb250cm9sczogc3RyaW5nW10pIHtcclxuICAgIGNvbnRyb2xzLmZvckVhY2gobmFtZSA9PiB7XHJcbiAgICAgIGlmICghYWN0aXZlKSBncm91cC5jb250cm9sc1tuYW1lXS5kaXNhYmxlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgICAgZWxzZSBncm91cC5jb250cm9sc1tuYW1lXS5lbmFibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG4gIHRvZ2dsZVNvdW5kKCkge1xyXG4gICAgdGhpcy5mb3JtLmNvbnRyb2xzLm5vdGlmaWNhdGlvbnMuY29udHJvbHMuc291bmQuc2V0VmFsdWUoIXRoaXMuZm9ybS5jb250cm9scy5ub3RpZmljYXRpb25zLmNvbnRyb2xzLnNvdW5kLnZhbHVlKTtcclxuICB9XHJcbiAgZGlzcGxheSA9IChpdGVtOiBVc2VySW5mbykgPT4ge1xyXG4gICAgcmV0dXJuIGl0ZW0gPyBpdGVtLm5hbWUgOiBudWxsO1xyXG4gIH1cclxuXHJcbiAgYWRkVGFnKGV2ZW50OiBNYXRDaGlwSW5wdXRFdmVudCkge1xyXG4gICAgY29uc3QgeyBjaGlwSW5wdXQsIHZhbHVlIH0gPSBldmVudDtcclxuXHJcbiAgICAvLyBBZGQgb3VyIGZydWl0XHJcbiAgICBpZiAoKHZhbHVlIHx8ICcnKS50cmltKCkpIHtcclxuICAgICAgdGhpcy5vcHRpb25zLnRhZ3MucHVzaCh2YWx1ZS50cmltKCkpO1xyXG4gICAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZSh7fSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gUmVzZXQgdGhlIGlucHV0IHZhbHVlIFxyXG4gICAgY2hpcElucHV0Py5jbGVhcigpO1xyXG4gIH1cclxuICByZW1vdmVUYWcodGFnOiBzdHJpbmcpIHtcclxuICAgIHRoaXMub3B0aW9ucy50YWdzLnJlbW92ZSh0YWcpO1xyXG4gICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUoe30pO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBcclxuICAgKiBAcGFyYW0gaWRcclxuICAgKi9cclxuICByZW1vdmVHcmFudChpZDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBjb25zdCB1c2VycyA9IHRoaXMuZm9ybS52YWx1ZS5ncmFudEFjY2Vzcy51c2VycyBhcyBzdHJpbmdbXTtcclxuICAgIGNvbnN0IGluZGV4ID0gdXNlcnMuaW5kZXhPZihpZCk7XHJcblxyXG4gICAgaWYgKGluZGV4ID49IDApXHJcbiAgICAgIHVzZXJzLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZSh7fSk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSBpbnBcclxuICAgKiBAcGFyYW0gZXZlbnRcclxuICAgKi9cclxuICBhZGRHcmFudChpbnA6IEhUTUxJbnB1dEVsZW1lbnQsIGV2ZW50OiBNYXRBdXRvY29tcGxldGVTZWxlY3RlZEV2ZW50KTogdm9pZCB7XHJcbiAgICBjb25zdCB1c2VycyA9IHRoaXMuZm9ybS52YWx1ZS5ncmFudEFjY2Vzcy51c2VycyBhcyBzdHJpbmdbXTtcclxuICAgIGNvbnN0IGlkID0gZXZlbnQub3B0aW9uLnZhbHVlIGFzIHN0cmluZztcclxuICAgIGlmICghdXNlcnMpXHJcbiAgICAgICh0aGlzLmZvcm0uY29udHJvbHMuZ3JhbnRBY2Nlc3MpLmNvbnRyb2xzLnVzZXJzLnNldFZhbHVlKFtpZF0pO1xyXG4gICAgZWxzZVxyXG4gICAgICB1c2Vycy5wdXNoKGlkKTtcclxuICAgIGlucC52YWx1ZSA9ICcnO1xyXG4gICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUoe30pO1xyXG4gIH1cclxuICBvb29TZWxlY3RlZChldmVudDogTWF0QXV0b2NvbXBsZXRlU2VsZWN0ZWRFdmVudCkge1xyXG4gICAgKHRoaXMuZm9ybS5jb250cm9scy5vdXRPZk9mZmljZSkuY29udHJvbHMuc3Vic3RpdHVlSWQuc2V0VmFsdWUoKGV2ZW50Lm9wdGlvbi52YWx1ZSBhcyBVc2VySW5mbykuaWQpO1xyXG4gIH1cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuZm9ybS5kaXJ0eSAmJiB0aGlzLnNhdmUoKTtcclxuICAgIHRoaXMuX2Rlc3Ryb3kubmV4dCgpO1xyXG4gICAgdGhpcy5fZGVzdHJveS5jb21wbGV0ZSgpO1xyXG4gIH1cclxufVxyXG4iLCI8IS0tPGJpemRvdi12LXRhYnMgW2luaXRpYWxOYW1lXT1cInNlY3Rpb25OYW1lXCI+XG4gIDx0YWIgbmFtZT1cIm5vdGlmaWNhdGlvbnNcIiB0aXRsZT1cIk5vdGlmaWNhdGlvbnNcIj5cbiAgICA8bmctdGVtcGxhdGU+XG4gICAgICA8ZGl2IFtmb3JtR3JvdXBdPVwiZm9ybS5jb250cm9scy5ub3RpZmljYXRpb25zXCIgY2xhc3M9XCJjb2x1bW5cIj5cbiAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgZm9ybUNvbnRyb2xOYW1lPVwiYWN0aXZlXCI+e3snQWN0aXZlJyB8IHRyYW5zbGF0ZX19PC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICA8YnIgLz5cbiAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgZm9ybUNvbnRyb2xOYW1lPVwibXlEb2N1bWVudFN0YXRlQ2hhbmdlXCI+e3snTXlTdGF0ZUNoYW5nZScgfCB0cmFuc2xhdGV9fTwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgZm9ybUNvbnRyb2xOYW1lPVwiYW55RG9jdW1lbnRTdGF0ZUNoYW5nZVwiPnt7J0FueVN0YXRlQ2hhbmdlJyB8IHRyYW5zbGF0ZX19PC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBmb3JtQ29udHJvbE5hbWU9XCJjb21tZW50TXlEb2N1bWVudFwiPnt7J0NvbW1lbnRNeURvY3VtZW50JyB8IHRyYW5zbGF0ZX19PC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBmb3JtQ29udHJvbE5hbWU9XCJjb21tZW50QW55RG9jdW1lbnRcIj57eydDb21tZW50QW55RG9jdW1lbnQnIHwgdHJhbnNsYXRlfX08L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGZvcm1Db250cm9sTmFtZT1cImxpa2VzXCIgW3N0eWxlLmRpc3BsYXldPVwidm9hdGluZz8nJzonbm9uZSdcIj57eydMaWtlZENvbW1lbnQnIHwgdHJhbnNsYXRlfX08L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGZvcm1Db250cm9sTmFtZT1cInRhZ2dlZFwiPnt7J1RhZ2dlZEluQ29tbWVudHMnIHwgdHJhbnNsYXRlfX08L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGZvcm1Db250cm9sTmFtZT1cInVwY29taW5nRXZlbnRzXCI+e3snVXBjb21pbmdFdmVudHMnIHwgdHJhbnNsYXRlfX08L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGZvcm1Db250cm9sTmFtZT1cImN1YmVBbm9tYWx5XCI+e3snQ3ViZUFub21hbHknIHwgdHJhbnNsYXRlfX08L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImRpdmlkZXJcIj48L3NwYW4+XG4gICAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJ0b2dnbGVTb3VuZCgpXCIgW2Rpc2FibGVkXT1cIiFmb3JtLnZhbHVlLm5vdGlmaWNhdGlvbnMuYWN0aXZlXCIgW2JpemRvY1Rvb2x0aXBdPVwiKGZvcm0udmFsdWUubm90aWZpY2F0aW9ucy5zb3VuZCA/ICdTb3VuZE9uJzogJ1NvdW5kT2ZmJyl8dHJhbnNsYXRlXCI+PG1hdC1pY29uPnt7Zm9ybS52YWx1ZS5ub3RpZmljYXRpb25zLnNvdW5kID8gJ3ZvbHVtZV91cCcgOiAndm9sdW1lX29mZid9fTwvbWF0LWljb24+PC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC90YWI+XG4gIDx0YWIgbmFtZT1cImVtYWlsc1wiIHRpdGxlPVwiRW1haWxzXCI+XG4gICAgPG5nLXRlbXBsYXRlPlxuICAgICAgPGRpdiBbZm9ybUdyb3VwXT1cImZvcm0uY29udHJvbHMuZW1haWxzXCIgY2xhc3M9XCJjb2x1bW5cIj5cbiAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgZm9ybUNvbnRyb2xOYW1lPVwiYWN0aXZlXCI+e3snQWN0aXZlJyB8IHRyYW5zbGF0ZX19PC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICA8YnIgLz5cbiAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgZm9ybUNvbnRyb2xOYW1lPVwibWFpbFwiPnt7J01haWxzJyB8IHRyYW5zbGF0ZX19PC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBmb3JtQ29udHJvbE5hbWU9XCJjaGF0XCI+e3snQ29udmVyc2F0aW9ucycgfCB0cmFuc2xhdGV9fTwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgZm9ybUNvbnRyb2xOYW1lPVwibm90aWZpY2F0aW9uc1wiPnt7J0VtYWlsTm90aWZpY2F0aW9ucycgfCB0cmFuc2xhdGV9fTwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgZm9ybUNvbnRyb2xOYW1lPVwiZXZlbnRzXCI+e3snQWxhcm1FdmVudHMnIHwgdHJhbnNsYXRlfX08L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L3RhYj5cbiAgPHRhYiBuYW1lPVwib3V0X29mX29mZmljZVwiIHRpdGxlPVwiT3V0T2ZPZmZpY2VcIj5cbiAgICA8bmctdGVtcGxhdGU+XG4gICAgICA8ZGl2IFtmb3JtR3JvdXBdPVwiZm9ybS5jb250cm9scy5vdXRPZk9mZmljZVwiIGNsYXNzPVwiY29sdW1uXCI+XG4gICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGZvcm1Db250cm9sTmFtZT1cImFjdGl2ZVwiPnt7J0FjdGl2ZScgfCB0cmFuc2xhdGV9fTwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICAgICAgPGJyIC8+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImZsZXhcIj5cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgW2Zvcm1Db250cm9sXT1cIm9vb0lkXCIgdHlwZT1cInNlYXJjaFwiIFttYXRBdXRvY29tcGxldGVdPVwic2F1dG9cIiAjc3Vic3RpdHVlSW5wdXRcbiAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidBc3NvY2lhdGUnIHwgdHJhbnNsYXRlXCIgW3JlcXVpcmVkXT1cImZvcm0udmFsdWUub3V0T2ZPZmZpY2UuYWN0aXZlXCIgLz5cbiAgICAgICAgICA8bWF0LWF1dG9jb21wbGV0ZSAjc2F1dG89XCJtYXRBdXRvY29tcGxldGVcIiBbZGlzcGxheVdpdGhdPVwiZGlzcGxheVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9wdGlvblNlbGVjdGVkKT1cIm9vb1NlbGVjdGVkKCRldmVudClcIj5cbiAgICAgICAgICAgIEBmb3IgKHUgb2Ygc3VzZXJzJCB8IGFzeW5jOyB0cmFjayB1KSB7XG4gICAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwidVwiPlxuICAgICAgICAgICAgICA8c3Bhbj57e3UubmFtZX19PC9zcGFuPlxuICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvbWF0LWF1dG9jb21wbGV0ZT5cbiAgICAgICAgICA8bWF0LWhpbnQ+e3snT3V0T2ZPZmZpY2VUaXAnIHwgdHJhbnNsYXRlfX08L21hdC1oaW50PlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPG1hdC1sYWJlbD57eydEYXRlcyd8dHJhbnNsYXRlfX08L21hdC1sYWJlbD5cbiAgICAgICAgICA8bWF0LWRhdGUtcmFuZ2UtaW5wdXQgW3JhbmdlUGlja2VyXT1cImRhdGVzXCI+XG4gICAgICAgICAgICA8aW5wdXQgbWF0U3RhcnREYXRlIGZvcm1Db250cm9sTmFtZT1cImZyb21cIiBbcGxhY2Vob2xkZXJdPVwiJ0Zyb20nfHRyYW5zbGF0ZVwiIFttaW5dPVwidG9kYXlcIj5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRFbmREYXRlIGZvcm1Db250cm9sTmFtZT1cInRvXCIgW3BsYWNlaG9sZGVyXT1cIidUbyd8dHJhbnNsYXRlXCI+XG4gICAgICAgICAgPC9tYXQtZGF0ZS1yYW5nZS1pbnB1dD5cbiAgICAgICAgICA8bWF0LWRhdGVwaWNrZXItdG9nZ2xlIG1hdFN1ZmZpeCBbZm9yXT1cImRhdGVzXCI+PC9tYXQtZGF0ZXBpY2tlci10b2dnbGU+XG4gICAgICAgICAgPG1hdC1kYXRlLXJhbmdlLXBpY2tlciAjZGF0ZXMgW3RvdWNoVWldPVwiaXNNb2JpbGVcIj48L21hdC1kYXRlLXJhbmdlLXBpY2tlcj5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvdGFiPlxuICA8dGFiIG5hbWU9XCJncmFudF9hY2Nlc3NcIiB0aXRsZT1cIkdyYW50QWNjZXNzXCI+XG4gICAgPG5nLXRlbXBsYXRlPlxuICAgICAgPGRpdiBbZm9ybUdyb3VwXT1cImZvcm0uY29udHJvbHMuZ3JhbnRBY2Nlc3NcIiBjbGFzcz1cImNvbHVtblwiPlxuICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBmb3JtQ29udHJvbE5hbWU9XCJhY3RpdmVcIj57eydBY3RpdmUnIHwgdHJhbnNsYXRlfX08L21hdC1zbGlkZS10b2dnbGU+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWNoaXAtZ3JpZCAjZ3JhbnRMaXN0IFthdHRyLmFyaWEtbGFiZWxdPVwiXCIgW2Rpc2FibGVkXT1cIiFmb3JtLnZhbHVlLmdyYW50QWNjZXNzLmFjdGl2ZVwiPlxuICAgICAgICAgICAgQGZvciAodSBvZiBmb3JtLnZhbHVlLmdyYW50QWNjZXNzLnVzZXJzIHx8IFtdOyB0cmFjayB1KSB7XG4gICAgICAgICAgICA8bWF0LWNoaXAtcm93IChyZW1vdmVkKT1cInJlbW92ZUdyYW50KHUpXCI+XG4gICAgICAgICAgICAgIHt7dSB8IHVzZXJOYW1lIHwgYXN5bmN9fVxuICAgICAgICAgICAgICA8bWF0LWljb24gbWF0Q2hpcFJlbW92ZT5jYW5jZWw8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9tYXQtY2hpcC1yb3c+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9tYXQtY2hpcC1ncmlkPlxuICAgICAgICAgIDxpbnB1dCBbZm9ybUNvbnRyb2xdPVwiZ3JhbnRVc2Vyc1wiIHBsYWNlaG9sZGVyPVwie3snVXNlcnMnfCB0cmFuc2xhdGV9fVwiXG4gICAgICAgICAgICAgICAgICNncmFudElucHV0XG4gICAgICAgICAgICAgICAgIFttYXRBdXRvY29tcGxldGVdPVwiZ3JhbnRBdXRvXCJcbiAgICAgICAgICAgICAgICAgW21hdENoaXBJbnB1dEZvcl09XCJncmFudExpc3RcIlxuICAgICAgICAgICAgICAgICBbbWF0Q2hpcElucHV0U2VwYXJhdG9yS2V5Q29kZXNdPVwic2VwYXJhdG9yS2V5c0NvZGVzXCI+XG4gICAgICAgICAgPG1hdC1hdXRvY29tcGxldGUgI2dyYW50QXV0bz1cIm1hdEF1dG9jb21wbGV0ZVwiIChvcHRpb25TZWxlY3RlZCk9XCJhZGRHcmFudChncmFudElucHV0LCAkZXZlbnQpXCI+XG4gICAgICAgICAgICBAZm9yICh1IG9mIGd1c2VycyQgfCBhc3luYzsgdHJhY2sgdSkge1xuICAgICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cInUuaWRcIj5cbiAgICAgICAgICAgICAge3t1Lm5hbWV9fVxuICAgICAgICAgICAgICBAaWYgKHUuZW1haWwpIHtcbiAgICAgICAgICAgICAgPHNwYW4+Jm5ic3A7IC0ge3t1LmVtYWlsfX08L3NwYW4+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L21hdC1hdXRvY29tcGxldGU+XG4gICAgICAgICAgPG1hdC1oaW50Pnt7J0dyYW50VGlwJyB8IHRyYW5zbGF0ZX19PC9tYXQtaGludD5cbiAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvdGFiPlxuICA8dGFiIG5hbWU9XCJwcmVmZXJlbmNlc1wiIHRpdGxlPVwiUHJlZmVyZW5jZXNcIj5cbiAgICA8bmctdGVtcGxhdGU+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sdW1uXCI+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8bWF0LWNoaXAtZ3JpZCAjY2hpcHM+XG4gICAgICAgICAgICBAZm9yIChpdGVtIG9mIGZvcm0udmFsdWUudGFnczsgdHJhY2sgaXRlbSkge1xuICAgICAgICAgICAgPG1hdC1jaGlwLXJvdyBbcmVtb3ZhYmxlXT1cInRydWVcIiAocmVtb3ZlZCk9XCJyZW1vdmVUYWcoaXRlbSlcIj5cbiAgICAgICAgICAgICAge3tpdGVtfX1cbiAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdENoaXBSZW1vdmU+Y2FuY2VsPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvbWF0LWNoaXAtcm93PlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvbWF0LWNoaXAtZ3JpZD5cbiAgICAgICAgICA8aW5wdXQgW3BsYWNlaG9sZGVyXT1cIidUYWdzJ3x0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICBbbWF0Q2hpcElucHV0Rm9yXT1cImNoaXBzXCJcbiAgICAgICAgICAgICAgICAgW21hdENoaXBJbnB1dFNlcGFyYXRvcktleUNvZGVzXT1cInNlcGFyYXRvcktleXNDb2Rlc1wiXG4gICAgICAgICAgICAgICAgIFttYXRDaGlwSW5wdXRBZGRPbkJsdXJdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgIChtYXRDaGlwSW5wdXRUb2tlbkVuZCk9XCJhZGRUYWcoJGV2ZW50KVwiPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC90YWI+XG48L2JpemRvdi12LXRhYnM+LS0+XG48ZGl2IGNsYXNzPVwicm93XCI+XG4gIDxtYXQtbmF2LWxpc3QgY2xhc3M9XCJuYXYtbGlzdFwiPlxuICAgIDxtYXQtbGlzdC1pdGVtIChjbGljayk9XCJuYXYoJ25vdGlmaWNhdGlvbnMnLCBub3RpZmljYXRpb25zVG1wbCwgMClcIiBbY2xhc3MuYWN0aXZlXT1cInNlY3Rpb25OYW1lID09PSAnbm90aWZpY2F0aW9ucydcIj5cbiAgICAgIDxzcGFuIG1hdExpc3RJdGVtVGl0bGU+e3snTm90aWZpY2F0aW9ucycgfCB0cmFuc2xhdGV9fTwvc3Bhbj5cbiAgICA8L21hdC1saXN0LWl0ZW0+XG4gICAgPG1hdC1saXN0LWl0ZW0gKGNsaWNrKT1cIm5hdignZW1haWxzJywgZW1haWxzVG1wbCwgMSlcIiBbY2xhc3MuYWN0aXZlXT1cInNlY3Rpb25OYW1lID09PSAnZW1haWxzJ1wiPlxuICAgICAgPHNwYW4gbWF0TGlzdEl0ZW1UaXRsZT57eydFbWFpbHMnIHwgdHJhbnNsYXRlfX08L3NwYW4+XG4gICAgPC9tYXQtbGlzdC1pdGVtPlxuICAgIDxtYXQtbGlzdC1pdGVtIChjbGljayk9XCJuYXYoJ291dF9vZl9vZmZpY2UnLCBvb29UbXBsLCAyKVwiIFtjbGFzcy5hY3RpdmVdPVwic2VjdGlvbk5hbWUgPT09ICdvdXRfb2Zfb2ZmaWNlJ1wiPlxuICAgICAgPHNwYW4gbWF0TGlzdEl0ZW1UaXRsZT57eydPdXRPZk9mZmljZScgfCB0cmFuc2xhdGV9fTwvc3Bhbj5cbiAgICA8L21hdC1saXN0LWl0ZW0+XG4gICAgPG1hdC1saXN0LWl0ZW0gKGNsaWNrKT1cIm5hdignZ3JhbnRfYWNjZXNzJywgZ3JhbnRBY2Nlc3NUbXBsLCAzKVwiIFtjbGFzcy5hY3RpdmVdPVwic2VjdGlvbk5hbWUgPT09ICdncmFudF9hY2Nlc3MnXCI+XG4gICAgICA8c3BhbiBtYXRMaXN0SXRlbVRpdGxlPnt7J0dyYW50QWNjZXNzJyB8IHRyYW5zbGF0ZX19PC9zcGFuPlxuICAgIDwvbWF0LWxpc3QtaXRlbT5cbiAgICA8bWF0LWxpc3QtaXRlbSAoY2xpY2spPVwibmF2KCdwcmVmZXJlbmNlcycsIHByZWZlcmVuY2VzVG1wbCwgNClcIiBbY2xhc3MuYWN0aXZlXT1cInNlY3Rpb25OYW1lID09PSAncHJlZmVyZW5jZXMnXCI+XG4gICAgICA8c3BhbiBtYXRMaXN0SXRlbVRpdGxlPnt7J1ByZWZlcmVuY2VzJyB8IHRyYW5zbGF0ZX19PC9zcGFuPlxuICAgIDwvbWF0LWxpc3QtaXRlbT5cbiAgPC9tYXQtbmF2LWxpc3Q+XG4gIDxkaXYgY2xhc3M9XCJzZXBhcmF0b3JcIj48L2Rpdj5cbiAgPGZvcm0gYXV0b2NvbXBsZXRlPVwib2ZmXCIgW0B2LXN3YXBlXT1cInNlY3Rpb25JbmRleFwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzZWN0aW9uVG1wbFwiPjwvbmctY29udGFpbmVyPlxuICA8L2Zvcm0+XG48L2Rpdj5cbjwhLS1wcmVmZXJlbmNlcy0tPlxuPG5nLXRlbXBsYXRlICNwcmVmZXJlbmNlc1RtcGw+XG4gIDxkaXYgY2xhc3M9XCJjb2x1bW5cIj5cbiAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICA8bWF0LWNoaXAtZ3JpZCAjY2hpcHM+XG4gICAgICAgIEBmb3IgKGl0ZW0gb2YgZm9ybS52YWx1ZS50YWdzOyB0cmFjayBpdGVtKSB7XG4gICAgICAgIDxtYXQtY2hpcC1yb3cgW3JlbW92YWJsZV09XCJ0cnVlXCIgKHJlbW92ZWQpPVwicmVtb3ZlVGFnKGl0ZW0pXCI+XG4gICAgICAgICAge3tpdGVtfX1cbiAgICAgICAgICA8bWF0LWljb24gbWF0Q2hpcFJlbW92ZT5jYW5jZWw8L21hdC1pY29uPlxuICAgICAgICA8L21hdC1jaGlwLXJvdz5cbiAgICAgICAgfVxuICAgICAgPC9tYXQtY2hpcC1ncmlkPlxuICAgICAgPGlucHV0IFtwbGFjZWhvbGRlcl09XCInVGFncyd8dHJhbnNsYXRlXCJcbiAgICAgICAgICAgICBbbWF0Q2hpcElucHV0Rm9yXT1cImNoaXBzXCJcbiAgICAgICAgICAgICBbbWF0Q2hpcElucHV0U2VwYXJhdG9yS2V5Q29kZXNdPVwic2VwYXJhdG9yS2V5c0NvZGVzXCJcbiAgICAgICAgICAgICBbbWF0Q2hpcElucHV0QWRkT25CbHVyXT1cInRydWVcIlxuICAgICAgICAgICAgIChtYXRDaGlwSW5wdXRUb2tlbkVuZCk9XCJhZGRUYWcoJGV2ZW50KVwiPlxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbjwhLS1ub3RpZmljYXRpb25zLS0+XG48bmctdGVtcGxhdGUgI25vdGlmaWNhdGlvbnNUbXBsPlxuICA8ZGl2IFtmb3JtR3JvdXBdPVwiZm9ybS5jb250cm9scy5ub3RpZmljYXRpb25zXCIgY2xhc3M9XCJjb2x1bW5cIj5cbiAgICA8bWF0LXNsaWRlLXRvZ2dsZSBmb3JtQ29udHJvbE5hbWU9XCJhY3RpdmVcIj57eydBY3RpdmUnIHwgdHJhbnNsYXRlfX08L21hdC1zbGlkZS10b2dnbGU+XG4gICAgPGJyIC8+XG4gICAgPG1hdC1zbGlkZS10b2dnbGUgZm9ybUNvbnRyb2xOYW1lPVwibXlEb2N1bWVudFN0YXRlQ2hhbmdlXCI+e3snTXlTdGF0ZUNoYW5nZScgfCB0cmFuc2xhdGV9fTwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICA8bWF0LXNsaWRlLXRvZ2dsZSBmb3JtQ29udHJvbE5hbWU9XCJhbnlEb2N1bWVudFN0YXRlQ2hhbmdlXCI+e3snQW55U3RhdGVDaGFuZ2UnIHwgdHJhbnNsYXRlfX08L21hdC1zbGlkZS10b2dnbGU+XG4gICAgPG1hdC1zbGlkZS10b2dnbGUgZm9ybUNvbnRyb2xOYW1lPVwiY29tbWVudE15RG9jdW1lbnRcIj57eydDb21tZW50TXlEb2N1bWVudCcgfCB0cmFuc2xhdGV9fTwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICA8bWF0LXNsaWRlLXRvZ2dsZSBmb3JtQ29udHJvbE5hbWU9XCJjb21tZW50QW55RG9jdW1lbnRcIj57eydDb21tZW50QW55RG9jdW1lbnQnIHwgdHJhbnNsYXRlfX08L21hdC1zbGlkZS10b2dnbGU+XG4gICAgPG1hdC1zbGlkZS10b2dnbGUgZm9ybUNvbnRyb2xOYW1lPVwibGlrZXNcIiBbc3R5bGUuZGlzcGxheV09XCJ2b2F0aW5nPycnOidub25lJ1wiPnt7J0xpa2VkQ29tbWVudCcgfCB0cmFuc2xhdGV9fTwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICA8bWF0LXNsaWRlLXRvZ2dsZSBmb3JtQ29udHJvbE5hbWU9XCJ0YWdnZWRcIj57eydUYWdnZWRJbkNvbW1lbnRzJyB8IHRyYW5zbGF0ZX19PC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGZvcm1Db250cm9sTmFtZT1cInVwY29taW5nRXZlbnRzXCI+e3snVXBjb21pbmdFdmVudHMnIHwgdHJhbnNsYXRlfX08L21hdC1zbGlkZS10b2dnbGU+XG4gICAgPG1hdC1zbGlkZS10b2dnbGUgZm9ybUNvbnRyb2xOYW1lPVwiY3ViZUFub21hbHlcIj57eydDdWJlQW5vbWFseScgfCB0cmFuc2xhdGV9fTwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICA8c3BhbiBjbGFzcz1cImRpdmlkZXJcIj48L3NwYW4+XG4gICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cInRvZ2dsZVNvdW5kKClcIiBbZGlzYWJsZWRdPVwiIWZvcm0udmFsdWUubm90aWZpY2F0aW9ucy5hY3RpdmVcIiBbYml6ZG9jVG9vbHRpcF09XCIoZm9ybS52YWx1ZS5ub3RpZmljYXRpb25zLnNvdW5kID8gJ1NvdW5kT24nOiAnU291bmRPZmYnKXx0cmFuc2xhdGVcIj48bWF0LWljb24+e3tmb3JtLnZhbHVlLm5vdGlmaWNhdGlvbnMuc291bmQgPyAndm9sdW1lX3VwJyA6ICd2b2x1bWVfb2ZmJ319PC9tYXQtaWNvbj48L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuPCEtLWVtYWlscy0tPlxuPG5nLXRlbXBsYXRlICNlbWFpbHNUbXBsPlxuICA8ZGl2IFtmb3JtR3JvdXBdPVwiZm9ybS5jb250cm9scy5lbWFpbHNcIiBjbGFzcz1cImNvbHVtblwiPlxuICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGZvcm1Db250cm9sTmFtZT1cImFjdGl2ZVwiPnt7J0FjdGl2ZScgfCB0cmFuc2xhdGV9fTwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICA8YnIgLz5cbiAgICA8bWF0LXNsaWRlLXRvZ2dsZSBmb3JtQ29udHJvbE5hbWU9XCJtYWlsXCI+e3snTWFpbHMnIHwgdHJhbnNsYXRlfX08L21hdC1zbGlkZS10b2dnbGU+XG4gICAgPG1hdC1zbGlkZS10b2dnbGUgZm9ybUNvbnRyb2xOYW1lPVwiY2hhdFwiPnt7J0NvbnZlcnNhdGlvbnMnIHwgdHJhbnNsYXRlfX08L21hdC1zbGlkZS10b2dnbGU+XG4gICAgPG1hdC1zbGlkZS10b2dnbGUgZm9ybUNvbnRyb2xOYW1lPVwibm90aWZpY2F0aW9uc1wiPnt7J0VtYWlsTm90aWZpY2F0aW9ucycgfCB0cmFuc2xhdGV9fTwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICA8bWF0LXNsaWRlLXRvZ2dsZSBmb3JtQ29udHJvbE5hbWU9XCJldmVudHNcIj57eydBbGFybUV2ZW50cycgfCB0cmFuc2xhdGV9fTwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuPCEtLW9vby0tPlxuPG5nLXRlbXBsYXRlICNvb29UbXBsPlxuICA8ZGl2IFtmb3JtR3JvdXBdPVwiZm9ybS5jb250cm9scy5vdXRPZk9mZmljZVwiIGNsYXNzPVwiY29sdW1uXCI+XG4gICAgPG1hdC1zbGlkZS10b2dnbGUgZm9ybUNvbnRyb2xOYW1lPVwiYWN0aXZlXCI+e3snQWN0aXZlJyB8IHRyYW5zbGF0ZX19PC9tYXQtc2xpZGUtdG9nZ2xlPlxuICAgIDxiciAvPlxuICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImZsZXhcIj5cbiAgICAgIDxpbnB1dCBtYXRJbnB1dCBbZm9ybUNvbnRyb2xdPVwib29vSWRcIiB0eXBlPVwic2VhcmNoXCIgW21hdEF1dG9jb21wbGV0ZV09XCJzYXV0b1wiICNzdWJzdGl0dWVJbnB1dFxuICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInQXNzb2NpYXRlJyB8IHRyYW5zbGF0ZVwiIFtyZXF1aXJlZF09XCJmb3JtLnZhbHVlLm91dE9mT2ZmaWNlLmFjdGl2ZVwiIC8+XG4gICAgICA8bWF0LWF1dG9jb21wbGV0ZSAjc2F1dG89XCJtYXRBdXRvY29tcGxldGVcIiBbZGlzcGxheVdpdGhdPVwiZGlzcGxheVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAob3B0aW9uU2VsZWN0ZWQpPVwib29vU2VsZWN0ZWQoJGV2ZW50KVwiPlxuICAgICAgICBAZm9yICh1IG9mIHN1c2VycyQgfCBhc3luYzsgdHJhY2sgdSkge1xuICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwidVwiPlxuICAgICAgICAgIDxzcGFuPnt7dS5uYW1lfX08L3NwYW4+XG4gICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgfVxuICAgICAgPC9tYXQtYXV0b2NvbXBsZXRlPlxuICAgICAgPG1hdC1oaW50Pnt7J091dE9mT2ZmaWNlVGlwJyB8IHRyYW5zbGF0ZX19PC9tYXQtaGludD5cbiAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDxtYXQtZm9ybS1maWVsZD5cbiAgICAgIDxtYXQtbGFiZWw+e3snRGF0ZXMnfHRyYW5zbGF0ZX19PC9tYXQtbGFiZWw+XG4gICAgICA8bWF0LWRhdGUtcmFuZ2UtaW5wdXQgW3JhbmdlUGlja2VyXT1cImRhdGVzXCI+XG4gICAgICAgIDxpbnB1dCBtYXRTdGFydERhdGUgZm9ybUNvbnRyb2xOYW1lPVwiZnJvbVwiIFtwbGFjZWhvbGRlcl09XCInRnJvbSd8dHJhbnNsYXRlXCIgW21pbl09XCJ0b2RheVwiPlxuICAgICAgICA8aW5wdXQgbWF0RW5kRGF0ZSBmb3JtQ29udHJvbE5hbWU9XCJ0b1wiIFtwbGFjZWhvbGRlcl09XCInVG8nfHRyYW5zbGF0ZVwiPlxuICAgICAgPC9tYXQtZGF0ZS1yYW5nZS1pbnB1dD5cbiAgICAgIDxtYXQtZGF0ZXBpY2tlci10b2dnbGUgbWF0U3VmZml4IFtmb3JdPVwiZGF0ZXNcIj48L21hdC1kYXRlcGlja2VyLXRvZ2dsZT5cbiAgICAgIDxtYXQtZGF0ZS1yYW5nZS1waWNrZXIgI2RhdGVzIFt0b3VjaFVpXT1cImlzTW9iaWxlXCI+PC9tYXQtZGF0ZS1yYW5nZS1waWNrZXI+XG4gICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuPCEtLWdyYW50QWNjZXNzLS0+XG48bmctdGVtcGxhdGUgI2dyYW50QWNjZXNzVG1wbD5cbiAgPGRpdiBbZm9ybUdyb3VwXT1cImZvcm0uY29udHJvbHMuZ3JhbnRBY2Nlc3NcIiBjbGFzcz1cImNvbHVtblwiPlxuICAgIDxtYXQtc2xpZGUtdG9nZ2xlIGZvcm1Db250cm9sTmFtZT1cImFjdGl2ZVwiPnt7J0FjdGl2ZScgfCB0cmFuc2xhdGV9fTwvbWF0LXNsaWRlLXRvZ2dsZT5cbiAgICA8bWF0LWZvcm0tZmllbGQ+XG4gICAgICA8bWF0LWxhYmVsPnt7J0Fzc29jaWF0ZXMnfCB0cmFuc2xhdGV9fTwvbWF0LWxhYmVsPlxuICAgICAgPG1hdC1jaGlwLWdyaWQgI2dyYW50TGlzdCBbYXR0ci5hcmlhLWxhYmVsXT1cIlwiIFtkaXNhYmxlZF09XCIhZm9ybS52YWx1ZS5ncmFudEFjY2Vzcy5hY3RpdmVcIj5cbiAgICAgICAgQGZvciAodSBvZiBmb3JtLnZhbHVlLmdyYW50QWNjZXNzLnVzZXJzIHx8IFtdOyB0cmFjayB1KSB7XG4gICAgICAgIDxtYXQtY2hpcC1yb3cgKHJlbW92ZWQpPVwicmVtb3ZlR3JhbnQodSlcIj5cbiAgICAgICAgICB7e3UgfCB1c2VyTmFtZSB8IGFzeW5jfX1cbiAgICAgICAgICA8bWF0LWljb24gbWF0Q2hpcFJlbW92ZT5jYW5jZWw8L21hdC1pY29uPlxuICAgICAgICA8L21hdC1jaGlwLXJvdz5cbiAgICAgICAgfVxuICAgICAgPC9tYXQtY2hpcC1ncmlkPlxuICAgICAgPGlucHV0IFtmb3JtQ29udHJvbF09XCJncmFudFVzZXJJZHNcIlxuICAgICAgICAgICAgICNncmFudElucHV0XG4gICAgICAgICAgICAgW21hdEF1dG9jb21wbGV0ZV09XCJncmFudEF1dG9cIlxuICAgICAgICAgICAgIFttYXRDaGlwSW5wdXRGb3JdPVwiZ3JhbnRMaXN0XCJcbiAgICAgICAgICAgICBbbWF0Q2hpcElucHV0U2VwYXJhdG9yS2V5Q29kZXNdPVwic2VwYXJhdG9yS2V5c0NvZGVzXCI+XG4gICAgICA8bWF0LWF1dG9jb21wbGV0ZSAjZ3JhbnRBdXRvPVwibWF0QXV0b2NvbXBsZXRlXCIgKG9wdGlvblNlbGVjdGVkKT1cImFkZEdyYW50KGdyYW50SW5wdXQsICRldmVudClcIj5cbiAgICAgICAgQGZvciAodSBvZiBndXNlcnMkIHwgYXN5bmM7IHRyYWNrIHUuaWQpIHtcbiAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cInUuaWRcIj5cbiAgICAgICAgICB7e3UubmFtZX19XG4gICAgICAgICAgQGlmICh1LmVtYWlsKSB7XG4gICAgICAgICAgPHNwYW4+Jm5ic3A7IC0ge3t1LmVtYWlsfX08L3NwYW4+XG4gICAgICAgICAgfVxuICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgIH1cbiAgICAgIDwvbWF0LWF1dG9jb21wbGV0ZT5cbiAgICAgIDxtYXQtaGludD57eydHcmFudFRpcCcgfCB0cmFuc2xhdGV9fTwvbWF0LWhpbnQ+XG4gICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19
|