@bizdoc/core 1.14.15 → 1.15.1
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/themes/brown.min.css +3 -3
- package/assets/themes/dark.min.css +3 -3
- package/assets/themes/deep-purple-light-blue.min.css +4 -4
- package/assets/themes/deep-purple-teal.min.css +4 -4
- package/assets/themes/default.min.css +4 -4
- package/assets/themes/green.min.css +3 -3
- package/assets/themes/indigo.min.css +3 -3
- package/esm2020/lib/admin/admin-dismiss.service.mjs +3 -3
- package/esm2020/lib/admin/admin-menu.component.mjs +9 -9
- package/esm2020/lib/admin/core/ace.input.mjs +5 -12
- package/esm2020/lib/admin/core/color-picker.input.mjs +7 -7
- package/esm2020/lib/admin/core/search.input.mjs +9 -16
- package/esm2020/lib/admin/diff/configuration-diff.component.mjs +17 -17
- package/esm2020/lib/admin/document-trace/document-trace.component.mjs +22 -22
- package/esm2020/lib/admin/document-trace/reassign.dialog.mjs +13 -13
- package/esm2020/lib/admin/document-trace/trace-element.component.mjs +12 -12
- package/esm2020/lib/admin/form/form.resolve.service.mjs +3 -3
- package/esm2020/lib/admin/form/form.service.mjs +4 -4
- package/esm2020/lib/admin/form/workflow/node.component.mjs +11 -11
- package/esm2020/lib/admin/form/workflow/role-node.component.mjs +15 -15
- package/esm2020/lib/admin/form/workflow/workflow.component.mjs +12 -12
- package/esm2020/lib/admin/indices/manage-cube-index.component.mjs +13 -13
- package/esm2020/lib/admin/patterns/patterns.component.mjs +19 -19
- package/esm2020/lib/admin/permissions/permissions.component.mjs +12 -12
- package/esm2020/lib/admin/positions/positions-popup.component.mjs +13 -13
- package/esm2020/lib/admin/positions/positions.component.mjs +21 -21
- package/esm2020/lib/admin/profiler/outofoffice.component.mjs +21 -21
- package/esm2020/lib/admin/profiler/profiler.component.mjs +19 -19
- package/esm2020/lib/admin/utility-wrapper.component.mjs +3 -3
- package/esm2020/lib/admin/utility.pane.component.mjs +3 -3
- package/esm2020/lib/app.component.mjs +6 -6
- package/esm2020/lib/bizdoc.module.mjs +11 -13
- package/esm2020/lib/browse/browse-items.component.mjs +25 -25
- package/esm2020/lib/browse/browse.mobile.component.mjs +17 -17
- package/esm2020/lib/browse/browse.pane.component.mjs +17 -17
- package/esm2020/lib/browse/expanded-item/expanded-item.component.mjs +13 -13
- package/esm2020/lib/browse/filter/filter.component.mjs +13 -13
- package/esm2020/lib/browse/folders-menu.component.mjs +12 -12
- package/esm2020/lib/chat/chat-info.mjs +3 -3
- package/esm2020/lib/chat/chat.mobile.component.mjs +7 -7
- package/esm2020/lib/chat/chat.service.mjs +3 -3
- package/esm2020/lib/chat/contacts.component.mjs +23 -23
- package/esm2020/lib/chat/contacts.pane.component.mjs +3 -3
- package/esm2020/lib/chat/conversation.component.mjs +11 -11
- package/esm2020/lib/chat/conversation.pane.component.mjs +6 -12
- package/esm2020/lib/compose/action/action-picker.component.mjs +9 -9
- package/esm2020/lib/compose/action/action.dialog.mjs +7 -7
- package/esm2020/lib/compose/action/action.pane.dialog.exp.mjs +5 -5
- package/esm2020/lib/compose/action/assign-action.component.mjs +12 -12
- package/esm2020/lib/compose/action/moveto-action.component.mjs +10 -10
- package/esm2020/lib/compose/action/return-action.component.mjs +12 -12
- package/esm2020/lib/compose/attachments/attachments.component.mjs +10 -10
- package/esm2020/lib/compose/attachments/preview/attachment-preview.component.mjs +8 -8
- package/esm2020/lib/compose/attachments/progress-button.directive.mjs +3 -3
- package/esm2020/lib/compose/can-deactivate-changes.service.mjs +3 -3
- package/esm2020/lib/compose/comments/comment.component.mjs +15 -15
- package/esm2020/lib/compose/comments/comments.component.mjs +7 -7
- package/esm2020/lib/compose/comments/{Comments.pane.component.mjs → comments.pane.component.mjs} +6 -14
- package/esm2020/lib/compose/comments/edit-comment.component.mjs +3 -3
- package/esm2020/lib/compose/comments/edits.component.mjs +10 -10
- package/esm2020/lib/compose/comments/quick-comment.component.exp.mjs +5 -5
- package/esm2020/lib/compose/comments/votes.component.mjs +10 -10
- package/esm2020/lib/compose/compose-resolve.service.mjs +6 -6
- package/esm2020/lib/compose/compose.mobile.component.mjs +17 -17
- package/esm2020/lib/compose/compose.pane.component.mjs +13 -13
- package/esm2020/lib/compose/copy/copy.dialog.mjs +8 -8
- package/esm2020/lib/compose/dismiss.service.mjs +3 -3
- package/esm2020/lib/compose/document-resolver.service.mjs +3 -3
- package/esm2020/lib/compose/document.component.mjs +3 -3
- package/esm2020/lib/compose/document.mobile.component.mjs +3 -3
- package/esm2020/lib/compose/document.pane.component.mjs +3 -3
- package/esm2020/lib/compose/events/events.component.mjs +8 -8
- package/esm2020/lib/compose/form-selector/form-selector.sheet.mjs +8 -8
- package/esm2020/lib/compose/form.component.mjs +7 -7
- package/esm2020/lib/compose/new-menu.component.mjs +9 -9
- package/esm2020/lib/compose/privilage.directive.mjs +6 -6
- package/esm2020/lib/compose/recipient-resolver.service.mjs +3 -3
- package/esm2020/lib/compose/state.component.mjs +3 -3
- package/esm2020/lib/compose/tag/tags.component.mjs +8 -8
- package/esm2020/lib/compose/trace/flow.component.mjs +63 -82
- package/esm2020/lib/compose/trace/people.component.mjs +5 -5
- package/esm2020/lib/compose/trace/trace.base.mjs +16 -7
- package/esm2020/lib/compose/trace/trace.component.mjs +16 -24
- package/esm2020/lib/compose/trace/trace.pane.component.mjs +3 -3
- package/esm2020/lib/compose/version-compare/version-compare.component.mjs +3 -3
- package/esm2020/lib/compose/version-compare/version-compare.directive.mjs +9 -9
- package/esm2020/lib/compose/version-compare/version.pane.component.mjs +11 -11
- package/esm2020/lib/core/NgComponentOutlet.mjs +3 -3
- package/esm2020/lib/core/account.service.mjs +3 -3
- package/esm2020/lib/core/animated-icon/animated-icon.directive.mjs +3 -3
- package/esm2020/lib/core/avatar/avatar.component.mjs +3 -3
- package/esm2020/lib/core/component-factory-resolver.mjs +3 -3
- package/esm2020/lib/core/controls/address.input.mjs +11 -17
- package/esm2020/lib/core/controls/auto-complete.input.mjs +11 -11
- package/esm2020/lib/core/controls/combination-picker-body.mjs +11 -11
- package/esm2020/lib/core/controls/combination-picker.mjs +3 -3
- package/esm2020/lib/core/controls/combination-pool.mjs +7 -7
- package/esm2020/lib/core/controls/file.input.mjs +10 -10
- package/esm2020/lib/core/controls/select.input.mjs +6 -6
- package/esm2020/lib/core/controls/time-picker.mjs +9 -9
- package/esm2020/lib/core/controls/timespan.input.mjs +8 -35
- package/esm2020/lib/core/datasource.service.mjs +3 -3
- package/esm2020/lib/core/guide/guide.component.mjs +10 -10
- package/esm2020/lib/core/guide/guide.service.mjs +3 -3
- package/esm2020/lib/core/guide/help-tip.component.mjs +11 -23
- package/esm2020/lib/core/http.interceptor.mjs +3 -3
- package/esm2020/lib/core/hub.service.mjs +3 -3
- package/esm2020/lib/core/identity/identity.component.mjs +5 -5
- package/esm2020/lib/core/info/attachment-info.service.mjs +3 -3
- package/esm2020/lib/core/info/document-info.service.mjs +3 -3
- package/esm2020/lib/core/info/location-info.component.mjs +3 -3
- package/esm2020/lib/core/info/map-info.mjs +3 -3
- package/esm2020/lib/core/layout/autocomplete.field.mjs +8 -8
- package/esm2020/lib/core/layout/checkbox.field.mjs +7 -7
- package/esm2020/lib/core/layout/checkbox.mjs +6 -6
- package/esm2020/lib/core/layout/date-range.field.mjs +6 -6
- package/esm2020/lib/core/layout/date.field.mjs +9 -9
- package/esm2020/lib/core/layout/expression.field.mjs +8 -8
- package/esm2020/lib/core/layout/file.field.mjs +11 -9
- package/esm2020/lib/core/layout/html.field.mjs +8 -8
- package/esm2020/lib/core/layout/input.base.mjs +4 -5
- package/esm2020/lib/core/layout/input.field.mjs +8 -8
- package/esm2020/lib/core/layout/layout.component.mjs +3 -3
- package/esm2020/lib/core/layout/numeric.field.mjs +8 -8
- package/esm2020/lib/core/layout/select.field.mjs +10 -10
- package/esm2020/lib/core/layout/switch.field.mjs +7 -7
- package/esm2020/lib/core/layout/textarea.field.mjs +8 -8
- package/esm2020/lib/core/layout/timespan.field.mjs +9 -9
- package/esm2020/lib/core/lottie-animation.mjs +3 -3
- package/esm2020/lib/core/mailbox.service.mjs +3 -3
- package/esm2020/lib/core/models.mjs +1 -1
- package/esm2020/lib/core/none.component.mjs +7 -7
- package/esm2020/lib/core/pipes/action.pipe.mjs +3 -3
- package/esm2020/lib/core/pipes/calendar.pipe.mjs +3 -3
- package/esm2020/lib/core/pipes/date-format.pipe.mjs +3 -3
- package/esm2020/lib/core/pipes/daterange.pipe.mjs +6 -6
- package/esm2020/lib/core/pipes/difference.pipe.mjs +3 -3
- package/esm2020/lib/core/pipes/duration-format.pipe.mjs +3 -3
- package/esm2020/lib/core/pipes/duration.pipe.mjs +3 -3
- package/esm2020/lib/core/pipes/form.pipe.mjs +3 -3
- package/esm2020/lib/core/pipes/join.pipe.mjs +3 -3
- package/esm2020/lib/core/pipes/role.pipe.mjs +3 -3
- package/esm2020/lib/core/pipes/sanitize-html.pipe.mjs +3 -3
- package/esm2020/lib/core/pipes/sort.pipe.mjs +6 -6
- package/esm2020/lib/core/pipes/state.pipe.mjs +3 -3
- package/esm2020/lib/core/pipes/time-ago.pipe.mjs +3 -3
- package/esm2020/lib/core/pipes/translate.pipe.mjs +6 -6
- package/esm2020/lib/core/pipes/type-value.pipe.mjs +3 -3
- package/esm2020/lib/core/pipes/user-name.pipe.mjs +3 -3
- package/esm2020/lib/core/popup/popup.component.mjs +3 -3
- package/esm2020/lib/core/popup/popup.service.mjs +3 -3
- package/esm2020/lib/core/popup/tooltip.directive.mjs +6 -6
- package/esm2020/lib/core/prompt/ask/ask.dialog.mjs +5 -5
- package/esm2020/lib/core/prompt/mask/mask.component.mjs +3 -3
- package/esm2020/lib/core/prompt.service.mjs +3 -3
- package/esm2020/lib/core/router.mjs +6 -6
- package/esm2020/lib/core/save-changes.dialog.mjs +5 -5
- package/esm2020/lib/core/session.service.mjs +3 -3
- package/esm2020/lib/core/slots/router.directive.mjs +3 -3
- package/esm2020/lib/core/slots/router.service.mjs +3 -3
- package/esm2020/lib/core/slots/slots.component.mjs +14 -14
- package/esm2020/lib/core/tagging/documents.component.mjs +7 -7
- package/esm2020/lib/core/tagging/edit-input.component.mjs +10 -10
- package/esm2020/lib/core/tagging/emoji.component.mjs +4 -4
- package/esm2020/lib/core/tagging/tagging-item.directive.mjs +3 -3
- package/esm2020/lib/core/tagging/tagging.component-base.mjs +3 -3
- package/esm2020/lib/core/tagging/tagging.directive.mjs +3 -3
- package/esm2020/lib/core/tagging/tagging.pipe.mjs +3 -3
- package/esm2020/lib/core/tagging/users.component.mjs +7 -7
- package/esm2020/lib/core/translate.service.mjs +3 -3
- package/esm2020/lib/core/window-title.service.mjs +3 -3
- package/esm2020/lib/cube/accum/accum.component.mjs +3 -3
- package/esm2020/lib/cube/chart/chart.component.mjs +3 -3
- package/esm2020/lib/cube/cube-info.service.mjs +3 -3
- package/esm2020/lib/cube/cube-menu.component.mjs +10 -10
- package/esm2020/lib/cube/cube-view.component.mjs +3 -3
- package/esm2020/lib/cube/cube.service.mjs +3 -3
- package/esm2020/lib/cube/explore/document-item.component.mjs +3 -3
- package/esm2020/lib/cube/explore/explore-item.component.mjs +3 -3
- package/esm2020/lib/cube/explore/explore-items.component.mjs +8 -8
- package/esm2020/lib/cube/explore/explore.pane.component.mjs +12 -15
- package/esm2020/lib/cube/explore/item-resolver.service.mjs +6 -6
- package/esm2020/lib/cube/explore/item.pane.component.mjs +3 -3
- package/esm2020/lib/cube/filter/filter-tags.component.exp.mjs +7 -7
- package/esm2020/lib/cube/filter/filter.component.mjs +11 -11
- package/esm2020/lib/cube/grid/grid.component.mjs +3 -3
- package/esm2020/lib/cube/grid/spreadsheet.component.mjs +3 -3
- package/esm2020/lib/cube/matrix/matrix.base.mjs +6 -10
- package/esm2020/lib/cube/matrix/matrix.mobile.component.mjs +20 -16
- package/esm2020/lib/cube/matrix/matrix.pane.component.mjs +20 -16
- package/esm2020/lib/cube/matrix/popup.component.mjs +11 -11
- package/esm2020/lib/cube/matrix/table.component.mjs +4 -4
- package/esm2020/lib/cube/parallel/parallel.component.mjs +5 -5
- package/esm2020/lib/cube/pivot/pivot.component.mjs +6 -11
- package/esm2020/lib/cube/sum/sum.component.mjs +6 -6
- package/esm2020/lib/cube/view-base.mjs +6 -10
- package/esm2020/lib/cube/view.mobile.component.mjs +14 -14
- package/esm2020/lib/cube/view.pane.component.mjs +13 -13
- package/esm2020/lib/dashboard/actions/actions.widget.mjs +3 -3
- package/esm2020/lib/dashboard/cube/accum-cube.widget.mjs +4 -4
- package/esm2020/lib/dashboard/cube/compare.widget.mjs +3 -3
- package/esm2020/lib/dashboard/cube/cube-analysis.base.mjs +3 -3
- package/esm2020/lib/dashboard/cube/cube-analysis.widget.mjs +3 -3
- package/esm2020/lib/dashboard/cube/cube-chart.widget.mjs +4 -4
- package/esm2020/lib/dashboard/cube/documents.widget.mjs +4 -4
- package/esm2020/lib/dashboard/cube/filter/filter.component.mjs +3 -3
- package/esm2020/lib/dashboard/dashboard.component.mjs +11 -11
- package/esm2020/lib/dashboard/dashboard.pane.component.mjs +5 -11
- package/esm2020/lib/dashboard/recents/recents.widget.mjs +9 -9
- package/esm2020/lib/dashboard/score/activity.widget.mjs +3 -3
- package/esm2020/lib/dashboard/score/compare-groups.widget.mjs +3 -3
- package/esm2020/lib/dashboard/score/peers-performance.widget.mjs +3 -3
- package/esm2020/lib/dashboard/score/pending-results.widget.mjs +12 -12
- package/esm2020/lib/dashboard/score/personal-score.widget.mjs +3 -3
- package/esm2020/lib/dashboard/widget-item.component.mjs +3 -3
- package/esm2020/lib/desktop.module.mjs +11 -13
- package/esm2020/lib/home/about/about.dialog.mjs +7 -7
- package/esm2020/lib/home/home-base.component.mjs +3 -3
- package/esm2020/lib/home/home.desktop.component.mjs +19 -19
- package/esm2020/lib/home/home.mobile.component.mjs +16 -16
- package/esm2020/lib/home/notifications/notifications.component.mjs +12 -12
- package/esm2020/lib/home/options/options.component.mjs +11 -11
- package/esm2020/lib/home/outofoffice/outofoffice.component.mjs +8 -8
- package/esm2020/lib/home/search.service.mjs +3 -3
- package/esm2020/lib/home/sign/sign.component.mjs +6 -6
- package/esm2020/lib/home/tools.component.mjs +13 -13
- package/esm2020/lib/impersonate/impersonate.component.mjs +10 -10
- package/esm2020/lib/mobile.module.mjs +11 -13
- package/esm2020/lib/modules/chart.module.mjs +6 -6
- package/esm2020/lib/modules/circular-gauge.module.mjs +5 -5
- package/esm2020/lib/modules/date.adapter.mjs +1 -1
- package/esm2020/lib/modules/datepicker.intl.mjs +4 -4
- package/esm2020/lib/modules/dayjs.module.mjs +5 -5
- package/esm2020/lib/modules/diagram.module.mjs +7 -9
- package/esm2020/lib/modules/gantt.module.mjs +5 -5
- package/esm2020/lib/modules/grid.module.mjs +6 -6
- package/esm2020/lib/modules/material.module.mjs +20 -22
- package/esm2020/lib/modules/paginator.intl.mjs +4 -4
- package/esm2020/lib/modules/pivot.module.mjs +5 -7
- package/esm2020/lib/modules/schedule.module.mjs +6 -6
- package/esm2020/lib/modules/spreadsheet.module.mjs +7 -9
- package/esm2020/lib/modules/stepper.intl.mjs +4 -4
- package/esm2020/lib/modules/texteditor.module.mjs +6 -8
- package/esm2020/lib/notifications/filter.component.mjs +8 -8
- package/esm2020/lib/notifications/notifications-table.component.mjs +16 -16
- package/esm2020/lib/notifications/notifications.mobile.component.mjs +3 -3
- package/esm2020/lib/notifications/notifications.pane.component.mjs +3 -3
- package/esm2020/lib/notifications/notifications.service.mjs +3 -3
- package/esm2020/lib/notifications/types/commented.notification.mjs +5 -5
- package/esm2020/lib/notifications/types/cube-anomaly.notification.mjs +5 -5
- package/esm2020/lib/notifications/types/escalated.notification.mjs +6 -6
- package/esm2020/lib/notifications/types/liked.notification.mjs +5 -5
- package/esm2020/lib/notifications/types/long-running-task.notification.mjs +3 -3
- package/esm2020/lib/notifications/types/notification-base.mjs +3 -3
- package/esm2020/lib/notifications/types/nudge.notification.mjs +6 -6
- package/esm2020/lib/notifications/types/state-changed.notification.mjs +6 -6
- package/esm2020/lib/notifications/types/tagged.notification.mjs +5 -5
- package/esm2020/lib/notifications/types/text.notification.mjs +3 -3
- package/esm2020/lib/notifications/types/upcoming-event.notification.mjs +5 -5
- package/esm2020/lib/options/options.component.mjs +15 -15
- package/esm2020/lib/options/options.service.mjs +3 -3
- package/esm2020/lib/reports/arguments-component.mjs +3 -3
- package/esm2020/lib/reports/cube/documents.component.mjs +3 -3
- package/esm2020/lib/reports/cube/grid-documents.component.mjs +9 -9
- package/esm2020/lib/reports/cube/table-documents.component.mjs +10 -10
- package/esm2020/lib/reports/cube/usage-args.component.mjs +3 -3
- package/esm2020/lib/reports/cube/usage-base.mjs +3 -3
- package/esm2020/lib/reports/cube/usage-chart.component.mjs +4 -4
- package/esm2020/lib/reports/cube/usage-pivot.component.mjs +4 -4
- package/esm2020/lib/reports/cube/usage.component.mjs +3 -3
- package/esm2020/lib/reports/report-viewer.component.mjs +3 -3
- package/esm2020/lib/reports/report.mobile.component.mjs +12 -12
- package/esm2020/lib/reports/report.pane.component.mjs +11 -11
- package/esm2020/lib/reports/reports-menu.component.mjs +9 -9
- package/esm2020/lib/reports/substitution/substitution.component.mjs +12 -12
- package/esm2020/lib/reports/table/table-view.component.mjs +8 -8
- package/esm2020/lib/reports/tasks/tasks.component.mjs +3 -3
- package/esm2020/lib/routes.desktop.mjs +1 -1
- package/esm2020/lib/scheduler/schedule.component.mjs +13 -13
- package/esm2020/lib/scheduler/scheduler.mobile.component.mjs +3 -3
- package/esm2020/lib/scheduler/scheduler.pane.component.mjs +3 -3
- package/esm2020/lib/shared.module.mjs +24 -26
- package/esm2020/lib/system.module.mjs +13 -15
- package/esm2020/lib/views/cube/chart.component.mjs +7 -7
- package/esm2020/lib/views/cube/cube-base.mjs +3 -3
- package/esm2020/lib/views/cube/explore.component.mjs +9 -9
- package/esm2020/lib/views/cube/matrix.component.mjs +12 -12
- package/esm2020/lib/views/cube/parallel.component.mjs +5 -5
- package/esm2020/lib/views/cube/pivot.component.mjs +5 -5
- package/esm2020/lib/views/cube/sum.component.mjs +10 -10
- package/esm2020/lib/views/cube/view.component.mjs +9 -9
- package/esm2020/lib/views/timeline/timeline.component.exp.mjs +3 -3
- package/esm2020/lib/views/view-item.component.mjs +3 -3
- package/esm2020/lib/views/views.component.mjs +5 -5
- package/esm2020/lib/views/views.mobile.component.mjs +3 -3
- package/esm2020/lib/views/views.pane.component.mjs +5 -10
- package/fesm2015/bizdoc-core.mjs +1617 -1745
- package/fesm2015/bizdoc-core.mjs.map +1 -1
- package/fesm2020/bizdoc-core.mjs +1587 -1717
- package/fesm2020/bizdoc-core.mjs.map +1 -1
- package/{bizdoc-core.d.ts → index.d.ts} +0 -0
- package/lib/admin/admin-menu.component.d.ts +1 -1
- package/lib/admin/core/ace.input.d.ts +1 -1
- package/lib/admin/core/color-picker.input.d.ts +1 -1
- package/lib/admin/core/search.input.d.ts +2 -2
- package/lib/admin/diff/configuration-diff.component.d.ts +1 -1
- package/lib/admin/document-trace/document-trace.component.d.ts +5 -2
- package/lib/admin/document-trace/reassign.dialog.d.ts +6 -3
- package/lib/admin/document-trace/trace-element.component.d.ts +1 -1
- package/lib/admin/form/form.service.d.ts +1 -1
- package/lib/admin/form/workflow/node.component.d.ts +5 -2
- package/lib/admin/form/workflow/role-node.component.d.ts +14 -2
- package/lib/admin/form/workflow/workflow.component.d.ts +1 -1
- package/lib/admin/indices/manage-cube-index.component.d.ts +1 -1
- package/lib/admin/patterns/patterns.component.d.ts +7 -3
- package/lib/admin/permissions/permissions.component.d.ts +1 -1
- package/lib/admin/positions/positions-popup.component.d.ts +2 -2
- package/lib/admin/positions/positions.component.d.ts +14 -6
- package/lib/admin/profiler/outofoffice.component.d.ts +26 -7
- package/lib/admin/profiler/profiler.component.d.ts +3 -3
- package/lib/admin/utility-wrapper.component.d.ts +1 -1
- package/lib/admin/utility.pane.component.d.ts +1 -1
- package/lib/app.component.d.ts +2 -2
- package/lib/browse/browse-items.component.d.ts +1 -1
- package/lib/browse/browse.mobile.component.d.ts +1 -1
- package/lib/browse/browse.pane.component.d.ts +2 -2
- package/lib/browse/expanded-item/expanded-item.component.d.ts +1 -1
- package/lib/browse/filter/filter.component.d.ts +10 -3
- package/lib/browse/folders-menu.component.d.ts +1 -1
- package/lib/chat/chat.mobile.component.d.ts +1 -1
- package/lib/chat/contacts.component.d.ts +3 -3
- package/lib/chat/contacts.pane.component.d.ts +1 -1
- package/lib/chat/conversation.component.d.ts +1 -1
- package/lib/chat/conversation.pane.component.d.ts +1 -1
- package/lib/compose/action/action-picker.component.d.ts +1 -1
- package/lib/compose/action/action.dialog.d.ts +1 -1
- package/lib/compose/action/action.pane.dialog.exp.d.ts +1 -1
- package/lib/compose/action/assign-action.component.d.ts +8 -3
- package/lib/compose/action/moveto-action.component.d.ts +6 -3
- package/lib/compose/action/return-action.component.d.ts +5 -2
- package/lib/compose/attachments/attachments.component.d.ts +1 -1
- package/lib/compose/attachments/preview/attachment-preview.component.d.ts +1 -1
- package/lib/compose/attachments/progress-button.directive.d.ts +1 -1
- package/lib/compose/comments/comment.component.d.ts +1 -1
- package/lib/compose/comments/comments.component.d.ts +1 -1
- package/lib/compose/comments/{Comments.pane.component.d.ts → comments.pane.component.d.ts} +1 -1
- package/lib/compose/comments/edit-comment.component.d.ts +1 -1
- package/lib/compose/comments/edits.component.d.ts +1 -1
- package/lib/compose/comments/quick-comment.component.exp.d.ts +1 -1
- package/lib/compose/comments/votes.component.d.ts +1 -1
- package/lib/compose/compose.mobile.component.d.ts +1 -1
- package/lib/compose/compose.pane.component.d.ts +1 -1
- package/lib/compose/copy/copy.dialog.d.ts +2 -2
- package/lib/compose/document.component.d.ts +1 -1
- package/lib/compose/document.mobile.component.d.ts +1 -1
- package/lib/compose/document.pane.component.d.ts +1 -1
- package/lib/compose/events/events.component.d.ts +1 -1
- package/lib/compose/form-selector/form-selector.sheet.d.ts +1 -1
- package/lib/compose/form.component.d.ts +1 -1
- package/lib/compose/new-menu.component.d.ts +2 -2
- package/lib/compose/privilage.directive.d.ts +2 -2
- package/lib/compose/state.component.d.ts +1 -1
- package/lib/compose/tag/tags.component.d.ts +2 -2
- package/lib/compose/trace/flow.component.d.ts +11 -8
- package/lib/compose/trace/people.component.d.ts +1 -1
- package/lib/compose/trace/trace.base.d.ts +8 -3
- package/lib/compose/trace/trace.component.d.ts +5 -8
- package/lib/compose/trace/trace.pane.component.d.ts +1 -1
- package/lib/compose/version-compare/version-compare.component.d.ts +1 -1
- package/lib/compose/version-compare/version-compare.directive.d.ts +3 -3
- package/lib/compose/version-compare/version.pane.component.d.ts +1 -1
- package/lib/core/NgComponentOutlet.d.ts +1 -1
- package/lib/core/animated-icon/animated-icon.directive.d.ts +1 -1
- package/lib/core/avatar/avatar.component.d.ts +1 -1
- package/lib/core/controls/address.input.d.ts +2 -2
- package/lib/core/controls/auto-complete.input.d.ts +2 -2
- package/lib/core/controls/combination-picker-body.d.ts +2 -2
- package/lib/core/controls/combination-picker.d.ts +1 -1
- package/lib/core/controls/combination-pool.d.ts +1 -1
- package/lib/core/controls/file.input.d.ts +1 -1
- package/lib/core/controls/select.input.d.ts +2 -2
- package/lib/core/controls/time-picker.d.ts +2 -2
- package/lib/core/controls/timespan.input.d.ts +6 -2
- package/lib/core/guide/guide.component.d.ts +1 -1
- package/lib/core/guide/help-tip.component.d.ts +1 -1
- package/lib/core/identity/identity.component.d.ts +1 -1
- package/lib/core/info/location-info.component.d.ts +1 -1
- package/lib/core/layout/autocomplete.field.d.ts +2 -2
- package/lib/core/layout/checkbox.d.ts +1 -1
- package/lib/core/layout/checkbox.field.d.ts +2 -2
- package/lib/core/layout/date-range.field.d.ts +5 -2
- package/lib/core/layout/date.field.d.ts +2 -2
- package/lib/core/layout/expression.field.d.ts +2 -2
- package/lib/core/layout/file.field.d.ts +3 -2
- package/lib/core/layout/html.field.d.ts +2 -2
- package/lib/core/layout/input.base.d.ts +2 -2
- package/lib/core/layout/input.field.d.ts +2 -2
- package/lib/core/layout/layout.component.d.ts +1 -1
- package/lib/core/layout/numeric.field.d.ts +2 -2
- package/lib/core/layout/select.field.d.ts +2 -2
- package/lib/core/layout/switch.field.d.ts +2 -2
- package/lib/core/layout/textarea.field.d.ts +2 -2
- package/lib/core/layout/timespan.field.d.ts +2 -2
- package/lib/core/lottie-animation.d.ts +1 -1
- package/lib/core/none.component.d.ts +1 -1
- package/lib/core/pipes/action.pipe.d.ts +1 -1
- package/lib/core/pipes/calendar.pipe.d.ts +1 -1
- package/lib/core/pipes/date-format.pipe.d.ts +1 -1
- package/lib/core/pipes/daterange.pipe.d.ts +2 -2
- package/lib/core/pipes/difference.pipe.d.ts +1 -1
- package/lib/core/pipes/duration-format.pipe.d.ts +1 -1
- package/lib/core/pipes/duration.pipe.d.ts +1 -1
- package/lib/core/pipes/form.pipe.d.ts +1 -1
- package/lib/core/pipes/join.pipe.d.ts +1 -1
- package/lib/core/pipes/role.pipe.d.ts +1 -1
- package/lib/core/pipes/sanitize-html.pipe.d.ts +1 -1
- package/lib/core/pipes/sort.pipe.d.ts +2 -2
- package/lib/core/pipes/state.pipe.d.ts +1 -1
- package/lib/core/pipes/time-ago.pipe.d.ts +1 -1
- package/lib/core/pipes/translate.pipe.d.ts +2 -2
- package/lib/core/pipes/type-value.pipe.d.ts +1 -1
- package/lib/core/pipes/user-name.pipe.d.ts +1 -1
- package/lib/core/popup/popup.component.d.ts +1 -1
- package/lib/core/popup/tooltip.directive.d.ts +2 -2
- package/lib/core/prompt/ask/ask.dialog.d.ts +1 -1
- package/lib/core/prompt/mask/mask.component.d.ts +1 -1
- package/lib/core/save-changes.dialog.d.ts +1 -1
- package/lib/core/slots/router.directive.d.ts +1 -1
- package/lib/core/slots/slots.component.d.ts +2 -2
- package/lib/core/tagging/documents.component.d.ts +1 -1
- package/lib/core/tagging/edit-input.component.d.ts +1 -1
- package/lib/core/tagging/emoji.component.d.ts +1 -1
- package/lib/core/tagging/tagging-item.directive.d.ts +1 -1
- package/lib/core/tagging/tagging.component-base.d.ts +1 -1
- package/lib/core/tagging/tagging.directive.d.ts +1 -1
- package/lib/core/tagging/tagging.pipe.d.ts +1 -1
- package/lib/core/tagging/users.component.d.ts +1 -1
- package/lib/cube/accum/accum.component.d.ts +1 -1
- package/lib/cube/chart/chart.component.d.ts +1 -1
- package/lib/cube/cube-menu.component.d.ts +1 -1
- package/lib/cube/cube-view.component.d.ts +1 -1
- package/lib/cube/explore/document-item.component.d.ts +1 -1
- package/lib/cube/explore/explore-item.component.d.ts +1 -1
- package/lib/cube/explore/explore-items.component.d.ts +1 -1
- package/lib/cube/explore/explore.pane.component.d.ts +1 -1
- package/lib/cube/explore/item.pane.component.d.ts +1 -1
- package/lib/cube/filter/filter-tags.component.exp.d.ts +1 -1
- package/lib/cube/filter/filter.component.d.ts +1 -1
- package/lib/cube/grid/grid.component.d.ts +1 -1
- package/lib/cube/grid/spreadsheet.component.d.ts +1 -1
- package/lib/cube/matrix/matrix.base.d.ts +2 -2
- package/lib/cube/matrix/matrix.mobile.component.d.ts +3 -1
- package/lib/cube/matrix/matrix.pane.component.d.ts +3 -2
- package/lib/cube/matrix/popup.component.d.ts +1 -1
- package/lib/cube/matrix/table.component.d.ts +1 -1
- package/lib/cube/parallel/parallel.component.d.ts +1 -1
- package/lib/cube/pivot/pivot.component.d.ts +1 -1
- package/lib/cube/sum/sum.component.d.ts +1 -1
- package/lib/cube/view-base.d.ts +2 -2
- package/lib/cube/view.mobile.component.d.ts +1 -2
- package/lib/cube/view.pane.component.d.ts +1 -1
- package/lib/dashboard/actions/actions.widget.d.ts +1 -1
- package/lib/dashboard/cube/accum-cube.widget.d.ts +1 -1
- package/lib/dashboard/cube/compare.widget.d.ts +1 -1
- package/lib/dashboard/cube/cube-analysis.base.d.ts +1 -1
- package/lib/dashboard/cube/cube-analysis.widget.d.ts +1 -1
- package/lib/dashboard/cube/cube-chart.widget.d.ts +1 -1
- package/lib/dashboard/cube/documents.widget.d.ts +1 -1
- package/lib/dashboard/cube/filter/filter.component.d.ts +1 -1
- package/lib/dashboard/dashboard.component.d.ts +1 -1
- package/lib/dashboard/dashboard.pane.component.d.ts +1 -1
- package/lib/dashboard/recents/recents.widget.d.ts +2 -2
- package/lib/dashboard/score/activity.widget.d.ts +1 -1
- package/lib/dashboard/score/compare-groups.widget.d.ts +1 -1
- package/lib/dashboard/score/peers-performance.widget.d.ts +1 -1
- package/lib/dashboard/score/pending-results.widget.d.ts +1 -1
- package/lib/dashboard/score/personal-score.widget.d.ts +1 -1
- package/lib/dashboard/widget-item.component.d.ts +1 -1
- package/lib/desktop.module.d.ts +1 -1
- package/lib/home/about/about.dialog.d.ts +1 -1
- package/lib/home/home-base.component.d.ts +1 -1
- package/lib/home/home.desktop.component.d.ts +1 -1
- package/lib/home/home.mobile.component.d.ts +1 -1
- package/lib/home/notifications/notifications.component.d.ts +1 -1
- package/lib/home/options/options.component.d.ts +1 -1
- package/lib/home/outofoffice/outofoffice.component.d.ts +1 -1
- package/lib/home/sign/sign.component.d.ts +1 -1
- package/lib/home/tools.component.d.ts +2 -2
- package/lib/impersonate/impersonate.component.d.ts +2 -2
- package/lib/notifications/filter.component.d.ts +5 -2
- package/lib/notifications/notifications-table.component.d.ts +1 -1
- package/lib/notifications/notifications.mobile.component.d.ts +1 -1
- package/lib/notifications/notifications.pane.component.d.ts +1 -1
- package/lib/notifications/types/commented.notification.d.ts +1 -1
- package/lib/notifications/types/cube-anomaly.notification.d.ts +1 -1
- package/lib/notifications/types/escalated.notification.d.ts +1 -1
- package/lib/notifications/types/liked.notification.d.ts +1 -1
- package/lib/notifications/types/long-running-task.notification.d.ts +1 -1
- package/lib/notifications/types/notification-base.d.ts +1 -1
- package/lib/notifications/types/nudge.notification.d.ts +1 -1
- package/lib/notifications/types/state-changed.notification.d.ts +1 -1
- package/lib/notifications/types/tagged.notification.d.ts +1 -1
- package/lib/notifications/types/text.notification.d.ts +1 -1
- package/lib/notifications/types/upcoming-event.notification.d.ts +1 -1
- package/lib/options/options.component.d.ts +37 -6
- package/lib/reports/arguments-component.d.ts +1 -1
- package/lib/reports/cube/documents.component.d.ts +1 -1
- package/lib/reports/cube/grid-documents.component.d.ts +1 -1
- package/lib/reports/cube/table-documents.component.d.ts +1 -1
- package/lib/reports/cube/usage-args.component.d.ts +1 -1
- package/lib/reports/cube/usage-base.d.ts +1 -1
- package/lib/reports/cube/usage-chart.component.d.ts +1 -1
- package/lib/reports/cube/usage-pivot.component.d.ts +1 -1
- package/lib/reports/cube/usage.component.d.ts +1 -1
- package/lib/reports/report-viewer.component.d.ts +1 -1
- package/lib/reports/report.mobile.component.d.ts +1 -1
- package/lib/reports/report.pane.component.d.ts +1 -1
- package/lib/reports/reports-menu.component.d.ts +1 -1
- package/lib/reports/substitution/substitution.component.d.ts +1 -1
- package/lib/reports/table/table-view.component.d.ts +1 -1
- package/lib/reports/tasks/tasks.component.d.ts +1 -1
- package/lib/scheduler/schedule.component.d.ts +1 -1
- package/lib/scheduler/scheduler.mobile.component.d.ts +1 -1
- package/lib/scheduler/scheduler.pane.component.d.ts +1 -1
- package/lib/views/cube/chart.component.d.ts +1 -1
- package/lib/views/cube/cube-base.d.ts +1 -1
- package/lib/views/cube/explore.component.d.ts +1 -1
- package/lib/views/cube/matrix.component.d.ts +1 -1
- package/lib/views/cube/parallel.component.d.ts +1 -1
- package/lib/views/cube/pivot.component.d.ts +1 -1
- package/lib/views/cube/sum.component.d.ts +1 -2
- package/lib/views/cube/view.component.d.ts +1 -1
- package/lib/views/timeline/timeline.component.exp.d.ts +1 -1
- package/lib/views/view-item.component.d.ts +1 -1
- package/lib/views/views.component.d.ts +1 -1
- package/lib/views/views.mobile.component.d.ts +1 -1
- package/lib/views/views.pane.component.d.ts +1 -1
- package/package.json +28 -28
- package/assets/.gitkeep +0 -0
@@ -12,16 +12,16 @@ import * as i1 from "../session.service";
|
|
12
12
|
import * as i2 from "./router.service";
|
13
13
|
import * as i3 from "../window-title.service";
|
14
14
|
import * as i4 from "../guide/guide.service";
|
15
|
-
import * as i5 from "@angular/
|
16
|
-
import * as i6 from "@angular/
|
17
|
-
import * as i7 from "
|
15
|
+
import * as i5 from "@angular/common";
|
16
|
+
import * as i6 from "@angular/cdk/scrolling";
|
17
|
+
import * as i7 from "@angular/material/core";
|
18
18
|
import * as i8 from "@angular/material/tabs";
|
19
|
-
import * as i9 from "@angular/
|
20
|
-
import * as i10 from "@angular/material/
|
21
|
-
import * as i11 from "
|
22
|
-
import * as i12 from "
|
23
|
-
import * as i13 from "../
|
24
|
-
import * as i14 from "
|
19
|
+
import * as i9 from "@angular/material/badge";
|
20
|
+
import * as i10 from "@angular/material/button";
|
21
|
+
import * as i11 from "@angular/material/icon";
|
22
|
+
import * as i12 from "../NgComponentOutlet";
|
23
|
+
import * as i13 from "../popup/tooltip.directive";
|
24
|
+
import * as i14 from "../../home/tools.component";
|
25
25
|
import * as i15 from "../pipes/translate.pipe";
|
26
26
|
const DEFAULT_ROUTE = ['dashboard'];
|
27
27
|
export class SlotsComponent {
|
@@ -1078,8 +1078,8 @@ export class SlotsComponent {
|
|
1078
1078
|
this._destroy.complete();
|
1079
1079
|
}
|
1080
1080
|
}
|
1081
|
-
SlotsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
1082
|
-
SlotsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "
|
1081
|
+
SlotsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.0", ngImport: i0, type: SlotsComponent, deps: [{ token: PANES_DATA }, { token: i1.SessionService }, { token: i0.ChangeDetectorRef }, { token: i2.PanesRouter }, { token: i3.WindowTitleService }, { token: i4.GuideService }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component });
|
1082
|
+
SlotsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.0", type: SlotsComponent, selector: "bizdoc-panes-outlet", outputs: { dialogChange: "dialogChange" }, host: { listeners: { "document:keydown.escape": "collapse()", "window:resize": "onResize()" } }, viewQueries: [{ propertyName: "_panesContainerRef", first: true, predicate: ["panning"], descendants: true, read: ViewContainerRef, static: true }, { propertyName: "_tabsElement", first: true, predicate: ["tabing"], descendants: true }, { propertyName: "_scrollable", first: true, predicate: CdkScrollable, descendants: true, static: true }], ngImport: i0, template: "<div class=\"panes\">\r\n <div class=\"scroll-arrow\" (click)=\"scrollBy(-400)\" matRipple [matRippleUnbounded]=\"true\" [matRippleCentered]=\"true\" [matRippleColor]=\"accent\"\r\n *ngIf=\"prev\">\r\n <i class=\"material-icons mat-icon-rtl-mirror\">\r\n arrow_back_ios\r\n </i>\r\n </div>\r\n <div class=\"panes-title\" [@title]=\"titleAnimation\">\r\n <h1>\r\n <button mat-icon-button (click)=\"back()\" *ngIf=\"swap\" [bizdocTooltip]=\"'Back'|translate\"><mat-icon class=\"mat-icon-rtl-mirror\">arrow_circle_left</mat-icon></button>\r\n <ng-container *ngFor=\"let p of panes; let first = first\">\r\n <span class=\"breadcrumbs\" *ngIf=\"!first\">\\</span>\r\n {{p.title}}\r\n </ng-container>\r\n <button mat-icon-button (click)=\"guide(panes[0].guide)\" *ngIf=\"panes[0]?.guide\" [bizdocTooltip]=\"'Help'|translate\"><mat-icon>help</mat-icon></button>\r\n </h1>\r\n <span class=\"divider\">\r\n </span>\r\n <bizdoc-quicktools></bizdoc-quicktools>\r\n </div>\r\n <div #panning class=\"panes-container\"\r\n cdkScrollable\r\n @panes\r\n (scroll)=\"enableNavigationArrows($event)\">\r\n <ng-container *ngFor=\"let p of panes; let i = index\">\r\n <div (mouseenter)=\"selectedIndex !== i && !dragging && select(i)\"\r\n (click)=\"select(i)\"\r\n [class.active]=\"selectedIndex === i\" class=\"pane-content\" @pane>\r\n <ngx-component-outlet [type]=\"p.component\" [injector]=\"p.injector\" (create)=\"p._instance = $event\"></ngx-component-outlet>\r\n </div>\r\n <div class=\"pane-separator\" *ngIf=\"i < panes.length - 1\" (mousedown)=\"onPaneResize(p, $event)\"> </div>\r\n </ng-container>\r\n </div>\r\n <div class=\"backdrop\" *ngIf=\"dialog\" (click)=\"closeTab(selectedTabIndex)\"></div>\r\n <div class=\"scroll-arrow forward\"\r\n *ngIf=\"next\">\r\n <i class=\"material-icons mat-icon-rtl-mirror\" matRipple [matRippleUnbounded]=\"true\" [matRippleCentered]=\"true\" [matRippleRadius]=\"30\" [matRippleColor]=\"accent\"\r\n (click)=\"scrollBy(400)\">\r\n arrow_forward_ios\r\n </i>\r\n </div>\r\n</div>\r\n<ng-container *ngIf=\"tabs.length\">\r\n <div class=\"tabs-separator\" (mousedown)=\"onTabResize($event)\"> </div>\r\n <div class=\"mat-elevation-z18 tabs\" [@tabs]=\"tabsAnimation\" (@tabs.done)=\"done()\" #tabing>\r\n <div class=\"row tabs-title\">\r\n <button mat-icon-button (click)=\"tabBack()\" *ngIf=\"swapTab\" [bizdocTooltip]=\"prevGroup || ('Back'|translate)\"><mat-icon class=\"mat-icon-rtl-mirror\">arrow_back</mat-icon></button>\r\n <h2>{{group}}</h2>\r\n <button mat-icon-button (click)=\"expandTab()\" [bizdocTooltip]=\"'Expand'| translate\"><mat-icon inline=\"true\" class=\"mat-icon-rtl-mirror\">open_in_full</mat-icon></button>\r\n <!--*ngIf=\"selectedTabIndex <=< -1 && tabs[selectedTabIndex].expandable\"-->\r\n <span class=\"divider\"></span>\r\n <button mat-icon-button (click)=\"collapse()\" bizdocTooltip=\"Esc\"><mat-icon>close</mat-icon></button>\r\n </div>\r\n <nav mat-tab-nav-bar color=\"accent\" [disablePagination]=\"true\">\r\n <a mat-tab-link *ngFor=\"let t of tabs; let i = index\" class=\"mat-tab-link\"\r\n (click)=\"selectedTabIndex = i\"\r\n [active]=\"selectedTabIndex === i\">\r\n <mat-icon [matBadge]=\"t.badge\" [matBadgeHidden]=\"!t.badge\" matBadgeSize=\"small\" matBadgeColor=\"accent\">{{t.icon}}</mat-icon> \r\n {{t.title}}\r\n <mat-icon *ngIf=\"t.dismissable\" (click)=\"closeTab(i)\" class=\"tool\">close</mat-icon>\r\n <!--inline=\"true\"-->\r\n </a>\r\n </nav>\r\n <div *ngFor=\"let t of tabs; let i = index\" [style.display]=\"selectedTabIndex === i ? '': 'none'\" class=\"tab\" [@tab]=\"selectedTabIndex\">\r\n <ngx-component-outlet [type]=\"t.component\" [injector]=\"t.injector\" (create)=\"t._instance = $event\"></ngx-component-outlet>\r\n </div>\r\n </div>\r\n</ng-container>\r\n", styles: [":host{display:flex;flex-direction:row;flex-grow:1;overflow-x:hidden}.panes{flex-grow:1;position:relative;overflow-x:hidden;display:inline-flex;flex-direction:column;flex-basis:100%}.panes .panes-title{display:flex;flex-direction:row;align-items:center;min-width:max-content}.panes .panes-title h1{font-size:xx-large;margin:12px;font-weight:100}.panes .panes-title h1 button{vertical-align:middle}.panes .panes-title h1 .breadcrumbs{font-size:smaller}.panes .scroll-arrow{position:absolute;cursor:pointer;top:50%;z-index:1000}.panes .scroll-arrow i{font-size:50px;opacity:.2}.panes .scroll-arrow i:hover{opacity:.9}.panes .scroll-arrow:last-child{right:0}.panes .panes-container{overflow-x:auto;height:100%;display:flex;flex-direction:row}.panes .panes-container .pane-content{display:block;border-right:1px solid rgba(0,0,0,.0784313725);height:inherit;border-left-width:1px;border-left-style:double;border-left-color:transparent;flex-grow:1;min-width:420px;overflow-y:auto}.panes .panes-container .pane-content .pane{flex-grow:1}.panes .panes-container .pane-separator{width:8px}.pane-separator,.tabs-separator{cursor:ew-resize;background-repeat:no-repeat;background-position:center;display:table;height:100%;-webkit-user-select:none;user-select:none}.tabs-separator{width:12px}::ng-deep [dir=rtl] .scroll-arrow:last-child{right:unset;left:0}.tabs{display:flex;flex-direction:column;z-index:1;-webkit-flex-grow:0;flex-shrink:1;flex-basis:0}.tabs .tabs-title{align-items:center}.tabs .tabs-title h2{font-size:x-large;margin:9px;font-weight:100}.tabs .tabs-title:hover{opacity:1}.tabs .mat-tab-link .tool{opacity:0}.tabs .mat-tab-link:hover .tool{opacity:1}.tabs .tab{flex-grow:1;overflow-y:auto;overflow-x:hidden;display:flex}\n"], dependencies: [{ kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.CdkScrollable, selector: "[cdk-scrollable], [cdkScrollable]" }, { kind: "directive", type: i7.MatRipple, selector: "[mat-ripple], [matRipple]", inputs: ["matRippleColor", "matRippleUnbounded", "matRippleCentered", "matRippleRadius", "matRippleAnimation", "matRippleDisabled", "matRippleTrigger"], exportAs: ["matRipple"] }, { kind: "component", type: i8.MatTabNav, selector: "[mat-tab-nav-bar]", inputs: ["color"], exportAs: ["matTabNavBar", "matTabNav"] }, { kind: "directive", type: i8.MatTabLink, selector: "[mat-tab-link], [matTabLink]", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matTabLink"] }, { kind: "directive", type: i9.MatBadge, selector: "[matBadge]", inputs: ["matBadgeDisabled", "matBadgeColor", "matBadgeOverlap", "matBadgePosition", "matBadge", "matBadgeDescription", "matBadgeSize", "matBadgeHidden"] }, { kind: "component", type: i10.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i11.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i12.NgxComponentOutlet, selector: "ngx-component-outlet", inputs: ["type", "injector", "ngxComponentOutletContent"], outputs: ["create"] }, { kind: "directive", type: i13.TooltipDirective, selector: "[bizdocTooltip]", inputs: ["bizdocTooltip", "bizdocTooltipTemplate", "bizdocTooltipContext", "bizdocTooltipPosition", "bizdocTooltipDuration", "bizdocTooltipDisabled"] }, { kind: "component", type: i14.QuickToolsComponent, selector: "bizdoc-quicktools" }, { kind: "pipe", type: i15.TranslatePipe, name: "translate" }], animations: [panesAnimation,
|
1083
1083
|
panesTitleAnimation,
|
1084
1084
|
paneAnimation,
|
1085
1085
|
paramAnimation,
|
@@ -1087,7 +1087,7 @@ SlotsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version
|
|
1087
1087
|
tabsAnimation,
|
1088
1088
|
tabAnimation
|
1089
1089
|
] });
|
1090
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
1090
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.0", ngImport: i0, type: SlotsComponent, decorators: [{
|
1091
1091
|
type: Component,
|
1092
1092
|
args: [{ selector: 'bizdoc-panes-outlet', animations: [panesAnimation,
|
1093
1093
|
panesTitleAnimation,
|
@@ -1096,7 +1096,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.9", ngImpor
|
|
1096
1096
|
queryAnimation,
|
1097
1097
|
tabsAnimation,
|
1098
1098
|
tabAnimation
|
1099
|
-
], template: "<div class=\"panes\">\r\n <div class=\"scroll-arrow\" (click)=\"scrollBy(-400)\" matRipple [matRippleUnbounded]=\"true\" [matRippleCentered]=\"true\" [matRippleColor]=\"accent\"\r\n *ngIf=\"prev\">\r\n <i class=\"material-icons mat-icon-rtl-mirror\">\r\n arrow_back_ios\r\n </i>\r\n </div>\r\n <div class=\"panes-title\" [@title]=\"titleAnimation\">\r\n <h1>\r\n <button mat-icon-button (click)=\"back()\" *ngIf=\"swap\" [bizdocTooltip]=\"'Back'|translate\"><mat-icon class=\"mat-icon-rtl-mirror\">arrow_circle_left</mat-icon></button>\r\n <ng-container *ngFor=\"let p of panes; let first = first\">\r\n <span class=\"breadcrumbs\" *ngIf=\"!first\">\\</span>\r\n {{p.title}}\r\n </ng-container>\r\n <button mat-icon-button (click)=\"guide(panes[0].guide)\" *ngIf=\"panes[0]?.guide\" [bizdocTooltip]=\"'Help'|translate\"><mat-icon>help</mat-icon></button>\r\n </h1>\r\n <span class=\"divider\">\r\n </span>\r\n <bizdoc-quicktools></bizdoc-quicktools>\r\n </div>\r\n <div #panning class=\"panes-container\"\r\n cdkScrollable\r\n @panes\r\n (scroll)=\"enableNavigationArrows($event)\">\r\n <ng-container *ngFor=\"let p of panes; let i = index\">\r\n <div (mouseenter)=\"selectedIndex !== i && !dragging && select(i)\"\r\n (click)=\"select(i)\"\r\n [class.active]=\"selectedIndex === i\" class=\"pane-content\" @pane>\r\n <ngx-component-outlet [type]=\"p.component\" [injector]=\"p.injector\" (create)=\"p._instance = $event\"></ngx-component-outlet>\r\n </div>\r\n <div class=\"pane-separator\" *ngIf=\"i < panes.length - 1\" (mousedown)=\"onPaneResize(p, $event)\"> </div>\r\n </ng-container>\r\n </div>\r\n <div class=\"backdrop\" *ngIf=\"dialog\" (click)=\"closeTab(selectedTabIndex)\"></div>\r\n <div class=\"scroll-arrow forward\"\r\n *ngIf=\"next\">\r\n <i class=\"material-icons mat-icon-rtl-mirror\" matRipple [matRippleUnbounded]=\"true\" [matRippleCentered]=\"true\" [matRippleRadius]=\"30\" [matRippleColor]=\"accent\"\r\n (click)=\"scrollBy(400)\">\r\n arrow_forward_ios\r\n </i>\r\n </div>\r\n</div>\r\n<ng-container *ngIf=\"tabs.length\">\r\n <div class=\"tabs-separator\" (mousedown)=\"onTabResize($event)\"> </div>\r\n <div class=\"mat-elevation-z18 tabs\" [@tabs]=\"tabsAnimation\" (@tabs.done)=\"done()\" #tabing>\r\n <div class=\"row tabs-title\">\r\n <button mat-icon-button (click)=\"tabBack()\" *ngIf=\"swapTab\" [bizdocTooltip]=\"prevGroup || ('Back'|translate)\"><mat-icon class=\"mat-icon-rtl-mirror\">arrow_back</mat-icon></button>\r\n <h2>{{group}}</h2>\r\n <button mat-icon-button (click)=\"expandTab()\" [bizdocTooltip]=\"'Expand'| translate\"><mat-icon inline=\"true\" class=\"mat-icon-rtl-mirror\">open_in_full</mat-icon></button>\r\n <!--*ngIf=\"selectedTabIndex <=< -1 && tabs[selectedTabIndex].expandable\"-->\r\n <span class=\"divider\"></span>\r\n <button mat-icon-button (click)=\"collapse()\" bizdocTooltip=\"Esc\"><mat-icon>close</mat-icon></button>\r\n </div>\r\n <nav mat-tab-nav-bar color=\"accent\" [disablePagination]=\"true\">\r\n <a mat-tab-link *ngFor=\"let t of tabs; let i = index\" class=\"mat-tab-link\"\r\n (click)=\"selectedTabIndex = i\"\r\n [active]=\"selectedTabIndex === i\">\r\n <mat-icon [matBadge]=\"t.badge\" [matBadgeHidden]=\"!t.badge\" matBadgeSize=\"small\" matBadgeColor=\"accent\">{{t.icon}}</mat-icon> \r\n {{t.title}}\r\n <mat-icon *ngIf=\"t.dismissable\" (click)=\"closeTab(i)\" class=\"tool\">close</mat-icon>\r\n <!--inline=\"true\"-->\r\n </a>\r\n </nav>\r\n <div *ngFor=\"let t of tabs; let i = index\" [style.display]=\"selectedTabIndex === i ? '': 'none'\" class=\"tab\" [@tab]=\"selectedTabIndex\">\r\n <ngx-component-outlet [type]=\"t.component\" [injector]=\"t.injector\" (create)=\"t._instance = $event\"></ngx-component-outlet>\r\n </div>\r\n </div>\r\n</ng-container>\r\n", styles: [":host{display:flex;flex-direction:row;flex-grow:1;overflow-x:hidden}.panes{flex-grow:1;position:relative;overflow-x:hidden;display:inline-flex;flex-direction:column;flex-basis:100%}.panes .panes-title{display:flex;flex-direction:row;align-items:center;min-width:max-content}.panes .panes-title h1{font-size:xx-large;margin:12px;font-weight:100}.panes .panes-title h1 button{vertical-align:middle}.panes .panes-title h1 .breadcrumbs{font-size:smaller}.panes .scroll-arrow{position:absolute;cursor:pointer;top:50%;z-index:1000}.panes .scroll-arrow i{font-size:50px;opacity:.2}.panes .scroll-arrow i:hover{opacity:.9}.panes .scroll-arrow:last-child{right:0}.panes .panes-container{overflow-x:auto;height:100%;display:flex;flex-direction:row}.panes .panes-container .pane-content{display:block;border-right:1px solid
|
1099
|
+
], template: "<div class=\"panes\">\r\n <div class=\"scroll-arrow\" (click)=\"scrollBy(-400)\" matRipple [matRippleUnbounded]=\"true\" [matRippleCentered]=\"true\" [matRippleColor]=\"accent\"\r\n *ngIf=\"prev\">\r\n <i class=\"material-icons mat-icon-rtl-mirror\">\r\n arrow_back_ios\r\n </i>\r\n </div>\r\n <div class=\"panes-title\" [@title]=\"titleAnimation\">\r\n <h1>\r\n <button mat-icon-button (click)=\"back()\" *ngIf=\"swap\" [bizdocTooltip]=\"'Back'|translate\"><mat-icon class=\"mat-icon-rtl-mirror\">arrow_circle_left</mat-icon></button>\r\n <ng-container *ngFor=\"let p of panes; let first = first\">\r\n <span class=\"breadcrumbs\" *ngIf=\"!first\">\\</span>\r\n {{p.title}}\r\n </ng-container>\r\n <button mat-icon-button (click)=\"guide(panes[0].guide)\" *ngIf=\"panes[0]?.guide\" [bizdocTooltip]=\"'Help'|translate\"><mat-icon>help</mat-icon></button>\r\n </h1>\r\n <span class=\"divider\">\r\n </span>\r\n <bizdoc-quicktools></bizdoc-quicktools>\r\n </div>\r\n <div #panning class=\"panes-container\"\r\n cdkScrollable\r\n @panes\r\n (scroll)=\"enableNavigationArrows($event)\">\r\n <ng-container *ngFor=\"let p of panes; let i = index\">\r\n <div (mouseenter)=\"selectedIndex !== i && !dragging && select(i)\"\r\n (click)=\"select(i)\"\r\n [class.active]=\"selectedIndex === i\" class=\"pane-content\" @pane>\r\n <ngx-component-outlet [type]=\"p.component\" [injector]=\"p.injector\" (create)=\"p._instance = $event\"></ngx-component-outlet>\r\n </div>\r\n <div class=\"pane-separator\" *ngIf=\"i < panes.length - 1\" (mousedown)=\"onPaneResize(p, $event)\"> </div>\r\n </ng-container>\r\n </div>\r\n <div class=\"backdrop\" *ngIf=\"dialog\" (click)=\"closeTab(selectedTabIndex)\"></div>\r\n <div class=\"scroll-arrow forward\"\r\n *ngIf=\"next\">\r\n <i class=\"material-icons mat-icon-rtl-mirror\" matRipple [matRippleUnbounded]=\"true\" [matRippleCentered]=\"true\" [matRippleRadius]=\"30\" [matRippleColor]=\"accent\"\r\n (click)=\"scrollBy(400)\">\r\n arrow_forward_ios\r\n </i>\r\n </div>\r\n</div>\r\n<ng-container *ngIf=\"tabs.length\">\r\n <div class=\"tabs-separator\" (mousedown)=\"onTabResize($event)\"> </div>\r\n <div class=\"mat-elevation-z18 tabs\" [@tabs]=\"tabsAnimation\" (@tabs.done)=\"done()\" #tabing>\r\n <div class=\"row tabs-title\">\r\n <button mat-icon-button (click)=\"tabBack()\" *ngIf=\"swapTab\" [bizdocTooltip]=\"prevGroup || ('Back'|translate)\"><mat-icon class=\"mat-icon-rtl-mirror\">arrow_back</mat-icon></button>\r\n <h2>{{group}}</h2>\r\n <button mat-icon-button (click)=\"expandTab()\" [bizdocTooltip]=\"'Expand'| translate\"><mat-icon inline=\"true\" class=\"mat-icon-rtl-mirror\">open_in_full</mat-icon></button>\r\n <!--*ngIf=\"selectedTabIndex <=< -1 && tabs[selectedTabIndex].expandable\"-->\r\n <span class=\"divider\"></span>\r\n <button mat-icon-button (click)=\"collapse()\" bizdocTooltip=\"Esc\"><mat-icon>close</mat-icon></button>\r\n </div>\r\n <nav mat-tab-nav-bar color=\"accent\" [disablePagination]=\"true\">\r\n <a mat-tab-link *ngFor=\"let t of tabs; let i = index\" class=\"mat-tab-link\"\r\n (click)=\"selectedTabIndex = i\"\r\n [active]=\"selectedTabIndex === i\">\r\n <mat-icon [matBadge]=\"t.badge\" [matBadgeHidden]=\"!t.badge\" matBadgeSize=\"small\" matBadgeColor=\"accent\">{{t.icon}}</mat-icon> \r\n {{t.title}}\r\n <mat-icon *ngIf=\"t.dismissable\" (click)=\"closeTab(i)\" class=\"tool\">close</mat-icon>\r\n <!--inline=\"true\"-->\r\n </a>\r\n </nav>\r\n <div *ngFor=\"let t of tabs; let i = index\" [style.display]=\"selectedTabIndex === i ? '': 'none'\" class=\"tab\" [@tab]=\"selectedTabIndex\">\r\n <ngx-component-outlet [type]=\"t.component\" [injector]=\"t.injector\" (create)=\"t._instance = $event\"></ngx-component-outlet>\r\n </div>\r\n </div>\r\n</ng-container>\r\n", styles: [":host{display:flex;flex-direction:row;flex-grow:1;overflow-x:hidden}.panes{flex-grow:1;position:relative;overflow-x:hidden;display:inline-flex;flex-direction:column;flex-basis:100%}.panes .panes-title{display:flex;flex-direction:row;align-items:center;min-width:max-content}.panes .panes-title h1{font-size:xx-large;margin:12px;font-weight:100}.panes .panes-title h1 button{vertical-align:middle}.panes .panes-title h1 .breadcrumbs{font-size:smaller}.panes .scroll-arrow{position:absolute;cursor:pointer;top:50%;z-index:1000}.panes .scroll-arrow i{font-size:50px;opacity:.2}.panes .scroll-arrow i:hover{opacity:.9}.panes .scroll-arrow:last-child{right:0}.panes .panes-container{overflow-x:auto;height:100%;display:flex;flex-direction:row}.panes .panes-container .pane-content{display:block;border-right:1px solid rgba(0,0,0,.0784313725);height:inherit;border-left-width:1px;border-left-style:double;border-left-color:transparent;flex-grow:1;min-width:420px;overflow-y:auto}.panes .panes-container .pane-content .pane{flex-grow:1}.panes .panes-container .pane-separator{width:8px}.pane-separator,.tabs-separator{cursor:ew-resize;background-repeat:no-repeat;background-position:center;display:table;height:100%;-webkit-user-select:none;user-select:none}.tabs-separator{width:12px}::ng-deep [dir=rtl] .scroll-arrow:last-child{right:unset;left:0}.tabs{display:flex;flex-direction:column;z-index:1;-webkit-flex-grow:0;flex-shrink:1;flex-basis:0}.tabs .tabs-title{align-items:center}.tabs .tabs-title h2{font-size:x-large;margin:9px;font-weight:100}.tabs .tabs-title:hover{opacity:1}.tabs .mat-tab-link .tool{opacity:0}.tabs .mat-tab-link:hover .tool{opacity:1}.tabs .tab{flex-grow:1;overflow-y:auto;overflow-x:hidden;display:flex}\n"] }]
|
1100
1100
|
}], ctorParameters: function () { return [{ type: undefined, decorators: [{
|
1101
1101
|
type: Inject,
|
1102
1102
|
args: [PANES_DATA]
|
@@ -1138,4 +1138,4 @@ function prepareRoutes(routes, treePath) {
|
|
1138
1138
|
}
|
1139
1139
|
return routes;
|
1140
1140
|
}
|
1141
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xvdHMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyaWVzL2NvcmUvc3JjL2xpYi9jb3JlL3Nsb3RzL3Nsb3RzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnJhcmllcy9jb3JlL3NyYy9saWIvY29yZS9zbG90cy9zbG90cy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXFCLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUErQixNQUFNLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFLFlBQVksRUFBYyxNQUFNLGVBQWUsQ0FBQztBQUcvSyxPQUFPLEVBQUUsWUFBWSxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM3QyxPQUFPLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQy9FLE9BQU8sRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUE0QixvQkFBb0IsRUFBRSxlQUFlLEVBQWtCLGVBQWUsRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLGVBQWUsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsa0JBQWtCLEVBQUUsY0FBYyxFQUFFLGdCQUFnQixFQUFZLGdCQUFnQixHQUFHLE1BQU0sWUFBWSxDQUFDO0FBR25VLE9BQU8sRUFBRSxhQUFhLEVBQWlCLE1BQU0sc0JBQXNCLENBQUM7QUFFcEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsbUJBQW1CLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2hKLE9BQU8sRUFBZ0QsY0FBYyxF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RXhDLFNBQVMsYUFBYSxDQUFDLE1BQW1CLEVBQUUsUUFBaUI7SUFDM0QsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDdEMsSUFBSSxLQUFLLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUM7UUFFbEYsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUU7WUFDbkIsUUFBUTtZQUNSLEtBQUssRUFBRSxJQUFJLE1BQU0sQ0FBQyxHQUFHLEdBQUcsUUFBUTtnQkFDOUIsT0FBTyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUM7Z0JBQ25CLE9BQU8sQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUM7U0FDcEUsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxLQUFLLENBQUMsUUFBUSxFQUFFO1lBQ2xCLElBQUksUUFBUSxHQUFHLGFBQWEsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQ3ZELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRTtnQkFDdEMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUU7b0JBQ3pCLE1BQU0sRUFBRSxLQUFLO2lCQUNkLENBQUMsQ0FBQztTQUNOO0tBQ0Y7SUFDRCxPQUFPLE1BQXlCLENBQUM7QUFDbkMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5qZWN0LCBJbmplY3RvciwgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dCwgVmlld0NoaWxkLCBWaWV3Q29udGFpbmVyUmVmLCBIb3N0TGlzdGVuZXIsIEVsZW1lbnRSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgUmlwcGxlQ29uZmlnIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY29yZS9yaXBwbGUnO1xyXG5pbXBvcnQgeyBDZGtEcmFnRHJvcCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9kcmFnLWRyb3AnO1xyXG5pbXBvcnQgeyBpc09ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgdGFrZVVudGlsLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IGlzQXJyYXksIGlzQm9vbGVhbiwgaXNEYXRlLCBpc1Byb21pc2UsIGlzU3RyaW5nIH0gZnJvbSAnLi4vZnVuY3Rpb25zJztcclxuaW1wb3J0IHsgUEFORVNfREFUQSwgUGFuZVJlZiwgUGFuZU9wdGlvbnMsIFBhbmVDb21tYW5kLCBRdWVyeVBhcmFtTmF2aWdhdGlvbiwgUGFyYW1OYXZpZ2F0aW9uLCBOYXZpZ2F0aW9uTW9kZSwgTmF2aWdhdGlvblN0YXJ0LCBOYXZpZ2F0aW9uQ2xvc2UsIE5hdmlnYXRpb25FbmQsIE5hdmlnYXRpb25Gb2N1cywgUEFUSF9DSEFSLCBRVUVSWV9DSEFSLCBBUkdfQ0hBUiwgUEFORV9DSEFSLCBDb2xsYXBzZU5hdmlnYXRpb24sIEJhY2tOYXZpZ2F0aW9uLCBOYXZpZ2F0aW9uRXhwYW5kLCBQYW5lTW9kZSwgTmF2aWdhdGlvblJlc2l6ZSwgfSBmcm9tICcuL3BhbmUtcmVmJztcclxuaW1wb3J0IHsgUGFuZXNSb3V0ZXIgfSBmcm9tICcuL3JvdXRlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU2Vzc2lvblNlcnZpY2UgfSBmcm9tICcuLi9zZXNzaW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDZGtTY3JvbGxhYmxlLCBDb21wb25lbnRUeXBlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xyXG5pbXBvcnQgeyBXaW5kb3dUaXRsZVNlcnZpY2UgfSBmcm9tICcuLi93aW5kb3ctdGl0bGUuc2VydmljZSc7XHJcbmltcG9ydCB7IHBhbmVzQW5pbWF0aW9uLCBwYW5lQW5pbWF0aW9uLCBwYW5lc1RpdGxlQW5pbWF0aW9uLCBwYXJhbUFuaW1hdGlvbiwgcXVlcnlBbmltYXRpb24sIHRhYkFuaW1hdGlvbiwgdGFic0FuaW1hdGlvbiB9IGZyb20gJy4uL2FuaW1hdGlvbnMnO1xyXG5pbXBvcnQgeyBQYW5lUmVzb2x2ZSwgUGFuZVJvdXRlLCBQYXJhbU1hcCwgQ2FuRGlzbWlzcywgREVGQVVMVF9QT0xJQ1ksIE9wZW5Qb2xpY3kgfSBmcm9tICcuLi9jb25maWd1cmF0aW9uJztcclxuaW1wb3J0IHsgR3VpZGVTZXJ2aWNlIH0gZnJvbSAnLi4vZ3VpZGUvZ3VpZGUuc2VydmljZSc7XHJcbmltcG9ydCB7IGRlYm91bmNlVGltZSB9IGZyb20gJ3J4anMnO1xyXG5kZWNsYXJlIGdsb2JhbCB7XHJcbiAgaW50ZXJmYWNlIFdpbmRvdyB7XHJcbiAgICByZW1vdmVBbGxMaXN0ZW5lcnMobmFtZT86IHN0cmluZyk7XHJcbiAgfVxyXG59XHJcblxyXG5jb25zdCBERUZBVUxUX1JPVVRFID0gWydkYXNoYm9hcmQnXTtcclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdiaXpkb2MtcGFuZXMtb3V0bGV0JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vc2xvdHMuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3Nsb3RzLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgYW5pbWF0aW9uczogW3BhbmVzQW5pbWF0aW9uLFxyXG4gICAgcGFuZXNUaXRsZUFuaW1hdGlvbixcclxuICAgIHBhbmVBbmltYXRpb24sXHJcbiAgICBwYXJhbUFuaW1hdGlvbixcclxuICAgIHF1ZXJ5QW5pbWF0aW9uLFxyXG4gICAgdGFic0FuaW1hdGlvbixcclxuICAgIHRhYkFuaW1hdGlvblxyXG4gIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIFNsb3RzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gIEBPdXRwdXQoKSByZWFkb25seSBkaWFsb2dDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XHJcbiAgQFZpZXdDaGlsZCgncGFubmluZycsIHsgcmVhZDogVmlld0NvbnRhaW5lclJlZiwgc3RhdGljOiB0cnVlIH0pIF9wYW5lc0NvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZjtcclxuICBAVmlld0NoaWxkKCd0YWJpbmcnKSBfdGFic0VsZW1lbnQ6IEVsZW1lbnRSZWY7XHJcbiAgQFZpZXdDaGlsZChDZGtTY3JvbGxhYmxlLCB7IHN0YXRpYzogdHJ1ZSB9KSBfc2Nyb2xsYWJsZTogQ2RrU2Nyb2xsYWJsZTtcclxuICB0aXRsZUFuaW1hdGlvbiA9IDA7XHJcbiAgZ3JvdXA6IHN0cmluZztcclxuICBzd2FwPzogbnVtYmVyO1xyXG4gIHN3YXBUYWI/OiBudW1iZXI7XHJcbiAgcHJldkdyb3VwPzogc3RyaW5nO1xyXG5cclxuICByZWFkb25seSBwYW5lczogUGFuZVJlZjxhbnk+W10gPSBbXTtcclxuICByZWFkb25seSB0YWJzOiBQYW5lUmVmPGFueT5bXSA9IFtdO1xyXG4gIHByaXZhdGUgX3NlbGVjdGVkVGFiSW5kZXggPSAtMTtcclxuICBkaWFsb2cgPSBmYWxzZTtcclxuICBwdWJsaWMgZ2V0IHNlbGVjdGVkVGFiSW5kZXgoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0ZWRUYWJJbmRleDtcclxuICB9XHJcbiAgcHVibGljIHNldCBzZWxlY3RlZFRhYkluZGV4KHZhbHVlKSB7XHJcbiAgICB0aGlzLl9zZWxlY3RlZFRhYkluZGV4ID0gdmFsdWU7XHJcbiAgICBpZiAodGhpcy5fc2VsZWN0ZWRUYWJJbmRleCA+IC0xICYmIHRoaXMudGFicy5hdCh0aGlzLl9zZWxlY3RlZFRhYkluZGV4KS5kaWFsb2cpIHtcclxuICAgICAgdGhpcy5kaWFsb2cgPSB0cnVlO1xyXG4gICAgICB0aGlzLmRpYWxvZ0NoYW5nZS5lbWl0KHRydWUpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuZGlhbG9nID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgICB0aGlzLl9zZXRUYWJBbmltYXRpb24oKTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfc2V0VGFiQW5pbWF0aW9uKCkge1xyXG4gICAgdGhpcy50YWJzQW5pbWF0aW9uID0ge1xyXG4gICAgICB2YWx1ZTogdGhpcy5zZWxlY3RlZFRhYkluZGV4LFxyXG4gICAgICBwYXJhbXM6IHtcclxuICAgICAgICBzdGFydFdpZHRoOiB0aGlzLl90YWJzRWxlbWVudCA/IHRoaXMuX3RhYnNFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuY2xpZW50V2lkdGggOiAwXHJcbiAgICAgIH1cclxuICAgIH07XHJcbiAgfVxyXG4gIHNlbGVjdGVkSW5kZXggPSAtMTtcclxuICBuZXh0OiBib29sZWFuO1xyXG4gIHByZXY6IGJvb2xlYW47XHJcbiAgZHJhZ2dpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICB0YWJzQW5pbWF0aW9uOiB7XHJcbiAgICB2YWx1ZTogbnVtYmVyLFxyXG4gICAgcGFyYW1zOiB7XHJcbiAgICAgIHN0YXJ0V2lkdGg6IG51bWJlclxyXG4gICAgfVxyXG4gIH07XHJcbiAgcmVhZG9ubHkgcmlwcGxlOiBSaXBwbGVDb25maWcgPSB7XHJcbiAgICBjb2xvcjogdGhpcy5fc2Vzc2lvbi5nZXRBY2NlbnQoKSxcclxuICAgIGNlbnRlcmVkOiB0cnVlLFxyXG4gICAgcmFkaXVzOiAyNVxyXG4gIH1cclxuICBhY2NlbnQ6IHN0cmluZyA9IHRoaXMuX3Nlc3Npb24uZ2V0QWNjZW50KCk7XHJcbiAgcHJpdmF0ZSBfbmF2aWdhdGlvbkluUHJvY2VzczogYm9vbGVhbjtcclxuICBwcml2YXRlIF9yZXBvc2l0b3J5OiBFeHRlbmRlZFJvdXRlW107XHJcbiAgcHJpdmF0ZSByZWFkb25seSBfcGVuZGluZyA9IFtdIGFzIHN0cmluZ1tdO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgX3J0bCA9IHRoaXMuX3Nlc3Npb24uaW52ZXJzZTtcclxuICBwcml2YXRlIHJlYWRvbmx5IF9yZXNpemluZyA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBfZGVzdHJveSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBASW5qZWN0KFBBTkVTX0RBVEEpIGRhdGE6IEV4dGVuZGVkUm91dGVbXSxcclxuICAgIHByaXZhdGUgX3Nlc3Npb246IFNlc3Npb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfY2Q6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgcHJpdmF0ZSBfcm91dGVyOiBQYW5lc1JvdXRlcixcclxuICAgIHByaXZhdGUgX3RpdGxlOiBXaW5kb3dUaXRsZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9ndWlkZTogR3VpZGVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfaW5qZWN0b3I6IEluamVjdG9yKSB7XHJcbiAgICBfc2Vzc2lvbi50aGVtZUNoYW5nZS5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95KSkuXHJcbiAgICAgIHN1YnNjcmliZSgoKSA9PiB0aGlzLmFjY2VudCA9IF9zZXNzaW9uLmdldEFjY2VudCgpKTtcclxuICAgIF9yb3V0ZXIuX2NvbW0kLlxyXG4gICAgICBzdWJzY3JpYmUoZSA9PiB7XHJcbiAgICAgICAgc3dpdGNoIChlKSB7XHJcbiAgICAgICAgICBjYXNlICdjb2xsYXBzZSc6XHJcbiAgICAgICAgICAgIHRoaXMuY29sbGFwc2UoKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB0aGlzLl9yZXBvc2l0b3J5ID0gcHJlcGFyZVJvdXRlcyhkYXRhKTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5fcm91dGVyLl9uYXZpZ2F0ZSQuXHJcbiAgICAgIHN1YnNjcmliZShhc3luYyBuID0+IHtcclxuICAgICAgICBjb25zdCB7IGNvbW1hbmRzLCBjb21wb25lbnQsIHBhdGhNb2RlLCByZWxhdGl2ZVRvIH0gPSBuO1xyXG4gICAgICAgIGxldCB7XHJcbiAgICAgICAgICBpY29uLFxyXG4gICAgICAgICAgdGl0bGUsXHJcbiAgICAgICAgICBncm91cCxcclxuICAgICAgICAgIGhlbHAsXHJcbiAgICAgICAgICBwb2xpY3ksXHJcbiAgICAgICAgICBxdWVyeVBhcmFtcyxcclxuICAgICAgICAgIHN0YXRlXHJcbiAgICAgICAgfSA9IG47XHJcbiAgICAgICAgbGV0XHJcbiAgICAgICAgICBxdWVyeVN0cmluZzogc3RyaW5nLFxyXG4gICAgICAgICAgcGFyYW1zOiBQYXJhbU1hcCxcclxuICAgICAgICAgIHBhcmVudDogUGFuZVJlZixcclxuICAgICAgICAgIHBhdGg6IHN0cmluZyxcclxuICAgICAgICAgIHJvdXRlOiBFeHRlbmRlZFJvdXRlO1xyXG5cclxuICAgICAgICBpZiAoY29tbWFuZHMgJiYgY29tbWFuZHMubGVuZ3RoKSB7XHJcbiAgICAgICAgICBwYXRoID0gbi5jb21tYW5kcy5qb2luKCcvJyk7XHJcbiAgICAgICAgICBpZiAocGF0aC5pbmRleE9mKFFVRVJZX0NIQVIpID4gLTEpIHtcclxuICAgICAgICAgICAgY29uc3Qgc2VncyA9IHBhdGguc3BsaXQoUVVFUllfQ0hBUik7XHJcbiAgICAgICAgICAgIHF1ZXJ5U3RyaW5nID0gc2Vnc1sxXTtcclxuICAgICAgICAgICAgcXVlcnlQYXJhbXMgPSB0aGlzLl9wYXJzZVF1ZXJ5UGFyYW1zKHF1ZXJ5U3RyaW5nIHx8ICcnKTtcclxuICAgICAgICAgICAgcGF0aCA9IHNlZ3NbMF07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcXVlcnlQYXJhbXMgPSBuLnF1ZXJ5UGFyYW1zIHx8IHt9O1xyXG4gICAgICAgICAgICBxdWVyeVN0cmluZyA9IHRoaXMuX3F1ZXJ5U3RyaW5nKHF1ZXJ5UGFyYW1zKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChwYXRoTW9kZSA9PT0gJ3JlbGF0aXZlJyB8fCBwYXRoLnN0YXJ0c1dpdGgoJy4uLycpKSB7XHJcbiAgICAgICAgICAgIHBhcmVudCA9IHJlbGF0aXZlVG8gfHwgdGhpcy5wYW5lc1t0aGlzLnNlbGVjdGVkSW5kZXhdO1xyXG4gICAgICAgICAgICBsZXQgcGFyZW50cGF0aCA9IHBhcmVudC5wYXRoO1xyXG4gICAgICAgICAgICB3aGlsZSAocGF0aC5zdGFydHNXaXRoKCcuLi8nKSkge1xyXG4gICAgICAgICAgICAgIHBhcmVudHBhdGggPSBwYXJlbnRwYXRoLnN1YnN0cigwLCBwYXJlbnRwYXRoLmxhc3RJbmRleE9mKCcvJykpO1xyXG4gICAgICAgICAgICAgIHBhdGggPSBwYXRoLnN1YnN0cigzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBwYXRoID0gcGFyZW50cGF0aCArICcvJyArIHBhdGg7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByb3V0ZSA9IHRoaXMuX21hdGNoKHBhdGgpO1xyXG5cclxuICAgICAgICAgIGlmICghcm91dGUpXHJcbiAgICAgICAgICAgIHRocm93IGBubyBtYXRjaCAke3BhdGh9YDtcclxuICAgICAgICAgIHBhcmFtcyA9IHRoaXMuX3BhcmFtcyhyb3V0ZSwgcGF0aCk7XHJcbiAgICAgICAgICBpZiAoIXBvbGljeSkgcG9saWN5ID0gcm91dGUucG9saWN5IHx8IERFRkFVTFRfUE9MSUNZO1xyXG4gICAgICAgICAgZWxzZSBpZiAocm91dGUucG9saWN5KSBwb2xpY3kgfD0gcm91dGUucG9saWN5O1xyXG4gICAgICAgICAgaWYgKCFpY29uKSBpY29uID0gcm91dGUuaWNvbjtcclxuICAgICAgICAgIGlmICghaGVscCkgaGVscCA9IHJvdXRlLmhlbHA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgaWYgKCFwb2xpY3kpIHBvbGljeSA9IERFRkFVTFRfUE9MSUNZO1xyXG4gICAgICAgICAgaWYgKCFxdWVyeVBhcmFtcykgcXVlcnlQYXJhbXMgPSB7fTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICgocG9saWN5ICYgT3BlblBvbGljeS5DbGVhcikgPT0gT3BlblBvbGljeS5DbGVhcikge1xyXG4gICAgICAgICAgdGhpcy5fY2xlYXJQZW5kaW5nKCk7XHJcbiAgICAgICAgICBhd2FpdCB0aGlzLl9jbGVhclRhYnMoKTtcclxuICAgICAgICAgIGlmICghKHBvbGljeSAmIE9wZW5Qb2xpY3kuVGFiKSlcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5fY2xlYXJQYW5lcygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoY29tbWFuZHMpIHtcclxuICAgICAgICAgIGxldCBpID0gMDtcclxuICAgICAgICAgIGlmICgocG9saWN5ICYgT3BlblBvbGljeS5UYWIpID09IE9wZW5Qb2xpY3kuVGFiKVxyXG4gICAgICAgICAgICB3aGlsZSAoaSA8IHRoaXMudGFicy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICBsZXQgdGFiID0gdGhpcy50YWJzW2ldO1xyXG4gICAgICAgICAgICAgIGlmIChwYXRoID09PSB0YWIucGF0aCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHF1ZXJ5U3RyaW5nID09PSB0YWIucXVlcnlTdHJpbmcpIHtcclxuICAgICAgICAgICAgICAgICAgaWYgKChwb2xpY3kgJiBPcGVuUG9saWN5LlRvZ2dsZSkgPT0gT3BlblBvbGljeS5Ub2dnbGUpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRhYnMuc3BsaWNlKGksIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUYWJJbmRleCA9IHRoaXMudGFicy5sZW5ndGggLSAxO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHN0YXRlICYmIHRhYi5fZGF0YSQubmV4dChzdGF0ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ncm91cCA9IHRhYi5ncm91cDtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkVGFiSW5kZXggPSBpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NkLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5fbmF2UXVlcnlQYXJhbXModGFiLCBxdWVyeVBhcmFtcywgc3RhdGUpO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLmdyb3VwID0gdGFiLmdyb3VwO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkVGFiSW5kZXggPSBpO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLl9jZC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuX3N5bmNCcm93c2VySGlzdG9yeSgpO1xyXG4gICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGVsc2UgaWYgKHRhYi5yb3V0ZSA9PT0gcm91dGUpIHtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX25hdlBhcmFtcyhwYXRoLCB0YWIsIHBhcmFtcywgcXVlcnlQYXJhbXMsIHN0YXRlKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ3JvdXAgPSB0YWIuZ3JvdXA7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkVGFiSW5kZXggPSBpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fc3luY0Jyb3dzZXJIaXN0b3J5KCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGkrKztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICB3aGlsZSAoaSA8IHRoaXMucGFuZXMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgbGV0IHBhbmUgPSB0aGlzLnBhbmVzW2ldO1xyXG4gICAgICAgICAgICAgIGlmIChwYXRoID09PSBwYW5lLnBhdGgpIHtcclxuICAgICAgICAgICAgICAgIGlmIChxdWVyeVN0cmluZyA9PT0gcGFuZS5xdWVyeVN0cmluZykge1xyXG4gICAgICAgICAgICAgICAgICBpZiAoKHBvbGljeSAmIE9wZW5Qb2xpY3kuVG9nZ2xlKSA9PSBPcGVuUG9saWN5LlRvZ2dsZSlcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnJlbW92ZUF0KGkpO1xyXG4gICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBzdGF0ZSAmJiBwYW5lLl9kYXRhJC5uZXh0KHN0YXRlKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jZC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxUbyhpKTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5fbmF2UXVlcnlQYXJhbXMocGFuZSwgcXVlcnlQYXJhbXMsIHN0YXRlKTtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxUbyhpKTtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5fc3luY0Jyb3dzZXJIaXN0b3J5KCk7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgZWxzZSBpZiAocGFuZS5yb3V0ZSA9PT0gcm91dGUpIHtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX25hdlBhcmFtcyhwYXRoLCBwYW5lLCBwYXJhbXMsIHF1ZXJ5UGFyYW1zLCBzdGF0ZSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9zeW5jQnJvd3Nlckhpc3RvcnkoKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgaSsrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoY29tbWFuZHMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGlmICghc3RhdGUpIHN0YXRlID0ge307XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX3N0YXRlKHJvdXRlLCBwYXRoLCBwYXJhbXMsIHN0YXRlKTtcclxuICAgICAgICAgICAgaWYgKChwb2xpY3kgJiBPcGVuUG9saWN5LlRhYikgPT0gT3BlblBvbGljeS5UYWIpXHJcbiAgICAgICAgICAgICAgdGhpcy5faW5zZXJ0VGFiKGNvbXBvbmVudCB8fCByb3V0ZS5jb21wb25lbnQsXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgIHF1ZXJ5U3RyaW5nLFxyXG4gICAgICAgICAgICAgICAgICBwYXRoLFxyXG4gICAgICAgICAgICAgICAgICByb3V0ZSxcclxuICAgICAgICAgICAgICAgICAgaWNvbixcclxuICAgICAgICAgICAgICAgICAgdGl0bGUsXHJcbiAgICAgICAgICAgICAgICAgIGdyb3VwLFxyXG4gICAgICAgICAgICAgICAgICBoZWxwLFxyXG4gICAgICAgICAgICAgICAgICBkYXRhOiBzdGF0ZSxcclxuICAgICAgICAgICAgICAgICAgcGFyZW50LFxyXG4gICAgICAgICAgICAgICAgICBwYXJhbXMsXHJcbiAgICAgICAgICAgICAgICAgIHF1ZXJ5UGFyYW1zLFxyXG4gICAgICAgICAgICAgICAgICBwb2xpY3lcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgdGhpcy5faW5zZXJ0UGFuZShjb21wb25lbnQgfHwgcm91dGUuY29tcG9uZW50LFxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICBxdWVyeVN0cmluZyxcclxuICAgICAgICAgICAgICAgICAgcGF0aCxcclxuICAgICAgICAgICAgICAgICAgcm91dGUsXHJcbiAgICAgICAgICAgICAgICAgIGljb24sXHJcbiAgICAgICAgICAgICAgICAgIHRpdGxlLFxyXG4gICAgICAgICAgICAgICAgICBoZWxwLFxyXG4gICAgICAgICAgICAgICAgICBkYXRhOiBzdGF0ZSxcclxuICAgICAgICAgICAgICAgICAgcGFyZW50LFxyXG4gICAgICAgICAgICAgICAgICBwYXJhbXMsXHJcbiAgICAgICAgICAgICAgICAgIHF1ZXJ5UGFyYW1zLFxyXG4gICAgICAgICAgICAgICAgICBwb2xpY3lcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICByb3V0ZSAmJlxyXG4gICAgICAgICAgICAgIHRoaXMuX3N5bmNCcm93c2VySGlzdG9yeSgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHBhbmUgPSAocG9saWN5ICYgT3BlblBvbGljeS5UYWIpID09IE9wZW5Qb2xpY3kuVGFiID9cclxuICAgICAgICAgICAgICB0aGlzLnRhYnNbdGhpcy5zZWxlY3RlZFRhYkluZGV4XSA6IHRoaXMucGFuZXNbdGhpcy5zZWxlY3RlZEluZGV4XTtcclxuICAgICAgICAgICAgdGhpcy5fbmF2UXVlcnlQYXJhbXMocGFuZSwgcXVlcnlQYXJhbXMsIHN0YXRlKTtcclxuICAgICAgICAgICAgdGhpcy5fc3luY0Jyb3dzZXJIaXN0b3J5KCk7XHJcbiAgICAgICAgICAgIGlmICgocG9saWN5ICYgT3BlblBvbGljeS5UYWIpICE9IE9wZW5Qb2xpY3kuVGFiKSB0aGlzLnNlbGVjdCh0aGlzLnNlbGVjdGVkSW5kZXgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIGlmICgocG9saWN5ICYgT3BlblBvbGljeS5UYWIpID09IE9wZW5Qb2xpY3kuVGFiKVxyXG4gICAgICAgICAgICB0aGlzLl9pbnNlcnRUYWIoY29tcG9uZW50LFxyXG4gICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGRhdGE6IHN0YXRlLFxyXG4gICAgICAgICAgICAgICAgaWNvbiwgdGl0bGUsIGhlbHAsXHJcbiAgICAgICAgICAgICAgICBwYXJlbnQsXHJcbiAgICAgICAgICAgICAgICBxdWVyeVN0cmluZyxcclxuICAgICAgICAgICAgICAgIHBhdGgsXHJcbiAgICAgICAgICAgICAgICByb3V0ZSxcclxuICAgICAgICAgICAgICAgIGdyb3VwLFxyXG4gICAgICAgICAgICAgICAgcGFyYW1zLFxyXG4gICAgICAgICAgICAgICAgcXVlcnlQYXJhbXMsXHJcbiAgICAgICAgICAgICAgICBwb2xpY3lcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgIGVsc2UgdGhpcy5faW5zZXJ0UGFuZShjb21wb25lbnQsXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICBkYXRhOiBzdGF0ZSxcclxuICAgICAgICAgICAgICBpY29uLCB0aXRsZSwgaGVscCxcclxuICAgICAgICAgICAgICBwYXJlbnQsXHJcbiAgICAgICAgICAgICAgcXVlcnlTdHJpbmcsXHJcbiAgICAgICAgICAgICAgcGF0aCxcclxuICAgICAgICAgICAgICByb3V0ZSxcclxuICAgICAgICAgICAgICBwYXJhbXMsXHJcbiAgICAgICAgICAgICAgcG9saWN5LCBxdWVyeVBhcmFtc1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgd2luZG93LnJlbW92ZUFsbExpc3RlbmVycygncG9wc3RhdGUnKTtcclxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdwb3BzdGF0ZScsIGUgPT4ge1xyXG4gICAgICBpZiAodGhpcy5fbmF2aWdhdGlvbkluUHJvY2Vzcykge1xyXG4gICAgICAgIHRoaXMuX25hdmlnYXRpb25JblByb2Nlc3MgPSBmYWxzZTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGUuc3RhdGUgJiYgZS5zdGF0ZS5iaXpkb2MpIHtcclxuICAgICAgICBjb25zdCBldnQgPSBuZXcgQmFja05hdmlnYXRpb24oKTtcclxuICAgICAgICBpZiAoZXZ0Ll9wcmV2ZW50RGVmYXVsdCkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuX3JvdXRlci5fZXZlbnRzJC5uZXh0KGV2dCk7XHJcbiAgICAgICAgY29uc3Qgc3RhdGUgPSBlLnN0YXRlIGFzIEhpc3RvcnlTdGF0ZTtcclxuICAgICAgICB0aGlzLl9kZXNlcmlhbGl6ZShsb2NhdGlvbi5wYXRobmFtZS5zdWJzdHJpbmcoMSksIHN0YXRlKTtcclxuICAgICAgICB0aGlzLnN3YXAgPSBzdGF0ZS5zd2FwO1xyXG4gICAgICAgIHRoaXMuc3dhcFRhYiA9IHN0YXRlLnN3YXBUYWI7XHJcbiAgICAgICAgdGhpcy5wcmV2R3JvdXAgPSBzdGF0ZS5wcmV2R3JvdXA7XHJcbiAgICAgICAgdGhpcy5ncm91cCA9IHN0YXRlLmdyb3VwO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRUYWJJbmRleCA9IHN0YXRlLnNlbGVjdGVkVGFiSW5kZXg7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZVxyXG4gICAgICAgIHRoaXMuX2Rlc2VyaWFsaXplKGxvY2F0aW9uLnBhdGhuYW1lLnN1YnN0cmluZygxKSk7XHJcbiAgICB9KTtcclxuICAgIGlmIChsb2NhdGlvbi5wYXRobmFtZS5sZW5ndGggPiAxKVxyXG4gICAgICB0aGlzLl9kZXNlcmlhbGl6ZShsb2NhdGlvbi5wYXRobmFtZS5zdWJzdHJpbmcoMSksXHJcbiAgICAgICAgaGlzdG9yeS5zdGF0ZSAmJiBoaXN0b3J5LnN0YXRlLmJpemRvYyA/IGhpc3Rvcnkuc3RhdGUgOiB1bmRlZmluZWQpO1xyXG4gICAgZWxzZVxyXG4gICAgICB0aGlzLl9yb3V0ZXIuX25hdmlnYXRlJC5uZXh0KHtcclxuICAgICAgICBjb21tYW5kczogREVGQVVMVF9ST1VURSxcclxuICAgICAgfSk7XHJcbiAgICB0aGlzLl9yZXNpemluZy5waXBlKGRlYm91bmNlVGltZSgxNTApKS5zdWJzY3JpYmUodGhpcy5fcmVzaXplLmJpbmQodGhpcykpO1xyXG4gIH1cclxuICBwcml2YXRlIGFzeW5jIF9kZXNlcmlhbGl6ZSh1cmw6IHN0cmluZywgc3RhdGU/OiBIaXN0b3J5U3RhdGUpIHtcclxuXHJcbiAgICBjb25zdCBzZWN0aW9ucyA9IGRlY29kZVVSSUNvbXBvbmVudCh1cmwpLnNwbGl0KFBBTkVfQ0hBUiksXHJcbiAgICAgIHBhbmVzID0gZGVzZXJpYWxpemUoc2VjdGlvbnNbMF0pLFxyXG4gICAgICB0YWJzID0gc2VjdGlvbnMubGVuZ3RoID4gMSA/IGRlc2VyaWFsaXplKHNlY3Rpb25zWzFdKSA6IFtdO1xyXG5cclxuICAgIGZ1bmN0aW9uIGRlc2VyaWFsaXplKHBhdGg6IHN0cmluZykge1xyXG4gICAgICByZXR1cm4gcGF0aC5cclxuICAgICAgICBzcGxpdChQQVRIX0NIQVIpLm1hcChzID0+IHtcclxuICAgICAgICAgIGNvbnN0IFtwYXRoLCBxdWVyeVN0cmluZ10gPSBzLnNwbGl0KFFVRVJZX0NIQVIpO1xyXG4gICAgICAgICAgcmV0dXJuIHsgcGF0aCwgcXVlcnlTdHJpbmcgfTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhbmVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGxldCBwYW5lID0gcGFuZXNbaV07XHJcbiAgICAgIGF3YWl0IHRoaXMuX25hdmlnYXRlUGFuZShpLCBwYW5lLnBhdGgsIHBhbmUucXVlcnlTdHJpbmcsIHN0YXRlID8gc3RhdGUucGFuZXNbaV0gOiBudWxsKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnBhbmVzLmxlbmd0aCA+IHBhbmVzLmxlbmd0aCkge1xyXG4gICAgICBsZXQgaSA9IDA7XHJcbiAgICAgIHdoaWxlIChpIDwgdGhpcy5wYW5lcy5sZW5ndGgpIHtcclxuICAgICAgICBsZXQgcGFuZSA9IHRoaXMucGFuZXNbaV07XHJcbiAgICAgICAgaWYgKHBhbmVzLmxlbmd0aCAtIDEgPCBpIHx8IHBhbmUucGF0aCAhPT0gcGFuZXNbaV0ucGF0aCkge1xyXG4gICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRJbmRleCA9PT0gaSlcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEluZGV4ID0gaSAtIDE7XHJcbiAgICAgICAgICB0aGlzLnBhbmVzLnNwbGljZShpLCAxKTtcclxuICAgICAgICAgIHRoaXMuX2Rlc3Ryb3lQYW5lKHBhbmUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICBpKys7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICh0aGlzLnNlbGVjdGVkSW5kZXggPCAwKVxyXG4gICAgICB0aGlzLnNlbGVjdCgwKTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGFicy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBsZXQgdGFiID0gdGFic1tpXTtcclxuICAgICAgYXdhaXQgdGhpcy5fbmF2aWdhdGVUYWIoaSwgdGFiLnBhdGgsIHRhYi5xdWVyeVN0cmluZywgc3RhdGUgPyBzdGF0ZS50YWJzW2ldIDogbnVsbCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy50YWJzLmxlbmd0aCA+IHRhYnMubGVuZ3RoKSB7XHJcbiAgICAgIGxldCBpID0gMDtcclxuICAgICAgd2hpbGUgKGkgPCB0aGlzLnRhYnMubGVuZ3RoKSB7XHJcbiAgICAgICAgbGV0IHRhYiA9IHRoaXMudGFic1tpXTtcclxuICAgICAgICBpZiAodGFicy5sZW5ndGggLSAxIDwgaSB8fCB0YWIucGF0aCAhPT0gdGFic1tpXS5wYXRoKSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZFRhYkluZGV4ID09PSBpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUYWJJbmRleCA9IGkgLSAxO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy50YWJzLnNwbGljZShpLCAxKTtcclxuICAgICAgICAgIHRoaXMuX2Rlc3Ryb3lQYW5lKHRhYik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgIGkrKztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMudGFicy5sZW5ndGggJiYgdGhpcy5zZWxlY3RlZFRhYkluZGV4IDwgMCkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkVGFiSW5kZXggPSAwO1xyXG4gICAgfVxyXG4gICAgY29uc3QgbiA9IHRoaXMucGFuZXMubGVuZ3RoO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuOyBpKyspIHtcclxuICAgICAgbGV0IHBhbmUgPSB0aGlzLnBhbmVzW2ldO1xyXG4gICAgICBpZiAocGFuZS5leHBhbmRlZCAhPT0gKG4gPT09IDEpKSB7XHJcbiAgICAgICAgY29uc3QgZXZ0ID0gbmV3IE5hdmlnYXRpb25FeHBhbmQocGFuZS5fZXhwYW5kZWQgPSBuID09PSAxLCBwYW5lKTtcclxuICAgICAgICBwYW5lLl9ldmVudHMkLm5leHQoZXZ0KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuICAvKipcclxuICAgKiBcclxuICAgKiBAcGFyYW0gaW5kZXhcclxuICAgKiBAcGFyYW0gcGF0aFxyXG4gICAqIEBwYXJhbSBxdWVyeVN0cmluZ1xyXG4gICAqIEBwYXJhbSBzdGF0ZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgYXN5bmMgX25hdmlnYXRlUGFuZShpbmRleDogbnVtYmVyLCBwYXRoOiBzdHJpbmcsIHF1ZXJ5U3RyaW5nOiBzdHJpbmcsIHN0YXRlPzogYW55KSB7XHJcbiAgICBjb25zdCByb3V0ZSA9IHRoaXMuX21hdGNoKHBhdGgpO1xyXG5cclxuICAgIGlmICghcm91dGUpIHRocm93IGBubyBtYXRjaCAke3BhdGh9YDtcclxuXHJcbiAgICBpZiAoIXN0YXRlKSBzdGF0ZSA9IHt9O1xyXG5cclxuICAgIHdoaWxlIChpbmRleCA8IHRoaXMucGFuZXMubGVuZ3RoKSB7XHJcbiAgICAgIGxldCBwYW5lID0gdGhpcy5wYW5lc1tpbmRleF07XHJcbiAgICAgIGlmIChwYXRoID09PSBwYW5lLnBhdGgpIHtcclxuICAgICAgICBpZiAocXVlcnlTdHJpbmcgPT09IHBhbmUucXVlcnlTdHJpbmcpIHtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICBjb25zdCBxdWVyeVBhcmFtcyA9IHRoaXMuX3BhcnNlUXVlcnlQYXJhbXMocXVlcnlTdHJpbmcpO1xyXG4gICAgICAgICAgdGhpcy5fbmF2UXVlcnlQYXJhbXMocGFuZSwgcXVlcnlQYXJhbXMsIHN0YXRlKTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAocGFuZS5yb3V0ZSA9PT0gcm91dGUpIHtcclxuICAgICAgICBjb25zdCBxdWVyeVBhcmFtcyA9IHRoaXMuX3BhcnNlUXVlcnlQYXJhbXMocXVlcnlTdHJpbmcpO1xyXG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IHRoaXMuX3BhcmFtcyhwYW5lLnJvdXRlIGFzIEV4dGVuZGVkUm91dGUsIHBhdGgpO1xyXG4gICAgICAgIGF3YWl0IHRoaXMuX25hdlBhcmFtcyhwYXRoLCBwYW5lLCBwYXJhbXMsIHF1ZXJ5UGFyYW1zLCBzdGF0ZSk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIGluZGV4Kys7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgcGFyYW1zID0gdGhpcy5fcGFyYW1zKHJvdXRlLCBwYXRoKTtcclxuICAgIGNvbnN0IHF1ZXJ5UGFyYW1zID0gdGhpcy5fcGFyc2VRdWVyeVBhcmFtcyhxdWVyeVN0cmluZyk7XHJcbiAgICBjb25zdCBwYXJlbnQgPSB0aGlzLl9maW5kQW5jZXN0b3Iocm91dGUsIHBhdGgpO1xyXG4gICAgYXdhaXQgdGhpcy5fc3RhdGUocm91dGUsIHBhdGgsIHBhcmFtcywgc3RhdGUpO1xyXG4gICAgdGhpcy5faW5zZXJ0UGFuZShyb3V0ZS5jb21wb25lbnQsIHtcclxuICAgICAgcGF0aCwgcGFyZW50LCByb3V0ZSwgZGF0YTogc3RhdGUsIHBhcmFtcywgcXVlcnlQYXJhbXMsXHJcbiAgICAgIGljb246IHJvdXRlLmljb24sXHJcbiAgICAgIGhlbHA6IHJvdXRlLmhlbHAsXHJcbiAgICAgIHBvbGljeTogcm91dGUucG9saWN5LFxyXG4gICAgICBmb2N1czogZmFsc2VcclxuICAgIH0pO1xyXG4gIH1cclxuICBwcml2YXRlIGFzeW5jIF9uYXZpZ2F0ZVRhYihpbmRleDogbnVtYmVyLCBwYXRoOiBzdHJpbmcsIHF1ZXJ5U3RyaW5nOiBzdHJpbmcsIHN0YXRlPzogYW55KSB7XHJcbiAgICBjb25zdCByb3V0ZSA9IHRoaXMuX21hdGNoKHBhdGgpO1xyXG5cclxuICAgIGlmICghcm91dGUpIHRocm93IGBubyBtYXRjaCAke3BhdGh9YDtcclxuXHJcbiAgICBpZiAoIXN0YXRlKSBzdGF0ZSA9IHt9O1xyXG5cclxuICAgIHdoaWxlIChpbmRleCA8IHRoaXMudGFicy5sZW5ndGgpIHtcclxuICAgICAgbGV0IHRhYiA9IHRoaXMudGFic1tpbmRleF07XHJcbiAgICAgIGlmIChwYXRoID09PSB0YWIucGF0aCkge1xyXG4gICAgICAgIGlmIChxdWVyeVN0cmluZyA9PT0gdGFiLnF1ZXJ5U3RyaW5nKSB7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgY29uc3QgcXVlcnlQYXJhbXMgPSB0aGlzLl9wYXJzZVF1ZXJ5UGFyYW1zKHF1ZXJ5U3RyaW5nKTtcclxuICAgICAgICAgIHRoaXMuX25hdlF1ZXJ5UGFyYW1zKHRhYiwgcXVlcnlQYXJhbXMsIHN0YXRlKTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAodGFiLnJvdXRlID09PSByb3V0ZSkge1xyXG4gICAgICAgIGNvbnN0IHF1ZXJ5UGFyYW1zID0gdGhpcy5fcGFyc2VRdWVyeVBhcmFtcyhxdWVyeVN0cmluZyk7XHJcbiAgICAgICAgY29uc3QgcGFyYW1zID0gdGhpcy5fcGFyYW1zKHRhYi5yb3V0ZSBhcyBFeHRlbmRlZFJvdXRlLCBwYXRoKTtcclxuICAgICAgICBhd2FpdCB0aGlzLl9uYXZQYXJhbXMocGF0aCwgdGFiLCBwYXJhbXMsIHF1ZXJ5UGFyYW1zLCBzdGF0ZSk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIGluZGV4Kys7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgcGFyYW1zID0gdGhpcy5fcGFyYW1zKHJvdXRlLCBwYXRoKTtcclxuICAgIGNvbnN0IHF1ZXJ5UGFyYW1zID0gdGhpcy5fcGFyc2VRdWVyeVBhcmFtcyhxdWVyeVN0cmluZyk7XHJcblxyXG4gICAgY29uc3QgcGFyZW50ID0gdGhpcy5fZmluZEFuY2VzdG9yKHJvdXRlLCBwYXRoKTtcclxuXHJcbiAgICBhd2FpdCB0aGlzLl9zdGF0ZShyb3V0ZSwgcGF0aCwgcGFyYW1zLCBzdGF0ZSk7XHJcbiAgICB0aGlzLl9pbnNlcnRUYWIocm91dGUuY29tcG9uZW50LCB7XHJcbiAgICAgIGljb246IHJvdXRlLmljb24sXHJcbiAgICAgIGhlbHA6IHJvdXRlLmhlbHAsXHJcbiAgICAgIHBvbGljeTogcm91dGUucG9saWN5IHwgT3BlblBvbGljeS5UYWIsXHJcbiAgICAgIHBhdGgsIHBhcmVudCwgcm91dGUsXHJcbiAgICAgIGRhdGE6IHN0YXRlLFxyXG4gICAgICBwYXJhbXMsIHF1ZXJ5UGFyYW1zLFxyXG4gICAgICBmb2N1czogZmFsc2UsXHJcbiAgICAgIHN3YXA6IGZhbHNlXHJcbiAgICB9KTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfZmluZEFuY2VzdG9yKHJvdXRlOiBFeHRlbmRlZFJvdXRlLCBwYXRoOiBzdHJpbmcpIHtcclxuICAgIGlmICgocm91dGUgYXMgRXh0ZW5kZWRSb3V0ZSkucGFyZW50KVxyXG4gICAgICByZXR1cm4gdGhpcy5wYW5lcy5maW5kKHAgPT4gKHAucm91dGUgYXMgRXh0ZW5kZWRSb3V0ZSkgPT09XHJcbiAgICAgICAgKHJvdXRlIGFzIEV4dGVuZGVkUm91dGUpLnBhcmVudCAmJlxyXG4gICAgICAgIHBhdGguc3RhcnRzV2l0aChwLnBhdGgpKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogXHJcbiAgICogQHBhcmFtIHBhbmVcclxuICAgKiBAcGFyYW0gcXVlcnlQYXJhbXNcclxuICAgKi9cclxuICBwcml2YXRlIF9uYXZRdWVyeVBhcmFtcyhwYW5lOiBQYW5lUmVmPGFueT4sIHF1ZXJ5UGFyYW1zOiBQYXJhbU1hcCwgc3RhdGU6IFBhcmFtTWFwKSB7XHJcbiAgICBwYW5lLl9xdWVyeVN0cmluZyA9IHRoaXMuX3F1ZXJ5U3RyaW5nKHF1ZXJ5UGFyYW1zKTtcclxuICAgIHN0YXRlICYmIHBhbmUuX2RhdGEkLm5leHQoc3RhdGUpO1xyXG4gICAgcGFuZS5fcXVlcnlQYXJhbXMkLm5leHQocXVlcnlQYXJhbXMpO1xyXG4gICAgY29uc3QgZXZ0ID0gbmV3IFF1ZXJ5UGFyYW1OYXZpZ2F0aW9uKHF1ZXJ5UGFyYW1zLCBwYW5lKTtcclxuICAgIHBhbmUuX2V2ZW50cyQubmV4dChldnQpO1xyXG4gICAgdGhpcy5fcm91dGVyLl9ldmVudHMkLm5leHQoZXZ0KTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogXHJcbiAgICogQHBhcmFtIHBhdGhcclxuICAgKiBAcGFyYW0gcGFuZVxyXG4gICAqIEBwYXJhbSBwYXJhbXNcclxuICAgKiBAcGFyYW0gcXVlcnlQYXJhbXNcclxuICAgKiBAcGFyYW0gc3RhdGVcclxuICAgKi9cclxuICBwcml2YXRlIGFzeW5jIF9uYXZQYXJhbXMocGF0aDogc3RyaW5nLCBwYW5lOiBQYW5lUmVmPGFueT4sIHBhcmFtczogUGFyYW1NYXAsIHF1ZXJ5UGFyYW1zOiBQYXJhbU1hcCwgc3RhdGU6IFBhcmFtTWFwKSB7XHJcbiAgICBpZiAocGFuZS5yb3V0ZS5jYW5EaXNtaXNzKVxyXG4gICAgICBhd2FpdCB0aGlzLl9kaXNtaXNzKHBhbmUpO1xyXG5cclxuICAgIGlmICghc3RhdGUpIHN0YXRlID0ge307XHJcbiAgICBhd2FpdCB0aGlzLl9zdGF0ZShwYW5lLnJvdXRlIGFzIEV4dGVuZGVkUm91dGUsIHBhdGgsIHBhcmFtcywgc3RhdGUpO1xyXG4gICAgcGFuZS5fZGF0YSQubmV4dChzdGF0ZSk7XHJcbiAgICBwYW5lLl9wYXRoID0gcGF0aDtcclxuICAgIHBhbmUuX3BhcmFtcyQubmV4dChwYXJhbXMpO1xyXG4gICAgaWYgKHF1ZXJ5UGFyYW1zKSB7XHJcbiAgICAgIHBhbmUuX3F1ZXJ5U3RyaW5nID0gdGhpcy5fcXVlcnlTdHJpbmcocXVlcnlQYXJhbXMpO1xyXG4gICAgICBwYW5lLl9xdWVyeVBhcmFtcyQubmV4dChxdWVyeVBhcmFtcyk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgcGFuZS5fcXVlcnlTdHJpbmcgPSAnJztcclxuICAgICAgcGFuZS5fcXVlcnlQYXJhbXMkLm5leHQoe30pO1xyXG4gICAgfVxyXG4gICAgY29uc3QgZXZ0ID0gbmV3IFBhcmFtTmF2aWdhdGlvbihwYXJhbXMsIHBhbmUpO1xyXG4gICAgcGFuZS5fZXZlbnRzJC5uZXh0KGV2dCk7XHJcbiAgICB0aGlzLl9yb3V0ZXIuX2V2ZW50cyQubmV4dChldnQpO1xyXG5cclxuICAgIHRoaXMucGFuZXMuY29uY2F0KHRoaXMudGFicykuZm9yRWFjaChjaGlsZCA9PiB7XHJcbiAgICAgIGlmIChjaGlsZC5yb3V0ZSAmJiAoY2hpbGQucm91dGUgYXMgRXh0ZW5kZWRSb3V0ZSkucGFyZW50ID09PSBwYW5lLnJvdXRlKSB7XHJcbiAgICAgICAgY2hpbGQuX2RhdGEkLm5leHQoT2JqZWN0LmFzc2lnbihjaGlsZC5kYXRhLCBzdGF0ZSkpO1xyXG4gICAgICAgIGNoaWxkLl9wYXJhbXMkLm5leHQocGFyYW1zKTtcclxuICAgICAgICBjaGlsZC5fcGF0aCA9IHBhbmUucGF0aCArICcvJyArIGNoaWxkLnJvdXRlLnBhdGg7XHJcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRUYWJJbmRleCA+IC0xICYmIGNoaWxkID09PSB0aGlzLnRhYnNbdGhpcy5zZWxlY3RlZFRhYkluZGV4XSkge1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFRhYkluZGV4ID0gdGhpcy5zZWxlY3RlZFRhYkluZGV4O1xyXG4gICAgICAgICAgdGhpcy5ncm91cCA9IGNoaWxkLmdyb3VwO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICBpZiAocGFuZS5tb2RlID09PSAncGFuZScpIHRoaXMudGl0bGVBbmltYXRpb24rKztcclxuICAgIHRoaXMuX2NkLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcbiAgLyoqICovXHJcbiAgcHJpdmF0ZSBfc3luY0Jyb3dzZXJIaXN0b3J5KCkge1xyXG4gICAgbGV0IHBhdGggPSB0aGlzLnBhbmVzLmZpbHRlcihwID0+IHAucm91dGUpLm1hcChzID0+IHMuZnVsbFBhdGgpLmpvaW4oUEFUSF9DSEFSKTtcclxuICAgIGlmICh0aGlzLnRhYnMubGVuZ3RoKSB7XHJcbiAgICAgIGNvbnN0IHRhYnMgPSB0aGlzLnRhYnMuZmlsdGVyKHAgPT4gcC5yb3V0ZSk7XHJcbiAgICAgIGlmICh0YWJzLmxlbmd0aClcclxuICAgICAgICBwYXRoICs9IFBBTkVfQ0hBUiArIHRhYnMubWFwKHMgPT4gcy5mdWxsUGF0aCkuam9pbihQQVRIX0NIQVIpO1xyXG4gICAgfVxyXG4gICAgY29uc3Qgc3RhdGUgPSB0aGlzLl9jb25zdHJ1Y3RIaXN0b3J5U3RhdGUoKTtcclxuICAgIHRoaXMuX25hdmlnYXRpb25JblByb2Nlc3MgPSB0cnVlO1xyXG4gICAgaGlzdG9yeS5wdXNoU3RhdGUoc3RhdGUsICcnLCAnLycgKyBwYXRoKTtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5fbmF2aWdhdGlvbkluUHJvY2VzcyA9IGZhbHNlLCAyMDApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfY29uc3RydWN0SGlzdG9yeVN0YXRlKCkge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgYml6ZG9jOiB0cnVlLFxyXG4gICAgICBzdGVwOiBoaXN0b3J5LnN0YXRlICYmIGhpc3Rvcnkuc3RhdGUuYml6ZG9jID8gKGhpc3Rvcnkuc3RhdGUgYXMgSGlzdG9yeVN0YXRlKS5zdGVwICsgMSA6IDEsXHJcbiAgICAgIHNlbGVjdGVkVGFiSW5kZXg6IHRoaXMuc2VsZWN0ZWRUYWJJbmRleCxcclxuICAgICAgcGFuZXM6IHRoaXMucGFuZXMubWFwKHAgPT4gcC5kYXRhKSxcclxuICAgICAgdGFiczogdGhpcy50YWJzLm1hcCh0ID0+IHQuZGF0YSksXHJcbiAgICAgIHN3YXA6IHRoaXMuc3dhcCxcclxuICAgICAgZ3JvdXA6IHRoaXMuZ3JvdXAsXHJcbiAgICAgIHN3YXBUYWI6IHRoaXMuc3dhcFRhYixcclxuICAgICAgcHJldkdyb3VwOiB0aGlzLnByZXZHcm91cFxyXG4gICAgfSBhcyBIaXN0b3J5U3RhdGU7XHJcbiAgfVxyXG5cclxuICBkcm9wKGV2dDogQ2RrRHJhZ0Ryb3A8c3RyaW5nLCBzdHJpbmc+KSB7XHJcbiAgICBjb25zdCBwYW5lID0gdGhpcy5wYW5lc1tldnQucHJldmlvdXNJbmRleF07XHJcbiAgICB0aGlzLnBhbmVzLnNwbGljZShldnQucHJldmlvdXNJbmRleCwgMSk7XHJcbiAgICB0aGlzLnBhbmVzLnNwbGljZShldnQuY3VycmVudEluZGV4LCAwLCBwYW5lKTtcclxuICAgIHRoaXMuX3N5bmNCcm93c2VySGlzdG9yeSgpO1xyXG4gIH1cclxuXHJcbiAgdG9nZ2xlUGlubmVkKHBhbmU6IFBhbmVSZWY8YW55Pikge1xyXG4gICAgcGFuZS5waW5uZWQgPSAhcGFuZS5waW5uZWQ7XHJcbiAgICB0aGlzLnBhbmVzLmZvckVhY2gocyA9PiB7XHJcbiAgICAgIGlmIChzLmRlY2VuZGVudE9mKHBhbmUpKSBzLnBpbm5lZCA9IHBhbmUucGlubmVkO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9xdWVyeVN0cmluZyhxdWVyeVBhcmFtczogUGFyYW1NYXApIHtcclxuICAgIGNvbnN0IG5hbWVzID0gT2JqZWN0LmtleXMocXVlcnlQYXJhbXMpO1xyXG4gICAgbGV0IHF1ZXJ5U3RyaW5nOiBzdHJpbmc7XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5hbWVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGxldCB2YWwgPSBxdWVyeVBhcmFtc1tuYW1lc1tpXV07XHJcblxyXG4gICAgICBpZiAodmFsICE9PSBudWxsICYmIHZhbCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgaWYgKCFxdWVyeVN0cmluZykgcXVlcnlTdHJpbmcgPSAnJztcclxuICAgICAgICBlbHNlIHF1ZXJ5U3RyaW5nID0gcXVlcnlTdHJpbmcgKyBBUkdfQ0hBUjtcclxuXHJcbiAgICAgICAgaWYgKGlzU3RyaW5nKHZhbCkpXHJcbiAgICAgICAgICBxdWVyeVN0cmluZyArPSBgJHtuYW1lc1tpXX09JHtlbmNvZGVVUklDb21wb25lbnQodmFsKX1gO1xyXG4gICAgICAgIGVsc2UgaWYgKGlzQXJyYXkodmFsKSlcclxuICAgICAgICAgIHF1ZXJ5U3RyaW5nICs9IHZhbC5tYXAodiA9PiBgJHtuYW1lc1tpXX09JHt2fWApLmpvaW4oQVJHX0NIQVIpO1xyXG4gICAgICAgIGVsc2UgaWYgKGlzRGF0ZSh2YWwpKVxyXG4gICAgICAgICAgcXVlcnlTdHJpbmcgKz0gYCR7bmFtZXNbaV19PSR7dmFsLnRvSlNPTigpfWA7XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgcXVlcnlTdHJpbmcgKz0gYCR7bmFtZXNbaV19PSR7dmFsfWA7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBxdWVyeVN0cmluZztcclxuICB9XHJcbiAgcHJpdmF0ZSBfcGFyc2VRdWVyeVBhcmFtcyhxdWVyeVN0cmluZzogc3RyaW5nKTogUGFyYW1NYXAge1xyXG4gICAgY29uc3QgcXVlcnlQYXJhbXMgPSB7fTtcclxuICAgIHF1ZXJ5U3RyaW5nICYmIHF1ZXJ5U3RyaW5nLlxyXG4gICAgICBzcGxpdChBUkdfQ0hBUikuZm9yRWFjaChwID0+IHtcclxuICAgICAgICBjb25zdCBbbmFtZSwgdmFsdWVdID0gcC5zcGxpdCgnPScpO1xyXG4gICAgICAgIGlmICghcXVlcnlQYXJhbXNbbmFtZV0pXHJcbiAgICAgICAgICBxdWVyeVBhcmFtc1tuYW1lXSA9IHZhbHVlO1xyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgY29uc3QgdmFscyA9IHF1ZXJ5UGFyYW1zW25hbWVdO1xyXG4gICAgICAgICAgcXVlcnlQYXJhbXNbbmFtZV0gPSBpc0FycmF5KHZhbHMpID8gWy4uLnZhbHMsIHZhbHVlXSA6IFt2YWxzLCB2YWx1ZV07XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIHJldHVybiBxdWVyeVBhcmFtcztcclxuICB9XHJcbiAgLyoqXHJcbiAgICogXHJcbiAgICogQHBhcmFtIHJvdXRlXHJcbiAgICogQHBhcmFtIHBhdGhcclxuICAgKi9cclxuICBwcml2YXRlIF9wYXJhbXMocm91dGU6IEV4dGVuZGVkUm91dGUsIHBhdGg6IHN0cmluZykge1xyXG4gICAgY29uc3QgZXggPSByb3V0ZS5yZWdFeC5leGVjKHBhdGgpLFxyXG4gICAgICBwYXJhbXMgPSBleC5ncm91cHM7XHJcblxyXG4gICAgcmV0dXJuIHBhcmFtcyB8fCB7fTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogXHJcbiAgICogQHBhcmFtIHVybFxyXG4gICAqL1xyXG4gIHByaXZhdGUgX21hdGNoKHVybDogc3RyaW5nKSB7XHJcbiAgICBsZXQgcm91dGUgPSB0aGlzLl9yZXBvc2l0b3J5LmZpbmQociA9PiByLnJlZ0V4LnRlc3QodXJsKSk7XHJcbiAgICBpZiAocm91dGUpXHJcbiAgICAgIHdoaWxlIChyb3V0ZS5jaGlsZHJlbikge1xyXG4gICAgICAgIGxldCBjaGlsZCA9IHJvdXRlLmNoaWxkcmVuLmZpbmQociA9PiByLnJlZ0V4LnRlc3QodXJsKSk7XHJcbiAgICAgICAgaWYgKGNoaWxkKVxyXG4gICAgICAgICAgcm91dGUgPSBjaGlsZDtcclxuICAgICAgICBlbHNlIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICByZXR1cm4gcm91dGU7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSByb3V0ZVxyXG4gICAqIEBwYXJhbSBwYXRoXHJcbiAgICogQHBhcmFtIHBhcmFtc1xyXG4gICAqIEBwYXJhbSBkYXRhXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBhc3luYyBfc3RhdGUocm91dGU6IEV4dGVuZGVkUm91dGUsIHBhdGg6IHN0cmluZywgcGFyYW1zOiBQYXJhbU1hcCwgZGF0YTogUGFyYW1NYXApIHtcclxuICAgIGlmICh0aGlzLl9wZW5kaW5nLmluZGV4T2YocGF0aCkgPiAtMSkge1xyXG4gICAgICAvL3RoaXMuX3BzLnRvYXN0KCdXb3JraW5nJyk7XHJcbiAgICAgIHRocm93ICdhbHJlYWR5IHByb2Nlc3NpbmcnO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fcGVuZGluZy5wdXNoKHBhdGgpO1xyXG5cclxuICAgIGNvbnN0IHsgcGFyZW50LCByZXNvbHZlIH0gPSByb3V0ZTtcclxuICAgIGlmIChwYXJlbnQpXHJcbiAgICAgIGF3YWl0IHRoaXMuX3BhcmVudHN0YXRlKHBhcmVudCwgcGF0aCwgcGFyYW1zLCBkYXRhKTtcclxuICAgIGlmIChyZXNvbHZlKSB7XHJcbiAgICAgIGF3YWl0IHRoaXMuX3Jlc29sdmUocmVzb2x2ZSwgcGFyYW1zLCBkYXRhKTtcclxuICAgIH1cclxuICAgIHRoaXMuX3BlbmRpbmcucmVtb3ZlKHBhdGgpO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBcclxuICAgKiBAcGFyYW0gcm91dGVcclxuICAgKiBAcGFyYW0gcGF0aFxyXG4gICAqIEBwYXJhbSBwYXJhbXNcclxuICAgKiBAcGFyYW0gZGF0YVxyXG4gICAqL1xyXG4gIHByaXZhdGUgYXN5bmMgX3BhcmVudHN0YXRlKHJvdXRlOiBFeHRlbmRlZFJvdXRlLCBwYXRoOiBzdHJpbmcsIHBhcmFtczogUGFyYW1NYXAsIGRhdGE6IFBhcmFtTWFwKSB7XHJcbiAgICBjb25zdCB7IHBhcmVudCwgcmVzb2x2ZSB9ID0gcm91dGU7XHJcblxyXG4gICAgaWYgKHBhcmVudClcclxuICAgICAgYXdhaXQgdGhpcy5fcGFyZW50c3RhdGUocGFyZW50LCBwYXRoLCBwYXJhbXMsIGRhdGEpO1xyXG5cclxuICAgIGNvbnN0IHBhbmUgPSB0aGlzLnBhbmVzLmZpbmQocyA9PiBzLnJvdXRlICYmIHMucm91dGUgPT09IHJvdXRlXHJcbiAgICAgICYmIHBhdGguc3RhcnRzV2l0aChzLnBhdGgpKTtcclxuXHJcbiAgICBwYW5lICYmIE9iamVjdC5hc3NpZ24oZGF0YSwgcGFuZS5kYXRhKTtcclxuXHJcbiAgICBpZiAocmVzb2x2ZSlcclxuICAgICAgYXdhaXQgdGhpcy5fcmVzb2x2ZShyZXNvbHZlLCBwYXJhbXMsIGRhdGEpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBfcmVzb2x2ZShyZXNvbHZlOiB7IFtrZXk6IHN0cmluZ106IENvbXBvbmVudFR5cGU8UGFuZVJlc29sdmU8YW55Pj4gfSwgcGFyYW1zOiBQYXJhbU1hcCwgZGF0YTogUGFyYW1NYXApIHtcclxuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhyZXNvbHZlKTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBsZXQga2V5ID0ga2V5c1tpXTtcclxuICAgICAgaWYgKCFkYXRhW2tleV0pIHtcclxuICAgICAgICBjb25zdCBpbnN0YW5jZSA9IHRoaXMuX2luamVjdG9yLmdldChyZXNvbHZlW2tleV0pIGFzIFBhbmVSZXNvbHZlPGFueT47XHJcbiAgICAgICAgY29uc3QgdmFsdWUgPSBpbnN0YW5jZS5vblJlc29sdmUocGFyYW1zKTtcclxuICAgICAgICBpZiAoaXNQcm9taXNlKHZhbHVlKSlcclxuICAgICAgICAgIGF3YWl0IHZhbHVlLnRoZW4ociA9PiBkYXRhW2tleV0gPSByKTtcclxuICAgICAgICBlbHNlIGlmIChpc09ic2VydmFibGUodmFsdWUpKVxyXG4gICAgICAgICAgYXdhaXQgdmFsdWUucGlwZSh0YXAociA9PiBkYXRhW2tleV0gPSByKSkudG9Qcm9taXNlKCk7XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgZGF0YVtrZXldID0gdmFsdWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFkZDxUPihjb21wb25lbnQ6IENvbXBvbmVudFR5cGU8VD4sIG9wdGlvbnM/OiBQYW5lT3B0aW9ucykge1xyXG4gICAgcmV0dXJuIHRoaXMuaW5zZXJ0KHRoaXMucGFuZXMubGVuZ3RoLCBjb21wb25lbnQsIG9wdGlvbnMpO1xyXG4gIH1cclxuICBpbnNlcnQ8VD4ocG9zaXRpb246IG51bWJlciwgY29tcG9uZW50OiBDb21wb25lbnRUeXBlPFQ+LCBvcHRpb25zPzogUGFuZU9wdGlvbnMpIHtcclxuICAgIGNvbnN0IHBhbmUgPSB0aGlzLl9pbnNlcnRQYW5lPFQ+KGNvbXBvbmVudCwgb3B0aW9ucyB8fCB7fSwgcG9zaXRpb24pO1xyXG4gICAgcmV0dXJuIHBhbmU7XHJcbiAgfVxyXG4gIHByaXZhdGUgX2luc2VydFBhbmU8VCA9IGFueT4oY29tcG9uZW50OiBDb21wb25lbnRUeXBlPFQ+LCBvcHRpb25zOiB7XHJcbiAgICBwYXRoPzogc3RyaW5nO1xyXG4gICAgcm91dGU/OiBQYW5lUm91dGU7XHJcbiAgICBpY29uPzogc3RyaW5nO1xyXG4gICAgdGl0bGU/OiBzdHJpbmc7XHJcbiAgICBpbnB1dHM/OiB7IFtuYW1lOiBzdHJpbmddOiBhbnkgfSxcclxuICAgIGRhdGE/OiBQYXJhbU1hcDtcclxuICAgIHBhcmFtcz86IFBhcmFtTWFwO1xyXG4gICAgcXVlcnlQYXJhbXM/OiBQYXJhbU1hcDtcclxuICAgIGhlbHA/OiBzdHJpbmc7XHJcbiAgICBwYXJlbnQ/OiBQYW5lUmVmPGFueT47XHJcbiAgICBxdWVyeVN0cmluZz86IHN0cmluZztcclxuICAgIHBvbGljeT86IE9wZW5Qb2xpY3k7XHJcbiAgICBmb2N1cz86IGJvb2xlYW5cclxuICB9LCBwb3NpdGlvbj86IG51bWJlcikge1xyXG5cclxuICAgIGNvbnN0IHN0cmV0Y2hhYmxlID0gKG9wdGlvbnMucG9saWN5ICYgT3BlblBvbGljeS5TdHJldGNoKSA9PSBPcGVuUG9saWN5LlN0cmV0Y2g7XHJcblxyXG4gICAgY29uc3QgcGFuZSA9IHRoaXMuX2NvbnN0cmFjdDxUPihjb21wb25lbnQsIHtcclxuICAgICAgbW9kZTogJ3BhbmUnLFxyXG4gICAgICBleHBhbmRlZDogIXRoaXMucGFuZXMubGVuZ3RoLFxyXG4gICAgICBzdHJldGNoYWJsZSxcclxuICAgICAgLi4ub3B0aW9uc1xyXG4gICAgfSk7XHJcbiAgICBpZiAocG9zaXRpb24gPT09IHVuZGVmaW5lZClcclxuICAgICAgcG9zaXRpb24gPSB0aGlzLnBhbmVzLmxlbmd0aDtcclxuICAgIHRoaXMucGFuZXMucHVzaChwYW5lKTtcclxuICAgIHRoaXMudGl0bGVBbmltYXRpb24rKztcclxuICAgIHRoaXMuX2NkLmRldGVjdENoYW5nZXMoKTtcclxuICAgIGNvbnN0IGV2dCA9IG5ldyBOYXZpZ2F0aW9uU3RhcnQocGFuZSk7XHJcbiAgICB0aGlzLl9yb3V0ZXIuX2V2ZW50cyQubmV4dChldnQpO1xyXG4gICAgaWYgKG9wdGlvbnMuZm9jdXMgIT09IGZhbHNlKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRJbmRleCA9IHBvc2l0aW9uO1xyXG4gICAgICB0aGlzLl90aXRsZS5zZXQocGFuZS50aXRsZSk7XHJcbiAgICAgIGlmICh0aGlzLnBhbmVzLmxlbmd0aCA+IDEpIHRoaXMuc2Nyb2xsVG8ocG9zaXRpb24pO1xyXG4gICAgfVxyXG4gICAgdGhpcy5lbmFibGVOYXZpZ2F0aW9uQXJyb3dzKCk7XHJcbiAgICByZXR1cm4gcGFuZTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogXHJcbiAgICogQHBhcmFtIGNvbXBvbmVudFxyXG4gICAqIEBwYXJhbSBvcHRpb25zXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfY29uc3RyYWN0PFQgPSBhbnk+KGNvbXBvbmVudDogQ29tcG9uZW50VHlwZTxUPixcclxuICAgIG9wdGlvbnM6IHtcclxuICAgICAgbW9kZTogUGFuZU1vZGUsXHJcbiAgICAgIGV4cGFuZGVkPzogYm9vbGVhbjtcclxuICAgICAgZGlhbG9nPzogYm9vbGVhbjtcclxuICAgICAgc3RyZXRjaGFibGU/OiBib29sZWFuO1xyXG4gICAgICBwYXRoPzogc3RyaW5nO1xyXG4gICAgICByb3V0ZT86IFBhbmVSb3V0ZTtcclxuICAgICAgaWNvbj86IHN0cmluZztcclxuICAgICAgdGl0bGU/OiBzdHJpbmc7XHJcbiAgICAgIGdyb3VwPzogc3RyaW5nO1xyXG4gICAgICBkYXRhPzogUGFyYW1NYXA7XHJcbiAgICAgIHBhcmFtcz86IFBhcmFtTWFwO1xyXG4gICAgICBxdWVyeVBhcmFtcz86IFBhcmFtTWFwO1xyXG4gICAgICBoZWxwPzogc3RyaW5nO1xyXG4gICAgICBwYXJlbnQ/OiBQYW5lUmVmPGFueT47XHJcbiAgICAgIHF1ZXJ5U3RyaW5nPzogc3RyaW5nO1xyXG4gICAgICBkaXNtaXNzYWJsZT86IGJvb2xlYW47XHJcbiAgICAgIGV4cGFuZGFibGU/OiBib29sZWFuXHJcbiAgICB9KSB7XHJcbiAgICBjb25zdCBwYW5lID0gbmV3IFBhbmVSZWY8VD4oY29tcG9uZW50LCB0aGlzLl9pbmplY3Rvciwgb3B0aW9ucyk7XHJcbiAgICBwYW5lLl9jb21tJC5zdWJzY3JpYmUoZSA9PiB0aGlzLl9wYW5lQ29tbWFuZDxUPihlLCBwYW5lKSk7XHJcbiAgICByZXR1cm4gcGFuZTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogXHJcbiAgICogQHBhcmFtIGNvbXBvbmVudFxyXG4gICAqIEBwYXJhbSBvcHRpb25zXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfaW5zZXJ0VGFiPFQgPSBhbnk+KGNvbXBvbmVudDogQ29tcG9uZW50VHlwZTxUPiwgb3B0aW9uczoge1xyXG4gICAgaWNvbj86IHN0cmluZztcclxuICAgIHRpdGxlPzogc3RyaW5nO1xyXG4gICAgZ3JvdXA/OiBzdHJpbmc7XHJcbiAgICBoZWxwPzogc3RyaW5nO1xyXG4gICAgcGF0aD86IHN0cmluZztcclxuICAgIHF1ZXJ5U3RyaW5nPzogc3RyaW5nO1xyXG4gICAgcm91dGU/OiBQYW5lUm91dGU7XHJcbiAgICBkYXRhPzogUGFyYW1NYXA7XHJcbiAgICBwYXJhbXM/OiBQYXJhbU1hcDtcclxuICAgIHF1ZXJ5UGFyYW1zPzogUGFyYW1NYXA7XHJcbiAgICBwYXJlbnQ/OiBQYW5lUmVmPGFueT47XHJcbiAgICBwb2xpY3k/OiBPcGVuUG9saWN5O1xyXG4gICAgc3dhcD86IGJvb2xlYW47XHJcbiAgICBmb2N1cz86IGJvb2xlYW47XHJcbiAgfSkge1xyXG4gICAgY29uc3QgeyBwb2xpY3kgfSA9IG9wdGlvbnMsXHJcbiAgICAgIGRpYWxvZyA9IChwb2xpY3kgJiBPcGVuUG9saWN5LkRpYWxvZykgPT0gT3BlblBvbGljeS5EaWFsb2csXHJcbiAgICAgIGV4cGFuZGFibGUgPSAocG9saWN5ICYgT3BlblBvbGljeS5FeHBhbmRhYmxlKSA9PSBPcGVuUG9saWN5LkV4cGFuZGFibGUsXHJcbiAgICAgIGRpc21pc3NhYmxlID0gKHBvbGljeSAmIE9wZW5Qb2xpY3kuRGlzbWlzc2FibGUpID09IE9wZW5Qb2xpY3kuRGlzbWlzc2FibGU7XHJcblxyXG4gICAgY29uc3QgdGFiID0gdGhpcy5fY29uc3RyYWN0PFQ+KGNvbXBvbmVudCxcclxuICAgICAge1xyXG4gICAgICAgIG1vZGU6ICd0YWInLFxyXG4gICAgICAgIGV4cGFuZGVkOiBmYWxzZSxcclxuICAgICAgICAuLi5vcHRpb25zLFxyXG4gICAgICAgIGRpYWxvZyxcclxuICAgICAgICBkaXNtaXNzYWJsZSxcclxuICAgICAgICBleHBhbmRhYmxlXHJcbiAgICAgIH0pO1xyXG4gICAgdGhpcy50YWJzLnB1c2godGFiKTtcclxuICAgIHRoaXMuX2NkLmRldGVjdENoYW5nZXMoKTtcclxuICAgIHRoaXMuX3JvdXRlci5fZXZlbnRzJC5uZXh0KG5ldyBOYXZpZ2F0aW9uU3RhcnQodGFiKSk7XHJcbiAgICBpZiAodGFiLmdyb3VwICYmIHRoaXMuZ3JvdXAgIT09IHRhYi5ncm91cCAmJiBvcHRpb25zLnN3YXAgIT09IGZhbHNlKSB7XHJcbiAgICAgIGxldCBpID0gMCwgc3dhcCA9IGZhbHNlO1xyXG4gICAgICBkbyB7XHJcbiAgICAgICAgaWYgKHRoaXMudGFic1tpXS5ncm91cCAhPT0gdGFiLmdyb3VwKSB7XHJcbiAgICAgICAgICB0aGlzLl9kZXN0cm95UGFuZSh0aGlzLnRhYnNbaV0pO1xyXG4gICAgICAgICAgdGhpcy50YWJzLnNwbGljZShpLCAxKTtcclxuICAgICAgICAgIHN3YXAgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICBpKytcclxuICAgICAgfSB3aGlsZSAoaSA8IHRoaXMudGFicy5sZW5ndGgpO1xyXG4gICAgICBpZiAoc3dhcCkge1xyXG4gICAgICAgIHRoaXMuc3dhcFRhYiA9IHRoaXMuX2dldEhpc3RvcnlTdGVwKCk7XHJcbiAgICAgICAgdGhpcy5wcmV2R3JvdXAgPSB0aGlzLmdyb3VwO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuZ3JvdXAgPSB0YWIuZ3JvdXA7XHJcbiAgICB9XHJcbiAgICBlbHNlXHJcbiAgICAgIHRoaXMuc3dhcFRhYiA9IG51bGw7XHJcbiAgICBpZiAob3B0aW9ucy5mb2N1cyAhPT0gZmFsc2UpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZFRhYkluZGV4ID0gdGhpcy50YWJzLmxlbmd0aCAtIDE7XHJcbiAgICB9XHJcbiAgICB0aGlzLl9jZC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICByZXR1cm4gdGFiO1xyXG4gIH1cclxuXHJcbiAgZ3VpZGUobmFtZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLl9ndWlkZS5zdGFydChuYW1lKTtcclxuICB9XHJcbiAgYmFjaygpIHtcclxuICAgIHRoaXMuX25hdkJhY2sodGhpcy5zd2FwKTtcclxuICAgIHRoaXMuc3dhcCA9IG51bGw7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSBzdGVwc1xyXG4gICAqL1xyXG4gIHByaXZhdGUgYXN5bmMgX25hdkJhY2soc3RlcHM6IG51bWJlcikge1xyXG4gICAgaGlzdG9yeS5nbyhzdGVwcyAtIChoaXN0b3J5LnN0YXRlIGFzIEhpc3RvcnlTdGF0ZSkuc3RlcCk7XHJcbiAgfVxyXG4gIHRhYkJhY2soKSB7XHJcbiAgICB0aGlzLl9uYXZCYWNrKHRoaXMuc3dhcFRhYik7XHJcbiAgICB0aGlzLnN3YXBUYWIgPSBudWxsO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBcclxuICAgKiBAcGFyYW0gY29tbWFuZFxyXG4gICAqIEBwYXJhbSBwYW5lXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBhc3luYyBfcGFuZUNvbW1hbmQ8VCA9IGFueT4oY29tbWFuZDogUGFuZUNvbW1hbmQsIHBhbmU6IFBhbmVSZWY8VD4pIHtcclxuICAgIHN3aXRjaCAoY29tbWFuZCkge1xyXG4gICAgICBjYXNlICdmb2N1cyc6XHJcbiAgICAgICAge1xyXG4gICAgICAgICAgaWYgKHBhbmUubW9kZSA9PT0gJ3RhYicpIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFRhYkluZGV4ID0gdGhpcy50YWJzLmluZGV4T2YocGFuZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLnBhbmVzLmluZGV4T2YocGFuZSk7XHJcbiAgICAgICAgICAgIHRoaXMuZm9jdXMoaW5kZXgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICBjYXNlICdjbG9zZSc6XHJcbiAgICAgICAgaWYgKHBhbmUubW9kZSA9PT0gJ3RhYicpIHtcclxuICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy50YWJzLmluZGV4T2YocGFuZSk7XHJcbiAgICAgICAgICB0aGlzLmNsb3NlVGFiKGluZGV4KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMucGFuZXMuaW5kZXhPZihwYW5lKTtcclxuICAgICAgICAgIGF3YWl0IHRoaXMucmVtb3ZlQXQoaW5kZXgpO1xyXG4gICAgICAgICAgdGhpcy5fY2xlYXJQZW5kaW5nKCk7XHJcbiAgICAgICAgICBhd2FpdCB0aGlzLl9jbGVhclRhYnMoKTtcclxuICAgICAgICAgIGlmICh0aGlzLnBhbmVzLmxlbmd0aClcclxuICAgICAgICAgICAgdGhpcy5fc3luY0Jyb3dzZXJIaXN0b3J5KCk7XHJcbiAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHRoaXMuX3JvdXRlci5uYXZpZ2F0ZShERUZBVUxUX1JPVVRFKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2V4cGFuZCc6XHJcbiAgICAgICAgaWYgKHBhbmUubW9kZSA9PT0gJ3RhYicpXHJcbiAgICAgICAgICB0aGlzLmV4cGFuZFRhYigpO1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgIHRoaXMuZXhwYW5kUGFuZSgpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdyZWN5Y2xlJzoge1xyXG4gICAgICAgIGNvbnN0IHN0YXRlID0gdGhpcy5fY29uc3RydWN0SGlzdG9yeVN0YXRlKCk7XHJcbiAgICAgICAgaGlzdG9yeS5yZXBsYWNlU3RhdGUoc3RhdGUsICcnKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuICAvKipcclxuICAgKiBlc2NhcGVcclxuICAgKiBAcGFyYW0gZXZlbnRcclxuICAgKi9cclxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDprZXlkb3duLmVzY2FwZScpXHJcbiAgYXN5bmMgY29sbGFwc2UoKSB7XHJcbiAgICBpZiAoIXRoaXMudGFicy5sZW5ndGgpIHJldHVybjtcclxuICAgIGNvbnN0IGV2dCA9IG5ldyBDb2xsYXBzZU5hdmlnYXRpb24oKTtcclxuICAgIHRoaXMuX3JvdXRlci5fZXZlbnRzJC5uZXh0KGV2dCk7XHJcbiAgICBpZiAoZXZ0Ll9wcmV2ZW50RGVmYXVsdCkgcmV0dXJuO1xyXG4gICAgdGhpcy5fY2xlYXJQZW5kaW5nKCk7XHJcbiAgICBhd2FpdCB0aGlzLl9jbGVhclRhYnMoKTtcclxuICAgIHRoaXMuX3N5bmNCcm93c2VySGlzdG9yeSgpO1xyXG4gIH1cclxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6cmVzaXplJylcclxuICBvblJlc2l6ZSgpIHtcclxuICAgIHRoaXMuX3Jlc2l6aW5nLm5leHQoKTtcclxuICB9XHJcbiAgLyoqICovXHJcbiAgcHJpdmF0ZSBfcmVzaXplKCkge1xyXG4gICAgaWYgKHRoaXMucGFuZXMubGVuZ3RoID4gMSAmJiAhdGhpcy5wYW5lc1t0aGlzLnBhbmVzLmxlbmd0aCAtIDFdLnN0cmV0Y2hhYmxlKSB7XHJcbiAgICAgIGNvbnN0IGVsID0gdGhpcy5fcGFuZXNDb250YWluZXJSZWYuZWxlbWVudC5uYXRpdmVFbGVtZW50IGFzIEhUTUxEaXZFbGVtZW50LFxyXG4gICAgICAgIGNoaWxkID0gZWwubGFzdEVsZW1lbnRDaGlsZCBhcyBIVE1MRGl2RWxlbWVudDtcclxuICAgICAgY2hpbGQuc3R5bGUubWluV2lkdGggPVxyXG4gICAgICAgIChlbC5wYXJlbnRFbGVtZW50LnBhcmVudEVsZW1lbnQuY2xpZW50V2lkdGggLSBlbC5wYXJlbnRFbGVtZW50Lm9mZnNldExlZnQgLSBjaGlsZC5vZmZzZXRMZWZ0IC0gMikgKyAncHgnO1xyXG4gICAgfVxyXG4gICAgdGhpcy50YWJzLmNvbmNhdCh0aGlzLnBhbmVzKS5mb3JFYWNoKHAgPT4gcC5fZXZlbnRzJC5uZXh0KG5ldyBOYXZpZ2F0aW9uUmVzaXplKHtcclxuICAgIH0gYXMgYW55LCBwKSkpO1xyXG4gIH1cclxuICBjbG9zZVRhYihwb3NpdGlvbjogbnVtYmVyKSB7XHJcbiAgICBjb25zdCB0YWIgPSB0aGlzLnRhYnNbcG9zaXRpb25dO1xyXG4gICAgaWYgKCF0aGlzLl9jbG9zaW5nKHRhYikpIHJldHVybjtcclxuICAgIHRoaXMudGFicy5zcGxpY2UocG9zaXRpb24sIDEpO1xyXG4gICAgdGhpcy5fZGVzdHJveVBhbmUodGFiKTtcclxuICAgIHRoaXMuc2VsZWN0ZWRUYWJJbmRleCA9IHRoaXMudGFicy5sZW5ndGggPyBwb3NpdGlvbiA+IDAgPyBwb3NpdGlvbiAtIDEgOiAwIDogLTE7XHJcbiAgICB0aGlzLl9zeW5jQnJvd3Nlckhpc3RvcnkoKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogXHJcbiAgICogQHBhcmFtIHBhbmVcclxuICAgKi9cclxuICBwcml2YXRlIF9jbG9zaW5nKHBhbmU6IFBhbmVSZWY8YW55Pikge1xyXG4gICAgbGV0IGV2dCA9IG5ldyBOYXZpZ2F0aW9uQ2xvc2UocGFuZSk7XHJcbiAgICBwYW5lLl9ldmVudHMkLm5leHQoZXZ0KTtcclxuICAgIHJldHVybiAhZXZ0Ll9wcmV2ZW50RGVmYXVsdDtcclxuICB9XHJcblxyXG4gIGV4cGFuZFBhbmUoKSB7XHJcbiAgICBjb25zdCBwYW5lID0gdGhpcy5wYW5lc1t0aGlzLnNlbGVjdGVkSW5kZXhdO1xyXG4gICAgY29uc3QgZXZ0ID0gbmV3IE5hdmlnYXRpb25FeHBhbmQocGFuZS5fZXhwYW5kZWQgPSB0cnVlLCBwYW5lKTtcclxuICAgIHBhbmUuX2V2ZW50cyQubmV4dChldnQpO1xyXG4gICAgdGhpcy5fcm91dGVyLl9ldmVudHMkLm5leHQoZXZ0KTtcclxuICAgIGlmIChldnQuX3ByZXZlbnREZWZhdWx0KSByZXR1cm47XHJcbiAgICB0aGlzLnN3YXAgPSB0aGlzLl9nZXRIaXN0b3J5U3RlcCgpO1xyXG4gICAgbGV0IGkgPSAwO1xyXG4gICAgZG8ge1xyXG4gICAgICBpZiAodGhpcy5wYW5lc1tpXSAhPT0gcGFuZSkge1xyXG4gICAgICAgIHRoaXMuX2Rlc3Ryb3lQYW5lKHRoaXMucGFuZXNbaV0pO1xyXG4gICAgICAgIHRoaXMucGFuZXMuc3BsaWNlKGksIDEpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2VcclxuICAgICAgICBpKys7XHJcbiAgICB9XHJcbiAgICB3aGlsZSAoaSA8IHRoaXMucGFuZXMubGVuZ3RoKTtcclxuICAgIHRoaXMuc2VsZWN0ZWRJbmRleCA9IDA7XHJcbiAgICB0aGlzLl9zeW5jQnJvd3Nlckhpc3RvcnkoKTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfZ2V0SGlzdG9yeVN0ZXAoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiBoaXN0b3J5LnN0YXRlICYmIGhpc3Rvcnkuc3RhdGUuYml6ZG9jID8gKGhpc3Rvcnkuc3RhdGUgYXMgSGlzdG9yeVN0YXRlKS5zdGVwIDogMDtcclxuICB9XHJcblxyXG4gIGV4cGFuZFRhYigpIHtcclxuICAgIGNvbnN0IHRhYiA9IHRoaXMudGFic1t0aGlzLnNlbGVjdGVkVGFiSW5kZXhdO1xyXG4gICAgY29uc3QgZXZ0ID0gbmV3IE5hdmlnYXRpb25FeHBhbmQodGFiLl9leHBhbmRlZCA9IHRydWUsIHRhYilcclxuICAgIHRhYi5fZXZlbnRzJC5uZXh0KGV2dCk7XHJcbiAgICB0aGlzLl9yb3V0ZXIuX2V2ZW50cyQubmV4dChldnQpO1xyXG4gICAgaWYgKGV2dC5fcHJldmVudERlZmF1bHQpIHJldHVybjtcclxuICAgIHRoaXMuc3dhcCA9IHRoaXMuX2dldEhpc3RvcnlTdGVwKCk7XHJcbiAgICB0aGlzLnN3YXBUYWIgPSBudWxsO1xyXG4gICAgdGhpcy5wYW5lcy5mb3JFYWNoKHAgPT5cclxuICAgICAgdGhpcy5fZGVzdHJveVBhbmUocClcclxuICAgICk7XHJcbiAgICB0aGlzLnRhYnMuc3BsaWNlKHRoaXMuc2VsZWN0ZWRUYWJJbmRleCwgMSk7XHJcbiAgICB0aGlzLnBhbmVzLnNwbGljZSgwLCB0aGlzLnBhbmVzLmxlbmd0aCwgdGFiKTtcclxuXHJcbiAgICB0YWIuX21vZGUgPSAncGFuZSc7XHJcbiAgICB0aGlzLnNlbGVjdGVkVGFiSW5kZXggPSB0aGlzLnRhYnMubGVuZ3RoID8gMCA6IC0xO1xyXG4gICAgdGhpcy5fc3luY0Jyb3dzZXJIaXN0b3J5KCk7XHJcbiAgfVxyXG5cclxuICBzZWxlY3QocG9zaXRpb246IG51bWJlcikge1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRJbmRleCA9PT0gcG9zaXRpb24pIHJldHVybjtcclxuICAgIGlmIChwb3NpdGlvbiA9PT0gLTEpIHtcclxuICAgICAgaWYgKHRoaXMucGFuZXMubGVuZ3RoKSBwb3NpdGlvbiA9IHRoaXMucGFuZXMubGVuZ3RoIC0gMTtcclxuICAgICAgZWxzZSByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLnNlbGVjdGVkSW5kZXggPSBwb3NpdGlvbjtcclxuICAgIGNvbnN0IHBhbmUgPSB0aGlzLnBhbmVzW3Bvc2l0aW9uXTtcclxuICAgIGNvbnN0IGV2dCA9IG5ldyBOYXZpZ2F0aW9uRm9jdXMocGFuZSk7XHJcbiAgICBwYW5lLl9ldmVudHMkLm5leHQoZXZ0KTtcclxuICAgIHRoaXMuX3JvdXRlci5fZXZlbnRzJC5uZXh0KGV2dCk7XHJcbiAgICB0aGlzLl90aXRsZS5zZXQocGFuZS50aXRsZSk7XHJcbiAgfVxyXG4gIGFzeW5jIHJlbW92ZUF0KHBvc2l0aW9uOiBudW1iZXIpIHtcclxuICAgIGNvbnN0IHBhbmUgPSB0aGlzLnBhbmVzW3Bvc2l0aW9uXTtcclxuXHJcbiAgICBpZiAoIXRoaXMuX2Nsb3NpbmcocGFuZSkpIHJldHVybjtcclxuXHJcbiAgICBhd2FpdCB0aGlzLl9kaXNtaXNzKHBhbmUpO1xyXG5cclxuICAgIHRoaXMuX2Rpc2NhcmRQYW5lKHBhbmUpO1xyXG5cclxuICAgIGlmIChwb3NpdGlvbiA+PSB0aGlzLnNlbGVjdGVkSW5kZXgpXHJcbiAgICAgIHRoaXMuc2VsZWN0KC0xKTtcclxuICAgIHRoaXMuX3N5bmNCcm93c2VySGlzdG9yeSgpO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBcclxuICAgKiBAcGFyYW0gcGFuZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgYXN5bmMgX2Rpc21pc3MocGFuZTogUGFuZVJlZjxhbnk+KSB7XHJcbiAgICBjb25zdCBwYW5lcyA9IHRoaXMucGFuZXMuY29uY2F0KHRoaXMudGFicykuXHJcbiAgICAgIGZpbHRlcihzID0+IHMuZGVjZW5kZW50T2YocGFuZSkgJiYgcy5yb3V0ZSAmJiBzLnJvdXRlLmNhbkRpc21pc3MpLlxyXG4gICAgICByZXZlcnNlKCk7XHJcblxyXG4gICAgcGFuZS5yb3V0ZSAmJiBwYW5lLnJvdXRlLmNhbkRpc21pc3MgJiZcclxuICAgICAgcGFuZXMucHVzaChwYW5lKTtcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhbmVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGxldCBvayA9IGF3YWl0IHRoaXMuX2Rpc21pc3NhYmxlKHBhbmVzW2ldKTtcclxuICAgICAgaWYgKCFvaykgdGhyb3cgJyc7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSBwYW5lXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfZGlzY2FyZFBhbmUocGFuZTogUGFuZVJlZjxhbnk+KSB7XHJcbiAgICB0aGlzLnBhbmVzLmNvbmNhdCh0aGlzLnRhYnMpLlxyXG4gICAgICBmaWx0ZXIocyA9PiBzLmRlY2VuZGVudE9mKHBhbmUpKS5cclxuICAgICAgcmV2ZXJzZSgpLlxyXG4gICAgICBmb3JFYWNoKHMgPT4gdGhpcy5fZGlzY2FyZFBhbmUocykpO1xyXG4gICAgdGhpcy5fZGVzdHJveVBhbmUocGFuZSk7XHJcbiAgICBjb25zdCBpbmRleCA9IHRoaXMucGFuZXMuaW5kZXhPZihwYW5lKTtcclxuICAgIHRoaXMucGFuZXMuc3BsaWNlKGluZGV4LCAxKTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfY2xlYXJQZW5kaW5nKCkge1xyXG4gICAgdGhpcy5fcGVuZGluZy5zcGxpY2UoMCwgdGhpcy5fcGVuZGluZy5sZW5ndGgpO1xyXG4gIH1cclxuICAvKiogKi9cclxuICBwcml2YXRlIGFzeW5jIF9jbGVhclBhbmVzKCkge1xyXG4gICAgYXdhaXQgdGhpcy5fZGlzbWlzc0FsbCh0aGlzLnBhbmVzKTtcclxuICAgIHRoaXMucGFuZXMuZm9yRWFjaChwID0+IHRoaXMuX2Rlc3Ryb3lQYW5lKHApKTtcclxuICAgIHRoaXMucGFuZXMuc3BsaWNlKDAsIHRoaXMucGFuZXMubGVuZ3RoKTtcclxuICAgIHRoaXMuc2VsZWN0ZWRJbmRleCA9IC0xO1xyXG4gICAgdGhpcy5zd2FwID0gbnVsbDtcclxuICB9XHJcbiAgcHJpdmF0ZSBhc3luYyBfY2xlYXJUYWJzKCkge1xyXG4gICAgaWYgKCF0aGlzLnRhYnMubGVuZ3RoKSByZXR1cm47XHJcbiAgICBhd2FpdCB0aGlzLl9kaXNtaXNzQWxsKHRoaXMudGFicyk7XHJcbiAgICB0aGlzLnRhYnMuZm9yRWFjaCh0ID0+IHRoaXMuX2Rlc3Ryb3lQYW5lKHQpKTtcclxuICAgIHRoaXMudGFicy5zcGxpY2UoMCwgdGhpcy50YWJzLmxlbmd0aCk7XHJcbiAgICB0aGlzLnNlbGVjdGVkVGFiSW5kZXggPSAtMTtcclxuICAgIHRoaXMuc3dhcFRhYiA9IG51bGw7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSBwYW5lc1xyXG4gICAqL1xyXG4gIHByaXZhdGUgYXN5bmMgX2Rpc21pc3NBbGwocGFuZXM6IFBhbmVSZWZbXSkge1xyXG4gICAgZm9yIChsZXQgcGFuZSBvZiBwYW5lcy5cclxuICAgICAgZmlsdGVyKHMgPT4gcy5yb3V0ZSAmJiBzLnJvdXRlLmNhbkRpc21pc3MpKSB7XHJcbiAgICAgIGxldCBvayA9IGF3YWl0IHRoaXMuX2Rpc21pc3NhYmxlKHBhbmUpO1xyXG4gICAgICBpZiAoIW9rKVxyXG4gICAgICAgIHRocm93ICcnO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogXHJcbiAgICogQHBhcmFtIHBhbmVcclxuICAgKi9cclxuICBwcml2YXRlIF9kaXNtaXNzYWJsZShwYW5lOiBQYW5lUmVmPGFueT4pIHtcclxuICAgIGNvbnN0IHsgaW5zdGFuY2UsIHJvdXRlOiB7IGNhbkRpc21pc3MgfSB9ID0gcGFuZTtcclxuICAgIGNvbnN0IGRpc21pc3NhYmxlID0gdGhpcy5faW5qZWN0b3IuZ2V0KGNhbkRpc21pc3MpIGFzIENhbkRpc21pc3M8YW55PjtcclxuICAgIGNvbnN0IG9rID0gZGlzbWlzc2FibGUub25EaXNtaXNzKGluc3RhbmNlKTtcclxuICAgIGlmIChpc0Jvb2xlYW4ob2spKVxyXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG9rKTtcclxuICAgIGVsc2UgaWYgKGlzUHJvbWlzZShvaykpXHJcbiAgICAgIHJldHVybiBvaztcclxuICAgIGVsc2VcclxuICAgICAgcmV0dXJuIG9rLnRvUHJvbWlzZSgpO1xyXG4gIH1cclxuICBzY3JvbGxUbyhpbmRleDogbnVtYmVyKSB7XHJcbiAgICBjb25zdCBpdGVtID0gdGhpcy5fY2hpbGRyZW4uaXRlbShpbmRleCkgYXMgSFRNTERpdkVsZW1lbnQ7XHJcbiAgICBpdGVtICYmIGl0ZW0uc2Nyb2xsSW50b1ZpZXcoeyBiZWhhdmlvcjogJ3Ntb290aCcsIGlubGluZTogJ2VuZCcsIGJsb2NrOiAnZW5kJyB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0IF9jaGlsZHJlbigpIHtcclxuICAgIHJldHVybiB0aGlzLl9wYW5lc0NvbnRhaW5lclJlZi5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLnBhbmUtY29udGVudCcpO1xyXG4gIH1cclxuICBkb25lKCkge1xyXG4gICAgdGhpcy5lbmFibGVOYXZpZ2F0aW9uQXJyb3dzKCk7XHJcbiAgICB0aGlzLl9yZXNpemUoKTtcclxuICB9XHJcbiAgZW5hYmxlTmF2aWdhdGlvbkFycm93cyhfPzogRXZlbnQpIHtcclxuICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMuX3BhbmVzQ29udGFpbmVyUmVmLmVsZW1lbnQubmF0aXZlRWxlbWVudCxcclxuICAgICAgc2Nyb2xsTGVmdCA9IE1hdGgucm91bmQoY29udGFpbmVyLnNjcm9sbExlZnQpO1xyXG4gICAgdGhpcy5uZXh0ID0gdGhpcy5fcnRsID8gY29udGFpbmVyLmNsaWVudFdpZHRoIC0gc2Nyb2xsTGVmdCA8IGNvbnRhaW5lci5zY3JvbGxXaWR0aCA6XHJcbiAgICAgIHNjcm9sbExlZnQgKyBjb250YWluZXIuY2xpZW50V2lkdGggPCBjb250YWluZXIuc2Nyb2xsV2lkdGg7XHJcbiAgICB0aGlzLnByZXYgPSB0aGlzLl9ydGwgPyBzY3JvbGxMZWZ0IDwgMCA6IHNjcm9sbExlZnQgPiAwO1xyXG4gIH1cclxuICBzY3JvbGxCeShuOiBudW1iZXIpIHtcclxuICAgIGNvbnN0IGxlZnQgPSBuICogKHRoaXMuX3J0bCA/IC0xIDogMSk7XHJcbiAgICB0aGlzLl9wYW5lc0NvbnRhaW5lclJlZi5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuc2Nyb2xsQnkoeyBiZWhhdmlvcjogJ3Ntb290aCcsIGxlZnQgfSk7XHJcbiAgfVxyXG4gIGZvY3VzKGluZGV4KSB7XHJcbiAgICBjb25zdCBlbCA9IHRoaXMuX2NoaWxkcmVuLml0ZW0oaW5kZXgpIGFzIEhUTUxEaXZFbGVtZW50O1xyXG4gICAgZWwuZm9jdXMoKTtcclxuICB9XHJcbiAgb25QYW5lUmVzaXplKHBhbmU6IFBhbmVSZWY8YW55PiwgZXZlbnQ6IE1vdXNlRXZlbnQpIHtcclxuICAgIGNvbnN0IGVsID0gKGV2ZW50LnNyY0VsZW1lbnQgYXMgSFRNTERpdkVsZW1lbnQpLnByZXZpb3VzRWxlbWVudFNpYmxpbmcgYXMgSFRNTERpdkVsZW1lbnQ7XHJcblxyXG4gICAgY29uc3QgLy8gcmVtZW1iZXIgbW91c2UgZG93biBpbmZvXHJcbiAgICAgIHdpZHRoID0gZWwuY2xpZW50V2lkdGgsXHJcbiAgICAgIGQgPSB0aGlzLl9ydGwgPyAtMSA6IDE7XHJcblxyXG4gICAgKGV2ZW50LnNyY0VsZW1lbnQgYXMgSFRNTERpdkVsZW1lbnQpLmNsYXNzTGlzdC5hZGQoJ3Jlc2l6aW5nJyk7XHJcblxyXG4gICAgdGhpcy5kcmFnZ2luZyA9IHRydWU7XHJcblxyXG4gICAgZG9jdW1lbnQub25tb3VzZW1vdmUgPSBvbk1vdXNlTW92ZTtcclxuICAgIGRvY3VtZW50Lm9ubW91c2V1cCA9ICgpID0+IHtcclxuICAgICAgKGV2ZW50LnNyY0VsZW1lbnQgYXMgSFRNTERpdkVsZW1lbnQpLmNsYXNzTGlzdC5yZW1vdmUoJ3Jlc2l6aW5nJyk7XHJcbiAgICAgIGRvY3VtZW50Lm9ubW91c2Vtb3ZlID0gZG9jdW1lbnQub25tb3VzZXVwID0gbnVsbDtcclxuICAgICAgdGhpcy5kcmFnZ2luZyA9IGZhbHNlO1xyXG4gICAgfTtcclxuICAgIGZ1bmN0aW9uIG9uTW91c2VNb3ZlKGUpIHtcclxuXHJcbiAgICAgIGNvbnN0IGRlbHRhID0gKGUuY2xpZW50WCAtIGV2ZW50LmNsaWVudFgpICogZDtcclxuICAgICAgZWwuc3R5bGUud2lkdGggPSBlbC5zdHlsZS5taW5XaWR0aFxyXG4gICAgICAgID0gTWF0aC5tYXgod2lkdGggKyBkZWx0YSwgMzUwKSArICdweCc7XHJcbiAgICAgIHBhbmUuX2V2ZW50cyQubmV4dChuZXcgTmF2aWdhdGlvblJlc2l6ZSh7fSBhcyBhbnksIHBhbmUpKTtcclxuICAgIH1cclxuICB9XHJcbiAgb25UYWJSZXNpemUoZXZlbnQ6IE1vdXNlRXZlbnQpIHtcclxuICAgIGNvbnN0IGVsID0gKGV2ZW50LnNyY0VsZW1lbnQgYXMgSFRNTERpdkVsZW1lbnQpLm5leHRFbGVtZW50U2libGluZyBhcyBIVE1MRGl2RWxlbWVudDtcclxuXHJcbiAgICBjb25zdFxyXG4gICAgICBtZSA9IHRoaXMsXHJcbiAgICAgIC8vIHJlbWVtYmVyIG1vdXNlIGRvd24gaW5mb1xyXG4gICAgICB3aWR0aCA9IGVsLmNsaWVudFdpZHRoLFxyXG4gICAgICBkID0gdGhpcy5fcnRsID8gMSA6IC0xO1xyXG5cclxuICAgIChldmVudC5zcmNFbGVtZW50IGFzIEhUTUxEaXZFbGVtZW50KS5jbGFzc0xpc3QuYWRkKCdyZXNpemluZycpO1xyXG5cclxuICAgIHRoaXMuZHJhZ2dpbmcgPSB0cnVlO1xyXG5cclxuICAgIGRvY3VtZW50Lm9ubW91c2Vtb3ZlID0gb25Nb3VzZU1vdmU7XHJcbiAgICBkb2N1bWVudC5vbm1vdXNldXAgPSAoKSA9PiB7XHJcbiAgICAgIChldmVudC5zcmNFbGVtZW50IGFzIEhUTUxEaXZFbGVtZW50KS5jbGFzc0xpc3QucmVtb3ZlKCdyZXNpemluZycpO1xyXG4gICAgICBkb2N1bWVudC5vbm1vdXNlbW92ZSA9IGRvY3VtZW50Lm9ubW91c2V1cCA9IG51bGw7XHJcbiAgICAgIHRoaXMuZHJhZ2dpbmcgPSBmYWxzZTtcclxuICAgICAgbWUuZW5hYmxlTmF2aWdhdGlvbkFycm93cygpO1xyXG4gICAgICB0aGlzLl9yZXNpemUoKTtcclxuICAgIH07XHJcbiAgICBmdW5jdGlvbiBvbk1vdXNlTW92ZShlKSB7XHJcblxyXG4gICAgICAvLyBwcmV2ZW50IG5lZ2F0aXZlLXNpemVkIGVsZW1lbnRzXHJcbiAgICAgIGNvbnN0IGRlbHRhID0gTWF0aC5tYXgoKGUuY2xpZW50WCAtIGV2ZW50LmNsaWVudFgpICogZCwgLXdpZHRoKTtcclxuICAgICAgZWwuc3R5bGUud2lkdGggPSBlbC5zdHlsZS5taW5XaWR0aCA9ICh3aWR0aCArIGRlbHRhKSArICdweCc7XHJcbiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCd0YWJzJywgZWwuc3R5bGUud2lkdGgpO1xyXG4gICAgfVxyXG4gIH1cclxuICBwcml2YXRlIF9kZXN0cm95UGFuZShwYW5lOiBQYW5lUmVmKSB7XHJcbiAgICBwYW5lLl9kZXN0cm95KCk7XHJcbiAgICBjb25zdCBldnQgPSBuZXcgTmF2aWdhdGlvbkVuZChwYW5lKTtcclxuICAgIHBhbmUuX2V2ZW50cyQubmV4dChldnQpO1xyXG4gICAgdGhpcy5fcm91dGVyLl9ldmVudHMkLm5leHQoZXZ0KTtcclxuICB9XHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLl9kZXN0cm95Lm5leHQoKTtcclxuICAgIHRoaXMuX2Rlc3Ryb3kuY29tcGxldGUoKTtcclxuICB9XHJcbn1cclxuXHJcbmNvbnN0IFBBTkVfUEFSQU1TX1JFR0VYID0gLyg6W1xcd1xcLV0rKS9nO1xyXG5cclxuZnVuY3Rpb24gcHJlcGFyZVJvdXRlcyhyb3V0ZXM6IFBhbmVSb3V0ZVtdLCB0cmVlUGF0aD86IHN0cmluZyk6IEV4dGVuZGVkUm91dGVbXSB7XHJcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCByb3V0ZXMubGVuZ3RoOyBpKyspIHtcclxuICAgIGxldCByb3V0ZSA9IHJvdXRlc1tpXSwgZnVsbFBhdGggPSAodHJlZVBhdGggPyAodHJlZVBhdGggKyAnLycpIDogJycpICsgcm91dGUucGF0aDtcclxuXHJcbiAgICBPYmplY3QuYXNzaWduKHJvdXRlLCB7XHJcbiAgICAgIGZ1bGxQYXRoLFxyXG4gICAgICByZWdFeDogbmV3IFJlZ0V4cCgnXicgKyBmdWxsUGF0aC5cclxuICAgICAgICByZXBsYWNlKCcvJywgJ1xcXFwvJykuXHJcbiAgICAgICAgcmVwbGFjZShQQU5FX1BBUkFNU19SRUdFWCwgZSA9PiBgKD88JHtlLnN1YnN0cigxKX0+W1xcXFx3QFxcXFwtXSopYCkpXHJcbiAgICB9KTtcclxuICAgIGlmIChyb3V0ZS5jaGlsZHJlbikge1xyXG4gICAgICBsZXQgY2hpbGRyZW4gPSBwcmVwYXJlUm91dGVzKHJvdXRlLmNoaWxkcmVuLCBmdWxsUGF0aCk7XHJcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgY2hpbGRyZW4ubGVuZ3RoOyBqKyspXHJcbiAgICAgICAgT2JqZWN0LmFzc2lnbihjaGlsZHJlbltqXSwge1xyXG4gICAgICAgICAgcGFyZW50OiByb3V0ZVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuICByZXR1cm4gcm91dGVzIGFzIEV4dGVuZGVkUm91dGVbXTtcclxufVxyXG5cclxuaW50ZXJmYWNlIEV4dGVuZGVkUm91dGUgZXh0ZW5kcyBQYW5lUm91dGUge1xyXG4gIGZ1bGxQYXRoOiBzdHJpbmc7XHJcbiAgcmVnRXg6IFJlZ0V4cDtcclxuICBwYXJlbnQ/OiBFeHRlbmRlZFJvdXRlO1xyXG4gIGNoaWxkcmVuPzogRXh0ZW5kZWRSb3V0ZVtdO1xyXG59XHJcbmludGVyZmFjZSBIaXN0b3J5U3RhdGUge1xyXG4gIGJpemRvYzogdHJ1ZTtcclxuICBzdGVwOiBudW1iZXI7XHJcbiAgc3dhcD86IG51bWJlcjtcclxuICBzd2FwVGFiPzogbnVtYmVyO1xyXG4gIGdyb3VwPzogc3RyaW5nO1xyXG4gIHByZXZHcm91cD86IHN0cmluZztcclxuICBwYW5lczogYW55W107XHJcbiAgdGFiczogYW55W107XHJcbiAgc2VsZWN0ZWRUYWJJbmRleD86IG51bWJlcjtcclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwicGFuZXNcIj5cclxuICA8ZGl2IGNsYXNzPVwic2Nyb2xsLWFycm93XCIgKGNsaWNrKT1cInNjcm9sbEJ5KC00MDApXCIgbWF0UmlwcGxlIFttYXRSaXBwbGVVbmJvdW5kZWRdPVwidHJ1ZVwiIFttYXRSaXBwbGVDZW50ZXJlZF09XCJ0cnVlXCIgW21hdFJpcHBsZUNvbG9yXT1cImFjY2VudFwiXHJcbiAgICAgICAqbmdJZj1cInByZXZcIj5cclxuICAgIDxpIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMgbWF0LWljb24tcnRsLW1pcnJvclwiPlxyXG4gICAgICBhcnJvd19iYWNrX2lvc1xyXG4gICAgPC9pPlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgY2xhc3M9XCJwYW5lcy10aXRsZVwiIFtAdGl0bGVdPVwidGl0bGVBbmltYXRpb25cIj5cclxuICAgIDxoMT5cclxuICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cImJhY2soKVwiICpuZ0lmPVwic3dhcFwiIFtiaXpkb2NUb29sdGlwXT1cIidCYWNrJ3x0cmFuc2xhdGVcIj48bWF0LWljb24gY2xhc3M9XCJtYXQtaWNvbi1ydGwtbWlycm9yXCI+YXJyb3dfY2lyY2xlX2xlZnQ8L21hdC1pY29uPjwvYnV0dG9uPlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBwIG9mIHBhbmVzOyBsZXQgZmlyc3QgPSBmaXJzdFwiPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwiYnJlYWRjcnVtYnNcIiAqbmdJZj1cIiFmaXJzdFwiPlxcPC9zcGFuPlxyXG4gICAgICAgIHt7cC50aXRsZX19XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwiZ3VpZGUocGFuZXNbMF0uZ3VpZGUpXCIgKm5nSWY9XCJwYW5lc1swXT8uZ3VpZGVcIiBbYml6ZG9jVG9vbHRpcF09XCInSGVscCd8dHJhbnNsYXRlXCI+PG1hdC1pY29uPmhlbHA8L21hdC1pY29uPjwvYnV0dG9uPlxyXG4gICAgPC9oMT5cclxuICAgIDxzcGFuIGNsYXNzPVwiZGl2aWRlclwiPlxyXG4gICAgPC9zcGFuPlxyXG4gICAgPGJpemRvYy1xdWlja3Rvb2xzPjwvYml6ZG9jLXF1aWNrdG9vbHM+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiAjcGFubmluZyBjbGFzcz1cInBhbmVzLWNvbnRhaW5lclwiXHJcbiAgICAgICBjZGtTY3JvbGxhYmxlXHJcbiAgICAgICBAcGFuZXNcclxuICAgICAgIChzY3JvbGwpPVwiZW5hYmxlTmF2aWdhdGlvbkFycm93cygkZXZlbnQpXCI+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBwIG9mIHBhbmVzOyBsZXQgaSA9IGluZGV4XCI+XHJcbiAgICAgIDxkaXYgKG1vdXNlZW50ZXIpPVwic2VsZWN0ZWRJbmRleCAhPT0gaSAmJiAhZHJhZ2dpbmcgJiYgc2VsZWN0KGkpXCJcclxuICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0KGkpXCJcclxuICAgICAgICAgICBbY2xhc3MuYWN0aXZlXT1cInNlbGVjdGVkSW5kZXggPT09IGlcIiBjbGFzcz1cInBhbmUtY29udGVudFwiIEBwYW5lPlxyXG4gICAgICAgIDxuZ3gtY29tcG9uZW50LW91dGxldCBbdHlwZV09XCJwLmNvbXBvbmVudFwiIFtpbmplY3Rvcl09XCJwLmluamVjdG9yXCIgKGNyZWF0ZSk9XCJwLl9pbnN0YW5jZSA9ICRldmVudFwiPjwvbmd4LWNvbXBvbmVudC1vdXRsZXQ+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwicGFuZS1zZXBhcmF0b3JcIiAqbmdJZj1cImkgPCBwYW5lcy5sZW5ndGggLSAxXCIgKG1vdXNlZG93bik9XCJvblBhbmVSZXNpemUocCwgJGV2ZW50KVwiPiZuYnNwOzwvZGl2PlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiBjbGFzcz1cImJhY2tkcm9wXCIgKm5nSWY9XCJkaWFsb2dcIiAoY2xpY2spPVwiY2xvc2VUYWIoc2VsZWN0ZWRUYWJJbmRleClcIj48L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwic2Nyb2xsLWFycm93IGZvcndhcmRcIlxyXG4gICAgICAgKm5nSWY9XCJuZXh0XCI+XHJcbiAgICA8aSBjbGFzcz1cIm1hdGVyaWFsLWljb25zIG1hdC1pY29uLXJ0bC1taXJyb3JcIiBtYXRSaXBwbGUgW21hdFJpcHBsZVVuYm91bmRlZF09XCJ0cnVlXCIgW21hdFJpcHBsZUNlbnRlcmVkXT1cInRydWVcIiBbbWF0UmlwcGxlUmFkaXVzXT1cIjMwXCIgW21hdFJpcHBsZUNvbG9yXT1cImFjY2VudFwiXHJcbiAgICAgICAoY2xpY2spPVwic2Nyb2xsQnkoNDAwKVwiPlxyXG4gICAgICBhcnJvd19mb3J3YXJkX2lvc1xyXG4gICAgPC9pPlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuPG5nLWNvbnRhaW5lciAqbmdJZj1cInRhYnMubGVuZ3RoXCI+XHJcbiAgPGRpdiBjbGFzcz1cInRhYnMtc2VwYXJhdG9yXCIgKG1vdXNlZG93bik9XCJvblRhYlJlc2l6ZSgkZXZlbnQpXCI+Jm5ic3A7PC9kaXY+XHJcbiAgPGRpdiBjbGFzcz1cIm1hdC1lbGV2YXRpb24tejE4IHRhYnNcIiBbQHRhYnNdPVwidGFic0FuaW1hdGlvblwiIChAdGFicy5kb25lKT1cImRvbmUoKVwiICN0YWJpbmc+XHJcbiAgICA8ZGl2IGNsYXNzPVwicm93IHRhYnMtdGl0bGVcIj5cclxuICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cInRhYkJhY2soKVwiICpuZ0lmPVwic3dhcFRhYlwiIFtiaXpkb2NUb29sdGlwXT1cInByZXZHcm91cCB8fCAoJ0JhY2snfHRyYW5zbGF0ZSlcIj48bWF0LWljb24gY2xhc3M9XCJtYXQtaWNvbi1ydGwtbWlycm9yXCI+YXJyb3dfYmFjazwvbWF0LWljb24+PC9idXR0b24+XHJcbiAgICAgIDxoMj57e2dyb3VwfX08L2gyPlxyXG4gICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwiZXhwYW5kVGFiKClcIiBbYml6ZG9jVG9vbHRpcF09XCInRXhwYW5kJ3wgdHJhbnNsYXRlXCI+PG1hdC1pY29uIGlubGluZT1cInRydWVcIiBjbGFzcz1cIm1hdC1pY29uLXJ0bC1taXJyb3JcIj5vcGVuX2luX2Z1bGw8L21hdC1pY29uPjwvYnV0dG9uPlxyXG4gICAgICA8IS0tKm5nSWY9XCJzZWxlY3RlZFRhYkluZGV4IDw9PCAtMSAmJiB0YWJzW3NlbGVjdGVkVGFiSW5kZXhdLmV4cGFuZGFibGVcIi0tPlxyXG4gICAgICA8c3BhbiBjbGFzcz1cImRpdmlkZXJcIj48L3NwYW4+XHJcbiAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJjb2xsYXBzZSgpXCIgYml6ZG9jVG9vbHRpcD1cIkVzY1wiPjxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+PC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxuYXYgbWF0LXRhYi1uYXYtYmFyIGNvbG9yPVwiYWNjZW50XCIgW2Rpc2FibGVQYWdpbmF0aW9uXT1cInRydWVcIj5cclxuICAgICAgPGEgbWF0LXRhYi1saW5rICpuZ0Zvcj1cImxldCB0IG9mIHRhYnM7IGxldCBpID0gaW5kZXhcIiBjbGFzcz1cIm1hdC10YWItbGlua1wiXHJcbiAgICAgICAgIChjbGljayk9XCJzZWxlY3RlZFRhYkluZGV4ID0gaVwiXHJcbiAgICAgICAgIFthY3RpdmVdPVwic2VsZWN0ZWRUYWJJbmRleCA9PT0gaVwiPlxyXG4gICAgICAgIDxtYXQtaWNvbiBbbWF0QmFkZ2VdPVwidC5iYWRnZVwiIFttYXRCYWRnZUhpZGRlbl09XCIhdC5iYWRnZVwiIG1hdEJhZGdlU2l6ZT1cInNtYWxsXCIgbWF0QmFkZ2VDb2xvcj1cImFjY2VudFwiPnt7dC5pY29ufX08L21hdC1pY29uPiZuYnNwO1xyXG4gICAgICAgIHt7dC50aXRsZX19XHJcbiAgICAgICAgPG1hdC1pY29uICpuZ0lmPVwidC5kaXNtaXNzYWJsZVwiIChjbGljayk9XCJjbG9zZVRhYihpKVwiIGNsYXNzPVwidG9vbFwiPmNsb3NlPC9tYXQtaWNvbj5cclxuICAgICAgICA8IS0taW5saW5lPVwidHJ1ZVwiLS0+XHJcbiAgICAgIDwvYT5cclxuICAgIDwvbmF2PlxyXG4gICAgPGRpdiAqbmdGb3I9XCJsZXQgdCBvZiB0YWJzOyBsZXQgaSA9IGluZGV4XCIgW3N0eWxlLmRpc3BsYXldPVwic2VsZWN0ZWRUYWJJbmRleCA9PT0gaSA/ICcnOiAnbm9uZSdcIiBjbGFzcz1cInRhYlwiIFtAdGFiXT1cInNlbGVjdGVkVGFiSW5kZXhcIj5cclxuICAgICAgPG5neC1jb21wb25lbnQtb3V0bGV0IFt0eXBlXT1cInQuY29tcG9uZW50XCIgW2luamVjdG9yXT1cInQuaW5qZWN0b3JcIiAoY3JlYXRlKT1cInQuX2luc3RhbmNlID0gJGV2ZW50XCI+PC9uZ3gtY29tcG9uZW50LW91dGxldD5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L25nLWNvbnRhaW5lcj5cclxuIl19
|
1141
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xvdHMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyaWVzL2NvcmUvc3JjL2xpYi9jb3JlL3Nsb3RzL3Nsb3RzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnJhcmllcy9jb3JlL3NyYy9saWIvY29yZS9zbG90cy9zbG90cy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXFCLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUErQixNQUFNLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFLFlBQVksRUFBYyxNQUFNLGVBQWUsQ0FBQztBQUUvSyxPQUFPLEVBQUUsWUFBWSxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM3QyxPQUFPLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQy9FLE9BQU8sRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUE0QixvQkFBb0IsRUFBRSxlQUFlLEVBQWtCLGVBQWUsRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLGVBQWUsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsa0JBQWtCLEVBQUUsY0FBYyxFQUFFLGdCQUFnQixFQUFZLGdCQUFnQixHQUFHLE1BQU0sWUFBWSxDQUFDO0FBR25VLE9BQU8sRUFBRSxhQUFhLEVBQWlCLE1BQU0sc0JBQXNCLENBQUM7QUFFcEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsbUJBQW1CLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2hKLE9BQU8sRUFBZ0QsY0FBYyxF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RXhDLFNBQVMsYUFBYSxDQUFDLE1BQW1CLEVBQUUsUUFBaUI7SUFDM0QsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDdEMsSUFBSSxLQUFLLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUM7UUFFbEYsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUU7WUFDbkIsUUFBUTtZQUNSLEtBQUssRUFBRSxJQUFJLE1BQU0sQ0FBQyxHQUFHLEdBQUcsUUFBUTtnQkFDOUIsT0FBTyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUM7Z0JBQ25CLE9BQU8sQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUM7U0FDcEUsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxLQUFLLENBQUMsUUFBUSxFQUFFO1lBQ2xCLElBQUksUUFBUSxHQUFHLGFBQWEsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQ3ZELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRTtnQkFDdEMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUU7b0JBQ3pCLE1BQU0sRUFBRSxLQUFLO2lCQUNkLENBQUMsQ0FBQztTQUNOO0tBQ0Y7SUFDRCxPQUFPLE1BQXlCLENBQUM7QUFDbkMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5qZWN0LCBJbmplY3RvciwgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dCwgVmlld0NoaWxkLCBWaWV3Q29udGFpbmVyUmVmLCBIb3N0TGlzdGVuZXIsIEVsZW1lbnRSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ2RrRHJhZ0Ryb3AgfSBmcm9tICdAYW5ndWxhci9jZGsvZHJhZy1kcm9wJztcclxuaW1wb3J0IHsgaXNPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IHRha2VVbnRpbCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBpc0FycmF5LCBpc0Jvb2xlYW4sIGlzRGF0ZSwgaXNQcm9taXNlLCBpc1N0cmluZyB9IGZyb20gJy4uL2Z1bmN0aW9ucyc7XHJcbmltcG9ydCB7IFBBTkVTX0RBVEEsIFBhbmVSZWYsIFBhbmVPcHRpb25zLCBQYW5lQ29tbWFuZCwgUXVlcnlQYXJhbU5hdmlnYXRpb24sIFBhcmFtTmF2aWdhdGlvbiwgTmF2aWdhdGlvbk1vZGUsIE5hdmlnYXRpb25TdGFydCwgTmF2aWdhdGlvbkNsb3NlLCBOYXZpZ2F0aW9uRW5kLCBOYXZpZ2F0aW9uRm9jdXMsIFBBVEhfQ0hBUiwgUVVFUllfQ0hBUiwgQVJHX0NIQVIsIFBBTkVfQ0hBUiwgQ29sbGFwc2VOYXZpZ2F0aW9uLCBCYWNrTmF2aWdhdGlvbiwgTmF2aWdhdGlvbkV4cGFuZCwgUGFuZU1vZGUsIE5hdmlnYXRpb25SZXNpemUsIH0gZnJvbSAnLi9wYW5lLXJlZic7XHJcbmltcG9ydCB7IFBhbmVzUm91dGVyIH0gZnJvbSAnLi9yb3V0ZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IFNlc3Npb25TZXJ2aWNlIH0gZnJvbSAnLi4vc2Vzc2lvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ2RrU2Nyb2xsYWJsZSwgQ29tcG9uZW50VHlwZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcclxuaW1wb3J0IHsgV2luZG93VGl0bGVTZXJ2aWNlIH0gZnJvbSAnLi4vd2luZG93LXRpdGxlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBwYW5lc0FuaW1hdGlvbiwgcGFuZUFuaW1hdGlvbiwgcGFuZXNUaXRsZUFuaW1hdGlvbiwgcGFyYW1BbmltYXRpb24sIHF1ZXJ5QW5pbWF0aW9uLCB0YWJBbmltYXRpb24sIHRhYnNBbmltYXRpb24gfSBmcm9tICcuLi9hbmltYXRpb25zJztcclxuaW1wb3J0IHsgUGFuZVJlc29sdmUsIFBhbmVSb3V0ZSwgUGFyYW1NYXAsIENhbkRpc21pc3MsIERFRkFVTFRfUE9MSUNZLCBPcGVuUG9saWN5IH0gZnJvbSAnLi4vY29uZmlndXJhdGlvbic7XHJcbmltcG9ydCB7IEd1aWRlU2VydmljZSB9IGZyb20gJy4uL2d1aWRlL2d1aWRlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgUmlwcGxlQ29uZmlnIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY29yZSc7XHJcbmRlY2xhcmUgZ2xvYmFsIHtcclxuICBpbnRlcmZhY2UgV2luZG93IHtcclxuICAgIHJlbW92ZUFsbExpc3RlbmVycyhuYW1lPzogc3RyaW5nKTtcclxuICB9XHJcbn1cclxuXHJcbmNvbnN0IERFRkFVTFRfUk9VVEUgPSBbJ2Rhc2hib2FyZCddO1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2JpemRvYy1wYW5lcy1vdXRsZXQnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9zbG90cy5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vc2xvdHMuY29tcG9uZW50LnNjc3MnXSxcclxuICBhbmltYXRpb25zOiBbcGFuZXNBbmltYXRpb24sXHJcbiAgICBwYW5lc1RpdGxlQW5pbWF0aW9uLFxyXG4gICAgcGFuZUFuaW1hdGlvbixcclxuICAgIHBhcmFtQW5pbWF0aW9uLFxyXG4gICAgcXVlcnlBbmltYXRpb24sXHJcbiAgICB0YWJzQW5pbWF0aW9uLFxyXG4gICAgdGFiQW5pbWF0aW9uXHJcbiAgXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgU2xvdHNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgQE91dHB1dCgpIHJlYWRvbmx5IGRpYWxvZ0NoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcclxuICBAVmlld0NoaWxkKCdwYW5uaW5nJywgeyByZWFkOiBWaWV3Q29udGFpbmVyUmVmLCBzdGF0aWM6IHRydWUgfSkgX3BhbmVzQ29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmO1xyXG4gIEBWaWV3Q2hpbGQoJ3RhYmluZycpIF90YWJzRWxlbWVudDogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKENka1Njcm9sbGFibGUsIHsgc3RhdGljOiB0cnVlIH0pIF9zY3JvbGxhYmxlOiBDZGtTY3JvbGxhYmxlO1xyXG4gIHRpdGxlQW5pbWF0aW9uID0gMDtcclxuICBncm91cDogc3RyaW5nO1xyXG4gIHN3YXA/OiBudW1iZXI7XHJcbiAgc3dhcFRhYj86IG51bWJlcjtcclxuICBwcmV2R3JvdXA/OiBzdHJpbmc7XHJcblxyXG4gIHJlYWRvbmx5IHBhbmVzOiBQYW5lUmVmPGFueT5bXSA9IFtdO1xyXG4gIHJlYWRvbmx5IHRhYnM6IFBhbmVSZWY8YW55PltdID0gW107XHJcbiAgcHJpdmF0ZSBfc2VsZWN0ZWRUYWJJbmRleCA9IC0xO1xyXG4gIGRpYWxvZyA9IGZhbHNlO1xyXG4gIHB1YmxpYyBnZXQgc2VsZWN0ZWRUYWJJbmRleCgpIHtcclxuICAgIHJldHVybiB0aGlzLl9zZWxlY3RlZFRhYkluZGV4O1xyXG4gIH1cclxuICBwdWJsaWMgc2V0IHNlbGVjdGVkVGFiSW5kZXgodmFsdWUpIHtcclxuICAgIHRoaXMuX3NlbGVjdGVkVGFiSW5kZXggPSB2YWx1ZTtcclxuICAgIGlmICh0aGlzLl9zZWxlY3RlZFRhYkluZGV4ID4gLTEgJiYgdGhpcy50YWJzLmF0KHRoaXMuX3NlbGVjdGVkVGFiSW5kZXgpLmRpYWxvZykge1xyXG4gICAgICB0aGlzLmRpYWxvZyA9IHRydWU7XHJcbiAgICAgIHRoaXMuZGlhbG9nQ2hhbmdlLmVtaXQodHJ1ZSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5kaWFsb2cgPSBmYWxzZTtcclxuICAgIH1cclxuICAgIHRoaXMuX3NldFRhYkFuaW1hdGlvbigpO1xyXG4gIH1cclxuICBwcml2YXRlIF9zZXRUYWJBbmltYXRpb24oKSB7XHJcbiAgICB0aGlzLnRhYnNBbmltYXRpb24gPSB7XHJcbiAgICAgIHZhbHVlOiB0aGlzLnNlbGVjdGVkVGFiSW5kZXgsXHJcbiAgICAgIHBhcmFtczoge1xyXG4gICAgICAgIHN0YXJ0V2lkdGg6IHRoaXMuX3RhYnNFbGVtZW50ID8gdGhpcy5fdGFic0VsZW1lbnQubmF0aXZlRWxlbWVudC5jbGllbnRXaWR0aCA6IDBcclxuICAgICAgfVxyXG4gICAgfTtcclxuICB9XHJcbiAgc2VsZWN0ZWRJbmRleCA9IC0xO1xyXG4gIG5leHQ6IGJvb2xlYW47XHJcbiAgcHJldjogYm9vbGVhbjtcclxuICBkcmFnZ2luZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHRhYnNBbmltYXRpb246IHtcclxuICAgIHZhbHVlOiBudW1iZXIsXHJcbiAgICBwYXJhbXM6IHtcclxuICAgICAgc3RhcnRXaWR0aDogbnVtYmVyXHJcbiAgICB9XHJcbiAgfTtcclxuICByZWFkb25seSByaXBwbGU6IFJpcHBsZUNvbmZpZyA9IHtcclxuICAgIGNvbG9yOiB0aGlzLl9zZXNzaW9uLmdldEFjY2VudCgpLFxyXG4gICAgY2VudGVyZWQ6IHRydWUsXHJcbiAgICByYWRpdXM6IDI1XHJcbiAgfVxyXG4gIGFjY2VudDogc3RyaW5nID0gdGhpcy5fc2Vzc2lvbi5nZXRBY2NlbnQoKTtcclxuICBwcml2YXRlIF9uYXZpZ2F0aW9uSW5Qcm9jZXNzOiBib29sZWFuO1xyXG4gIHByaXZhdGUgX3JlcG9zaXRvcnk6IEV4dGVuZGVkUm91dGVbXTtcclxuICBwcml2YXRlIHJlYWRvbmx5IF9wZW5kaW5nID0gW10gYXMgc3RyaW5nW107XHJcbiAgcHJpdmF0ZSByZWFkb25seSBfcnRsID0gdGhpcy5fc2Vzc2lvbi5pbnZlcnNlO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgX3Jlc2l6aW5nID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICBwcml2YXRlIHJlYWRvbmx5IF9kZXN0cm95ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIEBJbmplY3QoUEFORVNfREFUQSkgZGF0YTogRXh0ZW5kZWRSb3V0ZVtdLFxyXG4gICAgcHJpdmF0ZSBfc2Vzc2lvbjogU2Vzc2lvblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9jZDogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBwcml2YXRlIF9yb3V0ZXI6IFBhbmVzUm91dGVyLFxyXG4gICAgcHJpdmF0ZSBfdGl0bGU6IFdpbmRvd1RpdGxlU2VydmljZSxcclxuICAgIHByaXZhdGUgX2d1aWRlOiBHdWlkZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9pbmplY3RvcjogSW5qZWN0b3IpIHtcclxuICAgIF9zZXNzaW9uLnRoZW1lQ2hhbmdlLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kpKS5cclxuICAgICAgc3Vic2NyaWJlKCgpID0+IHRoaXMuYWNjZW50ID0gX3Nlc3Npb24uZ2V0QWNjZW50KCkpO1xyXG4gICAgX3JvdXRlci5fY29tbSQuXHJcbiAgICAgIHN1YnNjcmliZShlID0+IHtcclxuICAgICAgICBzd2l0Y2ggKGUpIHtcclxuICAgICAgICAgIGNhc2UgJ2NvbGxhcHNlJzpcclxuICAgICAgICAgICAgdGhpcy5jb2xsYXBzZSgpO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIHRoaXMuX3JlcG9zaXRvcnkgPSBwcmVwYXJlUm91dGVzKGRhdGEpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLl9yb3V0ZXIuX25hdmlnYXRlJC5cclxuICAgICAgc3Vic2NyaWJlKGFzeW5jIG4gPT4ge1xyXG4gICAgICAgIGNvbnN0IHsgY29tbWFuZHMsIGNvbXBvbmVudCwgcGF0aE1vZGUsIHJlbGF0aXZlVG8gfSA9IG47XHJcbiAgICAgICAgbGV0IHtcclxuICAgICAgICAgIGljb24sXHJcbiAgICAgICAgICB0aXRsZSxcclxuICAgICAgICAgIGdyb3VwLFxyXG4gICAgICAgICAgaGVscCxcclxuICAgICAgICAgIHBvbGljeSxcclxuICAgICAgICAgIHF1ZXJ5UGFyYW1zLFxyXG4gICAgICAgICAgc3RhdGVcclxuICAgICAgICB9ID0gbjtcclxuICAgICAgICBsZXRcclxuICAgICAgICAgIHF1ZXJ5U3RyaW5nOiBzdHJpbmcsXHJcbiAgICAgICAgICBwYXJhbXM6IFBhcmFtTWFwLFxyXG4gICAgICAgICAgcGFyZW50OiBQYW5lUmVmLFxyXG4gICAgICAgICAgcGF0aDogc3RyaW5nLFxyXG4gICAgICAgICAgcm91dGU6IEV4dGVuZGVkUm91dGU7XHJcblxyXG4gICAgICAgIGlmIChjb21tYW5kcyAmJiBjb21tYW5kcy5sZW5ndGgpIHtcclxuICAgICAgICAgIHBhdGggPSBuLmNvbW1hbmRzLmpvaW4oJy8nKTtcclxuICAgICAgICAgIGlmIChwYXRoLmluZGV4T2YoUVVFUllfQ0hBUikgPiAtMSkge1xyXG4gICAgICAgICAgICBjb25zdCBzZWdzID0gcGF0aC5zcGxpdChRVUVSWV9DSEFSKTtcclxuICAgICAgICAgICAgcXVlcnlTdHJpbmcgPSBzZWdzWzFdO1xyXG4gICAgICAgICAgICBxdWVyeVBhcmFtcyA9IHRoaXMuX3BhcnNlUXVlcnlQYXJhbXMocXVlcnlTdHJpbmcgfHwgJycpO1xyXG4gICAgICAgICAgICBwYXRoID0gc2Vnc1swXTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBxdWVyeVBhcmFtcyA9IG4ucXVlcnlQYXJhbXMgfHwge307XHJcbiAgICAgICAgICAgIHF1ZXJ5U3RyaW5nID0gdGhpcy5fcXVlcnlTdHJpbmcocXVlcnlQYXJhbXMpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKHBhdGhNb2RlID09PSAncmVsYXRpdmUnIHx8IHBhdGguc3RhcnRzV2l0aCgnLi4vJykpIHtcclxuICAgICAgICAgICAgcGFyZW50ID0gcmVsYXRpdmVUbyB8fCB0aGlzLnBhbmVzW3RoaXMuc2VsZWN0ZWRJbmRleF07XHJcbiAgICAgICAgICAgIGxldCBwYXJlbnRwYXRoID0gcGFyZW50LnBhdGg7XHJcbiAgICAgICAgICAgIHdoaWxlIChwYXRoLnN0YXJ0c1dpdGgoJy4uLycpKSB7XHJcbiAgICAgICAgICAgICAgcGFyZW50cGF0aCA9IHBhcmVudHBhdGguc3Vic3RyKDAsIHBhcmVudHBhdGgubGFzdEluZGV4T2YoJy8nKSk7XHJcbiAgICAgICAgICAgICAgcGF0aCA9IHBhdGguc3Vic3RyKDMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHBhdGggPSBwYXJlbnRwYXRoICsgJy8nICsgcGF0aDtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJvdXRlID0gdGhpcy5fbWF0Y2gocGF0aCk7XHJcblxyXG4gICAgICAgICAgaWYgKCFyb3V0ZSlcclxuICAgICAgICAgICAgdGhyb3cgYG5vIG1hdGNoICR7cGF0aH1gO1xyXG4gICAgICAgICAgcGFyYW1zID0gdGhpcy5fcGFyYW1zKHJvdXRlLCBwYXRoKTtcclxuICAgICAgICAgIGlmICghcG9saWN5KSBwb2xpY3kgPSByb3V0ZS5wb2xpY3kgfHwgREVGQVVMVF9QT0xJQ1k7XHJcbiAgICAgICAgICBlbHNlIGlmIChyb3V0ZS5wb2xpY3kpIHBvbGljeSB8PSByb3V0ZS5wb2xpY3k7XHJcbiAgICAgICAgICBpZiAoIWljb24pIGljb24gPSByb3V0ZS5pY29uO1xyXG4gICAgICAgICAgaWYgKCFoZWxwKSBoZWxwID0gcm91dGUuaGVscDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICBpZiAoIXBvbGljeSkgcG9saWN5ID0gREVGQVVMVF9QT0xJQ1k7XHJcbiAgICAgICAgICBpZiAoIXF1ZXJ5UGFyYW1zKSBxdWVyeVBhcmFtcyA9IHt9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKChwb2xpY3kgJiBPcGVuUG9saWN5LkNsZWFyKSA9PSBPcGVuUG9saWN5LkNsZWFyKSB7XHJcbiAgICAgICAgICB0aGlzLl9jbGVhclBlbmRpbmcoKTtcclxuICAgICAgICAgIGF3YWl0IHRoaXMuX2NsZWFyVGFicygpO1xyXG4gICAgICAgICAgaWYgKCEocG9saWN5ICYgT3BlblBvbGljeS5UYWIpKVxyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9jbGVhclBhbmVzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChjb21tYW5kcykge1xyXG4gICAgICAgICAgbGV0IGkgPSAwO1xyXG4gICAgICAgICAgaWYgKChwb2xpY3kgJiBPcGVuUG9saWN5LlRhYikgPT0gT3BlblBvbGljeS5UYWIpXHJcbiAgICAgICAgICAgIHdoaWxlIChpIDwgdGhpcy50YWJzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgIGxldCB0YWIgPSB0aGlzLnRhYnNbaV07XHJcbiAgICAgICAgICAgICAgaWYgKHBhdGggPT09IHRhYi5wYXRoKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAocXVlcnlTdHJpbmcgPT09IHRhYi5xdWVyeVN0cmluZykge1xyXG4gICAgICAgICAgICAgICAgICBpZiAoKHBvbGljeSAmIE9wZW5Qb2xpY3kuVG9nZ2xlKSA9PSBPcGVuUG9saWN5LlRvZ2dsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGFicy5zcGxpY2UoaSwgMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFRhYkluZGV4ID0gdGhpcy50YWJzLmxlbmd0aCAtIDE7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RhdGUgJiYgdGFiLl9kYXRhJC5uZXh0KHN0YXRlKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmdyb3VwID0gdGFiLmdyb3VwO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUYWJJbmRleCA9IGk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLl9uYXZRdWVyeVBhcmFtcyh0YWIsIHF1ZXJ5UGFyYW1zLCBzdGF0ZSk7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuZ3JvdXAgPSB0YWIuZ3JvdXA7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUYWJJbmRleCA9IGk7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2NkLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5fc3luY0Jyb3dzZXJIaXN0b3J5KCk7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgZWxzZSBpZiAodGFiLnJvdXRlID09PSByb3V0ZSkge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fbmF2UGFyYW1zKHBhdGgsIHRhYiwgcGFyYW1zLCBxdWVyeVBhcmFtcywgc3RhdGUpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ncm91cCA9IHRhYi5ncm91cDtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUYWJJbmRleCA9IGk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9zeW5jQnJvd3Nlckhpc3RvcnkoKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgaSsrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHdoaWxlIChpIDwgdGhpcy5wYW5lcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICBsZXQgcGFuZSA9IHRoaXMucGFuZXNbaV07XHJcbiAgICAgICAgICAgICAgaWYgKHBhdGggPT09IHBhbmUucGF0aCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHF1ZXJ5U3RyaW5nID09PSBwYW5lLnF1ZXJ5U3RyaW5nKSB7XHJcbiAgICAgICAgICAgICAgICAgIGlmICgocG9saWN5ICYgT3BlblBvbGljeS5Ub2dnbGUpID09IE9wZW5Qb2xpY3kuVG9nZ2xlKVxyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucmVtb3ZlQXQoaSk7XHJcbiAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHN0YXRlICYmIHBhbmUuX2RhdGEkLm5leHQoc3RhdGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NkLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvKGkpO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLl9uYXZRdWVyeVBhcmFtcyhwYW5lLCBxdWVyeVBhcmFtcywgc3RhdGUpO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvKGkpO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLl9zeW5jQnJvd3Nlckhpc3RvcnkoKTtcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBlbHNlIGlmIChwYW5lLnJvdXRlID09PSByb3V0ZSkge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fbmF2UGFyYW1zKHBhdGgsIHBhbmUsIHBhcmFtcywgcXVlcnlQYXJhbXMsIHN0YXRlKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3N5bmNCcm93c2VySGlzdG9yeSgpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBpKys7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChjb21tYW5kcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgaWYgKCFzdGF0ZSkgc3RhdGUgPSB7fTtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5fc3RhdGUocm91dGUsIHBhdGgsIHBhcmFtcywgc3RhdGUpO1xyXG4gICAgICAgICAgICBpZiAoKHBvbGljeSAmIE9wZW5Qb2xpY3kuVGFiKSA9PSBPcGVuUG9saWN5LlRhYilcclxuICAgICAgICAgICAgICB0aGlzLl9pbnNlcnRUYWIoY29tcG9uZW50IHx8IHJvdXRlLmNvbXBvbmVudCxcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgcXVlcnlTdHJpbmcsXHJcbiAgICAgICAgICAgICAgICAgIHBhdGgsXHJcbiAgICAgICAgICAgICAgICAgIHJvdXRlLFxyXG4gICAgICAgICAgICAgICAgICBpY29uLFxyXG4gICAgICAgICAgICAgICAgICB0aXRsZSxcclxuICAgICAgICAgICAgICAgICAgZ3JvdXAsXHJcbiAgICAgICAgICAgICAgICAgIGhlbHAsXHJcbiAgICAgICAgICAgICAgICAgIGRhdGE6IHN0YXRlLFxyXG4gICAgICAgICAgICAgICAgICBwYXJlbnQsXHJcbiAgICAgICAgICAgICAgICAgIHBhcmFtcyxcclxuICAgICAgICAgICAgICAgICAgcXVlcnlQYXJhbXMsXHJcbiAgICAgICAgICAgICAgICAgIHBvbGljeVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICB0aGlzLl9pbnNlcnRQYW5lKGNvbXBvbmVudCB8fCByb3V0ZS5jb21wb25lbnQsXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgIHF1ZXJ5U3RyaW5nLFxyXG4gICAgICAgICAgICAgICAgICBwYXRoLFxyXG4gICAgICAgICAgICAgICAgICByb3V0ZSxcclxuICAgICAgICAgICAgICAgICAgaWNvbixcclxuICAgICAgICAgICAgICAgICAgdGl0bGUsXHJcbiAgICAgICAgICAgICAgICAgIGhlbHAsXHJcbiAgICAgICAgICAgICAgICAgIGRhdGE6IHN0YXRlLFxyXG4gICAgICAgICAgICAgICAgICBwYXJlbnQsXHJcbiAgICAgICAgICAgICAgICAgIHBhcmFtcyxcclxuICAgICAgICAgICAgICAgICAgcXVlcnlQYXJhbXMsXHJcbiAgICAgICAgICAgICAgICAgIHBvbGljeVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHJvdXRlICYmXHJcbiAgICAgICAgICAgICAgdGhpcy5fc3luY0Jyb3dzZXJIaXN0b3J5KCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgY29uc3QgcGFuZSA9IChwb2xpY3kgJiBPcGVuUG9saWN5LlRhYikgPT0gT3BlblBvbGljeS5UYWIgP1xyXG4gICAgICAgICAgICAgIHRoaXMudGFic1t0aGlzLnNlbGVjdGVkVGFiSW5kZXhdIDogdGhpcy5wYW5lc1t0aGlzLnNlbGVjdGVkSW5kZXhdO1xyXG4gICAgICAgICAgICB0aGlzLl9uYXZRdWVyeVBhcmFtcyhwYW5lLCBxdWVyeVBhcmFtcywgc3RhdGUpO1xyXG4gICAgICAgICAgICB0aGlzLl9zeW5jQnJvd3Nlckhpc3RvcnkoKTtcclxuICAgICAgICAgICAgaWYgKChwb2xpY3kgJiBPcGVuUG9saWN5LlRhYikgIT0gT3BlblBvbGljeS5UYWIpIHRoaXMuc2VsZWN0KHRoaXMuc2VsZWN0ZWRJbmRleCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgaWYgKChwb2xpY3kgJiBPcGVuUG9saWN5LlRhYikgPT0gT3BlblBvbGljeS5UYWIpXHJcbiAgICAgICAgICAgIHRoaXMuX2luc2VydFRhYihjb21wb25lbnQsXHJcbiAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgZGF0YTogc3RhdGUsXHJcbiAgICAgICAgICAgICAgICBpY29uLCB0aXRsZSwgaGVscCxcclxuICAgICAgICAgICAgICAgIHBhcmVudCxcclxuICAgICAgICAgICAgICAgIHF1ZXJ5U3RyaW5nLFxyXG4gICAgICAgICAgICAgICAgcGF0aCxcclxuICAgICAgICAgICAgICAgIHJvdXRlLFxyXG4gICAgICAgICAgICAgICAgZ3JvdXAsXHJcbiAgICAgICAgICAgICAgICBwYXJhbXMsXHJcbiAgICAgICAgICAgICAgICBxdWVyeVBhcmFtcyxcclxuICAgICAgICAgICAgICAgIHBvbGljeVxyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgZWxzZSB0aGlzLl9pbnNlcnRQYW5lKGNvbXBvbmVudCxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIGRhdGE6IHN0YXRlLFxyXG4gICAgICAgICAgICAgIGljb24sIHRpdGxlLCBoZWxwLFxyXG4gICAgICAgICAgICAgIHBhcmVudCxcclxuICAgICAgICAgICAgICBxdWVyeVN0cmluZyxcclxuICAgICAgICAgICAgICBwYXRoLFxyXG4gICAgICAgICAgICAgIHJvdXRlLFxyXG4gICAgICAgICAgICAgIHBhcmFtcyxcclxuICAgICAgICAgICAgICBwb2xpY3ksIHF1ZXJ5UGFyYW1zXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB3aW5kb3cucmVtb3ZlQWxsTGlzdGVuZXJzKCdwb3BzdGF0ZScpO1xyXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3BvcHN0YXRlJywgZSA9PiB7XHJcbiAgICAgIGlmICh0aGlzLl9uYXZpZ2F0aW9uSW5Qcm9jZXNzKSB7XHJcbiAgICAgICAgdGhpcy5fbmF2aWdhdGlvbkluUHJvY2VzcyA9IGZhbHNlO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBpZiAoZS5zdGF0ZSAmJiBlLnN0YXRlLmJpemRvYykge1xyXG4gICAgICAgIGNvbnN0IGV2dCA9IG5ldyBCYWNrTmF2aWdhdGlvbigpO1xyXG4gICAgICAgIGlmIChldnQuX3ByZXZlbnREZWZhdWx0KSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5fcm91dGVyLl9ldmVudHMkLm5leHQoZXZ0KTtcclxuICAgICAgICBjb25zdCBzdGF0ZSA9IGUuc3RhdGUgYXMgSGlzdG9yeVN0YXRlO1xyXG4gICAgICAgIHRoaXMuX2Rlc2VyaWFsaXplKGxvY2F0aW9uLnBhdGhuYW1lLnN1YnN0cmluZygxKSwgc3RhdGUpO1xyXG4gICAgICAgIHRoaXMuc3dhcCA9IHN0YXRlLnN3YXA7XHJcbiAgICAgICAgdGhpcy5zd2FwVGFiID0gc3RhdGUuc3dhcFRhYjtcclxuICAgICAgICB0aGlzLnByZXZHcm91cCA9IHN0YXRlLnByZXZHcm91cDtcclxuICAgICAgICB0aGlzLmdyb3VwID0gc3RhdGUuZ3JvdXA7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFRhYkluZGV4ID0gc3RhdGUuc2VsZWN0ZWRUYWJJbmRleDtcclxuICAgICAgfVxyXG4gICAgICBlbHNlXHJcbiAgICAgICAgdGhpcy5fZGVzZXJpYWxpemUobG9jYXRpb24ucGF0aG5hbWUuc3Vic3RyaW5nKDEpKTtcclxuICAgIH0pO1xyXG4gICAgaWYgKGxvY2F0aW9uLnBhdGhuYW1lLmxlbmd0aCA+IDEpXHJcbiAgICAgIHRoaXMuX2Rlc2VyaWFsaXplKGxvY2F0aW9uLnBhdGhuYW1lLnN1YnN0cmluZygxKSxcclxuICAgICAgICBoaXN0b3J5LnN0YXRlICYmIGhpc3Rvcnkuc3RhdGUuYml6ZG9jID8gaGlzdG9yeS5zdGF0ZSA6IHVuZGVmaW5lZCk7XHJcbiAgICBlbHNlXHJcbiAgICAgIHRoaXMuX3JvdXRlci5fbmF2aWdhdGUkLm5leHQoe1xyXG4gICAgICAgIGNvbW1hbmRzOiBERUZBVUxUX1JPVVRFLFxyXG4gICAgICB9KTtcclxuICAgIHRoaXMuX3Jlc2l6aW5nLnBpcGUoZGVib3VuY2VUaW1lKDE1MCkpLnN1YnNjcmliZSh0aGlzLl9yZXNpemUuYmluZCh0aGlzKSk7XHJcbiAgfVxyXG4gIHByaXZhdGUgYXN5bmMgX2Rlc2VyaWFsaXplKHVybDogc3RyaW5nLCBzdGF0ZT86IEhpc3RvcnlTdGF0ZSkge1xyXG5cclxuICAgIGNvbnN0IHNlY3Rpb25zID0gZGVjb2RlVVJJQ29tcG9uZW50KHVybCkuc3BsaXQoUEFORV9DSEFSKSxcclxuICAgICAgcGFuZXMgPSBkZXNlcmlhbGl6ZShzZWN0aW9uc1swXSksXHJcbiAgICAgIHRhYnMgPSBzZWN0aW9ucy5sZW5ndGggPiAxID8gZGVzZXJpYWxpemUoc2VjdGlvbnNbMV0pIDogW107XHJcblxyXG4gICAgZnVuY3Rpb24gZGVzZXJpYWxpemUocGF0aDogc3RyaW5nKSB7XHJcbiAgICAgIHJldHVybiBwYXRoLlxyXG4gICAgICAgIHNwbGl0KFBBVEhfQ0hBUikubWFwKHMgPT4ge1xyXG4gICAgICAgICAgY29uc3QgW3BhdGgsIHF1ZXJ5U3RyaW5nXSA9IHMuc3BsaXQoUVVFUllfQ0hBUik7XHJcbiAgICAgICAgICByZXR1cm4geyBwYXRoLCBxdWVyeVN0cmluZyB9O1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFuZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgbGV0IHBhbmUgPSBwYW5lc1tpXTtcclxuICAgICAgYXdhaXQgdGhpcy5fbmF2aWdhdGVQYW5lKGksIHBhbmUucGF0aCwgcGFuZS5xdWVyeVN0cmluZywgc3RhdGUgPyBzdGF0ZS5wYW5lc1tpXSA6IG51bGwpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMucGFuZXMubGVuZ3RoID4gcGFuZXMubGVuZ3RoKSB7XHJcbiAgICAgIGxldCBpID0gMDtcclxuICAgICAgd2hpbGUgKGkgPCB0aGlzLnBhbmVzLmxlbmd0aCkge1xyXG4gICAgICAgIGxldCBwYW5lID0gdGhpcy5wYW5lc1tpXTtcclxuICAgICAgICBpZiAocGFuZXMubGVuZ3RoIC0gMSA8IGkgfHwgcGFuZS5wYXRoICE9PSBwYW5lc1tpXS5wYXRoKSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZEluZGV4ID09PSBpKVxyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkSW5kZXggPSBpIC0gMTtcclxuICAgICAgICAgIHRoaXMucGFuZXMuc3BsaWNlKGksIDEpO1xyXG4gICAgICAgICAgdGhpcy5fZGVzdHJveVBhbmUocGFuZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgIGkrKztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRJbmRleCA8IDApXHJcbiAgICAgIHRoaXMuc2VsZWN0KDApO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0YWJzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGxldCB0YWIgPSB0YWJzW2ldO1xyXG4gICAgICBhd2FpdCB0aGlzLl9uYXZpZ2F0ZVRhYihpLCB0YWIucGF0aCwgdGFiLnF1ZXJ5U3RyaW5nLCBzdGF0ZSA/IHN0YXRlLnRhYnNbaV0gOiBudWxsKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnRhYnMubGVuZ3RoID4gdGFicy5sZW5ndGgpIHtcclxuICAgICAgbGV0IGkgPSAwO1xyXG4gICAgICB3aGlsZSAoaSA8IHRoaXMudGFicy5sZW5ndGgpIHtcclxuICAgICAgICBsZXQgdGFiID0gdGhpcy50YWJzW2ldO1xyXG4gICAgICAgIGlmICh0YWJzLmxlbmd0aCAtIDEgPCBpIHx8IHRhYi5wYXRoICE9PSB0YWJzW2ldLnBhdGgpIHtcclxuICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkVGFiSW5kZXggPT09IGkpIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFRhYkluZGV4ID0gaSAtIDE7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLnRhYnMuc3BsaWNlKGksIDEpO1xyXG4gICAgICAgICAgdGhpcy5fZGVzdHJveVBhbmUodGFiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgaSsrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy50YWJzLmxlbmd0aCAmJiB0aGlzLnNlbGVjdGVkVGFiSW5kZXggPCAwKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRUYWJJbmRleCA9IDA7XHJcbiAgICB9XHJcbiAgICBjb25zdCBuID0gdGhpcy5wYW5lcy5sZW5ndGg7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG47IGkrKykge1xyXG4gICAgICBsZXQgcGFuZSA9IHRoaXMucGFuZXNbaV07XHJcbiAgICAgIGlmIChwYW5lLmV4cGFuZGVkICE9PSAobiA9PT0gMSkpIHtcclxuICAgICAgICBjb25zdCBldnQgPSBuZXcgTmF2aWdhdGlvbkV4cGFuZChwYW5lLl9leHBhbmRlZCA9IG4gPT09IDEsIHBhbmUpO1xyXG4gICAgICAgIHBhbmUuX2V2ZW50cyQubmV4dChldnQpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSBpbmRleFxyXG4gICAqIEBwYXJhbSBwYXRoXHJcbiAgICogQHBhcmFtIHF1ZXJ5U3RyaW5nXHJcbiAgICogQHBhcmFtIHN0YXRlXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBhc3luYyBfbmF2aWdhdGVQYW5lKGluZGV4OiBudW1iZXIsIHBhdGg6IHN0cmluZywgcXVlcnlTdHJpbmc6IHN0cmluZywgc3RhdGU/OiBhbnkpIHtcclxuICAgIGNvbnN0IHJvdXRlID0gdGhpcy5fbWF0Y2gocGF0aCk7XHJcblxyXG4gICAgaWYgKCFyb3V0ZSkgdGhyb3cgYG5vIG1hdGNoICR7cGF0aH1gO1xyXG5cclxuICAgIGlmICghc3RhdGUpIHN0YXRlID0ge307XHJcblxyXG4gICAgd2hpbGUgKGluZGV4IDwgdGhpcy5wYW5lcy5sZW5ndGgpIHtcclxuICAgICAgbGV0IHBhbmUgPSB0aGlzLnBhbmVzW2luZGV4XTtcclxuICAgICAgaWYgKHBhdGggPT09IHBhbmUucGF0aCkge1xyXG4gICAgICAgIGlmIChxdWVyeVN0cmluZyA9PT0gcGFuZS5xdWVyeVN0cmluZykge1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIGNvbnN0IHF1ZXJ5UGFyYW1zID0gdGhpcy5fcGFyc2VRdWVyeVBhcmFtcyhxdWVyeVN0cmluZyk7XHJcbiAgICAgICAgICB0aGlzLl9uYXZRdWVyeVBhcmFtcyhwYW5lLCBxdWVyeVBhcmFtcywgc3RhdGUpO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmIChwYW5lLnJvdXRlID09PSByb3V0ZSkge1xyXG4gICAgICAgIGNvbnN0IHF1ZXJ5UGFyYW1zID0gdGhpcy5fcGFyc2VRdWVyeVBhcmFtcyhxdWVyeVN0cmluZyk7XHJcbiAgICAgICAgY29uc3QgcGFyYW1zID0gdGhpcy5fcGFyYW1zKHBhbmUucm91dGUgYXMgRXh0ZW5kZWRSb3V0ZSwgcGF0aCk7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5fbmF2UGFyYW1zKHBhdGgsIHBhbmUsIHBhcmFtcywgcXVlcnlQYXJhbXMsIHN0YXRlKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgaW5kZXgrKztcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBwYXJhbXMgPSB0aGlzLl9wYXJhbXMocm91dGUsIHBhdGgpO1xyXG4gICAgY29uc3QgcXVlcnlQYXJhbXMgPSB0aGlzLl9wYXJzZVF1ZXJ5UGFyYW1zKHF1ZXJ5U3RyaW5nKTtcclxuICAgIGNvbnN0IHBhcmVudCA9IHRoaXMuX2ZpbmRBbmNlc3Rvcihyb3V0ZSwgcGF0aCk7XHJcbiAgICBhd2FpdCB0aGlzLl9zdGF0ZShyb3V0ZSwgcGF0aCwgcGFyYW1zLCBzdGF0ZSk7XHJcbiAgICB0aGlzLl9pbnNlcnRQYW5lKHJvdXRlLmNvbXBvbmVudCwge1xyXG4gICAgICBwYXRoLCBwYXJlbnQsIHJvdXRlLCBkYXRhOiBzdGF0ZSwgcGFyYW1zLCBxdWVyeVBhcmFtcyxcclxuICAgICAgaWNvbjogcm91dGUuaWNvbixcclxuICAgICAgaGVscDogcm91dGUuaGVscCxcclxuICAgICAgcG9saWN5OiByb3V0ZS5wb2xpY3ksXHJcbiAgICAgIGZvY3VzOiBmYWxzZVxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIHByaXZhdGUgYXN5bmMgX25hdmlnYXRlVGFiKGluZGV4OiBudW1iZXIsIHBhdGg6IHN0cmluZywgcXVlcnlTdHJpbmc6IHN0cmluZywgc3RhdGU/OiBhbnkpIHtcclxuICAgIGNvbnN0IHJvdXRlID0gdGhpcy5fbWF0Y2gocGF0aCk7XHJcblxyXG4gICAgaWYgKCFyb3V0ZSkgdGhyb3cgYG5vIG1hdGNoICR7cGF0aH1gO1xyXG5cclxuICAgIGlmICghc3RhdGUpIHN0YXRlID0ge307XHJcblxyXG4gICAgd2hpbGUgKGluZGV4IDwgdGhpcy50YWJzLmxlbmd0aCkge1xyXG4gICAgICBsZXQgdGFiID0gdGhpcy50YWJzW2luZGV4XTtcclxuICAgICAgaWYgKHBhdGggPT09IHRhYi5wYXRoKSB7XHJcbiAgICAgICAgaWYgKHF1ZXJ5U3RyaW5nID09PSB0YWIucXVlcnlTdHJpbmcpIHtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICBjb25zdCBxdWVyeVBhcmFtcyA9IHRoaXMuX3BhcnNlUXVlcnlQYXJhbXMocXVlcnlTdHJpbmcpO1xyXG4gICAgICAgICAgdGhpcy5fbmF2UXVlcnlQYXJhbXModGFiLCBxdWVyeVBhcmFtcywgc3RhdGUpO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmICh0YWIucm91dGUgPT09IHJvdXRlKSB7XHJcbiAgICAgICAgY29uc3QgcXVlcnlQYXJhbXMgPSB0aGlzLl9wYXJzZVF1ZXJ5UGFyYW1zKHF1ZXJ5U3RyaW5nKTtcclxuICAgICAgICBjb25zdCBwYXJhbXMgPSB0aGlzLl9wYXJhbXModGFiLnJvdXRlIGFzIEV4dGVuZGVkUm91dGUsIHBhdGgpO1xyXG4gICAgICAgIGF3YWl0IHRoaXMuX25hdlBhcmFtcyhwYXRoLCB0YWIsIHBhcmFtcywgcXVlcnlQYXJhbXMsIHN0YXRlKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgaW5kZXgrKztcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBwYXJhbXMgPSB0aGlzLl9wYXJhbXMocm91dGUsIHBhdGgpO1xyXG4gICAgY29uc3QgcXVlcnlQYXJhbXMgPSB0aGlzLl9wYXJzZVF1ZXJ5UGFyYW1zKHF1ZXJ5U3RyaW5nKTtcclxuXHJcbiAgICBjb25zdCBwYXJlbnQgPSB0aGlzLl9maW5kQW5jZXN0b3Iocm91dGUsIHBhdGgpO1xyXG5cclxuICAgIGF3YWl0IHRoaXMuX3N0YXRlKHJvdXRlLCBwYXRoLCBwYXJhbXMsIHN0YXRlKTtcclxuICAgIHRoaXMuX2luc2VydFRhYihyb3V0ZS5jb21wb25lbnQsIHtcclxuICAgICAgaWNvbjogcm91dGUuaWNvbixcclxuICAgICAgaGVscDogcm91dGUuaGVscCxcclxuICAgICAgcG9saWN5OiByb3V0ZS5wb2xpY3kgfCBPcGVuUG9saWN5LlRhYixcclxuICAgICAgcGF0aCwgcGFyZW50LCByb3V0ZSxcclxuICAgICAgZGF0YTogc3RhdGUsXHJcbiAgICAgIHBhcmFtcywgcXVlcnlQYXJhbXMsXHJcbiAgICAgIGZvY3VzOiBmYWxzZSxcclxuICAgICAgc3dhcDogZmFsc2VcclxuICAgIH0pO1xyXG4gIH1cclxuICBwcml2YXRlIF9maW5kQW5jZXN0b3Iocm91dGU6IEV4dGVuZGVkUm91dGUsIHBhdGg6IHN0cmluZykge1xyXG4gICAgaWYgKChyb3V0ZSBhcyBFeHRlbmRlZFJvdXRlKS5wYXJlbnQpXHJcbiAgICAgIHJldHVybiB0aGlzLnBhbmVzLmZpbmQocCA9PiAocC5yb3V0ZSBhcyBFeHRlbmRlZFJvdXRlKSA9PT1cclxuICAgICAgICAocm91dGUgYXMgRXh0ZW5kZWRSb3V0ZSkucGFyZW50ICYmXHJcbiAgICAgICAgcGF0aC5zdGFydHNXaXRoKHAucGF0aCkpO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBcclxuICAgKiBAcGFyYW0gcGFuZVxyXG4gICAqIEBwYXJhbSBxdWVyeVBhcmFtc1xyXG4gICAqL1xyXG4gIHByaXZhdGUgX25hdlF1ZXJ5UGFyYW1zKHBhbmU6IFBhbmVSZWY8YW55PiwgcXVlcnlQYXJhbXM6IFBhcmFtTWFwLCBzdGF0ZTogUGFyYW1NYXApIHtcclxuICAgIHBhbmUuX3F1ZXJ5U3RyaW5nID0gdGhpcy5fcXVlcnlTdHJpbmcocXVlcnlQYXJhbXMpO1xyXG4gICAgc3RhdGUgJiYgcGFuZS5fZGF0YSQubmV4dChzdGF0ZSk7XHJcbiAgICBwYW5lLl9xdWVyeVBhcmFtcyQubmV4dChxdWVyeVBhcmFtcyk7XHJcbiAgICBjb25zdCBldnQgPSBuZXcgUXVlcnlQYXJhbU5hdmlnYXRpb24ocXVlcnlQYXJhbXMsIHBhbmUpO1xyXG4gICAgcGFuZS5fZXZlbnRzJC5uZXh0KGV2dCk7XHJcbiAgICB0aGlzLl9yb3V0ZXIuX2V2ZW50cyQubmV4dChldnQpO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBcclxuICAgKiBAcGFyYW0gcGF0aFxyXG4gICAqIEBwYXJhbSBwYW5lXHJcbiAgICogQHBhcmFtIHBhcmFtc1xyXG4gICAqIEBwYXJhbSBxdWVyeVBhcmFtc1xyXG4gICAqIEBwYXJhbSBzdGF0ZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgYXN5bmMgX25hdlBhcmFtcyhwYXRoOiBzdHJpbmcsIHBhbmU6IFBhbmVSZWY8YW55PiwgcGFyYW1zOiBQYXJhbU1hcCwgcXVlcnlQYXJhbXM6IFBhcmFtTWFwLCBzdGF0ZTogUGFyYW1NYXApIHtcclxuICAgIGlmIChwYW5lLnJvdXRlLmNhbkRpc21pc3MpXHJcbiAgICAgIGF3YWl0IHRoaXMuX2Rpc21pc3MocGFuZSk7XHJcblxyXG4gICAgaWYgKCFzdGF0ZSkgc3RhdGUgPSB7fTtcclxuICAgIGF3YWl0IHRoaXMuX3N0YXRlKHBhbmUucm91dGUgYXMgRXh0ZW5kZWRSb3V0ZSwgcGF0aCwgcGFyYW1zLCBzdGF0ZSk7XHJcbiAgICBwYW5lLl9kYXRhJC5uZXh0KHN0YXRlKTtcclxuICAgIHBhbmUuX3BhdGggPSBwYXRoO1xyXG4gICAgcGFuZS5fcGFyYW1zJC5uZXh0KHBhcmFtcyk7XHJcbiAgICBpZiAocXVlcnlQYXJhbXMpIHtcclxuICAgICAgcGFuZS5fcXVlcnlTdHJpbmcgPSB0aGlzLl9xdWVyeVN0cmluZyhxdWVyeVBhcmFtcyk7XHJcbiAgICAgIHBhbmUuX3F1ZXJ5UGFyYW1zJC5uZXh0KHF1ZXJ5UGFyYW1zKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBwYW5lLl9xdWVyeVN0cmluZyA9ICcnO1xyXG4gICAgICBwYW5lLl9xdWVyeVBhcmFtcyQubmV4dCh7fSk7XHJcbiAgICB9XHJcbiAgICBjb25zdCBldnQgPSBuZXcgUGFyYW1OYXZpZ2F0aW9uKHBhcmFtcywgcGFuZSk7XHJcbiAgICBwYW5lLl9ldmVudHMkLm5leHQoZXZ0KTtcclxuICAgIHRoaXMuX3JvdXRlci5fZXZlbnRzJC5uZXh0KGV2dCk7XHJcblxyXG4gICAgdGhpcy5wYW5lcy5jb25jYXQodGhpcy50YWJzKS5mb3JFYWNoKGNoaWxkID0+IHtcclxuICAgICAgaWYgKGNoaWxkLnJvdXRlICYmIChjaGlsZC5yb3V0ZSBhcyBFeHRlbmRlZFJvdXRlKS5wYXJlbnQgPT09IHBhbmUucm91dGUpIHtcclxuICAgICAgICBjaGlsZC5fZGF0YSQubmV4dChPYmplY3QuYXNzaWduKGNoaWxkLmRhdGEsIHN0YXRlKSk7XHJcbiAgICAgICAgY2hpbGQuX3BhcmFtcyQubmV4dChwYXJhbXMpO1xyXG4gICAgICAgIGNoaWxkLl9wYXRoID0gcGFuZS5wYXRoICsgJy8nICsgY2hpbGQucm91dGUucGF0aDtcclxuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZFRhYkluZGV4ID4gLTEgJiYgY2hpbGQgPT09IHRoaXMudGFic1t0aGlzLnNlbGVjdGVkVGFiSW5kZXhdKSB7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkVGFiSW5kZXggPSB0aGlzLnNlbGVjdGVkVGFiSW5kZXg7XHJcbiAgICAgICAgICB0aGlzLmdyb3VwID0gY2hpbGQuZ3JvdXA7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIGlmIChwYW5lLm1vZGUgPT09ICdwYW5lJykgdGhpcy50aXRsZUFuaW1hdGlvbisrO1xyXG4gICAgdGhpcy5fY2QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuICAvKiogKi9cclxuICBwcml2YXRlIF9zeW5jQnJvd3Nlckhpc3RvcnkoKSB7XHJcbiAgICBsZXQgcGF0aCA9IHRoaXMucGFuZXMuZmlsdGVyKHAgPT4gcC5yb3V0ZSkubWFwKHMgPT4gcy5mdWxsUGF0aCkuam9pbihQQVRIX0NIQVIpO1xyXG4gICAgaWYgKHRoaXMudGFicy5sZW5ndGgpIHtcclxuICAgICAgY29uc3QgdGFicyA9IHRoaXMudGFicy5maWx0ZXIocCA9PiBwLnJvdXRlKTtcclxuICAgICAgaWYgKHRhYnMubGVuZ3RoKVxyXG4gICAgICAgIHBhdGggKz0gUEFORV9DSEFSICsgdGFicy5tYXAocyA9PiBzLmZ1bGxQYXRoKS5qb2luKFBBVEhfQ0hBUik7XHJcbiAgICB9XHJcbiAgICBjb25zdCBzdGF0ZSA9IHRoaXMuX2NvbnN0cnVjdEhpc3RvcnlTdGF0ZSgpO1xyXG4gICAgdGhpcy5fbmF2aWdhdGlvbkluUHJvY2VzcyA9IHRydWU7XHJcbiAgICBoaXN0b3J5LnB1c2hTdGF0ZShzdGF0ZSwgJycsICcvJyArIHBhdGgpO1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLl9uYXZpZ2F0aW9uSW5Qcm9jZXNzID0gZmFsc2UsIDIwMCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9jb25zdHJ1Y3RIaXN0b3J5U3RhdGUoKSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBiaXpkb2M6IHRydWUsXHJcbiAgICAgIHN0ZXA6IGhpc3Rvcnkuc3RhdGUgJiYgaGlzdG9yeS5zdGF0ZS5iaXpkb2MgPyAoaGlzdG9yeS5zdGF0ZSBhcyBIaXN0b3J5U3RhdGUpLnN0ZXAgKyAxIDogMSxcclxuICAgICAgc2VsZWN0ZWRUYWJJbmRleDogdGhpcy5zZWxlY3RlZFRhYkluZGV4LFxyXG4gICAgICBwYW5lczogdGhpcy5wYW5lcy5tYXAocCA9PiBwLmRhdGEpLFxyXG4gICAgICB0YWJzOiB0aGlzLnRhYnMubWFwKHQgPT4gdC5kYXRhKSxcclxuICAgICAgc3dhcDogdGhpcy5zd2FwLFxyXG4gICAgICBncm91cDogdGhpcy5ncm91cCxcclxuICAgICAgc3dhcFRhYjogdGhpcy5zd2FwVGFiLFxyXG4gICAgICBwcmV2R3JvdXA6IHRoaXMucHJldkdyb3VwXHJcbiAgICB9IGFzIEhpc3RvcnlTdGF0ZTtcclxuICB9XHJcblxyXG4gIGRyb3AoZXZ0OiBDZGtEcmFnRHJvcDxzdHJpbmcsIHN0cmluZz4pIHtcclxuICAgIGNvbnN0IHBhbmUgPSB0aGlzLnBhbmVzW2V2dC5wcmV2aW91c0luZGV4XTtcclxuICAgIHRoaXMucGFuZXMuc3BsaWNlKGV2dC5wcmV2aW91c0luZGV4LCAxKTtcclxuICAgIHRoaXMucGFuZXMuc3BsaWNlKGV2dC5jdXJyZW50SW5kZXgsIDAsIHBhbmUpO1xyXG4gICAgdGhpcy5fc3luY0Jyb3dzZXJIaXN0b3J5KCk7XHJcbiAgfVxyXG5cclxuICB0b2dnbGVQaW5uZWQocGFuZTogUGFuZVJlZjxhbnk+KSB7XHJcbiAgICBwYW5lLnBpbm5lZCA9ICFwYW5lLnBpbm5lZDtcclxuICAgIHRoaXMucGFuZXMuZm9yRWFjaChzID0+IHtcclxuICAgICAgaWYgKHMuZGVjZW5kZW50T2YocGFuZSkpIHMucGlubmVkID0gcGFuZS5waW5uZWQ7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3F1ZXJ5U3RyaW5nKHF1ZXJ5UGFyYW1zOiBQYXJhbU1hcCkge1xyXG4gICAgY29uc3QgbmFtZXMgPSBPYmplY3Qua2V5cyhxdWVyeVBhcmFtcyk7XHJcbiAgICBsZXQgcXVlcnlTdHJpbmc6IHN0cmluZztcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmFtZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgbGV0IHZhbCA9IHF1ZXJ5UGFyYW1zW25hbWVzW2ldXTtcclxuXHJcbiAgICAgIGlmICh2YWwgIT09IG51bGwgJiYgdmFsICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICBpZiAoIXF1ZXJ5U3RyaW5nKSBxdWVyeVN0cmluZyA9ICcnO1xyXG4gICAgICAgIGVsc2UgcXVlcnlTdHJpbmcgPSBxdWVyeVN0cmluZyArIEFSR19DSEFSO1xyXG5cclxuICAgICAgICBpZiAoaXNTdHJpbmcodmFsKSlcclxuICAgICAgICAgIHF1ZXJ5U3RyaW5nICs9IGAke25hbWVzW2ldfT0ke2VuY29kZVVSSUNvbXBvbmVudCh2YWwpfWA7XHJcbiAgICAgICAgZWxzZSBpZiAoaXNBcnJheSh2YWwpKVxyXG4gICAgICAgICAgcXVlcnlTdHJpbmcgKz0gdmFsLm1hcCh2ID0+IGAke25hbWVzW2ldfT0ke3Z9YCkuam9pbihBUkdfQ0hBUik7XHJcbiAgICAgICAgZWxzZSBpZiAoaXNEYXRlKHZhbCkpXHJcbiAgICAgICAgICBxdWVyeVN0cmluZyArPSBgJHtuYW1lc1tpXX09JHt2YWwudG9KU09OKCl9YDtcclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICBxdWVyeVN0cmluZyArPSBgJHtuYW1lc1tpXX09JHt2YWx9YDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHF1ZXJ5U3RyaW5nO1xyXG4gIH1cclxuICBwcml2YXRlIF9wYXJzZVF1ZXJ5UGFyYW1zKHF1ZXJ5U3RyaW5nOiBzdHJpbmcpOiBQYXJhbU1hcCB7XHJcbiAgICBjb25zdCBxdWVyeVBhcmFtcyA9IHt9O1xyXG4gICAgcXVlcnlTdHJpbmcgJiYgcXVlcnlTdHJpbmcuXHJcbiAgICAgIHNwbGl0KEFSR19DSEFSKS5mb3JFYWNoKHAgPT4ge1xyXG4gICAgICAgIGNvbnN0IFtuYW1lLCB2YWx1ZV0gPSBwLnNwbGl0KCc9Jyk7XHJcbiAgICAgICAgaWYgKCFxdWVyeVBhcmFtc1tuYW1lXSlcclxuICAgICAgICAgIHF1ZXJ5UGFyYW1zW25hbWVdID0gdmFsdWU7XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICBjb25zdCB2YWxzID0gcXVlcnlQYXJhbXNbbmFtZV07XHJcbiAgICAgICAgICBxdWVyeVBhcmFtc1tuYW1lXSA9IGlzQXJyYXkodmFscykgPyBbLi4udmFscywgdmFsdWVdIDogW3ZhbHMsIHZhbHVlXTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgcmV0dXJuIHF1ZXJ5UGFyYW1zO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBcclxuICAgKiBAcGFyYW0gcm91dGVcclxuICAgKiBAcGFyYW0gcGF0aFxyXG4gICAqL1xyXG4gIHByaXZhdGUgX3BhcmFtcyhyb3V0ZTogRXh0ZW5kZWRSb3V0ZSwgcGF0aDogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBleCA9IHJvdXRlLnJlZ0V4LmV4ZWMocGF0aCksXHJcbiAgICAgIHBhcmFtcyA9IGV4Lmdyb3VwcztcclxuXHJcbiAgICByZXR1cm4gcGFyYW1zIHx8IHt9O1xyXG4gIH1cclxuICAvKipcclxuICAgKiBcclxuICAgKiBAcGFyYW0gdXJsXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfbWF0Y2godXJsOiBzdHJpbmcpIHtcclxuICAgIGxldCByb3V0ZSA9IHRoaXMuX3JlcG9zaXRvcnkuZmluZChyID0+IHIucmVnRXgudGVzdCh1cmwpKTtcclxuICAgIGlmIChyb3V0ZSlcclxuICAgICAgd2hpbGUgKHJvdXRlLmNoaWxkcmVuKSB7XHJcbiAgICAgICAgbGV0IGNoaWxkID0gcm91dGUuY2hpbGRyZW4uZmluZChyID0+IHIucmVnRXgudGVzdCh1cmwpKTtcclxuICAgICAgICBpZiAoY2hpbGQpXHJcbiAgICAgICAgICByb3V0ZSA9IGNoaWxkO1xyXG4gICAgICAgIGVsc2UgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIHJldHVybiByb3V0ZTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogXHJcbiAgICogQHBhcmFtIHJvdXRlXHJcbiAgICogQHBhcmFtIHBhdGhcclxuICAgKiBAcGFyYW0gcGFyYW1zXHJcbiAgICogQHBhcmFtIGRhdGFcclxuICAgKi9cclxuICBwcml2YXRlIGFzeW5jIF9zdGF0ZShyb3V0ZTogRXh0ZW5kZWRSb3V0ZSwgcGF0aDogc3RyaW5nLCBwYXJhbXM6IFBhcmFtTWFwLCBkYXRhOiBQYXJhbU1hcCkge1xyXG4gICAgaWYgKHRoaXMuX3BlbmRpbmcuaW5kZXhPZihwYXRoKSA+IC0xKSB7XHJcbiAgICAgIC8vdGhpcy5fcHMudG9hc3QoJ1dvcmtpbmcnKTtcclxuICAgICAgdGhyb3cgJ2FscmVhZHkgcHJvY2Vzc2luZyc7XHJcbiAgICB9XHJcbiAgICB0aGlzLl9wZW5kaW5nLnB1c2gocGF0aCk7XHJcblxyXG4gICAgY29uc3QgeyBwYXJlbnQsIHJlc29sdmUgfSA9IHJvdXRlO1xyXG4gICAgaWYgKHBhcmVudClcclxuICAgICAgYXdhaXQgdGhpcy5fcGFyZW50c3RhdGUocGFyZW50LCBwYXRoLCBwYXJhbXMsIGRhdGEpO1xyXG4gICAgaWYgKHJlc29sdmUpIHtcclxuICAgICAgYXdhaXQgdGhpcy5fcmVzb2x2ZShyZXNvbHZlLCBwYXJhbXMsIGRhdGEpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fcGVuZGluZy5yZW1vdmUocGF0aCk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSByb3V0ZVxyXG4gICAqIEBwYXJhbSBwYXRoXHJcbiAgICogQHBhcmFtIHBhcmFtc1xyXG4gICAqIEBwYXJhbSBkYXRhXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBhc3luYyBfcGFyZW50c3RhdGUocm91dGU6IEV4dGVuZGVkUm91dGUsIHBhdGg6IHN0cmluZywgcGFyYW1zOiBQYXJhbU1hcCwgZGF0YTogUGFyYW1NYXApIHtcclxuICAgIGNvbnN0IHsgcGFyZW50LCByZXNvbHZlIH0gPSByb3V0ZTtcclxuXHJcbiAgICBpZiAocGFyZW50KVxyXG4gICAgICBhd2FpdCB0aGlzLl9wYXJlbnRzdGF0ZShwYXJlbnQsIHBhdGgsIHBhcmFtcywgZGF0YSk7XHJcblxyXG4gICAgY29uc3QgcGFuZSA9IHRoaXMucGFuZXMuZmluZChzID0+IHMucm91dGUgJiYgcy5yb3V0ZSA9PT0gcm91dGVcclxuICAgICAgJiYgcGF0aC5zdGFydHNXaXRoKHMucGF0aCkpO1xyXG5cclxuICAgIHBhbmUgJiYgT2JqZWN0LmFzc2lnbihkYXRhLCBwYW5lLmRhdGEpO1xyXG5cclxuICAgIGlmIChyZXNvbHZlKVxyXG4gICAgICBhd2FpdCB0aGlzLl9yZXNvbHZlKHJlc29sdmUsIHBhcmFtcywgZGF0YSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIF9yZXNvbHZlKHJlc29sdmU6IHsgW2tleTogc3RyaW5nXTogQ29tcG9uZW50VHlwZTxQYW5lUmVzb2x2ZTxhbnk+PiB9LCBwYXJhbXM6IFBhcmFtTWFwLCBkYXRhOiBQYXJhbU1hcCkge1xyXG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHJlc29sdmUpO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGxldCBrZXkgPSBrZXlzW2ldO1xyXG4gICAgICBpZiAoIWRhdGFba2V5XSkge1xyXG4gICAgICAgIGNvbnN0IGluc3RhbmNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KHJlc29sdmVba2V5XSkgYXMgUGFuZVJlc29sdmU8YW55PjtcclxuICAgICAgICBjb25zdCB2YWx1ZSA9IGluc3RhbmNlLm9uUmVzb2x2ZShwYXJhbXMpO1xyXG4gICAgICAgIGlmIChpc1Byb21pc2UodmFsdWUpKVxyXG4gICAgICAgICAgYXdhaXQgdmFsdWUudGhlbihyID0+IGRhdGFba2V5XSA9IHIpO1xyXG4gICAgICAgIGVsc2UgaWYgKGlzT2JzZXJ2YWJsZSh2YWx1ZSkpXHJcbiAgICAgICAgICBhd2FpdCB2YWx1ZS5waXBlKHRhcChyID0+IGRhdGFba2V5XSA9IHIpKS50b1Byb21pc2UoKTtcclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICBkYXRhW2tleV0gPSB2YWx1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYWRkPFQ+KGNvbXBvbmVudDogQ29tcG9uZW50VHlwZTxUPiwgb3B0aW9ucz86IFBhbmVPcHRpb25zKSB7XHJcbiAgICByZXR1cm4gdGhpcy5pbnNlcnQodGhpcy5wYW5lcy5sZW5ndGgsIGNvbXBvbmVudCwgb3B0aW9ucyk7XHJcbiAgfVxyXG4gIGluc2VydDxUPihwb3NpdGlvbjogbnVtYmVyLCBjb21wb25lbnQ6IENvbXBvbmVudFR5cGU8VD4sIG9wdGlvbnM/OiBQYW5lT3B0aW9ucykge1xyXG4gICAgY29uc3QgcGFuZSA9IHRoaXMuX2luc2VydFBhbmU8VD4oY29tcG9uZW50LCBvcHRpb25zIHx8IHt9LCBwb3NpdGlvbik7XHJcbiAgICByZXR1cm4gcGFuZTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfaW5zZXJ0UGFuZTxUID0gYW55Pihjb21wb25lbnQ6IENvbXBvbmVudFR5cGU8VD4sIG9wdGlvbnM6IHtcclxuICAgIHBhdGg/OiBzdHJpbmc7XHJcbiAgICByb3V0ZT86IFBhbmVSb3V0ZTtcclxuICAgIGljb24/OiBzdHJpbmc7XHJcbiAgICB0aXRsZT86IHN0cmluZztcclxuICAgIGlucHV0cz86IHsgW25hbWU6IHN0cmluZ106IGFueSB9LFxyXG4gICAgZGF0YT86IFBhcmFtTWFwO1xyXG4gICAgcGFyYW1zPzogUGFyYW1NYXA7XHJcbiAgICBxdWVyeVBhcmFtcz86IFBhcmFtTWFwO1xyXG4gICAgaGVscD86IHN0cmluZztcclxuICAgIHBhcmVudD86IFBhbmVSZWY8YW55PjtcclxuICAgIHF1ZXJ5U3RyaW5nPzogc3RyaW5nO1xyXG4gICAgcG9saWN5PzogT3BlblBvbGljeTtcclxuICAgIGZvY3VzPzogYm9vbGVhblxyXG4gIH0sIHBvc2l0aW9uPzogbnVtYmVyKSB7XHJcblxyXG4gICAgY29uc3Qgc3RyZXRjaGFibGUgPSAob3B0aW9ucy5wb2xpY3kgJiBPcGVuUG9saWN5LlN0cmV0Y2gpID09IE9wZW5Qb2xpY3kuU3RyZXRjaDtcclxuXHJcbiAgICBjb25zdCBwYW5lID0gdGhpcy5fY29uc3RyYWN0PFQ+KGNvbXBvbmVudCwge1xyXG4gICAgICBtb2RlOiAncGFuZScsXHJcbiAgICAgIGV4cGFuZGVkOiAhdGhpcy5wYW5lcy5sZW5ndGgsXHJcbiAgICAgIHN0cmV0Y2hhYmxlLFxyXG4gICAgICAuLi5vcHRpb25zXHJcbiAgICB9KTtcclxuICAgIGlmIChwb3NpdGlvbiA9PT0gdW5kZWZpbmVkKVxyXG4gICAgICBwb3NpdGlvbiA9IHRoaXMucGFuZXMubGVuZ3RoO1xyXG4gICAgdGhpcy5wYW5lcy5wdXNoKHBhbmUpO1xyXG4gICAgdGhpcy50aXRsZUFuaW1hdGlvbisrO1xyXG4gICAgdGhpcy5fY2QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgY29uc3QgZXZ0ID0gbmV3IE5hdmlnYXRpb25TdGFydChwYW5lKTtcclxuICAgIHRoaXMuX3JvdXRlci5fZXZlbnRzJC5uZXh0KGV2dCk7XHJcbiAgICBpZiAob3B0aW9ucy5mb2N1cyAhPT0gZmFsc2UpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZEluZGV4ID0gcG9zaXRpb247XHJcbiAgICAgIHRoaXMuX3RpdGxlLnNldChwYW5lLnRpdGxlKTtcclxuICAgICAgaWYgKHRoaXMucGFuZXMubGVuZ3RoID4gMSkgdGhpcy5zY3JvbGxUbyhwb3NpdGlvbik7XHJcbiAgICB9XHJcbiAgICB0aGlzLmVuYWJsZU5hdmlnYXRpb25BcnJvd3MoKTtcclxuICAgIHJldHVybiBwYW5lO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBcclxuICAgKiBAcGFyYW0gY29tcG9uZW50XHJcbiAgICogQHBhcmFtIG9wdGlvbnNcclxuICAgKi9cclxuICBwcml2YXRlIF9jb25zdHJhY3Q8VCA9IGFueT4oY29tcG9uZW50OiBDb21wb25lbnRUeXBlPFQ+LFxyXG4gICAgb3B0aW9uczoge1xyXG4gICAgICBtb2RlOiBQYW5lTW9kZSxcclxuICAgICAgZXhwYW5kZWQ/OiBib29sZWFuO1xyXG4gICAgICBkaWFsb2c/OiBib29sZWFuO1xyXG4gICAgICBzdHJldGNoYWJsZT86IGJvb2xlYW47XHJcbiAgICAgIHBhdGg/OiBzdHJpbmc7XHJcbiAgICAgIHJvdXRlPzogUGFuZVJvdXRlO1xyXG4gICAgICBpY29uPzogc3RyaW5nO1xyXG4gICAgICB0aXRsZT86IHN0cmluZztcclxuICAgICAgZ3JvdXA/OiBzdHJpbmc7XHJcbiAgICAgIGRhdGE/OiBQYXJhbU1hcDtcclxuICAgICAgcGFyYW1zPzogUGFyYW1NYXA7XHJcbiAgICAgIHF1ZXJ5UGFyYW1zPzogUGFyYW1NYXA7XHJcbiAgICAgIGhlbHA/OiBzdHJpbmc7XHJcbiAgICAgIHBhcmVudD86IFBhbmVSZWY8YW55PjtcclxuICAgICAgcXVlcnlTdHJpbmc/OiBzdHJpbmc7XHJcbiAgICAgIGRpc21pc3NhYmxlPzogYm9vbGVhbjtcclxuICAgICAgZXhwYW5kYWJsZT86IGJvb2xlYW5cclxuICAgIH0pIHtcclxuICAgIGNvbnN0IHBhbmUgPSBuZXcgUGFuZVJlZjxUPihjb21wb25lbnQsIHRoaXMuX2luamVjdG9yLCBvcHRpb25zKTtcclxuICAgIHBhbmUuX2NvbW0kLnN1YnNjcmliZShlID0+IHRoaXMuX3BhbmVDb21tYW5kPFQ+KGUsIHBhbmUpKTtcclxuICAgIHJldHVybiBwYW5lO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBcclxuICAgKiBAcGFyYW0gY29tcG9uZW50XHJcbiAgICogQHBhcmFtIG9wdGlvbnNcclxuICAgKi9cclxuICBwcml2YXRlIF9pbnNlcnRUYWI8VCA9IGFueT4oY29tcG9uZW50OiBDb21wb25lbnRUeXBlPFQ+LCBvcHRpb25zOiB7XHJcbiAgICBpY29uPzogc3RyaW5nO1xyXG4gICAgdGl0bGU/OiBzdHJpbmc7XHJcbiAgICBncm91cD86IHN0cmluZztcclxuICAgIGhlbHA/OiBzdHJpbmc7XHJcbiAgICBwYXRoPzogc3RyaW5nO1xyXG4gICAgcXVlcnlTdHJpbmc/OiBzdHJpbmc7XHJcbiAgICByb3V0ZT86IFBhbmVSb3V0ZTtcclxuICAgIGRhdGE/OiBQYXJhbU1hcDtcclxuICAgIHBhcmFtcz86IFBhcmFtTWFwO1xyXG4gICAgcXVlcnlQYXJhbXM/OiBQYXJhbU1hcDtcclxuICAgIHBhcmVudD86IFBhbmVSZWY8YW55PjtcclxuICAgIHBvbGljeT86IE9wZW5Qb2xpY3k7XHJcbiAgICBzd2FwPzogYm9vbGVhbjtcclxuICAgIGZvY3VzPzogYm9vbGVhbjtcclxuICB9KSB7XHJcbiAgICBjb25zdCB7IHBvbGljeSB9ID0gb3B0aW9ucyxcclxuICAgICAgZGlhbG9nID0gKHBvbGljeSAmIE9wZW5Qb2xpY3kuRGlhbG9nKSA9PSBPcGVuUG9saWN5LkRpYWxvZyxcclxuICAgICAgZXhwYW5kYWJsZSA9IChwb2xpY3kgJiBPcGVuUG9saWN5LkV4cGFuZGFibGUpID09IE9wZW5Qb2xpY3kuRXhwYW5kYWJsZSxcclxuICAgICAgZGlzbWlzc2FibGUgPSAocG9saWN5ICYgT3BlblBvbGljeS5EaXNtaXNzYWJsZSkgPT0gT3BlblBvbGljeS5EaXNtaXNzYWJsZTtcclxuXHJcbiAgICBjb25zdCB0YWIgPSB0aGlzLl9jb25zdHJhY3Q8VD4oY29tcG9uZW50LFxyXG4gICAgICB7XHJcbiAgICAgICAgbW9kZTogJ3RhYicsXHJcbiAgICAgICAgZXhwYW5kZWQ6IGZhbHNlLFxyXG4gICAgICAgIC4uLm9wdGlvbnMsXHJcbiAgICAgICAgZGlhbG9nLFxyXG4gICAgICAgIGRpc21pc3NhYmxlLFxyXG4gICAgICAgIGV4cGFuZGFibGVcclxuICAgICAgfSk7XHJcbiAgICB0aGlzLnRhYnMucHVzaCh0YWIpO1xyXG4gICAgdGhpcy5fY2QuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgdGhpcy5fcm91dGVyLl9ldmVudHMkLm5leHQobmV3IE5hdmlnYXRpb25TdGFydCh0YWIpKTtcclxuICAgIGlmICh0YWIuZ3JvdXAgJiYgdGhpcy5ncm91cCAhPT0gdGFiLmdyb3VwICYmIG9wdGlvbnMuc3dhcCAhPT0gZmFsc2UpIHtcclxuICAgICAgbGV0IGkgPSAwLCBzd2FwID0gZmFsc2U7XHJcbiAgICAgIGRvIHtcclxuICAgICAgICBpZiAodGhpcy50YWJzW2ldLmdyb3VwICE9PSB0YWIuZ3JvdXApIHtcclxuICAgICAgICAgIHRoaXMuX2Rlc3Ryb3lQYW5lKHRoaXMudGFic1tpXSk7XHJcbiAgICAgICAgICB0aGlzLnRhYnMuc3BsaWNlKGksIDEpO1xyXG4gICAgICAgICAgc3dhcCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgIGkrK1xyXG4gICAgICB9IHdoaWxlIChpIDwgdGhpcy50YWJzLmxlbmd0aCk7XHJcbiAgICAgIGlmIChzd2FwKSB7XHJcbiAgICAgICAgdGhpcy5zd2FwVGFiID0gdGhpcy5fZ2V0SGlzdG9yeVN0ZXAoKTtcclxuICAgICAgICB0aGlzLnByZXZHcm91cCA9IHRoaXMuZ3JvdXA7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5ncm91cCA9IHRhYi5ncm91cDtcclxuICAgIH1cclxuICAgIGVsc2VcclxuICAgICAgdGhpcy5zd2FwVGFiID0gbnVsbDtcclxuICAgIGlmIChvcHRpb25zLmZvY3VzICE9PSBmYWxzZSkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkVGFiSW5kZXggPSB0aGlzLnRhYnMubGVuZ3RoIC0gMTtcclxuICAgIH1cclxuICAgIHRoaXMuX2NkLmRldGVjdENoYW5nZXMoKTtcclxuICAgIHJldHVybiB0YWI7XHJcbiAgfVxyXG5cclxuICBndWlkZShuYW1lOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuX2d1aWRlLnN0YXJ0KG5hbWUpO1xyXG4gIH1cclxuICBiYWNrKCkge1xyXG4gICAgdGhpcy5fbmF2QmFjayh0aGlzLnN3YXApO1xyXG4gICAgdGhpcy5zd2FwID0gbnVsbDtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogXHJcbiAgICogQHBhcmFtIHN0ZXBzXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBhc3luYyBfbmF2QmFjayhzdGVwczogbnVtYmVyKSB7XHJcbiAgICBoaXN0b3J5LmdvKHN0ZXBzIC0gKGhpc3Rvcnkuc3RhdGUgYXMgSGlzdG9yeVN0YXRlKS5zdGVwKTtcclxuICB9XHJcbiAgdGFiQmFjaygpIHtcclxuICAgIHRoaXMuX25hdkJhY2sodGhpcy5zd2FwVGFiKTtcclxuICAgIHRoaXMuc3dhcFRhYiA9IG51bGw7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSBjb21tYW5kXHJcbiAgICogQHBhcmFtIHBhbmVcclxuICAgKi9cclxuICBwcml2YXRlIGFzeW5jIF9wYW5lQ29tbWFuZDxUID0gYW55Pihjb21tYW5kOiBQYW5lQ29tbWFuZCwgcGFuZTogUGFuZVJlZjxUPikge1xyXG4gICAgc3dpdGNoIChjb21tYW5kKSB7XHJcbiAgICAgIGNhc2UgJ2ZvY3VzJzpcclxuICAgICAgICB7XHJcbiAgICAgICAgICBpZiAocGFuZS5tb2RlID09PSAndGFiJykge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkVGFiSW5kZXggPSB0aGlzLnRhYnMuaW5kZXhPZihwYW5lKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMucGFuZXMuaW5kZXhPZihwYW5lKTtcclxuICAgICAgICAgICAgdGhpcy5mb2N1cyhpbmRleCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgIGNhc2UgJ2Nsb3NlJzpcclxuICAgICAgICBpZiAocGFuZS5tb2RlID09PSAndGFiJykge1xyXG4gICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLnRhYnMuaW5kZXhPZihwYW5lKTtcclxuICAgICAgICAgIHRoaXMuY2xvc2VUYWIoaW5kZXgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5wYW5lcy5pbmRleE9mKHBhbmUpO1xyXG4gICAgICAgICAgYXdhaXQgdGhpcy5yZW1vdmVBdChpbmRleCk7XHJcbiAgICAgICAgICB0aGlzLl9jbGVhclBlbmRpbmcoKTtcclxuICAgICAgICAgIGF3YWl0IHRoaXMuX2NsZWFyVGFicygpO1xyXG4gICAgICAgICAgaWYgKHRoaXMucGFuZXMubGVuZ3RoKVxyXG4gICAgICAgICAgICB0aGlzLl9zeW5jQnJvd3Nlckhpc3RvcnkoKTtcclxuICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgdGhpcy5fcm91dGVyLm5hdmlnYXRlKERFRkFVTFRfUk9VVEUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnZXhwYW5kJzpcclxuICAgICAgICBpZiAocGFuZS5tb2RlID09PSAndGFiJylcclxuICAgICAgICAgIHRoaXMuZXhwYW5kVGFiKCk7XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgdGhpcy5leHBhbmRQYW5lKCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ3JlY3ljbGUnOiB7XHJcbiAgICAgICAgY29uc3Qgc3RhdGUgPSB0aGlzLl9jb25zdHJ1Y3RIaXN0b3J5U3RhdGUoKTtcclxuICAgICAgICBoaXN0b3J5LnJlcGxhY2VTdGF0ZShzdGF0ZSwgJycpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIGVzY2FwZVxyXG4gICAqIEBwYXJhbSBldmVudFxyXG4gICAqL1xyXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmtleWRvd24uZXNjYXBlJylcclxuICBhc3luYyBjb2xsYXBzZSgpIHtcclxuICAgIGlmICghdGhpcy50YWJzLmxlbmd0aCkgcmV0dXJuO1xyXG4gICAgY29uc3QgZXZ0ID0gbmV3IENvbGxhcHNlTmF2aWdhdGlvbigpO1xyXG4gICAgdGhpcy5fcm91dGVyLl9ldmVudHMkLm5leHQoZXZ0KTtcclxuICAgIGlmIChldnQuX3ByZXZlbnREZWZhdWx0KSByZXR1cm47XHJcbiAgICB0aGlzLl9jbGVhclBlbmRpbmcoKTtcclxuICAgIGF3YWl0IHRoaXMuX2NsZWFyVGFicygpO1xyXG4gICAgdGhpcy5fc3luY0Jyb3dzZXJIaXN0b3J5KCk7XHJcbiAgfVxyXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpyZXNpemUnKVxyXG4gIG9uUmVzaXplKCkge1xyXG4gICAgdGhpcy5fcmVzaXppbmcubmV4dCgpO1xyXG4gIH1cclxuICAvKiogKi9cclxuICBwcml2YXRlIF9yZXNpemUoKSB7XHJcbiAgICBpZiAodGhpcy5wYW5lcy5sZW5ndGggPiAxICYmICF0aGlzLnBhbmVzW3RoaXMucGFuZXMubGVuZ3RoIC0gMV0uc3RyZXRjaGFibGUpIHtcclxuICAgICAgY29uc3QgZWwgPSB0aGlzLl9wYW5lc0NvbnRhaW5lclJlZi5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQgYXMgSFRNTERpdkVsZW1lbnQsXHJcbiAgICAgICAgY2hpbGQgPSBlbC5sYXN0RWxlbWVudENoaWxkIGFzIEhUTUxEaXZFbGVtZW50O1xyXG4gICAgICBjaGlsZC5zdHlsZS5taW5XaWR0aCA9XHJcbiAgICAgICAgKGVsLnBhcmVudEVsZW1lbnQucGFyZW50RWxlbWVudC5jbGllbnRXaWR0aCAtIGVsLnBhcmVudEVsZW1lbnQub2Zmc2V0TGVmdCAtIGNoaWxkLm9mZnNldExlZnQgLSAyKSArICdweCc7XHJcbiAgICB9XHJcbiAgICB0aGlzLnRhYnMuY29uY2F0KHRoaXMucGFuZXMpLmZvckVhY2gocCA9PiBwLl9ldmVudHMkLm5leHQobmV3IE5hdmlnYXRpb25SZXNpemUoe1xyXG4gICAgfSBhcyBhbnksIHApKSk7XHJcbiAgfVxyXG4gIGNsb3NlVGFiKHBvc2l0aW9uOiBudW1iZXIpIHtcclxuICAgIGNvbnN0IHRhYiA9IHRoaXMudGFic1twb3NpdGlvbl07XHJcbiAgICBpZiAoIXRoaXMuX2Nsb3NpbmcodGFiKSkgcmV0dXJuO1xyXG4gICAgdGhpcy50YWJzLnNwbGljZShwb3NpdGlvbiwgMSk7XHJcbiAgICB0aGlzLl9kZXN0cm95UGFuZSh0YWIpO1xyXG4gICAgdGhpcy5zZWxlY3RlZFRhYkluZGV4ID0gdGhpcy50YWJzLmxlbmd0aCA/IHBvc2l0aW9uID4gMCA/IHBvc2l0aW9uIC0gMSA6IDAgOiAtMTtcclxuICAgIHRoaXMuX3N5bmNCcm93c2VySGlzdG9yeSgpO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBcclxuICAgKiBAcGFyYW0gcGFuZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgX2Nsb3NpbmcocGFuZTogUGFuZVJlZjxhbnk+KSB7XHJcbiAgICBsZXQgZXZ0ID0gbmV3IE5hdmlnYXRpb25DbG9zZShwYW5lKTtcclxuICAgIHBhbmUuX2V2ZW50cyQubmV4dChldnQpO1xyXG4gICAgcmV0dXJuICFldnQuX3ByZXZlbnREZWZhdWx0O1xyXG4gIH1cclxuXHJcbiAgZXhwYW5kUGFuZSgpIHtcclxuICAgIGNvbnN0IHBhbmUgPSB0aGlzLnBhbmVzW3RoaXMuc2VsZWN0ZWRJbmRleF07XHJcbiAgICBjb25zdCBldnQgPSBuZXcgTmF2aWdhdGlvbkV4cGFuZChwYW5lLl9leHBhbmRlZCA9IHRydWUsIHBhbmUpO1xyXG4gICAgcGFuZS5fZXZlbnRzJC5uZXh0KGV2dCk7XHJcbiAgICB0aGlzLl9yb3V0ZXIuX2V2ZW50cyQubmV4dChldnQpO1xyXG4gICAgaWYgKGV2dC5fcHJldmVudERlZmF1bHQpIHJldHVybjtcclxuICAgIHRoaXMuc3dhcCA9IHRoaXMuX2dldEhpc3RvcnlTdGVwKCk7XHJcbiAgICBsZXQgaSA9IDA7XHJcbiAgICBkbyB7XHJcbiAgICAgIGlmICh0aGlzLnBhbmVzW2ldICE9PSBwYW5lKSB7XHJcbiAgICAgICAgdGhpcy5fZGVzdHJveVBhbmUodGhpcy5wYW5lc1tpXSk7XHJcbiAgICAgICAgdGhpcy5wYW5lcy5zcGxpY2UoaSwgMSk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZVxyXG4gICAgICAgIGkrKztcclxuICAgIH1cclxuICAgIHdoaWxlIChpIDwgdGhpcy5wYW5lcy5sZW5ndGgpO1xyXG4gICAgdGhpcy5zZWxlY3RlZEluZGV4ID0gMDtcclxuICAgIHRoaXMuX3N5bmNCcm93c2VySGlzdG9yeSgpO1xyXG4gIH1cclxuICBwcml2YXRlIF9nZXRIaXN0b3J5U3RlcCgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIGhpc3Rvcnkuc3RhdGUgJiYgaGlzdG9yeS5zdGF0ZS5iaXpkb2MgPyAoaGlzdG9yeS5zdGF0ZSBhcyBIaXN0b3J5U3RhdGUpLnN0ZXAgOiAwO1xyXG4gIH1cclxuXHJcbiAgZXhwYW5kVGFiKCkge1xyXG4gICAgY29uc3QgdGFiID0gdGhpcy50YWJzW3RoaXMuc2VsZWN0ZWRUYWJJbmRleF07XHJcbiAgICBjb25zdCBldnQgPSBuZXcgTmF2aWdhdGlvbkV4cGFuZCh0YWIuX2V4cGFuZGVkID0gdHJ1ZSwgdGFiKVxyXG4gICAgdGFiLl9ldmVudHMkLm5leHQoZXZ0KTtcclxuICAgIHRoaXMuX3JvdXRlci5fZXZlbnRzJC5uZXh0KGV2dCk7XHJcbiAgICBpZiAoZXZ0Ll9wcmV2ZW50RGVmYXVsdCkgcmV0dXJuO1xyXG4gICAgdGhpcy5zd2FwID0gdGhpcy5fZ2V0SGlzdG9yeVN0ZXAoKTtcclxuICAgIHRoaXMuc3dhcFRhYiA9IG51bGw7XHJcbiAgICB0aGlzLnBhbmVzLmZvckVhY2gocCA9PlxyXG4gICAgICB0aGlzLl9kZXN0cm95UGFuZShwKVxyXG4gICAgKTtcclxuICAgIHRoaXMudGFicy5zcGxpY2UodGhpcy5zZWxlY3RlZFRhYkluZGV4LCAxKTtcclxuICAgIHRoaXMucGFuZXMuc3BsaWNlKDAsIHRoaXMucGFuZXMubGVuZ3RoLCB0YWIpO1xyXG5cclxuICAgIHRhYi5fbW9kZSA9ICdwYW5lJztcclxuICAgIHRoaXMuc2VsZWN0ZWRUYWJJbmRleCA9IHRoaXMudGFicy5sZW5ndGggPyAwIDogLTE7XHJcbiAgICB0aGlzLl9zeW5jQnJvd3Nlckhpc3RvcnkoKTtcclxuICB9XHJcblxyXG4gIHNlbGVjdChwb3NpdGlvbjogbnVtYmVyKSB7XHJcbiAgICBpZiAodGhpcy5zZWxlY3RlZEluZGV4ID09PSBwb3NpdGlvbikgcmV0dXJuO1xyXG4gICAgaWYgKHBvc2l0aW9uID09PSAtMSkge1xyXG4gICAgICBpZiAodGhpcy5wYW5lcy5sZW5ndGgpIHBvc2l0aW9uID0gdGhpcy5wYW5lcy5sZW5ndGggLSAxO1xyXG4gICAgICBlbHNlIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuc2VsZWN0ZWRJbmRleCA9IHBvc2l0aW9uO1xyXG4gICAgY29uc3QgcGFuZSA9IHRoaXMucGFuZXNbcG9zaXRpb25dO1xyXG4gICAgY29uc3QgZXZ0ID0gbmV3IE5hdmlnYXRpb25Gb2N1cyhwYW5lKTtcclxuICAgIHBhbmUuX2V2ZW50cyQubmV4dChldnQpO1xyXG4gICAgdGhpcy5fcm91dGVyLl9ldmVudHMkLm5leHQoZXZ0KTtcclxuICAgIHRoaXMuX3RpdGxlLnNldChwYW5lLnRpdGxlKTtcclxuICB9XHJcbiAgYXN5bmMgcmVtb3ZlQXQocG9zaXRpb246IG51bWJlcikge1xyXG4gICAgY29uc3QgcGFuZSA9IHRoaXMucGFuZXNbcG9zaXRpb25dO1xyXG5cclxuICAgIGlmICghdGhpcy5fY2xvc2luZyhwYW5lKSkgcmV0dXJuO1xyXG5cclxuICAgIGF3YWl0IHRoaXMuX2Rpc21pc3MocGFuZSk7XHJcblxyXG4gICAgdGhpcy5fZGlzY2FyZFBhbmUocGFuZSk7XHJcblxyXG4gICAgaWYgKHBvc2l0aW9uID49IHRoaXMuc2VsZWN0ZWRJbmRleClcclxuICAgICAgdGhpcy5zZWxlY3QoLTEpO1xyXG4gICAgdGhpcy5fc3luY0Jyb3dzZXJIaXN0b3J5KCk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSBwYW5lXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBhc3luYyBfZGlzbWlzcyhwYW5lOiBQYW5lUmVmPGFueT4pIHtcclxuICAgIGNvbnN0IHBhbmVzID0gdGhpcy5wYW5lcy5jb25jYXQodGhpcy50YWJzKS5cclxuICAgICAgZmlsdGVyKHMgPT4gcy5kZWNlbmRlbnRPZihwYW5lKSAmJiBzLnJvdXRlICYmIHMucm91dGUuY2FuRGlzbWlzcykuXHJcbiAgICAgIHJldmVyc2UoKTtcclxuXHJcbiAgICBwYW5lLnJvdXRlICYmIHBhbmUucm91dGUuY2FuRGlzbWlzcyAmJlxyXG4gICAgICBwYW5lcy5wdXNoKHBhbmUpO1xyXG5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFuZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgbGV0IG9rID0gYXdhaXQgdGhpcy5fZGlzbWlzc2FibGUocGFuZXNbaV0pO1xyXG4gICAgICBpZiAoIW9rKSB0aHJvdyAnJztcclxuICAgIH1cclxuICB9XHJcbiAgLyoqXHJcbiAgICogXHJcbiAgICogQHBhcmFtIHBhbmVcclxuICAgKi9cclxuICBwcml2YXRlIF9kaXNjYXJkUGFuZShwYW5lOiBQYW5lUmVmPGFueT4pIHtcclxuICAgIHRoaXMucGFuZXMuY29uY2F0KHRoaXMudGFicykuXHJcbiAgICAgIGZpbHRlcihzID0+IHMuZGVjZW5kZW50T2YocGFuZSkpLlxyXG4gICAgICByZXZlcnNlKCkuXHJcbiAgICAgIGZvckVhY2gocyA9PiB0aGlzLl9kaXNjYXJkUGFuZShzKSk7XHJcbiAgICB0aGlzLl9kZXN0cm95UGFuZShwYW5lKTtcclxuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5wYW5lcy5pbmRleE9mKHBhbmUpO1xyXG4gICAgdGhpcy5wYW5lcy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gIH1cclxuICBwcml2YXRlIF9jbGVhclBlbmRpbmcoKSB7XHJcbiAgICB0aGlzLl9wZW5kaW5nLnNwbGljZSgwLCB0aGlzLl9wZW5kaW5nLmxlbmd0aCk7XHJcbiAgfVxyXG4gIC8qKiAqL1xyXG4gIHByaXZhdGUgYXN5bmMgX2NsZWFyUGFuZXMoKSB7XHJcbiAgICBhd2FpdCB0aGlzLl9kaXNtaXNzQWxsKHRoaXMucGFuZXMpO1xyXG4gICAgdGhpcy5wYW5lcy5mb3JFYWNoKHAgPT4gdGhpcy5fZGVzdHJveVBhbmUocCkpO1xyXG4gICAgdGhpcy5wYW5lcy5zcGxpY2UoMCwgdGhpcy5wYW5lcy5sZW5ndGgpO1xyXG4gICAgdGhpcy5zZWxlY3RlZEluZGV4ID0gLTE7XHJcbiAgICB0aGlzLnN3YXAgPSBudWxsO1xyXG4gIH1cclxuICBwcml2YXRlIGFzeW5jIF9jbGVhclRhYnMoKSB7XHJcbiAgICBpZiAoIXRoaXMudGFicy5sZW5ndGgpIHJldHVybjtcclxuICAgIGF3YWl0IHRoaXMuX2Rpc21pc3NBbGwodGhpcy50YWJzKTtcclxuICAgIHRoaXMudGFicy5mb3JFYWNoKHQgPT4gdGhpcy5fZGVzdHJveVBhbmUodCkpO1xyXG4gICAgdGhpcy50YWJzLnNwbGljZSgwLCB0aGlzLnRhYnMubGVuZ3RoKTtcclxuICAgIHRoaXMuc2VsZWN0ZWRUYWJJbmRleCA9IC0xO1xyXG4gICAgdGhpcy5zd2FwVGFiID0gbnVsbDtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogXHJcbiAgICogQHBhcmFtIHBhbmVzXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBhc3luYyBfZGlzbWlzc0FsbChwYW5lczogUGFuZVJlZltdKSB7XHJcbiAgICBmb3IgKGxldCBwYW5lIG9mIHBhbmVzLlxyXG4gICAgICBmaWx0ZXIocyA9PiBzLnJvdXRlICYmIHMucm91dGUuY2FuRGlzbWlzcykpIHtcclxuICAgICAgbGV0IG9rID0gYXdhaXQgdGhpcy5fZGlzbWlzc2FibGUocGFuZSk7XHJcbiAgICAgIGlmICghb2spXHJcbiAgICAgICAgdGhyb3cgJyc7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBcclxuICAgKiBAcGFyYW0gcGFuZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgX2Rpc21pc3NhYmxlKHBhbmU6IFBhbmVSZWY8YW55Pikge1xyXG4gICAgY29uc3QgeyBpbnN0YW5jZSwgcm91dGU6IHsgY2FuRGlzbWlzcyB9IH0gPSBwYW5lO1xyXG4gICAgY29uc3QgZGlzbWlzc2FibGUgPSB0aGlzLl9pbmplY3Rvci5nZXQoY2FuRGlzbWlzcykgYXMgQ2FuRGlzbWlzczxhbnk+O1xyXG4gICAgY29uc3Qgb2sgPSBkaXNtaXNzYWJsZS5vbkRpc21pc3MoaW5zdGFuY2UpO1xyXG4gICAgaWYgKGlzQm9vbGVhbihvaykpXHJcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUob2spO1xyXG4gICAgZWxzZSBpZiAoaXNQcm9taXNlKG9rKSlcclxuICAgICAgcmV0dXJuIG9rO1xyXG4gICAgZWxzZVxyXG4gICAgICByZXR1cm4gb2sudG9Qcm9taXNlKCk7XHJcbiAgfVxyXG4gIHNjcm9sbFRvKGluZGV4OiBudW1iZXIpIHtcclxuICAgIGNvbnN0IGl0ZW0gPSB0aGlzLl9jaGlsZHJlbi5pdGVtKGluZGV4KSBhcyBIVE1MRGl2RWxlbWVudDtcclxuICAgIGl0ZW0gJiYgaXRlbS5zY3JvbGxJbnRvVmlldyh7IGJlaGF2aW9yOiAnc21vb3RoJywgaW5saW5lOiAnZW5kJywgYmxvY2s6ICdlbmQnIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXQgX2NoaWxkcmVuKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3BhbmVzQ29udGFpbmVyUmVmLmVsZW1lbnQubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCcucGFuZS1jb250ZW50Jyk7XHJcbiAgfVxyXG4gIGRvbmUoKSB7XHJcbiAgICB0aGlzLmVuYWJsZU5hdmlnYXRpb25BcnJvd3MoKTtcclxuICAgIHRoaXMuX3Jlc2l6ZSgpO1xyXG4gIH1cclxuICBlbmFibGVOYXZpZ2F0aW9uQXJyb3dzKF8/OiBFdmVudCkge1xyXG4gICAgY29uc3QgY29udGFpbmVyID0gdGhpcy5fcGFuZXNDb250YWluZXJSZWYuZWxlbWVudC5uYXRpdmVFbGVtZW50LFxyXG4gICAgICBzY3JvbGxMZWZ0ID0gTWF0aC5yb3VuZChjb250YWluZXIuc2Nyb2xsTGVmdCk7XHJcbiAgICB0aGlzLm5leHQgPSB0aGlzLl9ydGwgPyBjb250YWluZXIuY2xpZW50V2lkdGggLSBzY3JvbGxMZWZ0IDwgY29udGFpbmVyLnNjcm9sbFdpZHRoIDpcclxuICAgICAgc2Nyb2xsTGVmdCArIGNvbnRhaW5lci5jbGllbnRXaWR0aCA8IGNvbnRhaW5lci5zY3JvbGxXaWR0aDtcclxuICAgIHRoaXMucHJldiA9IHRoaXMuX3J0bCA/IHNjcm9sbExlZnQgPCAwIDogc2Nyb2xsTGVmdCA+IDA7XHJcbiAgfVxyXG4gIHNjcm9sbEJ5KG46IG51bWJlcikge1xyXG4gICAgY29uc3QgbGVmdCA9IG4gKiAodGhpcy5fcnRsID8gLTEgOiAxKTtcclxuICAgIHRoaXMuX3BhbmVzQ29udGFpbmVyUmVmLmVsZW1lbnQubmF0aXZlRWxlbWVudC5zY3JvbGxCeSh7IGJlaGF2aW9yOiAnc21vb3RoJywgbGVmdCB9KTtcclxuICB9XHJcbiAgZm9jdXMoaW5kZXgpIHtcclxuICAgIGNvbnN0IGVsID0gdGhpcy5fY2hpbGRyZW4uaXRlbShpbmRleCkgYXMgSFRNTERpdkVsZW1lbnQ7XHJcbiAgICBlbC5mb2N1cygpO1xyXG4gIH1cclxuICBvblBhbmVSZXNpemUocGFuZTogUGFuZVJlZjxhbnk+LCBldmVudDogTW91c2VFdmVudCkge1xyXG4gICAgY29uc3QgZWwgPSAoZXZlbnQuc3JjRWxlbWVudCBhcyBIVE1MRGl2RWxlbWVudCkucHJldmlvdXNFbGVtZW50U2libGluZyBhcyBIVE1MRGl2RWxlbWVudDtcclxuXHJcbiAgICBjb25zdCAvLyByZW1lbWJlciBtb3VzZSBkb3duIGluZm9cclxuICAgICAgd2lkdGggPSBlbC5jbGllbnRXaWR0aCxcclxuICAgICAgZCA9IHRoaXMuX3J0bCA/IC0xIDogMTtcclxuXHJcbiAgICAoZXZlbnQuc3JjRWxlbWVudCBhcyBIVE1MRGl2RWxlbWVudCkuY2xhc3NMaXN0LmFkZCgncmVzaXppbmcnKTtcclxuXHJcbiAgICB0aGlzLmRyYWdnaW5nID0gdHJ1ZTtcclxuXHJcbiAgICBkb2N1bWVudC5vbm1vdXNlbW92ZSA9IG9uTW91c2VNb3ZlO1xyXG4gICAgZG9jdW1lbnQub25tb3VzZXVwID0gKCkgPT4ge1xyXG4gICAgICAoZXZlbnQuc3JjRWxlbWVudCBhcyBIVE1MRGl2RWxlbWVudCkuY2xhc3NMaXN0LnJlbW92ZSgncmVzaXppbmcnKTtcclxuICAgICAgZG9jdW1lbnQub25tb3VzZW1vdmUgPSBkb2N1bWVudC5vbm1vdXNldXAgPSBudWxsO1xyXG4gICAgICB0aGlzLmRyYWdnaW5nID0gZmFsc2U7XHJcbiAgICB9O1xyXG4gICAgZnVuY3Rpb24gb25Nb3VzZU1vdmUoZSkge1xyXG5cclxuICAgICAgY29uc3QgZGVsdGEgPSAoZS5jbGllbnRYIC0gZXZlbnQuY2xpZW50WCkgKiBkO1xyXG4gICAgICBlbC5zdHlsZS53aWR0aCA9IGVsLnN0eWxlLm1pbldpZHRoXHJcbiAgICAgICAgPSBNYXRoLm1heCh3aWR0aCArIGRlbHRhLCAzNTApICsgJ3B4JztcclxuICAgICAgcGFuZS5fZXZlbnRzJC5uZXh0KG5ldyBOYXZpZ2F0aW9uUmVzaXplKHt9IGFzIGFueSwgcGFuZSkpO1xyXG4gICAgfVxyXG4gIH1cclxuICBvblRhYlJlc2l6ZShldmVudDogTW91c2VFdmVudCkge1xyXG4gICAgY29uc3QgZWwgPSAoZXZlbnQuc3JjRWxlbWVudCBhcyBIVE1MRGl2RWxlbWVudCkubmV4dEVsZW1lbnRTaWJsaW5nIGFzIEhUTUxEaXZFbGVtZW50O1xyXG5cclxuICAgIGNvbnN0XHJcbiAgICAgIG1lID0gdGhpcyxcclxuICAgICAgLy8gcmVtZW1iZXIgbW91c2UgZG93biBpbmZvXHJcbiAgICAgIHdpZHRoID0gZWwuY2xpZW50V2lkdGgsXHJcbiAgICAgIGQgPSB0aGlzLl9ydGwgPyAxIDogLTE7XHJcblxyXG4gICAgKGV2ZW50LnNyY0VsZW1lbnQgYXMgSFRNTERpdkVsZW1lbnQpLmNsYXNzTGlzdC5hZGQoJ3Jlc2l6aW5nJyk7XHJcblxyXG4gICAgdGhpcy5kcmFnZ2luZyA9IHRydWU7XHJcblxyXG4gICAgZG9jdW1lbnQub25tb3VzZW1vdmUgPSBvbk1vdXNlTW92ZTtcclxuICAgIGRvY3VtZW50Lm9ubW91c2V1cCA9ICgpID0+IHtcclxuICAgICAgKGV2ZW50LnNyY0VsZW1lbnQgYXMgSFRNTERpdkVsZW1lbnQpLmNsYXNzTGlzdC5yZW1vdmUoJ3Jlc2l6aW5nJyk7XHJcbiAgICAgIGRvY3VtZW50Lm9ubW91c2Vtb3ZlID0gZG9jdW1lbnQub25tb3VzZXVwID0gbnVsbDtcclxuICAgICAgdGhpcy5kcmFnZ2luZyA9IGZhbHNlO1xyXG4gICAgICBtZS5lbmFibGVOYXZpZ2F0aW9uQXJyb3dzKCk7XHJcbiAgICAgIHRoaXMuX3Jlc2l6ZSgpO1xyXG4gICAgfTtcclxuICAgIGZ1bmN0aW9uIG9uTW91c2VNb3ZlKGUpIHtcclxuXHJcbiAgICAgIC8vIHByZXZlbnQgbmVnYXRpdmUtc2l6ZWQgZWxlbWVudHNcclxuICAgICAgY29uc3QgZGVsdGEgPSBNYXRoLm1heCgoZS5jbGllbnRYIC0gZXZlbnQuY2xpZW50WCkgKiBkLCAtd2lkdGgpO1xyXG4gICAgICBlbC5zdHlsZS53aWR0aCA9IGVsLnN0eWxlLm1pbldpZHRoID0gKHdpZHRoICsgZGVsdGEpICsgJ3B4JztcclxuICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ3RhYnMnLCBlbC5zdHlsZS53aWR0aCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHByaXZhdGUgX2Rlc3Ryb3lQYW5lKHBhbmU6IFBhbmVSZWYpIHtcclxuICAgIHBhbmUuX2Rlc3Ryb3koKTtcclxuICAgIGNvbnN0IGV2dCA9IG5ldyBOYXZpZ2F0aW9uRW5kKHBhbmUpO1xyXG4gICAgcGFuZS5fZXZlbnRzJC5uZXh0KGV2dCk7XHJcbiAgICB0aGlzLl9yb3V0ZXIuX2V2ZW50cyQubmV4dChldnQpO1xyXG4gIH1cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuX2Rlc3Ryb3kubmV4dCgpO1xyXG4gICAgdGhpcy5fZGVzdHJveS5jb21wbGV0ZSgpO1xyXG4gIH1cclxufVxyXG5cclxuY29uc3QgUEFORV9QQVJBTVNfUkVHRVggPSAvKDpbXFx3XFwtXSspL2c7XHJcblxyXG5mdW5jdGlvbiBwcmVwYXJlUm91dGVzKHJvdXRlczogUGFuZVJvdXRlW10sIHRyZWVQYXRoPzogc3RyaW5nKTogRXh0ZW5kZWRSb3V0ZVtdIHtcclxuICBmb3IgKGxldCBpID0gMDsgaSA8IHJvdXRlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgbGV0IHJvdXRlID0gcm91dGVzW2ldLCBmdWxsUGF0aCA9ICh0cmVlUGF0aCA/ICh0cmVlUGF0aCArICcvJykgOiAnJykgKyByb3V0ZS5wYXRoO1xyXG5cclxuICAgIE9iamVjdC5hc3NpZ24ocm91dGUsIHtcclxuICAgICAgZnVsbFBhdGgsXHJcbiAgICAgIHJlZ0V4OiBuZXcgUmVnRXhwKCdeJyArIGZ1bGxQYXRoLlxyXG4gICAgICAgIHJlcGxhY2UoJy8nLCAnXFxcXC8nKS5cclxuICAgICAgICByZXBsYWNlKFBBTkVfUEFSQU1TX1JFR0VYLCBlID0+IGAoPzwke2Uuc3Vic3RyKDEpfT5bXFxcXHdAXFxcXC1dKilgKSlcclxuICAgIH0pO1xyXG4gICAgaWYgKHJvdXRlLmNoaWxkcmVuKSB7XHJcbiAgICAgIGxldCBjaGlsZHJlbiA9IHByZXBhcmVSb3V0ZXMocm91dGUuY2hpbGRyZW4sIGZ1bGxQYXRoKTtcclxuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBjaGlsZHJlbi5sZW5ndGg7IGorKylcclxuICAgICAgICBPYmplY3QuYXNzaWduKGNoaWxkcmVuW2pdLCB7XHJcbiAgICAgICAgICBwYXJlbnQ6IHJvdXRlXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHJldHVybiByb3V0ZXMgYXMgRXh0ZW5kZWRSb3V0ZVtdO1xyXG59XHJcblxyXG5pbnRlcmZhY2UgRXh0ZW5kZWRSb3V0ZSBleHRlbmRzIFBhbmVSb3V0ZSB7XHJcbiAgZnVsbFBhdGg6IHN0cmluZztcclxuICByZWdFeDogUmVnRXhwO1xyXG4gIHBhcmVudD86IEV4dGVuZGVkUm91dGU7XHJcbiAgY2hpbGRyZW4/OiBFeHRlbmRlZFJvdXRlW107XHJcbn1cclxuaW50ZXJmYWNlIEhpc3RvcnlTdGF0ZSB7XHJcbiAgYml6ZG9jOiB0cnVlO1xyXG4gIHN0ZXA6IG51bWJlcjtcclxuICBzd2FwPzogbnVtYmVyO1xyXG4gIHN3YXBUYWI/OiBudW1iZXI7XHJcbiAgZ3JvdXA/OiBzdHJpbmc7XHJcbiAgcHJldkdyb3VwPzogc3RyaW5nO1xyXG4gIHBhbmVzOiBhbnlbXTtcclxuICB0YWJzOiBhbnlbXTtcclxuICBzZWxlY3RlZFRhYkluZGV4PzogbnVtYmVyO1xyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJwYW5lc1wiPlxyXG4gIDxkaXYgY2xhc3M9XCJzY3JvbGwtYXJyb3dcIiAoY2xpY2spPVwic2Nyb2xsQnkoLTQwMClcIiBtYXRSaXBwbGUgW21hdFJpcHBsZVVuYm91bmRlZF09XCJ0cnVlXCIgW21hdFJpcHBsZUNlbnRlcmVkXT1cInRydWVcIiBbbWF0UmlwcGxlQ29sb3JdPVwiYWNjZW50XCJcclxuICAgICAgICpuZ0lmPVwicHJldlwiPlxyXG4gICAgPGkgY2xhc3M9XCJtYXRlcmlhbC1pY29ucyBtYXQtaWNvbi1ydGwtbWlycm9yXCI+XHJcbiAgICAgIGFycm93X2JhY2tfaW9zXHJcbiAgICA8L2k+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiBjbGFzcz1cInBhbmVzLXRpdGxlXCIgW0B0aXRsZV09XCJ0aXRsZUFuaW1hdGlvblwiPlxyXG4gICAgPGgxPlxyXG4gICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwiYmFjaygpXCIgKm5nSWY9XCJzd2FwXCIgW2JpemRvY1Rvb2x0aXBdPVwiJ0JhY2snfHRyYW5zbGF0ZVwiPjxtYXQtaWNvbiBjbGFzcz1cIm1hdC1pY29uLXJ0bC1taXJyb3JcIj5hcnJvd19jaXJjbGVfbGVmdDwvbWF0LWljb24+PC9idXR0b24+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHAgb2YgcGFuZXM7IGxldCBmaXJzdCA9IGZpcnN0XCI+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJicmVhZGNydW1ic1wiICpuZ0lmPVwiIWZpcnN0XCI+XFw8L3NwYW4+XHJcbiAgICAgICAge3twLnRpdGxlfX1cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJndWlkZShwYW5lc1swXS5ndWlkZSlcIiAqbmdJZj1cInBhbmVzWzBdPy5ndWlkZVwiIFtiaXpkb2NUb29sdGlwXT1cIidIZWxwJ3x0cmFuc2xhdGVcIj48bWF0LWljb24+aGVscDwvbWF0LWljb24+PC9idXR0b24+XHJcbiAgICA8L2gxPlxyXG4gICAgPHNwYW4gY2xhc3M9XCJkaXZpZGVyXCI+XHJcbiAgICA8L3NwYW4+XHJcbiAgICA8Yml6ZG9jLXF1aWNrdG9vbHM+PC9iaXpkb2MtcXVpY2t0b29scz5cclxuICA8L2Rpdj5cclxuICA8ZGl2ICNwYW5uaW5nIGNsYXNzPVwicGFuZXMtY29udGFpbmVyXCJcclxuICAgICAgIGNka1Njcm9sbGFibGVcclxuICAgICAgIEBwYW5lc1xyXG4gICAgICAgKHNjcm9sbCk9XCJlbmFibGVOYXZpZ2F0aW9uQXJyb3dzKCRldmVudClcIj5cclxuICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHAgb2YgcGFuZXM7IGxldCBpID0gaW5kZXhcIj5cclxuICAgICAgPGRpdiAobW91c2VlbnRlcik9XCJzZWxlY3RlZEluZGV4ICE9PSBpICYmICFkcmFnZ2luZyAmJiBzZWxlY3QoaSlcIlxyXG4gICAgICAgICAgIChjbGljayk9XCJzZWxlY3QoaSlcIlxyXG4gICAgICAgICAgIFtjbGFzcy5hY3RpdmVdPVwic2VsZWN0ZWRJbmRleCA9PT0gaVwiIGNsYXNzPVwicGFuZS1jb250ZW50XCIgQHBhbmU+XHJcbiAgICAgICAgPG5neC1jb21wb25lbnQtb3V0bGV0IFt0eXBlXT1cInAuY29tcG9uZW50XCIgW2luamVjdG9yXT1cInAuaW5qZWN0b3JcIiAoY3JlYXRlKT1cInAuX2luc3RhbmNlID0gJGV2ZW50XCI+PC9uZ3gtY29tcG9uZW50LW91dGxldD5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJwYW5lLXNlcGFyYXRvclwiICpuZ0lmPVwiaSA8IHBhbmVzLmxlbmd0aCAtIDFcIiAobW91c2Vkb3duKT1cIm9uUGFuZVJlc2l6ZShwLCAkZXZlbnQpXCI+Jm5ic3A7PC9kaXY+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuICA8L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwiYmFja2Ryb3BcIiAqbmdJZj1cImRpYWxvZ1wiIChjbGljayk9XCJjbG9zZVRhYihzZWxlY3RlZFRhYkluZGV4KVwiPjwvZGl2PlxyXG4gIDxkaXYgY2xhc3M9XCJzY3JvbGwtYXJyb3cgZm9yd2FyZFwiXHJcbiAgICAgICAqbmdJZj1cIm5leHRcIj5cclxuICAgIDxpIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMgbWF0LWljb24tcnRsLW1pcnJvclwiIG1hdFJpcHBsZSBbbWF0UmlwcGxlVW5ib3VuZGVkXT1cInRydWVcIiBbbWF0UmlwcGxlQ2VudGVyZWRdPVwidHJ1ZVwiIFttYXRSaXBwbGVSYWRpdXNdPVwiMzBcIiBbbWF0UmlwcGxlQ29sb3JdPVwiYWNjZW50XCJcclxuICAgICAgIChjbGljayk9XCJzY3JvbGxCeSg0MDApXCI+XHJcbiAgICAgIGFycm93X2ZvcndhcmRfaW9zXHJcbiAgICA8L2k+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG48bmctY29udGFpbmVyICpuZ0lmPVwidGFicy5sZW5ndGhcIj5cclxuICA8ZGl2IGNsYXNzPVwidGFicy1zZXBhcmF0b3JcIiAobW91c2Vkb3duKT1cIm9uVGFiUmVzaXplKCRldmVudClcIj4mbmJzcDs8L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwibWF0LWVsZXZhdGlvbi16MTggdGFic1wiIFtAdGFic109XCJ0YWJzQW5pbWF0aW9uXCIgKEB0YWJzLmRvbmUpPVwiZG9uZSgpXCIgI3RhYmluZz5cclxuICAgIDxkaXYgY2xhc3M9XCJyb3cgdGFicy10aXRsZVwiPlxyXG4gICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwidGFiQmFjaygpXCIgKm5nSWY9XCJzd2FwVGFiXCIgW2JpemRvY1Rvb2x0aXBdPVwicHJldkdyb3VwIHx8ICgnQmFjayd8dHJhbnNsYXRlKVwiPjxtYXQtaWNvbiBjbGFzcz1cIm1hdC1pY29uLXJ0bC1taXJyb3JcIj5hcnJvd19iYWNrPC9tYXQtaWNvbj48L2J1dHRvbj5cclxuICAgICAgPGgyPnt7Z3JvdXB9fTwvaDI+XHJcbiAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJleHBhbmRUYWIoKVwiIFtiaXpkb2NUb29sdGlwXT1cIidFeHBhbmQnfCB0cmFuc2xhdGVcIj48bWF0LWljb24gaW5saW5lPVwidHJ1ZVwiIGNsYXNzPVwibWF0LWljb24tcnRsLW1pcnJvclwiPm9wZW5faW5fZnVsbDwvbWF0LWljb24+PC9idXR0b24+XHJcbiAgICAgIDwhLS0qbmdJZj1cInNlbGVjdGVkVGFiSW5kZXggPD08IC0xICYmIHRhYnNbc2VsZWN0ZWRUYWJJbmRleF0uZXhwYW5kYWJsZVwiLS0+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwiZGl2aWRlclwiPjwvc3Bhbj5cclxuICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cImNvbGxhcHNlKClcIiBiaXpkb2NUb29sdGlwPVwiRXNjXCI+PG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj48L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG4gICAgPG5hdiBtYXQtdGFiLW5hdi1iYXIgY29sb3I9XCJhY2NlbnRcIiBbZGlzYWJsZVBhZ2luYXRpb25dPVwidHJ1ZVwiPlxyXG4gICAgICA8YSBtYXQtdGFiLWxpbmsgKm5nRm9yPVwibGV0IHQgb2YgdGFiczsgbGV0IGkgPSBpbmRleFwiIGNsYXNzPVwibWF0LXRhYi1saW5rXCJcclxuICAgICAgICAgKGNsaWNrKT1cInNlbGVjdGVkVGFiSW5kZXggPSBpXCJcclxuICAgICAgICAgW2FjdGl2ZV09XCJzZWxlY3RlZFRhYkluZGV4ID09PSBpXCI+XHJcbiAgICAgICAgPG1hdC1pY29uIFttYXRCYWRnZV09XCJ0LmJhZGdlXCIgW21hdEJhZGdlSGlkZGVuXT1cIiF0LmJhZGdlXCIgbWF0QmFkZ2VTaXplPVwic21hbGxcIiBtYXRCYWRnZUNvbG9yPVwiYWNjZW50XCI+e3t0Lmljb259fTwvbWF0LWljb24+Jm5ic3A7XHJcbiAgICAgICAge3t0LnRpdGxlfX1cclxuICAgICAgICA8bWF0LWljb24gKm5nSWY9XCJ0LmRpc21pc3NhYmxlXCIgKGNsaWNrKT1cImNsb3NlVGFiKGkpXCIgY2xhc3M9XCJ0b29sXCI+Y2xvc2U8L21hdC1pY29uPlxyXG4gICAgICAgIDwhLS1pbmxpbmU9XCJ0cnVlXCItLT5cclxuICAgICAgPC9hPlxyXG4gICAgPC9uYXY+XHJcbiAgICA8ZGl2ICpuZ0Zvcj1cImxldCB0IG9mIHRhYnM7IGxldCBpID0gaW5kZXhcIiBbc3R5bGUuZGlzcGxheV09XCJzZWxlY3RlZFRhYkluZGV4ID09PSBpID8gJyc6ICdub25lJ1wiIGNsYXNzPVwidGFiXCIgW0B0YWJdPVwic2VsZWN0ZWRUYWJJbmRleFwiPlxyXG4gICAgICA8bmd4LWNvbXBvbmVudC1vdXRsZXQgW3R5cGVdPVwidC5jb21wb25lbnRcIiBbaW5qZWN0b3JdPVwidC5pbmplY3RvclwiIChjcmVhdGUpPVwidC5faW5zdGFuY2UgPSAkZXZlbnRcIj48L25neC1jb21wb25lbnQtb3V0bGV0PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvbmctY29udGFpbmVyPlxyXG4iXX0=
|