@sumaris-net/ngx-components 2.7.2-rc9 → 2.7.3-rc2
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/doc/changelog.md +36 -0
- package/esm2022/public_api.mjs +11 -9
- package/esm2022/src/app/admin/admin-routing.module.mjs +10 -17
- package/esm2022/src/app/admin/admin.module.mjs +7 -9
- package/esm2022/src/app/admin/services/filter/person.filter.mjs +3 -3
- package/esm2022/src/app/admin/services/person.service.mjs +31 -31
- package/esm2022/src/app/admin/services/validator/person.validator.mjs +10 -10
- package/esm2022/src/app/admin/users/users.mjs +14 -7
- package/esm2022/src/app/admin/users/users.module.mjs +8 -10
- package/esm2022/src/app/core/about/about.modal.mjs +7 -7
- package/esm2022/src/app/core/about/about.module.mjs +8 -21
- package/esm2022/src/app/core/account/account.module.mjs +9 -15
- package/esm2022/src/app/core/account/account.page.mjs +5 -5
- package/esm2022/src/app/core/account/new-token.modal.mjs +9 -8
- package/esm2022/src/app/core/account/token.table.mjs +5 -5
- package/esm2022/src/app/core/auth/auth.form.mjs +9 -9
- package/esm2022/src/app/core/auth/auth.modal.mjs +6 -6
- package/esm2022/src/app/core/auth/auth.module.mjs +9 -9
- package/esm2022/src/app/core/core.module.mjs +17 -46
- package/esm2022/src/app/core/core.testing.module.mjs +15 -15
- package/esm2022/src/app/core/form/buttons/form-buttons-bar.component.mjs +16 -15
- package/esm2022/src/app/core/form/buttons/form-buttons-bar.module.mjs +9 -13
- package/esm2022/src/app/core/form/entity/editor.class.mjs +87 -89
- package/esm2022/src/app/core/form/entity/entity-editor-modal.class.mjs +12 -17
- package/esm2022/src/app/core/form/entity/entity-editor.class.mjs +31 -32
- package/esm2022/src/app/core/form/entity/entity-metadata.component.mjs +5 -5
- package/esm2022/src/app/core/form/entity/entity.module.mjs +8 -14
- package/esm2022/src/app/core/form/form.class.mjs +12 -12
- package/esm2022/src/app/core/form/form.module.mjs +8 -8
- package/esm2022/src/app/core/form/form.utils.mjs +25 -23
- package/esm2022/src/app/core/form/list/list.form.mjs +13 -12
- package/esm2022/src/app/core/form/list/list.module.mjs +8 -12
- package/esm2022/src/app/core/form/properties/properties.form.mjs +12 -15
- package/esm2022/src/app/core/form/properties/properties.module.mjs +9 -15
- package/esm2022/src/app/core/form/properties/properties.table.mjs +24 -26
- package/esm2022/src/app/core/form/properties/property.validator.mjs +6 -6
- package/esm2022/src/app/core/form/properties/testing/properties-form.test.mjs +18 -18
- package/esm2022/src/app/core/form/properties/testing/properties-form.testing.module.mjs +8 -24
- package/esm2022/src/app/core/form/text-popover/testing/text-popover.testing.mjs +9 -8
- package/esm2022/src/app/core/form/text-popover/testing/text-popover.testing.module.mjs +10 -25
- package/esm2022/src/app/core/form/text-popover/text-popover.component.mjs +6 -6
- package/esm2022/src/app/core/form/text-popover/text-popover.module.mjs +9 -13
- package/esm2022/src/app/core/graphql/graphql.module.mjs +8 -13
- package/esm2022/src/app/core/graphql/graphql.service.mjs +71 -95
- package/esm2022/src/app/core/graphql/graphql.utils.mjs +12 -11
- package/esm2022/src/app/core/home/home.mjs +26 -27
- package/esm2022/src/app/core/home/home.module.mjs +10 -19
- package/esm2022/src/app/core/icon/icon.component.mjs +5 -5
- package/esm2022/src/app/core/icon/icon.module.mjs +8 -17
- package/esm2022/src/app/core/install/install-upgrade-card.component.mjs +33 -37
- package/esm2022/src/app/core/install/install-upgrade-card.module.mjs +9 -13
- package/esm2022/src/app/core/menu/menu.component.mjs +5 -6
- package/esm2022/src/app/core/menu/menu.model.mjs +21 -18
- package/esm2022/src/app/core/menu/menu.module.mjs +7 -12
- package/esm2022/src/app/core/menu/menu.service.mjs +44 -60
- package/esm2022/src/app/core/menu/sub-menu-tab.directive.mjs +4 -4
- package/esm2022/src/app/core/menu/testing/menu-other.testing.mjs +5 -5
- package/esm2022/src/app/core/menu/testing/menu.testing.mjs +5 -5
- package/esm2022/src/app/core/menu/testing/menu.testing.module.mjs +8 -27
- package/esm2022/src/app/core/offline/update-offline-mode-card.component.mjs +6 -7
- package/esm2022/src/app/core/offline/update-offline-mode-card.module.mjs +9 -13
- package/esm2022/src/app/core/peer/select-peer.modal.mjs +8 -9
- package/esm2022/src/app/core/peer/select-peer.module.mjs +10 -19
- package/esm2022/src/app/core/register/register-confirm.page.mjs +12 -12
- package/esm2022/src/app/core/register/register.form.mjs +5 -5
- package/esm2022/src/app/core/register/register.modal.mjs +6 -6
- package/esm2022/src/app/core/register/register.module.mjs +8 -29
- package/esm2022/src/app/core/services/account.service.mjs +172 -160
- package/esm2022/src/app/core/services/auth-guard.service.mjs +13 -15
- package/esm2022/src/app/core/services/base-entity-service.class.mjs +51 -60
- package/esm2022/src/app/core/services/base-graphql-service.class.mjs +39 -33
- package/esm2022/src/app/core/services/base58.mjs +8 -4
- package/esm2022/src/app/core/services/config/core.config.mjs +37 -37
- package/esm2022/src/app/core/services/config.service.mjs +51 -49
- package/esm2022/src/app/core/services/crypto.service.mjs +11 -11
- package/esm2022/src/app/core/services/errors.mjs +3 -3
- package/esm2022/src/app/core/services/local-settings.service.mjs +36 -37
- package/esm2022/src/app/core/services/model/account.model.mjs +12 -17
- package/esm2022/src/app/core/services/model/config.model.mjs +5 -5
- package/esm2022/src/app/core/services/model/department.model.mjs +3 -2
- package/esm2022/src/app/core/services/model/entity.decorators.mjs +6 -6
- package/esm2022/src/app/core/services/model/entity.model.mjs +25 -25
- package/esm2022/src/app/core/services/model/filter.model.mjs +12 -15
- package/esm2022/src/app/core/services/model/history.model.mjs +1 -1
- package/esm2022/src/app/core/services/model/model.enum.mjs +2 -2
- package/esm2022/src/app/core/services/model/peer.model.mjs +9 -8
- package/esm2022/src/app/core/services/model/person.model.mjs +18 -17
- package/esm2022/src/app/core/services/model/referential.model.mjs +13 -13
- package/esm2022/src/app/core/services/model/settings.model.mjs +1 -1
- package/esm2022/src/app/core/services/model/token.model.mjs +2 -3
- package/esm2022/src/app/core/services/model/tree-item-entity.model.mjs +2 -6
- package/esm2022/src/app/core/services/network.service.mjs +42 -43
- package/esm2022/src/app/core/services/network.types.mjs +1 -1
- package/esm2022/src/app/core/services/network.utils.mjs +3 -3
- package/esm2022/src/app/core/services/pipes/account.pipes.mjs +11 -11
- package/esm2022/src/app/core/services/pipes/department-to-string.pipe.mjs +6 -6
- package/esm2022/src/app/core/services/pipes/person-to-string.pipe.mjs +6 -6
- package/esm2022/src/app/core/services/pipes/pipes.module.mjs +54 -0
- package/esm2022/src/app/core/services/pipes/referential-to-string.pipe.mjs +21 -0
- package/esm2022/src/app/core/services/pipes/usage-mode.pipes.mjs +11 -11
- package/esm2022/src/app/core/services/platform.service.mjs +45 -49
- package/esm2022/src/app/core/services/storage/entities-storage.service.mjs +32 -39
- package/esm2022/src/app/core/services/storage/entity-store.class.mjs +36 -45
- package/esm2022/src/app/core/services/testing/referential-filter.model.mjs +1 -1
- package/esm2022/src/app/core/services/testing/referential.validator.mjs +14 -14
- package/esm2022/src/app/core/services/validator/account.validator.mjs +5 -5
- package/esm2022/src/app/core/services/validator/base.validator.class.mjs +4 -4
- package/esm2022/src/app/core/services/validator/local-settings.validator.mjs +13 -13
- package/esm2022/src/app/core/services/validator/user-settings.validator.mjs +5 -5
- package/esm2022/src/app/core/services/validator/user-token.validator.mjs +12 -9
- package/esm2022/src/app/core/settings/settings.module.mjs +8 -21
- package/esm2022/src/app/core/settings/settings.page.mjs +12 -17
- package/esm2022/src/app/core/table/actions-column.component.mjs +13 -5
- package/esm2022/src/app/core/table/async-table.class.mjs +106 -112
- package/esm2022/src/app/core/table/entities-async-table-datasource.class.mjs +21 -26
- package/esm2022/src/app/core/table/entities-table-datasource.class.mjs +26 -29
- package/esm2022/src/app/core/table/memory-table.class.mjs +4 -4
- package/esm2022/src/app/core/table/table-select-columns.component.mjs +8 -8
- package/esm2022/src/app/core/table/table.class.mjs +107 -110
- package/esm2022/src/app/core/table/table.model.mjs +1 -1
- package/esm2022/src/app/core/table/table.module.mjs +8 -12
- package/esm2022/src/app/core/table/table.utils.mjs +2 -4
- package/esm2022/src/app/core/table/testing/table-validator.service.mjs +3 -3
- package/esm2022/src/app/core/table/testing/table.testing.mjs +9 -9
- package/esm2022/src/app/core/table/testing/table.testing.module.mjs +8 -33
- package/esm2022/src/app/core/table/testing/table2-validator.service.mjs +4 -4
- package/esm2022/src/app/core/table/testing/table2.testing.mjs +28 -26
- package/esm2022/src/app/shared/alerts.mjs +37 -35
- package/esm2022/src/app/shared/audio/audio.mjs +25 -27
- package/esm2022/src/app/shared/audio/audio.testing.mjs +5 -5
- package/esm2022/src/app/shared/audio/audio.testing.module.mjs +10 -25
- package/esm2022/src/app/shared/capacitor/keyboard.mjs +5 -5
- package/esm2022/src/app/shared/capacitor/plugins.mjs +1 -1
- package/esm2022/src/app/shared/constants.mjs +2 -3
- package/esm2022/src/app/shared/dates.mjs +5 -8
- package/esm2022/src/app/shared/debug/debug-service.class.mjs +1 -1
- package/esm2022/src/app/shared/debug/debug.component.mjs +5 -5
- package/esm2022/src/app/shared/debug/debug.module.mjs +8 -29
- package/esm2022/src/app/shared/directives/autofocus.directive.mjs +8 -12
- package/esm2022/src/app/shared/directives/autotitle.directive.mjs +3 -3
- package/esm2022/src/app/shared/directives/directives.module.mjs +8 -29
- package/esm2022/src/app/shared/directives/drag-and-drop.directive.mjs +4 -4
- package/esm2022/src/app/shared/directives/ng-var.directive.mjs +4 -4
- package/esm2022/src/app/shared/directives/resizable/resizable.component.mjs +3 -3
- package/esm2022/src/app/shared/directives/resizable/resizable.directive.mjs +4 -4
- package/esm2022/src/app/shared/directives/resizable/resizable.module.mjs +4 -4
- package/esm2022/src/app/shared/events.mjs +6 -8
- package/esm2022/src/app/shared/file/csv.utils.mjs +22 -18
- package/esm2022/src/app/shared/file/file.service.mjs +11 -15
- package/esm2022/src/app/shared/file/file.utils.mjs +13 -11
- package/esm2022/src/app/shared/file/images.utils.mjs +4 -4
- package/esm2022/src/app/shared/file/json.utils.mjs +3 -4
- package/esm2022/src/app/shared/file/uri.utils.mjs +1 -1
- package/esm2022/src/app/shared/focusable.mjs +1 -1
- package/esm2022/src/app/shared/form/field.component.mjs +33 -30
- package/esm2022/src/app/shared/form/field.model.mjs +4 -4
- package/esm2022/src/app/shared/form/loading-spinner.mjs +5 -5
- package/esm2022/src/app/shared/forms.mjs +30 -33
- package/esm2022/src/app/shared/functions.mjs +70 -65
- package/esm2022/src/app/shared/geolocation/geolocation.utils.mjs +14 -14
- package/esm2022/src/app/shared/gesture/gesture-config.mjs +9 -9
- package/esm2022/src/app/shared/gesture/hammer.utils.mjs +1 -1
- package/esm2022/src/app/shared/graph/colors.utils.mjs +14 -18
- package/esm2022/src/app/shared/graph/graph-colors.mjs +16 -22
- package/esm2022/src/app/shared/guard/component-dirty.guard.mjs +4 -4
- package/esm2022/src/app/shared/help/help.modal.mjs +6 -6
- package/esm2022/src/app/shared/hotkeys/dialog/hotkeys-dialog.component.mjs +5 -5
- package/esm2022/src/app/shared/hotkeys/hotkeys.service.mjs +10 -11
- package/esm2022/src/app/shared/hotkeys/shared-hotkeys.module.mjs +9 -27
- package/esm2022/src/app/shared/http/http.utils.mjs +1 -1
- package/esm2022/src/app/shared/image/gallery/image-gallery.component.mjs +28 -27
- package/esm2022/src/app/shared/image/gallery/image-gallery.module.mjs +13 -10
- package/esm2022/src/app/shared/image/gallery/testing/gallegry.model.testing.mjs +1 -1
- package/esm2022/src/app/shared/image/gallery/testing/gallery.service.testing.mjs +14 -17
- package/esm2022/src/app/shared/image/gallery/testing/gallery.testing.mjs +9 -13
- package/esm2022/src/app/shared/image/gallery/testing/gallery.testing.module.mjs +14 -11
- package/esm2022/src/app/shared/image/image.model.mjs +1 -1
- package/esm2022/src/app/shared/image/image.module.mjs +8 -13
- package/esm2022/src/app/shared/image/image.service.mjs +14 -12
- package/esm2022/src/app/shared/inputs.mjs +19 -20
- package/esm2022/src/app/shared/interceptors/progess.interceptor.mjs +2 -3
- package/esm2022/src/app/shared/logging/log-level.model.mjs +1 -1
- package/esm2022/src/app/shared/logging/logger.model.mjs +2 -2
- package/esm2022/src/app/shared/logging/logging-service.class.mjs +17 -20
- package/esm2022/src/app/shared/logging/logging-service.module.mjs +6 -6
- package/esm2022/src/app/shared/material/autocomplete/material.autocomplete.config.mjs +7 -10
- package/esm2022/src/app/shared/material/autocomplete/material.autocomplete.mjs +87 -96
- package/esm2022/src/app/shared/material/autocomplete/material.autocomplete.module.mjs +9 -15
- package/esm2022/src/app/shared/material/autocomplete/material.autocomplete.utils.mjs +2 -2
- package/esm2022/src/app/shared/material/autocomplete/testing/autocomplete.test.mjs +27 -26
- package/esm2022/src/app/shared/material/badge/badge.directive.mjs +45 -19
- package/esm2022/src/app/shared/material/badge/badge.module.mjs +8 -20
- package/esm2022/src/app/shared/material/badge/badge.test.mjs +5 -5
- package/esm2022/src/app/shared/material/boolean/boolean.module.mjs +9 -13
- package/esm2022/src/app/shared/material/boolean/material.boolean.mjs +262 -0
- package/esm2022/src/app/shared/material/boolean/testing/boolean.test.page.mjs +6 -6
- package/esm2022/src/app/shared/material/chips/chips.module.mjs +7 -11
- package/esm2022/src/app/shared/material/chips/material.chips.mjs +69 -70
- package/esm2022/src/app/shared/material/chips/testing/chips.test.mjs +17 -17
- package/esm2022/src/app/shared/material/datetime/datetime.module.mjs +5 -5
- package/esm2022/src/app/shared/material/datetime/material.date.mjs +37 -36
- package/esm2022/src/app/shared/material/datetime/material.dateshort.mjs +26 -33
- package/esm2022/src/app/shared/material/datetime/material.datetime.mjs +42 -38
- package/esm2022/src/app/shared/material/datetime/testing/mat-date-time.test.mjs +20 -17
- package/esm2022/src/app/shared/material/datetime/testing/mat-date.test.mjs +22 -20
- package/esm2022/src/app/shared/material/datetime/testing/mat-dateshort.test.mjs +18 -17
- package/esm2022/src/app/shared/material/duration/duration.module.mjs +5 -5
- package/esm2022/src/app/shared/material/duration/duration.utils.mjs +3 -6
- package/esm2022/src/app/shared/material/duration/material.duration.mjs +23 -24
- package/esm2022/src/app/shared/material/duration/testing/mat-duration.test.mjs +17 -15
- package/esm2022/src/app/shared/material/latlong/latlong.utils.mjs +22 -24
- package/esm2022/src/app/shared/material/latlong/material.latlong.mjs +46 -41
- package/esm2022/src/app/shared/material/latlong/material.latlong.module.mjs +5 -5
- package/esm2022/src/app/shared/material/latlong/testing/latlong.test.mjs +5 -5
- package/esm2022/src/app/shared/material/material.animations.mjs +22 -22
- package/esm2022/src/app/shared/material/material.module.mjs +11 -11
- package/esm2022/src/app/shared/material/material.testing.module.mjs +26 -27
- package/esm2022/src/app/shared/material/paginator/material.paginator-i18n.mjs +8 -14
- package/esm2022/src/app/shared/material/stepper/material.stepper-i18n.mjs +4 -4
- package/esm2022/src/app/shared/material/swipe/material.swipe.mjs +15 -11
- package/esm2022/src/app/shared/material/swipe/swipe.module.mjs +7 -11
- package/esm2022/src/app/shared/material/swipe/testing/swipe.test.mjs +8 -8
- package/esm2022/src/app/shared/material/testing/common.test.mjs +17 -15
- package/esm2022/src/app/shared/material/text/testing/text-form.testing.mjs +6 -6
- package/esm2022/src/app/shared/material/text/text-form.component.mjs +17 -16
- package/esm2022/src/app/shared/material/text/text-form.module.mjs +8 -8
- package/esm2022/src/app/shared/modules.mjs +1 -1
- package/esm2022/src/app/shared/named-filter/named-filter-selector.component.mjs +6 -7
- package/esm2022/src/app/shared/named-filter/named-filter.model.mjs +1 -1
- package/esm2022/src/app/shared/named-filter/named-filter.module.mjs +5 -5
- package/esm2022/src/app/shared/named-filter/named-filter.service.mjs +6 -6
- package/esm2022/src/app/shared/observables.mjs +14 -18
- package/esm2022/src/app/shared/pipes/arrays.pipe.mjs +38 -38
- package/esm2022/src/app/shared/pipes/colors.pipe.mjs +5 -5
- package/esm2022/src/app/shared/pipes/date-diff-duration.pipe.mjs +8 -10
- package/esm2022/src/app/shared/pipes/date-format.pipe.mjs +14 -14
- package/esm2022/src/app/shared/pipes/date-from-now.pipe.mjs +6 -6
- package/esm2022/src/app/shared/pipes/duration.pipe.mjs +6 -6
- package/esm2022/src/app/shared/pipes/file-size.pipe.mjs +6 -13
- package/esm2022/src/app/shared/pipes/form.pipes.mjs +25 -25
- package/esm2022/src/app/shared/pipes/highlight.pipe.mjs +14 -14
- package/esm2022/src/app/shared/pipes/latlong-format.pipe.mjs +14 -14
- package/esm2022/src/app/shared/pipes/maps.pipe.mjs +17 -17
- package/esm2022/src/app/shared/pipes/maskito.pipe.mjs +11 -14
- package/esm2022/src/app/shared/pipes/math.pipes.mjs +16 -16
- package/esm2022/src/app/shared/pipes/ng-init.pipe.mjs +5 -5
- package/esm2022/src/app/shared/pipes/number-format.pipe.mjs +6 -6
- package/esm2022/src/app/shared/pipes/pipes.module.mjs +14 -22
- package/esm2022/src/app/shared/pipes/property.pipes.mjs +23 -25
- package/esm2022/src/app/shared/pipes/string.pipes.mjs +47 -48
- package/esm2022/src/app/shared/pipes/translate-context.pipe.mjs +11 -11
- package/esm2022/src/app/shared/pipes/types.pipes.mjs +17 -17
- package/esm2022/src/app/shared/platforms.mjs +7 -5
- package/esm2022/src/app/shared/rx-state.module.mjs +7 -11
- package/esm2022/src/app/shared/services/entity-service.class.mjs +2 -2
- package/esm2022/src/app/shared/services/job.utils.mjs +7 -7
- package/esm2022/src/app/shared/services/memory-entity-service.class.mjs +37 -35
- package/esm2022/src/app/shared/services/progress-bar.service.mjs +4 -4
- package/esm2022/src/app/shared/services/startable-observable-service.class.mjs +11 -14
- package/esm2022/src/app/shared/services/startable-service.class.mjs +11 -17
- package/esm2022/src/app/shared/services/translate-context.service.mjs +17 -14
- package/esm2022/src/app/shared/services/validator-service.class.mjs +1 -1
- package/esm2022/src/app/shared/services.mjs +10 -10
- package/esm2022/src/app/shared/shared-routing.module.mjs +19 -18
- package/esm2022/src/app/shared/shared.module.mjs +30 -27
- package/esm2022/src/app/shared/shared.testing.module.mjs +6 -6
- package/esm2022/src/app/shared/storage/storage-explorer.component.mjs +26 -28
- package/esm2022/src/app/shared/storage/storage-explorer.module.mjs +8 -12
- package/esm2022/src/app/shared/storage/storage-explorer.testing-routing.module.mjs +9 -17
- package/esm2022/src/app/shared/storage/storage-explorer.testing.module.mjs +10 -18
- package/esm2022/src/app/shared/storage/storage.service.mjs +4 -4
- package/esm2022/src/app/shared/storage/storage.utils.mjs +2 -2
- package/esm2022/src/app/shared/testing/observable.test.mjs +11 -13
- package/esm2022/src/app/shared/testing/tests.page.mjs +6 -6
- package/esm2022/src/app/shared/toast/toast.testing.mjs +10 -10
- package/esm2022/src/app/shared/toast/toast.testing.module.mjs +10 -25
- package/esm2022/src/app/shared/toast/toasts.mjs +9 -9
- package/esm2022/src/app/shared/toolbar/modal-toolbar.mjs +9 -7
- package/esm2022/src/app/shared/toolbar/toolbar.mjs +10 -15
- package/esm2022/src/app/shared/toolbar/toolbar.module.mjs +8 -39
- package/esm2022/src/app/shared/types.mjs +1 -1
- package/esm2022/src/app/shared/upload-file/testing/upload-file.testing.mjs +8 -9
- package/esm2022/src/app/shared/upload-file/testing/upload-file.testing.module.mjs +10 -25
- package/esm2022/src/app/shared/upload-file/upload-file-popover.component.mjs +7 -8
- package/esm2022/src/app/shared/upload-file/upload-file.component.mjs +17 -18
- package/esm2022/src/app/shared/upload-file/upload-file.model.mjs +2 -3
- package/esm2022/src/app/shared/validator/form-error-adapter.class.mjs +52 -50
- package/esm2022/src/app/shared/validator/validators.mjs +30 -30
- package/esm2022/src/app/shared/version/versions.mjs +2 -2
- package/esm2022/src/app/social/job/job.module.mjs +8 -27
- package/esm2022/src/app/social/job/progression/job-progression.component.mjs +9 -9
- package/esm2022/src/app/social/job/progression/job-progression.icon.mjs +27 -24
- package/esm2022/src/app/social/job/progression/job-progression.list.mjs +5 -7
- package/esm2022/src/app/social/job/progression/job-progression.model.mjs +1 -1
- package/esm2022/src/app/social/job/progression/job-progression.service.mjs +21 -17
- package/esm2022/src/app/social/job/testing/job-progression.testing.mjs +5 -5
- package/esm2022/src/app/social/job/testing/job-progression.testing.service.mjs +7 -7
- package/esm2022/src/app/social/job/testing/job.testing.module.mjs +8 -21
- package/esm2022/src/app/social/message/message.form.mjs +5 -5
- package/esm2022/src/app/social/message/message.modal.mjs +8 -8
- package/esm2022/src/app/social/message/message.model.mjs +8 -8
- package/esm2022/src/app/social/message/message.module.mjs +4 -4
- package/esm2022/src/app/social/message/message.service.mjs +7 -7
- package/esm2022/src/app/social/social.errors.mjs +2 -2
- package/esm2022/src/app/social/social.module.mjs +7 -32
- package/esm2022/src/app/social/social.testing.module.mjs +9 -20
- package/esm2022/src/app/social/user-event/notification/user-event-notification.icon.mjs +17 -14
- package/esm2022/src/app/social/user-event/notification/user-event-notification.list.mjs +19 -22
- package/esm2022/src/app/social/user-event/testing/user-event.testing.mjs +47 -23
- package/esm2022/src/app/social/user-event/testing/user-event.testing.model.mjs +8 -8
- package/esm2022/src/app/social/user-event/testing/user-event.testing.module.mjs +8 -21
- package/esm2022/src/app/social/user-event/testing/user-event.testing.service.mjs +27 -15
- package/esm2022/src/app/social/user-event/user-event.model.mjs +1 -1
- package/esm2022/src/app/social/user-event/user-event.module.mjs +8 -28
- package/esm2022/src/app/social/user-event/user-event.service.mjs +56 -61
- package/esm2022/src/environments/environment.class.mjs +2 -1
- package/esm2022/src/environments/environment.loader.mjs +4 -4
- package/esm2022/src/environments/environment.mjs +2 -2
- package/fesm2022/sumaris-net.ngx-components.mjs +6263 -7492
- package/fesm2022/sumaris-net.ngx-components.mjs.map +1 -1
- package/package.json +12 -7
- package/public_api.d.ts +3 -8
- package/src/app/admin/users/users.d.ts +3 -2
- package/src/app/core/core.module.d.ts +21 -24
- package/src/app/core/form/form.utils.d.ts +1 -1
- package/src/app/core/services/config/core.config.d.ts +1 -1
- package/src/app/core/services/config.service.d.ts +3 -3
- package/src/app/core/services/local-settings.service.d.ts +2 -3
- package/src/app/core/services/model/entity.model.d.ts +3 -2
- package/src/app/core/services/model/settings.model.d.ts +2 -2
- package/src/app/core/services/pipes/department-to-string.pipe.d.ts +1 -1
- package/src/app/core/services/pipes/pipes.module.d.ts +11 -0
- package/src/app/core/services/pipes/referential-to-string.pipe.d.ts +12 -0
- package/src/app/core/table/actions-column.component.d.ts +3 -1
- package/src/app/shared/events.d.ts +1 -1
- package/src/app/shared/functions.d.ts +6 -5
- package/src/app/shared/graph/graph-colors.d.ts +1 -1
- package/src/app/shared/image/gallery/image-gallery.component.d.ts +10 -10
- package/src/app/shared/image/gallery/image-gallery.module.d.ts +2 -1
- package/src/app/shared/image/gallery/testing/gallery.service.testing.d.ts +2 -2
- package/src/app/shared/image/gallery/testing/gallery.testing.module.d.ts +2 -1
- package/src/app/shared/material/autocomplete/material.autocomplete.d.ts +1 -1
- package/src/app/shared/material/boolean/boolean.module.d.ts +1 -1
- package/src/app/shared/material/boolean/{material-boolean.d.ts → material.boolean.d.ts} +2 -2
- package/src/app/shared/material/material.module.d.ts +5 -6
- package/src/app/shared/material/material.testing.module.d.ts +14 -15
- package/src/app/shared/material/swipe/material.swipe.d.ts +1 -1
- package/src/app/shared/pipes/pipes.module.d.ts +1 -1
- package/src/app/shared/pipes/string.pipes.d.ts +4 -5
- package/src/app/shared/validator/validators.d.ts +13 -4
- package/src/app/social/job/progression/job-progression.list.d.ts +1 -3
- package/src/app/social/message/message.modal.d.ts +2 -2
- package/src/app/social/user-event/testing/user-event.testing.d.ts +1 -0
- package/src/app/social/user-event/testing/user-event.testing.service.d.ts +1 -0
- package/src/assets/manifest.json +1 -1
- package/src/environments/environment.class.d.ts +1 -0
- package/src/theme/_ngx-components.scss +1 -25
- package/src/theme/_ngx-components.tabs.scss +361 -0
- package/src/theme/_theme.scss +1 -0
- package/esm2022/src/app/shared/material/boolean/material-boolean.mjs +0 -262
- package/esm2022/src/app/shared/material/numpad/numpad.append-to-input.directive.mjs +0 -104
- package/esm2022/src/app/shared/material/numpad/numpad.component.mjs +0 -83
- package/esm2022/src/app/shared/material/numpad/numpad.container.mjs +0 -203
- package/esm2022/src/app/shared/material/numpad/numpad.content.mjs +0 -19
- package/esm2022/src/app/shared/material/numpad/numpad.directive.mjs +0 -168
- package/esm2022/src/app/shared/material/numpad/numpad.dom-service.mjs +0 -36
- package/esm2022/src/app/shared/material/numpad/numpad.model.mjs +0 -16
- package/esm2022/src/app/shared/material/numpad/numpad.module.mjs +0 -60
- package/esm2022/src/app/shared/material/numpad/testing/numpad.test.mjs +0 -48
- package/src/app/shared/material/numpad/numpad.append-to-input.directive.d.ts +0 -22
- package/src/app/shared/material/numpad/numpad.component.d.ts +0 -26
- package/src/app/shared/material/numpad/numpad.container.d.ts +0 -40
- package/src/app/shared/material/numpad/numpad.content.d.ts +0 -7
- package/src/app/shared/material/numpad/numpad.directive.d.ts +0 -35
- package/src/app/shared/material/numpad/numpad.dom-service.d.ts +0 -16
- package/src/app/shared/material/numpad/numpad.model.d.ts +0 -30
- package/src/app/shared/material/numpad/numpad.module.d.ts +0 -16
- package/src/app/shared/material/numpad/testing/numpad.test.d.ts +0 -13
|
@@ -4,15 +4,15 @@ export const LAT_LONG_DEFAULT_MAX_DECIMALS = 3;
|
|
|
4
4
|
const DEFAULT_OPTIONS = {
|
|
5
5
|
pattern: 'DDMM',
|
|
6
6
|
maxDecimals: LAT_LONG_DEFAULT_MAX_DECIMALS,
|
|
7
|
-
placeholderChar: DEFAULT_PLACEHOLDER_CHAR
|
|
7
|
+
placeholderChar: DEFAULT_PLACEHOLDER_CHAR,
|
|
8
8
|
};
|
|
9
9
|
const DEFAULT_LATITUDE_OPTIONS = {
|
|
10
10
|
...DEFAULT_OPTIONS,
|
|
11
|
-
longitude: false
|
|
11
|
+
longitude: false,
|
|
12
12
|
};
|
|
13
13
|
const DEFAULT_LONGITUDE_OPTIONS = {
|
|
14
14
|
...DEFAULT_OPTIONS,
|
|
15
|
-
longitude: true
|
|
15
|
+
longitude: true,
|
|
16
16
|
};
|
|
17
17
|
export function formatLatitude(value, opts) {
|
|
18
18
|
if (value === undefined || value === null)
|
|
@@ -48,7 +48,7 @@ function formatToDD(value, opts) {
|
|
|
48
48
|
// Fix longitude when outside [-180, 180]
|
|
49
49
|
if (opts.longitude) {
|
|
50
50
|
while (value > 180) {
|
|
51
|
-
value =
|
|
51
|
+
value = value - 180;
|
|
52
52
|
negative = value < 0;
|
|
53
53
|
if (negative)
|
|
54
54
|
value *= -1;
|
|
@@ -57,7 +57,7 @@ function formatToDD(value, opts) {
|
|
|
57
57
|
// Fix latitude when outside [-90, 90]
|
|
58
58
|
else {
|
|
59
59
|
while (value > 90) {
|
|
60
|
-
value =
|
|
60
|
+
value = value - 90;
|
|
61
61
|
negative = value < 0;
|
|
62
62
|
if (negative)
|
|
63
63
|
value *= -1;
|
|
@@ -79,12 +79,12 @@ function formatToDD(value, opts) {
|
|
|
79
79
|
degrees = degrees + opts.placeholderChar;
|
|
80
80
|
}
|
|
81
81
|
// Add decimal separator
|
|
82
|
-
const integerLength = (opts.longitude && 3 || 2
|
|
82
|
+
const integerLength = (opts.longitude && 3) || 2;
|
|
83
83
|
if (degrees.length === integerLength) {
|
|
84
84
|
degrees += '.';
|
|
85
85
|
}
|
|
86
86
|
// Add trailing placeholder chars
|
|
87
|
-
while (
|
|
87
|
+
while (degrees.length < opts.maxDecimals + integerLength) {
|
|
88
88
|
degrees += opts.placeholderChar;
|
|
89
89
|
}
|
|
90
90
|
}
|
|
@@ -97,7 +97,7 @@ function formatToDDMMSS(value, opts) {
|
|
|
97
97
|
// Fix longitude when outside [-180, 180]
|
|
98
98
|
if (opts.longitude) {
|
|
99
99
|
while (value > 180) {
|
|
100
|
-
value =
|
|
100
|
+
value = value - 180;
|
|
101
101
|
negative = value < 0;
|
|
102
102
|
if (negative)
|
|
103
103
|
value *= -1;
|
|
@@ -106,7 +106,7 @@ function formatToDDMMSS(value, opts) {
|
|
|
106
106
|
// Fix latitude when outside [-90, 90]
|
|
107
107
|
else {
|
|
108
108
|
while (value > 90) {
|
|
109
|
-
value =
|
|
109
|
+
value = value - 90;
|
|
110
110
|
negative = value < 0;
|
|
111
111
|
if (negative)
|
|
112
112
|
value *= -1;
|
|
@@ -123,7 +123,7 @@ function formatToDDMMSS(value, opts) {
|
|
|
123
123
|
minutes -= 60;
|
|
124
124
|
degrees += 1;
|
|
125
125
|
}
|
|
126
|
-
const sign = opts.longitude ? (negative ? 'W' : 'E') :
|
|
126
|
+
const sign = opts.longitude ? (negative ? 'W' : 'E') : negative ? 'S' : 'N';
|
|
127
127
|
// Force spacer
|
|
128
128
|
let prefix = '';
|
|
129
129
|
if (opts.placeholderChar) {
|
|
@@ -148,13 +148,12 @@ function formatToDDMMSS(value, opts) {
|
|
|
148
148
|
seconds += '.';
|
|
149
149
|
}
|
|
150
150
|
// Add trailing placeholder chars
|
|
151
|
-
while (
|
|
151
|
+
while (seconds.length < opts.maxDecimals + 3) {
|
|
152
152
|
seconds += opts.placeholderChar;
|
|
153
153
|
}
|
|
154
154
|
}
|
|
155
155
|
}
|
|
156
|
-
const output = prefix + degrees + '° ' + minutes + '
|
|
157
|
-
+ (opts.hideSign ? '' : ' ' + sign);
|
|
156
|
+
const output = prefix + degrees + '° ' + minutes + "' " + seconds + '"' + (opts.hideSign ? '' : ' ' + sign);
|
|
158
157
|
// DEBUG
|
|
159
158
|
//console.debug("formatToDDMMSS: " + value + " -> " + output);
|
|
160
159
|
return output;
|
|
@@ -166,7 +165,7 @@ function formatToDDMM(value, opts) {
|
|
|
166
165
|
// Fix longitude when outside [-180, 180]
|
|
167
166
|
if (opts.longitude) {
|
|
168
167
|
while (value > 180) {
|
|
169
|
-
value =
|
|
168
|
+
value = value - 180;
|
|
170
169
|
negative = value < 0;
|
|
171
170
|
if (negative)
|
|
172
171
|
value *= -1;
|
|
@@ -175,7 +174,7 @@ function formatToDDMM(value, opts) {
|
|
|
175
174
|
// Fix latitude when outside [-90, 90]
|
|
176
175
|
else {
|
|
177
176
|
while (value > 90) {
|
|
178
|
-
value =
|
|
177
|
+
value = value - 90;
|
|
179
178
|
negative = value < 0;
|
|
180
179
|
if (negative)
|
|
181
180
|
value *= -1;
|
|
@@ -187,7 +186,7 @@ function formatToDDMM(value, opts) {
|
|
|
187
186
|
minutes -= 60;
|
|
188
187
|
degrees += 1;
|
|
189
188
|
}
|
|
190
|
-
const sign = opts.longitude ? (negative ? 'W' : 'E') :
|
|
189
|
+
const sign = opts.longitude ? (negative ? 'W' : 'E') : negative ? 'S' : 'N';
|
|
191
190
|
// Add placeholderChar
|
|
192
191
|
let prefix = '';
|
|
193
192
|
if (opts.placeholderChar) {
|
|
@@ -209,13 +208,12 @@ function formatToDDMM(value, opts) {
|
|
|
209
208
|
minutes += '.';
|
|
210
209
|
}
|
|
211
210
|
// Add trailing placeholder chars
|
|
212
|
-
while (
|
|
211
|
+
while (minutes.length < opts.maxDecimals + 3) {
|
|
213
212
|
minutes += opts.placeholderChar;
|
|
214
213
|
}
|
|
215
214
|
}
|
|
216
215
|
}
|
|
217
|
-
const output = prefix + degrees + '° ' + minutes + '
|
|
218
|
-
+ (opts.hideSign ? '' : ' ' + sign);
|
|
216
|
+
const output = prefix + degrees + '° ' + minutes + "'" + (opts.hideSign ? '' : ' ' + sign);
|
|
219
217
|
// DEBUG
|
|
220
218
|
//console.debug('formatToDDMM output:', output);
|
|
221
219
|
return output;
|
|
@@ -245,10 +243,10 @@ export function parseLatitudeOrLongitude(input, pattern, maxDecimals, placeholde
|
|
|
245
243
|
}
|
|
246
244
|
if (pattern === 'DD')
|
|
247
245
|
return roundFloat(degrees, maxDecimals);
|
|
248
|
-
const minutes = (pattern === 'DDMMSS' || pattern === 'DDMM') && parts[1] && parseFloat(parts[1].replace(/,/g, '.')) || 0;
|
|
249
|
-
const seconds = (pattern === 'DDMMSS'
|
|
250
|
-
const direction = (
|
|
251
|
-
const sign =
|
|
246
|
+
const minutes = ((pattern === 'DDMMSS' || pattern === 'DDMM') && parts[1] && parseFloat(parts[1].replace(/,/g, '.'))) || 0;
|
|
247
|
+
const seconds = (pattern === 'DDMMSS' && parts[2] && parseFloat(parts[2].replace(/,/g, '.'))) || 0;
|
|
248
|
+
const direction = (pattern === 'DDMMSS' && parts[3]) || (pattern === 'DDMM' && parts[2]) || undefined;
|
|
249
|
+
const sign = direction && (direction === 's' || direction === 'S' || direction === 'w' || direction === 'W') ? -1 : 1;
|
|
252
250
|
degrees = sign * (degrees + minutes / 60 + seconds / (60 * 60));
|
|
253
251
|
return roundFloat(degrees, maxDecimals);
|
|
254
252
|
}
|
|
@@ -263,4 +261,4 @@ function roundFloat(input, maxDecimals) {
|
|
|
263
261
|
}
|
|
264
262
|
return input;
|
|
265
263
|
}
|
|
266
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF0bG9uZy51dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvc2hhcmVkL21hdGVyaWFsL2xhdGxvbmcvbGF0bG9uZy51dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsd0JBQXdCLEVBQUUsc0JBQXNCLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUdqRixNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBcUIsQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBUzVFLE1BQU0sQ0FBQyxNQUFNLDZCQUE2QixHQUFHLENBQUMsQ0FBQztBQUcvQyxNQUFNLGVBQWUsR0FBeUI7SUFDNUMsT0FBTyxFQUFFLE1BQU07SUFDZixXQUFXLEVBQUUsNkJBQTZCO0lBQzFDLGVBQWUsRUFBRSx3QkFBd0I7Q0FDMUMsQ0FBQztBQUNGLE1BQU0sd0JBQXdCLEdBQWtEO0lBQzlFLEdBQUcsZUFBZTtJQUNsQixTQUFTLEVBQUUsS0FBSztDQUNqQixDQUFDO0FBQ0YsTUFBTSx5QkFBeUIsR0FBbUQ7SUFDaEYsR0FBRyxlQUFlO0lBQ2xCLFNBQVMsRUFBRSxJQUFJO0NBQ2hCLENBQUM7QUFDRixNQUFNLFVBQVcsY0FBYyxDQUFDLEtBQW9CLEVBQUUsSUFBb0M7SUFDeEYsSUFBSSxLQUFLLEtBQUssU0FBUyxJQUFJLEtBQUssS0FBSyxJQUFJO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFFdkQsUUFBTyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDcEIsS0FBSyxRQUFRO1lBQ1gsT0FBTyxjQUFjLENBQUMsS0FBSyxFQUFFLEVBQUUsR0FBRyx3QkFBd0IsRUFBRSxHQUFHLElBQUksRUFBRSxDQUFDLENBQUM7UUFDekUsS0FBSyxNQUFNO1lBQ1QsT0FBTyxZQUFZLENBQUMsS0FBSyxFQUFFLEVBQUUsR0FBRyx3QkFBd0IsRUFBRSxHQUFHLElBQUksRUFBRSxDQUFD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O1FBRXBCLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQzdDLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsVUFBVSxHQUFHLEdBQUcsQ0FBQyxHQUFHLFVBQVUsQ0FBQztJQUMzRCxDQUFDO0lBQ0QsZ0NBQWdDO1NBQzNCLElBQUksV0FBVyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQzNCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUNELE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7REVGQVVMVF9QTEFDRUhPTERFUl9DSEFSLCBFTVBUWV9QTEFDRUhPTERFUl9DSEFSfSBmcm9tICcuLi8uLi9jb25zdGFudHMnO1xuXG5leHBvcnQgZGVjbGFyZSB0eXBlIExhdExvbmdQYXR0ZXJuID0gJ0RETU1TUycgfCAnRERNTScgfCAnREQnO1xuZXhwb3J0IGNvbnN0IExBVF9MT05HX1BBVFRFUk5TOiBMYXRMb25nUGF0dGVybltdID0gWydERE1NU1MnLCAnRERNTScsICdERCddO1xuXG5leHBvcnQgZGVjbGFyZSBjbGFzcyBMYXRMb25nRm9ybWF0T3B0aW9ucyB7XG4gIHBhdHRlcm46IExhdExvbmdQYXR0ZXJuO1xuICBtYXhEZWNpbWFscz86IG51bWJlcjtcbiAgcGxhY2Vob2xkZXJDaGFyPzogc3RyaW5nO1xuICBoaWRlU2lnbj86IGJvb2xlYW47XG59XG5leHBvcnQgZGVjbGFyZSB0eXBlIExhdExvbmdGb3JtYXRGbiA9ICh2YWx1ZTogbnVtYmVyIHwgbnVsbCwgb3B0cz86IExhdExvbmdGb3JtYXRPcHRpb25zKSA9PiBzdHJpbmc7XG5leHBvcnQgY29uc3QgTEFUX0xPTkdfREVGQVVMVF9NQVhfREVDSU1BTFMgPSAzO1xuXG5cbmNvbnN0IERFRkFVTFRfT1BUSU9OUyA9IDxMYXRMb25nRm9ybWF0T3B0aW9ucz57XG4gIHBhdHRlcm46ICdERE1NJyxcbiAgbWF4RGVjaW1hbHM6IExBVF9MT05HX0RFRkFVTFRfTUFYX0RFQ0lNQUxTLFxuICBwbGFjZWhvbGRlckNoYXI6IERFRkFVTFRfUExBQ0VIT0xERVJfQ0hBUlxufTtcbmNvbnN0IERFRkFVTFRfTEFUSVRVREVfT1BUSU9OUzogTGF0TG9uZ0Zvcm1hdE9wdGlvbnMgJiB7IGxvbmdpdHVkZTogYm9vbGVhbiB9ID0ge1xuICAuLi5ERUZBVUxUX09QVElPTlMsXG4gIGxvbmdpdHVkZTogZmFsc2Vcbn07XG5jb25zdCBERUZBVUxUX0xPTkdJVFVERV9PUFRJT05TOiBMYXRMb25nRm9ybWF0T3B0aW9ucyAmIHsgbG9uZ2l0dWRlOiBib29sZWFuIH0gPSAge1xuICAuLi5ERUZBVUxUX09QVElPTlMsXG4gIGxvbmdpdHVkZTogdHJ1ZVxufTtcbmV4cG9ydCAgZnVuY3Rpb24gZm9ybWF0TGF0aXR1ZGUodmFsdWU6IG51bWJlciB8IG51bGwsIG9wdHM/OiBQYXJ0aWFsPExhdExvbmdGb3JtYXRPcHRpb25zPik6IHN0cmluZyB7XG4gIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSBudWxsKSByZXR1cm4gbnVsbDtcblxuICBzd2l0Y2gob3B0cy5wYXR0ZXJuKSB7XG4gICAgY2FzZSAnRERNTVNTJzpcbiAgICAgIHJldHVybiBmb3JtYXRUb0RETU1TUyh2YWx1ZSwgeyAuLi5ERUZBVUxUX0xBVElUVURFX09QVElPTlMsIC4uLm9wdHMgfSk7XG4gICAgY2FzZSAnRERNTSc6XG4gICAgICByZXR1cm4gZm9ybWF0VG9ERE1NKHZhbHVlLCB7IC4uLkRFRkFVTFRfTEFUSVRVREVfT1BUSU9OUywgLi4ub3B0cyB9KTtcbiAgICBjYXNlICdERCc6XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBmb3JtYXRUb0REKHZhbHVlLCB7IC4uLkRFRkFVTFRfTEFUSVRVREVfT1BUSU9OUywgLi4ub3B0cyB9KTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0TG9uZ2l0dWRlKHZhbHVlOiBudW1iZXIgfCBudWxsLCBvcHRzPzogUGFydGlhbDxMYXRMb25nRm9ybWF0T3B0aW9ucz4pOiBzdHJpbmcge1xuICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gbnVsbCkgcmV0dXJuIG51bGw7XG5cbiAgc3dpdGNoKG9wdHMucGF0dGVybikge1xuICAgIGNhc2UgJ0RETU1TUyc6XG4gICAgICByZXR1cm4gZm9ybWF0VG9ERE1NU1ModmFsdWUsIHsgLi4uREVGQVVMVF9MT05HSVRVREVfT1BUSU9OUywgLi4ub3B0cyB9KTtcbiAgICBjYXNlICdERE1NJzpcbiAgICAgIHJldHVybiBmb3JtYXRUb0RETU0odmFsdWUsIHsgLi4uREVGQVVMVF9MT05HSVRVREVfT1BUSU9OUywgLi4ub3B0cyB9KTtcbiAgICBjYXNlICdERCc6XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBmb3JtYXRUb0REKHZhbHVlLCB7IC4uLkRFRkFVTFRfTE9OR0lUVURFX09QVElPTlMsIC4uLm9wdHMgfSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZm9ybWF0VG9ERCh2YWx1ZTogbnVtYmVyLCBvcHRzOiBMYXRMb25nRm9ybWF0T3B0aW9ucyAmIHtsb25naXR1ZGU6IGJvb2xlYW59KTogc3RyaW5nIHtcbiAgLy8gb3B0cy5wYXR0ZXJuID09PSBERFxuICBsZXQgbmVnYXRpdmUgPSB2YWx1ZSA8IDA7XG4gIGlmIChuZWdhdGl2ZSkgdmFsdWUgKj0gLTE7XG5cbiAgLy8gRml4IGxvbmdpdHVkZSB3aGVuIG91dHNpZGUgWy0xODAsIDE4MF1cbiAgaWYgKG9wdHMubG9uZ2l0dWRlKSB7XG4gICAgd2hpbGUgKHZhbHVlID4gMTgwKSB7XG4gICAgICB2YWx1ZSA9ICh2YWx1ZSAtIDE4MCk7XG4gICAgICBuZWdhdGl2ZSA9IHZhbHVlIDwgMDtcbiAgICAgIGlmIChuZWdhdGl2ZSkgdmFsdWUgKj0gLTE7XG4gICAgfVxuICB9XG4gIC8vIEZpeCBsYXRpdHVkZSB3aGVuIG91dHNpZGUgWy05MCwgOTBdXG4gIGVsc2Uge1xuICAgIHdoaWxlICh2YWx1ZSA+IDkwKSB7XG4gICAgICB2YWx1ZSA9ICh2YWx1ZSAtIDkwKTtcbiAgICAgIG5lZ2F0aXZlID0gdmFsdWUgPCAwO1xuICAgICAgaWYgKG5lZ2F0aXZlKSB2YWx1ZSAqPSAtMTtcbiAgICB9XG4gIH1cblxuICBsZXQgZGVncmVlcyA9IHJvdW5kRmxvYXQodmFsdWUsIG9wdHMubWF4RGVjaW1hbHMpLnRvU3RyaW5nKCk7XG5cbiAgLy8gQWRkIHNpZ25cbiAgbGV0IHNpZ24gPSBuZWdhdGl2ZSA/ICctJyA6ICcrJztcblxuICBpZiAob3B0cy5wbGFjZWhvbGRlckNoYXIpIHtcbiAgICBpZiAob3B0cy5sb25naXR1ZGUpIHtcbiAgICAgIGlmICh2YWx1ZSA8IDEwMCkge1xuICAgICAgICBkZWdyZWVzID0gZGVncmVlcyArIG9wdHMucGxhY2Vob2xkZXJDaGFyO1xuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHNpZ24gKz0gJyAnOyAvLyBBZGQgc3BhY2UgYWZ0ZXIgdGhlIHNpZ25cbiAgICB9XG4gICAgaWYgKHZhbHVlIDwgMTApIHtcbiAgICAgIGRlZ3JlZXMgPSBkZWdyZWVzICsgb3B0cy5wbGFjZWhvbGRlckNoYXI7XG4gICAgfVxuICAgIC8vIEFkZCBkZWNpbWFsIHNlcGFyYXRvclxuICAgIGNvbnN0IGludGVnZXJMZW5ndGggPSAob3B0cy5sb25naXR1ZGUgJiYgMyB8fCAyKTtcbiAgICBpZiAoZGVncmVlcy5sZW5ndGggPT09IGludGVnZXJMZW5ndGgpIHtcbiAgICAgIGRlZ3JlZXMgKz0gJy4nO1xuICAgIH1cbiAgICAvLyBBZGQgdHJhaWxpbmcgcGxhY2Vob2xkZXIgY2hhcnNcbiAgICB3aGlsZSAoKGRlZ3JlZXMubGVuZ3RoIDwgb3B0cy5tYXhEZWNpbWFscyArIGludGVnZXJMZW5ndGgpKSB7XG4gICAgICBkZWdyZWVzICs9IG9wdHMucGxhY2Vob2xkZXJDaGFyO1xuICAgIH1cbiAgfVxuICByZXR1cm4gKG9wdHMuaGlkZVNpZ24gPyAnJyA6IHNpZ24pICsgZGVncmVlcyArICfCsCc7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFRvRERNTVNTKHZhbHVlOiBudW1iZXIsIG9wdHM6IExhdExvbmdGb3JtYXRPcHRpb25zICYge2xvbmdpdHVkZTogYm9vbGVhbn0pOiBzdHJpbmcge1xuICBsZXQgbmVnYXRpdmUgPSB2YWx1ZSA8IDA7XG4gIGlmIChuZWdhdGl2ZSkgdmFsdWUgKj0gLTE7XG5cbiAgLy8gRml4IGxvbmdpdHVkZSB3aGVuIG91dHNpZGUgWy0xODAsIDE4MF1cbiAgaWYgKG9wdHMubG9uZ2l0dWRlKSB7XG4gICAgd2hpbGUgKHZhbHVlID4gMTgwKSB7XG4gICAgICB2YWx1ZSA9ICh2YWx1ZSAtIDE4MCk7XG4gICAgICBuZWdhdGl2ZSA9IHZhbHVlIDwgMDtcbiAgICAgIGlmIChuZWdhdGl2ZSkgdmFsdWUgKj0gLTE7XG4gICAgfVxuICB9XG4gIC8vIEZpeCBsYXRpdHVkZSB3aGVuIG91dHNpZGUgWy05MCwgOTBdXG4gIGVsc2Uge1xuICAgIHdoaWxlICh2YWx1ZSA+IDkwKSB7XG4gICAgICB2YWx1ZSA9ICh2YWx1ZSAtIDkwKTtcbiAgICAgIG5lZ2F0aXZlID0gdmFsdWUgPCAwO1xuICAgICAgaWYgKG5lZ2F0aXZlKSB2YWx1ZSAqPSAtMTtcbiAgICB9XG4gIH1cblxuICBsZXQgZGVncmVlczogbnVtYmVyID0gTWF0aC50cnVuYyh2YWx1ZSk7XG4gIGxldCBtaW51dGVzOiBudW1iZXIgfCBzdHJpbmcgPSBNYXRoLnRydW5jKCh2YWx1ZSAtIGRlZ3JlZXMpICogNjApO1xuICBsZXQgc2Vjb25kczogbnVtYmVyIHwgc3RyaW5nID0gcm91bmRGbG9hdCgoKHZhbHVlIC0gZGVncmVlcykgKiA2MCAtIG1pbnV0ZXMpICogNjAsIG9wdHMubWF4RGVjaW1hbHMpO1xuXG4gIHdoaWxlIChzZWNvbmRzID49IDYwKSB7XG4gICAgc2Vjb25kcyAtPSA2MDtcbiAgICBtaW51dGVzICs9IDE7XG4gIH1cbiAgd2hpbGUgKG1pbnV0ZXMgPj0gNjApIHtcbiAgICBtaW51dGVzIC09IDYwO1xuICAgIGRlZ3JlZXMgKz0gMTtcbiAgfVxuICBjb25zdCBzaWduID0gb3B0cy5sb25naXR1ZGUgPyAobmVnYXRpdmUgPyAnVycgOiAnRScpIDogKG5lZ2F0aXZlID8gJ1MnIDogJ04nKTtcblxuICAvLyBGb3JjZSBzcGFjZXJcbiAgbGV0IHByZWZpeCA9ICcnO1xuICBpZiAob3B0cy5wbGFjZWhvbGRlckNoYXIpIHtcbiAgICBpZiAob3B0cy5sb25naXR1ZGUgJiYgZGVncmVlcyA8IDEwMCkge1xuICAgICAgcHJlZml4ICs9IG9wdHMucGxhY2Vob2xkZXJDaGFyO1xuICAgIH1cbiAgICBpZiAoZGVncmVlcyA8IDEwKSB7XG4gICAgICBwcmVmaXggKz0gb3B0cy5wbGFjZWhvbGRlckNoYXI7XG4gICAgfVxuXG4gICAgaWYgKG1pbnV0ZXMgPCAxMCkge1xuICAgICAgbWludXRlcyA9IG9wdHMucGxhY2Vob2xkZXJDaGFyICsgbWludXRlcztcbiAgICB9XG5cbiAgICBpZiAoc2Vjb25kcyA8IDEwKSB7XG4gICAgICBzZWNvbmRzID0gb3B0cy5wbGFjZWhvbGRlckNoYXIgKyBzZWNvbmRzO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHNlY29uZHMgPSBzZWNvbmRzLnRvU3RyaW5nKCk7IC8vIGNvbnZlcnQgdG8gc3RyaW5nIC0gcmVxdWlyZWQgZm9yIHRoZSBuZXh0IHdoaWxlXG4gICAgfVxuICAgIGlmIChvcHRzLm1heERlY2ltYWxzID4gMCkge1xuICAgICAgLy8gQWRkIGRlY2ltYWwgc2VwYXJhdG9yXG4gICAgICBpZiAoc2Vjb25kcy5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgc2Vjb25kcyArPSAnLic7XG4gICAgICB9XG4gICAgICAvLyBBZGQgdHJhaWxpbmcgcGxhY2Vob2xkZXIgY2hhcnNcbiAgICAgIHdoaWxlICgoc2Vjb25kcy5sZW5ndGggPCBvcHRzLm1heERlY2ltYWxzICsgMykpIHtcbiAgICAgICAgc2Vjb25kcyArPSBvcHRzLnBsYWNlaG9sZGVyQ2hhcjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCBvdXRwdXQgPSBwcmVmaXggKyBkZWdyZWVzICsgJ8KwICcgKyBtaW51dGVzICsgJ1xcJyAnICsgc2Vjb25kcyArICdcIidcbiAgICArIChvcHRzLmhpZGVTaWduID8gJycgOiAnICcgKyBzaWduKTtcblxuICAvLyBERUJVR1xuICAvL2NvbnNvbGUuZGVidWcoXCJmb3JtYXRUb0RETU1TUzogXCIgKyB2YWx1ZSArIFwiIC0+IFwiICsgb3V0cHV0KTtcblxuXG4gIHJldHVybiBvdXRwdXQ7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFRvRERNTSh2YWx1ZTogbnVtYmVyLCBvcHRzOiBMYXRMb25nRm9ybWF0T3B0aW9ucyAmIHtsb25naXR1ZGU6IGJvb2xlYW59KTogc3RyaW5nIHtcbiAgbGV0IG5lZ2F0aXZlID0gdmFsdWUgPCAwO1xuICBpZiAobmVnYXRpdmUpIHZhbHVlICo9IC0xO1xuXG4gIC8vIEZpeCBsb25naXR1ZGUgd2hlbiBvdXRzaWRlIFstMTgwLCAxODBdXG4gIGlmIChvcHRzLmxvbmdpdHVkZSkge1xuICAgIHdoaWxlICh2YWx1ZSA+IDE4MCkge1xuICAgICAgdmFsdWUgPSAodmFsdWUgLSAxODApO1xuICAgICAgbmVnYXRpdmUgPSB2YWx1ZSA8IDA7XG4gICAgICBpZiAobmVnYXRpdmUpIHZhbHVlICo9IC0xO1xuICAgIH1cbiAgfVxuICAvLyBGaXggbGF0aXR1ZGUgd2hlbiBvdXRzaWRlIFstOTAsIDkwXVxuICBlbHNlIHtcbiAgICB3aGlsZSAodmFsdWUgPiA5MCkge1xuICAgICAgdmFsdWUgPSAodmFsdWUgLSA5MCk7XG4gICAgICBuZWdhdGl2ZSA9IHZhbHVlIDwgMDtcbiAgICAgIGlmIChuZWdhdGl2ZSkgdmFsdWUgKj0gLTE7XG4gICAgfVxuICB9XG5cbiAgbGV0IGRlZ3JlZXM6IG51bWJlciB8IHN0cmluZyA9IE1hdGgudHJ1bmModmFsdWUpO1xuICBsZXQgbWludXRlczogbnVtYmVyIHwgc3RyaW5nID0gcm91bmRGbG9hdCgodmFsdWUgLSBkZWdyZWVzKSAqIDYwLCBvcHRzLm1heERlY2ltYWxzKTtcbiAgd2hpbGUgKG1pbnV0ZXMgPj0gNjApIHtcbiAgICBtaW51dGVzIC09IDYwO1xuICAgIGRlZ3JlZXMgKz0gMTtcbiAgfVxuICBjb25zdCBzaWduID0gb3B0cy5sb25naXR1ZGUgPyAobmVnYXRpdmUgPyAnVycgOiAnRScpIDogKG5lZ2F0aXZlID8gJ1MnIDogJ04nKTtcblxuICAvLyBBZGQgcGxhY2Vob2xkZXJDaGFyXG4gIGxldCBwcmVmaXggPSAnJztcbiAgaWYgKG9wdHMucGxhY2Vob2xkZXJDaGFyKSB7XG4gICAgaWYgKG9wdHMubG9uZ2l0dWRlICYmIGRlZ3JlZXMgPCAxMDApIHtcbiAgICAgIHByZWZpeCArPSBvcHRzLnBsYWNlaG9sZGVyQ2hhcjtcbiAgICB9XG4gICAgaWYgKGRlZ3JlZXMgPCAxMCkge1xuICAgICAgcHJlZml4ICs9IG9wdHMucGxhY2Vob2xkZXJDaGFyO1xuICAgIH1cblxuICAgIGlmIChtaW51dGVzIDwgMTApIHtcbiAgICAgIG1pbnV0ZXMgPSBvcHRzLnBsYWNlaG9sZGVyQ2hhciArIG1pbnV0ZXM7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgbWludXRlcyA9IG1pbnV0ZXMudG9TdHJpbmcoKTsgLy8gY29udmVydCB0byBzdHJpbmcgLSByZXF1aXJlZCBmb3IgdGhlIG5leHQgd2hpbGVcbiAgICB9XG4gICAgaWYgKG9wdHMubWF4RGVjaW1hbHMgPiAwKSB7XG4gICAgICAvLyBBZGQgZGVjaW1hbCBzZXBhcmF0b3JcbiAgICAgIGlmIChtaW51dGVzLmxlbmd0aCA9PT0gMikge1xuICAgICAgICBtaW51dGVzICs9ICcuJztcbiAgICAgIH1cbiAgICAgIC8vIEFkZCB0cmFpbGluZyBwbGFjZWhvbGRlciBjaGFyc1xuICAgICAgd2hpbGUgKChtaW51dGVzLmxlbmd0aCA8IG9wdHMubWF4RGVjaW1hbHMgKyAzKSkge1xuICAgICAgICBtaW51dGVzICs9IG9wdHMucGxhY2Vob2xkZXJDaGFyO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBjb25zdCBvdXRwdXQgPSBwcmVmaXggKyBkZWdyZWVzICsgJ8KwICcgKyBtaW51dGVzICsgJ1xcJydcbiAgICArIChvcHRzLmhpZGVTaWduID8gJycgOiAnICcgKyBzaWduKTtcblxuICAvLyBERUJVR1xuICAvL2NvbnNvbGUuZGVidWcoJ2Zvcm1hdFRvRERNTSBvdXRwdXQ6Jywgb3V0cHV0KTtcblxuICByZXR1cm4gb3V0cHV0O1xufVxuXG4vLyAzNsKwNTcnOVwiIE4gID0gMzYuOTUyNTAwMFxuLy8gMTDCsDQnMjFcIiBXID0gLTEwLjA3MjUwMDBcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUxhdGl0dWRlT3JMb25naXR1ZGUoaW5wdXQ6IHN0cmluZywgcGF0dGVybjogc3RyaW5nLCBtYXhEZWNpbWFscz86IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXJDaGFyPzogc3RyaW5nKTogbnVtYmVyIHwgbnVsbCB7XG4gIHBsYWNlaG9sZGVyQ2hhciA9IHBsYWNlaG9sZGVyQ2hhciB8fCBERUZBVUxUX1BMQUNFSE9MREVSX0NIQVI7XG4gIGxldCBpbnB1dEZpeCA9IGlucHV0LnRyaW0oKTtcbiAgaWYgKHBsYWNlaG9sZGVyQ2hhciA9PT0gRU1QVFlfUExBQ0VIT0xERVJfQ0hBUikge1xuICAgIGlucHV0Rml4ID0gaW5wdXRGaXhcbiAgICAgIC8vIFJlcGxhY2UgZW1wdHkgY2hhciBwbGFjZWhvbGRlclxuICAgICAgLnJlcGxhY2UobmV3IFJlZ0V4cChgWyR7RU1QVFlfUExBQ0VIT0xERVJfQ0hBUn1dYCwgJ2cnKSwgJycpXG4gICAgICAvLyBSZW1vdmUgc3BhY2UgYW5kICcrJyAoPSB0cmltIG9uIGVhY2ggcGFydHMpXG4gICAgICAucmVwbGFjZShuZXcgUmVnRXhwKGBbICtdK2AsICdnJyksICcnKTtcbiAgfVxuICAvLyBSZW1vdmUgYWxsIHBsYWNlaG9sZGVyICg9IHRyaW0gb24gZWFjaCBwYXJ0cylcbiAgZWxzZSB7XG4gICAgaW5wdXRGaXggPSBpbnB1dEZpeC5yZXBsYWNlKG5ldyBSZWdFeHAoYFsgKyR7cGxhY2Vob2xkZXJDaGFyfV0rYCwgJ2cnKSwgJycpO1xuICB9XG5cbiAgLy9ERUJVRyBjb25zb2xlLmRlYnVnKFwiUGFyc2luZyBsYXQ9IFwiICsgaW5wdXRGaXgpO1xuICBjb25zdCBwYXJ0cyA9IGlucHV0Rml4LnNwbGl0KC9bXi1cXGRcXHcuLF0rLyk7XG4gIGxldCBkZWdyZWVzID0gcGFyc2VGbG9hdChwYXJ0c1swXS5yZXBsYWNlKC8sL2csICcuJykpO1xuICBpZiAoaXNOYU4oZGVncmVlcykpIHtcbiAgICBjb25zb2xlLmRlYnVnKCdwYXJzZUxhdGl0dWRlT3JMb25naXR1ZGUgJyArIGlucHV0ICsgJyAtPiBJbnZhbGlkIGRlZ3JlZXMgKE5hTikuIFBhcnRzIGZvdW5kOicsIHBhcnRzKTtcbiAgICByZXR1cm4gTmFOO1xuICB9XG5cbiAgaWYgKHBhdHRlcm4gPT09ICdERCcpIHJldHVybiByb3VuZEZsb2F0KGRlZ3JlZXMsIG1heERlY2ltYWxzKTtcblxuICBjb25zdCBtaW51dGVzID0gKHBhdHRlcm4gPT09ICdERE1NU1MnIHx8IHBhdHRlcm4gPT09ICdERE1NJykgJiYgcGFydHNbMV0gJiYgcGFyc2VGbG9hdChwYXJ0c1sxXS5yZXBsYWNlKC8sL2csICcuJykpIHx8IDA7XG4gIGNvbnN0IHNlY29uZHMgPSAocGF0dGVybiA9PT0gJ0RETU1TUycpICYmIHBhcnRzWzJdICYmIHBhcnNlRmxvYXQocGFydHNbMl0ucmVwbGFjZSgvLC9nLCAnLicpKSB8fCAwO1xuICBjb25zdCBkaXJlY3Rpb24gPSAoKHBhdHRlcm4gPT09ICdERE1NU1MnKSAmJiBwYXJ0c1szXSkgfHwgKChwYXR0ZXJuID09PSAnRERNTScpICYmIHBhcnRzWzJdKSB8fCB1bmRlZmluZWQ7XG4gIGNvbnN0IHNpZ24gPSAoZGlyZWN0aW9uICYmIChkaXJlY3Rpb24gPT09ICdzJyB8fCBkaXJlY3Rpb24gPT09ICdTJyB8fCBkaXJlY3Rpb24gPT09ICd3JyB8fCBkaXJlY3Rpb24gPT09ICdXJykpID8gLTEgOiAxO1xuXG4gIGRlZ3JlZXMgPSBzaWduICogKGRlZ3JlZXMgKyBtaW51dGVzIC8gNjAgKyBzZWNvbmRzIC8gKDYwICogNjApKTtcblxuICByZXR1cm4gcm91bmRGbG9hdChkZWdyZWVzLCBtYXhEZWNpbWFscyk7XG59XG5cbmZ1bmN0aW9uIHJvdW5kRmxvYXQoaW5wdXQ6IG51bWJlciwgbWF4RGVjaW1hbHM/OiBudW1iZXIpOiBudW1iZXIge1xuICBpZiAobWF4RGVjaW1hbHMgPiAwKSB7XG5cbiAgICBjb25zdCBwb3dEZWNpbWFsID0gTWF0aC5wb3coMTAsIG1heERlY2ltYWxzKTtcbiAgICByZXR1cm4gTWF0aC50cnVuYyhpbnB1dCAqIHBvd0RlY2ltYWwgKyAwLjUpIC8gcG93RGVjaW1hbDtcbiAgfVxuICAvLyBubyBkZWNpbWFsczogcm91bmQgdG8gaW50ZWdlclxuICBlbHNlIGlmIChtYXhEZWNpbWFscyA9PT0gMCkge1xuICAgIHJldHVybiBNYXRoLnRydW5jKGlucHV0ICsgMC41KTtcbiAgfVxuICByZXR1cm4gaW5wdXQ7XG59XG4iXX0=
|
|
264
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF0bG9uZy51dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvc2hhcmVkL21hdGVyaWFsL2xhdGxvbmcvbGF0bG9uZy51dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUduRixNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBcUIsQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBUzVFLE1BQU0sQ0FBQyxNQUFNLDZCQUE2QixHQUFHLENBQUMsQ0FBQztBQUUvQyxNQUFNLGVBQWUsR0FBeUI7SUFDNUMsT0FBTyxFQUFFLE1BQU07SUFDZixXQUFXLEVBQUUsNkJBQTZCO0lBQzFDLGVBQWUsRUFBRSx3QkFBd0I7Q0FDMUMsQ0FBQztBQUNGLE1BQU0sd0JBQXdCLEdBQWtEO0lBQzlFLEdBQUcsZUFBZTtJQUNsQixTQUFTLEVBQUUsS0FBSztDQUNqQixDQUFDO0FBQ0YsTUFBTSx5QkFBeUIsR0FBa0Q7SUFDL0UsR0FBRyxlQUFlO0lBQ2xCLFNBQVMsRUFBRSxJQUFJO0NBQ2hCLENBQUM7QUFDRixNQUFNLFVBQVUsY0FBYyxDQUFDLEtBQW9CLEVBQUUsSUFBb0M7SUFDdkYsSUFBSSxLQUFLLEtBQUssU0FBUyxJQUFJLEtBQUssS0FBSyxJQUFJO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFFdkQsUUFBUSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDckIsS0FBSyxRQUFRO1lBQ1gsT0FBTyxjQUFjLENBQUMsS0FBSyxFQUFFLEVBQUUsR0FBRyx3QkFBd0IsRUFBRSxHQUFHLElBQUksRUFBRSxDQUFDLENBQUM7UUFDekUsS0FBSyxNQUFNO1lBQ1QsT0FBTyxZQUFZLENBQUMsS0FBSyxFQUFFLEVBQUUsR0FBRyx3QkFBd0IsRUFBRSxHQUFHLElBQUksRUFBRSxDQUFDLENBQUM7UUFDdkUsS0FBSyxJQUFJLENBQUM7UUFDVjtZQUNFLE9BQU8sVUFBVSxDQUFDLEtBQUssRUFBRSxFQUFFLEdBQUcsd0JBQXdCLEVBQUUsR0FBRyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7QUFDSCxDQUFDO0FBRUQsTUFBTSxVQUFVLGVBQWUsQ0FBQyxLQUFvQixFQUFFLElBQW9DO0lBQ3hGLElBQUksS0FBSyxLQUFLLFNBQVMsSUFBSSxLQUFLLEtBQUssSUFBSTtRQUFFLE9BQU8sSUFBSSxDQUFDO0lBRXZELFFBQVEsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3JCLEtBQUssUUFBUTtZQUNYLE9BQU8sY0FBYyxDQUFDLEtBQUssRUFBRSxFQUFFLEdBQUcseUJBQXlCLEVBQUUsR0FBRyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQzFFLEtBQUssTUFBTTtZQUNULE9BQU8sWUFBWSxDQUFDLEtBQUssRUFBRSxFQUFFLEdBQUcseUJBQXlCLEVBQUUsR0FBRyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ3hFLEtBQUssSUFBSSxDQUFDO1FBQ1Y7WUFDRSxPQUFPLFVBQVUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxHQUFHLHlCQUF5QixFQUFFLEdBQUcsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUN4RSxDQUFDO0FBQ0gsQ0FBQztBQUVELFNBQVMsVUFBVSxDQUFDLEtBQWEsRUFBRSxJQUFtRDtJQUNwRixzQkFBc0I7SUFDdEIsSUFBSSxRQUFRLEdBQUcsS0FBSyxHQUFHLENBQUMsQ0FBQztJQUN6QixJQUFJLFFBQVE7UUFBRSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUM7SUFFMUIseUNBQXlDO0lBQ3pDLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ25CLE9BQU8sS0FBSyxHQUFHLEdBQUcsRUFBRSxDQUFDO1lBQ25CLEtBQUssR0FBRyxLQUFLLEdBQUcsR0FBRyxDQUFDO1lBQ3BCLFFBQVEsR0FBRyxLQUFLLEdBQUcsQ0FBQyxDQUFDO1lBQ3JCLElBQUksUUFBUTtnQkFBRSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDNUIsQ0FBQztJQUNILENBQUM7SUFDRCxzQ0FBc0M7U0FDakMsQ0FBQztRQUNKLE9BQU8sS0FBSyxHQUFHLEVBQUUsRUFBRSxDQUFDO1lBQ2xCLEtBQUssR0FBRyxLQUFLLEdBQUcsRUFBRSxDQUFDO1lBQ25CLFFBQVEsR0FBRyxLQUFLLEdBQUcsQ0FBQyxDQUFDO1lBQ3JCLElBQUksUUFBUTtnQkFBRSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDNUIsQ0FBQztJQUNILENBQUM7SUFFRCxJQUFJLE9BQU8sR0FBRyxVQUFVLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUU3RCxXQUFXO0lBQ1gsSUFBSSxJQUFJLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztJQUVoQyxJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN6QixJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNuQixJQUFJLEtBQUssR0FBRyxHQUFHLEVBQUUsQ0FBQztnQkFDaEIsT0FBTyxHQUFHLE9BQU8sR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDO1lBQzNDLENBQUM7UUFDSCxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQywyQkFBMkI7UUFDMUMsQ0FBQztRQUNELElBQUksS0FBSyxHQUFHLEVBQUUsRUFBRSxDQUFDO1lBQ2YsT0FBTyxHQUFHLE9BQU8sR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDO1FBQzNDLENBQUM7UUFDRCx3QkFBd0I7UUFDeEIsTUFBTSxhQUFhLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNqRCxJQUFJLE9BQU8sQ0FBQyxNQUFNLEtBQUssYUFBYSxFQUFFLENBQUM7WUFDckMsT0FBTyxJQUFJLEdBQUcsQ0FBQztRQUNqQixDQUFDO1FBQ0QsaUNBQWlDO1FBQ2pDLE9BQU8sT0FBTyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsV0FBVyxHQUFHLGFBQWEsRUFBRSxDQUFDO1lBQ3pELE9BQU8sSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDO1FBQ2xDLENBQUM7SUFDSCxDQUFDO0lBQ0QsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsT0FBTyxHQUFHLEdBQUcsQ0FBQztBQUNyRCxDQUFDO0FBRUQsU0FBUyxjQUFjLENBQUMsS0FBYSxFQUFFLElBQW1EO0lBQ3hGLElBQUksUUFBUSxHQUFHLEtBQUssR0FBRyxDQUFDLENBQUM7SUFDekIsSUFBSSxRQUFRO1FBQUUsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBRTFCLHlDQUF5QztJQUN6QyxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNuQixPQUFPLEtBQUssR0FBRyxHQUFHLEVBQUUsQ0FBQztZQUNuQixLQUFLLEdBQUcsS0FBSyxHQUFHLEdBQUcsQ0FBQztZQUNwQixRQUFRLEdBQUcsS0FBSyxHQUFHLENBQUMsQ0FBQztZQUNyQixJQUFJLFFBQVE7Z0JBQUUsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQzVCLENBQUM7SUFDSCxDQUFDO0lBQ0Qsc0NBQXNDO1NBQ2pDLENBQUM7UUFDSixPQUFPLEtBQUssR0FBRyxFQUFFLEVBQUUsQ0FBQztZQUNsQixLQUFLLEdBQUcsS0FBSyxHQUFHLEVBQUUsQ0FBQztZQUNuQixRQUFRLEdBQUcsS0FBSyxHQUFHLENBQUMsQ0FBQztZQUNyQixJQUFJLFFBQVE7Z0JBQUUsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQzVCLENBQUM7SUFDSCxDQUFDO0lBRUQsSUFBSSxPQUFPLEdBQVcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN4QyxJQUFJLE9BQU8sR0FBb0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssR0FBRyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUNsRSxJQUFJLE9BQU8sR0FBb0IsVUFBVSxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDLEdBQUcsRUFBRSxHQUFHLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7SUFFckcsT0FBTyxPQUFPLElBQUksRUFBRSxFQUFFLENBQUM7UUFDckIsT0FBTyxJQUFJLEVBQUUsQ0FBQztRQUNkLE9BQU8sSUFBSSxDQUFDLENBQUM7SUFDZixDQUFDO0lBQ0QsT0FBTyxPQUFPLElBQUksRUFBRSxFQUFFLENBQUM7UUFDckIsT0FBTyxJQUFJLEVBQUUsQ0FBQztRQUNkLE9BQU8sSUFBSSxDQUFDLENBQUM7SUFDZixDQUFDO0lBQ0QsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7SUFFNUUsZUFBZTtJQUNmLElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQztJQUNoQixJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN6QixJQUFJLElBQUksQ0FBQyxTQUFTLElBQUksT0FBTyxHQUFHLEdBQUcsRUFBRSxDQUFDO1lBQ3BDLE1BQU0sSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDO1FBQ2pDLENBQUM7UUFDRCxJQUFJLE9BQU8sR0FBRyxFQUFFLEVBQUUsQ0FBQztZQUNqQixNQUFNLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQztRQUNqQyxDQUFDO1FBRUQsSUFBSSxPQUFPLEdBQUcsRUFBRSxFQUFFLENBQUM7WUFDakIsT0FBTyxHQUFHLElBQUksQ0FBQyxlQUFlLEdBQUcsT0FBTyxDQUFDO1FBQzNDLENBQUM7UUFFRCxJQUFJLE9BQU8sR0FBRyxFQUFFLEVBQUUsQ0FBQztZQUNqQixPQUFPLEdBQUcsSUFBSSxDQUFDLGVBQWUsR0FBRyxPQUFPLENBQUM7UUFDM0MsQ0FBQzthQUFNLENBQUM7WUFDTixPQUFPLEdBQUcsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsa0RBQWtEO1FBQ2xGLENBQUM7UUFDRCxJQUFJLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDekIsd0JBQXdCO1lBQ3hCLElBQUksT0FBTyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDekIsT0FBTyxJQUFJLEdBQUcsQ0FBQztZQUNqQixDQUFDO1lBQ0QsaUNBQWlDO1lBQ2pDLE9BQU8sT0FBTyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUM3QyxPQUFPLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQztZQUNsQyxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRCxNQUFNLE1BQU0sR0FBRyxNQUFNLEdBQUcsT0FBTyxHQUFHLElBQUksR0FBRyxPQUFPLEdBQUcsSUFBSSxHQUFHLE9BQU8sR0FBRyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQztJQUU1RyxRQUFRO0lBQ1IsOERBQThEO0lBRTlELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUM7QUFFRCxTQUFTLFlBQVksQ0FBQyxLQUFhLEVBQUUsSUFBbUQ7SUFDdEYsSUFBSSxRQUFRLEdBQUcsS0FBSyxHQUFHLENBQUMsQ0FBQztJQUN6QixJQUFJLFFBQVE7UUFBRSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUM7SUFFMUIseUNBQXlDO0lBQ3pDLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ25CLE9BQU8sS0FBSyxHQUFHLEdBQUcsRUFBRSxDQUFDO1lBQ25CLEtBQUssR0FBRyxLQUFLLEdBQUcsR0FBRyxDQUFDO1lBQ3BCLFFBQVEsR0FBRyxLQUFLLEdBQUcsQ0FBQyxDQUFDO1lBQ3JCLElBQUksUUFBUTtnQkFBRSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDNUIsQ0FBQztJQUNILENBQUM7SUFDRCxzQ0FBc0M7U0FDakMsQ0FBQztRQUNKLE9BQU8sS0FBSyxHQUFHLEVBQUUsRUFBRSxDQUFDO1lBQ2xCLEtBQUssR0FBRyxLQUFLLEdBQUcsRUFBRSxDQUFDO1lBQ25CLFFBQVEsR0FBRyxLQUFLLEdBQUcsQ0FBQyxDQUFDO1lBQ3JCLElBQUksUUFBUTtnQkFBRSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDNUIsQ0FBQztJQUNILENBQUM7SUFFRCxJQUFJLE9BQU8sR0FBb0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNqRCxJQUFJLE9BQU8sR0FBb0IsVUFBVSxDQUFDLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDcEYsT0FBTyxPQUFPLElBQUksRUFBRSxFQUFFLENBQUM7UUFDckIsT0FBTyxJQUFJLEVBQUUsQ0FBQztRQUNkLE9BQU8sSUFBSSxDQUFDLENBQUM7SUFDZixDQUFDO0lBQ0QsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7SUFFNUUsc0JBQXNCO0lBQ3RCLElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQztJQUNoQixJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN6QixJQUFJLElBQUksQ0FBQyxTQUFTLElBQUksT0FBTyxHQUFHLEdBQUcsRUFBRSxDQUFDO1lBQ3BDLE1BQU0sSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDO1FBQ2pDLENBQUM7UUFDRCxJQUFJLE9BQU8sR0FBRyxFQUFFLEVBQUUsQ0FBQztZQUNqQixNQUFNLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQztRQUNqQyxDQUFDO1FBRUQsSUFBSSxPQUFPLEdBQUcsRUFBRSxFQUFFLENBQUM7WUFDakIsT0FBTyxHQUFHLElBQUksQ0FBQyxlQUFlLEdBQUcsT0FBTyxDQUFDO1FBQzNDLENBQUM7YUFBTSxDQUFDO1lBQ04sT0FBTyxHQUFHLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLGtEQUFrRDtRQUNsRixDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3pCLHdCQUF3QjtZQUN4QixJQUFJLE9BQU8sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQ3pCLE9BQU8sSUFBSSxHQUFHLENBQUM7WUFDakIsQ0FBQztZQUNELGlDQUFpQztZQUNqQyxPQUFPLE9BQU8sQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDN0MsT0FBTyxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUM7WUFDbEMsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBQ0QsTUFBTSxNQUFNLEdBQUcsTUFBTSxHQUFHLE9BQU8sR0FBRyxJQUFJLEdBQUcsT0FBTyxHQUFHLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDO0lBRTNGLFFBQVE7SUFDUixnREFBZ0Q7SUFFaEQsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQztBQUVELDJCQUEyQjtBQUMzQiwyQkFBMkI7QUFDM0IsTUFBTSxVQUFVLHdCQUF3QixDQUFDLEtBQWEsRUFBRSxPQUFlLEVBQUUsV0FBb0IsRUFBRSxlQUF3QjtJQUNySCxlQUFlLEdBQUcsZUFBZSxJQUFJLHdCQUF3QixDQUFDO0lBQzlELElBQUksUUFBUSxHQUFHLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUM1QixJQUFJLGVBQWUsS0FBSyxzQkFBc0IsRUFBRSxDQUFDO1FBQy9DLFFBQVEsR0FBRyxRQUFRO1lBQ2pCLGlDQUFpQzthQUNoQyxPQUFPLENBQUMsSUFBSSxNQUFNLENBQUMsSUFBSSxzQkFBc0IsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUM1RCw4Q0FBOEM7YUFDN0MsT0FBTyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBQ0QsZ0RBQWdEO1NBQzNDLENBQUM7UUFDSixRQUFRLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLE1BQU0sQ0FBQyxNQUFNLGVBQWUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQzlFLENBQUM7SUFFRCxrREFBa0Q7SUFDbEQsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUM1QyxJQUFJLE9BQU8sR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUN0RCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQ25CLE9BQU8sQ0FBQyxLQUFLLENBQUMsMkJBQTJCLEdBQUcsS0FBSyxHQUFHLHlDQUF5QyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3RHLE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUVELElBQUksT0FBTyxLQUFLLElBQUk7UUFBRSxPQUFPLFVBQVUsQ0FBQyxPQUFPLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFFOUQsTUFBTSxPQUFPLEdBQUcsQ0FBQyxDQUFDLE9BQU8sS0FBSyxRQUFRLElBQUksT0FBTyxLQUFLLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMzSCxNQUFNLE9BQU8sR0FBRyxDQUFDLE9BQU8sS0FBSyxRQUFRLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ25HLE1BQU0sU0FBUyxHQUFHLENBQUMsT0FBTyxLQUFLLFFBQVEsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sS0FBSyxNQUFNLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksU0FBUyxDQUFDO0lBQ3RHLE1BQU0sSUFBSSxHQUFHLFNBQVMsSUFBSSxDQUFDLFNBQVMsS0FBSyxHQUFHLElBQUksU0FBUyxLQUFLLEdBQUcsSUFBSSxTQUFTLEtBQUssR0FBRyxJQUFJLFNBQVMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUV0SCxPQUFPLEdBQUcsSUFBSSxHQUFHLENBQUMsT0FBTyxHQUFHLE9BQU8sR0FBRyxFQUFFLEdBQUcsT0FBTyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFFaEUsT0FBTyxVQUFVLENBQUMsT0FBTyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0FBQzFDLENBQUM7QUFFRCxTQUFTLFVBQVUsQ0FBQyxLQUFhLEVBQUUsV0FBb0I7SUFDckQsSUFBSSxXQUFXLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDcEIsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDN0MsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxVQUFVLEdBQUcsR0FBRyxDQUFDLEdBQUcsVUFBVSxDQUFDO0lBQzNELENBQUM7SUFDRCxnQ0FBZ0M7U0FDM0IsSUFBSSxXQUFXLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDM0IsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBQ0QsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgREVGQVVMVF9QTEFDRUhPTERFUl9DSEFSLCBFTVBUWV9QTEFDRUhPTERFUl9DSEFSIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzJztcblxuZXhwb3J0IGRlY2xhcmUgdHlwZSBMYXRMb25nUGF0dGVybiA9ICdERE1NU1MnIHwgJ0RETU0nIHwgJ0REJztcbmV4cG9ydCBjb25zdCBMQVRfTE9OR19QQVRURVJOUzogTGF0TG9uZ1BhdHRlcm5bXSA9IFsnRERNTVNTJywgJ0RETU0nLCAnREQnXTtcblxuZXhwb3J0IGRlY2xhcmUgY2xhc3MgTGF0TG9uZ0Zvcm1hdE9wdGlvbnMge1xuICBwYXR0ZXJuOiBMYXRMb25nUGF0dGVybjtcbiAgbWF4RGVjaW1hbHM/OiBudW1iZXI7XG4gIHBsYWNlaG9sZGVyQ2hhcj86IHN0cmluZztcbiAgaGlkZVNpZ24/OiBib29sZWFuO1xufVxuZXhwb3J0IGRlY2xhcmUgdHlwZSBMYXRMb25nRm9ybWF0Rm4gPSAodmFsdWU6IG51bWJlciB8IG51bGwsIG9wdHM/OiBMYXRMb25nRm9ybWF0T3B0aW9ucykgPT4gc3RyaW5nO1xuZXhwb3J0IGNvbnN0IExBVF9MT05HX0RFRkFVTFRfTUFYX0RFQ0lNQUxTID0gMztcblxuY29uc3QgREVGQVVMVF9PUFRJT05TID0gPExhdExvbmdGb3JtYXRPcHRpb25zPntcbiAgcGF0dGVybjogJ0RETU0nLFxuICBtYXhEZWNpbWFsczogTEFUX0xPTkdfREVGQVVMVF9NQVhfREVDSU1BTFMsXG4gIHBsYWNlaG9sZGVyQ2hhcjogREVGQVVMVF9QTEFDRUhPTERFUl9DSEFSLFxufTtcbmNvbnN0IERFRkFVTFRfTEFUSVRVREVfT1BUSU9OUzogTGF0TG9uZ0Zvcm1hdE9wdGlvbnMgJiB7IGxvbmdpdHVkZTogYm9vbGVhbiB9ID0ge1xuICAuLi5ERUZBVUxUX09QVElPTlMsXG4gIGxvbmdpdHVkZTogZmFsc2UsXG59O1xuY29uc3QgREVGQVVMVF9MT05HSVRVREVfT1BUSU9OUzogTGF0TG9uZ0Zvcm1hdE9wdGlvbnMgJiB7IGxvbmdpdHVkZTogYm9vbGVhbiB9ID0ge1xuICAuLi5ERUZBVUxUX09QVElPTlMsXG4gIGxvbmdpdHVkZTogdHJ1ZSxcbn07XG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0TGF0aXR1ZGUodmFsdWU6IG51bWJlciB8IG51bGwsIG9wdHM/OiBQYXJ0aWFsPExhdExvbmdGb3JtYXRPcHRpb25zPik6IHN0cmluZyB7XG4gIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSBudWxsKSByZXR1cm4gbnVsbDtcblxuICBzd2l0Y2ggKG9wdHMucGF0dGVybikge1xuICAgIGNhc2UgJ0RETU1TUyc6XG4gICAgICByZXR1cm4gZm9ybWF0VG9ERE1NU1ModmFsdWUsIHsgLi4uREVGQVVMVF9MQVRJVFVERV9PUFRJT05TLCAuLi5vcHRzIH0pO1xuICAgIGNhc2UgJ0RETU0nOlxuICAgICAgcmV0dXJuIGZvcm1hdFRvRERNTSh2YWx1ZSwgeyAuLi5ERUZBVUxUX0xBVElUVURFX09QVElPTlMsIC4uLm9wdHMgfSk7XG4gICAgY2FzZSAnREQnOlxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZm9ybWF0VG9ERCh2YWx1ZSwgeyAuLi5ERUZBVUxUX0xBVElUVURFX09QVElPTlMsIC4uLm9wdHMgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdExvbmdpdHVkZSh2YWx1ZTogbnVtYmVyIHwgbnVsbCwgb3B0cz86IFBhcnRpYWw8TGF0TG9uZ0Zvcm1hdE9wdGlvbnM+KTogc3RyaW5nIHtcbiAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09IG51bGwpIHJldHVybiBudWxsO1xuXG4gIHN3aXRjaCAob3B0cy5wYXR0ZXJuKSB7XG4gICAgY2FzZSAnRERNTVNTJzpcbiAgICAgIHJldHVybiBmb3JtYXRUb0RETU1TUyh2YWx1ZSwgeyAuLi5ERUZBVUxUX0xPTkdJVFVERV9PUFRJT05TLCAuLi5vcHRzIH0pO1xuICAgIGNhc2UgJ0RETU0nOlxuICAgICAgcmV0dXJuIGZvcm1hdFRvRERNTSh2YWx1ZSwgeyAuLi5ERUZBVUxUX0xPTkdJVFVERV9PUFRJT05TLCAuLi5vcHRzIH0pO1xuICAgIGNhc2UgJ0REJzpcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGZvcm1hdFRvREQodmFsdWUsIHsgLi4uREVGQVVMVF9MT05HSVRVREVfT1BUSU9OUywgLi4ub3B0cyB9KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBmb3JtYXRUb0REKHZhbHVlOiBudW1iZXIsIG9wdHM6IExhdExvbmdGb3JtYXRPcHRpb25zICYgeyBsb25naXR1ZGU6IGJvb2xlYW4gfSk6IHN0cmluZyB7XG4gIC8vIG9wdHMucGF0dGVybiA9PT0gRERcbiAgbGV0IG5lZ2F0aXZlID0gdmFsdWUgPCAwO1xuICBpZiAobmVnYXRpdmUpIHZhbHVlICo9IC0xO1xuXG4gIC8vIEZpeCBsb25naXR1ZGUgd2hlbiBvdXRzaWRlIFstMTgwLCAxODBdXG4gIGlmIChvcHRzLmxvbmdpdHVkZSkge1xuICAgIHdoaWxlICh2YWx1ZSA+IDE4MCkge1xuICAgICAgdmFsdWUgPSB2YWx1ZSAtIDE4MDtcbiAgICAgIG5lZ2F0aXZlID0gdmFsdWUgPCAwO1xuICAgICAgaWYgKG5lZ2F0aXZlKSB2YWx1ZSAqPSAtMTtcbiAgICB9XG4gIH1cbiAgLy8gRml4IGxhdGl0dWRlIHdoZW4gb3V0c2lkZSBbLTkwLCA5MF1cbiAgZWxzZSB7XG4gICAgd2hpbGUgKHZhbHVlID4gOTApIHtcbiAgICAgIHZhbHVlID0gdmFsdWUgLSA5MDtcbiAgICAgIG5lZ2F0aXZlID0gdmFsdWUgPCAwO1xuICAgICAgaWYgKG5lZ2F0aXZlKSB2YWx1ZSAqPSAtMTtcbiAgICB9XG4gIH1cblxuICBsZXQgZGVncmVlcyA9IHJvdW5kRmxvYXQodmFsdWUsIG9wdHMubWF4RGVjaW1hbHMpLnRvU3RyaW5nKCk7XG5cbiAgLy8gQWRkIHNpZ25cbiAgbGV0IHNpZ24gPSBuZWdhdGl2ZSA/ICctJyA6ICcrJztcblxuICBpZiAob3B0cy5wbGFjZWhvbGRlckNoYXIpIHtcbiAgICBpZiAob3B0cy5sb25naXR1ZGUpIHtcbiAgICAgIGlmICh2YWx1ZSA8IDEwMCkge1xuICAgICAgICBkZWdyZWVzID0gZGVncmVlcyArIG9wdHMucGxhY2Vob2xkZXJDaGFyO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBzaWduICs9ICcgJzsgLy8gQWRkIHNwYWNlIGFmdGVyIHRoZSBzaWduXG4gICAgfVxuICAgIGlmICh2YWx1ZSA8IDEwKSB7XG4gICAgICBkZWdyZWVzID0gZGVncmVlcyArIG9wdHMucGxhY2Vob2xkZXJDaGFyO1xuICAgIH1cbiAgICAvLyBBZGQgZGVjaW1hbCBzZXBhcmF0b3JcbiAgICBjb25zdCBpbnRlZ2VyTGVuZ3RoID0gKG9wdHMubG9uZ2l0dWRlICYmIDMpIHx8IDI7XG4gICAgaWYgKGRlZ3JlZXMubGVuZ3RoID09PSBpbnRlZ2VyTGVuZ3RoKSB7XG4gICAgICBkZWdyZWVzICs9ICcuJztcbiAgICB9XG4gICAgLy8gQWRkIHRyYWlsaW5nIHBsYWNlaG9sZGVyIGNoYXJzXG4gICAgd2hpbGUgKGRlZ3JlZXMubGVuZ3RoIDwgb3B0cy5tYXhEZWNpbWFscyArIGludGVnZXJMZW5ndGgpIHtcbiAgICAgIGRlZ3JlZXMgKz0gb3B0cy5wbGFjZWhvbGRlckNoYXI7XG4gICAgfVxuICB9XG4gIHJldHVybiAob3B0cy5oaWRlU2lnbiA/ICcnIDogc2lnbikgKyBkZWdyZWVzICsgJ8KwJztcbn1cblxuZnVuY3Rpb24gZm9ybWF0VG9ERE1NU1ModmFsdWU6IG51bWJlciwgb3B0czogTGF0TG9uZ0Zvcm1hdE9wdGlvbnMgJiB7IGxvbmdpdHVkZTogYm9vbGVhbiB9KTogc3RyaW5nIHtcbiAgbGV0IG5lZ2F0aXZlID0gdmFsdWUgPCAwO1xuICBpZiAobmVnYXRpdmUpIHZhbHVlICo9IC0xO1xuXG4gIC8vIEZpeCBsb25naXR1ZGUgd2hlbiBvdXRzaWRlIFstMTgwLCAxODBdXG4gIGlmIChvcHRzLmxvbmdpdHVkZSkge1xuICAgIHdoaWxlICh2YWx1ZSA+IDE4MCkge1xuICAgICAgdmFsdWUgPSB2YWx1ZSAtIDE4MDtcbiAgICAgIG5lZ2F0aXZlID0gdmFsdWUgPCAwO1xuICAgICAgaWYgKG5lZ2F0aXZlKSB2YWx1ZSAqPSAtMTtcbiAgICB9XG4gIH1cbiAgLy8gRml4IGxhdGl0dWRlIHdoZW4gb3V0c2lkZSBbLTkwLCA5MF1cbiAgZWxzZSB7XG4gICAgd2hpbGUgKHZhbHVlID4gOTApIHtcbiAgICAgIHZhbHVlID0gdmFsdWUgLSA5MDtcbiAgICAgIG5lZ2F0aXZlID0gdmFsdWUgPCAwO1xuICAgICAgaWYgKG5lZ2F0aXZlKSB2YWx1ZSAqPSAtMTtcbiAgICB9XG4gIH1cblxuICBsZXQgZGVncmVlczogbnVtYmVyID0gTWF0aC50cnVuYyh2YWx1ZSk7XG4gIGxldCBtaW51dGVzOiBudW1iZXIgfCBzdHJpbmcgPSBNYXRoLnRydW5jKCh2YWx1ZSAtIGRlZ3JlZXMpICogNjApO1xuICBsZXQgc2Vjb25kczogbnVtYmVyIHwgc3RyaW5nID0gcm91bmRGbG9hdCgoKHZhbHVlIC0gZGVncmVlcykgKiA2MCAtIG1pbnV0ZXMpICogNjAsIG9wdHMubWF4RGVjaW1hbHMpO1xuXG4gIHdoaWxlIChzZWNvbmRzID49IDYwKSB7XG4gICAgc2Vjb25kcyAtPSA2MDtcbiAgICBtaW51dGVzICs9IDE7XG4gIH1cbiAgd2hpbGUgKG1pbnV0ZXMgPj0gNjApIHtcbiAgICBtaW51dGVzIC09IDYwO1xuICAgIGRlZ3JlZXMgKz0gMTtcbiAgfVxuICBjb25zdCBzaWduID0gb3B0cy5sb25naXR1ZGUgPyAobmVnYXRpdmUgPyAnVycgOiAnRScpIDogbmVnYXRpdmUgPyAnUycgOiAnTic7XG5cbiAgLy8gRm9yY2Ugc3BhY2VyXG4gIGxldCBwcmVmaXggPSAnJztcbiAgaWYgKG9wdHMucGxhY2Vob2xkZXJDaGFyKSB7XG4gICAgaWYgKG9wdHMubG9uZ2l0dWRlICYmIGRlZ3JlZXMgPCAxMDApIHtcbiAgICAgIHByZWZpeCArPSBvcHRzLnBsYWNlaG9sZGVyQ2hhcjtcbiAgICB9XG4gICAgaWYgKGRlZ3JlZXMgPCAxMCkge1xuICAgICAgcHJlZml4ICs9IG9wdHMucGxhY2Vob2xkZXJDaGFyO1xuICAgIH1cblxuICAgIGlmIChtaW51dGVzIDwgMTApIHtcbiAgICAgIG1pbnV0ZXMgPSBvcHRzLnBsYWNlaG9sZGVyQ2hhciArIG1pbnV0ZXM7XG4gICAgfVxuXG4gICAgaWYgKHNlY29uZHMgPCAxMCkge1xuICAgICAgc2Vjb25kcyA9IG9wdHMucGxhY2Vob2xkZXJDaGFyICsgc2Vjb25kcztcbiAgICB9IGVsc2Uge1xuICAgICAgc2Vjb25kcyA9IHNlY29uZHMudG9TdHJpbmcoKTsgLy8gY29udmVydCB0byBzdHJpbmcgLSByZXF1aXJlZCBmb3IgdGhlIG5leHQgd2hpbGVcbiAgICB9XG4gICAgaWYgKG9wdHMubWF4RGVjaW1hbHMgPiAwKSB7XG4gICAgICAvLyBBZGQgZGVjaW1hbCBzZXBhcmF0b3JcbiAgICAgIGlmIChzZWNvbmRzLmxlbmd0aCA9PT0gMikge1xuICAgICAgICBzZWNvbmRzICs9ICcuJztcbiAgICAgIH1cbiAgICAgIC8vIEFkZCB0cmFpbGluZyBwbGFjZWhvbGRlciBjaGFyc1xuICAgICAgd2hpbGUgKHNlY29uZHMubGVuZ3RoIDwgb3B0cy5tYXhEZWNpbWFscyArIDMpIHtcbiAgICAgICAgc2Vjb25kcyArPSBvcHRzLnBsYWNlaG9sZGVyQ2hhcjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCBvdXRwdXQgPSBwcmVmaXggKyBkZWdyZWVzICsgJ8KwICcgKyBtaW51dGVzICsgXCInIFwiICsgc2Vjb25kcyArICdcIicgKyAob3B0cy5oaWRlU2lnbiA/ICcnIDogJyAnICsgc2lnbik7XG5cbiAgLy8gREVCVUdcbiAgLy9jb25zb2xlLmRlYnVnKFwiZm9ybWF0VG9ERE1NU1M6IFwiICsgdmFsdWUgKyBcIiAtPiBcIiArIG91dHB1dCk7XG5cbiAgcmV0dXJuIG91dHB1dDtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VG9ERE1NKHZhbHVlOiBudW1iZXIsIG9wdHM6IExhdExvbmdGb3JtYXRPcHRpb25zICYgeyBsb25naXR1ZGU6IGJvb2xlYW4gfSk6IHN0cmluZyB7XG4gIGxldCBuZWdhdGl2ZSA9IHZhbHVlIDwgMDtcbiAgaWYgKG5lZ2F0aXZlKSB2YWx1ZSAqPSAtMTtcblxuICAvLyBGaXggbG9uZ2l0dWRlIHdoZW4gb3V0c2lkZSBbLTE4MCwgMTgwXVxuICBpZiAob3B0cy5sb25naXR1ZGUpIHtcbiAgICB3aGlsZSAodmFsdWUgPiAxODApIHtcbiAgICAgIHZhbHVlID0gdmFsdWUgLSAxODA7XG4gICAgICBuZWdhdGl2ZSA9IHZhbHVlIDwgMDtcbiAgICAgIGlmIChuZWdhdGl2ZSkgdmFsdWUgKj0gLTE7XG4gICAgfVxuICB9XG4gIC8vIEZpeCBsYXRpdHVkZSB3aGVuIG91dHNpZGUgWy05MCwgOTBdXG4gIGVsc2Uge1xuICAgIHdoaWxlICh2YWx1ZSA+IDkwKSB7XG4gICAgICB2YWx1ZSA9IHZhbHVlIC0gOTA7XG4gICAgICBuZWdhdGl2ZSA9IHZhbHVlIDwgMDtcbiAgICAgIGlmIChuZWdhdGl2ZSkgdmFsdWUgKj0gLTE7XG4gICAgfVxuICB9XG5cbiAgbGV0IGRlZ3JlZXM6IG51bWJlciB8IHN0cmluZyA9IE1hdGgudHJ1bmModmFsdWUpO1xuICBsZXQgbWludXRlczogbnVtYmVyIHwgc3RyaW5nID0gcm91bmRGbG9hdCgodmFsdWUgLSBkZWdyZWVzKSAqIDYwLCBvcHRzLm1heERlY2ltYWxzKTtcbiAgd2hpbGUgKG1pbnV0ZXMgPj0gNjApIHtcbiAgICBtaW51dGVzIC09IDYwO1xuICAgIGRlZ3JlZXMgKz0gMTtcbiAgfVxuICBjb25zdCBzaWduID0gb3B0cy5sb25naXR1ZGUgPyAobmVnYXRpdmUgPyAnVycgOiAnRScpIDogbmVnYXRpdmUgPyAnUycgOiAnTic7XG5cbiAgLy8gQWRkIHBsYWNlaG9sZGVyQ2hhclxuICBsZXQgcHJlZml4ID0gJyc7XG4gIGlmIChvcHRzLnBsYWNlaG9sZGVyQ2hhcikge1xuICAgIGlmIChvcHRzLmxvbmdpdHVkZSAmJiBkZWdyZWVzIDwgMTAwKSB7XG4gICAgICBwcmVmaXggKz0gb3B0cy5wbGFjZWhvbGRlckNoYXI7XG4gICAgfVxuICAgIGlmIChkZWdyZWVzIDwgMTApIHtcbiAgICAgIHByZWZpeCArPSBvcHRzLnBsYWNlaG9sZGVyQ2hhcjtcbiAgICB9XG5cbiAgICBpZiAobWludXRlcyA8IDEwKSB7XG4gICAgICBtaW51dGVzID0gb3B0cy5wbGFjZWhvbGRlckNoYXIgKyBtaW51dGVzO1xuICAgIH0gZWxzZSB7XG4gICAgICBtaW51dGVzID0gbWludXRlcy50b1N0cmluZygpOyAvLyBjb252ZXJ0IHRvIHN0cmluZyAtIHJlcXVpcmVkIGZvciB0aGUgbmV4dCB3aGlsZVxuICAgIH1cbiAgICBpZiAob3B0cy5tYXhEZWNpbWFscyA+IDApIHtcbiAgICAgIC8vIEFkZCBkZWNpbWFsIHNlcGFyYXRvclxuICAgICAgaWYgKG1pbnV0ZXMubGVuZ3RoID09PSAyKSB7XG4gICAgICAgIG1pbnV0ZXMgKz0gJy4nO1xuICAgICAgfVxuICAgICAgLy8gQWRkIHRyYWlsaW5nIHBsYWNlaG9sZGVyIGNoYXJzXG4gICAgICB3aGlsZSAobWludXRlcy5sZW5ndGggPCBvcHRzLm1heERlY2ltYWxzICsgMykge1xuICAgICAgICBtaW51dGVzICs9IG9wdHMucGxhY2Vob2xkZXJDaGFyO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBjb25zdCBvdXRwdXQgPSBwcmVmaXggKyBkZWdyZWVzICsgJ8KwICcgKyBtaW51dGVzICsgXCInXCIgKyAob3B0cy5oaWRlU2lnbiA/ICcnIDogJyAnICsgc2lnbik7XG5cbiAgLy8gREVCVUdcbiAgLy9jb25zb2xlLmRlYnVnKCdmb3JtYXRUb0RETU0gb3V0cHV0OicsIG91dHB1dCk7XG5cbiAgcmV0dXJuIG91dHB1dDtcbn1cblxuLy8gMzbCsDU3JzlcIiBOICA9IDM2Ljk1MjUwMDBcbi8vIDEwwrA0JzIxXCIgVyA9IC0xMC4wNzI1MDAwXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VMYXRpdHVkZU9yTG9uZ2l0dWRlKGlucHV0OiBzdHJpbmcsIHBhdHRlcm46IHN0cmluZywgbWF4RGVjaW1hbHM/OiBudW1iZXIsIHBsYWNlaG9sZGVyQ2hhcj86IHN0cmluZyk6IG51bWJlciB8IG51bGwge1xuICBwbGFjZWhvbGRlckNoYXIgPSBwbGFjZWhvbGRlckNoYXIgfHwgREVGQVVMVF9QTEFDRUhPTERFUl9DSEFSO1xuICBsZXQgaW5wdXRGaXggPSBpbnB1dC50cmltKCk7XG4gIGlmIChwbGFjZWhvbGRlckNoYXIgPT09IEVNUFRZX1BMQUNFSE9MREVSX0NIQVIpIHtcbiAgICBpbnB1dEZpeCA9IGlucHV0Rml4XG4gICAgICAvLyBSZXBsYWNlIGVtcHR5IGNoYXIgcGxhY2Vob2xkZXJcbiAgICAgIC5yZXBsYWNlKG5ldyBSZWdFeHAoYFske0VNUFRZX1BMQUNFSE9MREVSX0NIQVJ9XWAsICdnJyksICcnKVxuICAgICAgLy8gUmVtb3ZlIHNwYWNlIGFuZCAnKycgKD0gdHJpbSBvbiBlYWNoIHBhcnRzKVxuICAgICAgLnJlcGxhY2UobmV3IFJlZ0V4cChgWyArXStgLCAnZycpLCAnJyk7XG4gIH1cbiAgLy8gUmVtb3ZlIGFsbCBwbGFjZWhvbGRlciAoPSB0cmltIG9uIGVhY2ggcGFydHMpXG4gIGVsc2Uge1xuICAgIGlucHV0Rml4ID0gaW5wdXRGaXgucmVwbGFjZShuZXcgUmVnRXhwKGBbICske3BsYWNlaG9sZGVyQ2hhcn1dK2AsICdnJyksICcnKTtcbiAgfVxuXG4gIC8vREVCVUcgY29uc29sZS5kZWJ1ZyhcIlBhcnNpbmcgbGF0PSBcIiArIGlucHV0Rml4KTtcbiAgY29uc3QgcGFydHMgPSBpbnB1dEZpeC5zcGxpdCgvW14tXFxkXFx3LixdKy8pO1xuICBsZXQgZGVncmVlcyA9IHBhcnNlRmxvYXQocGFydHNbMF0ucmVwbGFjZSgvLC9nLCAnLicpKTtcbiAgaWYgKGlzTmFOKGRlZ3JlZXMpKSB7XG4gICAgY29uc29sZS5kZWJ1ZygncGFyc2VMYXRpdHVkZU9yTG9uZ2l0dWRlICcgKyBpbnB1dCArICcgLT4gSW52YWxpZCBkZWdyZWVzIChOYU4pLiBQYXJ0cyBmb3VuZDonLCBwYXJ0cyk7XG4gICAgcmV0dXJuIE5hTjtcbiAgfVxuXG4gIGlmIChwYXR0ZXJuID09PSAnREQnKSByZXR1cm4gcm91bmRGbG9hdChkZWdyZWVzLCBtYXhEZWNpbWFscyk7XG5cbiAgY29uc3QgbWludXRlcyA9ICgocGF0dGVybiA9PT0gJ0RETU1TUycgfHwgcGF0dGVybiA9PT0gJ0RETU0nKSAmJiBwYXJ0c1sxXSAmJiBwYXJzZUZsb2F0KHBhcnRzWzFdLnJlcGxhY2UoLywvZywgJy4nKSkpIHx8IDA7XG4gIGNvbnN0IHNlY29uZHMgPSAocGF0dGVybiA9PT0gJ0RETU1TUycgJiYgcGFydHNbMl0gJiYgcGFyc2VGbG9hdChwYXJ0c1syXS5yZXBsYWNlKC8sL2csICcuJykpKSB8fCAwO1xuICBjb25zdCBkaXJlY3Rpb24gPSAocGF0dGVybiA9PT0gJ0RETU1TUycgJiYgcGFydHNbM10pIHx8IChwYXR0ZXJuID09PSAnRERNTScgJiYgcGFydHNbMl0pIHx8IHVuZGVmaW5lZDtcbiAgY29uc3Qgc2lnbiA9IGRpcmVjdGlvbiAmJiAoZGlyZWN0aW9uID09PSAncycgfHwgZGlyZWN0aW9uID09PSAnUycgfHwgZGlyZWN0aW9uID09PSAndycgfHwgZGlyZWN0aW9uID09PSAnVycpID8gLTEgOiAxO1xuXG4gIGRlZ3JlZXMgPSBzaWduICogKGRlZ3JlZXMgKyBtaW51dGVzIC8gNjAgKyBzZWNvbmRzIC8gKDYwICogNjApKTtcblxuICByZXR1cm4gcm91bmRGbG9hdChkZWdyZWVzLCBtYXhEZWNpbWFscyk7XG59XG5cbmZ1bmN0aW9uIHJvdW5kRmxvYXQoaW5wdXQ6IG51bWJlciwgbWF4RGVjaW1hbHM/OiBudW1iZXIpOiBudW1iZXIge1xuICBpZiAobWF4RGVjaW1hbHMgPiAwKSB7XG4gICAgY29uc3QgcG93RGVjaW1hbCA9IE1hdGgucG93KDEwLCBtYXhEZWNpbWFscyk7XG4gICAgcmV0dXJuIE1hdGgudHJ1bmMoaW5wdXQgKiBwb3dEZWNpbWFsICsgMC41KSAvIHBvd0RlY2ltYWw7XG4gIH1cbiAgLy8gbm8gZGVjaW1hbHM6IHJvdW5kIHRvIGludGVnZXJcbiAgZWxzZSBpZiAobWF4RGVjaW1hbHMgPT09IDApIHtcbiAgICByZXR1cm4gTWF0aC50cnVuYyhpbnB1dCArIDAuNSk7XG4gIH1cbiAgcmV0dXJuIGlucHV0O1xufVxuIl19
|