ngx-bootstrap 18.1.3 → 19.0.0
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/accordion/fesm2022/ngx-bootstrap-accordion.mjs +13 -14
- package/accordion/fesm2022/ngx-bootstrap-accordion.mjs.map +1 -1
- package/alert/fesm2022/ngx-bootstrap-alert.mjs +10 -10
- package/alert/fesm2022/ngx-bootstrap-alert.mjs.map +1 -1
- package/buttons/fesm2022/ngx-bootstrap-buttons.mjs +13 -13
- package/buttons/fesm2022/ngx-bootstrap-buttons.mjs.map +1 -1
- package/carousel/fesm2022/ngx-bootstrap-carousel.mjs +13 -13
- package/carousel/fesm2022/ngx-bootstrap-carousel.mjs.map +1 -1
- package/chronos/fesm2022/ngx-bootstrap-chronos.mjs.map +1 -1
- package/collapse/fesm2022/ngx-bootstrap-collapse.mjs +7 -8
- package/collapse/fesm2022/ngx-bootstrap-collapse.mjs.map +1 -1
- package/component-loader/fesm2022/ngx-bootstrap-component-loader.mjs +3 -3
- package/component-loader/fesm2022/ngx-bootstrap-component-loader.mjs.map +1 -1
- package/datepicker/fesm2022/ngx-bootstrap-datepicker.mjs +85 -86
- package/datepicker/fesm2022/ngx-bootstrap-datepicker.mjs.map +1 -1
- package/dropdown/fesm2022/ngx-bootstrap-dropdown.mjs +22 -25
- package/dropdown/fesm2022/ngx-bootstrap-dropdown.mjs.map +1 -1
- package/focus-trap/fesm2022/ngx-bootstrap-focus-trap.mjs +19 -19
- package/focus-trap/fesm2022/ngx-bootstrap-focus-trap.mjs.map +1 -1
- package/mini-ngrx/fesm2022/ngx-bootstrap-mini-ngrx.mjs.map +1 -1
- package/modal/fesm2022/ngx-bootstrap-modal.mjs +22 -24
- package/modal/fesm2022/ngx-bootstrap-modal.mjs.map +1 -1
- package/package.json +1 -3
- package/pagination/fesm2022/ngx-bootstrap-pagination.mjs +13 -13
- package/pagination/fesm2022/ngx-bootstrap-pagination.mjs.map +1 -1
- package/popover/fesm2022/ngx-bootstrap-popover.mjs +13 -13
- package/popover/fesm2022/ngx-bootstrap-popover.mjs.map +1 -1
- package/positioning/fesm2022/ngx-bootstrap-positioning.mjs +3 -3
- package/positioning/fesm2022/ngx-bootstrap-positioning.mjs.map +1 -1
- package/progressbar/fesm2022/ngx-bootstrap-progressbar.mjs +13 -13
- package/progressbar/fesm2022/ngx-bootstrap-progressbar.mjs.map +1 -1
- package/rating/fesm2022/ngx-bootstrap-rating.mjs +10 -10
- package/rating/fesm2022/ngx-bootstrap-rating.mjs.map +1 -1
- package/schematics/ng-add/index.js +2 -3
- package/schematics/ng-add/index.js.map +1 -1
- package/schematics/utils/addStyles.js +1 -2
- package/schematics/utils/addStyles.js.map +1 -1
- package/schematics/utils/current_dependency_versions.json +1 -1
- package/schematics/utils/getVersions.js +2 -3
- package/schematics/utils/getVersions.js.map +1 -1
- package/schematics/utils/index.js +6 -7
- package/schematics/utils/index.js.map +1 -1
- package/schematics/utils/ng-module-imports.js +1 -2
- package/schematics/utils/ng-module-imports.js.map +1 -1
- package/schematics/utils/project-main-file.js +1 -2
- package/schematics/utils/project-main-file.js.map +1 -1
- package/schematics/utils/project-targets.js +1 -2
- package/schematics/utils/project-targets.js.map +1 -1
- package/sortable/fesm2022/ngx-bootstrap-sortable.mjs +12 -14
- package/sortable/fesm2022/ngx-bootstrap-sortable.mjs.map +1 -1
- package/tabs/fesm2022/ngx-bootstrap-tabs.mjs +19 -19
- package/tabs/fesm2022/ngx-bootstrap-tabs.mjs.map +1 -1
- package/timepicker/fesm2022/ngx-bootstrap-timepicker.mjs +16 -16
- package/timepicker/fesm2022/ngx-bootstrap-timepicker.mjs.map +1 -1
- package/tooltip/fesm2022/ngx-bootstrap-tooltip.mjs +13 -13
- package/tooltip/fesm2022/ngx-bootstrap-tooltip.mjs.map +1 -1
- package/typeahead/fesm2022/ngx-bootstrap-typeahead.mjs +13 -14
- package/typeahead/fesm2022/ngx-bootstrap-typeahead.mjs.map +1 -1
- package/utils/fesm2022/ngx-bootstrap-utils.mjs.map +1 -1
- package/accordion/esm2022/accordion-group.component.mjs +0 -85
- package/accordion/esm2022/accordion.component.mjs +0 -57
- package/accordion/esm2022/accordion.config.mjs +0 -22
- package/accordion/esm2022/accordion.module.mjs +0 -24
- package/accordion/esm2022/index.mjs +0 -2
- package/accordion/esm2022/ngx-bootstrap-accordion.mjs +0 -5
- package/accordion/esm2022/public_api.mjs +0 -5
- package/alert/esm2022/alert.component.mjs +0 -77
- package/alert/esm2022/alert.config.mjs +0 -21
- package/alert/esm2022/alert.module.mjs +0 -23
- package/alert/esm2022/index.mjs +0 -2
- package/alert/esm2022/ngx-bootstrap-alert.mjs +0 -5
- package/alert/esm2022/public_api.mjs +0 -4
- package/buttons/esm2022/button-checkbox.directive.mjs +0 -88
- package/buttons/esm2022/button-radio-group.directive.mjs +0 -158
- package/buttons/esm2022/button-radio.directive.mjs +0 -189
- package/buttons/esm2022/buttons.module.mjs +0 -25
- package/buttons/esm2022/index.mjs +0 -2
- package/buttons/esm2022/ngx-bootstrap-buttons.mjs +0 -5
- package/buttons/esm2022/public_api.mjs +0 -5
- package/carousel/esm2022/carousel.component.mjs +0 -712
- package/carousel/esm2022/carousel.config.mjs +0 -32
- package/carousel/esm2022/carousel.module.mjs +0 -24
- package/carousel/esm2022/index.mjs +0 -2
- package/carousel/esm2022/models/index.mjs +0 -2
- package/carousel/esm2022/ngx-bootstrap-carousel.mjs +0 -5
- package/carousel/esm2022/public_api.mjs +0 -5
- package/carousel/esm2022/slide.component.mjs +0 -65
- package/carousel/esm2022/utils.mjs +0 -32
- package/chronos/esm2022/create/check-overflow.mjs +0 -30
- package/chronos/esm2022/create/clone.mjs +0 -6
- package/chronos/esm2022/create/date-from-array.mjs +0 -19
- package/chronos/esm2022/create/from-anything.mjs +0 -106
- package/chronos/esm2022/create/from-array.mjs +0 -135
- package/chronos/esm2022/create/from-object.mjs +0 -17
- package/chronos/esm2022/create/from-string-and-array.mjs +0 -38
- package/chronos/esm2022/create/from-string-and-format.mjs +0 -106
- package/chronos/esm2022/create/from-string.mjs +0 -222
- package/chronos/esm2022/create/local.mjs +0 -16
- package/chronos/esm2022/create/parsing-flags.mjs +0 -26
- package/chronos/esm2022/create/parsing.types.mjs +0 -2
- package/chronos/esm2022/create/valid.mjs +0 -42
- package/chronos/esm2022/duration/bubble.mjs +0 -47
- package/chronos/esm2022/duration/constructor.mjs +0 -130
- package/chronos/esm2022/duration/create.mjs +0 -112
- package/chronos/esm2022/duration/humanize.mjs +0 -79
- package/chronos/esm2022/duration/valid.mjs +0 -43
- package/chronos/esm2022/format/format.mjs +0 -50
- package/chronos/esm2022/format.mjs +0 -46
- package/chronos/esm2022/i18n/ar.mjs +0 -132
- package/chronos/esm2022/i18n/bg.mjs +0 -90
- package/chronos/esm2022/i18n/ca.mjs +0 -87
- package/chronos/esm2022/i18n/cs.mjs +0 -175
- package/chronos/esm2022/i18n/da.mjs +0 -49
- package/chronos/esm2022/i18n/de.mjs +0 -67
- package/chronos/esm2022/i18n/en-gb.mjs +0 -57
- package/chronos/esm2022/i18n/es-do.mjs +0 -81
- package/chronos/esm2022/i18n/es-pr.mjs +0 -74
- package/chronos/esm2022/i18n/es-us.mjs +0 -75
- package/chronos/esm2022/i18n/es.mjs +0 -80
- package/chronos/esm2022/i18n/et.mjs +0 -69
- package/chronos/esm2022/i18n/fa.mjs +0 -130
- package/chronos/esm2022/i18n/fi.mjs +0 -96
- package/chronos/esm2022/i18n/fr-ca.mjs +0 -69
- package/chronos/esm2022/i18n/fr.mjs +0 -72
- package/chronos/esm2022/i18n/gl.mjs +0 -80
- package/chronos/esm2022/i18n/he.mjs +0 -94
- package/chronos/esm2022/i18n/hi.mjs +0 -119
- package/chronos/esm2022/i18n/hr.mjs +0 -58
- package/chronos/esm2022/i18n/hu.mjs +0 -100
- package/chronos/esm2022/i18n/id.mjs +0 -78
- package/chronos/esm2022/i18n/it.mjs +0 -61
- package/chronos/esm2022/i18n/ja.mjs +0 -71
- package/chronos/esm2022/i18n/ka.mjs +0 -83
- package/chronos/esm2022/i18n/kk.mjs +0 -76
- package/chronos/esm2022/i18n/ko.mjs +0 -72
- package/chronos/esm2022/i18n/lt.mjs +0 -112
- package/chronos/esm2022/i18n/lv.mjs +0 -52
- package/chronos/esm2022/i18n/mn.mjs +0 -94
- package/chronos/esm2022/i18n/nb.mjs +0 -53
- package/chronos/esm2022/i18n/nl-be.mjs +0 -77
- package/chronos/esm2022/i18n/nl.mjs +0 -76
- package/chronos/esm2022/i18n/pl.mjs +0 -122
- package/chronos/esm2022/i18n/pt-br.mjs +0 -52
- package/chronos/esm2022/i18n/ro.mjs +0 -66
- package/chronos/esm2022/i18n/ru.mjs +0 -177
- package/chronos/esm2022/i18n/sk.mjs +0 -153
- package/chronos/esm2022/i18n/sl.mjs +0 -179
- package/chronos/esm2022/i18n/sq.mjs +0 -50
- package/chronos/esm2022/i18n/sv.mjs +0 -59
- package/chronos/esm2022/i18n/th-be.mjs +0 -73
- package/chronos/esm2022/i18n/th.mjs +0 -58
- package/chronos/esm2022/i18n/tr.mjs +0 -78
- package/chronos/esm2022/i18n/uk.mjs +0 -143
- package/chronos/esm2022/i18n/vi.mjs +0 -70
- package/chronos/esm2022/i18n/zh-cn.mjs +0 -109
- package/chronos/esm2022/index.mjs +0 -2
- package/chronos/esm2022/locale/calendar.mjs +0 -9
- package/chronos/esm2022/locale/locale.class.mjs +0 -532
- package/chronos/esm2022/locale/locale.defaults.mjs +0 -40
- package/chronos/esm2022/locale/locales.mjs +0 -228
- package/chronos/esm2022/moment/add-subtract.mjs +0 -35
- package/chronos/esm2022/moment/calendar.mjs +0 -41
- package/chronos/esm2022/moment/diff.mjs +0 -70
- package/chronos/esm2022/moment/min-max.mjs +0 -38
- package/chronos/esm2022/ngx-bootstrap-chronos.mjs +0 -5
- package/chronos/esm2022/parse/regex.mjs +0 -47
- package/chronos/esm2022/parse/token.mjs +0 -31
- package/chronos/esm2022/public_api.mjs +0 -59
- package/chronos/esm2022/testing/chain.mjs +0 -708
- package/chronos/esm2022/types.mjs +0 -2
- package/chronos/esm2022/units/aliases.mjs +0 -35
- package/chronos/esm2022/units/constants.mjs +0 -11
- package/chronos/esm2022/units/day-of-month.mjs +0 -31
- package/chronos/esm2022/units/day-of-week.mjs +0 -129
- package/chronos/esm2022/units/day-of-year.mjs +0 -37
- package/chronos/esm2022/units/hour.mjs +0 -127
- package/chronos/esm2022/units/index.mjs +0 -19
- package/chronos/esm2022/units/millisecond.mjs +0 -59
- package/chronos/esm2022/units/minute.mjs +0 -23
- package/chronos/esm2022/units/month.mjs +0 -63
- package/chronos/esm2022/units/offset.mjs +0 -209
- package/chronos/esm2022/units/priorities.mjs +0 -21
- package/chronos/esm2022/units/quarter.mjs +0 -39
- package/chronos/esm2022/units/second.mjs +0 -23
- package/chronos/esm2022/units/timestamp.mjs +0 -28
- package/chronos/esm2022/units/timezone.mjs +0 -19
- package/chronos/esm2022/units/week-calendar-utils.mjs +0 -70
- package/chronos/esm2022/units/week-year.mjs +0 -101
- package/chronos/esm2022/units/week.mjs +0 -58
- package/chronos/esm2022/units/year.mjs +0 -60
- package/chronos/esm2022/utils/abs-ceil.mjs +0 -4
- package/chronos/esm2022/utils/abs-round.mjs +0 -4
- package/chronos/esm2022/utils/compare-arrays.mjs +0 -16
- package/chronos/esm2022/utils/date-compare.mjs +0 -55
- package/chronos/esm2022/utils/date-getters.mjs +0 -67
- package/chronos/esm2022/utils/date-setters.mjs +0 -75
- package/chronos/esm2022/utils/defaults.mjs +0 -11
- package/chronos/esm2022/utils/start-end-of.mjs +0 -57
- package/chronos/esm2022/utils/type-checks.mjs +0 -58
- package/chronos/esm2022/utils/zero-fill.mjs +0 -10
- package/chronos/esm2022/utils.mjs +0 -7
- package/collapse/esm2022/collapse-animations.mjs +0 -11
- package/collapse/esm2022/collapse.directive.mjs +0 -169
- package/collapse/esm2022/collapse.module.mjs +0 -23
- package/collapse/esm2022/index.mjs +0 -2
- package/collapse/esm2022/ngx-bootstrap-collapse.mjs +0 -5
- package/collapse/esm2022/public_api.mjs +0 -3
- package/component-loader/esm2022/bs-component-ref.class.mjs +0 -3
- package/component-loader/esm2022/component-loader.class.mjs +0 -292
- package/component-loader/esm2022/component-loader.factory.mjs +0 -35
- package/component-loader/esm2022/content-ref.class.mjs +0 -16
- package/component-loader/esm2022/index.mjs +0 -2
- package/component-loader/esm2022/listen-options.model.mjs +0 -2
- package/component-loader/esm2022/ngx-bootstrap-component-loader.mjs +0 -5
- package/component-loader/esm2022/public_api.mjs +0 -5
- package/datepicker/esm2022/base/bs-datepicker-container.mjs +0 -76
- package/datepicker/esm2022/bs-datepicker-inline.component.mjs +0 -163
- package/datepicker/esm2022/bs-datepicker-inline.config.mjs +0 -14
- package/datepicker/esm2022/bs-datepicker-input.directive.mjs +0 -172
- package/datepicker/esm2022/bs-datepicker.component.mjs +0 -307
- package/datepicker/esm2022/bs-datepicker.config.mjs +0 -101
- package/datepicker/esm2022/bs-datepicker.module.mjs +0 -105
- package/datepicker/esm2022/bs-daterangepicker-inline.component.mjs +0 -169
- package/datepicker/esm2022/bs-daterangepicker-inline.config.mjs +0 -21
- package/datepicker/esm2022/bs-daterangepicker-input.directive.mjs +0 -215
- package/datepicker/esm2022/bs-daterangepicker.component.mjs +0 -302
- package/datepicker/esm2022/bs-daterangepicker.config.mjs +0 -19
- package/datepicker/esm2022/bs-locale.service.mjs +0 -32
- package/datepicker/esm2022/datepicker-animations.mjs +0 -16
- package/datepicker/esm2022/engine/calc-days-calendar.mjs +0 -21
- package/datepicker/esm2022/engine/flag-days-calendar.mjs +0 -93
- package/datepicker/esm2022/engine/flag-months-calendar.mjs +0 -45
- package/datepicker/esm2022/engine/flag-years-calendar.mjs +0 -42
- package/datepicker/esm2022/engine/format-days-calendar.mjs +0 -33
- package/datepicker/esm2022/engine/format-months-calendar.mjs +0 -23
- package/datepicker/esm2022/engine/format-years-calendar.mjs +0 -39
- package/datepicker/esm2022/engine/view-mode.mjs +0 -4
- package/datepicker/esm2022/index.mjs +0 -2
- package/datepicker/esm2022/models/index.mjs +0 -9
- package/datepicker/esm2022/ngx-bootstrap-datepicker.mjs +0 -5
- package/datepicker/esm2022/public_api.mjs +0 -17
- package/datepicker/esm2022/reducer/_defaults.mjs +0 -6
- package/datepicker/esm2022/reducer/bs-datepicker.actions.mjs +0 -143
- package/datepicker/esm2022/reducer/bs-datepicker.effects.mjs +0 -182
- package/datepicker/esm2022/reducer/bs-datepicker.reducer.mjs +0 -378
- package/datepicker/esm2022/reducer/bs-datepicker.state.mjs +0 -18
- package/datepicker/esm2022/reducer/bs-datepicker.store.mjs +0 -22
- package/datepicker/esm2022/themes/bs/bs-calendar-layout.component.mjs +0 -49
- package/datepicker/esm2022/themes/bs/bs-current-date-view.component.mjs +0 -17
- package/datepicker/esm2022/themes/bs/bs-custom-dates-view.component.mjs +0 -55
- package/datepicker/esm2022/themes/bs/bs-datepicker-container.component.mjs +0 -199
- package/datepicker/esm2022/themes/bs/bs-datepicker-day-decorator.directive.mjs +0 -48
- package/datepicker/esm2022/themes/bs/bs-datepicker-inline-container.component.mjs +0 -49
- package/datepicker/esm2022/themes/bs/bs-datepicker-navigation-view.component.mjs +0 -125
- package/datepicker/esm2022/themes/bs/bs-daterangepicker-container.component.mjs +0 -275
- package/datepicker/esm2022/themes/bs/bs-daterangepicker-inline-container.component.mjs +0 -49
- package/datepicker/esm2022/themes/bs/bs-days-calendar-view.component.mjs +0 -233
- package/datepicker/esm2022/themes/bs/bs-months-calendar-view.component.mjs +0 -95
- package/datepicker/esm2022/themes/bs/bs-timepicker-view.component.mjs +0 -56
- package/datepicker/esm2022/themes/bs/bs-years-calendar-view.component.mjs +0 -96
- package/datepicker/esm2022/utils/bs-calendar-utils.mjs +0 -117
- package/datepicker/esm2022/utils/copy-time-utils.mjs +0 -10
- package/datepicker/esm2022/utils/matrix-utils.mjs +0 -14
- package/dropdown/esm2022/bs-dropdown-container.component.mjs +0 -81
- package/dropdown/esm2022/bs-dropdown-menu.directive.mjs +0 -23
- package/dropdown/esm2022/bs-dropdown-toggle.directive.mjs +0 -88
- package/dropdown/esm2022/bs-dropdown.config.mjs +0 -24
- package/dropdown/esm2022/bs-dropdown.directive.mjs +0 -343
- package/dropdown/esm2022/bs-dropdown.module.mjs +0 -40
- package/dropdown/esm2022/bs-dropdown.state.mjs +0 -25
- package/dropdown/esm2022/dropdown-animations.mjs +0 -7
- package/dropdown/esm2022/index.mjs +0 -2
- package/dropdown/esm2022/ngx-bootstrap-dropdown.mjs +0 -5
- package/dropdown/esm2022/public_api.mjs +0 -8
- package/esm2022/index.mjs +0 -2
- package/esm2022/ngx-bootstrap.mjs +0 -5
- package/focus-trap/esm2022/boolean-property.mjs +0 -12
- package/focus-trap/esm2022/focus-trap-manager.mjs +0 -54
- package/focus-trap/esm2022/focus-trap.mjs +0 -411
- package/focus-trap/esm2022/focus-trap.module.mjs +0 -24
- package/focus-trap/esm2022/index.mjs +0 -2
- package/focus-trap/esm2022/interactivity-checker.mjs +0 -241
- package/focus-trap/esm2022/ngx-bootstrap-focus-trap.mjs +0 -5
- package/focus-trap/esm2022/platform.mjs +0 -80
- package/focus-trap/esm2022/public_api.mjs +0 -4
- package/locale/esm2022/index.mjs +0 -2
- package/locale/esm2022/ngx-bootstrap-locale.mjs +0 -5
- package/locale/esm2022/public_api.mjs +0 -47
- package/mini-ngrx/esm2022/index.mjs +0 -2
- package/mini-ngrx/esm2022/ngx-bootstrap-mini-ngrx.mjs +0 -5
- package/mini-ngrx/esm2022/public_api.mjs +0 -3
- package/mini-ngrx/esm2022/state.class.mjs +0 -16
- package/mini-ngrx/esm2022/store.class.mjs +0 -42
- package/modal/esm2022/bs-modal-ref.service.mjs +0 -22
- package/modal/esm2022/bs-modal.service.mjs +0 -231
- package/modal/esm2022/index.mjs +0 -2
- package/modal/esm2022/modal-backdrop.component.mjs +0 -51
- package/modal/esm2022/modal-backdrop.options.mjs +0 -7
- package/modal/esm2022/modal-container.component.mjs +0 -156
- package/modal/esm2022/modal-options.class.mjs +0 -46
- package/modal/esm2022/modal.directive.mjs +0 -365
- package/modal/esm2022/modal.module.mjs +0 -44
- package/modal/esm2022/models/index.mjs +0 -2
- package/modal/esm2022/ngx-bootstrap-modal.mjs +0 -5
- package/modal/esm2022/public_api.mjs +0 -9
- package/pagination/esm2022/index.mjs +0 -2
- package/pagination/esm2022/models/index.mjs +0 -2
- package/pagination/esm2022/ngx-bootstrap-pagination.mjs +0 -5
- package/pagination/esm2022/pager.component.mjs +0 -256
- package/pagination/esm2022/pagination.component.mjs +0 -257
- package/pagination/esm2022/pagination.config.mjs +0 -35
- package/pagination/esm2022/pagination.module.mjs +0 -25
- package/pagination/esm2022/public_api.mjs +0 -5
- package/popover/esm2022/index.mjs +0 -2
- package/popover/esm2022/ngx-bootstrap-popover.mjs +0 -5
- package/popover/esm2022/popover-container.component.mjs +0 -45
- package/popover/esm2022/popover.config.mjs +0 -35
- package/popover/esm2022/popover.directive.mjs +0 -241
- package/popover/esm2022/popover.module.mjs +0 -25
- package/popover/esm2022/public_api.mjs +0 -5
- package/positioning/esm2022/index.mjs +0 -2
- package/positioning/esm2022/models/index.mjs +0 -53
- package/positioning/esm2022/modifiers/arrow.mjs +0 -56
- package/positioning/esm2022/modifiers/flip.mjs +0 -65
- package/positioning/esm2022/modifiers/index.mjs +0 -6
- package/positioning/esm2022/modifiers/initData.mjs +0 -44
- package/positioning/esm2022/modifiers/preventOverflow.mjs +0 -54
- package/positioning/esm2022/modifiers/shift.mjs +0 -24
- package/positioning/esm2022/ng-positioning.mjs +0 -39
- package/positioning/esm2022/ngx-bootstrap-positioning.mjs +0 -5
- package/positioning/esm2022/positioning.service.mjs +0 -71
- package/positioning/esm2022/public_api.mjs +0 -5
- package/positioning/esm2022/utils/checkMargin.mjs +0 -32
- package/positioning/esm2022/utils/computeAutoPlacement.mjs +0 -55
- package/positioning/esm2022/utils/findCommonOffsetParent.mjs +0 -40
- package/positioning/esm2022/utils/getBordersSize.mjs +0 -10
- package/positioning/esm2022/utils/getBoundaries.mjs +0 -70
- package/positioning/esm2022/utils/getBoundingClientRect.mjs +0 -56
- package/positioning/esm2022/utils/getClientRect.mjs +0 -8
- package/positioning/esm2022/utils/getFixedPositionOffsetParent.mjs +0 -16
- package/positioning/esm2022/utils/getOffsetParent.mjs +0 -33
- package/positioning/esm2022/utils/getOffsetRectRelativeToArbitraryNode.mjs +0 -50
- package/positioning/esm2022/utils/getOffsets.mjs +0 -11
- package/positioning/esm2022/utils/getOppositePlacement.mjs +0 -8
- package/positioning/esm2022/utils/getOppositeVariation.mjs +0 -13
- package/positioning/esm2022/utils/getOuterSizes.mjs +0 -12
- package/positioning/esm2022/utils/getParentNode.mjs +0 -12
- package/positioning/esm2022/utils/getReferenceOffsets.mjs +0 -13
- package/positioning/esm2022/utils/getRoot.mjs +0 -10
- package/positioning/esm2022/utils/getScroll.mjs +0 -14
- package/positioning/esm2022/utils/getScrollParent.mjs +0 -28
- package/positioning/esm2022/utils/getStyleComputedProperty.mjs +0 -12
- package/positioning/esm2022/utils/getTargetOffsets.mjs +0 -30
- package/positioning/esm2022/utils/getViewportOffsetRectRelativeToArtbitraryNode.mjs +0 -19
- package/positioning/esm2022/utils/getWindowSizes.mjs +0 -14
- package/positioning/esm2022/utils/index.mjs +0 -24
- package/positioning/esm2022/utils/isFixed.mjs +0 -16
- package/positioning/esm2022/utils/isModifierEnabled.mjs +0 -4
- package/positioning/esm2022/utils/isNumeric.mjs +0 -10
- package/positioning/esm2022/utils/isOffsetContainer.mjs +0 -11
- package/positioning/esm2022/utils/setStyles.mjs +0 -21
- package/positioning/esm2022/utils/updateContainerClass.mjs +0 -32
- package/progressbar/esm2022/bar.component.mjs +0 -72
- package/progressbar/esm2022/index.mjs +0 -2
- package/progressbar/esm2022/ngx-bootstrap-progressbar.mjs +0 -5
- package/progressbar/esm2022/progressbar-type.interface.mjs +0 -2
- package/progressbar/esm2022/progressbar.component.mjs +0 -53
- package/progressbar/esm2022/progressbar.config.mjs +0 -19
- package/progressbar/esm2022/progressbar.module.mjs +0 -24
- package/progressbar/esm2022/public_api.mjs +0 -5
- package/rating/esm2022/index.mjs +0 -2
- package/rating/esm2022/models/index.mjs +0 -2
- package/rating/esm2022/ngx-bootstrap-rating.mjs +0 -5
- package/rating/esm2022/public_api.mjs +0 -4
- package/rating/esm2022/rating.component.mjs +0 -121
- package/rating/esm2022/rating.config.mjs +0 -18
- package/rating/esm2022/rating.module.mjs +0 -23
- package/sortable/esm2022/draggable-item.mjs +0 -2
- package/sortable/esm2022/draggable-item.service.mjs +0 -36
- package/sortable/esm2022/index.mjs +0 -2
- package/sortable/esm2022/ngx-bootstrap-sortable.mjs +0 -5
- package/sortable/esm2022/public_api.mjs +0 -4
- package/sortable/esm2022/sortable.component.mjs +0 -270
- package/sortable/esm2022/sortable.module.mjs +0 -23
- package/tabs/esm2022/index.mjs +0 -2
- package/tabs/esm2022/ng-transclude.directive.mjs +0 -29
- package/tabs/esm2022/ngx-bootstrap-tabs.mjs +0 -5
- package/tabs/esm2022/public_api.mjs +0 -7
- package/tabs/esm2022/tab-heading.directive.mjs +0 -21
- package/tabs/esm2022/tab.directive.mjs +0 -118
- package/tabs/esm2022/tabs.module.mjs +0 -41
- package/tabs/esm2022/tabset.component.mjs +0 -216
- package/tabs/esm2022/tabset.config.mjs +0 -21
- package/timepicker/esm2022/index.mjs +0 -2
- package/timepicker/esm2022/models/index.mjs +0 -2
- package/timepicker/esm2022/ngx-bootstrap-timepicker.mjs +0 -5
- package/timepicker/esm2022/public_api.mjs +0 -6
- package/timepicker/esm2022/reducer/timepicker.actions.mjs +0 -53
- package/timepicker/esm2022/reducer/timepicker.reducer.mjs +0 -83
- package/timepicker/esm2022/reducer/timepicker.store.mjs +0 -21
- package/timepicker/esm2022/timepicker-controls.util.mjs +0 -123
- package/timepicker/esm2022/timepicker.component.mjs +0 -334
- package/timepicker/esm2022/timepicker.config.mjs +0 -54
- package/timepicker/esm2022/timepicker.models.mjs +0 -2
- package/timepicker/esm2022/timepicker.module.mjs +0 -23
- package/timepicker/esm2022/timepicker.utils.mjs +0 -152
- package/tooltip/esm2022/index.mjs +0 -2
- package/tooltip/esm2022/ngx-bootstrap-tooltip.mjs +0 -5
- package/tooltip/esm2022/public_api.mjs +0 -5
- package/tooltip/esm2022/tooltip-container.component.mjs +0 -48
- package/tooltip/esm2022/tooltip.config.mjs +0 -22
- package/tooltip/esm2022/tooltip.directive.mjs +0 -344
- package/tooltip/esm2022/tooltip.module.mjs +0 -25
- package/typeahead/esm2022/index.mjs +0 -2
- package/typeahead/esm2022/latin-map.mjs +0 -827
- package/typeahead/esm2022/models/index.mjs +0 -2
- package/typeahead/esm2022/ngx-bootstrap-typeahead.mjs +0 -5
- package/typeahead/esm2022/public_api.mjs +0 -9
- package/typeahead/esm2022/typeahead-animations.mjs +0 -16
- package/typeahead/esm2022/typeahead-container.component.mjs +0 -310
- package/typeahead/esm2022/typeahead-match.class.mjs +0 -15
- package/typeahead/esm2022/typeahead-options.class.mjs +0 -8
- package/typeahead/esm2022/typeahead-order.class.mjs +0 -2
- package/typeahead/esm2022/typeahead-utils.mjs +0 -77
- package/typeahead/esm2022/typeahead.config.mjs +0 -34
- package/typeahead/esm2022/typeahead.directive.mjs +0 -573
- package/typeahead/esm2022/typeahead.module.mjs +0 -25
- package/utils/esm2022/decorators.mjs +0 -23
- package/utils/esm2022/facade/browser.mjs +0 -26
- package/utils/esm2022/index.mjs +0 -2
- package/utils/esm2022/linked-list.class.mjs +0 -247
- package/utils/esm2022/ngx-bootstrap-utils.mjs +0 -5
- package/utils/esm2022/public_api.mjs +0 -10
- package/utils/esm2022/theme-provider.mjs +0 -48
- package/utils/esm2022/trigger.class.mjs +0 -14
- package/utils/esm2022/triggers.mjs +0 -120
- package/utils/esm2022/utils.class.mjs +0 -30
- package/utils/esm2022/warn-once.mjs +0 -11
@@ -1,532 +0,0 @@
|
|
1
|
-
import { weekOfYear } from '../units/week-calendar-utils';
|
2
|
-
import { hasOwnProp, isArray, isFunction } from '../utils/type-checks';
|
3
|
-
import { getDay, getMonth, getFullYear } from '../utils/date-getters';
|
4
|
-
import { matchWord, regexEscape } from '../parse/regex';
|
5
|
-
import { setDayOfWeek } from '../units/day-of-week';
|
6
|
-
const MONTHS_IN_FORMAT = /D[oD]?(\[[^\[\]]*\]|\s)+MMMM?/;
|
7
|
-
export const defaultLocaleMonths = 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_');
|
8
|
-
export const defaultLocaleMonthsShort = 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_');
|
9
|
-
export const defaultLocaleWeekdays = 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_');
|
10
|
-
export const defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_');
|
11
|
-
export const defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_');
|
12
|
-
export const defaultLongDateFormat = {
|
13
|
-
LTS: 'h:mm:ss A',
|
14
|
-
LT: 'h:mm A',
|
15
|
-
L: 'MM/DD/YYYY',
|
16
|
-
LL: 'MMMM D, YYYY',
|
17
|
-
LLL: 'MMMM D, YYYY h:mm A',
|
18
|
-
LLLL: 'dddd, MMMM D, YYYY h:mm A'
|
19
|
-
};
|
20
|
-
export const defaultOrdinal = '%d';
|
21
|
-
export const defaultDayOfMonthOrdinalParse = /\d{1,2}/;
|
22
|
-
const defaultMonthsShortRegex = matchWord;
|
23
|
-
const defaultMonthsRegex = matchWord;
|
24
|
-
export class Locale {
|
25
|
-
constructor(config) {
|
26
|
-
if (config) {
|
27
|
-
this.set(config);
|
28
|
-
}
|
29
|
-
}
|
30
|
-
set(config) {
|
31
|
-
let confKey;
|
32
|
-
for (confKey in config) {
|
33
|
-
// eslint-disable-next-line no-prototype-builtins
|
34
|
-
if (!config.hasOwnProperty(confKey)) {
|
35
|
-
continue;
|
36
|
-
}
|
37
|
-
const prop = config[confKey];
|
38
|
-
const key = (isFunction(prop) ? confKey : `_${confKey}`);
|
39
|
-
this[key] = prop;
|
40
|
-
}
|
41
|
-
this._config = config;
|
42
|
-
}
|
43
|
-
calendar(key, date, now) {
|
44
|
-
const output = this._calendar[key] || this._calendar["sameElse"];
|
45
|
-
return isFunction(output) ? output.call(null, date, now) : output;
|
46
|
-
}
|
47
|
-
longDateFormat(key) {
|
48
|
-
const format = this._longDateFormat[key];
|
49
|
-
const formatUpper = this._longDateFormat[key.toUpperCase()];
|
50
|
-
if (format || !formatUpper) {
|
51
|
-
return format;
|
52
|
-
}
|
53
|
-
this._longDateFormat[key] = formatUpper.replace(/MMMM|MM|DD|dddd/g, function (val) {
|
54
|
-
return val.slice(1);
|
55
|
-
});
|
56
|
-
return this._longDateFormat[key];
|
57
|
-
}
|
58
|
-
get invalidDate() {
|
59
|
-
return this._invalidDate;
|
60
|
-
}
|
61
|
-
set invalidDate(val) {
|
62
|
-
this._invalidDate = val;
|
63
|
-
}
|
64
|
-
ordinal(num, token) {
|
65
|
-
return this._ordinal.replace('%d', num.toString(10));
|
66
|
-
}
|
67
|
-
preparse(str, format) {
|
68
|
-
return str;
|
69
|
-
}
|
70
|
-
getFullYear(date, isUTC = false) {
|
71
|
-
return getFullYear(date, isUTC);
|
72
|
-
}
|
73
|
-
postformat(str) {
|
74
|
-
return str;
|
75
|
-
}
|
76
|
-
relativeTime(num, withoutSuffix, str, isFuture) {
|
77
|
-
const output = this._relativeTime[str];
|
78
|
-
return (isFunction(output)) ?
|
79
|
-
output(num, withoutSuffix, str, isFuture) :
|
80
|
-
output.replace(/%d/i, num.toString(10));
|
81
|
-
}
|
82
|
-
pastFuture(diff, output) {
|
83
|
-
const format = this._relativeTime[diff > 0 ? 'future' : 'past'];
|
84
|
-
return isFunction(format) ? format(output) : format.replace(/%s/i, output);
|
85
|
-
}
|
86
|
-
months(date, format, isUTC = false) {
|
87
|
-
if (!date) {
|
88
|
-
return isArray(this._months)
|
89
|
-
? this._months
|
90
|
-
: this._months.standalone;
|
91
|
-
}
|
92
|
-
if (isArray(this._months)) {
|
93
|
-
return this._months[getMonth(date, isUTC)];
|
94
|
-
}
|
95
|
-
const key = (this._months.isFormat || MONTHS_IN_FORMAT).test(format)
|
96
|
-
? 'format'
|
97
|
-
: 'standalone';
|
98
|
-
return this._months[key][getMonth(date, isUTC)];
|
99
|
-
}
|
100
|
-
monthsShort(date, format, isUTC = false) {
|
101
|
-
if (!date) {
|
102
|
-
return isArray(this._monthsShort)
|
103
|
-
? this._monthsShort
|
104
|
-
: this._monthsShort.standalone;
|
105
|
-
}
|
106
|
-
if (isArray(this._monthsShort)) {
|
107
|
-
return this._monthsShort[getMonth(date, isUTC)];
|
108
|
-
}
|
109
|
-
const key = MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone';
|
110
|
-
return this._monthsShort[key][getMonth(date, isUTC)];
|
111
|
-
}
|
112
|
-
monthsParse(monthName, format, strict) {
|
113
|
-
let date;
|
114
|
-
let regex;
|
115
|
-
if (this._monthsParseExact) {
|
116
|
-
return this.handleMonthStrictParse(monthName, format, strict);
|
117
|
-
}
|
118
|
-
if (!this._monthsParse) {
|
119
|
-
this._monthsParse = [];
|
120
|
-
this._longMonthsParse = [];
|
121
|
-
this._shortMonthsParse = [];
|
122
|
-
}
|
123
|
-
// TODO: add sorting
|
124
|
-
// Sorting makes sure if one month (or abbr) is a prefix of another
|
125
|
-
// see sorting in computeMonthsParse
|
126
|
-
let i;
|
127
|
-
for (i = 0; i < 12; i++) {
|
128
|
-
// make the regex if we don't have it already
|
129
|
-
date = new Date(Date.UTC(2000, i));
|
130
|
-
if (strict && !this._longMonthsParse[i]) {
|
131
|
-
const _months = this.months(date, '', true).replace('.', '');
|
132
|
-
const _shortMonths = this.monthsShort(date, '', true).replace('.', '');
|
133
|
-
this._longMonthsParse[i] = new RegExp(`^${_months}$`, 'i');
|
134
|
-
this._shortMonthsParse[i] = new RegExp(`^${_shortMonths}$`, 'i');
|
135
|
-
}
|
136
|
-
if (!strict && !this._monthsParse[i]) {
|
137
|
-
regex = `^${this.months(date, '', true)}|^${this.monthsShort(date, '', true)}`;
|
138
|
-
this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i');
|
139
|
-
}
|
140
|
-
// testing the regex
|
141
|
-
if (strict && format === 'MMMM' && this._longMonthsParse[i].test(monthName)) {
|
142
|
-
return i;
|
143
|
-
}
|
144
|
-
if (strict && format === 'MMM' && this._shortMonthsParse[i].test(monthName)) {
|
145
|
-
return i;
|
146
|
-
}
|
147
|
-
if (!strict && this._monthsParse[i].test(monthName)) {
|
148
|
-
return i;
|
149
|
-
}
|
150
|
-
}
|
151
|
-
}
|
152
|
-
monthsRegex(isStrict) {
|
153
|
-
if (this._monthsParseExact) {
|
154
|
-
if (!hasOwnProp(this, '_monthsRegex')) {
|
155
|
-
this.computeMonthsParse();
|
156
|
-
}
|
157
|
-
if (isStrict) {
|
158
|
-
return this._monthsStrictRegex;
|
159
|
-
}
|
160
|
-
return this._monthsRegex;
|
161
|
-
}
|
162
|
-
if (!hasOwnProp(this, '_monthsRegex')) {
|
163
|
-
this._monthsRegex = defaultMonthsRegex;
|
164
|
-
}
|
165
|
-
return this._monthsStrictRegex && isStrict ?
|
166
|
-
this._monthsStrictRegex : this._monthsRegex;
|
167
|
-
}
|
168
|
-
monthsShortRegex(isStrict) {
|
169
|
-
if (this._monthsParseExact) {
|
170
|
-
if (!hasOwnProp(this, '_monthsRegex')) {
|
171
|
-
this.computeMonthsParse();
|
172
|
-
}
|
173
|
-
if (isStrict) {
|
174
|
-
return this._monthsShortStrictRegex;
|
175
|
-
}
|
176
|
-
return this._monthsShortRegex;
|
177
|
-
}
|
178
|
-
if (!hasOwnProp(this, '_monthsShortRegex')) {
|
179
|
-
this._monthsShortRegex = defaultMonthsShortRegex;
|
180
|
-
}
|
181
|
-
return this._monthsShortStrictRegex && isStrict ?
|
182
|
-
this._monthsShortStrictRegex : this._monthsShortRegex;
|
183
|
-
}
|
184
|
-
/** Week */
|
185
|
-
week(date, isUTC) {
|
186
|
-
return weekOfYear(date, this._week.dow, this._week.doy, isUTC).week;
|
187
|
-
}
|
188
|
-
firstDayOfWeek() {
|
189
|
-
return this._week.dow;
|
190
|
-
}
|
191
|
-
firstDayOfYear() {
|
192
|
-
return this._week.doy;
|
193
|
-
}
|
194
|
-
weekdays(date, format, isUTC) {
|
195
|
-
if (!date) {
|
196
|
-
return isArray(this._weekdays)
|
197
|
-
? this._weekdays
|
198
|
-
: this._weekdays.standalone;
|
199
|
-
}
|
200
|
-
if (isArray(this._weekdays)) {
|
201
|
-
return this._weekdays[getDay(date, isUTC)];
|
202
|
-
}
|
203
|
-
const _key = this._weekdays.isFormat.test(format)
|
204
|
-
? 'format'
|
205
|
-
: 'standalone';
|
206
|
-
return this._weekdays[_key][getDay(date, isUTC)];
|
207
|
-
}
|
208
|
-
weekdaysMin(date, format, isUTC) {
|
209
|
-
return date ? this._weekdaysMin[getDay(date, isUTC)] : this._weekdaysMin;
|
210
|
-
}
|
211
|
-
weekdaysShort(date, format, isUTC) {
|
212
|
-
return date ? this._weekdaysShort[getDay(date, isUTC)] : this._weekdaysShort;
|
213
|
-
}
|
214
|
-
// proto.weekdaysParse = localeWeekdaysParse;
|
215
|
-
weekdaysParse(weekdayName, format, strict) {
|
216
|
-
let i;
|
217
|
-
let regex;
|
218
|
-
if (this._weekdaysParseExact) {
|
219
|
-
return this.handleWeekStrictParse(weekdayName, format, strict);
|
220
|
-
}
|
221
|
-
if (!this._weekdaysParse) {
|
222
|
-
this._weekdaysParse = [];
|
223
|
-
this._minWeekdaysParse = [];
|
224
|
-
this._shortWeekdaysParse = [];
|
225
|
-
this._fullWeekdaysParse = [];
|
226
|
-
}
|
227
|
-
for (i = 0; i < 7; i++) {
|
228
|
-
// make the regex if we don't have it already
|
229
|
-
// fix: here is the issue
|
230
|
-
const date = setDayOfWeek(new Date(Date.UTC(2000, 1)), i, null, true);
|
231
|
-
if (strict && !this._fullWeekdaysParse[i]) {
|
232
|
-
this._fullWeekdaysParse[i] = new RegExp(`^${this.weekdays(date, '', true).replace('.', '\.?')}$`, 'i');
|
233
|
-
this._shortWeekdaysParse[i] = new RegExp(`^${this.weekdaysShort(date, '', true).replace('.', '\.?')}$`, 'i');
|
234
|
-
this._minWeekdaysParse[i] = new RegExp(`^${this.weekdaysMin(date, '', true).replace('.', '\.?')}$`, 'i');
|
235
|
-
}
|
236
|
-
if (!this._weekdaysParse[i]) {
|
237
|
-
regex = `^${this.weekdays(date, '', true)}|^${this.weekdaysShort(date, '', true)}|^${this.weekdaysMin(date, '', true)}`;
|
238
|
-
this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i');
|
239
|
-
}
|
240
|
-
if (!isArray(this._fullWeekdaysParse)
|
241
|
-
|| !isArray(this._shortWeekdaysParse)
|
242
|
-
|| !isArray(this._minWeekdaysParse)
|
243
|
-
|| !isArray(this._weekdaysParse)) {
|
244
|
-
return;
|
245
|
-
}
|
246
|
-
// testing the regex
|
247
|
-
if (strict && format === 'dddd' && this._fullWeekdaysParse[i].test(weekdayName)) {
|
248
|
-
return i;
|
249
|
-
}
|
250
|
-
else if (strict && format === 'ddd' && this._shortWeekdaysParse[i].test(weekdayName)) {
|
251
|
-
return i;
|
252
|
-
}
|
253
|
-
else if (strict && format === 'dd' && this._minWeekdaysParse[i].test(weekdayName)) {
|
254
|
-
return i;
|
255
|
-
}
|
256
|
-
else if (!strict && this._weekdaysParse[i].test(weekdayName)) {
|
257
|
-
return i;
|
258
|
-
}
|
259
|
-
}
|
260
|
-
}
|
261
|
-
// proto.weekdaysRegex = weekdaysRegex;
|
262
|
-
weekdaysRegex(isStrict) {
|
263
|
-
if (this._weekdaysParseExact) {
|
264
|
-
if (!hasOwnProp(this, '_weekdaysRegex')) {
|
265
|
-
this.computeWeekdaysParse();
|
266
|
-
}
|
267
|
-
if (isStrict) {
|
268
|
-
return this._weekdaysStrictRegex;
|
269
|
-
}
|
270
|
-
else {
|
271
|
-
return this._weekdaysRegex;
|
272
|
-
}
|
273
|
-
}
|
274
|
-
else {
|
275
|
-
if (!hasOwnProp(this, '_weekdaysRegex')) {
|
276
|
-
this._weekdaysRegex = matchWord;
|
277
|
-
}
|
278
|
-
return this._weekdaysStrictRegex && isStrict ?
|
279
|
-
this._weekdaysStrictRegex : this._weekdaysRegex;
|
280
|
-
}
|
281
|
-
}
|
282
|
-
// proto.weekdaysShortRegex = weekdaysShortRegex;
|
283
|
-
// proto.weekdaysMinRegex = weekdaysMinRegex;
|
284
|
-
weekdaysShortRegex(isStrict) {
|
285
|
-
if (this._weekdaysParseExact) {
|
286
|
-
if (!hasOwnProp(this, '_weekdaysRegex')) {
|
287
|
-
this.computeWeekdaysParse();
|
288
|
-
}
|
289
|
-
if (isStrict) {
|
290
|
-
return this._weekdaysShortStrictRegex;
|
291
|
-
}
|
292
|
-
else {
|
293
|
-
return this._weekdaysShortRegex;
|
294
|
-
}
|
295
|
-
}
|
296
|
-
else {
|
297
|
-
if (!hasOwnProp(this, '_weekdaysShortRegex')) {
|
298
|
-
this._weekdaysShortRegex = matchWord;
|
299
|
-
}
|
300
|
-
return this._weekdaysShortStrictRegex && isStrict ?
|
301
|
-
this._weekdaysShortStrictRegex : this._weekdaysShortRegex;
|
302
|
-
}
|
303
|
-
}
|
304
|
-
weekdaysMinRegex(isStrict) {
|
305
|
-
if (this._weekdaysParseExact) {
|
306
|
-
if (!hasOwnProp(this, '_weekdaysRegex')) {
|
307
|
-
this.computeWeekdaysParse();
|
308
|
-
}
|
309
|
-
if (isStrict) {
|
310
|
-
return this._weekdaysMinStrictRegex;
|
311
|
-
}
|
312
|
-
else {
|
313
|
-
return this._weekdaysMinRegex;
|
314
|
-
}
|
315
|
-
}
|
316
|
-
else {
|
317
|
-
if (!hasOwnProp(this, '_weekdaysMinRegex')) {
|
318
|
-
this._weekdaysMinRegex = matchWord;
|
319
|
-
}
|
320
|
-
return this._weekdaysMinStrictRegex && isStrict ?
|
321
|
-
this._weekdaysMinStrictRegex : this._weekdaysMinRegex;
|
322
|
-
}
|
323
|
-
}
|
324
|
-
isPM(input) {
|
325
|
-
// IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays
|
326
|
-
// Using charAt should be more compatible.
|
327
|
-
return input.toLowerCase().charAt(0) === 'p';
|
328
|
-
}
|
329
|
-
meridiem(hours, minutes, isLower) {
|
330
|
-
if (hours > 11) {
|
331
|
-
return isLower ? 'pm' : 'PM';
|
332
|
-
}
|
333
|
-
return isLower ? 'am' : 'AM';
|
334
|
-
}
|
335
|
-
formatLongDate(key) {
|
336
|
-
this._longDateFormat = this._longDateFormat ? this._longDateFormat : defaultLongDateFormat;
|
337
|
-
const format = this._longDateFormat[key];
|
338
|
-
const formatUpper = this._longDateFormat[key.toUpperCase()];
|
339
|
-
if (format || !formatUpper) {
|
340
|
-
return format;
|
341
|
-
}
|
342
|
-
this._longDateFormat[key] = formatUpper.replace(/MMMM|MM|DD|dddd/g, (val) => {
|
343
|
-
return val.slice(1);
|
344
|
-
});
|
345
|
-
return this._longDateFormat[key];
|
346
|
-
}
|
347
|
-
handleMonthStrictParse(monthName, format, strict) {
|
348
|
-
const llc = monthName.toLocaleLowerCase();
|
349
|
-
let i;
|
350
|
-
let ii;
|
351
|
-
let mom;
|
352
|
-
if (!this._monthsParse) {
|
353
|
-
// this is not used
|
354
|
-
this._monthsParse = [];
|
355
|
-
this._longMonthsParse = [];
|
356
|
-
this._shortMonthsParse = [];
|
357
|
-
for (i = 0; i < 12; ++i) {
|
358
|
-
mom = new Date(2000, i);
|
359
|
-
this._shortMonthsParse[i] = this.monthsShort(mom, '').toLocaleLowerCase();
|
360
|
-
this._longMonthsParse[i] = this.months(mom, '').toLocaleLowerCase();
|
361
|
-
}
|
362
|
-
}
|
363
|
-
if (strict) {
|
364
|
-
if (format === 'MMM') {
|
365
|
-
ii = this._shortMonthsParse.indexOf(llc);
|
366
|
-
return ii !== -1 ? ii : null;
|
367
|
-
}
|
368
|
-
ii = this._longMonthsParse.indexOf(llc);
|
369
|
-
return ii !== -1 ? ii : null;
|
370
|
-
}
|
371
|
-
if (format === 'MMM') {
|
372
|
-
ii = this._shortMonthsParse.indexOf(llc);
|
373
|
-
if (ii !== -1) {
|
374
|
-
return ii;
|
375
|
-
}
|
376
|
-
ii = this._longMonthsParse.indexOf(llc);
|
377
|
-
return ii !== -1 ? ii : null;
|
378
|
-
}
|
379
|
-
ii = this._longMonthsParse.indexOf(llc);
|
380
|
-
if (ii !== -1) {
|
381
|
-
return ii;
|
382
|
-
}
|
383
|
-
ii = this._shortMonthsParse.indexOf(llc);
|
384
|
-
return ii !== -1 ? ii : null;
|
385
|
-
}
|
386
|
-
handleWeekStrictParse(weekdayName, format, strict) {
|
387
|
-
let ii;
|
388
|
-
const llc = weekdayName.toLocaleLowerCase();
|
389
|
-
if (!this._weekdaysParse) {
|
390
|
-
this._weekdaysParse = [];
|
391
|
-
this._shortWeekdaysParse = [];
|
392
|
-
this._minWeekdaysParse = [];
|
393
|
-
let i;
|
394
|
-
for (i = 0; i < 7; ++i) {
|
395
|
-
const date = setDayOfWeek(new Date(Date.UTC(2000, 1)), i, null, true);
|
396
|
-
this._minWeekdaysParse[i] = this.weekdaysMin(date).toLocaleLowerCase();
|
397
|
-
this._shortWeekdaysParse[i] = this.weekdaysShort(date).toLocaleLowerCase();
|
398
|
-
this._weekdaysParse[i] = this.weekdays(date, '').toLocaleLowerCase();
|
399
|
-
}
|
400
|
-
}
|
401
|
-
if (!isArray(this._weekdaysParse)
|
402
|
-
|| !isArray(this._shortWeekdaysParse)
|
403
|
-
|| !isArray(this._minWeekdaysParse)) {
|
404
|
-
return;
|
405
|
-
}
|
406
|
-
if (strict) {
|
407
|
-
if (format === 'dddd') {
|
408
|
-
ii = this._weekdaysParse.indexOf(llc);
|
409
|
-
return ii !== -1 ? ii : null;
|
410
|
-
}
|
411
|
-
else if (format === 'ddd') {
|
412
|
-
ii = this._shortWeekdaysParse.indexOf(llc);
|
413
|
-
return ii !== -1 ? ii : null;
|
414
|
-
}
|
415
|
-
else {
|
416
|
-
ii = this._minWeekdaysParse.indexOf(llc);
|
417
|
-
return ii !== -1 ? ii : null;
|
418
|
-
}
|
419
|
-
}
|
420
|
-
else {
|
421
|
-
if (format === 'dddd') {
|
422
|
-
ii = this._weekdaysParse.indexOf(llc);
|
423
|
-
if (ii !== -1) {
|
424
|
-
return ii;
|
425
|
-
}
|
426
|
-
ii = this._shortWeekdaysParse.indexOf(llc);
|
427
|
-
if (ii !== -1) {
|
428
|
-
return ii;
|
429
|
-
}
|
430
|
-
ii = this._minWeekdaysParse.indexOf(llc);
|
431
|
-
return ii !== -1 ? ii : null;
|
432
|
-
}
|
433
|
-
else if (format === 'ddd') {
|
434
|
-
ii = this._shortWeekdaysParse.indexOf(llc);
|
435
|
-
if (ii !== -1) {
|
436
|
-
return ii;
|
437
|
-
}
|
438
|
-
ii = this._weekdaysParse.indexOf(llc);
|
439
|
-
if (ii !== -1) {
|
440
|
-
return ii;
|
441
|
-
}
|
442
|
-
ii = this._minWeekdaysParse.indexOf(llc);
|
443
|
-
return ii !== -1 ? ii : null;
|
444
|
-
}
|
445
|
-
else {
|
446
|
-
ii = this._minWeekdaysParse.indexOf(llc);
|
447
|
-
if (ii !== -1) {
|
448
|
-
return ii;
|
449
|
-
}
|
450
|
-
ii = this._weekdaysParse.indexOf(llc);
|
451
|
-
if (ii !== -1) {
|
452
|
-
return ii;
|
453
|
-
}
|
454
|
-
ii = this._shortWeekdaysParse.indexOf(llc);
|
455
|
-
return ii !== -1 ? ii : null;
|
456
|
-
}
|
457
|
-
}
|
458
|
-
}
|
459
|
-
computeMonthsParse() {
|
460
|
-
const shortPieces = [];
|
461
|
-
const longPieces = [];
|
462
|
-
const mixedPieces = [];
|
463
|
-
let date;
|
464
|
-
let i;
|
465
|
-
for (i = 0; i < 12; i++) {
|
466
|
-
// make the regex if we don't have it already
|
467
|
-
date = new Date(2000, i);
|
468
|
-
shortPieces.push(this.monthsShort(date, ''));
|
469
|
-
longPieces.push(this.months(date, ''));
|
470
|
-
mixedPieces.push(this.months(date, ''));
|
471
|
-
mixedPieces.push(this.monthsShort(date, ''));
|
472
|
-
}
|
473
|
-
// Sorting makes sure if one month (or abbr) is a prefix of another it
|
474
|
-
// will match the longer piece.
|
475
|
-
shortPieces.sort(cmpLenRev);
|
476
|
-
longPieces.sort(cmpLenRev);
|
477
|
-
mixedPieces.sort(cmpLenRev);
|
478
|
-
for (i = 0; i < 12; i++) {
|
479
|
-
shortPieces[i] = regexEscape(shortPieces[i]);
|
480
|
-
longPieces[i] = regexEscape(longPieces[i]);
|
481
|
-
}
|
482
|
-
for (i = 0; i < 24; i++) {
|
483
|
-
mixedPieces[i] = regexEscape(mixedPieces[i]);
|
484
|
-
}
|
485
|
-
this._monthsRegex = new RegExp(`^(${mixedPieces.join('|')})`, 'i');
|
486
|
-
this._monthsShortRegex = this._monthsRegex;
|
487
|
-
this._monthsStrictRegex = new RegExp(`^(${longPieces.join('|')})`, 'i');
|
488
|
-
this._monthsShortStrictRegex = new RegExp(`^(${shortPieces.join('|')})`, 'i');
|
489
|
-
}
|
490
|
-
computeWeekdaysParse() {
|
491
|
-
const minPieces = [];
|
492
|
-
const shortPieces = [];
|
493
|
-
const longPieces = [];
|
494
|
-
const mixedPieces = [];
|
495
|
-
let i;
|
496
|
-
for (i = 0; i < 7; i++) {
|
497
|
-
// make the regex if we don't have it already
|
498
|
-
// let mom = createUTC([2000, 1]).day(i);
|
499
|
-
const date = setDayOfWeek(new Date(Date.UTC(2000, 1)), i, null, true);
|
500
|
-
const minp = this.weekdaysMin(date);
|
501
|
-
const shortp = this.weekdaysShort(date);
|
502
|
-
const longp = this.weekdays(date);
|
503
|
-
minPieces.push(minp);
|
504
|
-
shortPieces.push(shortp);
|
505
|
-
longPieces.push(longp);
|
506
|
-
mixedPieces.push(minp);
|
507
|
-
mixedPieces.push(shortp);
|
508
|
-
mixedPieces.push(longp);
|
509
|
-
}
|
510
|
-
// Sorting makes sure if one weekday (or abbr) is a prefix of another it
|
511
|
-
// will match the longer piece.
|
512
|
-
minPieces.sort(cmpLenRev);
|
513
|
-
shortPieces.sort(cmpLenRev);
|
514
|
-
longPieces.sort(cmpLenRev);
|
515
|
-
mixedPieces.sort(cmpLenRev);
|
516
|
-
for (i = 0; i < 7; i++) {
|
517
|
-
shortPieces[i] = regexEscape(shortPieces[i]);
|
518
|
-
longPieces[i] = regexEscape(longPieces[i]);
|
519
|
-
mixedPieces[i] = regexEscape(mixedPieces[i]);
|
520
|
-
}
|
521
|
-
this._weekdaysRegex = new RegExp(`^(${mixedPieces.join('|')})`, 'i');
|
522
|
-
this._weekdaysShortRegex = this._weekdaysRegex;
|
523
|
-
this._weekdaysMinRegex = this._weekdaysRegex;
|
524
|
-
this._weekdaysStrictRegex = new RegExp(`^(${longPieces.join('|')})`, 'i');
|
525
|
-
this._weekdaysShortStrictRegex = new RegExp(`^(${shortPieces.join('|')})`, 'i');
|
526
|
-
this._weekdaysMinStrictRegex = new RegExp(`^(${minPieces.join('|')})`, 'i');
|
527
|
-
}
|
528
|
-
}
|
529
|
-
function cmpLenRev(a, b) {
|
530
|
-
return b.length - a.length;
|
531
|
-
}
|
532
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWxlLmNsYXNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2Nocm9ub3MvbG9jYWxlL2xvY2FsZS5jbGFzcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDdkUsT0FBTyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDdEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFVcEQsTUFBTSxnQkFBZ0IsR0FBRywrQkFBK0IsQ0FBQztBQUN6RCxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyx1RkFBdUYsQ0FBQyxLQUFLLENBQzlILEdBQUcsQ0FDSixDQUFDO0FBQ0YsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQUcsaURBQWlELENBQUMsS0FBSyxDQUM3RixHQUFHLENBQ0osQ0FBQztBQUNGLE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLDBEQUEwRCxDQUFDLEtBQUssQ0FDbkcsR0FBRyxDQUNKLENBQUM7QUFDRixNQUFNLENBQUMsTUFBTSwwQkFBMEIsR0FBRyw2QkFBNkIsQ0FBQyxLQUFLLENBQzNFLEdBQUcsQ0FDSixDQUFDO0FBQ0YsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQUcsc0JBQXNCLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzFFLE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFnQztJQUNoRSxHQUFHLEVBQUUsV0FBVztJQUNoQixFQUFFLEVBQUUsUUFBUTtJQUNaLENBQUMsRUFBRSxZQUFZO0lBQ2YsRUFBRSxFQUFF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QUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDM0MsV0FBVyxDQUFDLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMvQyxDQUFDO1FBRUQsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLE1BQU0sQ0FBQyxLQUFLLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNyRSxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQztRQUMvQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQztRQUU3QyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxNQUFNLENBQUMsS0FBSyxVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDMUUsSUFBSSxDQUFDLHlCQUF5QixHQUFHLElBQUksTUFBTSxDQUFDLEtBQUssV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ2hGLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxJQUFJLE1BQU0sQ0FBQyxLQUFLLFNBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUM5RSxDQUFDO0NBQ0Y7QUFFRCxTQUFTLFNBQVMsQ0FBQyxDQUFTLEVBQUUsQ0FBUztJQUNyQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQztBQUM3QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgd2Vla09mWWVhciB9IGZyb20gJy4uL3VuaXRzL3dlZWstY2FsZW5kYXItdXRpbHMnO1xuaW1wb3J0IHsgaGFzT3duUHJvcCwgaXNBcnJheSwgaXNGdW5jdGlvbiB9IGZyb20gJy4uL3V0aWxzL3R5cGUtY2hlY2tzJztcbmltcG9ydCB7IGdldERheSwgZ2V0TW9udGgsIGdldEZ1bGxZZWFyIH0gZnJvbSAnLi4vdXRpbHMvZGF0ZS1nZXR0ZXJzJztcbmltcG9ydCB7IG1hdGNoV29yZCwgcmVnZXhFc2NhcGUgfSBmcm9tICcuLi9wYXJzZS9yZWdleCc7XG5pbXBvcnQgeyBzZXREYXlPZldlZWsgfSBmcm9tICcuLi91bml0cy9kYXktb2Ytd2Vlayc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTG9jYWxlT3B0aW9uc0Zvcm1hdCB7XG4gIGZvcm1hdDogc3RyaW5nW107XG4gIHN0YW5kYWxvbmU6IHN0cmluZ1tdO1xuICBpc0Zvcm1hdD86IFJlZ0V4cDtcbn1cblxuZXhwb3J0IHR5cGUgTG9jYWxlT3B0aW9ucyA9IHN0cmluZ1tdIHwgTG9jYWxlT3B0aW9uc0Zvcm1hdDtcblxuY29uc3QgTU9OVEhTX0lOX0ZPUk1BVCA9IC9EW29EXT8oXFxbW15cXFtcXF1dKlxcXXxcXHMpK01NTU0/LztcbmV4cG9ydCBjb25zdCBkZWZhdWx0TG9jYWxlTW9udGhzID0gJ0phbnVhcnlfRmVicnVhcnlfTWFyY2hfQXByaWxfTWF5X0p1bmVfSnVseV9BdWd1c3RfU2VwdGVtYmVyX09jdG9iZXJfTm92ZW1iZXJfRGVjZW1iZXInLnNwbGl0KFxuICAnXydcbik7XG5leHBvcnQgY29uc3QgZGVmYXVsdExvY2FsZU1vbnRoc1Nob3J0ID0gJ0phbl9GZWJfTWFyX0Fwcl9NYXlfSnVuX0p1bF9BdWdfU2VwX09jdF9Ob3ZfRGVjJy5zcGxpdChcbiAgJ18nXG4pO1xuZXhwb3J0IGNvbnN0IGRlZmF1bHRMb2NhbGVXZWVrZGF5cyA9ICdTdW5kYXlfTW9uZGF5X1R1ZXNkYXlfV2VkbmVzZGF5X1RodXJzZGF5X0ZyaWRheV9TYXR1cmRheScuc3BsaXQoXG4gICdfJ1xuKTtcbmV4cG9ydCBjb25zdCBkZWZhdWx0TG9jYWxlV2Vla2RheXNTaG9ydCA9ICdTdW5fTW9uX1R1ZV9XZWRfVGh1X0ZyaV9TYXQnLnNwbGl0KFxuICAnXydcbik7XG5leHBvcnQgY29uc3QgZGVmYXVsdExvY2FsZVdlZWtkYXlzTWluID0gJ1N1X01vX1R1X1dlX1RoX0ZyX1NhJy5zcGxpdCgnXycpO1xuZXhwb3J0IGNvbnN0IGRlZmF1bHRMb25nRGF0ZUZvcm1hdDogeyBbaW5kZXg6IHN0cmluZ106IHN0cmluZyB9ID0ge1xuICBMVFM6ICdoOm1tOnNzIEEnLFxuICBMVDogJ2g6bW0gQScsXG4gIEw6ICdNTS9ERC9ZWVlZJyxcbiAgTEw6ICdNTU1NIEQsIFlZWVknLFxuICBMTEw6ICdNTU1NIEQsIFlZWVkgaDptbSBBJyxcbiAgTExMTDogJ2RkZGQsIE1NTU0gRCwgWVlZWSBoOm1tIEEnXG59O1xuXG5leHBvcnQgY29uc3QgZGVmYXVsdE9yZGluYWwgPSAnJWQnO1xuZXhwb3J0IGNvbnN0IGRlZmF1bHREYXlPZk1vbnRoT3JkaW5hbFBhcnNlID0gL1xcZHsxLDJ9LztcblxuY29uc3QgZGVmYXVsdE1vbnRoc1Nob3J0UmVnZXggPSBtYXRjaFdvcmQ7XG5jb25zdCBkZWZhdWx0TW9udGhzUmVnZXggPSBtYXRjaFdvcmQ7XG5cbmV4cG9ydCB0eXBlIE9yZGluYWxEYXRlRm4gPSAobnVtOiBudW1iZXIsIHRva2VuPzogc3RyaW5nKSA9PiBzdHJpbmc7XG5leHBvcnQgdHlwZSBQbHVyYWxpemVEYXRlRm4gPSAobnVtOiBudW1iZXIsIHdpdGhvdXRTdWZmaXg6IGJvb2xlYW4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5Pzogc3RyaW5nLCBpc0Z1dHVyZT86IGJvb2xlYW4pID0+IHN0cmluZztcblxuZXhwb3J0IGludGVyZmFjZSBMb2NhbGVEYXRhIHtcbiAgYWJicj86IHN0cmluZztcbiAgcGFyZW50TG9jYWxlPzogc3RyaW5nO1xuXG4gIG1vbnRocz86IExvY2FsZU9wdGlvbnMgfCAoKGRhdGU6IERhdGUsIGZvcm1hdDogc3RyaW5nLCBpc1VUQz86IGJvb2xlYW4pID0+IHN0cmluZyB8IHN0cmluZ1tdKTtcbiAgbW9udGhzU2hvcnQ/OiBMb2NhbGVPcHRpb25zIHwgKChkYXRlOiBEYXRlLCBmb3JtYXQ6IHN0cmluZywgaXNVVEM/OiBib29sZWFuKSA9PiBzdHJpbmcgfCBzdHJpbmdbXSk7XG4gIG1vbnRoc1BhcnNlRXhhY3Q/OiBib29sZWFuO1xuXG4gIHdlZWtkYXlzPzogTG9jYWxlT3B0aW9ucyB8ICgoZGF0ZTogRGF0ZSwgZm9ybWF0OiBzdHJpbmcsIGlzVVRDPzogYm9vbGVhbikgPT4gc3RyaW5nIHwgc3RyaW5nW10pO1xuICB3ZWVrZGF5c1Nob3J0Pzogc3RyaW5nW10gfCAoKGRhdGU6IERhdGUsIGZvcm1hdDogc3RyaW5nLCBpc1VUQz86IGJvb2xlYW4pID0+IHN0cmluZyB8IHN0cmluZ1tdKTtcbiAgd2Vla2RheXNNaW4/OiBzdHJpbmdbXSB8ICgoZGF0ZTogRGF0ZSwgZm9ybWF0OiBzdHJpbmcsIGlzVVRDPzogYm9vbGVhbikgPT4gc3RyaW5nIHwgc3RyaW5nW10pO1xuICB3ZWVrZGF5c1BhcnNlRXhhY3Q/OiBib29sZWFuO1xuXG4gIGxvbmdEYXRlRm9ybWF0PzogeyBbaW5kZXg6IHN0cmluZ106IHN0cmluZyB9O1xuICBjYWxlbmRhcj86IHtcbiAgICBba2V5OiBzdHJpbmddOiAoc3RyaW5nXG4gICAgICB8ICgoZGF0ZTogRGF0ZSwgbm93PzogRGF0ZSkgPT4gc3RyaW5nKVxuICAgICAgfCAoKGRheU9mV2VlazogbnVtYmVyLCBpc05leHRXZWVrOiBib29sZWFuKSA9PiBzdHJpbmcpKVxuICB9O1xuICByZWxhdGl2ZVRpbWU/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB8IFBsdXJhbGl6ZURhdGVGbiB9O1xuICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlPzogUmVnRXhwO1xuICBvcmRpbmFsPzogc3RyaW5nIHwgT3JkaW5hbERhdGVGbjtcblxuICB3ZWVrPzogeyBkb3c/OiBudW1iZXI7IGRveT86IG51bWJlciB9O1xuXG4gIGludmFsaWREYXRlPzogc3RyaW5nO1xuXG4gIG1vbnRoc1JlZ2V4PzogUmVnRXhwO1xuICBtb250aHNQYXJzZT86IFJlZ0V4cFtdO1xuICBtb250aHNTaG9ydFJlZ2V4PzogUmVnRXhwO1xuICBtb250aHNTdHJpY3RSZWdleD86IFJlZ0V4cDtcbiAgbW9udGhzU2hvcnRTdHJpY3RSZWdleD86IFJlZ0V4cDtcbiAgbG9uZ01vbnRoc1BhcnNlPzogUmVnRXhwW107XG4gIHNob3J0TW9udGhzUGFyc2U/OiBSZWdFeHBbXTtcblxuICBtZXJpZGllbVBhcnNlPzogUmVnRXhwO1xuXG4gIG1lcmlkaWVtSG91cj8oaG91cjogbnVtYmVyLCBtZXJpZGllbTogc3RyaW5nKTogbnVtYmVyO1xuXG4gIHByZXBhcnNlPyhzdHI6IHN0cmluZywgZm9ybWF0Pzogc3RyaW5nIHwgc3RyaW5nW10pOiBzdHJpbmc7XG5cbiAgcG9zdGZvcm1hdD8oc3RyOiBzdHJpbmcgfCBudW1iZXIpOiBzdHJpbmc7XG5cbiAgbWVyaWRpZW0/KGhvdXI6IG51bWJlciwgbWludXRlPzogbnVtYmVyLCBpc0xvd2VyPzogYm9vbGVhbik6IHN0cmluZztcblxuICBpc1BNPyhpbnB1dDogc3RyaW5nKTogYm9vbGVhbjtcblxuICBnZXRGdWxsWWVhcj8oZGF0ZTogRGF0ZSwgaXNVVEM6IGJvb2xlYW4pOiBudW1iZXI7XG59XG5cbmV4cG9ydCBjbGFzcyBMb2NhbGUge1xuICBwYXJlbnRMb2NhbGU/OiBMb2NhbGU7XG4gIF9hYmJyOiBzdHJpbmc7XG4gIF9jb25maWc6IExvY2FsZURhdGE7XG4gIG1lcmlkaWVtSG91cjogKGhvdXI6IG51bWJlciwgbWVyaWRpZW06IHN0cmluZykgPT4gbnVtYmVyO1xuXG4gIF9pbnZhbGlkRGF0ZTogc3RyaW5nO1xuICBfd2VlazogeyBkb3c6IG51bWJlcjsgZG95OiBudW1iZXIgfTtcbiAgX2RheU9mTW9udGhPcmRpbmFsUGFyc2U6IFJlZ0V4cDtcbiAgX29yZGluYWxQYXJzZTogUmVnRXhwO1xuICBfbWVyaWRpZW1QYXJzZTogUmVnRXhwO1xuXG4gIHByaXZhdGUgX2NhbGVuZGFyOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xuICBwcml2YXRlIF9yZWxhdGl2ZVRpbWU6IHsgZnV0dXJlOiBzdHJpbmc7IHBhc3Q6IHN0cmluZyB9O1xuICBwcml2YXRlIF9tb250aHM6IExvY2FsZU9wdGlvbnM7XG4gIHByaXZhdGUgX21vbnRoc1Nob3J0OiBMb2NhbGVPcHRpb25zO1xuICBwcml2YXRlIF9tb250aHNSZWdleDogUmVnRXhwO1xuICBwcml2YXRlIF9tb250aHNTaG9ydFJlZ2V4OiBSZWdFeHA7XG4gIHByaXZhdGUgX21vbnRoc1N0cmljdFJlZ2V4OiBSZWdFeHA7XG4gIHByaXZhdGUgX21vbnRoc1Nob3J0U3RyaWN0UmVnZXg6IFJlZ0V4cDtcbiAgcHJpdmF0ZSBfbW9udGhzUGFyc2U6IFJlZ0V4cFtdO1xuICBwcml2YXRlIF9sb25nTW9udGhzUGFyc2U6IHN0cmluZ1tdIHwgUmVnRXhwW107XG4gIHByaXZhdGUgX3Nob3J0TW9udGhzUGFyc2U6IHN0cmluZ1tdIHwgUmVnRXhwW107XG4gIHByaXZhdGUgX21vbnRoc1BhcnNlRXhhY3Q6IFJlZ0V4cDtcbiAgcHJpdmF0ZSBfd2Vla2RheXNQYXJzZUV4YWN0OiBib29sZWFuO1xuICBwcml2YXRlIF93ZWVrZGF5c1JlZ2V4OiBSZWdFeHA7XG4gIHByaXZhdGUgX3dlZWtkYXlzU2hvcnRSZWdleDogUmVnRXhwO1xuICBwcml2YXRlIF93ZWVrZGF5c01pblJlZ2V4OiBSZWdFeHA7XG5cbiAgcHJpdmF0ZSBfd2Vla2RheXNTdHJpY3RSZWdleDogUmVnRXhwO1xuICBwcml2YXRlIF93ZWVrZGF5c1Nob3J0U3RyaWN0UmVnZXg6IFJlZ0V4cDtcbiAgcHJpdmF0ZSBfd2Vla2RheXNNaW5TdHJpY3RSZWdleDogUmVnRXhwO1xuXG4gIHByaXZhdGUgX3dlZWtkYXlzOiBMb2NhbGVPcHRpb25zO1xuICBwcml2YXRlIF93ZWVrZGF5c1Nob3J0OiBzdHJpbmdbXTtcbiAgcHJpdmF0ZSBfd2Vla2RheXNNaW46IHN0cmluZ1tdO1xuICBwcml2YXRlIF93ZWVrZGF5c1BhcnNlOiBzdHJpbmdbXSB8IFJlZ0V4cFtdO1xuICBwcml2YXRlIF9taW5XZWVrZGF5c1BhcnNlOiBzdHJpbmdbXSB8IFJlZ0V4cFtdO1xuICBwcml2YXRlIF9zaG9ydFdlZWtkYXlzUGFyc2U6IHN0cmluZ1tdIHwgUmVnRXhwW107XG4gIHByaXZhdGUgX2Z1bGxXZWVrZGF5c1BhcnNlOiBSZWdFeHBbXTtcbiAgcHJpdmF0ZSBfbG9uZ0RhdGVGb3JtYXQ6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG5cbiAgcHJpdmF0ZSBfb3JkaW5hbDogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKGNvbmZpZzogTG9jYWxlRGF0YSkge1xuICAgIGlmIChjb25maWcpIHtcbiAgICAgIHRoaXMuc2V0KGNvbmZpZyk7XG4gICAgfVxuICB9XG5cbiAgc2V0KGNvbmZpZzogTG9jYWxlRGF0YSk6IHZvaWQge1xuICAgIGxldCBjb25mS2V5O1xuICAgIGZvciAoY29uZktleSBpbiBjb25maWcpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbiAgICAgIGlmICghY29uZmlnLmhhc093blByb3BlcnR5KGNvbmZLZXkpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY29uc3QgcHJvcCA9IGNvbmZpZ1tjb25mS2V5IGFzIGtleW9mIExvY2FsZURhdGFdO1xuICAgICAgY29uc3Qga2V5ID0gKGlzRnVuY3Rpb24ocHJvcCkgPyBjb25mS2V5IDogYF8ke2NvbmZLZXl9YCkgYXMga2V5b2YgTG9jYWxlO1xuXG4gICAgICB0aGlzW2tleV0gPSBwcm9wIGFzIGFueTtcbiAgICB9XG5cbiAgICB0aGlzLl9jb25maWcgPSBjb25maWc7XG4gIH1cblxuICBjYWxlbmRhcihrZXk6IHN0cmluZywgZGF0ZTogRGF0ZSwgbm93OiBEYXRlKTogc3RyaW5nIHtcbiAgICBjb25zdCBvdXRwdXQgPSB0aGlzLl9jYWxlbmRhcltrZXldIHx8IHRoaXMuX2NhbGVuZGFyW1wic2FtZUVsc2VcIl07XG5cbiAgICByZXR1cm4gaXNGdW5jdGlvbihvdXRwdXQpID8gb3V0cHV0LmNhbGwobnVsbCwgZGF0ZSwgbm93KSA6IG91dHB1dDtcbiAgfVxuXG4gIGxvbmdEYXRlRm9ybWF0KGtleTogc3RyaW5nKSB7XG4gICAgY29uc3QgZm9ybWF0ID0gdGhpcy5fbG9uZ0RhdGVGb3JtYXRba2V5XTtcbiAgICBjb25zdCBmb3JtYXRVcHBlciA9IHRoaXMuX2xvbmdEYXRlRm9ybWF0W2tleS50b1VwcGVyQ2FzZSgpXTtcblxuICAgIGlmIChmb3JtYXQgfHwgIWZvcm1hdFVwcGVyKSB7XG4gICAgICByZXR1cm4gZm9ybWF0O1xuICAgIH1cblxuICAgIHRoaXMuX2xvbmdEYXRlRm9ybWF0W2tleV0gPSBmb3JtYXRVcHBlci5yZXBsYWNlKC9NTU1NfE1NfEREfGRkZGQvZywgZnVuY3Rpb24gKHZhbDogc3RyaW5nKSB7XG4gICAgICByZXR1cm4gdmFsLnNsaWNlKDEpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRoaXMuX2xvbmdEYXRlRm9ybWF0W2tleV07XG4gIH1cblxuICBnZXQgaW52YWxpZERhdGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5faW52YWxpZERhdGU7XG4gIH1cblxuICBzZXQgaW52YWxpZERhdGUodmFsOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9pbnZhbGlkRGF0ZSA9IHZhbDtcbiAgfVxuXG4gIG9yZGluYWwobnVtOiBudW1iZXIsIHRva2VuPzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fb3JkaW5hbC5yZXBsYWNlKCclZCcsIG51bS50b1N0cmluZygxMCkpO1xuICB9XG5cbiAgcHJlcGFyc2Uoc3RyOiBzdHJpbmcsIGZvcm1hdD86IHN0cmluZyB8IHN0cmluZ1tdKSB7XG4gICAgcmV0dXJuIHN0cjtcbiAgfVxuXG5cbiAgZ2V0RnVsbFllYXIoZGF0ZTogRGF0ZSwgaXNVVEMgPSBmYWxzZSk6IG51bWJlciB7XG4gICAgcmV0dXJuIGdldEZ1bGxZZWFyKGRhdGUsIGlzVVRDKTtcbiAgfVxuXG4gIHBvc3Rmb3JtYXQoc3RyOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gc3RyO1xuICB9XG5cbiAgcmVsYXRpdmVUaW1lKG51bTogbnVtYmVyLCB3aXRob3V0U3VmZml4OiBib29sZWFuLCBzdHI6ICdmdXR1cmUnIHwgJ3Bhc3QnLCBpc0Z1dHVyZTogYm9vbGVhbik6IHN0cmluZyB7XG4gICAgY29uc3Qgb3V0cHV0ID0gdGhpcy5fcmVsYXRpdmVUaW1lW3N0cl07XG5cbiAgICByZXR1cm4gKGlzRnVuY3Rpb24ob3V0cHV0KSkgP1xuICAgICAgb3V0cHV0KG51bSwgd2l0aG91dFN1ZmZpeCwgc3RyLCBpc0Z1dHVyZSkgOlxuICAgICAgb3V0cHV0LnJlcGxhY2UoLyVkL2ksIG51bS50b1N0cmluZygxMCkpO1xuICB9XG5cbiAgcGFzdEZ1dHVyZShkaWZmOiBudW1iZXIsIG91dHB1dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBmb3JtYXQgPSB0aGlzLl9yZWxhdGl2ZVRpbWVbZGlmZiA+IDAgPyAnZnV0dXJlJyA6ICdwYXN0J107XG5cbiAgICByZXR1cm4gaXNGdW5jdGlvbihmb3JtYXQpID8gZm9ybWF0KG91dHB1dCkgOiBmb3JtYXQucmVwbGFjZSgvJXMvaSwgb3V0cHV0KTtcbiAgfVxuXG4gIC8qKiBNb250aHMgKi9cbiAgbW9udGhzKCk6IHN0cmluZ1tdO1xuICBtb250aHMoZGF0ZTogRGF0ZSwgZm9ybWF0Pzogc3RyaW5nLCBpc1VUQz86IGJvb2xlYW4pOiBzdHJpbmc7XG4gIG1vbnRocyhkYXRlPzogRGF0ZSwgZm9ybWF0Pzogc3RyaW5nLCBpc1VUQyA9IGZhbHNlKTogc3RyaW5nIHwgc3RyaW5nW10ge1xuICAgIGlmICghZGF0ZSkge1xuICAgICAgcmV0dXJuIGlzQXJyYXk8c3RyaW5nPih0aGlzLl9tb250aHMpXG4gICAgICAgID8gdGhpcy5fbW9udGhzXG4gICAgICAgIDogdGhpcy5fbW9udGhzLnN0YW5kYWxvbmU7XG4gICAgfVxuXG4gICAgaWYgKGlzQXJyYXk8c3RyaW5nPih0aGlzLl9tb250aHMpKSB7XG4gICAgICByZXR1cm4gdGhpcy5fbW9udGhzW2dldE1vbnRoKGRhdGUsIGlzVVRDKV07XG4gICAgfVxuXG4gICAgY29uc3Qga2V5ID0gKHRoaXMuX21vbnRocy5pc0Zvcm1hdCB8fCBNT05USFNfSU5fRk9STUFUKS50ZXN0KGZvcm1hdClcbiAgICAgID8gJ2Zvcm1hdCdcbiAgICAgIDogJ3N0YW5kYWxvbmUnO1xuXG4gICAgcmV0dXJuIHRoaXMuX21vbnRoc1trZXldW2dldE1vbnRoKGRhdGUsIGlzVVRDKV07XG4gIH1cblxuICBtb250aHNTaG9ydCgpOiBzdHJpbmdbXTtcbiAgbW9udGhzU2hvcnQoZGF0ZT86IERhdGUsIGZvcm1hdD86IHN0cmluZywgaXNVVEM/OiBib29sZWFuKTogc3RyaW5nO1xuICBtb250aHNTaG9ydChkYXRlPzogRGF0ZSwgZm9ybWF0Pzogc3RyaW5nLCBpc1VUQyA9IGZhbHNlKTogc3RyaW5nIHwgc3RyaW5nW10ge1xuICAgIGlmICghZGF0ZSkge1xuICAgICAgcmV0dXJuIGlzQXJyYXk8c3RyaW5nPih0aGlzLl9tb250aHNTaG9ydClcbiAgICAgICAgPyB0aGlzLl9tb250aHNTaG9ydFxuICAgICAgICA6IHRoaXMuX21vbnRoc1Nob3J0LnN0YW5kYWxvbmU7XG4gICAgfVxuXG4gICAgaWYgKGlzQXJyYXk8c3RyaW5nPih0aGlzLl9tb250aHNTaG9ydCkpIHtcbiAgICAgIHJldHVybiB0aGlzLl9tb250aHNTaG9ydFtnZXRNb250aChkYXRlLCBpc1VUQyldO1xuICAgIH1cbiAgICBjb25zdCBrZXkgPSBNT05USFNfSU5fRk9STUFULnRlc3QoZm9ybWF0KSA/ICdmb3JtYXQnIDogJ3N0YW5kYWxvbmUnO1xuXG4gICAgcmV0dXJuIHRoaXMuX21vbnRoc1Nob3J0W2tleV1bZ2V0TW9udGgoZGF0ZSwgaXNVVEMpXTtcbiAgfVxuXG4gIG1vbnRoc1BhcnNlKG1vbnRoTmFtZTogc3RyaW5nLCBmb3JtYXQ/OiBzdHJpbmcsIHN0cmljdD86IGJvb2xlYW4pOiBudW1iZXIge1xuICAgIGxldCBkYXRlO1xuICAgIGxldCByZWdleDtcblxuICAgIGlmICh0aGlzLl9tb250aHNQYXJzZUV4YWN0KSB7XG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVNb250aFN0cmljdFBhcnNlKG1vbnRoTmFtZSwgZm9ybWF0LCBzdHJpY3QpO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5fbW9udGhzUGFyc2UpIHtcbiAgICAgIHRoaXMuX21vbnRoc1BhcnNlID0gW107XG4gICAgICB0aGlzLl9sb25nTW9udGhzUGFyc2UgPSBbXTtcbiAgICAgIHRoaXMuX3Nob3J0TW9udGhzUGFyc2UgPSBbXTtcbiAgICB9XG5cbiAgICAvLyBUT0RPOiBhZGQgc29ydGluZ1xuICAgIC8vIFNvcnRpbmcgbWFrZXMgc3VyZSBpZiBvbmUgbW9udGggKG9yIGFiYnIpIGlzIGEgcHJlZml4IG9mIGFub3RoZXJcbiAgICAvLyBzZWUgc29ydGluZyBpbiBjb21wdXRlTW9udGhzUGFyc2VcbiAgICBsZXQgaTtcbiAgICBmb3IgKGkgPSAwOyBpIDwgMTI7IGkrKykge1xuICAgICAgLy8gbWFrZSB0aGUgcmVnZXggaWYgd2UgZG9uJ3QgaGF2ZSBpdCBhbHJlYWR5XG4gICAgICBkYXRlID0gbmV3IERhdGUoRGF0ZS5VVEMoMjAwMCwgaSkpO1xuICAgICAgaWYgKHN0cmljdCAmJiAhdGhpcy5fbG9uZ01vbnRoc1BhcnNlW2ldKSB7XG4gICAgICAgIGNvbnN0IF9tb250aHMgPSB0aGlzLm1vbnRocyhkYXRlLCAnJywgdHJ1ZSkucmVwbGFjZSgnLicsICcnKTtcbiAgICAgICAgY29uc3QgX3Nob3J0TW9udGhzID0gdGhpcy5tb250aHNTaG9ydChkYXRlLCAnJywgdHJ1ZSkucmVwbGFjZSgnLicsICcnKTtcbiAgICAgICAgdGhpcy5fbG9uZ01vbnRoc1BhcnNlW2ldID0gbmV3IFJlZ0V4cChgXiR7X21vbnRoc30kYCwgJ2knKTtcbiAgICAgICAgdGhpcy5fc2hvcnRNb250aHNQYXJzZVtpXSA9IG5ldyBSZWdFeHAoYF4ke19zaG9ydE1vbnRoc30kYCwgJ2knKTtcbiAgICAgIH1cbiAgICAgIGlmICghc3RyaWN0ICYmICF0aGlzLl9tb250aHNQYXJzZVtpXSkge1xuICAgICAgICByZWdleCA9IGBeJHt0aGlzLm1vbnRocyhkYXRlLCAnJywgdHJ1ZSl9fF4ke3RoaXMubW9udGhzU2hvcnQoZGF0ZSwgJycsIHRydWUpfWA7XG4gICAgICAgIHRoaXMuX21vbnRoc1BhcnNlW2ldID0gbmV3IFJlZ0V4cChyZWdleC5yZXBsYWNlKCcuJywgJycpLCAnaScpO1xuICAgICAgfVxuICAgICAgLy8gdGVzdGluZyB0aGUgcmVnZXhcbiAgICAgIGlmIChzdHJpY3QgJiYgZm9ybWF0ID09PSAnTU1NTScgJiYgKHRoaXMuX2xvbmdNb250aHNQYXJzZVtpXSBhcyBSZWdFeHApLnRlc3QobW9udGhOYW1lKSkge1xuICAgICAgICByZXR1cm4gaTtcbiAgICAgIH1cblxuICAgICAgaWYgKHN0cmljdCAmJiBmb3JtYXQgPT09ICdNTU0nICYmICh0aGlzLl9zaG9ydE1vbnRoc1BhcnNlW2ldIGFzIFJlZ0V4cCkudGVzdChtb250aE5hbWUpKSB7XG4gICAgICAgIHJldHVybiBpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXN0cmljdCAmJiB0aGlzLl9tb250aHNQYXJzZVtpXS50ZXN0KG1vbnRoTmFtZSkpIHtcbiAgICAgICAgcmV0dXJuIGk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbW9udGhzUmVnZXgoaXNTdHJpY3Q6IGJvb2xlYW4pOiBSZWdFeHAge1xuICAgIGlmICh0aGlzLl9tb250aHNQYXJzZUV4YWN0KSB7XG4gICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ19tb250aHNSZWdleCcpKSB7XG4gICAgICAgIHRoaXMuY29tcHV0ZU1vbnRoc1BhcnNlKCk7XG4gICAgICB9XG4gICAgICBpZiAoaXNTdHJpY3QpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21vbnRoc1N0cmljdFJlZ2V4O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5fbW9udGhzUmVnZXg7XG4gICAgfVxuXG4gICAgaWYgKCFoYXNPd25Qcm9wKHRoaXMsICdfbW9udGhzUmVnZXgnKSkge1xuICAgICAgdGhpcy5fbW9udGhzUmVnZXggPSBkZWZhdWx0TW9udGhzUmVnZXg7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX21vbnRoc1N0cmljdFJlZ2V4ICYmIGlzU3RyaWN0ID9cbiAgICAgIHRoaXMuX21vbnRoc1N0cmljdFJlZ2V4IDogdGhpcy5fbW9udGhzUmVnZXg7XG4gIH1cblxuICBtb250aHNTaG9ydFJlZ2V4KGlzU3RyaWN0OiBib29sZWFuKTogUmVnRXhwIHtcbiAgICBpZiAodGhpcy5fbW9udGhzUGFyc2VFeGFjdCkge1xuICAgICAgaWYgKCFoYXNPd25Qcm9wKHRoaXMsICdfbW9udGhzUmVnZXgnKSkge1xuICAgICAgICB0aGlzLmNvbXB1dGVNb250aHNQYXJzZSgpO1xuICAgICAgfVxuICAgICAgaWYgKGlzU3RyaWN0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9tb250aHNTaG9ydFN0cmljdFJlZ2V4O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5fbW9udGhzU2hvcnRSZWdleDtcbiAgICB9XG4gICAgaWYgKCFoYXNPd25Qcm9wKHRoaXMsICdfbW9udGhzU2hvcnRSZWdleCcpKSB7XG4gICAgICB0aGlzLl9tb250aHNTaG9ydFJlZ2V4ID0gZGVmYXVsdE1vbnRoc1Nob3J0UmVnZXg7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX21vbnRoc1Nob3J0U3RyaWN0UmVnZXggJiYgaXNTdHJpY3QgP1xuICAgICAgdGhpcy5fbW9udGhzU2hvcnRTdHJpY3RSZWdleCA6IHRoaXMuX21vbnRoc1Nob3J0UmVnZXg7XG4gIH1cblxuICAvKiogV2VlayAqL1xuICB3ZWVrKGRhdGU6IERhdGUsIGlzVVRDPzogYm9vbGVhbik6IG51bWJlciB7XG4gICAgcmV0dXJuIHdlZWtPZlllYXIoZGF0ZSwgdGhpcy5fd2Vlay5kb3csIHRoaXMuX3dlZWsuZG95LCBpc1VUQykud2VlaztcbiAgfVxuXG4gIGZpcnN0RGF5T2ZXZWVrKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3dlZWsuZG93O1xuICB9XG5cbiAgZmlyc3REYXlPZlllYXIoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fd2Vlay5kb3k7XG4gIH1cblxuICAvKiogRGF5IG9mIFdlZWsgKi9cbiAgd2Vla2RheXMoKTogc3RyaW5nW107XG4gIHdlZWtkYXlzKGRhdGU6IERhdGUsIGZvcm1hdD86IHN0cmluZywgaXNVVEM/OiBib29sZWFuKTogc3RyaW5nO1xuICB3ZWVrZGF5cyhkYXRlPzogRGF0ZSwgZm9ybWF0Pzogc3RyaW5nLCBpc1VUQz86IGJvb2xlYW4pOiBzdHJpbmcgfCBzdHJpbmdbXSB7XG4gICAgaWYgKCFkYXRlKSB7XG4gICAgICByZXR1cm4gaXNBcnJheTxzdHJpbmc+KHRoaXMuX3dlZWtkYXlzKVxuICAgICAgICA/IHRoaXMuX3dlZWtkYXlzXG4gICAgICAgIDogdGhpcy5fd2Vla2RheXMuc3RhbmRhbG9uZTtcbiAgICB9XG5cbiAgICBpZiAoaXNBcnJheTxzdHJpbmc+KHRoaXMuX3dlZWtkYXlzKSkge1xuICAgICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzW2dldERheShkYXRlLCBpc1VUQyldO1xuICAgIH1cblxuICAgIGNvbnN0IF9rZXkgPSB0aGlzLl93ZWVrZGF5cy5pc0Zvcm1hdC50ZXN0KGZvcm1hdClcbiAgICAgID8gJ2Zvcm1hdCdcbiAgICAgIDogJ3N0YW5kYWxvbmUnO1xuXG4gICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzW19rZXldW2dldERheShkYXRlLCBpc1VUQyldO1xuICB9XG5cbiAgd2Vla2RheXNNaW4oKTogc3RyaW5nW107XG4gIHdlZWtkYXlzTWluKGRhdGU6IERhdGUsIGZvcm1hdD86IHN0cmluZywgaXNVVEM/OiBib29sZWFuKTogc3RyaW5nO1xuICB3ZWVrZGF5c01pbihkYXRlPzogRGF0ZSwgZm9ybWF0Pzogc3RyaW5nLCBpc1VUQz86IGJvb2xlYW4pOiBzdHJpbmcgfCBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIGRhdGUgPyB0aGlzLl93ZWVrZGF5c01pbltnZXREYXkoZGF0ZSwgaXNVVEMpXSA6IHRoaXMuX3dlZWtkYXlzTWluO1xuICB9XG5cbiAgd2Vla2RheXNTaG9ydCgpOiBzdHJpbmdbXTtcbiAgd2Vla2RheXNTaG9ydChkYXRlOiBEYXRlLCBmb3JtYXQ/OiBzdHJpbmcsIGlzVVRDPzogYm9vbGVhbik6IHN0cmluZztcbiAgd2Vla2RheXNTaG9ydChkYXRlPzogRGF0ZSwgZm9ybWF0Pzogc3RyaW5nLCBpc1VUQz86IGJvb2xlYW4pOiBzdHJpbmcgfCBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIGRhdGUgPyB0aGlzLl93ZWVrZGF5c1Nob3J0W2dldERheShkYXRlLCBpc1VUQyldIDogdGhpcy5fd2Vla2RheXNTaG9ydDtcbiAgfVxuXG5cbiAgLy8gcHJvdG8ud2Vla2RheXNQYXJzZSAgPSAgICAgICAgbG9jYWxlV2Vla2RheXNQYXJzZTtcbiAgd2Vla2RheXNQYXJzZSh3ZWVrZGF5TmFtZT86IHN0cmluZywgZm9ybWF0Pzogc3RyaW5nLCBzdHJpY3Q/OiBib29sZWFuKTogbnVtYmVyIHtcbiAgICBsZXQgaTtcbiAgICBsZXQgcmVnZXg7XG5cbiAgICBpZiAodGhpcy5fd2Vla2RheXNQYXJzZUV4YWN0KSB7XG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVXZWVrU3RyaWN0UGFyc2Uod2Vla2RheU5hbWUsIGZvcm1hdCwgc3RyaWN0KTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuX3dlZWtkYXlzUGFyc2UpIHtcbiAgICAgIHRoaXMuX3dlZWtkYXlzUGFyc2UgPSBbXTtcbiAgICAgIHRoaXMuX21pbldlZWtkYXlzUGFyc2UgPSBbXTtcbiAgICAgIHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZSA9IFtdO1xuICAgICAgdGhpcy5fZnVsbFdlZWtkYXlzUGFyc2UgPSBbXTtcbiAgICB9XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgNzsgaSsrKSB7XG4gICAgICAvLyBtYWtlIHRoZSByZWdleCBpZiB3ZSBkb24ndCBoYXZlIGl0IGFscmVhZHlcbiAgICAgIC8vIGZpeDogaGVyZSBpcyB0aGUgaXNzdWVcbiAgICAgIGNvbnN0IGRhdGUgPSBzZXREYXlPZldlZWsobmV3IERhdGUoRGF0ZS5VVEMoMjAwMCwgMSkpLCBpLCBudWxsLCB0cnVlKTtcbiAgICAgIGlmIChzdHJpY3QgJiYgIXRoaXMuX2Z1bGxXZWVrZGF5c1BhcnNlW2ldKSB7XG4gICAgICAgIHRoaXMuX2Z1bGxXZWVrZGF5c1BhcnNlW2ldID0gbmV3IFJlZ0V4cChgXiR7dGhpcy53ZWVrZGF5cyhkYXRlLCAnJywgdHJ1ZSkucmVwbGFjZSgnLicsICdcXC4/Jyl9JGAsICdpJyk7XG4gICAgICAgIHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZVtpXSA9IG5ldyBSZWdFeHAoYF4ke3RoaXMud2Vla2RheXNTaG9ydChkYXRlLCAnJywgdHJ1ZSkucmVwbGFjZSgnLicsICdcXC4/Jyl9JGAsICdpJyk7XG4gICAgICAgIHRoaXMuX21pbldlZWtkYXlzUGFyc2VbaV0gPSBuZXcgUmVnRXhwKGBeJHt0aGlzLndlZWtkYXlzTWluKGRhdGUsICcnLCB0cnVlKS5yZXBsYWNlKCcuJywgJ1xcLj8nKX0kYCwgJ2knKTtcbiAgICAgIH1cbiAgICAgIGlmICghdGhpcy5fd2Vla2RheXNQYXJzZVtpXSkge1xuICAgICAgICByZWdleCA9IGBeJHt0aGlzLndlZWtkYXlzKGRhdGUsICcnLCB0cnVlKX18XiR7dGhpcy53ZWVrZGF5c1Nob3J0KGRhdGUsICcnLCB0cnVlKX18XiR7dGhpcy53ZWVrZGF5c01pbihkYXRlLCAnJywgdHJ1ZSl9YDtcbiAgICAgICAgdGhpcy5fd2Vla2RheXNQYXJzZVtpXSA9IG5ldyBSZWdFeHAocmVnZXgucmVwbGFjZSgnLicsICcnKSwgJ2knKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFpc0FycmF5PFJlZ0V4cD4odGhpcy5fZnVsbFdlZWtkYXlzUGFyc2UpXG4gICAgICAgIHx8ICFpc0FycmF5PFJlZ0V4cD4odGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlKVxuICAgICAgICB8fCAhaXNBcnJheTxSZWdFeHA+KHRoaXMuX21pbldlZWtkYXlzUGFyc2UpXG4gICAgICAgIHx8ICFpc0FycmF5PFJlZ0V4cD4odGhpcy5fd2Vla2RheXNQYXJzZSkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyB0ZXN0aW5nIHRoZSByZWdleFxuICAgICAgaWYgKHN0cmljdCAmJiBmb3JtYXQgPT09ICdkZGRkJyAmJiB0aGlzLl9mdWxsV2Vla2RheXNQYXJzZVtpXS50ZXN0KHdlZWtkYXlOYW1lKSkge1xuICAgICAgICByZXR1cm4gaTtcbiAgICAgIH0gZWxzZSBpZiAoc3RyaWN0ICYmIGZvcm1hdCA9PT0gJ2RkZCcgJiYgdGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlW2ldLnRlc3Qod2Vla2RheU5hbWUpKSB7XG4gICAgICAgIHJldHVybiBpO1xuICAgICAgfSBlbHNlIGlmIChzdHJpY3QgJiYgZm9ybWF0ID09PSAnZGQnICYmIHRoaXMuX21pbldlZWtkYXlzUGFyc2VbaV0udGVzdCh3ZWVrZGF5TmFtZSkpIHtcbiAgICAgICAgcmV0dXJuIGk7XG4gICAgICB9IGVsc2UgaWYgKCFzdHJpY3QgJiYgdGhpcy5fd2Vla2RheXNQYXJzZVtpXS50ZXN0KHdlZWtkYXlOYW1lKSkge1xuICAgICAgICByZXR1cm4gaTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBwcm90by53ZWVrZGF5c1JlZ2V4ICAgICAgID0gICAgICAgIHdlZWtkYXlzUmVnZXg7XG4gIHdlZWtkYXlzUmVnZXgoaXNTdHJpY3Q6IGJvb2xlYW4pIHtcbiAgICBpZiAodGhpcy5fd2Vla2RheXNQYXJzZUV4YWN0KSB7XG4gICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ193ZWVrZGF5c1JlZ2V4JykpIHtcbiAgICAgICAgdGhpcy5jb21wdXRlV2Vla2RheXNQYXJzZSgpO1xuICAgICAgfVxuXG4gICAgICBpZiAoaXNTdHJpY3QpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzU3RyaWN0UmVnZXg7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5fd2Vla2RheXNSZWdleDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCFoYXNPd25Qcm9wKHRoaXMsICdfd2Vla2RheXNSZWdleCcpKSB7XG4gICAgICAgIHRoaXMuX3dlZWtkYXlzUmVnZXggPSBtYXRjaFdvcmQ7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLl93ZWVrZGF5c1N0cmljdFJlZ2V4ICYmIGlzU3RyaWN0ID9cbiAgICAgICAgdGhpcy5fd2Vla2RheXNTdHJpY3RSZWdleCA6IHRoaXMuX3dlZWtkYXlzUmVnZXg7XG4gICAgfVxuICB9XG5cbiAgLy8gcHJvdG8ud2Vla2RheXNTaG9ydFJlZ2V4ICA9ICAgICAgICB3ZWVrZGF5c1Nob3J0UmVnZXg7XG4gIC8vIHByb3RvLndlZWtkYXlzTWluUmVnZXggICAgPSAgICAgICAgd2Vla2RheXNNaW5SZWdleDtcblxuXG4gIHdlZWtkYXlzU2hvcnRSZWdleChpc1N0cmljdD86IGJvb2xlYW4pOiBSZWdFeHAge1xuICAgIGlmICh0aGlzLl93ZWVrZGF5c1BhcnNlRXhhY3QpIHtcbiAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX3dlZWtkYXlzUmVnZXgnKSkge1xuICAgICAgICB0aGlzLmNvbXB1dGVXZWVrZGF5c1BhcnNlKCk7XG4gICAgICB9XG4gICAgICBpZiAoaXNTdHJpY3QpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzU2hvcnRTdHJpY3RSZWdleDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLl93ZWVrZGF5c1Nob3J0UmVnZXg7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX3dlZWtkYXlzU2hvcnRSZWdleCcpKSB7XG4gICAgICAgIHRoaXMuX3dlZWtkYXlzU2hvcnRSZWdleCA9IG1hdGNoV29yZDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzU2hvcnRTdHJpY3RSZWdleCAmJiBpc1N0cmljdCA/XG4gICAgICAgIHRoaXMuX3dlZWtkYXlzU2hvcnRTdHJpY3RSZWdleCA6IHRoaXMuX3dlZWtkYXlzU2hvcnRSZWdleDtcbiAgICB9XG4gIH1cblxuICB3ZWVrZGF5c01pblJlZ2V4KGlzU3RyaWN0PzogYm9vbGVhbik6IFJlZ0V4cCB7XG4gICAgaWYgKHRoaXMuX3dlZWtkYXlzUGFyc2VFeGFjdCkge1xuICAgICAgaWYgKCFoYXNPd25Qcm9wKHRoaXMsICdfd2Vla2RheXNSZWdleCcpKSB7XG4gICAgICAgIHRoaXMuY29tcHV0ZVdlZWtkYXlzUGFyc2UoKTtcbiAgICAgIH1cbiAgICAgIGlmIChpc1N0cmljdCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fd2Vla2RheXNNaW5TdHJpY3RSZWdleDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLl93ZWVrZGF5c01pblJlZ2V4O1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ193ZWVrZGF5c01pblJlZ2V4JykpIHtcbiAgICAgICAgdGhpcy5fd2Vla2RheXNNaW5SZWdleCA9IG1hdGNoV29yZDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzTWluU3RyaWN0UmVnZXggJiYgaXNTdHJpY3QgP1xuICAgICAgICB0aGlzLl93ZWVrZGF5c01pblN0cmljdFJlZ2V4IDogdGhpcy5fd2Vla2RheXNNaW5SZWdleDtcbiAgICB9XG4gIH1cblxuICBpc1BNKGlucHV0OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAvLyBJRTggUXVpcmtzIE1vZGUgJiBJRTcgU3RhbmRhcmRzIE1vZGUgZG8gbm90IGFsbG93IGFjY2Vzc2luZyBzdHJpbmdzIGxpa2UgYXJyYXlzXG4gICAgLy8gVXNpbmcgY2hhckF0IHNob3VsZCBiZSBtb3JlIGNvbXBhdGlibGUuXG4gICAgcmV0dXJuIGlucHV0LnRvTG93ZXJDYXNlKCkuY2hhckF0KDApID09PSAncCc7XG4gIH1cblxuICBtZXJpZGllbShob3VyczogbnVtYmVyLCBtaW51dGVzOiBudW1iZXIsIGlzTG93ZXI6IGJvb2xlYW4pOiBzdHJpbmcge1xuICAgIGlmIChob3VycyA+IDExKSB7XG4gICAgICByZXR1cm4gaXNMb3dlciA/ICdwbScgOiAnUE0nO1xuICAgIH1cblxuICAgIHJldHVybiBpc0xvd2VyID8gJ2FtJyA6ICdBTSc7XG4gIH1cblxuICBmb3JtYXRMb25nRGF0ZShrZXk6IHN0cmluZykge1xuICAgIHRoaXMuX2xvbmdEYXRlRm9ybWF0ID0gdGhpcy5fbG9uZ0RhdGVGb3JtYXQgPyB0aGlzLl9sb25nRGF0ZUZvcm1hdCA6IGRlZmF1bHRMb25nRGF0ZUZvcm1hdDtcbiAgICBjb25zdCBmb3JtYXQgPSB0aGlzLl9sb25nRGF0ZUZvcm1hdFtrZXldO1xuICAgIGNvbnN0IGZvcm1hdFVwcGVyID0gdGhpcy5fbG9uZ0RhdGVGb3JtYXRba2V5LnRvVXBwZXJDYXNlKCldO1xuXG4gICAgaWYgKGZvcm1hdCB8fCAhZm9ybWF0VXBwZXIpIHtcbiAgICAgIHJldHVybiBmb3JtYXQ7XG4gICAgfVxuXG4gICAgdGhpcy5fbG9uZ0RhdGVGb3JtYXRbXG4gICAgICBrZXlcbiAgICAgIF0gPSBmb3JtYXRVcHBlci5yZXBsYWNlKC9NTU1NfE1NfEREfGRkZGQvZywgKHZhbDogc3RyaW5nKSA9PiB7XG4gICAgICByZXR1cm4gdmFsLnNsaWNlKDEpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRoaXMuX2xvbmdEYXRlRm9ybWF0W2tleV07XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZU1vbnRoU3RyaWN0UGFyc2UobW9udGhOYW1lOiBzdHJpbmcsIGZvcm1hdDogc3RyaW5nLCBzdHJpY3Q/OiBib29sZWFuKSB7XG4gICAgY29uc3QgbGxjID0gbW9udGhOYW1lLnRvTG9jYWxlTG93ZXJDYXNlKCk7XG4gICAgbGV0IGk7XG4gICAgbGV0IGlpO1xuICAgIGxldCBtb207XG4gICAgaWYgKCF0aGlzLl9tb250aHNQYXJzZSkge1xuICAgICAgLy8gdGhpcyBpcyBub3QgdXNlZFxuICAgICAgdGhpcy5fbW9udGhzUGFyc2UgPSBbXTtcbiAgICAgIHRoaXMuX2xvbmdNb250aHNQYXJzZSA9IFtdO1xuICAgICAgdGhpcy5fc2hvcnRNb250aHNQYXJzZSA9IFtdO1xuICAgICAgZm9yIChpID0gMDsgaSA8IDEyOyArK2kpIHtcbiAgICAgICAgbW9tID0gbmV3IERhdGUoMjAwMCwgaSk7XG4gICAgICAgIHRoaXMuX3Nob3J0TW9udGhzUGFyc2VbaV0gPSB0aGlzLm1vbnRoc1Nob3J0KG1vbSwgJycpLnRvTG9jYWxlTG93ZXJDYXNlKCk7XG4gICAgICAgIHRoaXMuX2xvbmdNb250aHNQYXJzZVtpXSA9IHRoaXMubW9udGhzKG1vbSwgJycpLnRvTG9jYWxlTG93ZXJDYXNlKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHN0cmljdCkge1xuICAgICAgaWYgKGZvcm1hdCA9PT0gJ01NTScpIHtcbiAgICAgICAgaWkgPSAodGhpcy5fc2hvcnRNb250aHNQYXJzZSBhcyBzdHJpbmdbXSkuaW5kZXhPZihsbGMpO1xuXG4gICAgICAgIHJldHVybiBpaSAhPT0gLTEgPyBpaSA6IG51bGw7XG4gICAgICB9XG4gICAgICBpaSA9ICh0aGlzLl9sb25nTW9udGhzUGFyc2UgYXMgc3RyaW5nW10pLmluZGV4T2YobGxjKTtcblxuICAgICAgcmV0dXJuIGlpICE9PSAtMSA/IGlpIDogbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoZm9ybWF0ID09PSAnTU1NJykge1xuICAgICAgaWkgPSAodGhpcy5fc2hvcnRNb250aHNQYXJzZSBhcyBzdHJpbmdbXSkuaW5kZXhPZihsbGMpO1xuICAgICAgaWYgKGlpICE9PSAtMSkge1xuICAgICAgICByZXR1cm4gaWk7XG4gICAgICB9XG5cbiAgICAgIGlpID0gKHRoaXMuX2xvbmdNb250aHNQYXJzZSBhcyBzdHJpbmdbXSkuaW5kZXhPZihsbGMpO1xuXG4gICAgICByZXR1cm4gaWkgIT09IC0xID8gaWkgOiBudWxsO1xuICAgIH1cblxuICAgIGlpID0gKHRoaXMuX2xvbmdNb250aHNQYXJzZSBhcyBzdHJpbmdbXSkuaW5kZXhPZihsbGMpO1xuICAgIGlmIChpaSAhPT0gLTEpIHtcbiAgICAgIHJldHVybiBpaTtcbiAgICB9XG4gICAgaWkgPSAodGhpcy5fc2hvcnRNb250aHNQYXJzZSBhcyBzdHJpbmdbXSkuaW5kZXhPZihsbGMpO1xuXG4gICAgcmV0dXJuIGlpICE9PSAtMSA/IGlpIDogbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlV2Vla1N0cmljdFBhcnNlKHdlZWtkYXlOYW1lOiBzdHJpbmcsIGZvcm1hdDogc3RyaW5nLCBzdHJpY3Q6IGJvb2xlYW4pOiBudW1iZXIge1xuICAgIGxldCBpaTtcbiAgICBjb25zdCBsbGMgPSB3ZWVrZGF5TmFtZS50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuICAgIGlmICghdGhpcy5fd2Vla2RheXNQYXJzZSkge1xuICAgICAgdGhpcy5fd2Vla2RheXNQYXJzZSA9IFtdO1xuICAgICAgdGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlID0gW107XG4gICAgICB0aGlzLl9taW5XZWVrZGF5c1BhcnNlID0gW107XG5cbiAgICAgIGxldCBpO1xuICAgICAgZm9yIChpID0gMDsgaSA8IDc7ICsraSkge1xuICAgICAgICBjb25zdCBkYXRlID0gc2V0RGF5T2ZXZWVrKG5ldyBEYXRlKERhdGUuVVRDKDIwMDAsIDEpKSwgaSwgbnVsbCwgdHJ1ZSk7XG4gICAgICAgIHRoaXMuX21pbldlZWtkYXlzUGFyc2VbaV0gPSB0aGlzLndlZWtkYXlzTWluKGRhdGUpLnRvTG9jYWxlTG93ZXJDYXNlKCk7XG4gICAgICAgIHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZVtpXSA9IHRoaXMud2Vla2RheXNTaG9ydChkYXRlKS50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuICAgICAgICB0aGlzLl93ZWVrZGF5c1BhcnNlW2ldID0gdGhpcy53ZWVrZGF5cyhkYXRlLCAnJykudG9Mb2NhbGVMb3dlckNhc2UoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIWlzQXJyYXk8c3RyaW5nPih0aGlzLl93ZWVrZGF5c1BhcnNlKVxuICAgICAgfHwgIWlzQXJyYXk8c3RyaW5nPih0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2UpXG4gICAgICB8fCAhaXNBcnJheTxzdHJpbmc+KHRoaXMuX21pbldlZWtkYXlzUGFyc2UpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHN0cmljdCkge1xuICAgICAgaWYgKGZvcm1hdCA9PT0gJ2RkZGQnKSB7XG4gICAgICAgIGlpID0gdGhpcy5fd2Vla2RheXNQYXJzZS5pbmRleE9mKGxsYyk7XG5cbiAgICAgICAgcmV0dXJuIGlpICE9PSAtMSA/IGlpIDogbnVsbDtcbiAgICAgIH0gZWxzZSBpZiAoZm9ybWF0ID09PSAnZGRkJykge1xuICAgICAgICBpaSA9IHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZS5pbmRleE9mKGxsYyk7XG5cbiAgICAgICAgcmV0dXJuIGlpICE9PSAtMSA/IGlpIDogbnVsbDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlpID0gdGhpcy5fbWluV2Vla2RheXNQYXJzZS5pbmRleE9mKGxsYyk7XG5cbiAgICAgICAgcmV0dXJuIGlpICE9PSAtMSA/IGlpIDogbnVsbDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGZvcm1hdCA9PT0gJ2RkZGQnKSB7XG4gICAgICAgIGlpID0gdGhpcy5fd2Vla2RheXNQYXJzZS5pbmRleE9mKGxsYyk7XG4gICAgICAgIGlmIChpaSAhPT0gLTEpIHtcbiAgICAgICAgICByZXR1cm4gaWk7XG4gICAgICAgIH1cbiAgICAgICAgaWkgPSB0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2UuaW5kZXhPZihsbGMpO1xuICAgICAgICBpZiAoaWkgIT09IC0xKSB7XG4gICAgICAgICAgcmV0dXJuIGlpO1xuICAgICAgICB9XG4gICAgICAgIGlpID0gdGhpcy5fbWluV2Vla2RheXNQYXJzZS5pbmRleE9mKGxsYyk7XG5cbiAgICAgICAgcmV0dXJuIGlpICE9PSAtMSA/IGlpIDogbnVsbDtcbiAgICAgIH0gZWxzZSBpZiAoZm9ybWF0ID09PSAnZGRkJykge1xuICAgICAgICBpaSA9IHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZS5pbmRleE9mKGxsYyk7XG4gICAgICAgIGlmIChpaSAhPT0gLTEpIHtcbiAgICAgICAgICByZXR1cm4gaWk7XG4gICAgICAgIH1cbiAgICAgICAgaWkgPSB0aGlzLl93ZWVrZGF5c1BhcnNlLmluZGV4T2YobGxjKTtcbiAgICAgICAgaWYgKGlpICE9PSAtMSkge1xuICAgICAgICAgIHJldHVybiBpaTtcbiAgICAgICAgfVxuICAgICAgICBpaSA9IHRoaXMuX21pbldlZWtkYXlzUGFyc2UuaW5kZXhPZihsbGMpO1xuXG4gICAgICAgIHJldHVybiBpaSAhPT0gLTEgPyBpaSA6IG51bGw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpaSA9IHRoaXMuX21pbldlZWtkYXlzUGFyc2UuaW5kZXhPZihsbGMpO1xuICAgICAgICBpZiAoaWkgIT09IC0xKSB7XG4gICAgICAgICAgcmV0dXJuIGlpO1xuICAgICAgICB9XG4gICAgICAgIGlpID0gdGhpcy5fd2Vla2RheXNQYXJzZS5pbmRleE9mKGxsYyk7XG4gICAgICAgIGlmIChpaSAhPT0gLTEpIHtcbiAgICAgICAgICByZXR1cm4gaWk7XG4gICAgICAgIH1cbiAgICAgICAgaWkgPSB0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2UuaW5kZXhPZihsbGMpO1xuXG4gICAgICAgIHJldHVybiBpaSAhPT0gLTEgPyBpaSA6IG51bGw7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjb21wdXRlTW9udGhzUGFyc2UoKSB7XG4gICAgY29uc3Qgc2hvcnRQaWVjZXM6IHN0cmluZ1tdID0gW107XG4gICAgY29uc3QgbG9uZ1BpZWNlczogc3RyaW5nW10gPSBbXTtcbiAgICBjb25zdCBtaXhlZFBpZWNlczogc3RyaW5nW10gPSBbXTtcbiAgICBsZXQgZGF0ZTtcblxuICAgIGxldCBpO1xuICAgIGZvciAoaSA9IDA7IGkgPCAxMjsgaSsrKSB7XG4gICAgICAvLyBtYWtlIHRoZSByZWdleCBpZiB3ZSBkb24ndCBoYXZlIGl0IGFscmVhZHlcbiAgICAgIGRhdGUgPSBuZXcgRGF0ZSgyMDAwLCBpKTtcbiAgICAgIHNob3J0UGllY2VzLnB1c2godGhpcy5tb250aHNTaG9ydChkYXRlLCAnJykpO1xuICAgICAgbG9uZ1BpZWNlcy5wdXNoKHRoaXMubW9udGhzKGRhdGUsICcnKSk7XG4gICAgICBtaXhlZFBpZWNlcy5wdXNoKHRoaXMubW9udGhzKGRhdGUsICcnKSk7XG4gICAgICBtaXhlZFBpZWNlcy5wdXNoKHRoaXMubW9udGhzU2hvcnQoZGF0ZSwgJycpKTtcbiAgICB9XG4gICAgLy8gU29ydGluZyBtYWtlcyBzdXJlIGlmIG9uZSBtb250aCAob3IgYWJicikgaXMgYSBwcmVmaXggb2YgYW5vdGhlciBpdFxuICAgIC8vIHdpbGwgbWF0Y2ggdGhlIGxvbmdlciBwaWVjZS5cbiAgICBzaG9ydFBpZWNlcy5zb3J0KGNtcExlblJldik7XG4gICAgbG9uZ1BpZWNlcy5zb3J0KGNtcExlblJldik7XG4gICAgbWl4ZWRQaWVjZXMuc29ydChjbXBMZW5SZXYpO1xuICAgIGZvciAoaSA9IDA7IGkgPCAxMjsgaSsrKSB7XG4gICAgICBzaG9ydFBpZWNlc1tpXSA9IHJlZ2V4RXNjYXBlKHNob3J0UGllY2VzW2ldKTtcbiAgICAgIGxvbmdQaWVjZXNbaV0gPSByZWdleEVzY2FwZShsb25nUGllY2VzW2ldKTtcbiAgICB9XG4gICAgZm9yIChpID0gMDsgaSA8IDI0OyBpKyspIHtcbiAgICAgIG1peGVkUGllY2VzW2ldID0gcmVnZXhFc2NhcGUobWl4ZWRQaWVjZXNbaV0pO1xuICAgIH1cblxuICAgIHRoaXMuX21vbnRoc1JlZ2V4ID0gbmV3IFJlZ0V4cChgXigke21peGVkUGllY2VzLmpvaW4oJ3wnKX0pYCwgJ2knKTtcbiAgICB0aGlzLl9tb250aHNTaG9ydFJlZ2V4ID0gdGhpcy5fbW9udGhzUmVnZXg7XG4gICAgdGhpcy5fbW9udGhzU3RyaWN0UmVnZXggPSBuZXcgUmVnRXhwKGBeKCR7bG9uZ1BpZWNlcy5qb2luKCd8Jyl9KWAsICdpJyk7XG4gICAgdGhpcy5fbW9udGhzU2hvcnRTdHJpY3RSZWdleCA9IG5ldyBSZWdFeHAoYF4oJHtzaG9ydFBpZWNlcy5qb2luKCd8Jyl9KWAsICdpJyk7XG4gIH1cblxuICBwcml2YXRlIGNvbXB1dGVXZWVrZGF5c1BhcnNlKCkge1xuICAgIGNvbnN0IG1pblBpZWNlcyA9IFtdO1xuICAgIGNvbnN0IHNob3J0UGllY2VzID0gW107XG4gICAgY29uc3QgbG9uZ1BpZWNlcyA9IFtdO1xuICAgIGNvbnN0IG1peGVkUGllY2VzID0gW107XG5cbiAgICBsZXQgaTtcbiAgICBmb3IgKGkgPSAwOyBpIDwgNzsgaSsrKSB7XG4gICAgICAvLyBtYWtlIHRoZSByZWdleCBpZiB3ZSBkb24ndCBoYXZlIGl0IGFscmVhZHlcbiAgICAgIC8vIGxldCBtb20gPSBjcmVhdGVVVEMoWzIwMDAsIDFdKS5kYXkoaSk7XG4gICAgICBjb25zdCBkYXRlID0gc2V0RGF5T2ZXZWVrKG5ldyBEYXRlKERhdGUuVVRDKDIwMDAsIDEpKSwgaSwgbnVsbCwgdHJ1ZSk7XG4gICAgICBjb25zdCBtaW5wID0gdGhpcy53ZWVrZGF5c01pbihkYXRlKTtcbiAgICAgIGNvbnN0IHNob3J0cCA9IHRoaXMud2Vla2RheXNTaG9ydChkYXRlKTtcbiAgICAgIGNvbnN0IGxvbmdwID0gdGhpcy53ZWVrZGF5cyhkYXRlKTtcbiAgICAgIG1pblBpZWNlcy5wdXNoKG1pbnApO1xuICAgICAgc2hvcnRQaWVjZXMucHVzaChzaG9ydHApO1xuICAgICAgbG9uZ1BpZWNlcy5wdXNoKGxvbmdwKTtcbiAgICAgIG1peGVkUGllY2VzLnB1c2gobWlucCk7XG4gICAgICBtaXhlZFBpZWNlcy5wdXNoKHNob3J0cCk7XG4gICAgICBtaXhlZFBpZWNlcy5wdXNoKGxvbmdwKTtcbiAgICB9XG4gICAgLy8gU29ydGluZyBtYWtlcyBzdXJlIGlmIG9uZSB3ZWVrZGF5IChvciBhYmJyKSBpcyBhIHByZWZpeCBvZiBhbm90aGVyIGl0XG4gICAgLy8gd2lsbCBtYXRjaCB0aGUgbG9uZ2VyIHBpZWNlLlxuICAgIG1pblBpZWNlcy5zb3J0KGNtcExlblJldik7XG4gICAgc2hvcnRQaWVjZXMuc29ydChjbXBMZW5SZXYpO1xuICAgIGxvbmdQaWVjZXMuc29ydChjbXBMZW5SZXYpO1xuICAgIG1peGVkUGllY2VzLnNvcnQoY21wTGVuUmV2KTtcbiAgICBmb3IgKGkgPSAwOyBpIDwgNzsgaSsrKSB7XG4gICAgICBzaG9ydFBpZWNlc1tpXSA9IHJlZ2V4RXNjYXBlKHNob3J0UGllY2VzW2ldKTtcbiAgICAgIGxvbmdQaWVjZXNbaV0gPSByZWdleEVzY2FwZShsb25nUGllY2VzW2ldKTtcbiAgICAgIG1peGVkUGllY2VzW2ldID0gcmVnZXhFc2NhcGUobWl4ZWRQaWVjZXNbaV0pO1xuICAgIH1cblxuICAgIHRoaXMuX3dlZWtkYXlzUmVnZXggPSBuZXcgUmVnRXhwKGBeKCR7bWl4ZWRQaWVjZXMuam9pbignfCcpfSlgLCAnaScpO1xuICAgIHRoaXMuX3dlZWtkYXlzU2hvcnRSZWdleCA9IHRoaXMuX3dlZWtkYXlzUmVnZXg7XG4gICAgdGhpcy5fd2Vla2RheXNNaW5SZWdleCA9IHRoaXMuX3dlZWtkYXlzUmVnZXg7XG5cbiAgICB0aGlzLl93ZWVrZGF5c1N0cmljdFJlZ2V4ID0gbmV3IFJlZ0V4cChgXigke2xvbmdQaWVjZXMuam9pbignfCcpfSlgLCAnaScpO1xuICAgIHRoaXMuX3dlZWtkYXlzU2hvcnRTdHJpY3RSZWdleCA9IG5ldyBSZWdFeHAoYF4oJHtzaG9ydFBpZWNlcy5qb2luKCd8Jyl9KWAsICdpJyk7XG4gICAgdGhpcy5fd2Vla2RheXNNaW5TdHJpY3RSZWdleCA9IG5ldyBSZWdFeHAoYF4oJHttaW5QaWVjZXMuam9pbignfCcpfSlgLCAnaScpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNtcExlblJldihhOiBzdHJpbmcsIGI6IHN0cmluZyk6IG51bWJlciB7XG4gIHJldHVybiBiLmxlbmd0aCAtIGEubGVuZ3RoO1xufVxuIl19
|