@sd-angular/core 1.3.252 → 1.3.254
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/bundles/sd-angular-core-group.umd.js +1 -1
- package/bundles/sd-angular-core-group.umd.js.map +1 -1
- package/bundles/sd-angular-core-group.umd.min.js +1 -1
- package/bundles/sd-angular-core-group.umd.min.js.map +1 -1
- package/bundles/sd-angular-core-header-title.umd.js +1 -1
- package/bundles/sd-angular-core-header-title.umd.js.map +1 -1
- package/bundles/sd-angular-core-header-title.umd.min.js +1 -1
- package/bundles/sd-angular-core-header-title.umd.min.js.map +1 -1
- package/bundles/sd-angular-core-query-builder.umd.js +94 -0
- package/bundles/sd-angular-core-query-builder.umd.js.map +1 -0
- package/bundles/sd-angular-core-query-builder.umd.min.js +2 -0
- package/bundles/sd-angular-core-query-builder.umd.min.js.map +1 -0
- package/bundles/sd-angular-core-side-drawer.umd.js +4 -1
- package/bundles/sd-angular-core-side-drawer.umd.js.map +1 -1
- package/bundles/sd-angular-core-side-drawer.umd.min.js +1 -1
- package/bundles/sd-angular-core-side-drawer.umd.min.js.map +1 -1
- package/esm2015/api/index.js +1 -1
- package/esm2015/api/sd-angular-core-api.js +1 -1
- package/esm2015/api/src/lib/api.model.js +1 -1
- package/esm2015/api/src/lib/api.module.js +1 -1
- package/esm2015/api/src/lib/api.service.js +1 -1
- package/esm2015/api/src/lib/http.interceptor.js +1 -1
- package/esm2015/api/src/lib/http.service.js +1 -1
- package/esm2015/api/src/lib/token.service.js +1 -1
- package/esm2015/api/src/public-api.js +1 -1
- package/esm2015/autocomplete/index.js +1 -1
- package/esm2015/autocomplete/sd-angular-core-autocomplete.js +1 -1
- package/esm2015/autocomplete/src/lib/autocomplete-display-def.directive.js +1 -1
- package/esm2015/autocomplete/src/lib/autocomplete.component.js +1 -1
- package/esm2015/autocomplete/src/lib/autocomplete.module.js +1 -1
- package/esm2015/autocomplete/src/public-api.js +1 -1
- package/esm2015/badge/index.js +1 -1
- package/esm2015/badge/sd-angular-core-badge.js +1 -1
- package/esm2015/badge/src/lib/badge.component.js +1 -1
- package/esm2015/badge/src/lib/badge.module.js +1 -1
- package/esm2015/badge/src/public-api.js +1 -1
- package/esm2015/button/index.js +1 -1
- package/esm2015/button/sd-angular-core-button.js +1 -1
- package/esm2015/button/src/lib/button.component.js +1 -1
- package/esm2015/button/src/lib/button.module.js +1 -1
- package/esm2015/button/src/public-api.js +1 -1
- package/esm2015/cache/index.js +1 -1
- package/esm2015/cache/sd-angular-core-cache.js +1 -1
- package/esm2015/cache/src/lib/cache.model.js +1 -1
- package/esm2015/cache/src/lib/cache.service.js +1 -1
- package/esm2015/cache/src/public-api.js +1 -1
- package/esm2015/chart/index.js +1 -1
- package/esm2015/chart/sd-angular-core-chart.js +1 -1
- package/esm2015/chart/src/lib/chart.component.js +1 -1
- package/esm2015/chart/src/lib/chart.model.js +1 -1
- package/esm2015/chart/src/lib/chart.module.js +1 -1
- package/esm2015/chart/src/public-api.js +1 -1
- package/esm2015/checkbox/index.js +1 -1
- package/esm2015/checkbox/sd-angular-core-checkbox.js +1 -1
- package/esm2015/checkbox/src/lib/checkbox.component.js +1 -1
- package/esm2015/checkbox/src/lib/checkbox.module.js +1 -1
- package/esm2015/checkbox/src/public-api.js +1 -1
- package/esm2015/chip/index.js +1 -1
- package/esm2015/chip/sd-angular-core-chip.js +1 -1
- package/esm2015/chip/src/lib/chip.component.js +1 -1
- package/esm2015/chip/src/lib/chip.model.js +1 -1
- package/esm2015/chip/src/lib/chip.module.js +1 -1
- package/esm2015/chip/src/lib/directives/sd-chip-display-def.directive.js +1 -1
- package/esm2015/chip/src/lib/pipes/removable-chip.pipe.js +1 -1
- package/esm2015/chip/src/public-api.js +1 -1
- package/esm2015/comment/index.js +1 -1
- package/esm2015/comment/sd-angular-core-comment.js +1 -1
- package/esm2015/comment/src/lib/comment.component.js +1 -1
- package/esm2015/comment/src/lib/comment.model.js +1 -1
- package/esm2015/comment/src/lib/comment.module.js +1 -1
- package/esm2015/comment/src/public-api.js +1 -1
- package/esm2015/common/index.js +1 -1
- package/esm2015/common/sd-angular-core-common.js +1 -1
- package/esm2015/common/src/lib/common.module.js +1 -1
- package/esm2015/common/src/lib/configurations/firebase.configuration.js +1 -1
- package/esm2015/common/src/lib/configurations/form.configuration.js +1 -1
- package/esm2015/common/src/lib/directives/sd-for.directive.js +1 -1
- package/esm2015/common/src/lib/directives/sd-lable.directive.js +1 -1
- package/esm2015/common/src/lib/directives/sd-let.directive.js +1 -1
- package/esm2015/common/src/lib/directives/sd-scroll.directive.js +1 -1
- package/esm2015/common/src/lib/directives/sd-suffix-icon.directive.js +1 -1
- package/esm2015/common/src/lib/directives/sd-suffix.directive.js +1 -1
- package/esm2015/common/src/lib/directives/view-def.directive.js +1 -1
- package/esm2015/common/src/lib/models/sd-form-control.js +1 -1
- package/esm2015/common/src/lib/others/detectIncognito.js +1 -1
- package/esm2015/common/src/lib/services/browser.service.js +1 -1
- package/esm2015/common/src/lib/typings/array.extension.js +1 -1
- package/esm2015/common/src/lib/typings/date.extension.js +1 -1
- package/esm2015/common/src/lib/typings/index.js +1 -1
- package/esm2015/common/src/lib/typings/number.extension.js +1 -1
- package/esm2015/common/src/lib/typings/string.extension.js +1 -1
- package/esm2015/common/src/lib/typings/utility.extension.js +1 -1
- package/esm2015/common/src/public-api.js +1 -1
- package/esm2015/confirm/index.js +1 -1
- package/esm2015/confirm/sd-angular-core-confirm.js +1 -1
- package/esm2015/confirm/src/lib/components/dialog-confirm/dialog-confirm.component.js +1 -1
- package/esm2015/confirm/src/lib/confirm.module.js +1 -1
- package/esm2015/confirm/src/lib/confirm.service.js +1 -1
- package/esm2015/confirm/src/public-api.js +1 -1
- package/esm2015/date/index.js +1 -1
- package/esm2015/date/sd-angular-core-date.js +1 -1
- package/esm2015/date/src/lib/date.component.js +1 -1
- package/esm2015/date/src/lib/date.module.js +1 -1
- package/esm2015/date/src/public-api.js +1 -1
- package/esm2015/date-full/index.js +1 -1
- package/esm2015/date-full/sd-angular-core-date-full.js +1 -1
- package/esm2015/date-full/src/lib/date-full.component.js +1 -1
- package/esm2015/date-full/src/lib/date-full.module.js +1 -1
- package/esm2015/date-full/src/public-api.js +1 -1
- package/esm2015/date-month/index.js +1 -1
- package/esm2015/date-month/sd-angular-core-date-month.js +1 -1
- package/esm2015/date-month/src/lib/date-month.component.js +1 -1
- package/esm2015/date-month/src/lib/date-month.module.js +1 -1
- package/esm2015/date-month/src/public-api.js +1 -1
- package/esm2015/date-range/index.js +1 -1
- package/esm2015/date-range/sd-angular-core-date-range.js +1 -1
- package/esm2015/date-range/src/lib/date-range.component.js +1 -1
- package/esm2015/date-range/src/lib/date-range.module.js +1 -1
- package/esm2015/date-range/src/public-api.js +1 -1
- package/esm2015/date-time/index.js +1 -1
- package/esm2015/date-time/sd-angular-core-date-time.js +1 -1
- package/esm2015/date-time/src/lib/date-time.component.js +1 -1
- package/esm2015/date-time/src/lib/date-time.module.js +1 -1
- package/esm2015/date-time/src/public-api.js +1 -1
- package/esm2015/db/index.js +1 -1
- package/esm2015/db/sd-angular-core-db.js +1 -1
- package/esm2015/db/src/lib/db.model.js +1 -1
- package/esm2015/db/src/lib/db.service.js +1 -1
- package/esm2015/db/src/public-api.js +1 -1
- package/esm2015/dynamic-report/index.js +1 -1
- package/esm2015/dynamic-report/sd-angular-core-dynamic-report.js +1 -1
- package/esm2015/dynamic-report/src/lib/dynamic-report.component.js +1 -1
- package/esm2015/dynamic-report/src/lib/dynamic-report.module.js +1 -1
- package/esm2015/dynamic-report/src/public-api.js +1 -1
- package/esm2015/editor/index.js +1 -1
- package/esm2015/editor/sd-angular-core-editor.js +1 -1
- package/esm2015/editor/src/lib/constant.js +1 -1
- package/esm2015/editor/src/lib/editor.component.js +1 -1
- package/esm2015/editor/src/lib/editor.model.js +1 -1
- package/esm2015/editor/src/lib/editor.module.js +1 -1
- package/esm2015/editor/src/public-api.js +1 -1
- package/esm2015/export/index.js +1 -1
- package/esm2015/export/sd-angular-core-export.js +1 -1
- package/esm2015/export/src/lib/excel.model.js +1 -1
- package/esm2015/export/src/lib/export.model.js +1 -1
- package/esm2015/export/src/lib/export.service.js +1 -1
- package/esm2015/export/src/public-api.js +1 -1
- package/esm2015/filter/index.js +1 -1
- package/esm2015/filter/sd-angular-core-filter.js +1 -1
- package/esm2015/filter/src/lib/directives/sd-filter-def.directive.js +1 -1
- package/esm2015/filter/src/lib/filter.component.js +1 -1
- package/esm2015/filter/src/lib/filter.model.js +1 -1
- package/esm2015/filter/src/lib/filter.module.js +1 -1
- package/esm2015/filter/src/lib/filter.service.js +1 -1
- package/esm2015/filter/src/lib/pipes/values-local.pipe.js +1 -1
- package/esm2015/filter/src/lib/pipes/values-server.pipe.js +1 -1
- package/esm2015/filter/src/public-api.js +1 -1
- package/esm2015/form/index.js +1 -1
- package/esm2015/form/sd-angular-core-form.js +1 -1
- package/esm2015/form/src/lib/form.module.js +1 -1
- package/esm2015/form/src/public-api.js +1 -1
- package/esm2015/grid/index.js +1 -1
- package/esm2015/grid/sd-angular-core-grid.js +1 -1
- package/esm2015/grid/src/lib/components/grid-config/grid-config.component.js +1 -1
- package/esm2015/grid/src/lib/components/grid-config/grid-config.model.js +1 -1
- package/esm2015/grid/src/lib/components/grid-desktop-column-children-view/grid-desktop-column-children-view.component.js +1 -1
- package/esm2015/grid/src/lib/components/grid-desktop-column-edit/grid-desktop-column-edit.component.js +1 -1
- package/esm2015/grid/src/lib/components/grid-desktop-column-view/grid-desktop-column-view.component.js +1 -1
- package/esm2015/grid/src/lib/components/grid-desktop-inline-filter/grid-desktop-inline-filter.component.js +1 -1
- package/esm2015/grid/src/lib/components/grid-import-excel/grid-import-excel.component.js +1 -1
- package/esm2015/grid/src/lib/components/grid-mobile-item-view/grid-mobile-item-view.component.js +1 -1
- package/esm2015/grid/src/lib/components/grid-popup-editor/grid-popup-editor.component.js +1 -1
- package/esm2015/grid/src/lib/components/grid-popup-export-excel/grid-popup-export-excel.component.js +1 -1
- package/esm2015/grid/src/lib/components/grid-popup-export-excel/grid-popup-export-excel.model.js +1 -1
- package/esm2015/grid/src/lib/components/grid-popup-filter/grid-popup-filter.component.js +1 -1
- package/esm2015/grid/src/lib/components/grid-popup-filter/grid-popup-filter.model.js +1 -1
- package/esm2015/grid/src/lib/components/grid-popup-quick-filter-detail/grid-popup-quick-filter-detail.component.js +1 -1
- package/esm2015/grid/src/lib/components/grid-sub-information/grid-sub-information.component.js +1 -1
- package/esm2015/grid/src/lib/directives/cell-def.directive.js +1 -1
- package/esm2015/grid/src/lib/directives/cell-editor-def.directive.js +1 -1
- package/esm2015/grid/src/lib/directives/cell-footer-def.directive.js +1 -1
- package/esm2015/grid/src/lib/directives/sub-information-header-def.directive.js +1 -1
- package/esm2015/grid/src/lib/grid.component.js +1 -1
- package/esm2015/grid/src/lib/grid.model.js +1 -1
- package/esm2015/grid/src/lib/grid.module.js +1 -1
- package/esm2015/grid/src/lib/models/filter-info.model.js +1 -1
- package/esm2015/grid/src/lib/models/grid-configuration.model.js +1 -1
- package/esm2015/grid/src/lib/models/handler-dotnet.js +1 -1
- package/esm2015/grid/src/lib/models/handler-local.js +1 -1
- package/esm2015/grid/src/lib/models/handler.js +1 -1
- package/esm2015/grid/src/lib/pipes/cell-desktop-class-name.pipe.js +1 -1
- package/esm2015/grid/src/lib/pipes/cell-mobile-class-name.pipe.js +1 -1
- package/esm2015/grid/src/lib/pipes/column-command-filter.pipe.js +1 -1
- package/esm2015/grid/src/lib/pipes/column-html-template.pipe.js +1 -1
- package/esm2015/grid/src/lib/pipes/column-title.pipe.js +1 -1
- package/esm2015/grid/src/lib/pipes/column-values.pipe.js +1 -1
- package/esm2015/grid/src/lib/pipes/command-disabled.pipe.js +1 -1
- package/esm2015/grid/src/lib/pipes/command-filter.pipe.js +1 -1
- package/esm2015/grid/src/lib/pipes/command-hidden.pipe.js +1 -1
- package/esm2015/grid/src/lib/pipes/command-icon.pipe.js +1 -1
- package/esm2015/grid/src/lib/pipes/command-title.pipe.js +1 -1
- package/esm2015/grid/src/lib/pipes/dynamic-items.pipe.js +1 -1
- package/esm2015/grid/src/lib/pipes/editor-dynamic-item.pipe.js +1 -1
- package/esm2015/grid/src/lib/pipes/editor-handler.pipe.js +1 -1
- package/esm2015/grid/src/lib/pipes/editor-popup-visible.pipe.js +1 -1
- package/esm2015/grid/src/lib/pipes/editor-sub-information-handler.pipe.js +1 -1
- package/esm2015/grid/src/lib/pipes/editor-validate.pipe.js +1 -1
- package/esm2015/grid/src/lib/pipes/filter-mobile.pipe.js +1 -1
- package/esm2015/grid/src/lib/pipes/mobile-command-filter.js +1 -1
- package/esm2015/grid/src/lib/pipes/mobile-view-html-template.pipe.js +1 -1
- package/esm2015/grid/src/lib/pipes/value-transform.pipe.js +1 -1
- package/esm2015/grid/src/public-api.js +1 -1
- package/esm2015/grid-material/index.js +1 -1
- package/esm2015/grid-material/sd-angular-core-grid-material.js +1 -1
- package/esm2015/grid-material/src/lib/components/column-inline-filter/column-inline-filter.component.js +1 -1
- package/esm2015/grid-material/src/lib/components/desktop-cell/desktop-cell.component.js +1 -1
- package/esm2015/grid-material/src/lib/components/desktop-cell-children-view/desktop-cell-children-view.component.js +1 -1
- package/esm2015/grid-material/src/lib/components/desktop-cell-editor/desktop-cell-editor.component.js +1 -1
- package/esm2015/grid-material/src/lib/components/desktop-cell-view/desktop-cell-view.component.js +1 -1
- package/esm2015/grid-material/src/lib/components/desktop-command/desktop-command.component.js +1 -1
- package/esm2015/grid-material/src/lib/components/desktop-editor-validation/desktop-editor-validation.component.js +1 -1
- package/esm2015/grid-material/src/lib/components/dynamic-column/dynamic-column.component.js +1 -1
- package/esm2015/grid-material/src/lib/components/grid-filter/grid-filter.component.js +1 -1
- package/esm2015/grid-material/src/lib/components/popup-export/popup-export.component.js +1 -1
- package/esm2015/grid-material/src/lib/components/popup-filter/popup-filter.component.js +1 -1
- package/esm2015/grid-material/src/lib/components/popup-grid-configuration/popup-grid-configuration.component.js +1 -1
- package/esm2015/grid-material/src/lib/components/quick-action/quick-action.component.js +1 -1
- package/esm2015/grid-material/src/lib/directives/sd-material-cell-def.directive.js +1 -1
- package/esm2015/grid-material/src/lib/directives/sd-material-empty-data-def.directive.js +1 -1
- package/esm2015/grid-material/src/lib/directives/sd-material-filter-def.directive.js +1 -1
- package/esm2015/grid-material/src/lib/directives/sd-material-footer-def.directive.js +1 -1
- package/esm2015/grid-material/src/lib/directives/sd-material-sub-information-def.directive.js +1 -1
- package/esm2015/grid-material/src/lib/functions/calculate-sd-id.js +1 -1
- package/esm2015/grid-material/src/lib/grid-material.component.js +1 -1
- package/esm2015/grid-material/src/lib/grid-material.module.js +1 -1
- package/esm2015/grid-material/src/lib/models/grid-action.model.js +1 -1
- package/esm2015/grid-material/src/lib/models/grid-cell.model.js +1 -1
- package/esm2015/grid-material/src/lib/models/grid-column.model.js +1 -1
- package/esm2015/grid-material/src/lib/models/grid-command.model.js +1 -1
- package/esm2015/grid-material/src/lib/models/grid-config.model.js +1 -1
- package/esm2015/grid-material/src/lib/models/grid-configuration.model.js +1 -1
- package/esm2015/grid-material/src/lib/models/grid-editor.model.js +1 -1
- package/esm2015/grid-material/src/lib/models/grid-export.model.js +1 -1
- package/esm2015/grid-material/src/lib/models/grid-group.model.js +1 -1
- package/esm2015/grid-material/src/lib/models/grid-option.model.js +1 -1
- package/esm2015/grid-material/src/lib/models/grid-reload.model.js +1 -1
- package/esm2015/grid-material/src/lib/models/grid-selection.model.js +1 -1
- package/esm2015/grid-material/src/lib/models/grid-style.model.js +1 -1
- package/esm2015/grid-material/src/lib/models/grid-sub-information.model.js +1 -1
- package/esm2015/grid-material/src/lib/models/grid.model.js +1 -1
- package/esm2015/grid-material/src/lib/pipes/cell-view.pipe.js +1 -1
- package/esm2015/grid-material/src/lib/pipes/column-badge.pipe.js +1 -1
- package/esm2015/grid-material/src/lib/pipes/column-children-filter.pipe.js +1 -1
- package/esm2015/grid-material/src/lib/pipes/column-html-template.pipe.js +1 -1
- package/esm2015/grid-material/src/lib/pipes/column-title.pipe.js +1 -1
- package/esm2015/grid-material/src/lib/pipes/column-tooltip.pipe.js +1 -1
- package/esm2015/grid-material/src/lib/pipes/column-transform.pipe.js +1 -1
- package/esm2015/grid-material/src/lib/pipes/column-values.pipe.js +1 -1
- package/esm2015/grid-material/src/lib/pipes/command-disable.pipe.js +1 -1
- package/esm2015/grid-material/src/lib/pipes/command-filter.pipe.js +1 -1
- package/esm2015/grid-material/src/lib/pipes/command-icon.pipe.js +1 -1
- package/esm2015/grid-material/src/lib/pipes/command-title.pipe.js +1 -1
- package/esm2015/grid-material/src/lib/pipes/editor-handler-column.pipe.js +1 -1
- package/esm2015/grid-material/src/lib/pipes/editor-handler-row.pipe.js +1 -1
- package/esm2015/grid-material/src/lib/pipes/editor-validate.pipe.js +1 -1
- package/esm2015/grid-material/src/lib/pipes/filter-column.pipe.js +1 -1
- package/esm2015/grid-material/src/lib/pipes/filter-external.pipe.js +1 -1
- package/esm2015/grid-material/src/lib/pipes/grid-configuration-result.pipe.js +1 -1
- package/esm2015/grid-material/src/lib/pipes/sd-group.pipe.js +1 -1
- package/esm2015/grid-material/src/lib/pipes/selection-action-filter.pipe.js +1 -1
- package/esm2015/grid-material/src/lib/pipes/selection-disable.pipe.js +1 -1
- package/esm2015/grid-material/src/lib/pipes/selection-visible-select-all.pipe.js +1 -1
- package/esm2015/grid-material/src/lib/pipes/selection-visible.pipe.js +1 -1
- package/esm2015/grid-material/src/lib/pipes/style-row-css.pipe.js +1 -1
- package/esm2015/grid-material/src/lib/services/generated-column/generated-column.model.js +1 -1
- package/esm2015/grid-material/src/lib/services/generated-column/generated-column.service.js +1 -1
- package/esm2015/grid-material/src/lib/services/grid-configuration.service.js +1 -1
- package/esm2015/grid-material/src/lib/services/grid-filter/grid-filter.model.js +1 -1
- package/esm2015/grid-material/src/lib/services/grid-filter/grid-filter.service.js +1 -1
- package/esm2015/grid-material/src/public-api.js +1 -1
- package/esm2015/group/index.js +1 -1
- package/esm2015/group/sd-angular-core-group.js +1 -1
- package/esm2015/group/src/lib/group.component.js +2 -2
- package/esm2015/group/src/lib/group.module.js +1 -1
- package/esm2015/group/src/public-api.js +1 -1
- package/esm2015/header-title/index.js +1 -1
- package/esm2015/header-title/sd-angular-core-header-title.js +1 -1
- package/esm2015/header-title/src/lib/header-title.component.js +2 -2
- package/esm2015/header-title/src/lib/header-title.module.js +1 -1
- package/esm2015/header-title/src/public-api.js +1 -1
- package/esm2015/image-preview/index.js +1 -1
- package/esm2015/image-preview/sd-angular-core-image-preview.js +1 -1
- package/esm2015/image-preview/src/lib/directives/image-preview.directive.js +1 -1
- package/esm2015/image-preview/src/lib/image-preview/image-preview-sdmodal.component.js +1 -1
- package/esm2015/image-preview/src/lib/image-preview/image-preview.component.js +1 -1
- package/esm2015/image-preview/src/lib/image-preview/image-preview.module.js +1 -1
- package/esm2015/image-preview/src/lib/models/image-preview.model.js +1 -1
- package/esm2015/image-preview/src/public-api.js +1 -1
- package/esm2015/input/index.js +1 -1
- package/esm2015/input/sd-angular-core-input.js +1 -1
- package/esm2015/input/src/lib/directives/input-suffix.directive.js +1 -1
- package/esm2015/input/src/lib/directives/touch.directive.js +1 -1
- package/esm2015/input/src/lib/input-tooltip.pipe.js +1 -1
- package/esm2015/input/src/lib/input.component.js +1 -1
- package/esm2015/input/src/lib/input.module.js +1 -1
- package/esm2015/input/src/public-api.js +1 -1
- package/esm2015/input-currency/index.js +1 -1
- package/esm2015/input-currency/sd-angular-core-input-currency.js +1 -1
- package/esm2015/input-currency/src/lib/input-currency-tooltip.pipe.js +1 -1
- package/esm2015/input-currency/src/lib/input-currency.component.js +1 -1
- package/esm2015/input-currency/src/lib/input-currency.module.js +1 -1
- package/esm2015/input-currency/src/public-api.js +1 -1
- package/esm2015/input-dropdown/index.js +1 -1
- package/esm2015/input-dropdown/sd-angular-core-input-dropdown.js +1 -1
- package/esm2015/input-dropdown/src/lib/input-tooltip.pipe.js +1 -1
- package/esm2015/input-dropdown/src/lib/input.component.js +1 -1
- package/esm2015/input-dropdown/src/lib/input.module.js +1 -1
- package/esm2015/input-dropdown/src/public-api.js +1 -1
- package/esm2015/input-number/index.js +1 -1
- package/esm2015/input-number/sd-angular-core-input-number.js +1 -1
- package/esm2015/input-number/src/lib/input-number.component.js +1 -1
- package/esm2015/input-number/src/lib/input-number.module.js +1 -1
- package/esm2015/input-number/src/public-api.js +1 -1
- package/esm2015/input-upload-file/index.js +1 -1
- package/esm2015/input-upload-file/sd-angular-core-input-upload-file.js +1 -1
- package/esm2015/input-upload-file/src/lib/input-upload-file.component.js +1 -1
- package/esm2015/input-upload-file/src/lib/input-upload-file.module.js +1 -1
- package/esm2015/input-upload-file/src/public-api.js +1 -1
- package/esm2015/json-editor/index.js +1 -1
- package/esm2015/json-editor/sd-angular-core-json-editor.js +1 -1
- package/esm2015/json-editor/src/lib/json-editor.component.js +1 -1
- package/esm2015/json-editor/src/lib/json-editor.module.js +1 -1
- package/esm2015/json-editor/src/public-api.js +1 -1
- package/esm2015/konva/index.js +1 -1
- package/esm2015/konva/sd-angular-core-konva.js +1 -1
- package/esm2015/konva/src/lib/konva.module.js +1 -1
- package/esm2015/konva/src/lib/merge-images/merge-images.component.js +1 -1
- package/esm2015/konva/src/public-api.js +1 -1
- package/esm2015/label/index.js +1 -1
- package/esm2015/label/sd-angular-core-label.js +1 -1
- package/esm2015/label/src/lib/label.component.js +1 -1
- package/esm2015/label/src/lib/label.module.js +1 -1
- package/esm2015/label/src/public-api.js +1 -1
- package/esm2015/lib/core.module.js +1 -1
- package/esm2015/lib/material.module.js +1 -1
- package/esm2015/loading/index.js +1 -1
- package/esm2015/loading/sd-angular-core-loading.js +1 -1
- package/esm2015/loading/src/lib/loading.service.js +1 -1
- package/esm2015/loading/src/public-api.js +1 -1
- package/esm2015/modal/index.js +1 -1
- package/esm2015/modal/sd-angular-core-modal.js +1 -1
- package/esm2015/modal/src/lib/bottom-sheet/bottom-sheet-body/bottom-sheet-body.component.js +1 -1
- package/esm2015/modal/src/lib/bottom-sheet/bottom-sheet-footer/bottom-sheet-footer.component.js +1 -1
- package/esm2015/modal/src/lib/bottom-sheet/bottom-sheet-header/bottom-sheet-header.component.js +1 -1
- package/esm2015/modal/src/lib/bottom-sheet/bottom-sheet.component.js +1 -1
- package/esm2015/modal/src/lib/modal/modal-body/modal-body.component.js +1 -1
- package/esm2015/modal/src/lib/modal/modal-footer/modal-footer.component.js +1 -1
- package/esm2015/modal/src/lib/modal/modal-header/modal-header.component.js +1 -1
- package/esm2015/modal/src/lib/modal/modal.component.js +1 -1
- package/esm2015/modal/src/lib/modal.module.js +1 -1
- package/esm2015/modal/src/public-api.js +1 -1
- package/esm2015/modal-resizable/index.js +1 -1
- package/esm2015/modal-resizable/sd-angular-core-modal-resizable.js +1 -1
- package/esm2015/modal-resizable/src/lib/modal-resizable/modal-resizable.component.js +1 -1
- package/esm2015/modal-resizable/src/lib/modal-resizable.module.js +1 -1
- package/esm2015/modal-resizable/src/public-api.js +1 -1
- package/esm2015/month/index.js +1 -1
- package/esm2015/month/sd-angular-core-month.js +1 -1
- package/esm2015/month/src/lib/month.component.js +1 -1
- package/esm2015/month/src/lib/month.module.js +1 -1
- package/esm2015/month/src/public-api.js +1 -1
- package/esm2015/notify/index.js +1 -1
- package/esm2015/notify/sd-angular-core-notify.js +1 -1
- package/esm2015/notify/src/lib/components/dialog-confirm/dialog-confirm.component.js +1 -1
- package/esm2015/notify/src/lib/configurations/notify.configuration.js +1 -1
- package/esm2015/notify/src/lib/notify.module.js +1 -1
- package/esm2015/notify/src/lib/notify.service.js +1 -1
- package/esm2015/notify/src/public-api.js +1 -1
- package/esm2015/pdf/index.js +1 -1
- package/esm2015/pdf/sd-angular-core-pdf.js +1 -1
- package/esm2015/pdf/src/lib/pdf.module.js +1 -1
- package/esm2015/pdf/src/lib/pdf.service.js +1 -1
- package/esm2015/pdf/src/public-api.js +1 -1
- package/esm2015/popover/index.js +1 -1
- package/esm2015/popover/sd-angular-core-popover.js +1 -1
- package/esm2015/popover/src/lib/directives/popover-content.directive.js +1 -1
- package/esm2015/popover/src/lib/directives/popover-trigger.directive.js +1 -1
- package/esm2015/popover/src/lib/popover/popover.component.js +1 -1
- package/esm2015/popover/src/lib/popover.model.js +1 -1
- package/esm2015/popover/src/lib/popover.module.js +1 -1
- package/esm2015/popover/src/public-api.js +1 -1
- package/esm2015/print/index.js +1 -1
- package/esm2015/print/sd-angular-core-print.js +1 -1
- package/esm2015/print/src/lib/fonts/times/bold-italic.js +1 -1
- package/esm2015/print/src/lib/fonts/times/bold.js +1 -1
- package/esm2015/print/src/lib/fonts/times/italic.js +1 -1
- package/esm2015/print/src/lib/fonts/times/normal.js +1 -1
- package/esm2015/print/src/lib/print.component.js +1 -1
- package/esm2015/print/src/lib/print.module.js +1 -1
- package/esm2015/print/src/public-api.js +1 -1
- package/esm2015/public-api.js +1 -1
- package/esm2015/query-builder/index.js +2 -0
- package/esm2015/query-builder/sd-angular-core-query-builder.js +5 -0
- package/esm2015/query-builder/src/lib/form.module.js +106 -0
- package/esm2015/query-builder/src/public-api.js +3 -0
- package/esm2015/quick-action/index.js +1 -1
- package/esm2015/quick-action/sd-angular-core-quick-action.js +1 -1
- package/esm2015/quick-action/src/lib/quick-action.component.js +1 -1
- package/esm2015/quick-action/src/lib/quick-action.module.js +1 -1
- package/esm2015/quick-action/src/public-api.js +1 -1
- package/esm2015/radio/index.js +1 -1
- package/esm2015/radio/sd-angular-core-radio.js +1 -1
- package/esm2015/radio/src/lib/radio.component.js +1 -1
- package/esm2015/radio/src/lib/radio.module.js +1 -1
- package/esm2015/radio/src/public-api.js +1 -1
- package/esm2015/sd-angular-core.js +1 -1
- package/esm2015/select/index.js +1 -1
- package/esm2015/select/sd-angular-core-select.js +1 -1
- package/esm2015/select/src/lib/select-display-def.directive.js +1 -1
- package/esm2015/select/src/lib/select.component.js +1 -1
- package/esm2015/select/src/lib/select.module.js +1 -1
- package/esm2015/select/src/public-api.js +1 -1
- package/esm2015/select-badge/index.js +1 -1
- package/esm2015/select-badge/sd-angular-core-select-badge.js +1 -1
- package/esm2015/select-badge/src/lib/select-badge-display-def.directive.js +1 -1
- package/esm2015/select-badge/src/lib/select-badge.component.js +1 -1
- package/esm2015/select-badge/src/lib/select-badge.module.js +1 -1
- package/esm2015/select-badge/src/public-api.js +1 -1
- package/esm2015/select-editor/index.js +1 -1
- package/esm2015/select-editor/sd-angular-core-select-editor.js +1 -1
- package/esm2015/select-editor/src/lib/select-editor.component.js +1 -1
- package/esm2015/select-editor/src/lib/select-editor.module.js +1 -1
- package/esm2015/select-editor/src/public-api.js +1 -1
- package/esm2015/service/index.js +1 -1
- package/esm2015/service/sd-angular-core-service.js +1 -1
- package/esm2015/service/src/lib/service.module.js +1 -1
- package/esm2015/service/src/public-api.js +1 -1
- package/esm2015/setting/index.js +1 -1
- package/esm2015/setting/sd-angular-core-setting.js +1 -1
- package/esm2015/setting/src/lib/setting.model.js +1 -1
- package/esm2015/setting/src/lib/setting.service.js +1 -1
- package/esm2015/setting/src/public-api.js +1 -1
- package/esm2015/side-drawer/index.js +1 -1
- package/esm2015/side-drawer/sd-angular-core-side-drawer.js +1 -1
- package/esm2015/side-drawer/src/lib/side-drawer/side-drawer.component.js +5 -2
- package/esm2015/side-drawer/src/lib/side-drawer.module.js +1 -1
- package/esm2015/side-drawer/src/public-api.js +1 -1
- package/esm2015/switch/index.js +1 -1
- package/esm2015/switch/sd-angular-core-switch.js +1 -1
- package/esm2015/switch/src/lib/switch.component.js +1 -1
- package/esm2015/switch/src/lib/switch.module.js +1 -1
- package/esm2015/switch/src/public-api.js +1 -1
- package/esm2015/tab-router/index.js +1 -1
- package/esm2015/tab-router/sd-angular-core-tab-router.js +1 -1
- package/esm2015/tab-router/src/lib/actions/tab-router.action.js +1 -1
- package/esm2015/tab-router/src/lib/components/tab-router-item/tab-router-item.component.js +1 -1
- package/esm2015/tab-router/src/lib/components/tab-router-nav/tab-router-nav.component.js +1 -1
- package/esm2015/tab-router/src/lib/components/tab-router-outlet/tab-router-outlet.component.js +1 -1
- package/esm2015/tab-router/src/lib/decorators/tab.decorator.js +1 -1
- package/esm2015/tab-router/src/lib/directives/router-link-mouse-down.directive.js +1 -1
- package/esm2015/tab-router/src/lib/events/tab-router.event.js +1 -1
- package/esm2015/tab-router/src/lib/models/tab-router.model.js +1 -1
- package/esm2015/tab-router/src/lib/pipes/tab-info.pipe.js +1 -1
- package/esm2015/tab-router/src/lib/services/tab-decorator.service.js +1 -1
- package/esm2015/tab-router/src/lib/services/tab-router.service.js +1 -1
- package/esm2015/tab-router/src/lib/tab-router.module.js +1 -1
- package/esm2015/tab-router/src/public-api.js +1 -1
- package/esm2015/table/index.js +1 -1
- package/esm2015/table/sd-angular-core-table.js +1 -1
- package/esm2015/table/src/lib/components/column-inline-filter/column-inline-filter.component.js +1 -1
- package/esm2015/table/src/lib/components/desktop-cell/desktop-cell.component.js +1 -1
- package/esm2015/table/src/lib/components/desktop-cell-view/desktop-cell-view.component.js +1 -1
- package/esm2015/table/src/lib/components/desktop-command/desktop-command.component.js +1 -1
- package/esm2015/table/src/lib/components/popup-configuration/popup-configuration.component.js +1 -1
- package/esm2015/table/src/lib/components/popup-export/popup-export.component.js +1 -1
- package/esm2015/table/src/lib/components/popup-filter/popup-filter.component.js +1 -1
- package/esm2015/table/src/lib/components/quick-action/quick-action.component.js +1 -1
- package/esm2015/table/src/lib/components/table-filter/table-filter.component.js +1 -1
- package/esm2015/table/src/lib/directives/sd-table-cell-def.directive.js +1 -1
- package/esm2015/table/src/lib/directives/sd-table-expand-def.directive.js +1 -1
- package/esm2015/table/src/lib/directives/sd-table-filter-def.directive.js +1 -1
- package/esm2015/table/src/lib/directives/sd-table-footer-def.directive.js +1 -1
- package/esm2015/table/src/lib/models/index.js +1 -1
- package/esm2015/table/src/lib/models/table-column.model.js +1 -1
- package/esm2015/table/src/lib/models/table-command.model.js +1 -1
- package/esm2015/table/src/lib/models/table-configuration.model.js +1 -1
- package/esm2015/table/src/lib/models/table-item.model.js +1 -1
- package/esm2015/table/src/lib/models/table-option-config.model.js +1 -1
- package/esm2015/table/src/lib/models/table-option-expand.model.js +1 -1
- package/esm2015/table/src/lib/models/table-option-export.model.js +1 -1
- package/esm2015/table/src/lib/models/table-option-group.model.js +1 -1
- package/esm2015/table/src/lib/models/table-option-paginate.model.js +1 -1
- package/esm2015/table/src/lib/models/table-option-reload.model.js +1 -1
- package/esm2015/table/src/lib/models/table-option-selector.model.js +1 -1
- package/esm2015/table/src/lib/models/table-option-sort.model.js +1 -1
- package/esm2015/table/src/lib/models/table-option-style.model.js +1 -1
- package/esm2015/table/src/lib/models/table-option.model.js +1 -1
- package/esm2015/table/src/lib/pipes/column-tooltip.pipe.js +1 -1
- package/esm2015/table/src/lib/pipes/command-disable.pipe.js +1 -1
- package/esm2015/table/src/lib/pipes/command-filter.pipe.js +1 -1
- package/esm2015/table/src/lib/pipes/command-icon.pipe.js +1 -1
- package/esm2015/table/src/lib/pipes/command-title.pipe.js +1 -1
- package/esm2015/table/src/lib/pipes/filter-column.pipe.js +1 -1
- package/esm2015/table/src/lib/pipes/filter-external.pipe.js +1 -1
- package/esm2015/table/src/lib/pipes/sd-group.pipe.js +1 -1
- package/esm2015/table/src/lib/pipes/selection-action-filter.pipe.js +1 -1
- package/esm2015/table/src/lib/pipes/selection-disable.pipe.js +1 -1
- package/esm2015/table/src/lib/pipes/selection-visible-select-all.pipe.js +1 -1
- package/esm2015/table/src/lib/pipes/selection-visible.pipe.js +1 -1
- package/esm2015/table/src/lib/services/table-configuration.service.js +1 -1
- package/esm2015/table/src/lib/services/table-filter/table-filter.model.js +1 -1
- package/esm2015/table/src/lib/services/table-filter/table-filter.service.js +1 -1
- package/esm2015/table/src/lib/table.component.js +1 -1
- package/esm2015/table/src/lib/table.module.js +1 -1
- package/esm2015/table/src/public-api.js +1 -1
- package/esm2015/textarea/index.js +1 -1
- package/esm2015/textarea/sd-angular-core-textarea.js +1 -1
- package/esm2015/textarea/src/lib/textarea.component.js +1 -1
- package/esm2015/textarea/src/lib/textarea.module.js +1 -1
- package/esm2015/textarea/src/public-api.js +1 -1
- package/esm2015/time/index.js +1 -1
- package/esm2015/time/sd-angular-core-time.js +1 -1
- package/esm2015/time/src/lib/time.component.js +1 -1
- package/esm2015/time/src/lib/time.module.js +1 -1
- package/esm2015/time/src/public-api.js +1 -1
- package/esm2015/timeline/index.js +1 -1
- package/esm2015/timeline/sd-angular-core-timeline.js +1 -1
- package/esm2015/timeline/src/lib/components/timeline.component.js +1 -1
- package/esm2015/timeline/src/lib/directives/timeline-def.directive.js +1 -1
- package/esm2015/timeline/src/lib/timeline.module.js +1 -1
- package/esm2015/timeline/src/public-api.js +1 -1
- package/esm2015/translate/index.js +1 -1
- package/esm2015/translate/sd-angular-core-translate.js +1 -1
- package/esm2015/translate/src/lib/translate.model.js +1 -1
- package/esm2015/translate/src/lib/translate.module.js +1 -1
- package/esm2015/translate/src/lib/translate.pipe.js +1 -1
- package/esm2015/translate/src/lib/translate.service.js +1 -1
- package/esm2015/upload-excel/index.js +1 -1
- package/esm2015/upload-excel/sd-angular-core-upload-excel.js +1 -1
- package/esm2015/upload-excel/src/lib/pipes/columm-hidden.pipe.js +1 -1
- package/esm2015/upload-excel/src/lib/pipes/column-transform.pipe.js +1 -1
- package/esm2015/upload-excel/src/lib/upload-excel.component.js +1 -1
- package/esm2015/upload-excel/src/lib/upload-excel.model.js +1 -1
- package/esm2015/upload-excel/src/lib/upload-excel.module.js +1 -1
- package/esm2015/upload-excel/src/public-api.js +1 -1
- package/esm2015/upload-file/index.js +1 -1
- package/esm2015/upload-file/sd-angular-core-upload-file.js +1 -1
- package/esm2015/upload-file/src/lib/upload-file.component.js +1 -1
- package/esm2015/upload-file/src/lib/upload-file.module.js +1 -1
- package/esm2015/upload-file/src/public-api.js +1 -1
- package/esm2015/utility/index.js +1 -1
- package/esm2015/utility/sd-angular-core-utility.js +1 -1
- package/esm2015/utility/src/lib/directives/desktop.directive.js +1 -1
- package/esm2015/utility/src/lib/directives/mobile-tablet.directive.js +1 -1
- package/esm2015/utility/src/lib/directives/mobile.directive.js +1 -1
- package/esm2015/utility/src/lib/directives/tablet.directive.js +1 -1
- package/esm2015/utility/src/lib/pipes/currency.pipe.js +1 -1
- package/esm2015/utility/src/lib/pipes/safe-html.pipe.js +1 -1
- package/esm2015/utility/src/lib/pipes/time-different.pipe.js +1 -1
- package/esm2015/utility/src/lib/utility.module.js +1 -1
- package/esm2015/utility/src/lib/utility.service.js +1 -1
- package/esm2015/utility/src/public-api.js +1 -1
- package/esm2015/view/index.js +1 -1
- package/esm2015/view/sd-angular-core-view.js +1 -1
- package/esm2015/view/src/lib/view.module.js +1 -1
- package/esm2015/view/src/public-api.js +1 -1
- package/esm2015/zip/index.js +1 -1
- package/esm2015/zip/sd-angular-core-zip.js +1 -1
- package/esm2015/zip/src/lib/zip.module.js +1 -1
- package/esm2015/zip/src/lib/zip.service.js +1 -1
- package/esm2015/zip/src/public-api.js +1 -1
- package/fesm2015/sd-angular-core-group.js +1 -1
- package/fesm2015/sd-angular-core-group.js.map +1 -1
- package/fesm2015/sd-angular-core-header-title.js +1 -1
- package/fesm2015/sd-angular-core-header-title.js.map +1 -1
- package/fesm2015/sd-angular-core-query-builder.js +113 -0
- package/fesm2015/sd-angular-core-query-builder.js.map +1 -0
- package/fesm2015/sd-angular-core-side-drawer.js +4 -1
- package/fesm2015/sd-angular-core-side-drawer.js.map +1 -1
- package/group/sd-angular-core-group.metadata.json +1 -1
- package/header-title/sd-angular-core-header-title.metadata.json +1 -1
- package/package.json +1 -1
- package/query-builder/index.d.ts +1 -0
- package/query-builder/package.json +12 -0
- package/query-builder/sd-angular-core-query-builder.d.ts +4 -0
- package/query-builder/sd-angular-core-query-builder.metadata.json +1 -0
- package/query-builder/src/lib/form.module.d.ts +2 -0
- package/query-builder/src/public-api.d.ts +2 -0
- package/{sd-angular-core-1.3.252.tgz → sd-angular-core-1.3.254.tgz} +0 -0
- package/side-drawer/sd-angular-core-side-drawer.metadata.json +1 -1
- package/side-drawer/src/lib/side-drawer/side-drawer.component.d.ts +1 -0
|
@@ -1188,4 +1188,4 @@ SdGrid.propDecorators = {
|
|
|
1188
1188
|
paginator: [{ type: ViewChild, args: [MatPaginator,] }],
|
|
1189
1189
|
option: [{ type: Input }]
|
|
1190
1190
|
};
|
|
1191
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiQzovVXNlcnMvbmdoaWF0dDE1X29uZW1vdW50L0RvY3VtZW50cy9saWItY29yZS11aS9wcm9qZWN0cy9zZC1jb3JlL2dyaWQvIiwic291cmNlcyI6WyJzcmMvbGliL2dyaWQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxLQUFLLEVBQ0wsU0FBUyxFQUVULHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsWUFBWSxFQUNaLFNBQVMsRUFHVCxNQUFNLEVBQ04sUUFBUSxFQUNSLGVBQWUsRUFDaEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzVELE9BQU8sQ0FBQyxNQUFNLFFBQVEsQ0FBQztBQUV2QixPQUFPLEVBQ0wsWUFBWSxFQUNiLE1BQU0sc0JBQXNCLENBQUM7QUFFOUIsT0FBTyxFQUNMLGVBQWUsRUFDaEIsTUFBTSx5QkFBeUIsQ0FBQztBQUVqQyxPQUFPLEVBQ0wsZ0JBQWdCLEVBQ2pCLE1BQU0sMEJBQTBCLENBQUM7QUFFbEMsT0FBTyxFQUNMLGtCQUFrQixFQUNuQixNQUFNLDRCQUE0QixDQUFDO0FBRXBDLE9BQU8sRUFBZ0IsaUJBQWlCLEVBQWdELE1BQU0sY0FBYyxDQUFDO0FBSTdHLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBR2hFLE9BQU8sRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBTTNDLE9BQU8sRUFBc0IsV0FBVyxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDcEYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzNELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFD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QUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUM7b0JBQzdFLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEtBQUssS0FBSyxFQUFFO3dCQUNwQyxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxJQUFJLElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLFNBQVMsQ0FBQzs2QkFDckcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7d0JBQ2pELE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsSUFBSSxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsSUFBSSxXQUFXLEVBQUUsQ0FBQzt3QkFDbEksTUFBTSxRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQzt3QkFDaEQsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDO3dCQUN2RCxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQzt3QkFDbkIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7cUJBQ3BCO3lCQUFNO3dCQUNMLE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxD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Q29tcG9uZW50LFxyXG4gIElucHV0LFxyXG4gIFZpZXdDaGlsZCxcclxuICBFbGVtZW50UmVmLFxyXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIFZpZXdDaGlsZHJlbixcclxuICBRdWVyeUxpc3QsXHJcbiAgQWZ0ZXJWaWV3SW5pdCxcclxuICBPbkRlc3Ryb3ksXHJcbiAgSW5qZWN0LFxyXG4gIE9wdGlvbmFsLFxyXG4gIENvbnRlbnRDaGlsZHJlblxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBEYXRlUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IERldmljZURldGVjdG9yU2VydmljZSB9IGZyb20gJ25neC1kZXZpY2UtZGV0ZWN0b3InO1xyXG5pbXBvcnQgJCBmcm9tICdqcXVlcnknO1xyXG5cclxuaW1wb3J0IHtcclxuICBTZEFwaVNlcnZpY2VcclxufSBmcm9tICdAc2QtYW5ndWxhci9jb3JlL2FwaSc7XHJcblxyXG5pbXBvcnQge1xyXG4gIFNkTm90aWZ5U2VydmljZVxyXG59IGZyb20gJ0BzZC1hbmd1bGFyL2NvcmUvbm90aWZ5JztcclxuXHJcbmltcG9ydCB7XHJcbiAgU2RMb2FkaW5nU2VydmljZVxyXG59IGZyb20gJ0BzZC1hbmd1bGFyL2NvcmUvbG9hZGluZyc7XHJcblxyXG5pbXBvcnQge1xyXG4gIFNkVHJhbnNsYXRlU2VydmljZVxyXG59IGZyb20gJ0BzZC1hbmd1bGFyL2NvcmUvdHJhbnNsYXRlJztcclxuXHJcbmltcG9ydCB7IFNkR3JpZE9wdGlvbiwgZGVmYXVsdEdyaWRPcHRpb24sIEdyaWRJdGVtLCBTZEdyaWRDb2x1bW4sIFNkR3JpZEV4dGVybmFsRmlsdGVyIH0gZnJvbSAnLi9ncmlkLm1vZGVsJztcclxuXHJcbmltcG9ydCB7IENvbmZpZ1Jlc3VsdCB9IGZyb20gJy4vY29tcG9uZW50cy9ncmlkLWNvbmZpZy9ncmlkLWNvbmZpZy5tb2RlbCc7XHJcbmltcG9ydCB7IFNkR3JpZENvbmZpZyB9IGZyb20gJy4vY29tcG9uZW50cy9ncmlkLWNvbmZpZy9ncmlkLWNvbmZpZy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBFZGl0b3JIYW5kbGVyUGlwZSB9IGZyb20gJy4vcGlwZXMvZWRpdG9yLWhhbmRsZXIucGlwZSc7XHJcbmltcG9ydCB7IFNkR3JpZFBvcHVwRWRpdG9yIH0gZnJvbSAnLi9jb21wb25lbnRzL2dyaWQtcG9wdXAtZWRpdG9yL2dyaWQtcG9wdXAtZWRpdG9yLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFNkR3JpZFBvcHVwRmlsdGVyIH0gZnJvbSAnLi9jb21wb25lbnRzL2dyaWQtcG9wdXAtZmlsdGVyL2dyaWQtcG9wdXAtZmlsdGVyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IG1lcmdlLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgU2RHcmlkUG9wdXBFeHBvcnRFeGNlbCB9IGZyb20gJy4vY29tcG9uZW50cy9ncmlkLXBvcHVwLWV4cG9ydC1leGNlbC9ncmlkLXBvcHVwLWV4cG9ydC1leGNlbC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBRdWlja0ZpbHRlciwgRmlsdGVyQ29uZmlndXJhdGlvbiB9IGZyb20gJy4vY29tcG9uZW50cy9ncmlkLXBvcHVwLWZpbHRlci9ncmlkLXBvcHVwLWZpbHRlci5tb2RlbCc7XHJcbmltcG9ydCB7IE1hdFNlbGVjdCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NlbGVjdCc7XHJcbmltcG9ydCB7IFNkR3JpZEZpbHRlckluZm8gfSBmcm9tICcuL21vZGVscy9maWx0ZXItaW5mby5tb2RlbCc7XHJcblxyXG5pbXBvcnQgeyBJR3JpZENvbmZpZ3VyYXRpb24sIEdSSURfQ09ORklHIH0gZnJvbSAnLi9tb2RlbHMvZ3JpZC1jb25maWd1cmF0aW9uLm1vZGVsJztcclxuaW1wb3J0IHsgTWF0UGFnaW5hdG9yIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcGFnaW5hdG9yJztcclxuaW1wb3J0IHsgU2RDZWxsRGVmRGlyZWN0aXZlIH0gZnJvbSAnLi9kaXJlY3RpdmVzL2NlbGwtZGVmLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IFNkQ2VsbEZvb3RlckRldkRpcmVjdGl2ZSB9IGZyb20gJy4vZGlyZWN0aXZlcy9jZWxsLWZvb3Rlci1kZWYuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgc3RhcnRXaXRoIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBTZENlbGxFZGl0b3JEZWZEaXJlY3RpdmUgfSBmcm9tICcuL2RpcmVjdGl2ZXMvY2VsbC1lZGl0b3ItZGVmLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IElIYW5kbGVyU2VydmVyLCBJSGFuZGxlckxvY2FsIH0gZnJvbSAnLi9tb2RlbHMvaGFuZGxlcic7XHJcbmltcG9ydCB7IEhhbmRsZXJMb2NhbCB9IGZyb20gJy4vbW9kZWxzL2hhbmRsZXItbG9jYWwnO1xyXG5pbXBvcnQgeyBIYW5kbGVyRG90bmV0IH0gZnJvbSAnLi9tb2RlbHMvaGFuZGxlci1kb3RuZXQnO1xyXG5pbXBvcnQgeyBTZEdyaWRJbXBvcnRFeGNlbCB9IGZyb20gJy4vY29tcG9uZW50cy9ncmlkLWltcG9ydC1leGNlbC9ncmlkLWltcG9ydC1leGNlbC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBTZEV4cG9ydFNlcnZpY2UgfSBmcm9tICdAc2QtYW5ndWxhci9jb3JlL2V4cG9ydCc7XHJcblxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdzZC1ncmlkJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vZ3JpZC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vZ3JpZC5jb21wb25lbnQuc2NzcyddLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTZEdyaWQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xyXG4gIHByaXZhdGUgaGFuZGxlcjogSUhhbmRsZXJTZXJ2ZXIgfCBJSGFuZGxlckxvY2FsO1xyXG4gIGlzTW9iaWxlT3JUYWJsZXQgPSBmYWxzZTtcclxuICBkaXNwbGF5S2V5ID0gJ1NEQ1VTVE9NJztcclxuICBncmlkT3B0aW9uOiBTZEdyaWRPcHRpb247XHJcbiAgb3JkZXJCeTogc3RyaW5nO1xyXG4gIG9yZGVyRGlyZWN0aW9uOiAnQVNDJyB8ICdERVNDJztcclxuICBsb2NhbEl0ZW1zOiBHcmlkSXRlbVtdID0gW107XHJcbiAgaXRlbXM6IEdyaWRJdGVtW10gPSBbXTtcclxuICB0b3RhbDogbnVtYmVyO1xyXG4gIGZpbHRlcjoge1xyXG4gICAgW2tleTogc3RyaW5nXTogYW55XHJcbiAgfSA9IHt9O1xyXG4gIGV4dGVybmFsRmlsdGVyOiB7XHJcbiAgICBba2V5OiBzdHJpbmddOiBhbnlcclxuICB9ID0ge307XHJcbiAgaGlkZGVuUGFnaW5hdGUgPSBmYWxzZTtcclxuICBpbmxpbmVFeHRlcm5hbDoge1xyXG4gICAgW2tleTogc3RyaW5nXTogYm9vbGVhbjtcclxuICB9ID0ge307XHJcbiAgaW5saW5lQ29sdW1uOiB7XHJcbiAgICBba2V5OiBzdHJpbmddOiBib29sZWFuO1xyXG4gIH0gPSB7fTtcclxuICBxdWlja0ZpbHRlcnM6IFF1aWNrRmlsdGVyW10gPSBbXTtcclxuICBzZWxlY3RlZFF1aWNrRmlsdGVyOiBzdHJpbmc7XHJcbiAgLy8gUGFnaW5hdGVcclxuICBwYWdlcyA9IFsxXTtcclxuICBwYWdlQ291bnQgPSA1O1xyXG4gIHRvdGFsUGFnZSA9IDE7XHJcblxyXG4gIC8vIExvYWRpbmdcclxuICBpc0xvYWRpbmcgPSBmYWxzZTtcclxuXHJcbiAgdmlld0l0ZW1zOiBHcmlkSXRlbVtdID0gW107XHJcbiAgc3VtYXJpemU6IHN0cmluZztcclxuXHJcbiAgZml4ZWRDb2x1bW5zOiBTZEdyaWRDb2x1bW5bXSA9IFtdO1xyXG4gIG5vcm1hbENvbHVtbnM6IFNkR3JpZENvbHVtbltdID0gW107XHJcbiAgY29sdW1uczogU2RHcmlkQ29sdW1uW10gPSBbXTtcclxuXHJcbiAgaXNDaGVja2VkQWxsID0gZmFsc2U7XHJcbiAgc2VsZWN0ZWRJdGVtczogYW55W10gPSBbXTtcclxuXHJcbiAgQFZpZXdDaGlsZHJlbignZml4ZWRIZWFkZXInKSBwcml2YXRlIGZpeGVkSGVhZGVyczogUXVlcnlMaXN0PEVsZW1lbnRSZWY+O1xyXG4gIEBWaWV3Q2hpbGRyZW4oJ2ZpeGVkQm9keScpIHByaXZhdGUgZml4ZWRCb2RpZXM6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPjtcclxuXHJcbiAgQFZpZXdDaGlsZCgnZml4ZWRHcmlkQ29udGFpbmVyJykgZml4ZWRHcmlkQ29udGFpbmVyOiBFbGVtZW50UmVmO1xyXG4gIEBWaWV3Q2hpbGQoJ2dyaWRGaXhlZEJvZHknKSBncmlkRml4ZWRCb2R5OiBFbGVtZW50UmVmO1xyXG5cclxuICBAVmlld0NoaWxkKCdncmlkQ29udGFpbmVyJykgZ3JpZENvbnRhaW5lcjogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKCdncmlkSGVhZGVyJykgZ3JpZEhlYWRlcjogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKCdncmlkQm9keScpIGdyaWRCb2R5OiBFbGVtZW50UmVmO1xyXG5cclxuICBAVmlld0NoaWxkKCdzZEdyaWRDb25maWcnLCB7IHN0YXRpYzogdHJ1ZSB9KSBzZEdyaWRDb25maWc6IFNkR3JpZENvbmZpZztcclxuICBAVmlld0NoaWxkKCdzZEdyaWRQb3B1cEVkaXRvcicpIHNkR3JpZFBvcHVwRWRpdG9yOiBTZEdyaWRQb3B1cEVkaXRvcjtcclxuXHJcbiAgQFZpZXdDaGlsZCgnc2RHcmlkUG9wdXBGaWx0ZXInKSBzZEdyaWRQb3B1cEZpbHRlcjogU2RHcmlkUG9wdXBGaWx0ZXI7XHJcbiAgQFZpZXdDaGlsZCgnbWF0U2VsZWN0JykgbWF0U2VsZWN0OiBNYXRTZWxlY3Q7XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ3NkR3JpZFBvcHVwRXhwb3J0RXhjZWwnKSBzZEdyaWRQb3B1cEV4cG9ydEV4Y2VsOiBTZEdyaWRQb3B1cEV4cG9ydEV4Y2VsO1xyXG4gIEBWaWV3Q2hpbGQoJ3NkR3JpZEltcG9ydEV4Y2VsJykgc2RHcmlkSW1wb3J0RXhjZWw6IFNkR3JpZEltcG9ydEV4Y2VsO1xyXG5cclxuICBAQ29udGVudENoaWxkcmVuKFNkQ2VsbERlZkRpcmVjdGl2ZSkgY2VsbERlZnMgPSBuZXcgUXVlcnlMaXN0PFNkQ2VsbERlZkRpcmVjdGl2ZT4oKTtcclxuICBjZWxsRGVmOiB7XHJcbiAgICBbY29sdW1uOiBzdHJpbmddOiBTZENlbGxEZWZEaXJlY3RpdmVcclxuICB9ID0ge307XHJcblxyXG4gIEBDb250ZW50Q2hpbGRyZW4oU2RDZWxsRWRpdG9yRGVmRGlyZWN0aXZlKSBjZWxsRWRpdG9yRGVmcyA9IG5ldyBRdWVyeUxpc3Q8U2RDZWxsRWRpdG9yRGVmRGlyZWN0aXZlPigpO1xyXG4gIGNlbGxFZGl0b3JEZWY6IHtcclxuICAgIFtjb2x1bW46IHN0cmluZ106IFNkQ2VsbEVkaXRvckRlZkRpcmVjdGl2ZVxyXG4gIH0gPSB7fTtcclxuXHJcbiAgQENvbnRlbnRDaGlsZHJlbihTZENlbGxGb290ZXJEZXZEaXJlY3RpdmUpIGNlbGxGb290ZXJEZWZzID0gbmV3IFF1ZXJ5TGlzdDxTZENlbGxGb290ZXJEZXZEaXJlY3RpdmU+KCk7XHJcbiAgY2VsbEZvb3RlckRlZjoge1xyXG4gICAgW2NvbHVtbjogc3RyaW5nXTogU2RDZWxsRm9vdGVyRGV2RGlyZWN0aXZlW107XHJcbiAgfSA9IHt9O1xyXG4gICNudW1iZXJPZkZvb3RlclJvd3MgPSAwO1xyXG4gIGZvb3RlclJvd3M6IG51bWJlcltdID0gW107XHJcblxyXG4gICNwYWdpbmF0b3I6IE1hdFBhZ2luYXRvcjtcclxuICBAVmlld0NoaWxkKE1hdFBhZ2luYXRvcikgc2V0IHBhZ2luYXRvcihwYWdpbmF0b3I6IE1hdFBhZ2luYXRvcikge1xyXG4gICAgaWYgKHBhZ2luYXRvciAmJiB0aGlzLiNwYWdpbmF0b3IgIT09IHBhZ2luYXRvcikge1xyXG4gICAgICB0aGlzLiNwYWdpbmF0b3IgPSBwYWdpbmF0b3I7XHJcbiAgICAgIHRoaXMuI3N1YnNjcmlwdGlvbi5hZGQocGFnaW5hdG9yLnBhZ2Uuc3Vic2NyaWJlKHRoaXMuc2VsZWN0UGFnZSkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgQElucHV0KCkgc2V0IG9wdGlvbih2YWx1ZTogU2RHcmlkT3B0aW9uKSB7XHJcbiAgICB0aGlzLnNldE9wdGlvbih2YWx1ZSk7XHJcbiAgfVxyXG4gIHNlbGVjdGVkSXRlbTogYW55ID0gbnVsbDtcclxuICAjc3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xyXG4gIHJvd0hhbmRsZXIgPSB7XHJcbiAgICBjbGljazogKGl0ZW06IGFueSkgPT4ge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkSXRlbSA9IGl0ZW07XHJcbiAgICAgIGlmICh0aGlzLmdyaWRPcHRpb24ub25DbGlja1Jvdykge1xyXG4gICAgICAgIHRoaXMuZ3JpZE9wdGlvbi5vbkNsaWNrUm93KGl0ZW0pO1xyXG4gICAgICB9XHJcbiAgICB9LFxyXG4gICAgZGJsQ2xpY2s6IChpdGVtOiBhbnkpID0+IHtcclxuICAgICAgdGhpcy5zZWxlY3RlZEl0ZW0gPSBpdGVtO1xyXG4gICAgICBpZiAodGhpcy5ncmlkT3B0aW9uLm9uRGJsQ2xpY2tSb3cpIHtcclxuICAgICAgICB0aGlzLmdyaWRPcHRpb24ub25EYmxDbGlja1JvdyhpdGVtKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gIHByaXZhdGUgc2V0T3B0aW9uID0gKG9wdGlvbjogU2RHcmlkT3B0aW9uKSA9PiB7XHJcbiAgICBvcHRpb24gPSB0aGlzLmluaXRDb25maWd1cmF0aW9uKG9wdGlvbik7XHJcbiAgICBvcHRpb24gPSB0aGlzLmluaXRUcmFuc2xhdGUob3B0aW9uKTtcclxuICAgIGRlbGV0ZSB0aGlzLmdyaWRPcHRpb247XHJcbiAgICB0aGlzLmdyaWRPcHRpb24gPSBvcHRpb247XHJcbiAgICAvLyBMb+G6oWkgYuG7jyBuaOG7r25nIGNvbW1hbmQgYuG7iyDhuqluXHJcbiAgICB0aGlzLmdyaWRPcHRpb24uY29tbWFuZHMgPSB0aGlzLmdyaWRPcHRpb24uY29tbWFuZHMuZmlsdGVyKGNvbW1hbmQgPT4ge1xyXG4gICAgICBjb25zdCBoaWRkZW4gPSBjb21tYW5kLmhpZGRlbjtcclxuICAgICAgaWYgKGhpZGRlbiAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiAoaGlkZGVuKSA9PT0gJ2Jvb2xlYW4nKSB7XHJcbiAgICAgICAgICByZXR1cm4gIWhpZGRlbjtcclxuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiAoaGlkZGVuKSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgcmV0dXJuICFoaWRkZW4oKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgdGhpcy5zZEdyaWRDb25maWcuc2V0T3B0aW9uKHtcclxuICAgICAga2V5OiBvcHRpb24ua2V5LFxyXG4gICAgICBwYWdlU2l6ZTogdGhpcy5ncmlkT3B0aW9uLnBhZ2luYXRlLnBhZ2VTaXplLFxyXG4gICAgICBjb2x1bW5zOiB0aGlzLmdyaWRPcHRpb24uY29sdW1uc1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLmluaXRFeHRlcm5hbEZpbHRlcigpO1xyXG4gICAgdGhpcy5yZXNpemUoKTtcclxuICAgIHRoaXMuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpbml0Q29uZmlndXJhdGlvbiA9IChvcHRpb246IFNkR3JpZE9wdGlvbikgPT4ge1xyXG4gICAgY29uc3QgZ3JpZENvbmZpZ3VyYXRpb24gPSB0aGlzLmNvbmZpZ3VyYXRpb247XHJcbiAgICAvLyBGaWx0ZXJcclxuICAgIGlmICghb3B0aW9uLmZpbHRlcj8udHlwZSAmJiBncmlkQ29uZmlndXJhdGlvbj8uZmlsdGVyPy50eXBlKSB7XHJcbiAgICAgIGlmICghb3B0aW9uLmZpbHRlcikge1xyXG4gICAgICAgIG9wdGlvbi5maWx0ZXIgPSB7XHJcbiAgICAgICAgICB0eXBlOiBncmlkQ29uZmlndXJhdGlvbi5maWx0ZXIudHlwZVxyXG4gICAgICAgIH07XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgb3B0aW9uLmZpbHRlci50eXBlID0gZ3JpZENvbmZpZ3VyYXRpb24uZmlsdGVyLnR5cGU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICghb3B0aW9uLmZpbHRlcj8uY29sdW1uSW5saW5lICYmIGdyaWRDb25maWd1cmF0aW9uPy5maWx0ZXI/LmNvbHVtbklubGluZSkge1xyXG4gICAgICBpZiAoIW9wdGlvbi5maWx0ZXIpIHtcclxuICAgICAgICBvcHRpb24uZmlsdGVyID0ge1xyXG4gICAgICAgICAgY29sdW1uSW5saW5lOiBncmlkQ29uZmlndXJhdGlvbi5maWx0ZXIuY29sdW1uSW5saW5lXHJcbiAgICAgICAgfTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBvcHRpb24uZmlsdGVyLmNvbHVtbklubGluZSA9IGdyaWRDb25maWd1cmF0aW9uLmZpbHRlci5jb2x1bW5JbmxpbmU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICghb3B0aW9uLmZpbHRlcj8ucXVpY2tGaWx0ZXJWaXNpYmlsaXR5ICYmIGdyaWRDb25maWd1cmF0aW9uPy5maWx0ZXI/LnF1aWNrRmlsdGVyVmlzaWJpbGl0eSkge1xyXG4gICAgICBpZiAoIW9wdGlvbi5maWx0ZXIpIHtcclxuICAgICAgICBvcHRpb24uZmlsdGVyID0ge1xyXG4gICAgICAgICAgcXVpY2tGaWx0ZXJWaXNpYmlsaXR5OiBncmlkQ29uZmlndXJhdGlvbi5maWx0ZXIucXVpY2tGaWx0ZXJWaXNpYmlsaXR5XHJcbiAgICAgICAgfTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBvcHRpb24uZmlsdGVyLnF1aWNrRmlsdGVyVmlzaWJpbGl0eSA9IGdyaWRDb25maWd1cmF0aW9uLmZpbHRlci5xdWlja0ZpbHRlclZpc2liaWxpdHk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIC8vIFRyYW5zbGF0ZVxyXG4gICAgb3B0aW9uLnRyYW5zbGF0ZSA9IG9wdGlvbi50cmFuc2xhdGUgPz8gZ3JpZENvbmZpZ3VyYXRpb24/LnRyYW5zbGF0ZTtcclxuICAgIHN3aXRjaCAob3B0aW9uLnR5cGUpIHtcclxuICAgICAgY2FzZSAnbG9jYWwnOlxyXG4gICAgICAgIHRoaXMuaGFuZGxlciA9IHRoaXMuaGFuZGxlckxvY2FsO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdkb3RuZXQnOlxyXG4gICAgICAgIHRoaXMuaGFuZGxlciA9IHRoaXMuaGFuZGxlckRvdG5ldDtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnY3VzdG9tJzpcclxuICAgICAgICB0aGlzLmhhbmRsZXIgPSBvcHRpb24uaGFuZGxlckN1c3RvbSB8fCBncmlkQ29uZmlndXJhdGlvbj8uaGFuZGxlckN1c3RvbTtcclxuICAgICAgICBpZiAoIXRoaXMuaGFuZGxlcikge1xyXG4gICAgICAgICAgdGhpcy5ub3RpZnlTZXJ2aWNlLm5vdGlmeS53YXJuaW5nKGBIYW5kbGVyIGN1c3RvbSB3YXMgbm90IGZvdW5kYCk7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHsgLi4uZGVmYXVsdEdyaWRPcHRpb24sIC4uLm9wdGlvbiB9O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpbml0VHJhbnNsYXRlID0gKG9wdGlvbjogU2RHcmlkT3B0aW9uKSA9PiB7XHJcbiAgICBjb25zdCB7IHRyYW5zbGF0ZSB9ID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlO1xyXG4gICAgb3B0aW9uLmNvbW1hbmRzPy5mb3JFYWNoKGNvbW1hbmQgPT4ge1xyXG4gICAgICBpZiAoIW9wdGlvbi50cmFuc2xhdGUpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHR5cGVvZiAoY29tbWFuZC50aXRsZSkgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgY29tbWFuZC50aXRsZSA9IHRyYW5zbGF0ZShjb21tYW5kLnRpdGxlKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoJ2NoaWxkcmVuJyBpbiBjb21tYW5kKSB7XHJcbiAgICAgICAgY29tbWFuZC5jaGlsZHJlbj8uZm9yRWFjaChjaGlsZENvbW1hbmQgPT4ge1xyXG4gICAgICAgICAgaWYgKHR5cGVvZiAoY2hpbGRDb21tYW5kLnRpdGxlKSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgY2hpbGRDb21tYW5kLnRpdGxlID0gdHJhbnNsYXRlKGNoaWxkQ29tbWFuZC50aXRsZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgb3B0aW9uLmNvbHVtbnM/LmZvckVhY2goY29sdW1uID0+IHtcclxuICAgICAgaWYgKGNvbHVtbi50cmFuc2xhdGUgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChvcHRpb24udHJhbnNsYXRlIHx8IGNvbHVtbi50cmFuc2xhdGUpIHtcclxuICAgICAgICBjb2x1bW4udGl0bGUgPSB0cmFuc2xhdGUoY29sdW1uLnRpdGxlKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29sdW1uLnR5cGUgPT09ICdjaGlsZHJlbicpIHtcclxuICAgICAgICBjb2x1bW4/LmNoaWxkcmVuPy5mb3JFYWNoKGNoaWxkQ29sdW1uID0+IHtcclxuICAgICAgICAgIGlmIChjaGlsZENvbHVtbi50cmFuc2xhdGUgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChvcHRpb24udHJhbnNsYXRlIHx8IGNoaWxkQ29sdW1uLnRyYW5zbGF0ZSkge1xyXG4gICAgICAgICAgICBjaGlsZENvbHVtbi50aXRsZSA9IHRyYW5zbGF0ZShjaGlsZENvbHVtbi50aXRsZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgb3B0aW9uLmZpbHRlcj8uZXh0ZXJuYWxGaWx0ZXJzPy5mb3JFYWNoKGV4dGVybmFsRmlsdGVyID0+IHtcclxuICAgICAgaWYgKG9wdGlvbi50cmFuc2xhdGUpIHtcclxuICAgICAgICBleHRlcm5hbEZpbHRlci50aXRsZSA9IHRyYW5zbGF0ZShleHRlcm5hbEZpbHRlci50aXRsZSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIG9wdGlvbjtcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgQEluamVjdChHUklEX0NPTkZJRykgQE9wdGlvbmFsKCkgcHVibGljIGNvbmZpZ3VyYXRpb246IElHcmlkQ29uZmlndXJhdGlvbixcclxuICAgIHByaXZhdGUgcmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIGRldmljZVNlcnZpY2U6IERldmljZURldGVjdG9yU2VydmljZSxcclxuICAgIHByaXZhdGUgaGFuZGxlckxvY2FsOiBIYW5kbGVyTG9jYWwsXHJcbiAgICBwcml2YXRlIGhhbmRsZXJEb3RuZXQ6IEhhbmRsZXJEb3RuZXQsXHJcbiAgICBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2U6IFNkVHJhbnNsYXRlU2VydmljZSxcclxuICAgIHByaXZhdGUgZGF0ZVBpcGU6IERhdGVQaXBlLFxyXG4gICAgcHJpdmF0ZSBsb2FkaW5nU2VydmljZTogU2RMb2FkaW5nU2VydmljZSxcclxuICAgIHByaXZhdGUgYXBpU2VydmljZTogU2RBcGlTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBleHBvcnRTZXJ2aWNlOiBTZEV4cG9ydFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIG5vdGlmeVNlcnZpY2U6IFNkTm90aWZ5U2VydmljZSxcclxuICAgIHByaXZhdGUgZWRpdG9yVmlzaWJsZVBpcGU6IEVkaXRvckhhbmRsZXJQaXBlKSB7XHJcbiAgICB0aGlzLmlzTW9iaWxlT3JUYWJsZXQgPSAhZGV2aWNlU2VydmljZS5pc0Rlc2t0b3AoKTtcclxuICAgIC8vIHRoaXMucmVmLmRldGFjaCgpO1xyXG4gICAgLy8gc2V0SW50ZXJ2YWwoKCkgPT4ge1xyXG4gICAgLy8gICB0aGlzLnJlZi5tYXJrRm9yQ2hlY2soKTtcclxuICAgIC8vIH0sIDEwMDApO1xyXG4gICAgLy8gcmVmLmRldGFjaCgpO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgdGhpcy4jc3Vic2NyaXB0aW9uLmFkZCh0aGlzLmZpeGVkSGVhZGVycy5jaGFuZ2VzLnBpcGUoc3RhcnRXaXRoKFtdKSkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgZml4ZWRIZWFkZXJzID0gdGhpcy5maXhlZEhlYWRlcnMudG9BcnJheSgpO1xyXG4gICAgICAgIGlmIChmaXhlZEhlYWRlcnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgbGV0IGxlZnQgPSAkKGZpeGVkSGVhZGVyc1swXS5uYXRpdmVFbGVtZW50KS5vdXRlcldpZHRoKHRydWUpO1xyXG4gICAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBmaXhlZEhlYWRlcnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgJChmaXhlZEhlYWRlcnNbaV0ubmF0aXZlRWxlbWVudCkuY3NzKHsgbGVmdCB9KTtcclxuICAgICAgICAgICAgbGVmdCArPSAkKGZpeGVkSGVhZGVyc1tpXS5uYXRpdmVFbGVtZW50KS5vdXRlcldpZHRoKHRydWUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSwgMTAwKTtcclxuICAgIH0pKTtcclxuICAgIHRoaXMuI3N1YnNjcmlwdGlvbi5hZGQobWVyZ2UodGhpcy5maXhlZEJvZGllcy5jaGFuZ2VzLCB0aGlzLmNlbGxGb290ZXJEZWZzLmNoYW5nZXMpLnBpcGUoc3RhcnRXaXRoKHt9KSkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgZml4ZWRCb2RpZXMgPSB0aGlzLmZpeGVkQm9kaWVzLnRvQXJyYXkoKTtcclxuICAgICAgICBpZiAoZml4ZWRCb2RpZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgY29uc3QgZml4ZWRQZXJSb3cgPSB0aGlzLmZpeGVkQm9kaWVzLmxlbmd0aCAvICh0aGlzLnZpZXdJdGVtcy5sZW5ndGggKyB0aGlzLiNudW1iZXJPZkZvb3RlclJvd3MpO1xyXG4gICAgICAgICAgbGV0IGxlZnQgPSAkKGZpeGVkQm9kaWVzWzBdLm5hdGl2ZUVsZW1lbnQpLm91dGVyV2lkdGgodHJ1ZSk7XHJcbiAgICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IGZpeGVkQm9kaWVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChpICUgZml4ZWRQZXJSb3cgPT09IDApIHtcclxuICAgICAgICAgICAgICBsZWZ0ID0gMDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAkKGZpeGVkQm9kaWVzW2ldLm5hdGl2ZUVsZW1lbnQpLmNzcyh7IGxlZnQgfSk7XHJcbiAgICAgICAgICAgIGxlZnQgKz0gJChmaXhlZEJvZGllc1tpXS5uYXRpdmVFbGVtZW50KS5vdXRlcldpZHRoKHRydWUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBmaXhlZEhlYWRlcnMgPSB0aGlzLmZpeGVkSGVhZGVycy50b0FycmF5KCk7XHJcbiAgICAgICAgaWYgKGZpeGVkSGVhZGVycy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICBsZXQgbGVmdCA9ICQoZml4ZWRIZWFkZXJzWzBdLm5hdGl2ZUVsZW1lbnQpLm91dGVyV2lkdGgodHJ1ZSk7XHJcbiAgICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IGZpeGVkSGVhZGVycy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAkKGZpeGVkSGVhZGVyc1tpXS5uYXRpdmVFbGVtZW50KS5jc3MoeyBsZWZ0IH0pO1xyXG4gICAgICAgICAgICBsZWZ0ICs9ICQoZml4ZWRIZWFkZXJzW2ldLm5hdGl2ZUVsZW1lbnQpLm91dGVyV2lkdGgodHJ1ZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9LCAxMDApO1xyXG4gICAgfSkpO1xyXG4gICAgdGhpcy4jc3Vic2NyaXB0aW9uLmFkZCh0aGlzLmNlbGxEZWZzLmNoYW5nZXMucGlwZShzdGFydFdpdGgoW10pKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICB0aGlzLmNlbGxEZWYgPSB7fTtcclxuICAgICAgZm9yIChjb25zdCBjZWxsRGVmIG9mIHRoaXMuY2VsbERlZnMpIHtcclxuICAgICAgICBpZiAoY2VsbERlZi5zZENlbGxEZWYpIHtcclxuICAgICAgICAgIHRoaXMuY2VsbERlZltjZWxsRGVmLnNkQ2VsbERlZl0gPSBjZWxsRGVmO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSkpO1xyXG4gICAgdGhpcy4jc3Vic2NyaXB0aW9uLmFkZCh0aGlzLmNlbGxFZGl0b3JEZWZzLmNoYW5nZXMucGlwZShzdGFydFdpdGgoW10pKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICB0aGlzLmNlbGxFZGl0b3JEZWYgPSB7fTtcclxuICAgICAgZm9yIChjb25zdCBjZWxsRWRpdG9yRGVmIG9mIHRoaXMuY2VsbEVkaXRvckRlZnMpIHtcclxuICAgICAgICBpZiAoY2VsbEVkaXRvckRlZi5zZENlbGxFZGl0b3JEZWYpIHtcclxuICAgICAgICAgIHRoaXMuY2VsbEVkaXRvckRlZltjZWxsRWRpdG9yRGVmLnNkQ2VsbEVkaXRvckRlZl0gPSBjZWxsRWRpdG9yRGVmO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSkpO1xyXG4gICAgdGhpcy4jc3Vic2NyaXB0aW9uLmFkZCh0aGlzLmNlbGxGb290ZXJEZWZzLmNoYW5nZXMucGlwZShzdGFydFdpdGgoW10pKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICB0aGlzLmNlbGxGb290ZXJEZWYgPSB7fTtcclxuICAgICAgdGhpcy4jbnVtYmVyT2ZGb290ZXJSb3dzID0gMDtcclxuICAgICAgZm9yIChjb25zdCBjZWxsRm9vdGVyRGVmIG9mIHRoaXMuY2VsbEZvb3RlckRlZnMpIHtcclxuICAgICAgICBpZiAoY2VsbEZvb3RlckRlZi5zZENlbGxGb290ZXJEZWYpIHtcclxuICAgICAgICAgIGlmICghdGhpcy5jZWxsRm9vdGVyRGVmW2NlbGxGb290ZXJEZWYuc2RDZWxsRm9vdGVyRGVmXSkge1xyXG4gICAgICAgICAgICB0aGlzLmNlbGxGb290ZXJEZWZbY2VsbEZvb3RlckRlZi5zZENlbGxGb290ZXJEZWZdID0gW107XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLmNlbGxGb290ZXJEZWZbY2VsbEZvb3RlckRlZi5zZENlbGxGb290ZXJEZWZdLnB1c2goY2VsbEZvb3RlckRlZik7XHJcbiAgICAgICAgICBpZiAodGhpcy5jZWxsRm9vdGVyRGVmW2NlbGxGb290ZXJEZWYuc2RDZWxsRm9vdGVyRGVmXS5sZW5ndGggPiB0aGlzLiNudW1iZXJPZkZvb3RlclJvd3MpIHtcclxuICAgICAgICAgICAgdGhpcy4jbnVtYmVyT2ZGb290ZXJSb3dzID0gdGhpcy5jZWxsRm9vdGVyRGVmW2NlbGxGb290ZXJEZWYuc2RDZWxsRm9vdGVyRGVmXS5sZW5ndGg7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuZm9vdGVyUm93cyA9IEFycmF5KHRoaXMuI251bWJlck9mRm9vdGVyUm93cykuZmlsbCgwKS5tYXAoKHYsIGkpID0+IGkpO1xyXG4gICAgfSkpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICB0aGlzLiNzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gIHJlbG9hZCA9IGFzeW5jIChncmlkSXRlbXM/OiBhbnlbXSkgPT4ge1xyXG4gICAgaWYgKHRoaXMuaXNMb2FkaW5nKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcclxuICAgIGNvbnN0IGN1cnJlbnRQYWdlID0gKHRoaXMuI3BhZ2luYXRvcj8ucGFnZUluZGV4IHx8IDApICsgMTtcclxuICAgIGNvbnN0IHBhZ2VTaXplID0gdGhpcy4jcGFnaW5hdG9yPy5wYWdlU2l6ZSB8fCA1MDtcclxuICAgIHRyeSB7XHJcbiAgICAgIGlmICh0aGlzLmdyaWRPcHRpb24udHlwZSAhPT0gJ2xvY2FsJykge1xyXG4gICAgICAgIGNvbnN0IGhhbmRsZXIgPSB0aGlzLmhhbmRsZXIgYXMgSUhhbmRsZXJTZXJ2ZXI7XHJcbiAgICAgICAgY29uc3QgZmlsdGVyID0gaGFuZGxlci5tYXBSZXF1ZXN0KHRoaXMuZ2V0RmlsdGVySW5mbyhjdXJyZW50UGFnZSwgcGFnZVNpemUpKTtcclxuICAgICAgICBpZiAodGhpcy5ncmlkT3B0aW9uLm1ldGhvZCA9PT0gJ0dFVCcpIHtcclxuICAgICAgICAgIGNvbnN0IHF1ZXJ5U3RyaW5nID0gT2JqZWN0LmtleXMoZmlsdGVyKS5maWx0ZXIoa2V5ID0+IGZpbHRlcltrZXldICE9PSBudWxsICYmIGZpbHRlcltrZXldICE9PSB1bmRlZmluZWQpXHJcbiAgICAgICAgICAgIC5tYXAoa2V5ID0+IGtleSArICc9JyArIGZpbHRlcltrZXldKS5qb2luKCcmJyk7XHJcbiAgICAgICAgICBjb25zdCB1cmwgPSB0aGlzLmdyaWRPcHRpb24udXJsLmluY2x1ZGVzKCc/JykgPyBgJHt0aGlzLmdyaWRPcHRpb24udXJsfSYke3F1ZXJ5U3RyaW5nfWAgOiBgJHt0aGlzLmdyaWRPcHRpb24udXJsfT8ke3F1ZXJ5U3RyaW5nfWA7XHJcbiAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuYXBpU2VydmljZS5nZXQodXJsKTtcclxuICAgICAgICAgIGNvbnN0IHsgaXRlbXMsIHRvdGFsIH0gPSBoYW5kbGVyLm1hcFJlc3BvbnNlKHJlc3BvbnNlKTtcclxuICAgICAgICAgIHRoaXMuaXRlbXMgPSBpdGVtcztcclxuICAgICAgICAgIHRoaXMudG90YWwgPSB0b3RhbDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmFwaVNlcnZpY2UucG9zdCh0aGlzLmdyaWRPcHRpb24udXJsLCBmaWx0ZXIpO1xyXG4gICAgICAgICAgY29uc3QgeyBpdGVtcywgdG90YWwgfSA9IGhhbmRsZXIubWFwUmVzcG9uc2UocmVzcG9uc2UpO1xyXG4gICAgICAgICAgdGhpcy5pdGVtcyA9IGl0ZW1zO1xyXG4gICAgICAgICAgdGhpcy50b3RhbCA9IHRvdGFsO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zdCBoYW5kbGVyID0gdGhpcy5oYW5kbGVyIGFzIElIYW5kbGVyTG9jYWw7XHJcbiAgICAgICAgaWYgKHR5cGVvZiAodGhpcy5ncmlkT3B0aW9uLml0ZW1zKSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZ3JpZEl0ZW1zKSkge1xyXG4gICAgICAgICAgICB0aGlzLmxvY2FsSXRlbXMgPSBncmlkSXRlbXM7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCByZXN1bHRzID0gdGhpcy5ncmlkT3B0aW9uLml0ZW1zKCk7XHJcbiAgICAgICAgICAgIGlmIChyZXN1bHRzIGluc3RhbmNlb2YgUHJvbWlzZSkge1xyXG4gICAgICAgICAgICAgIHRoaXMubG9jYWxJdGVtcyA9IGF3YWl0IHJlc3VsdHM7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5sb2NhbEl0ZW1zID0gcmVzdWx0cztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmdyaWRPcHRpb24uaXRlbXMgPSBncmlkSXRlbXMgfHwgdGhpcy5ncmlkT3B0aW9uLml0ZW1zO1xyXG4gICAgICAgICAgdGhpcy5sb2NhbEl0ZW1zID0gdGhpcy5ncmlkT3B0aW9uLml0ZW1zO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCByZXNwb25zZSA9IGhhbmRsZXIuZmlsdGVyKHRoaXMubG9jYWxJdGVtcywge1xyXG4gICAgICAgICAgY3VzdG9tRmlsdGVyOiB0aGlzLmdyaWRPcHRpb24uZmlsdGVyLmN1c3RvbUZpbHRlcixcclxuICAgICAgICAgIHJhd0ZpbHRlcjogdGhpcy5maWx0ZXIsXHJcbiAgICAgICAgICBjb2x1bW5zOiB0aGlzLmdyaWRPcHRpb24uY29sdW1ucyxcclxuICAgICAgICAgIHJhd0V4dGVybmFsRmlsdGVyOiB0aGlzLmV4dGVybmFsRmlsdGVyLFxyXG4gICAgICAgICAgZXh0ZXJuYWxGaWx0ZXJzOiB0aGlzLmdyaWRPcHRpb24uZmlsdGVyPy5leHRlcm5hbEZpbHRlcnMsXHJcbiAgICAgICAgICBvcmRlckJ5OiB0aGlzLm9yZGVyQnksXHJcbiAgICAgICAgICBvcmRlckRpcmVjdGlvbjogdGhpcy5vcmRlckRpcmVjdGlvbixcclxuICAgICAgICAgIHBhZ2VOdW1iZXI6IGN1cnJlbnRQYWdlLFxyXG4gICAgICAgICAgcGFnZVNpemVcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLml0ZW1zID0gcmVzcG9uc2UuaXRlbXM7XHJcbiAgICAgICAgdGhpcy50b3RhbCA9IHJlc3BvbnNlLnRvdGFsO1xyXG4gICAgICAgIFxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuaXRlbXMuZm9yRWFjaChpdGVtID0+IGl0ZW0ub3JpZ2luSXRlbSA9IHsgLi4uaXRlbSB9KTtcclxuICAgICAgdGhpcy5pc0NoZWNrZWRBbGwgPSBmYWxzZTtcclxuICAgICAgdGhpcy4jc2V0U2VsZWN0ZWRJdGVtcygpO1xyXG4gICAgICBhd2FpdCB0aGlzLmdyaWRPcHRpb24/Lm9uUmVsb2FkQ29tcGxldGVkPy4odGhpcy5pdGVtcyk7XHJcbiAgICAgIHRoaXMuZ2VuZXJhdGVWaWV3SXRlbXMoKTtcclxuICAgICAgdGhpcy5nZW5lcmF0ZUVkaXRvckhhbmRsZXJzKCk7XHJcbiAgICAgICQodGhpcy5ncmlkQm9keS5uYXRpdmVFbGVtZW50KS5zY3JvbGxUb3AoMCk7XHJcbiAgICAgIGlmIChjdXJyZW50UGFnZSA+IDEgJiYgIXRoaXMudmlld0l0ZW1zPy5sZW5ndGgpIHtcclxuICAgICAgICB0aGlzLiNwYWdpbmF0b3IuZmlyc3RQYWdlKCk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICB0aGlzLm5vdGlmeVNlcnZpY2UuaGFuZGxlLmVycm9yKGVycm9yKTtcclxuICAgIH0gZmluYWxseSB7XHJcbiAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZWxvYWRJdGVtKGRhdGE6IHsgW2lkOiBzdHJpbmddOiBhbnkgfSkge1xyXG4gICAgT2JqZWN0LmtleXMoZGF0YSkuZm9yRWFjaChpZCA9PiB7XHJcbiAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLml0ZW1zLmZpbmQoZSA9PiAhIWUuaWQgJiYgZS5pZCA9PT0gaWQpO1xyXG4gICAgICBpZiAoaXRlbSkge1xyXG4gICAgICAgIHRoaXMuZ3JpZE9wdGlvbi5jb2x1bW5zLmZvckVhY2goY29sdW1uID0+IHtcclxuICAgICAgICAgIGlmIChpdGVtW2NvbHVtbi5maWVsZF0gIT09IHVuZGVmaW5lZCAmJiBkYXRhW2lkXVtjb2x1bW4uZmllbGRdICE9PSB1bmRlZmluZWQgJiYgaXRlbVtjb2x1bW4uZmllbGRdICE9PSBkYXRhW2lkXVtjb2x1bW4uZmllbGRdKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYmxpbmsoaXRlbSwgY29sdW1uLmZpZWxkKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICBPYmplY3QuYXNzaWduKGl0ZW0sIGRhdGFbaWRdKTtcclxuICAgICAgICB0aGlzLmdlbmVyYXRlRWRpdG9ySGFubGRlcihpdGVtKTtcclxuICAgICAgICB0aGlzLnN0b3BCbGluaygpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYmxpbmsoaXRlbTogR3JpZEl0ZW0sIGZpZWxkOiBzdHJpbmcpIHtcclxuICAgIGl0ZW0uYmxpbmtlciA9IGl0ZW0uYmxpbmtlciB8fCB7fTtcclxuICAgIGl0ZW0uYmxpbmtlcltmaWVsZF0gPSB0cnVlO1xyXG4gIH1cclxuICBwcml2YXRlIHN0b3BCbGluaygpIHtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLnZpZXdJdGVtcy5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgIGl0ZW0uYmxpbmtlciA9IHt9O1xyXG4gICAgICB9KTtcclxuICAgIH0sIDE1MDApO1xyXG4gIH1cclxuXHJcbiAgZGV0ZWN0Q2hhbmdlcyA9ICgpID0+IHtcclxuICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgIHRoaXMucmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZW5lcmF0ZVZpZXdJdGVtcygpIHtcclxuICAgIGNvbnN0IGN1cnJlbnRQYWdlID0gKHRoaXMuI3BhZ2luYXRvcj8ucGFnZUluZGV4IHx8IDApICsgMTtcclxuICAgIGNvbnN0IHBhZ2VTaXplID0gdGhpcy4jcGFnaW5hdG9yPy5wYWdlU2l6ZSB8fCA1MDtcclxuICAgIGRlbGV0ZSB0aGlzLnZpZXdJdGVtcztcclxuICAgIGlmICh0aGlzLmdyaWRPcHRpb24udHlwZSA9PT0gJ2xvY2FsJykge1xyXG4gICAgICB0aGlzLnZpZXdJdGVtcyA9IHRoaXMuaXRlbXMuZmlsdGVyKChpdGVtLCBpbmRleCkgPT4ge1xyXG4gICAgICAgIHJldHVybiBpbmRleCA+PSAoY3VycmVudFBhZ2UgLSAxKSAqIHBhZ2VTaXplXHJcbiAgICAgICAgICAmJiBpbmRleCA8IGN1cnJlbnRQYWdlICogcGFnZVNpemU7XHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy52aWV3SXRlbXMgPSB0aGlzLml0ZW1zO1xyXG4gICAgfVxyXG4gICAgdGhpcy52aWV3SXRlbXMuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgaXRlbS5ibGlua2VyID0gaXRlbS5ibGlua2VyIHx8IHt9O1xyXG4gICAgICBpdGVtLnN1YkluZm9ybWF0aW9uID0gaXRlbS5zdWJJbmZvcm1hdGlvbiB8fCB7fTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGVkaXRlZEl0ZW1zKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuaXRlbXMuZmlsdGVyKGl0ZW0gPT4ge1xyXG4gICAgICBpZiAoIWl0ZW0ub3JpZ2luSXRlbSkge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChPYmplY3Qua2V5cyhpdGVtLm9yaWdpbkl0ZW0pLnNvbWUoa2V5ID0+IGl0ZW0ub3JpZ2luSXRlbVtrZXldICE9PSBpdGVtW2tleV0pKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfSkubWFwKGl0ZW0gPT4ge1xyXG4gICAgICBjb25zdCB7IHRlbXBvcmFyeSxcclxuICAgICAgICBvcmlnaW5JdGVtLFxyXG4gICAgICAgIGVkaXRvckhhbmRsZXIsXHJcbiAgICAgICAgZWRpdGluZ1N0YXR1cyxcclxuICAgICAgICBpc0NoZWNrZWQsXHJcbiAgICAgICAgc3ViSW5mb3JtYXRpb24sXHJcbiAgICAgICAgYmxpbmtlcixcclxuICAgICAgICAuLi5yZXN1bHQgfSA9IGl0ZW07XHJcbiAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHNlbGVjdFBhZ2UgPSAoKSA9PiB7XHJcbiAgICBpZiAodGhpcy5ncmlkT3B0aW9uLnR5cGUgPT09ICdsb2NhbCcpIHtcclxuICAgICAgdGhpcy5yZWxvYWQodGhpcy5sb2NhbEl0ZW1zKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMucmVsb2FkKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB1cGRhdGVGaWx0ZXIgPSAocGFyYW0/OiB7IGZpbHRlcjogYW55LCBleHRlcm5hbEZpbHRlcjogYW55IH0pID0+IHtcclxuICAgIHRoaXMuZmlsdGVyID0gcGFyYW0/LmZpbHRlciB8fCB0aGlzLmZpbHRlcjtcclxuICAgIHRoaXMuZXh0ZXJuYWxGaWx0ZXIgPSBwYXJhbT8uZXh0ZXJuYWxGaWx0ZXIgfHwgdGhpcy5leHRlcm5hbEZpbHRlcjtcclxuICAgIHRoaXMuI3BhZ2luYXRvci5wYWdlSW5kZXggPSAwO1xyXG4gICAgaWYgKHRoaXMuZ3JpZE9wdGlvbi50eXBlID09PSAnbG9jYWwnKSB7XHJcbiAgICAgIHRoaXMucmVsb2FkKHRoaXMubG9jYWxJdGVtcyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnJlbG9hZCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0SXRlbXMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5pdGVtcztcclxuICB9XHJcblxyXG4gIC8vI3JlZ2lvbiBDaGVja2FibGVcclxuXHJcbiAgI3NldFNlbGVjdGVkSXRlbXMgPSAoKSA9PiB7XHJcbiAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSB0aGlzLml0ZW1zLmZpbHRlcihpdGVtID0+IGl0ZW0uaXNDaGVja2VkKVxyXG4gICAgICAubWFwKGl0ZW0gPT4ge1xyXG4gICAgICAgIGNvbnN0IHsgdGVtcG9yYXJ5LFxyXG4gICAgICAgICAgb3JpZ2luSXRlbSxcclxuICAgICAgICAgIGVkaXRvckhhbmRsZXIsXHJcbiAgICAgICAgICBlZGl0aW5nU3RhdHVzLFxyXG4gICAgICAgICAgaXNDaGVja2VkLFxyXG4gICAgICAgICAgc3ViSW5mb3JtYXRpb24sXHJcbiAgICAgICAgICBibGlua2VyLFxyXG4gICAgICAgICAgLi4ucmVzdWx0IH0gPSBpdGVtO1xyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgb25DaGVjayA9IChpdGVtOiBHcmlkSXRlbSwgaXNDaGVja2JveD86IGJvb2xlYW4pID0+IHtcclxuICAgIGlmICghdGhpcy5ncmlkT3B0aW9uLmNoZWNrYWJsZSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAoIWlzQ2hlY2tib3gpIHtcclxuICAgICAgaXRlbS5pc0NoZWNrZWQgPSAhaXRlbS5pc0NoZWNrZWQ7XHJcbiAgICB9XHJcbiAgICB0aGlzLmlzQ2hlY2tlZEFsbCA9IHRoaXMuaXRlbXMubGVuZ3RoID09PSB0aGlzLml0ZW1zLmZpbHRlcihlID0+IGUuaXNDaGVja2VkKS5sZW5ndGg7XHJcbiAgICB0aGlzLmdyaWRPcHRpb24ub25DaGVjaz8uKHRoaXMuaXRlbXMuZmlsdGVyKGUgPT4gZS5pc0NoZWNrZWQpLCBpdGVtKTtcclxuICAgIHRoaXMuI3NldFNlbGVjdGVkSXRlbXMoKTtcclxuICB9XHJcblxyXG4gIGNoZWNrQWxsKGlzQ2hlY2tlZEFsbDogYm9vbGVhbikge1xyXG4gICAgdGhpcy5pc0NoZWNrZWRBbGwgPSBpc0NoZWNrZWRBbGw7XHJcbiAgICB0aGlzLml0ZW1zLmZvckVhY2goaXRlbSA9PiBpdGVtLmlzQ2hlY2tlZCA9IHRoaXMuaXNDaGVja2VkQWxsKTtcclxuICAgIGlmICh0aGlzLmdyaWRPcHRpb24ub25DaGVjaykge1xyXG4gICAgICB0aGlzLmdyaWRPcHRpb24ub25DaGVjayh0aGlzLml0ZW1zLmZpbHRlcihpdGVtID0+IGl0ZW0uaXNDaGVja2VkKSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLiNzZXRTZWxlY3RlZEl0ZW1zKCk7XHJcbiAgfVxyXG5cclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy8jcmVnaW9uIFNvcnRcclxuICBzb3J0ID0gKGNvbHVtbjogU2RHcmlkQ29sdW1uKSA9PiB7XHJcbiAgICBpZiAoY29sdW1uLnR5cGUgPT09ICdjaGlsZHJlbicgfHwgY29sdW1uLnR5cGUgPT09ICdpbWFnZScpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc3Qgc29ydGFibGUgPSB0aGlzLmdyaWRPcHRpb24uc29ydGFibGUgPz8gdHJ1ZTtcclxuICAgIGNvbnN0IGNvbHVtblNvcnRhYmxlID0gY29sdW1uLnNvcnRhYmxlID8/IHRydWU7XHJcbiAgICBpZiAoIXNvcnRhYmxlIHx8ICFjb2x1bW5Tb3J0YWJsZSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5vcmRlckJ5ID09PSBjb2x1bW4uZmllbGQpIHtcclxuICAgICAgdGhpcy5vcmRlckRpcmVjdGlvbiA9IHRoaXMub3JkZXJEaXJlY3Rpb24gPT09ICdBU0MnID8gJ0RFU0MnIDogJ0FTQyc7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLm9yZGVyQnkgPSBjb2x1bW4uZmllbGQ7XHJcbiAgICAgIHRoaXMub3JkZXJEaXJlY3Rpb24gPSAnQVNDJztcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmdyaWRPcHRpb24udHlwZSA9PT0gJ2xvY2FsJykge1xyXG4gICAgICB0aGlzLnJlbG9hZCh0aGlzLmxvY2FsSXRlbXMpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5yZWxvYWQoKTtcclxuICAgIH1cclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vICNyZWdpb24gUmVzaXplIEdyaWRcclxuICBwcml2YXRlIHJlc2l6ZSgpIHtcclxuICAgIHRoaXMuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgaWYgKHRoaXMuZ3JpZE9wdGlvbi5oZWlnaHQpIHtcclxuICAgICAgdGhpcy5ncmlkQm9keS5uYXRpdmVFbGVtZW50LnN0eWxlLmhlaWdodCA9IHRoaXMuZ3JpZE9wdGlvbi5oZWlnaHQ7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmdyaWRCb2R5Lm5hdGl2ZUVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gYCR7d2luZG93LmlubmVySGVpZ2h0IC0gMzAwfXB4YDtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgLy8gTOG6pXkgb2Zmc2V0IHRvcCDEkeG7gyDEkWnhu4F1IGNo4buJbmgga8OtY2ggdGjGsOG7m2MgR3JpZCB24burYSB24bubaSBtw6BuIGjDrG5oXHJcbiAgICAgICAgY29uc3QgdG9wID0gdGhpcy5ncmlkQm9keS5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcDtcclxuICAgICAgICAvLyBjb25zdCB0b3AgPSAkKHRoaXMuZ3JpZEJvZHkubmF0aXZlRWxlbWVudCkub2Zmc2V0KCkudG9wO1xyXG4gICAgICAgIGNvbnN0IGJvdHRvbSA9IHRoaXMuZ3JpZE9wdGlvbi5oaWRlRm9vdGVyID8gMCA6ICh0aGlzLmlzTW9iaWxlT3JUYWJsZXQgPyA0NSA6IDU1KTtcclxuICAgICAgICBjb25zdCBoZWlnaHQgPSB3aW5kb3cuaW5uZXJIZWlnaHQgLSB0b3AgLSBib3R0b207XHJcbiAgICAgICAgdGhpcy5ncmlkQm9keS5uYXRpdmVFbGVtZW50LnN0eWxlLmhlaWdodCA9IGAke2hlaWdodH1weGA7XHJcbiAgICAgIH0sIDApO1xyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAvLyBM4bqleSBvZmZzZXQgdG9wIMSR4buDIMSRaeG7gXUgY2jhu4luaCBrw61jaCB0aMaw4bubYyBHcmlkIHbhu6thIHbhu5tpIG3DoG4gaMOsbmhcclxuICAgICAgICBjb25zdCB0b3AgPSB0aGlzLmdyaWRCb2R5Lm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wO1xyXG4gICAgICAgIC8vIGNvbnN0IHRvcCA9ICQodGhpcy5ncmlkQm9keS5uYXRpdmVFbGVtZW50KS5vZmZzZXQoKS50b3A7XHJcbiAgICAgICAgY29uc3QgYm90dG9tID0gdGhpcy5ncmlkT3B0aW9uLmhpZGVGb290ZXIgPyAwIDogKHRoaXMuaXNNb2JpbGVPclRhYmxldCA/IDQ1IDogNTUpO1xyXG4gICAgICAgIGNvbnN0IGhlaWdodCA9IHdpbmRvdy5pbm5lckhlaWdodCAtIHRvcCAtIGJvdHRvbTtcclxuICAgICAgICB0aGlzLmdyaWRCb2R5Lm5hdGl2ZUVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gYCR7aGVpZ2h0fXB4YDtcclxuICAgICAgfSwgMjAwKTtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgLy8gTOG6pXkgb2Zmc2V0IHRvcCDEkeG7gyDEkWnhu4F1IGNo4buJbmgga8OtY2ggdGjGsOG7m2MgR3JpZCB24burYSB24bubaSBtw6BuIGjDrG5oXHJcbiAgICAgICAgY29uc3QgdG9wID0gdGhpcy5ncmlkQm9keS5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcDtcclxuICAgICAgICAvLyBjb25zdCB0b3AgPSAkKHRoaXMuZ3JpZEJvZHkubmF0aXZlRWxlbWVudCkub2Zmc2V0KCkudG9wO1xyXG4gICAgICAgIGNvbnN0IGJvdHRvbSA9IHRoaXMuZ3JpZE9wdGlvbi5oaWRlRm9vdGVyID8gMCA6ICh0aGlzLmlzTW9iaWxlT3JUYWJsZXQgPyA0NSA6IDU1KTtcclxuICAgICAgICBjb25zdCBoZWlnaHQgPSB3aW5kb3cuaW5uZXJIZWlnaHQgLSB0b3AgLSBib3R0b207XHJcbiAgICAgICAgdGhpcy5ncmlkQm9keS5uYXRpdmVFbGVtZW50LnN0eWxlLmhlaWdodCA9IGAke2hlaWdodH1weGA7XHJcbiAgICAgIH0sIDUwMCk7XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIC8vIEzhuqV5IG9mZnNldCB0b3AgxJHhu4MgxJFp4buBdSBjaOG7iW5oIGvDrWNoIHRoxrDhu5tjIEdyaWQgduG7q2EgduG7m2kgbcOgbiBow6xuaFxyXG4gICAgICAgIGNvbnN0IHRvcCA9IHRoaXMuZ3JpZEJvZHkubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3A7XHJcbiAgICAgICAgLy8gY29uc3QgdG9wID0gJCh0aGlzLmdyaWRCb2R5Lm5hdGl2ZUVsZW1lbnQpLm9mZnNldCgpLnRvcDtcclxuICAgICAgICBjb25zdCBib3R0b20gPSB0aGlzLmdyaWRPcHRpb24uaGlkZUZvb3RlciA/IDAgOiAodGhpcy5pc01vYmlsZU9yVGFibGV0ID8gNDUgOiA1NSk7XHJcbiAgICAgICAgY29uc3QgaGVpZ2h0ID0gd2luZG93LmlubmVySGVpZ2h0IC0gdG9wIC0gYm90dG9tO1xyXG4gICAgICAgIHRoaXMuZ3JpZEJvZHkubmF0aXZlRWxlbWVudC5zdHlsZS5oZWlnaHQgPSBgJHtoZWlnaHR9cHhgO1xyXG4gICAgICB9LCAxMDAwKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldEhlaWdodChoZWlnaHQ/OiBzdHJpbmcpIHtcclxuICAgIHRoaXMuZ3JpZE9wdGlvbi5oZWlnaHQgPSBoZWlnaHQ7XHJcbiAgICB0aGlzLnJlc2l6ZSgpO1xyXG4gIH1cclxuXHJcbiAgLy8gI2VuZHJlZ2lvblxyXG5cclxuICAvLyNyZWdpb24gSW1wb3J0LCBFeHBvcnQsIENvbmZpZ1xyXG5cclxuICBsb2FkQ29uZmlnKGNvbmZpZ1Jlc3VsdDogQ29uZmlnUmVzdWx0KSB7XHJcbiAgICB0aGlzLmdyaWRPcHRpb24ucGFnaW5hdGUucGFnZVNpemUgPSBjb25maWdSZXN1bHQucGFnZVNpemU7XHJcbiAgICB0aGlzLmdyaWRPcHRpb24uY29sdW1ucyA9IGNvbmZpZ1Jlc3VsdC5jb2x1bW5zO1xyXG4gICAgdGhpcy5maXhlZENvbHVtbnMgPSBjb25maWdSZXN1bHQuZml4ZWRDb2x1bW5zO1xyXG4gICAgdGhpcy5ub3JtYWxDb2x1bW5zID0gY29uZmlnUmVzdWx0Lm5vcm1hbENvbHVtbnM7XHJcbiAgICB0aGlzLmNvbHVtbnMgPSBbLi4udGhpcy5maXhlZENvbHVtbnMsIC4uLnRoaXMubm9ybWFsQ29sdW1uc107XHJcbiAgICB0aGlzLmluaXRGaWx0ZXIoKTtcclxuICAgIHRoaXMuaW5pdERpY3Rpb25hcnlDb2x1bW5WYWx1ZXMoKTtcclxuICAgIHRoaXMucmVsb2FkKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGluaXRGaWx0ZXIoKSB7XHJcbiAgICB0aGlzLmdyaWRPcHRpb24uY29sdW1ucy5mb3JFYWNoKGNvbHVtbiA9PiB7XHJcbiAgICAgIC8vIEfDoW4gZ2nDoSB0cuG7iyBmaWx0ZXIgbeG6t2MgxJHhu4tuaCBjaG8gdOG7q25nIGPhu5l0XHJcbiAgICAgIHRoaXMuZmlsdGVyW2NvbHVtbi5maWVsZF0gPSB0aGlzLmZpbHRlcltjb2x1bW4uZmllbGRdID8/ICcnO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGluaXREaWN0aW9uYXJ5Q29sdW1uVmFsdWVzKCkge1xyXG4gICAgdGhpcy5ncmlkT3B0aW9uLmNvbHVtbnMuZm9yRWFjaChjb2x1bW4gPT4ge1xyXG4gICAgICBpZiAoY29sdW1uLnR5cGUgPT09ICd2YWx1ZXMnKSB7XHJcbiAgICAgICAgY29sdW1uLmRpY3Rpb25hcnkgPSB7fTtcclxuICAgICAgICBpZiAoY29sdW1uLnZhbHVlcykge1xyXG4gICAgICAgICAgY29sdW1uLnZhbHVlcy5mb3JFYWNoKGUgPT4ge1xyXG4gICAgICAgICAgICBjb2x1bW4uZGljdGlvbmFyeVtlLnZhbHVlLnRvU3RyaW5nKCldID0ge1xyXG4gICAgICAgICAgICAgIHRleHQ6IGUudGV4dCxcclxuICAgICAgICAgICAgICBpY29uOiBlLmljb24sXHJcbiAgICAgICAgICAgICAgY29sb3I6IGUuY29sb3IsXHJcbiAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBlLmJhY2tncm91bmRDb2xvclxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb2x1bW4udHlwZSA9PT0gJ2NoaWxkcmVuJykge1xyXG4gICAgICAgIGNvbHVtbi5jaGlsZHJlbi5mb3JFYWNoKGNoaWxkQ29sdW1uID0+IHtcclxuICAgICAgICAgIGlmIChjaGlsZENvbHVtbi50eXBlID09PSAndmFsdWVzJykge1xyXG4gICAgICAgICAgICBjaGlsZENvbHVtbi5kaWN0aW9uYXJ5ID0ge307XHJcbiAgICAgICAgICAgIGlmIChjaGlsZENvbHVtbi52YWx1ZXMpIHtcclxuICAgICAgICAgICAgICBjaGlsZENvbHVtbi52YWx1ZXMuZm9yRWFjaChlID0+IHtcclxuICAgICAgICAgICAgICAgIGNoaWxkQ29sdW1uLmRpY3Rpb25hcnlbZS52YWx1ZS50b1N0cmluZygpXSA9IHtcclxuICAgICAgICAgICAgICAgICAgdGV4dDogZS50ZXh0LFxyXG4gICAgICAgICAgICAgICAgICBpY29uOiBlLmljb24sXHJcbiAgICAgICAgICAgICAgICAgIGNvbG9yOiBlLmNvbG9yLFxyXG4gICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IGUuYmFja2dyb3VuZENvbG9yXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIHByaXZhdGUgZ2VuZXJhdGVFZGl0b3JIYW5kbGVycygpIHtcclxuICAgIHRoaXMudmlld0l0ZW1zLmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgIHRoaXMuZ2VuZXJhdGVFZGl0b3JIYW5sZGVyKGl0ZW0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdlbmVyYXRlRWRpdG9ySGFubGRlcihpdGVtOiBHcmlkSXRlbSkge1xyXG4gICAgLy8gaXRlbS5lZGl0b3JIYW5kbGVyID0gaXRlbS5lZGl0b3JIYW5kbGVyIHx8IHt9O1xyXG4gICAgdGhpcy5lZGl0b3JWaXNpYmxlUGlwZS50cmFuc2Zvcm0obnVsbCwgaXRlbSwgdGhpcy5ncmlkT3B0aW9uKTtcclxuICB9XHJcbiAgdHJhY2tCeUlkKGluZGV4LCBpdGVtKSB7XHJcbiAgICByZXR1cm4gaXRlbS5pZDtcclxuICB9XHJcblxyXG4gIGdldCBpc0ZpbHRlcmluZygpIHtcclxuICAgIHJldHVybiBPYmplY3QudmFsdWVzKHRoaXMuZmlsdGVyKS5zb21lKHZhbHVlID0+ICEhdmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgb25GaWx0ZXJQb3B1cCgpIHtcclxuICAgIGNvbnN0IGYxID0gSlNPTi5zdHJpbmdpZnkodGhpcy5maWx0ZXIpO1xyXG4gICAgY29uc3QgZjIgPSBKU09OLnN0cmluZ2lmeSh0aGlzLmV4dGVybmFsRmlsdGVyKTtcclxuICAgIGNvbnN0IGZpbHRlciA9IEpTT04ucGFyc2UoZjEpO1xyXG4gICAgY29uc3QgZXh0ZXJuYWxGaWx0ZXIgPSBKU09OLnBhcnNlKGYyKTtcclxuICAgIHRoaXMuc2RHcmlkUG9wdXBGaWx0ZXIub3Blbih0aGlzLmZpeGVkQ29sdW1ucywgdGhpcy5ub3JtYWxDb2x1bW5zLCBmaWx0ZXIsIGV4dGVybmFsRmlsdGVyLCB0aGlzLmdyaWRPcHRpb24uZmlsdGVyPy5leHRlcm5hbEZpbHRlcnMpO1xyXG4gIH1cclxuXHJcbiAgY2xlYXJGaWx0ZXIgPSAoKSA9PiB7XHJcbiAgICB0aGlzLmZpbHRlciA9IHt9O1xyXG4gICAgdGhpcy5leHRlcm5hbEZpbHRlciA9IHt9O1xyXG4gICAgdGhpcy5pbml0RmlsdGVyKCk7XHJcbiAgICB0aGlzLmluaXRFeHRlcm5hbEZpbHRlcigpO1xyXG4gICAgaWYgKHRoaXMuc2RHcmlkUG9wdXBGaWx0ZXIpIHtcclxuICAgICAgdGhpcy5zZEdyaWRQb3B1cEZpbHRlci5maWx0ZXIgPSB0aGlzLmZpbHRlcjtcclxuICAgICAgdGhpcy5zZEdyaWRQb3B1cEZpbHRlci5leHRlcm5hbEZpbHRlciA9IHRoaXMuZXh0ZXJuYWxGaWx0ZXI7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkNsZWFyRmlsdGVyID0gKCkgPT4ge1xyXG4gICAgdGhpcy5jbGVhckZpbHRlcigpO1xyXG4gICAgdGhpcy5yZWxvYWQoKTtcclxuICB9XHJcblxyXG4gIGV4cGFuZE9yQ29sbGFwc2UgPSBhc3luYyAoZ3JpZEl0ZW06IEdyaWRJdGVtKSA9PiB7XHJcbiAgICBjb25zdCB7IHRlbXBvcmFyeSxcclxuICAgICAgb3JpZ2luSXRlbSxcclxuICAgICAgZWRpdG9ySGFuZGxlcixcclxuICAgICAgZWRpdGluZ1N0YXR1cyxcclxuICAgICAgaXNDaGVja2VkLFxyXG4gICAgICBzdWJJbmZvcm1hdGlvbixcclxuICAgICAgLi4uaXRlbSB9ID0gZ3JpZEl0ZW07XHJcbiAgICBpZiAoIXRoaXMuZ3JpZE9wdGlvbi5zdWJJbmZvcm1hdGlvbikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAoZ3JpZEl0ZW0uc3ViSW5mb3JtYXRpb24/LmlzT3BlbmVkKSB7XHJcbiAgICAgIGdyaWRJdGVtLnN1YkluZm9ybWF0aW9uLmlzT3BlbmVkID0gZmFsc2U7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmdyaWRPcHRpb24uc3ViSW5mb3JtYXRpb24ubGF6eUxvYWRpbmcgJiYgIWdyaWRJdGVtLnN1YkluZm9ybWF0aW9uPy5pc0xvYWRlZCkge1xyXG4gICAgICBncmlkSXRlbS5zdWJJbmZvcm1hdGlvbi5pc0xvYWRpbmcgPSB0cnVlO1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGdyaWRJdGVtLnN1YkluZm9ybWF0aW9uLnN1Ykl0ZW1zID0gYXdhaXQgdGhpcy5ncmlkT3B0aW9uLnN1YkluZm9ybWF0aW9uLm9uTG9hZChpdGVtKTtcclxuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoZ3JpZEl0ZW0uc3ViSW5mb3JtYXRpb24uc3ViSXRlbXMpKSB7XHJcbiAgICAgICAgICB0aGlzLm5vdGlmeVNlcnZpY2UuYWxlcnQud2FybmluZyhgRGF0YSBpcyBub3QgYW4gYXJyYXlgKTtcclxuICAgICAgICAgIGdyaWRJdGVtLnN1YkluZm9ybWF0aW9uLnN1Ykl0ZW1zID0gW107XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGdyaWRJdGVtLnN1YkluZm9ybWF0aW9uLmlzTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIGdyaWRJdGVtLnN1YkluZm9ybWF0aW9uLmlzTG9hZGVkID0gdHJ1ZTtcclxuICAgICAgICBncmlkSXRlbS5zdWJJbmZvcm1hdGlvbi5pc09wZW5lZCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgICB0aGlzLm5vdGlmeVNlcnZpY2UuaGFuZGxlLmVycm9yKGVycik7XHJcbiAgICAgICAgZ3JpZEl0ZW0uc3ViSW5mb3JtYXRpb24uaXNMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmdyaWRPcHRpb24uc3ViSW5mb3JtYXRpb24ubGF6eUxvYWRpbmcgPT09IGZhbHNlICYmICFncmlkSXRlbS5zdWJJbmZvcm1hdGlvbi5pc0xvYWRlZCkge1xyXG4gICAgICBncmlkSXRlbS5zdWJJbmZvcm1hdGlvbi5zdWJJdGVtcyA9IGdyaWRJdGVtW3RoaXMuZ3JpZE9wdGlvbi5zdWJJbmZvcm1hdGlvbi5maWVsZF07XHJcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShncmlkSXRlbS5zdWJJbmZvcm1hdGlvbi5zdWJJdGVtcykpIHtcclxuICAgICAgICB0aGlzLm5vdGlmeVNlcnZpY2UuYWxlcnQud2FybmluZyhgRGF0YSBpcyBub3QgYW4gYXJyYXlgKTtcclxuICAgICAgICBncmlkSXRlbS5zdWJJbmZvcm1hdGlvbi5zdWJJdGVtcyA9IFtdO1xyXG4gICAgICB9XHJcbiAgICAgIGdyaWRJdGVtLnN1YkluZm9ybWF0aW9uLmlzTG9hZGVkID0gdHJ1ZTtcclxuICAgICAgZ3JpZEl0ZW0uc3ViSW5mb3JtYXRpb24uaXNPcGVuZWQgPSB0cnVlO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBncmlkSXRlbS5zdWJJbmZvcm1hdGlvbi5pc09wZW5lZCA9IHRydWU7XHJcbiAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG4gIC8vI3JlZ2lvbiBFZGl0YWJsZVxyXG4gIG9uQ3JlYXRlID0gKCkgPT4ge1xyXG4gICAgY29uc3QgeyB0eXBlLCBlZGl0b3IsIGNvbHVtbnMgfSA9IHRoaXMuZ3JpZE9wdGlvbjtcclxuICAgIGlmICghZWRpdG9yPy5hZGRhYmxlKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IGl0ZW06IEdyaWRJdGVtID0ge307XHJcbiAgICAvLyBHw6FuIGdpw6EgdHLhu4sgbeG6t2MgxJHhu4tuaFxyXG4gICAgY29sdW1ucy5mb3JFYWNoKGNvbHVtbiA9PiB7XHJcbiAgICAgIGlmIChjb2x1bW4udHlwZSA9PT0gJ3ZhbHVlcycpIHtcclxuICAgICAgICBpdGVtW2NvbHVtbi5maWVsZF0gPSAnJztcclxuICAgICAgfSBlbHNlIGlmIChjb2x1bW4udHlwZSA9PT0gJ2Jvb2wnKSB7XHJcbiAgICAgICAgaXRlbVtjb2x1bW4uZmllbGRdID0gdHJ1ZTtcclxuICAgICAgfSBlbHNlIGlmIChjb2x1bW4udHlwZSA9PT0gJ251bWJlcicpIHtcclxuICAgICAgICBpdGVtW2NvbHVtbi5maWVsZF0gPSBudWxsO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIGVkaXRvci5vbkFkZD8uKGl0ZW0pO1xyXG4gICAgLy8gxJDGsGEgaXRlbSBsw6puIGTDsm5nIMSR4bqndSB0acOqbiBu4bq/dSB0eXBlIGtow6FjIHBvcHVwXHJcbiAgICBpZiAoZWRpdG9yLnR5cGUgIT09ICdwb3B1cCcpIHtcclxuICAgICAgaWYgKHR5cGUgPT09ICdsb2NhbCcpIHtcclxuICAgICAgICB0aGlzLml0ZW1zLnNwbGljZSgwLCAwLCBpdGVtKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnZpZXdJdGVtcy5zcGxpY2UoMCwgMCwgaXRlbSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLm9uVXBkYXRlKGl0ZW0sIGZhbHNlKTtcclxuICB9XHJcbiAgb25VcGRhdGUgPSAoaXRlbTogR3JpZEl0ZW0sIGlzTW9kaWZpZWQ/OiBib29sZWFuKSA9PiB7XHJcbiAgICBjb25zdCB7IGVkaXRvciwgY29sdW1ucyB9ID0gdGhpcy5ncmlkT3B0aW9uO1xyXG4gICAgaXRlbS5lZGl0aW5nU3RhdHVzID0gaXNNb2RpZmllZCA/ICd1cGRhdGUnIDogJ2NyZWF0ZSc7XHJcbiAgICBpdGVtLnRlbXBvcmFyeSA9IHsgLi4uaXRlbSB9O1xyXG4gICAgdGhpcy5nZW5lcmF0ZUVkaXRvckhhbmxkZXIoaXRlbSk7XHJcbiAgICBpZiAoZWRpdG9yLnR5cGUgPT09ICdwb3B1cCcpIHtcclxuICAgICAgdGhpcy5zZEdyaWRQb3B1cEVkaXRvci5vcGVuKGl0ZW0sIGNvbHVtbnMsIGlzTW9kaWZpZWQpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuICBvblNhdmUgPSBhc3luYyAoaXRlbTogR3JpZEl0ZW0pID0+IHtcclxuICAgIGNvbnN0IHsgZWRpdG9yIH0gPSB0aGlzLmdyaWRPcHRpb247XHJcbiAgICB0cnkge1xyXG4gICAgICBpdGVtLmVkaXRvckhhbmRsZXIuc2F2aW5nID0gdHJ1ZTtcclxuICAgICAgaWYgKGVkaXRvci52YWxpZGF0ZSkge1xyXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGVkaXRvci52YWxpZGF0ZShpdGVtKTtcclxuICAgICAgICBpZiAocmVzdWx0IGluc3RhbmNlb2YgUHJvbWlzZSkge1xyXG4gICAgICAgICAgY29uc3QgbWVzc2FnZSA9IGF3YWl0IHJlc3VsdDtcclxuICAgICAgICAgIGlmIChtZXNzYWdlKSB7XHJcbiAgICAgICAgICAgIHRocm93IG1lc3NhZ2U7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgICAgICAgdGhyb3cgcmVzdWx0O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAoZWRpdG9yLm9uU2F2ZSkge1xyXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGVkaXRvci5vblNhdmUoaXRlbSk7XHJcbiAgICAgICAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIFByb21pc2UpIHtcclxuICAgICAgICAgIGF3YWl0IHJlc3VsdDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChpdGVtLmVkaXRpbmdTdGF0dXMgPT09ICdjcmVhdGUnICYmIGVkaXRvci50eXBlID09PSAncG9wdXAnKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZ3JpZE9wdGlvbi50eXBlID09PSAnbG9jYWwnKSB7XHJcbiAgICAgICAgICB0aGlzLml0ZW1zLnNwbGljZSgwLCAwLCBpdGVtKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy52aWV3SXRlbXMuc3BsaWNlKDAsIDAsIGl0ZW0pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpdGVtLmVkaXRpbmdTdGF0dXMgPSB1bmRlZmluZWQ7XHJcbiAgICAgIHRoaXMuZ2VuZXJhdGVFZGl0b3JIYW5sZGVyKGl0ZW0pO1xyXG4gICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgIHRoaXMubm90aWZ5U2VydmljZS5ub3RpZnkud2FybmluZyhlcnIpO1xyXG4gICAgfSBmaW5hbGx5IHtcclxuICAgICAgaXRlbS5lZGl0b3JIYW5kbGVyLnNhdmluZyA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkNhbmNlbCA9IChpdGVtOiBHcmlkSXRlbSkgPT4ge1xyXG4gICAgY29uc3QgeyBlZGl0b3IgfSA9IHRoaXMuZ3JpZE9wdGlvbjtcclxuICAgIGlmIChlZGl0b3IudHlwZSA9PT0gJ2lubGluZScpIHtcclxuICAgICAgaWYgKHRoaXMuZ3JpZE9wdGlvbi50eXBlID09PSAnbG9jYWwnKSB7XHJcbiAgICAgICAgY29uc3QgaWR4MSA9IHRoaXMuaXRlbXMuaW5kZXhPZihpdGVtKTtcclxuICAgICAgICB0aGlzLml0ZW1zLnNwbGljZShpZHgxLCAxKTtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBpZHgyID0gdGhpcy52aWV3SXRlbXMuaW5kZXhPZihpdGVtKTtcclxuICAgICAgdGhpcy52aWV3SXRlbXMuc3BsaWNlKGlkeDIsIDEpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAoaXRlbS5lZGl0aW5nU3RhdHVzID09PSAnY3JlYXRlJykge1xyXG4gICAgICBpZiAoZWRpdG9yLnR5cGUgIT09ICdwb3B1cCcpIHtcclxuICAgICAgICBpZiAodGhpcy5ncmlkT3B0aW9uLnR5cGUgPT09ICdsb2NhbCcpIHtcclxuICAgICAgICAgIHRoaXMuaXRlbXMuc3BsaWNlKDAsIDEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnZpZXdJdGVtcy5zcGxpY2UoMCwgMSk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIE9iamVjdC5hc3NpZ24oaXRlbSwgaXRlbS50ZW1wb3JhcnkpO1xyXG4gICAgICBpdGVtLmVkaXRpbmdTdGF0dXMgPSB1bmRlZmluZWQ7XHJcbiAgICAgIHRoaXMuZ2VuZXJhdGVFZGl0b3JIYW5sZGVyKGl0ZW0pO1xyXG4gICAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGluaXRFeHRlcm5hbEZpbHRlciA9ICgpID0+IHtcclxuICAgIGlmICh0aGlzLmdyaWRPcHRpb24uZmlsdGVyPy5leHRlcm5hbEZpbHRlcnM/Lmxlbmd0aCkge1xyXG4gICAgICB0aGlzLmdyaWRPcHRpb24uZmlsdGVyLmV4dGVybmFsRmlsdGVycy5mb3JFYWNoKGV4dGVybmFsRmlsdGVyID0+IHtcclxuICAgICAgICBpZiAoZXh0ZXJuYWxGaWx0ZXIudHlwZSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgIGlmIChleHRlcm5hbEZpbHRlci5kZWZhdWx0KSB7XHJcbiAgICAgICAgICAgIHRoaXMuZXh0ZXJuYWxGaWx0ZXJbZXh0ZXJuYWxGaWx0ZXIuZmllbGRdID0gZXh0ZXJuYWxGaWx0ZXIuZGVmYXVsdCA/PyAnJztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGV4dGVybmFsRmlsdGVyLnR5cGUgPT09ICdudW1iZXInKSB7XHJcbiAgICAgICAgICBpZiAoZXh0ZXJuYWxGaWx0ZXIuZGVmYXVsdCkge1xyXG4gICAgICAgICAgICB0aGlzLmV4dGVybmFsRmlsdGVyW2V4dGVybmFsRmlsdGVyLmZpZWxkXSA9IGV4dGVybmFsRmlsdGVyLmRlZmF1bHQgPz8gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZXh0ZXJuYWxGaWx0ZXIudHlwZSA9PT0gJ2RhdGVyYW5nZScpIHtcclxuICAgICAgICAgIHRoaXMuZXh0ZXJuYWxGaWx0ZXJbZXh0ZXJuYWxGaWx0ZXIuZmllbGRdID0ge1xyXG4gICAgICAgICAgICBmcm9tOiBleHRlcm5hbEZpbHRlci5kZWZhdWx0RnJvbSA/PyB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgIHRvOiBleHRlcm5hbEZpbHRlci5kZWZhdWx0VG8gPz8gdW5kZWZpbmVkXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZXh0ZXJuYWxGaWx0ZXIudHlwZSA9PT0gJ251bWJlcnJhbmdlJykge1xyXG4gICAgICAgICAgdGhpcy5leHRlcm5hbEZpbHRlcltleHRlcm5hbEZpbHRlci5maWVsZF0gPSB7XHJcbiAgICAgICAgICAgIGZyb206IGV4dGVybmFsRmlsdGVyLmRlZmF1bHRGcm9tID8/IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgdG86IGV4dGVybmFsRmlsdGVyLmRlZmF1bHRUbyA/PyB1bmRlZmluZWRcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChleHRlcm5hbEZpbHRlci50eXBlID09PSAnZGF0ZXJhbmdlZnVsbCcpIHtcclxuICAgICAgICAgIHRoaXMuZXh0ZXJuYWxGaWx0ZXJbZXh0ZXJuYWxGaWx0ZXIuZmllbGRdID0ge1xyXG4gICAgICAgICAgICBmcm9tOiBleHRlcm5hbEZpbHRlci5kZWZhdWx0RnJvbSA/PyB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgIHRvOiBleHRlcm5hbEZpbHRlci5kZWZhdWx0VG8gPz8gdW5kZWZpbmVkXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZXh0ZXJuYWxGaWx0ZXIudHlwZSA9PT0gJ3ZhbHVlcycpIHsgLy8gYW5kbjFcclxuICAgICAgICAgIGlmIChleHRlcm5hbEZpbHRlci5kZWZhdWx0KSB7XHJcbiAgICAgICAgICAgIHRoaXMuZXh0ZXJuYWxGaWx0ZXJbZXh0ZXJuYWxGaWx0ZXIuZmllbGRdID0gZXh0ZXJuYWxGaWx0ZXIuZGVmYXVsdCA/PyAnJztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIG9uU2VhcmNoID0gKHNlYXJjaFZhbHVlOiBzdHJpbmcsIGl0ZW06IEdyaWRJdGVtLCBjb2x1bW46IFNkR3JpZENvbHVtbikgPT4ge1xyXG4gICAgaXRlbVtjb2x1bW4uZmllbGRdID0gc2VhcmNoVmFsdWU7XHJcbiAgfVxyXG5cclxuICBvbkZpbHRlckNvbmZpZ3VyYXRpb25Mb2FkZWQgPSAocGFyYW06IEZpbHRlckNvbmZpZ3VyYXRpb24pID0+IHtcclxuICAgIHRoaXMucXVpY2tGaWx0ZXJzID0gcGFyYW0ucXVpY2tGaWx0ZXJzIHx8IFtdO1xyXG4gICAgdGhpcy5zZWxlY3RlZFF1aWNrRmlsdGVyID0gcGFyYW0uc2VsZWN0ZWRRdWlja0ZpbHRlciB8fCAnJztcclxuICAgIGlmICh0aGlzLnNlbGVjdGVkUXVpY2tGaWx0ZXIpIHtcclxuICAgICAgY29uc3QgcXVpY2tGaWx0ZXIgPSB0aGlzLnF1aWNrRmlsdGVycy5maW5kKGUgPT4gZS5jb2RlID09PSB0aGlzLnNlbGVjdGVkUXVpY2tGaWx0ZXIpO1xyXG4gICAgICBpZiAocXVpY2tGaWx0ZXIpIHtcclxuICAgICAgICBjb25zdCBmMSA9IEpTT04uc3RyaW5naWZ5KHF1aWNrRmlsdGVyLmZpbHRlcik7XHJcbiAgICAgICAgY29uc3QgZjIgPSBKU09OLnN0cmluZ2lmeShxdWlja0ZpbHRlci5leHRlcm5hbEZpbHRlcik7XHJcbiAgICAgICAgdGhpcy5maWx0ZXIgPSBKU09OLnBhcnNlKGYxKTtcclxuICAgICAgICB0aGlzLmV4dGVybmFsRmlsdGVyID0gdGhpcy5yZWZyZXNoRXh0ZXJuYWxGaWx0ZXIodGhpcy5ncmlkT3B0aW9uPy5maWx0ZXI/LmV4dGVybmFsRmlsdGVycywgSlNPTi5wYXJzZShmMikpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLmlubGluZUV4dGVybmFsID0gcGFyYW0uaW5saW5lRXh0ZXJuYWwgfHwge307XHJcbiAgICB0aGlzLmlubGluZUNvbHVtbiA9IHBhcmFtLmlubGluZUNvbHVtbiB8fCB7fTtcclxuICAgIHRoaXMucmVzaXplKCk7XHJcbiAgfVxyXG5cclxuICBvblNlbGVjdFF1aWNrRmlsdGVyID0gKHZhbHVlOiBzdHJpbmcpID0+IHtcclxuICAgIGNvbnN0IHF1aWNrRmlsdGVyID0gdGhpcy5xdWlja0ZpbHRlcnMuZmluZChlID0+IGUuY29kZSA9PT0gdmFsdWUpO1xyXG4gICAgaWYgKHF1aWNrRmlsdGVyPy5jb2RlKSB7XHJcbiAgICAgIGNvbnN0IGYxID0gSlNPTi5zdHJpbmdpZnkocXVpY2tGaWx0ZXIuZmlsdGVyKTtcclxuICAgICAgY29uc3QgZjIgPSBKU09OLnN0cmluZ2lmeShxdWlja0ZpbHRlci5leHRlcm5hbEZpbHRlcik7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRRdWlja0ZpbHRlciA9IHF1aWNrRmlsdGVyPy5jb2RlO1xyXG4gICAgICB0aGlzLmZpbHRlciA9IEpTT04ucGFyc2UoZjEpO1xyXG4gICAgICB0aGlzLmV4dGVybmFsRmlsdGVyID0gdGhpcy5yZWZyZXNoRXh0ZXJuYWxGaWx0ZXIodGhpcy5ncmlkT3B0aW9uPy5maWx0ZXI/LmV4dGVybmFsRmlsdGVycywgSlNPTi5wYXJzZShmMikpO1xyXG4gICAgICB0aGlzLnVwZGF0ZUZpbHRlcigpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZFF1aWNrRmlsdGVyID0gJyc7XHJcbiAgICAgIHRoaXMub25DbGVhckZpbHRlcigpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zZEdyaWRQb3B1cEZpbHRlcj8udXBkYXRlQ29uZmlndXJhdGlvbih0aGlzLnNlbGVjdGVkUXVpY2tGaWx0ZXIpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRFeHBvcnRJdGVtcyA9IGFzeW5jIChwYWdlTnVtYmVyOiBudW1iZXIgPSAxLCBwYWdlU2l6ZTogbnVtYmVyID0gMTAwMDApID0+IHtcclxuICAgIGlmICh0aGlzLmlzTG9hZGluZykge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7XHJcbiAgICB0cnkge1xyXG4gICAgICBpZiAodGhpcy5ncmlkT3B0aW9uLnR5cGUgIT09ICdsb2NhbCcpIHtcclxuICAgICAgICBjb25zdCBoYW5kbGVyID0gdGhpcy5oYW5kbGVyIGFzIElIYW5kbGVyU2VydmVyO1xyXG4gICAgICAgIGNvbnN0IGZpbHRlciA9IGhhbmRsZXIubWFwUmVxdWVzdCh0aGlzLmdldEZpbHRlckluZm8ocGFnZU51bWJlciwgcGFnZVNpemUpKTtcclxuICAgICAgICBpZiAodGhpcy5ncmlkT3B0aW9uLm1ldGhvZCA9PT0gJ0dFVCcpIHtcclxuICAgICAgICAgIGNvbnN0IHF1ZXJ5U3RyaW5nID0gT2JqZWN0LmtleXMoZmlsdGVyKS5maWx0ZXIoa2V5ID0+IGZpbHRlcltrZXldICE9PSBudWxsICYmIGZpbHRlcltrZXldICE9PSB1bmRlZmluZWQpXHJcbiAgICAgICAgICAgIC5tYXAoa2V5ID0+IGtleSArICc9JyArIGZpbHRlcltrZXldKS5qb2luKCcmJyk7XHJcbiAgICAgICAgICBjb25zdCB1cmwgPSB0aGlzLmdyaWRPcHRpb24udXJsLmluY2x1ZGVzKCc/JykgPyBgJHt0aGlzLmdyaWRPcHRpb24udXJsfSYke3F1ZXJ5U3RyaW5nfWAgOiBgJHt0aGlzLmdyaWRPcHRpb24udXJsfT8ke3F1ZXJ5U3RyaW5nfWA7XHJcbiAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuYXBpU2VydmljZS5nZXQodXJsKTtcclxuICAgICAgICAgIHJldHVybiBoYW5kbGVyLm1hcFJlc3BvbnNlKHJlc3BvbnNlKS5pdGVtcztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmFwaVNlcnZpY2UucG9zdCh0aGlzLmdyaWRPcHRpb24udXJsLCBmaWx0ZXIpO1xyXG4gICAgICAgICAgcmV0dXJuIGhhbmRsZXIubWFwUmVzcG9uc2UocmVzcG9uc2UpLml0ZW1zO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBsZXQgbG9jYWxJdGVtcyA9IFtdO1xyXG4gICAgICAgIGNvbnN0IGhhbmRsZXIgPSB0aGlzLmhhbmRsZXIgYXMgSUhhbmRsZXJMb2NhbDtcclxuICAgICAgICBpZiAodHlwZW9mICh0aGlzLmdyaWRPcHRpb24uaXRlbXMpID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICBjb25zdCByZXN1bHRzID0gdGhpcy5ncmlkT3B0aW9uLml0ZW1zKCk7XHJcbiAgICAgICAgICBpZiAocmVzdWx0cyBpbnN0YW5jZW9mIFByb21pc2UpIHtcclxuICAgICAgICAgICAgbG9jYWxJdGVtcyA9IGF3YWl0IHJlc3VsdHM7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBsb2NhbEl0ZW1zID0gcmVzdWx0cztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgbG9jYWxJdGVtcyA9IHRoaXMuZ3JpZE9wdGlvbi5pdGVtcztcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBoYW5kbGVyLmZpbHRlcihsb2NhbEl0ZW1zLCB7XHJcbiAgICAgICAgICBjdXN0b21GaWx0ZXI6IHRoaXMuZ3JpZE9wdGlvbi5maWx0ZXIuY3VzdG9tRmlsdGVyLFxyXG4gICAgICAgICAgcmF3RmlsdGVyOiB0aGlzLmZpbHRlcixcclxuICAgICAgICAgIGNvbHVtbnM6IHRoaXMuZ3JpZE9wdGlvbi5jb2x1bW5zLFxyXG4gICAgICAgICAgcmF3RXh0ZXJuYWxGaWx0ZXI6IHRoaXMuZXh0ZXJuYWxGaWx0ZXIsXHJcbiAgICAgICAgICBleHRlcm5hbEZpbHRlcnM6IHRoaXMuZ3JpZE9wdGlvbi5maWx0ZXI/LmV4dGVybmFsRmlsdGVycyxcclxuICAgICAgICAgIG9yZGVyQnk6IHRoaXMub3JkZXJCeSxcclxuICAgICAgICAgIG9yZGVyRGlyZWN0aW9uOiB0aGlzLm9yZGVyRGlyZWN0aW9uLFxyXG4gICAgICAgICAgcGFnZU51bWJlcixcclxuICAgICAgICAgIHBhZ2VTaXplXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlLml0ZW1zO1xyXG4gICAgICB9XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICB0aGlzLm5vdGlmeVNlcnZpY2UuaGFuZGxlLmVycm9yKGVycm9yKTtcclxuICAgIH0gZmluYWxseSB7XHJcbiAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0RmlsdGVySW5mbyA9IChwYWdlTnVtYmVyOiBudW1iZXIsIHBhZ2VTaXplOiBudW1iZXIpOiBTZEdyaWRGaWx0ZXJJbmZvID0+IHtcclxuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHRoaXMuZmlsdGVyKSkge1xyXG4gICAgICBpZiAodHlwZW9mICh0aGlzLmZpbHRlcltrZXldKSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICB0aGlzLmZpbHRlcltrZXldID0gdGhpcy5maWx0ZXJba2V5XS50cmltKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHRoaXMuZXh0ZXJuYWxGaWx0ZXIpKSB7XHJcbiAgICAgIGlmICh0eXBlb2YgKHRoaXMuZXh0ZXJuYWxGaWx0ZXJba2V5XSkgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgdGhpcy5leHRlcm5hbEZpbHRlcltrZXldID0gdGhpcy5leHRlcm5hbEZpbHRlcltrZXldLnRyaW0oKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgY3VzdG9tRmlsdGVyOiB0aGlzLmdyaWRPcHRpb24uZmlsdGVyLmN1c3RvbUZpbHRlcixcclxuICAgICAgcmF3RmlsdGVyOiB0aGlzLmZpbHRlcixcclxuICAgICAgY29sdW1uczogdGhpcy5ncmlkT3B0aW9uLmNvbHVtbnMsXHJcbiAgICAgIHJhd0V4dGVybmFsRmlsdGVyOiB0aGlzLmV4dGVybmFsRmlsdGVyLFxyXG4gICAgICBleHRlcm5hbEZpbHRlcnM6IHRoaXMuZ3JpZE9wdGlvbi5maWx0ZXI/LmV4dGVybmFsRmlsdGVycyxcclxuICAgICAgb3JkZXJCeTogdGhpcy5vcmRlckJ5LFxyXG4gICAgICBvcmRlckRpcmVjdGlvbjogdGhpcy5vcmRlckRpcmVjdGlvbixcclxuICAgICAgcGFnZU51bWJlcixcclxuICAgICAgcGFnZVNpemVcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBvbkV4cG9ydEJ5VGVtcGxhdGUgPSBhc3luYyAocGFyYW1zOiB7IGV4Y2VsQ29uZmlnOiBhbnksIGV4Y2VsQ29sdW1uczogYW55W10gfSkgPT4ge1xyXG4gICAgdGhpcy5sb2FkaW5nU2VydmljZS5zdGFydCgpO1xyXG4gICAgbGV0IGV4cG9ydEl0ZW1zID0gW107XHJcbiAgICBpZiAodGhpcy5ncmlkT3B0aW9uLmV4cG9ydD8uaXRlbXMpIHtcclxuICAgICAgZXhwb3J0SXRlbXMgPSBhd2FpdCB0aGlzLmdyaWRPcHRpb24uZXhwb3J0Py5pdGVtcyh0aGlzLmdldEZpbHRlckluZm8oMSwgMTAwMDApKS5maW5hbGx5KHRoaXMubG9hZGluZ1NlcnZpY2Uuc3RvcCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBleHBvcnRJdGVtcyA9IGF3YWl0IHRoaXMuZ2V0RXhwb3J0SXRlbXMoKS5maW5hbGx5KHRoaXMubG9hZGluZ1NlcnZpY2Uuc3RvcCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5ncmlkT3B0aW9uLmV4cG9ydD8ubWFwcGluZykge1xyXG4gICAgICBjb25zdCByZXN1bHRzID0gdGhpcy5ncmlkT3B0aW9uLmV4cG9ydC5tYXBwaW5nKGV4cG9ydEl0ZW1zLCBwYXJhbXMuZXhjZWxDb25maWcubmFtZSk7XHJcbiAgICAgIGlmIChyZXN1bHRzIGluc3RhbmNlb2YgUHJvbWlzZSkge1xyXG4gICAgICAgIGV4cG9ydEl0ZW1zID0gYXdhaXQgcmVzdWx0cztcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBleHBvcnRJdGVtcyA9IHJlc3VsdHM7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGNvbnN0IGNvbHVtbnMgPSBbLi4udGhpcy5ncmlkT3B0aW9uLmNvbHVtbnMsIC4uLih0aGlzLmdyaWRPcHRpb24uZXhwb3J0Py5jb2x1bW5zIHx8IFtdKV07XHJcbiAgICBjb25zdCBpdGVtcyA9IGV4cG9ydEl0ZW1zLm1hcChpdGVtID0+IHtcclxuICAgICAgY29uc3Qgb2JqOiBhbnkgPSB7fTtcclxuICAgICAgY29uc3QgaGFuZGxlID0gKGNvbHVtbjogU2RHcmlkQ29sdW1uKSA9PiB7XHJcbiAgICAgICAgaWYgKGNvbHVtbi50eXBlID09PSAnY2hpbGRyZW4nKSB7XHJcbiAgICAgICAgICBjb2x1bW4uY2hpbGRyZW4uZm9yRWFjaChoYW5kbGUpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoY29sdW1uLnRyYW5zZm9ybSkge1xyXG4gICAgICAgICAgb2JqW2NvbHVtbi5maWVsZF0gPSBjb2x1bW4udHJhbnNmb3JtKGl0ZW1bY29sdW1uLmZpZWxkXSwgaXRlbSk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChpdGVtW2NvbHVtbi5maWVsZF0gPT09IHVuZGVmaW5lZCB8fCBpdGVtW2NvbHVtbi5maWVsZF0gPT09IG51bGwgfHwgaXRlbVtjb2x1bW4uZmllbGRdID09PSAnJykge1xyXG4gICAgICAgICAgb2JqW2NvbHVtbi5maWVsZF0gPSAnJztcclxuICAgICAgICB9IGVsc2UgaWYgKGNvbHVtbi50eXBlID09PSAnc3RyaW5nJyB8fCBjb2x1bW4udHlwZSA9PT0gJ251bWJlcicgfHwgY29sdW1uLnR5cGUgPT09ICdjb2xvcicpIHtcclxuICAgICAgICAgIC8vIE7hur91IGNlbGwgbMOgIHN0cmluZyBob+G6t2MgbnVtYmVyIHRow6wgZ8OhbiBi4bqxbmcgY2jDrW5oIG7Ds1xyXG4gICAgICAgICAgb2JqW2NvbHVtbi5maWVsZF0gPSBpdGVtW2NvbHVtbi5maWVsZF07XHJcbiAgICAgICAgfSBlbHNlIGlmIChjb2x1bW4udHlwZSA9PT0gJ2Jvb2wnKSB7XHJcbiAgICAgICAgICAvLyBO4bq/dSBsw6AgYm9vbCB0aMOsIGfDoW4gYuG6sW5nIGdpw6EgdHLhu4sgdHJ1ZVZhbHVlIHbDoCBmYWxzZVZhbHVlIChu4bq/dSBjw7MpLCBt4bq3YyDEkeG7i25oIGzDoCBUUlVFL0ZBTFNFXHJcbiAgICAgICAgICBpZiAoaXRlbVtjb2x1bW4uZmllbGRdKSB7XHJcbiAgICAgICAgICAgIG9ialtjb2x1bW4uZmllbGRdID0gY29sdW1uLnRydWVWYWx1ZSB8fCAnVHJ1ZSc7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBvYmpbY29sdW1uLmZpZWxkXSA9IGNvbHVtbi5mYWxzZVZhbHVlIHx8ICdGYWxzZSc7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmIChjb2x1bW4udHlwZSA9PT0gJ2RhdGUnKSB7XHJcbiAgICAgICAgICAvLyBO4bq/dSBsw6AgZGF0ZSB0aMOsIGNvbnZlcnQgdGhlbyDEkcO6bmcgZm9ybWF0XHJcbiAgICAgICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoaXRlbVtjb2x1bW4uZmllbGRdKTtcclxuICAgICAgICAgIG9ialtjb2x1bW4uZmllbGRdID0gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oZGF0ZSwgJ2RkL01NL3l5eXknKTtcclxuICAgICAgICB9IGVsc2UgaWYgKGNvbHVtbi50eXBlID09PSAnZGF0ZXRpbWUnKSB7XHJcbiAgICAgICAgICAvLyBO4bq/dSBsw6AgZGF0ZXRpbWUgdGjDrCBjb252ZXJ0IHRoZW8gxJHDum5nIGZvcm1hdFxyXG4gICAgICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKGl0ZW1bY29sdW1uLmZpZWxkXSk7XHJcbiAgICAgICAgICBvYmpbY29sdW1uLmZpZWxkXSA9IHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKGRhdGUsICdkZC9NTS95eXl5IEhIOm1tOnNzJyk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChjb2x1bW4udHlwZSA9PT0gJ3RpbWUnKSB7XHJcbiAgICAgICAgICAvLyBO4bq/dSBsw6AgdGltZSB0aMOsIGNvbnZlcnQgdGhlbyDEkcO6bmcgZm9ybWF0XHJcbiAgICAgICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoaXRlbVtjb2x1bW4uZmllbGRdKTtcclxuICAgICAgICAgIG9ialtjb2x1bW4uZmllbGRdID0gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oZGF0ZSwgJ0hIOm1tOnNzJyk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChjb2x1bW4udHlwZSA9PT0gJ3ZhbHVlcycpIHtcclxuICAgICAgICAgIC8vIE7hur91IGzDoCB2YWx1ZXMgdGjDrCBs4bqleSBnacOhIHRy4buLIGPhu6dhIHZhbHVlIMSRxrDhu6NjIGNo4buNblxyXG4gICAgICAgICAgY29uc3QgZGF0YSA9IGNvbHVtbi52YWx1ZXMuZmluZChlID0+IGUudmFsdWUgPT09IGl0ZW1bY29sdW1uLmZpZWxkXSk7XHJcbiAgICAgICAgICBpZiAoZGF0YSkge1xyXG4gICAgICAgICAgICBvYmpbY29sdW1uLmZpZWxkXSA9IGRhdGEudGV4dDtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIG9ialtjb2x1bW4uZmllbGRdID0gaXRlbVtjb2x1bW4uZmllbGRdO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSBpZiAoY29sdW1uLnR5cGUgPT09ICdyYWRpbycpIHtcclxuICAgICAgICAgIGNvbnN0IGRhdGEgPSBjb2x1bW4udmFsdWVzLmZpbmQoZSA9PiBlW2NvbHVtbi52YWx1ZUZpZWxkXSA9PT0gaXRlbVtjb2x1bW4uZmllbGRdKTtcclxuICAgICAgICAgIGlmIChkYXRhKSB7XHJcbiAgICAgICAgICAgIG9ialtjb2x1bW4uZmllbGRdID0gZGF0YVtjb2x1bW4uZGlzcGxheUZpZWxkXTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIG9ialtjb2x1bW4uZmllbGRdID0gaXRlbVtjb2x1bW4uZmllbGRdO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfTtcclxuICAgICAgY29sdW1ucy5mb3JFYWNoKGhhbmRsZSk7XHJcbiAgICAgIHJldHVybiBvYmo7XHJcbiAgICB9KTtcclxuICAgIHRoaXMuZXhwb3J0U2VydmljZS5leHBvcnRCeVRlbXBsYXRlKHtcclxuICAgICAgZmlsZVBhdGg6IHBhcmFtcy5leGNlbENvbmZpZy5mdWxsUGF0aCxcclxuICAgICAgY29sdW1uczogcGFyYW1zLmV4Y2VsQ29sdW1ucyxcclxuICAgICAgaXRlbXNcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGludmFsaWRJdGVtcygpIHtcclxuICAgIHJldHVybiB0aGlzLml0ZW1zLmZpbHRlcihlID0+IGUuZWRpdG9ySGFuZGxlcj8uZXJyb3JNZXNzYWdlKS5tYXAoZSA9PiB7XHJcbiAgICAgIGNvbnN0IHsgdGVtcG9yYXJ5LFxyXG4gICAgICAgIG9yaWdpbkl0ZW0sXHJcbiAgICAgICAgZWRpdG9ySGFuZGxlcixcclxuICAgICAgICBlZGl0aW5nU3RhdHVzLFxyXG4gICAgICAgIGlzQ2hlY2tlZCxcclxuICAgICAgICBzdWJJbmZvcm1hdGlvbixcclxuICAgICAgICBibGlua2VyLFxyXG4gICAgICAgIC4uLml0ZW0gfSA9IGU7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgaXRlbSxcclxuICAgICAgICBtZXNzYWdlOiBlLmVkaXRvckhhbmRsZXIuZXJyb3JNZXNzYWdlXHJcbiAgICAgIH07XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGdldCBncmlkSXRlbXMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5pdGVtcy5tYXAoZSA9PiB7XHJcbiAgICAgIGNvbnN0IHsgdGVtcG9yYXJ5LFxyXG4gICAgICAgIG9yaWdpbkl0ZW0sXHJcbiAgICAgICAgZWRpdG9ySGFuZGxlcixcclxuICAgICAgICBlZGl0aW5nU3RhdHVzLFxyXG4gICAgICAgIGlzQ2hlY2tlZCxcclxuICAgICAgICBzdWJJbmZvcm1hdGlvbixcclxuICAgICAgICBibGlua2VyLFxyXG4gICAgICAgIC4uLml0ZW0gfSA9IGU7XHJcbiAgICAgIHJldHVybiBpdGVtO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBvbkVkaXRvckNoYW5nZSA9ICgpID0+IHtcclxuICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcbiAgb25TZWxlY3RQYWdlU2l6ZSA9ICgpID0+IHtcclxuICAgIHRoaXMucmVsb2FkKCk7XHJcbiAgfVxyXG4gIHByaXZhdGUgcmVmcmVzaEV4dGVybmFsRmlsdGVyID0gKGV4dGVybmFsRmlsdGVyczogU2RHcmlkRXh0ZXJuYWxGaWx0ZXJbXSwgZXh0ZXJuYWxGaWx0ZXI6IGFueSkgPT4ge1xyXG4gICAgZXh0ZXJuYWxGaWx0ZXIgPSBleHRlcm5hbEZpbHRlciB8fCB7fTtcclxuICAgIGV4dGVybmFsRmlsdGVycyA9IGV4dGVybmFsRmlsdGVycyB8fCBbXTtcclxuICAgIGV4dGVybmFsRmlsdGVycy5mb3JFYWNoKGUgPT4ge1xyXG4gICAgICBpZiAoZS50eXBlID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgIGV4dGVybmFsRmlsdGVyW2UuZmllbGRdID0gZXh0ZXJuYWxGaWx0ZXJbZS5maWVsZF0gPz8gZS5kZWZhdWx0ID8/ICcnO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBpZiAoZS50eXBlID09PSAnbnVtYmVyJykge1xyXG4gICAgICAgIGV4dGVybmFsRmlsdGVyW2UuZmllbGRdID0gZXh0ZXJuYWxGaWx0ZXJbZS5maWVsZF0gPz8gZS5kZWZhdWx0ID8/IHVuZGVmaW5lZDtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGUudHlwZSA9PT0gJ2RhdGVyYW5nZScpIHtcclxuICAgICAgICBleHRlcm5hbEZpbHRlcltlLmZpZWxkXSA9IHtcclxuICAgICAgICAgIGZyb206IGV4dGVybmFsRmlsdGVyW2UuZmllbGRdPy5mcm9tID8/IGUuZGVmYXVsdEZyb20gPz8gdW5kZWZpbmVkLFxyXG4gICAgICAgICAgdG86IGV4dGVybmFsRmlsdGVyW2UuZmllbGRdPy50byA/PyBlLmRlZmF1bHRUbyA/PyB1bmRlZmluZWRcclxuICAgICAgICB9O1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBpZiAoZS50eXBlID09PSAnbnVtYmVycmFuZ2UnKSB7XHJcbiAgICAgICAgZXh0ZXJuYWxGaWx0ZXJbZS5maWVsZF0gPSB7XHJcbiAgICAgICAgICBmcm9tOiBleHRlcm5hbEZpbHRlcltlLmZpZWxkXT8uZnJvbSA/PyBlLmRlZmF1bHRGcm9tID8/IHVuZGVmaW5lZCxcclxuICAgICAgICAgIHRvOiBleHRlcm5hbEZpbHRlcltlLmZpZWxkXT8udG8gPz8gZS5kZWZhdWx0VG8gPz8gdW5kZWZpbmVkXHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGUudHlwZSA9PT0gJ2RhdGVyYW5nZWZ1bGwnKSB7XHJcbiAgICAgICAgZXh0ZXJuYWxGaWx0ZXJbZS5maWVsZF0gPSB7XHJcbiAgICAgICAgICBmcm9tOiBleHRlcm5hbEZpbHRlcltlLmZpZWxkXT8uZnJvbSA/PyBlLmRlZmF1bHRGcm9tID8/IHVuZGVmaW5lZCxcclxuICAgICAgICAgIHRvOiBleHRlcm5hbEZpbHRlcltlLmZpZWxkXT8udG8gPz8gZS5kZWZhdWx0VG8gPz8gdW5kZWZpbmVkXHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGUudHlwZSA9PT0gJ3ZhbHVlcycpIHsgLy8gYW5kbjFcclxuICAgICAgICBleHRlcm5hbEZpbHRlcltlLmZpZWxkXSA9IChleHRlcm5hbEZpbHRlcltlLmZpZWxkXSB8fCBlLmRlZmF1bHQpID8/ICcnO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gZXh0ZXJuYWxGaWx0ZXI7XHJcbiAgfVxyXG5cclxuICBvbkNyZWF0ZVF1aWNrRmlsdGVyID0gKGV2PzogRXZlbnQpID0+IHtcclxuICAgIHRoaXMubWF0U2VsZWN0Py5jbG9zZSgpO1xyXG4gICAgdGhpcy5vbkZpbHRlclBvcHVwKCk7XHJcbiAgICB0aGlzLnNkR3JpZFBvcHVwRmlsdGVyPy5jbG9zZSgpO1xyXG4gICAgdGhpcy5zZEdyaWRQb3B1cEZpbHRlcj8ub25DcmVhdGVRdWlja0ZpbHRlcihldik7XHJcbiAgfVxyXG5cclxuICBvbkVkaXRRdWlja0ZpbHRlciA9IChldjogRXZlbnQsIHF1aWNrRmlsdGVyPzogUXVpY2tGaWx0ZXIpID0+IHtcclxuICAgIHRoaXMubWF0U2VsZWN0Py5jbG9zZSgpO1xyXG4gICAgdGhpcy5vbkZpbHRlclBvcHVwKCk7XHJcbiAgICB0aGlzLnNkR3JpZFBvcHVwRmlsdGVyPy5jbG9zZSgpO1xyXG4gICAgdGhpcy5zZEdyaWRQb3B1cEZpbHRlcj8ub25FZGl0UXVpY2tGaWx0ZXIoZXYsIHF1aWNrRmlsdGVyKTtcclxuICB9XHJcblxyXG4gIG9uRGVsZXRlUXVpY2tGaWx0ZXIgPSAoZXY6IEV2ZW50LCBxdWlja0ZpbHRlcj86IFF1aWNrRmlsdGVyKSA9PiB7XHJcbiAgICB0aGlzLm1hdFNlbGVjdD8uY2xvc2UoKTtcclxuICAgIHRoaXMub25GaWx0ZXJQb3B1cCgpO1xyXG4gICAgdGhpcy5zZEdyaWRQb3B1cEZpbHRlcj8uY2xvc2UoKTtcclxuICAgIHRoaXMuc2RHcmlkUG9wdXBGaWx0ZXI/Lm9uRGVsZXRlUXVpY2tGaWx0ZXIoZXYsIHF1aWNrRmlsdGVyKTtcclxuICB9XHJcbn1cclxuIl19
|
|
1191
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiQzovVXNlcnMvbmdoaWF0dDE1X29uZW1vdW50L0RvY3VtZW50cy9vbmVtb3VudC9saWItY29yZS11aS9wcm9qZWN0cy9zZC1jb3JlL2dyaWQvIiwic291cmNlcyI6WyJzcmMvbGliL2dyaWQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxLQUFLLEVBQ0wsU0FBUyxFQUVULHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsWUFBWSxFQUNaLFNBQVMsRUFHVCxNQUFNLEVBQ04sUUFBUSxFQUNSLGVBQWUsRUFDaEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzVELE9BQU8sQ0FBQyxNQUFNLFFBQVEsQ0FBQztBQUV2QixPQUFPLEVBQ0wsWUFBWSxFQUNiLE1BQU0sc0JBQXNCLENBQUM7QUFFOUIsT0FBTyxFQUNMLGVBQWUsRUFDaEIsTUFBTSx5QkFBeUIsQ0FBQztBQUVqQyxPQUFPLEVBQ0wsZ0JBQWdCLEVBQ2pCLE1BQU0sMEJBQTBCLENBQUM7QUFFbEMsT0FBTyxFQUNMLGtCQUFrQixFQUNuQixNQUFNLDRCQUE0QixDQUFDO0FBRXBDLE9BQU8sRUFBZ0IsaUJBQWlCLEVBQWdELE1BQU0sY0FBYyxDQUFDO0FBSTdHLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBR2hFLE9BQU8sRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBTTNDLE9BQU8sRUFBc0IsV0FBVyxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDcEYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzNELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGlD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dCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIElucHV0LFxyXG4gIFZpZXdDaGlsZCxcclxuICBFbGVtZW50UmVmLFxyXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIFZpZXdDaGlsZHJlbixcclxuICBRdWVyeUxpc3QsXHJcbiAgQWZ0ZXJWaWV3SW5pdCxcclxuICBPbkRlc3Ryb3ksXHJcbiAgSW5qZWN0LFxyXG4gIE9wdGlvbmFsLFxyXG4gIENvbnRlbnRDaGlsZHJlblxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBEYXRlUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IERldmljZURldGVjdG9yU2VydmljZSB9IGZyb20gJ25neC1kZXZpY2UtZGV0ZWN0b3InO1xyXG5pbXBvcnQgJCBmcm9tICdqcXVlcnknO1xyXG5cclxuaW1wb3J0IHtcclxuICBTZEFwaVNlcnZpY2VcclxufSBmcm9tICdAc2QtYW5ndWxhci9jb3JlL2FwaSc7XHJcblxyXG5pbXBvcnQge1xyXG4gIFNkTm90aWZ5U2VydmljZVxyXG59IGZyb20gJ0BzZC1hbmd1bGFyL2NvcmUvbm90aWZ5JztcclxuXHJcbmltcG9ydCB7XHJcbiAgU2RMb2FkaW5nU2VydmljZVxyXG59IGZyb20gJ0BzZC1hbmd1bGFyL2NvcmUvbG9hZGluZyc7XHJcblxyXG5pbXBvcnQge1xyXG4gIFNkVHJhbnNsYXRlU2VydmljZVxyXG59IGZyb20gJ0BzZC1hbmd1bGFyL2NvcmUvdHJhbnNsYXRlJztcclxuXHJcbmltcG9ydCB7IFNkR3JpZE9wdGlvbiwgZGVmYXVsdEdyaWRPcHRpb24sIEdyaWRJdGVtLCBTZEdyaWRDb2x1bW4sIFNkR3JpZEV4dGVybmFsRmlsdGVyIH0gZnJvbSAnLi9ncmlkLm1vZGVsJztcclxuXHJcbmltcG9ydCB7IENvbmZpZ1Jlc3VsdCB9IGZyb20gJy4vY29tcG9uZW50cy9ncmlkLWNvbmZpZy9ncmlkLWNvbmZpZy5tb2RlbCc7XHJcbmltcG9ydCB7IFNkR3JpZENvbmZpZyB9IGZyb20gJy4vY29tcG9uZW50cy9ncmlkLWNvbmZpZy9ncmlkLWNvbmZpZy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBFZGl0b3JIYW5kbGVyUGlwZSB9IGZyb20gJy4vcGlwZXMvZWRpdG9yLWhhbmRsZXIucGlwZSc7XHJcbmltcG9ydCB7IFNkR3JpZFBvcHVwRWRpdG9yIH0gZnJvbSAnLi9jb21wb25lbnRzL2dyaWQtcG9wdXAtZWRpdG9yL2dyaWQtcG9wdXAtZWRpdG9yLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFNkR3JpZFBvcHVwRmlsdGVyIH0gZnJvbSAnLi9jb21wb25lbnRzL2dyaWQtcG9wdXAtZmlsdGVyL2dyaWQtcG9wdXAtZmlsdGVyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IG1lcmdlLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgU2RHcmlkUG9wdXBFeHBvcnRFeGNlbCB9IGZyb20gJy4vY29tcG9uZW50cy9ncmlkLXBvcHVwLWV4cG9ydC1leGNlbC9ncmlkLXBvcHVwLWV4cG9ydC1leGNlbC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBRdWlja0ZpbHRlciwgRmlsdGVyQ29uZmlndXJhdGlvbiB9IGZyb20gJy4vY29tcG9uZW50cy9ncmlkLXBvcHVwLWZpbHRlci9ncmlkLXBvcHVwLWZpbHRlci5tb2RlbCc7XHJcbmltcG9ydCB7IE1hdFNlbGVjdCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NlbGVjdCc7XHJcbmltcG9ydCB7IFNkR3JpZEZpbHRlckluZm8gfSBmcm9tICcuL21vZGVscy9maWx0ZXItaW5mby5tb2RlbCc7XHJcblxyXG5pbXBvcnQgeyBJR3JpZENvbmZpZ3VyYXRpb24sIEdSSURfQ09ORklHIH0gZnJvbSAnLi9tb2RlbHMvZ3JpZC1jb25maWd1cmF0aW9uLm1vZGVsJztcclxuaW1wb3J0IHsgTWF0UGFnaW5hdG9yIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcGFnaW5hdG9yJztcclxuaW1wb3J0IHsgU2RDZWxsRGVmRGlyZWN0aXZlIH0gZnJvbSAnLi9kaXJlY3RpdmVzL2NlbGwtZGVmLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IFNkQ2VsbEZvb3RlckRldkRpcmVjdGl2ZSB9IGZyb20gJy4vZGlyZWN0aXZlcy9jZWxsLWZvb3Rlci1kZWYuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgc3RhcnRXaXRoIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBTZENlbGxFZGl0b3JEZWZEaXJlY3RpdmUgfSBmcm9tICcuL2RpcmVjdGl2ZXMvY2VsbC1lZGl0b3ItZGVmLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IElIYW5kbGVyU2VydmVyLCBJSGFuZGxlckxvY2FsIH0gZnJvbSAnLi9tb2RlbHMvaGFuZGxlcic7XHJcbmltcG9ydCB7IEhhbmRsZXJMb2NhbCB9IGZyb20gJy4vbW9kZWxzL2hhbmRsZXItbG9jYWwnO1xyXG5pbXBvcnQgeyBIYW5kbGVyRG90bmV0IH0gZnJvbSAnLi9tb2RlbHMvaGFuZGxlci1kb3RuZXQnO1xyXG5pbXBvcnQgeyBTZEdyaWRJbXBvcnRFeGNlbCB9IGZyb20gJy4vY29tcG9uZW50cy9ncmlkLWltcG9ydC1leGNlbC9ncmlkLWltcG9ydC1leGNlbC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBTZEV4cG9ydFNlcnZpY2UgfSBmcm9tICdAc2QtYW5ndWxhci9jb3JlL2V4cG9ydCc7XHJcblxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdzZC1ncmlkJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vZ3JpZC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vZ3JpZC5jb21wb25lbnQuc2NzcyddLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTZEdyaWQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xyXG4gIHByaXZhdGUgaGFuZGxlcjogSUhhbmRsZXJTZXJ2ZXIgfCBJSGFuZGxlckxvY2FsO1xyXG4gIGlzTW9iaWxlT3JUYWJsZXQgPSBmYWxzZTtcclxuICBkaXNwbGF5S2V5ID0gJ1NEQ1VTVE9NJztcclxuICBncmlkT3B0aW9uOiBTZEdyaWRPcHRpb247XHJcbiAgb3JkZXJCeTogc3RyaW5nO1xyXG4gIG9yZGVyRGlyZWN0aW9uOiAnQVNDJyB8ICdERVNDJztcclxuICBsb2NhbEl0ZW1zOiBHcmlkSXRlbVtdID0gW107XHJcbiAgaXRlbXM6IEdyaWRJdGVtW10gPSBbXTtcclxuICB0b3RhbDogbnVtYmVyO1xyXG4gIGZpbHRlcjoge1xyXG4gICAgW2tleTogc3RyaW5nXTogYW55XHJcbiAgfSA9IHt9O1xyXG4gIGV4dGVybmFsRmlsdGVyOiB7XHJcbiAgICBba2V5OiBzdHJpbmddOiBhbnlcclxuICB9ID0ge307XHJcbiAgaGlkZGVuUGFnaW5hdGUgPSBmYWxzZTtcclxuICBpbmxpbmVFeHRlcm5hbDoge1xyXG4gICAgW2tleTogc3RyaW5nXTogYm9vbGVhbjtcclxuICB9ID0ge307XHJcbiAgaW5saW5lQ29sdW1uOiB7XHJcbiAgICBba2V5OiBzdHJpbmddOiBib29sZWFuO1xyXG4gIH0gPSB7fTtcclxuICBxdWlja0ZpbHRlcnM6IFF1aWNrRmlsdGVyW10gPSBbXTtcclxuICBzZWxlY3RlZFF1aWNrRmlsdGVyOiBzdHJpbmc7XHJcbiAgLy8gUGFnaW5hdGVcclxuICBwYWdlcyA9IFsxXTtcclxuICBwYWdlQ291bnQgPSA1O1xyXG4gIHRvdGFsUGFnZSA9IDE7XHJcblxyXG4gIC8vIExvYWRpbmdcclxuICBpc0xvYWRpbmcgPSBmYWxzZTtcclxuXHJcbiAgdmlld0l0ZW1zOiBHcmlkSXRlbVtdID0gW107XHJcbiAgc3VtYXJpemU6IHN0cmluZztcclxuXHJcbiAgZml4ZWRDb2x1bW5zOiBTZEdyaWRDb2x1bW5bXSA9IFtdO1xyXG4gIG5vcm1hbENvbHVtbnM6IFNkR3JpZENvbHVtbltdID0gW107XHJcbiAgY29sdW1uczogU2RHcmlkQ29sdW1uW10gPSBbXTtcclxuXHJcbiAgaXNDaGVja2VkQWxsID0gZmFsc2U7XHJcbiAgc2VsZWN0ZWRJdGVtczogYW55W10gPSBbXTtcclxuXHJcbiAgQFZpZXdDaGlsZHJlbignZml4ZWRIZWFkZXInKSBwcml2YXRlIGZpeGVkSGVhZGVyczogUXVlcnlMaXN0PEVsZW1lbnRSZWY+O1xyXG4gIEBWaWV3Q2hpbGRyZW4oJ2ZpeGVkQm9keScpIHByaXZhdGUgZml4ZWRCb2RpZXM6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPjtcclxuXHJcbiAgQFZpZXdDaGlsZCgnZml4ZWRHcmlkQ29udGFpbmVyJykgZml4ZWRHcmlkQ29udGFpbmVyOiBFbGVtZW50UmVmO1xyXG4gIEBWaWV3Q2hpbGQoJ2dyaWRGaXhlZEJvZHknKSBncmlkRml4ZWRCb2R5OiBFbGVtZW50UmVmO1xyXG5cclxuICBAVmlld0NoaWxkKCdncmlkQ29udGFpbmVyJykgZ3JpZENvbnRhaW5lcjogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKCdncmlkSGVhZGVyJykgZ3JpZEhlYWRlcjogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKCdncmlkQm9keScpIGdyaWRCb2R5OiBFbGVtZW50UmVmO1xyXG5cclxuICBAVmlld0NoaWxkKCdzZEdyaWRDb25maWcnLCB7IHN0YXRpYzogdHJ1ZSB9KSBzZEdyaWRDb25maWc6IFNkR3JpZENvbmZpZztcclxuICBAVmlld0NoaWxkKCdzZEdyaWRQb3B1cEVkaXRvcicpIHNkR3JpZFBvcHVwRWRpdG9yOiBTZEdyaWRQb3B1cEVkaXRvcjtcclxuXHJcbiAgQFZpZXdDaGlsZCgnc2RHcmlkUG9wdXBGaWx0ZXInKSBzZEdyaWRQb3B1cEZpbHRlcjogU2RHcmlkUG9wdXBGaWx0ZXI7XHJcbiAgQFZpZXdDaGlsZCgnbWF0U2VsZWN0JykgbWF0U2VsZWN0OiBNYXRTZWxlY3Q7XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ3NkR3JpZFBvcHVwRXhwb3J0RXhjZWwnKSBzZEdyaWRQb3B1cEV4cG9ydEV4Y2VsOiBTZEdyaWRQb3B1cEV4cG9ydEV4Y2VsO1xyXG4gIEBWaWV3Q2hpbGQoJ3NkR3JpZEltcG9ydEV4Y2VsJykgc2RHcmlkSW1wb3J0RXhjZWw6IFNkR3JpZEltcG9ydEV4Y2VsO1xyXG5cclxuICBAQ29udGVudENoaWxkcmVuKFNkQ2VsbERlZkRpcmVjdGl2ZSkgY2VsbERlZnMgPSBuZXcgUXVlcnlMaXN0PFNkQ2VsbERlZkRpcmVjdGl2ZT4oKTtcclxuICBjZWxsRGVmOiB7XHJcbiAgICBbY29sdW1uOiBzdHJpbmddOiBTZENlbGxEZWZEaXJlY3RpdmVcclxuICB9ID0ge307XHJcblxyXG4gIEBDb250ZW50Q2hpbGRyZW4oU2RDZWxsRWRpdG9yRGVmRGlyZWN0aXZlKSBjZWxsRWRpdG9yRGVmcyA9IG5ldyBRdWVyeUxpc3Q8U2RDZWxsRWRpdG9yRGVmRGlyZWN0aXZlPigpO1xyXG4gIGNlbGxFZGl0b3JEZWY6IHtcclxuICAgIFtjb2x1bW46IHN0cmluZ106IFNkQ2VsbEVkaXRvckRlZkRpcmVjdGl2ZVxyXG4gIH0gPSB7fTtcclxuXHJcbiAgQENvbnRlbnRDaGlsZHJlbihTZENlbGxGb290ZXJEZXZEaXJlY3RpdmUpIGNlbGxGb290ZXJEZWZzID0gbmV3IFF1ZXJ5TGlzdDxTZENlbGxGb290ZXJEZXZEaXJlY3RpdmU+KCk7XHJcbiAgY2VsbEZvb3RlckRlZjoge1xyXG4gICAgW2NvbHVtbjogc3RyaW5nXTogU2RDZWxsRm9vdGVyRGV2RGlyZWN0aXZlW107XHJcbiAgfSA9IHt9O1xyXG4gICNudW1iZXJPZkZvb3RlclJvd3MgPSAwO1xyXG4gIGZvb3RlclJvd3M6IG51bWJlcltdID0gW107XHJcblxyXG4gICNwYWdpbmF0b3I6IE1hdFBhZ2luYXRvcjtcclxuICBAVmlld0NoaWxkKE1hdFBhZ2luYXRvcikgc2V0IHBhZ2luYXRvcihwYWdpbmF0b3I6IE1hdFBhZ2luYXRvcikge1xyXG4gICAgaWYgKHBhZ2luYXRvciAmJiB0aGlzLiNwYWdpbmF0b3IgIT09IHBhZ2luYXRvcikge1xyXG4gICAgICB0aGlzLiNwYWdpbmF0b3IgPSBwYWdpbmF0b3I7XHJcbiAgICAgIHRoaXMuI3N1YnNjcmlwdGlvbi5hZGQocGFnaW5hdG9yLnBhZ2Uuc3Vic2NyaWJlKHRoaXMuc2VsZWN0UGFnZSkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgQElucHV0KCkgc2V0IG9wdGlvbih2YWx1ZTogU2RHcmlkT3B0aW9uKSB7XHJcbiAgICB0aGlzLnNldE9wdGlvbih2YWx1ZSk7XHJcbiAgfVxyXG4gIHNlbGVjdGVkSXRlbTogYW55ID0gbnVsbDtcclxuICAjc3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xyXG4gIHJvd0hhbmRsZXIgPSB7XHJcbiAgICBjbGljazogKGl0ZW06IGFueSkgPT4ge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkSXRlbSA9IGl0ZW07XHJcbiAgICAgIGlmICh0aGlzLmdyaWRPcHRpb24ub25DbGlja1Jvdykge1xyXG4gICAgICAgIHRoaXMuZ3JpZE9wdGlvbi5vbkNsaWNrUm93KGl0ZW0pO1xyXG4gICAgICB9XHJcbiAgICB9LFxyXG4gICAgZGJsQ2xpY2s6IChpdGVtOiBhbnkpID0+IHtcclxuICAgICAgdGhpcy5zZWxlY3RlZEl0ZW0gPSBpdGVtO1xyXG4gICAgICBpZiAodGhpcy5ncmlkT3B0aW9uLm9uRGJsQ2xpY2tSb3cpIHtcclxuICAgICAgICB0aGlzLmdyaWRPcHRpb24ub25EYmxDbGlja1JvdyhpdGVtKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gIHByaXZhdGUgc2V0T3B0aW9uID0gKG9wdGlvbjogU2RHcmlkT3B0aW9uKSA9PiB7XHJcbiAgICBvcHRpb24gPSB0aGlzLmluaXRDb25maWd1cmF0aW9uKG9wdGlvbik7XHJcbiAgICBvcHRpb24gPSB0aGlzLmluaXRUcmFuc2xhdGUob3B0aW9uKTtcclxuICAgIGRlbGV0ZSB0aGlzLmdyaWRPcHRpb247XHJcbiAgICB0aGlzLmdyaWRPcHRpb24gPSBvcHRpb247XHJcbiAgICAvLyBMb+G6oWkgYuG7jyBuaOG7r25nIGNvbW1hbmQgYuG7iyDhuqluXHJcbiAgICB0aGlzLmdyaWRPcHRpb24uY29tbWFuZHMgPSB0aGlzLmdyaWRPcHRpb24uY29tbWFuZHMuZmlsdGVyKGNvbW1hbmQgPT4ge1xyXG4gICAgICBjb25zdCBoaWRkZW4gPSBjb21tYW5kLmhpZGRlbjtcclxuICAgICAgaWYgKGhpZGRlbiAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiAoaGlkZGVuKSA9PT0gJ2Jvb2xlYW4nKSB7XHJcbiAgICAgICAgICByZXR1cm4gIWhpZGRlbjtcclxuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiAoaGlkZGVuKSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgcmV0dXJuICFoaWRkZW4oKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgdGhpcy5zZEdyaWRDb25maWcuc2V0T3B0aW9uKHtcclxuICAgICAga2V5OiBvcHRpb24ua2V5LFxyXG4gICAgICBwYWdlU2l6ZTogdGhpcy5ncmlkT3B0aW9uLnBhZ2luYXRlLnBhZ2VTaXplLFxyXG4gICAgICBjb2x1bW5zOiB0aGlzLmdyaWRPcHRpb24uY29sdW1uc1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLmluaXRFeHRlcm5hbEZpbHRlcigpO1xyXG4gICAgdGhpcy5yZXNpemUoKTtcclxuICAgIHRoaXMuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpbml0Q29uZmlndXJhdGlvbiA9IChvcHRpb246IFNkR3JpZE9wdGlvbikgPT4ge1xyXG4gICAgY29uc3QgZ3JpZENvbmZpZ3VyYXRpb24gPSB0aGlzLmNvbmZpZ3VyYXRpb247XHJcbiAgICAvLyBGaWx0ZXJcclxuICAgIGlmICghb3B0aW9uLmZpbHRlcj8udHlwZSAmJiBncmlkQ29uZmlndXJhdGlvbj8uZmlsdGVyPy50eXBlKSB7XHJcbiAgICAgIGlmICghb3B0aW9uLmZpbHRlcikge1xyXG4gICAgICAgIG9wdGlvbi5maWx0ZXIgPSB7XHJcbiAgICAgICAgICB0eXBlOiBncmlkQ29uZmlndXJhdGlvbi5maWx0ZXIudHlwZVxyXG4gICAgICAgIH07XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgb3B0aW9uLmZpbHRlci50eXBlID0gZ3JpZENvbmZpZ3VyYXRpb24uZmlsdGVyLnR5cGU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICghb3B0aW9uLmZpbHRlcj8uY29sdW1uSW5saW5lICYmIGdyaWRDb25maWd1cmF0aW9uPy5maWx0ZXI/LmNvbHVtbklubGluZSkge1xyXG4gICAgICBpZiAoIW9wdGlvbi5maWx0ZXIpIHtcclxuICAgICAgICBvcHRpb24uZmlsdGVyID0ge1xyXG4gICAgICAgICAgY29sdW1uSW5saW5lOiBncmlkQ29uZmlndXJhdGlvbi5maWx0ZXIuY29sdW1uSW5saW5lXHJcbiAgICAgICAgfTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBvcHRpb24uZmlsdGVyLmNvbHVtbklubGluZSA9IGdyaWRDb25maWd1cmF0aW9uLmZpbHRlci5jb2x1bW5JbmxpbmU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICghb3B0aW9uLmZpbHRlcj8ucXVpY2tGaWx0ZXJWaXNpYmlsaXR5ICYmIGdyaWRDb25maWd1cmF0aW9uPy5maWx0ZXI/LnF1aWNrRmlsdGVyVmlzaWJpbGl0eSkge1xyXG4gICAgICBpZiAoIW9wdGlvbi5maWx0ZXIpIHtcclxuICAgICAgICBvcHRpb24uZmlsdGVyID0ge1xyXG4gICAgICAgICAgcXVpY2tGaWx0ZXJWaXNpYmlsaXR5OiBncmlkQ29uZmlndXJhdGlvbi5maWx0ZXIucXVpY2tGaWx0ZXJWaXNpYmlsaXR5XHJcbiAgICAgICAgfTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBvcHRpb24uZmlsdGVyLnF1aWNrRmlsdGVyVmlzaWJpbGl0eSA9IGdyaWRDb25maWd1cmF0aW9uLmZpbHRlci5xdWlja0ZpbHRlclZpc2liaWxpdHk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIC8vIFRyYW5zbGF0ZVxyXG4gICAgb3B0aW9uLnRyYW5zbGF0ZSA9IG9wdGlvbi50cmFuc2xhdGUgPz8gZ3JpZENvbmZpZ3VyYXRpb24/LnRyYW5zbGF0ZTtcclxuICAgIHN3aXRjaCAob3B0aW9uLnR5cGUpIHtcclxuICAgICAgY2FzZSAnbG9jYWwnOlxyXG4gICAgICAgIHRoaXMuaGFuZGxlciA9IHRoaXMuaGFuZGxlckxvY2FsO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdkb3RuZXQnOlxyXG4gICAgICAgIHRoaXMuaGFuZGxlciA9IHRoaXMuaGFuZGxlckRvdG5ldDtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnY3VzdG9tJzpcclxuICAgICAgICB0aGlzLmhhbmRsZXIgPSBvcHRpb24uaGFuZGxlckN1c3RvbSB8fCBncmlkQ29uZmlndXJhdGlvbj8uaGFuZGxlckN1c3RvbTtcclxuICAgICAgICBpZiAoIXRoaXMuaGFuZGxlcikge1xyXG4gICAgICAgICAgdGhpcy5ub3RpZnlTZXJ2aWNlLm5vdGlmeS53YXJuaW5nKGBIYW5kbGVyIGN1c3RvbSB3YXMgbm90IGZvdW5kYCk7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHsgLi4uZGVmYXVsdEdyaWRPcHRpb24sIC4uLm9wdGlvbiB9O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpbml0VHJhbnNsYXRlID0gKG9wdGlvbjogU2RHcmlkT3B0aW9uKSA9PiB7XHJcbiAgICBjb25zdCB7IHRyYW5zbGF0ZSB9ID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlO1xyXG4gICAgb3B0aW9uLmNvbW1hbmRzPy5mb3JFYWNoKGNvbW1hbmQgPT4ge1xyXG4gICAgICBpZiAoIW9wdGlvbi50cmFuc2xhdGUpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHR5cGVvZiAoY29tbWFuZC50aXRsZSkgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgY29tbWFuZC50aXRsZSA9IHRyYW5zbGF0ZShjb21tYW5kLnRpdGxlKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoJ2NoaWxkcmVuJyBpbiBjb21tYW5kKSB7XHJcbiAgICAgICAgY29tbWFuZC5jaGlsZHJlbj8uZm9yRWFjaChjaGlsZENvbW1hbmQgPT4ge1xyXG4gICAgICAgICAgaWYgKHR5cGVvZiAoY2hpbGRDb21tYW5kLnRpdGxlKSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgY2hpbGRDb21tYW5kLnRpdGxlID0gdHJhbnNsYXRlKGNoaWxkQ29tbWFuZC50aXRsZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgb3B0aW9uLmNvbHVtbnM/LmZvckVhY2goY29sdW1uID0+IHtcclxuICAgICAgaWYgKGNvbHVtbi50cmFuc2xhdGUgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChvcHRpb24udHJhbnNsYXRlIHx8IGNvbHVtbi50cmFuc2xhdGUpIHtcclxuICAgICAgICBjb2x1bW4udGl0bGUgPSB0cmFuc2xhdGUoY29sdW1uLnRpdGxlKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29sdW1uLnR5cGUgPT09ICdjaGlsZHJlbicpIHtcclxuICAgICAgICBjb2x1bW4/LmNoaWxkcmVuPy5mb3JFYWNoKGNoaWxkQ29sdW1uID0+IHtcclxuICAgICAgICAgIGlmIChjaGlsZENvbHVtbi50cmFuc2xhdGUgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChvcHRpb24udHJhbnNsYXRlIHx8IGNoaWxkQ29sdW1uLnRyYW5zbGF0ZSkge1xyXG4gICAgICAgICAgICBjaGlsZENvbHVtbi50aXRsZSA9IHRyYW5zbGF0ZShjaGlsZENvbHVtbi50aXRsZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgb3B0aW9uLmZpbHRlcj8uZXh0ZXJuYWxGaWx0ZXJzPy5mb3JFYWNoKGV4dGVybmFsRmlsdGVyID0+IHtcclxuICAgICAgaWYgKG9wdGlvbi50cmFuc2xhdGUpIHtcclxuICAgICAgICBleHRlcm5hbEZpbHRlci50aXRsZSA9IHRyYW5zbGF0ZShleHRlcm5hbEZpbHRlci50aXRsZSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIG9wdGlvbjtcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgQEluamVjdChHUklEX0NPTkZJRykgQE9wdGlvbmFsKCkgcHVibGljIGNvbmZpZ3VyYXRpb246IElHcmlkQ29uZmlndXJhdGlvbixcclxuICAgIHByaXZhdGUgcmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIGRldmljZVNlcnZpY2U6IERldmljZURldGVjdG9yU2VydmljZSxcclxuICAgIHByaXZhdGUgaGFuZGxlckxvY2FsOiBIYW5kbGVyTG9jYWwsXHJcbiAgICBwcml2YXRlIGhhbmRsZXJEb3RuZXQ6IEhhbmRsZXJEb3RuZXQsXHJcbiAgICBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2U6IFNkVHJhbnNsYXRlU2VydmljZSxcclxuICAgIHByaXZhdGUgZGF0ZVBpcGU6IERhdGVQaXBlLFxyXG4gICAgcHJpdmF0ZSBsb2FkaW5nU2VydmljZTogU2RMb2FkaW5nU2VydmljZSxcclxuICAgIHByaXZhdGUgYXBpU2VydmljZTogU2RBcGlTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBleHBvcnRTZXJ2aWNlOiBTZEV4cG9ydFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIG5vdGlmeVNlcnZpY2U6IFNkTm90aWZ5U2VydmljZSxcclxuICAgIHByaXZhdGUgZWRpdG9yVmlzaWJsZVBpcGU6IEVkaXRvckhhbmRsZXJQaXBlKSB7XHJcbiAgICB0aGlzLmlzTW9iaWxlT3JUYWJsZXQgPSAhZGV2aWNlU2VydmljZS5pc0Rlc2t0b3AoKTtcclxuICAgIC8vIHRoaXMucmVmLmRldGFjaCgpO1xyXG4gICAgLy8gc2V0SW50ZXJ2YWwoKCkgPT4ge1xyXG4gICAgLy8gICB0aGlzLnJlZi5tYXJrRm9yQ2hlY2soKTtcclxuICAgIC8vIH0sIDEwMDApO1xyXG4gICAgLy8gcmVmLmRldGFjaCgpO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgdGhpcy4jc3Vic2NyaXB0aW9uLmFkZCh0aGlzLmZpeGVkSGVhZGVycy5jaGFuZ2VzLnBpcGUoc3RhcnRXaXRoKFtdKSkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgZml4ZWRIZWFkZXJzID0gdGhpcy5maXhlZEhlYWRlcnMudG9BcnJheSgpO1xyXG4gICAgICAgIGlmIChmaXhlZEhlYWRlcnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgbGV0IGxlZnQgPSAkKGZpeGVkSGVhZGVyc1swXS5uYXRpdmVFbGVtZW50KS5vdXRlcldpZHRoKHRydWUpO1xyXG4gICAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBmaXhlZEhlYWRlcnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgJChmaXhlZEhlYWRlcnNbaV0ubmF0aXZlRWxlbWVudCkuY3NzKHsgbGVmdCB9KTtcclxuICAgICAgICAgICAgbGVmdCArPSAkKGZpeGVkSGVhZGVyc1tpXS5uYXRpdmVFbGVtZW50KS5vdXRlcldpZHRoKHRydWUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSwgMTAwKTtcclxuICAgIH0pKTtcclxuICAgIHRoaXMuI3N1YnNjcmlwdGlvbi5hZGQobWVyZ2UodGhpcy5maXhlZEJvZGllcy5jaGFuZ2VzLCB0aGlzLmNlbGxGb290ZXJEZWZzLmNoYW5nZXMpLnBpcGUoc3RhcnRXaXRoKHt9KSkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgZml4ZWRCb2RpZXMgPSB0aGlzLmZpeGVkQm9kaWVzLnRvQXJyYXkoKTtcclxuICAgICAgICBpZiAoZml4ZWRCb2RpZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgY29uc3QgZml4ZWRQZXJSb3cgPSB0aGlzLmZpeGVkQm9kaWVzLmxlbmd0aCAvICh0aGlzLnZpZXdJdGVtcy5sZW5ndGggKyB0aGlzLiNudW1iZXJPZkZvb3RlclJvd3MpO1xyXG4gICAgICAgICAgbGV0IGxlZnQgPSAkKGZpeGVkQm9kaWVzWzBdLm5hdGl2ZUVsZW1lbnQpLm91dGVyV2lkdGgodHJ1ZSk7XHJcbiAgICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IGZpeGVkQm9kaWVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChpICUgZml4ZWRQZXJSb3cgPT09IDApIHtcclxuICAgICAgICAgICAgICBsZWZ0ID0gMDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAkKGZpeGVkQm9kaWVzW2ldLm5hdGl2ZUVsZW1lbnQpLmNzcyh7IGxlZnQgfSk7XHJcbiAgICAgICAgICAgIGxlZnQgKz0gJChmaXhlZEJvZGllc1tpXS5uYXRpdmVFbGVtZW50KS5vdXRlcldpZHRoKHRydWUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBmaXhlZEhlYWRlcnMgPSB0aGlzLmZpeGVkSGVhZGVycy50b0FycmF5KCk7XHJcbiAgICAgICAgaWYgKGZpeGVkSGVhZGVycy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICBsZXQgbGVmdCA9ICQoZml4ZWRIZWFkZXJzWzBdLm5hdGl2ZUVsZW1lbnQpLm91dGVyV2lkdGgodHJ1ZSk7XHJcbiAgICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IGZpeGVkSGVhZGVycy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAkKGZpeGVkSGVhZGVyc1tpXS5uYXRpdmVFbGVtZW50KS5jc3MoeyBsZWZ0IH0pO1xyXG4gICAgICAgICAgICBsZWZ0ICs9ICQoZml4ZWRIZWFkZXJzW2ldLm5hdGl2ZUVsZW1lbnQpLm91dGVyV2lkdGgodHJ1ZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9LCAxMDApO1xyXG4gICAgfSkpO1xyXG4gICAgdGhpcy4jc3Vic2NyaXB0aW9uLmFkZCh0aGlzLmNlbGxEZWZzLmNoYW5nZXMucGlwZShzdGFydFdpdGgoW10pKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICB0aGlzLmNlbGxEZWYgPSB7fTtcclxuICAgICAgZm9yIChjb25zdCBjZWxsRGVmIG9mIHRoaXMuY2VsbERlZnMpIHtcclxuICAgICAgICBpZiAoY2VsbERlZi5zZENlbGxEZWYpIHtcclxuICAgICAgICAgIHRoaXMuY2VsbERlZltjZWxsRGVmLnNkQ2VsbERlZl0gPSBjZWxsRGVmO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSkpO1xyXG4gICAgdGhpcy4jc3Vic2NyaXB0aW9uLmFkZCh0aGlzLmNlbGxFZGl0b3JEZWZzLmNoYW5nZXMucGlwZShzdGFydFdpdGgoW10pKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICB0aGlzLmNlbGxFZGl0b3JEZWYgPSB7fTtcclxuICAgICAgZm9yIChjb25zdCBjZWxsRWRpdG9yRGVmIG9mIHRoaXMuY2VsbEVkaXRvckRlZnMpIHtcclxuICAgICAgICBpZiAoY2VsbEVkaXRvckRlZi5zZENlbGxFZGl0b3JEZWYpIHtcclxuICAgICAgICAgIHRoaXMuY2VsbEVkaXRvckRlZltjZWxsRWRpdG9yRGVmLnNkQ2VsbEVkaXRvckRlZl0gPSBjZWxsRWRpdG9yRGVmO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSkpO1xyXG4gICAgdGhpcy4jc3Vic2NyaXB0aW9uLmFkZCh0aGlzLmNlbGxGb290ZXJEZWZzLmNoYW5nZXMucGlwZShzdGFydFdpdGgoW10pKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICB0aGlzLmNlbGxGb290ZXJEZWYgPSB7fTtcclxuICAgICAgdGhpcy4jbnVtYmVyT2ZGb290ZXJSb3dzID0gMDtcclxuICAgICAgZm9yIChjb25zdCBjZWxsRm9vdGVyRGVmIG9mIHRoaXMuY2VsbEZvb3RlckRlZnMpIHtcclxuICAgICAgICBpZiAoY2VsbEZvb3RlckRlZi5zZENlbGxGb290ZXJEZWYpIHtcclxuICAgICAgICAgIGlmICghdGhpcy5jZWxsRm9vdGVyRGVmW2NlbGxGb290ZXJEZWYuc2RDZWxsRm9vdGVyRGVmXSkge1xyXG4gICAgICAgICAgICB0aGlzLmNlbGxGb290ZXJEZWZbY2VsbEZvb3RlckRlZi5zZENlbGxGb290ZXJEZWZdID0gW107XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLmNlbGxGb290ZXJEZWZbY2VsbEZvb3RlckRlZi5zZENlbGxGb290ZXJEZWZdLnB1c2goY2VsbEZvb3RlckRlZik7XHJcbiAgICAgICAgICBpZiAodGhpcy5jZWxsRm9vdGVyRGVmW2NlbGxGb290ZXJEZWYuc2RDZWxsRm9vdGVyRGVmXS5sZW5ndGggPiB0aGlzLiNudW1iZXJPZkZvb3RlclJvd3MpIHtcclxuICAgICAgICAgICAgdGhpcy4jbnVtYmVyT2ZGb290ZXJSb3dzID0gdGhpcy5jZWxsRm9vdGVyRGVmW2NlbGxGb290ZXJEZWYuc2RDZWxsRm9vdGVyRGVmXS5sZW5ndGg7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuZm9vdGVyUm93cyA9IEFycmF5KHRoaXMuI251bWJlck9mRm9vdGVyUm93cykuZmlsbCgwKS5tYXAoKHYsIGkpID0+IGkpO1xyXG4gICAgfSkpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICB0aGlzLiNzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gIHJlbG9hZCA9IGFzeW5jIChncmlkSXRlbXM/OiBhbnlbXSkgPT4ge1xyXG4gICAgaWYgKHRoaXMuaXNMb2FkaW5nKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcclxuICAgIGNvbnN0IGN1cnJlbnRQYWdlID0gKHRoaXMuI3BhZ2luYXRvcj8ucGFnZUluZGV4IHx8IDApICsgMTtcclxuICAgIGNvbnN0IHBhZ2VTaXplID0gdGhpcy4jcGFnaW5hdG9yPy5wYWdlU2l6ZSB8fCA1MDtcclxuICAgIHRyeSB7XHJcbiAgICAgIGlmICh0aGlzLmdyaWRPcHRpb24udHlwZSAhPT0gJ2xvY2FsJykge1xyXG4gICAgICAgIGNvbnN0IGhhbmRsZXIgPSB0aGlzLmhhbmRsZXIgYXMgSUhhbmRsZXJTZXJ2ZXI7XHJcbiAgICAgICAgY29uc3QgZmlsdGVyID0gaGFuZGxlci5tYXBSZXF1ZXN0KHRoaXMuZ2V0RmlsdGVySW5mbyhjdXJyZW50UGFnZSwgcGFnZVNpemUpKTtcclxuICAgICAgICBpZiAodGhpcy5ncmlkT3B0aW9uLm1ldGhvZCA9PT0gJ0dFVCcpIHtcclxuICAgICAgICAgIGNvbnN0IHF1ZXJ5U3RyaW5nID0gT2JqZWN0LmtleXMoZmlsdGVyKS5maWx0ZXIoa2V5ID0+IGZpbHRlcltrZXldICE9PSBudWxsICYmIGZpbHRlcltrZXldICE9PSB1bmRlZmluZWQpXHJcbiAgICAgICAgICAgIC5tYXAoa2V5ID0+IGtleSArICc9JyArIGZpbHRlcltrZXldKS5qb2luKCcmJyk7XHJcbiAgICAgICAgICBjb25zdCB1cmwgPSB0aGlzLmdyaWRPcHRpb24udXJsLmluY2x1ZGVzKCc/JykgPyBgJHt0aGlzLmdyaWRPcHRpb24udXJsfSYke3F1ZXJ5U3RyaW5nfWAgOiBgJHt0aGlzLmdyaWRPcHRpb24udXJsfT8ke3F1ZXJ5U3RyaW5nfWA7XHJcbiAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuYXBpU2VydmljZS5nZXQodXJsKTtcclxuICAgICAgICAgIGNvbnN0IHsgaXRlbXMsIHRvdGFsIH0gPSBoYW5kbGVyLm1hcFJlc3BvbnNlKHJlc3BvbnNlKTtcclxuICAgICAgICAgIHRoaXMuaXRlbXMgPSBpdGVtcztcclxuICAgICAgICAgIHRoaXMudG90YWwgPSB0b3RhbDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmFwaVNlcnZpY2UucG9zdCh0aGlzLmdyaWRPcHRpb24udXJsLCBmaWx0ZXIpO1xyXG4gICAgICAgICAgY29uc3QgeyBpdGVtcywgdG90YWwgfSA9IGhhbmRsZXIubWFwUmVzcG9uc2UocmVzcG9uc2UpO1xyXG4gICAgICAgICAgdGhpcy5pdGVtcyA9IGl0ZW1zO1xyXG4gICAgICAgICAgdGhpcy50b3RhbCA9IHRvdGFsO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zdCBoYW5kbGVyID0gdGhpcy5oYW5kbGVyIGFzIElIYW5kbGVyTG9jYWw7XHJcbiAgICAgICAgaWYgKHR5cGVvZiAodGhpcy5ncmlkT3B0aW9uLml0ZW1zKSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZ3JpZEl0ZW1zKSkge1xyXG4gICAgICAgICAgICB0aGlzLmxvY2FsSXRlbXMgPSBncmlkSXRlbXM7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCByZXN1bHRzID0gdGhpcy5ncmlkT3B0aW9uLml0ZW1zKCk7XHJcbiAgICAgICAgICAgIGlmIChyZXN1bHRzIGluc3RhbmNlb2YgUHJvbWlzZSkge1xyXG4gICAgICAgICAgICAgIHRoaXMubG9jYWxJdGVtcyA9IGF3YWl0IHJlc3VsdHM7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5sb2NhbEl0ZW1zID0gcmVzdWx0cztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmdyaWRPcHRpb24uaXRlbXMgPSBncmlkSXRlbXMgfHwgdGhpcy5ncmlkT3B0aW9uLml0ZW1zO1xyXG4gICAgICAgICAgdGhpcy5sb2NhbEl0ZW1zID0gdGhpcy5ncmlkT3B0aW9uLml0ZW1zO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCByZXNwb25zZSA9IGhhbmRsZXIuZmlsdGVyKHRoaXMubG9jYWxJdGVtcywge1xyXG4gICAgICAgICAgY3VzdG9tRmlsdGVyOiB0aGlzLmdyaWRPcHRpb24uZmlsdGVyLmN1c3RvbUZpbHRlcixcclxuICAgICAgICAgIHJhd0ZpbHRlcjogdGhpcy5maWx0ZXIsXHJcbiAgICAgICAgICBjb2x1bW5zOiB0aGlzLmdyaWRPcHRpb24uY29sdW1ucyxcclxuICAgICAgICAgIHJhd0V4dGVybmFsRmlsdGVyOiB0aGlzLmV4dGVybmFsRmlsdGVyLFxyXG4gICAgICAgICAgZXh0ZXJuYWxGaWx0ZXJzOiB0aGlzLmdyaWRPcHRpb24uZmlsdGVyPy5leHRlcm5hbEZpbHRlcnMsXHJcbiAgICAgICAgICBvcmRlckJ5OiB0aGlzLm9yZGVyQnksXHJcbiAgICAgICAgICBvcmRlckRpcmVjdGlvbjogdGhpcy5vcmRlckRpcmVjdGlvbixcclxuICAgICAgICAgIHBhZ2VOdW1iZXI6IGN1cnJlbnRQYWdlLFxyXG4gICAgICAgICAgcGFnZVNpemVcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLml0ZW1zID0gcmVzcG9uc2UuaXRlbXM7XHJcbiAgICAgICAgdGhpcy50b3RhbCA9IHJlc3BvbnNlLnRvdGFsO1xyXG4gICAgICAgIFxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuaXRlbXMuZm9yRWFjaChpdGVtID0+IGl0ZW0ub3JpZ2luSXRlbSA9IHsgLi4uaXRlbSB9KTtcclxuICAgICAgdGhpcy5pc0NoZWNrZWRBbGwgPSBmYWxzZTtcclxuICAgICAgdGhpcy4jc2V0U2VsZWN0ZWRJdGVtcygpO1xyXG4gICAgICBhd2FpdCB0aGlzLmdyaWRPcHRpb24/Lm9uUmVsb2FkQ29tcGxldGVkPy4odGhpcy5pdGVtcyk7XHJcbiAgICAgIHRoaXMuZ2VuZXJhdGVWaWV3SXRlbXMoKTtcclxuICAgICAgdGhpcy5nZW5lcmF0ZUVkaXRvckhhbmRsZXJzKCk7XHJcbiAgICAgICQodGhpcy5ncmlkQm9keS5uYXRpdmVFbGVtZW50KS5zY3JvbGxUb3AoMCk7XHJcbiAgICAgIGlmIChjdXJyZW50UGFnZSA+IDEgJiYgIXRoaXMudmlld0l0ZW1zPy5sZW5ndGgpIHtcclxuICAgICAgICB0aGlzLiNwYWdpbmF0b3IuZmlyc3RQYWdlKCk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICB0aGlzLm5vdGlmeVNlcnZpY2UuaGFuZGxlLmVycm9yKGVycm9yKTtcclxuICAgIH0gZmluYWxseSB7XHJcbiAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZWxvYWRJdGVtKGRhdGE6IHsgW2lkOiBzdHJpbmddOiBhbnkgfSkge1xyXG4gICAgT2JqZWN0LmtleXMoZGF0YSkuZm9yRWFjaChpZCA9PiB7XHJcbiAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLml0ZW1zLmZpbmQoZSA9PiAhIWUuaWQgJiYgZS5pZCA9PT0gaWQpO1xyXG4gICAgICBpZiAoaXRlbSkge1xyXG4gICAgICAgIHRoaXMuZ3JpZE9wdGlvbi5jb2x1bW5zLmZvckVhY2goY29sdW1uID0+IHtcclxuICAgICAgICAgIGlmIChpdGVtW2NvbHVtbi5maWVsZF0gIT09IHVuZGVmaW5lZCAmJiBkYXRhW2lkXVtjb2x1bW4uZmllbGRdICE9PSB1bmRlZmluZWQgJiYgaXRlbVtjb2x1bW4uZmllbGRdICE9PSBkYXRhW2lkXVtjb2x1bW4uZmllbGRdKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYmxpbmsoaXRlbSwgY29sdW1uLmZpZWxkKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICBPYmplY3QuYXNzaWduKGl0ZW0sIGRhdGFbaWRdKTtcclxuICAgICAgICB0aGlzLmdlbmVyYXRlRWRpdG9ySGFubGRlcihpdGVtKTtcclxuICAgICAgICB0aGlzLnN0b3BCbGluaygpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYmxpbmsoaXRlbTogR3JpZEl0ZW0sIGZpZWxkOiBzdHJpbmcpIHtcclxuICAgIGl0ZW0uYmxpbmtlciA9IGl0ZW0uYmxpbmtlciB8fCB7fTtcclxuICAgIGl0ZW0uYmxpbmtlcltmaWVsZF0gPSB0cnVlO1xyXG4gIH1cclxuICBwcml2YXRlIHN0b3BCbGluaygpIHtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLnZpZXdJdGVtcy5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgIGl0ZW0uYmxpbmtlciA9IHt9O1xyXG4gICAgICB9KTtcclxuICAgIH0sIDE1MDApO1xyXG4gIH1cclxuXHJcbiAgZGV0ZWN0Q2hhbmdlcyA9ICgpID0+IHtcclxuICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgIHRoaXMucmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZW5lcmF0ZVZpZXdJdGVtcygpIHtcclxuICAgIGNvbnN0IGN1cnJlbnRQYWdlID0gKHRoaXMuI3BhZ2luYXRvcj8ucGFnZUluZGV4IHx8IDApICsgMTtcclxuICAgIGNvbnN0IHBhZ2VTaXplID0gdGhpcy4jcGFnaW5hdG9yPy5wYWdlU2l6ZSB8fCA1MDtcclxuICAgIGRlbGV0ZSB0aGlzLnZpZXdJdGVtcztcclxuICAgIGlmICh0aGlzLmdyaWRPcHRpb24udHlwZSA9PT0gJ2xvY2FsJykge1xyXG4gICAgICB0aGlzLnZpZXdJdGVtcyA9IHRoaXMuaXRlbXMuZmlsdGVyKChpdGVtLCBpbmRleCkgPT4ge1xyXG4gICAgICAgIHJldHVybiBpbmRleCA+PSAoY3VycmVudFBhZ2UgLSAxKSAqIHBhZ2VTaXplXHJcbiAgICAgICAgICAmJiBpbmRleCA8IGN1cnJlbnRQYWdlICogcGFnZVNpemU7XHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy52aWV3SXRlbXMgPSB0aGlzLml0ZW1zO1xyXG4gICAgfVxyXG4gICAgdGhpcy52aWV3SXRlbXMuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgaXRlbS5ibGlua2VyID0gaXRlbS5ibGlua2VyIHx8IHt9O1xyXG4gICAgICBpdGVtLnN1YkluZm9ybWF0aW9uID0gaXRlbS5zdWJJbmZvcm1hdGlvbiB8fCB7fTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGVkaXRlZEl0ZW1zKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuaXRlbXMuZmlsdGVyKGl0ZW0gPT4ge1xyXG4gICAgICBpZiAoIWl0ZW0ub3JpZ2luSXRlbSkge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChPYmplY3Qua2V5cyhpdGVtLm9yaWdpbkl0ZW0pLnNvbWUoa2V5ID0+IGl0ZW0ub3JpZ2luSXRlbVtrZXldICE9PSBpdGVtW2tleV0pKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfSkubWFwKGl0ZW0gPT4ge1xyXG4gICAgICBjb25zdCB7IHRlbXBvcmFyeSxcclxuICAgICAgICBvcmlnaW5JdGVtLFxyXG4gICAgICAgIGVkaXRvckhhbmRsZXIsXHJcbiAgICAgICAgZWRpdGluZ1N0YXR1cyxcclxuICAgICAgICBpc0NoZWNrZWQsXHJcbiAgICAgICAgc3ViSW5mb3JtYXRpb24sXHJcbiAgICAgICAgYmxpbmtlcixcclxuICAgICAgICAuLi5yZXN1bHQgfSA9IGl0ZW07XHJcbiAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHNlbGVjdFBhZ2UgPSAoKSA9PiB7XHJcbiAgICBpZiAodGhpcy5ncmlkT3B0aW9uLnR5cGUgPT09ICdsb2NhbCcpIHtcclxuICAgICAgdGhpcy5yZWxvYWQodGhpcy5sb2NhbEl0ZW1zKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMucmVsb2FkKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB1cGRhdGVGaWx0ZXIgPSAocGFyYW0/OiB7IGZpbHRlcjogYW55LCBleHRlcm5hbEZpbHRlcjogYW55IH0pID0+IHtcclxuICAgIHRoaXMuZmlsdGVyID0gcGFyYW0/LmZpbHRlciB8fCB0aGlzLmZpbHRlcjtcclxuICAgIHRoaXMuZXh0ZXJuYWxGaWx0ZXIgPSBwYXJhbT8uZXh0ZXJuYWxGaWx0ZXIgfHwgdGhpcy5leHRlcm5hbEZpbHRlcjtcclxuICAgIHRoaXMuI3BhZ2luYXRvci5wYWdlSW5kZXggPSAwO1xyXG4gICAgaWYgKHRoaXMuZ3JpZE9wdGlvbi50eXBlID09PSAnbG9jYWwnKSB7XHJcbiAgICAgIHRoaXMucmVsb2FkKHRoaXMubG9jYWxJdGVtcyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnJlbG9hZCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0SXRlbXMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5pdGVtcztcclxuICB9XHJcblxyXG4gIC8vI3JlZ2lvbiBDaGVja2FibGVcclxuXHJcbiAgI3NldFNlbGVjdGVkSXRlbXMgPSAoKSA9PiB7XHJcbiAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSB0aGlzLml0ZW1zLmZpbHRlcihpdGVtID0+IGl0ZW0uaXNDaGVja2VkKVxyXG4gICAgICAubWFwKGl0ZW0gPT4ge1xyXG4gICAgICAgIGNvbnN0IHsgdGVtcG9yYXJ5LFxyXG4gICAgICAgICAgb3JpZ2luSXRlbSxcclxuICAgICAgICAgIGVkaXRvckhhbmRsZXIsXHJcbiAgICAgICAgICBlZGl0aW5nU3RhdHVzLFxyXG4gICAgICAgICAgaXNDaGVja2VkLFxyXG4gICAgICAgICAgc3ViSW5mb3JtYXRpb24sXHJcbiAgICAgICAgICBibGlua2VyLFxyXG4gICAgICAgICAgLi4ucmVzdWx0IH0gPSBpdGVtO1xyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgb25DaGVjayA9IChpdGVtOiBHcmlkSXRlbSwgaXNDaGVja2JveD86IGJvb2xlYW4pID0+IHtcclxuICAgIGlmICghdGhpcy5ncmlkT3B0aW9uLmNoZWNrYWJsZSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAoIWlzQ2hlY2tib3gpIHtcclxuICAgICAgaXRlbS5pc0NoZWNrZWQgPSAhaXRlbS5pc0NoZWNrZWQ7XHJcbiAgICB9XHJcbiAgICB0aGlzLmlzQ2hlY2tlZEFsbCA9IHRoaXMuaXRlbXMubGVuZ3RoID09PSB0aGlzLml0ZW1zLmZpbHRlcihlID0+IGUuaXNDaGVja2VkKS5sZW5ndGg7XHJcbiAgICB0aGlzLmdyaWRPcHRpb24ub25DaGVjaz8uKHRoaXMuaXRlbXMuZmlsdGVyKGUgPT4gZS5pc0NoZWNrZWQpLCBpdGVtKTtcclxuICAgIHRoaXMuI3NldFNlbGVjdGVkSXRlbXMoKTtcclxuICB9XHJcblxyXG4gIGNoZWNrQWxsKGlzQ2hlY2tlZEFsbDogYm9vbGVhbikge1xyXG4gICAgdGhpcy5pc0NoZWNrZWRBbGwgPSBpc0NoZWNrZWRBbGw7XHJcbiAgICB0aGlzLml0ZW1zLmZvckVhY2goaXRlbSA9PiBpdGVtLmlzQ2hlY2tlZCA9IHRoaXMuaXNDaGVja2VkQWxsKTtcclxuICAgIGlmICh0aGlzLmdyaWRPcHRpb24ub25DaGVjaykge1xyXG4gICAgICB0aGlzLmdyaWRPcHRpb24ub25DaGVjayh0aGlzLml0ZW1zLmZpbHRlcihpdGVtID0+IGl0ZW0uaXNDaGVja2VkKSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLiNzZXRTZWxlY3RlZEl0ZW1zKCk7XHJcbiAgfVxyXG5cclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy8jcmVnaW9uIFNvcnRcclxuICBzb3J0ID0gKGNvbHVtbjogU2RHcmlkQ29sdW1uKSA9PiB7XHJcbiAgICBpZiAoY29sdW1uLnR5cGUgPT09ICdjaGlsZHJlbicgfHwgY29sdW1uLnR5cGUgPT09ICdpbWFnZScpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc3Qgc29ydGFibGUgPSB0aGlzLmdyaWRPcHRpb24uc29ydGFibGUgPz8gdHJ1ZTtcclxuICAgIGNvbnN0IGNvbHVtblNvcnRhYmxlID0gY29sdW1uLnNvcnRhYmxlID8/IHRydWU7XHJcbiAgICBpZiAoIXNvcnRhYmxlIHx8ICFjb2x1bW5Tb3J0YWJsZSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5vcmRlckJ5ID09PSBjb2x1bW4uZmllbGQpIHtcclxuICAgICAgdGhpcy5vcmRlckRpcmVjdGlvbiA9IHRoaXMub3JkZXJEaXJlY3Rpb24gPT09ICdBU0MnID8gJ0RFU0MnIDogJ0FTQyc7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLm9yZGVyQnkgPSBjb2x1bW4uZmllbGQ7XHJcbiAgICAgIHRoaXMub3JkZXJEaXJlY3Rpb24gPSAnQVNDJztcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmdyaWRPcHRpb24udHlwZSA9PT0gJ2xvY2FsJykge1xyXG4gICAgICB0aGlzLnJlbG9hZCh0aGlzLmxvY2FsSXRlbXMpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5yZWxvYWQoKTtcclxuICAgIH1cclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vICNyZWdpb24gUmVzaXplIEdyaWRcclxuICBwcml2YXRlIHJlc2l6ZSgpIHtcclxuICAgIHRoaXMuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgaWYgKHRoaXMuZ3JpZE9wdGlvbi5oZWlnaHQpIHtcclxuICAgICAgdGhpcy5ncmlkQm9keS5uYXRpdmVFbGVtZW50LnN0eWxlLmhlaWdodCA9IHRoaXMuZ3JpZE9wdGlvbi5oZWlnaHQ7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmdyaWRCb2R5Lm5hdGl2ZUVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gYCR7d2luZG93LmlubmVySGVpZ2h0IC0gMzAwfXB4YDtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgLy8gTOG6pXkgb2Zmc2V0IHRvcCDEkeG7gyDEkWnhu4F1IGNo4buJbmgga8OtY2ggdGjGsOG7m2MgR3JpZCB24burYSB24bubaSBtw6BuIGjDrG5oXHJcbiAgICAgICAgY29uc3QgdG9wID0gdGhpcy5ncmlkQm9keS5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcDtcclxuICAgICAgICAvLyBjb25zdCB0b3AgPSAkKHRoaXMuZ3JpZEJvZHkubmF0aXZlRWxlbWVudCkub2Zmc2V0KCkudG9wO1xyXG4gICAgICAgIGNvbnN0IGJvdHRvbSA9IHRoaXMuZ3JpZE9wdGlvbi5oaWRlRm9vdGVyID8gMCA6ICh0aGlzLmlzTW9iaWxlT3JUYWJsZXQgPyA0NSA6IDU1KTtcclxuICAgICAgICBjb25zdCBoZWlnaHQgPSB3aW5kb3cuaW5uZXJIZWlnaHQgLSB0b3AgLSBib3R0b207XHJcbiAgICAgICAgdGhpcy5ncmlkQm9keS5uYXRpdmVFbGVtZW50LnN0eWxlLmhlaWdodCA9IGAke2hlaWdodH1weGA7XHJcbiAgICAgIH0sIDApO1xyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAvLyBM4bqleSBvZmZzZXQgdG9wIMSR4buDIMSRaeG7gXUgY2jhu4luaCBrw61jaCB0aMaw4bubYyBHcmlkIHbhu6thIHbhu5tpIG3DoG4gaMOsbmhcclxuICAgICAgICBjb25zdCB0b3AgPSB0aGlzLmdyaWRCb2R5Lm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wO1xyXG4gICAgICAgIC8vIGNvbnN0IHRvcCA9ICQodGhpcy5ncmlkQm9keS5uYXRpdmVFbGVtZW50KS5vZmZzZXQoKS50b3A7XHJcbiAgICAgICAgY29uc3QgYm90dG9tID0gdGhpcy5ncmlkT3B0aW9uLmhpZGVGb290ZXIgPyAwIDogKHRoaXMuaXNNb2JpbGVPclRhYmxldCA/IDQ1IDogNTUpO1xyXG4gICAgICAgIGNvbnN0IGhlaWdodCA9IHdpbmRvdy5pbm5lckhlaWdodCAtIHRvcCAtIGJvdHRvbTtcclxuICAgICAgICB0aGlzLmdyaWRCb2R5Lm5hdGl2ZUVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gYCR7aGVpZ2h0fXB4YDtcclxuICAgICAgfSwgMjAwKTtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgLy8gTOG6pXkgb2Zmc2V0IHRvcCDEkeG7gyDEkWnhu4F1IGNo4buJbmgga8OtY2ggdGjGsOG7m2MgR3JpZCB24burYSB24bubaSBtw6BuIGjDrG5oXHJcbiAgICAgICAgY29uc3QgdG9wID0gdGhpcy5ncmlkQm9keS5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcDtcclxuICAgICAgICAvLyBjb25zdCB0b3AgPSAkKHRoaXMuZ3JpZEJvZHkubmF0aXZlRWxlbWVudCkub2Zmc2V0KCkudG9wO1xyXG4gICAgICAgIGNvbnN0IGJvdHRvbSA9IHRoaXMuZ3JpZE9wdGlvbi5oaWRlRm9vdGVyID8gMCA6ICh0aGlzLmlzTW9iaWxlT3JUYWJsZXQgPyA0NSA6IDU1KTtcclxuICAgICAgICBjb25zdCBoZWlnaHQgPSB3aW5kb3cuaW5uZXJIZWlnaHQgLSB0b3AgLSBib3R0b207XHJcbiAgICAgICAgdGhpcy5ncmlkQm9keS5uYXRpdmVFbGVtZW50LnN0eWxlLmhlaWdodCA9IGAke2hlaWdodH1weGA7XHJcbiAgICAgIH0sIDUwMCk7XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIC8vIEzhuqV5IG9mZnNldCB0b3AgxJHhu4MgxJFp4buBdSBjaOG7iW5oIGvDrWNoIHRoxrDhu5tjIEdyaWQgduG7q2EgduG7m2kgbcOgbiBow6xuaFxyXG4gICAgICAgIGNvbnN0IHRvcCA9IHRoaXMuZ3JpZEJvZHkubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3A7XHJcbiAgICAgICAgLy8gY29uc3QgdG9wID0gJCh0aGlzLmdyaWRCb2R5Lm5hdGl2ZUVsZW1lbnQpLm9mZnNldCgpLnRvcDtcclxuICAgICAgICBjb25zdCBib3R0b20gPSB0aGlzLmdyaWRPcHRpb24uaGlkZUZvb3RlciA/IDAgOiAodGhpcy5pc01vYmlsZU9yVGFibGV0ID8gNDUgOiA1NSk7XHJcbiAgICAgICAgY29uc3QgaGVpZ2h0ID0gd2luZG93LmlubmVySGVpZ2h0IC0gdG9wIC0gYm90dG9tO1xyXG4gICAgICAgIHRoaXMuZ3JpZEJvZHkubmF0aXZlRWxlbWVudC5zdHlsZS5oZWlnaHQgPSBgJHtoZWlnaHR9cHhgO1xyXG4gICAgICB9LCAxMDAwKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldEhlaWdodChoZWlnaHQ/OiBzdHJpbmcpIHtcclxuICAgIHRoaXMuZ3JpZE9wdGlvbi5oZWlnaHQgPSBoZWlnaHQ7XHJcbiAgICB0aGlzLnJlc2l6ZSgpO1xyXG4gIH1cclxuXHJcbiAgLy8gI2VuZHJlZ2lvblxyXG5cclxuICAvLyNyZWdpb24gSW1wb3J0LCBFeHBvcnQsIENvbmZpZ1xyXG5cclxuICBsb2FkQ29uZmlnKGNvbmZpZ1Jlc3VsdDogQ29uZmlnUmVzdWx0KSB7XHJcbiAgICB0aGlzLmdyaWRPcHRpb24ucGFnaW5hdGUucGFnZVNpemUgPSBjb25maWdSZXN1bHQucGFnZVNpemU7XHJcbiAgICB0aGlzLmdyaWRPcHRpb24uY29sdW1ucyA9IGNvbmZpZ1Jlc3VsdC5jb2x1bW5zO1xyXG4gICAgdGhpcy5maXhlZENvbHVtbnMgPSBjb25maWdSZXN1bHQuZml4ZWRDb2x1bW5zO1xyXG4gICAgdGhpcy5ub3JtYWxDb2x1bW5zID0gY29uZmlnUmVzdWx0Lm5vcm1hbENvbHVtbnM7XHJcbiAgICB0aGlzLmNvbHVtbnMgPSBbLi4udGhpcy5maXhlZENvbHVtbnMsIC4uLnRoaXMubm9ybWFsQ29sdW1uc107XHJcbiAgICB0aGlzLmluaXRGaWx0ZXIoKTtcclxuICAgIHRoaXMuaW5pdERpY3Rpb25hcnlDb2x1bW5WYWx1ZXMoKTtcclxuICAgIHRoaXMucmVsb2FkKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGluaXRGaWx0ZXIoKSB7XHJcbiAgICB0aGlzLmdyaWRPcHRpb24uY29sdW1ucy5mb3JFYWNoKGNvbHVtbiA9PiB7XHJcbiAgICAgIC8vIEfDoW4gZ2nDoSB0cuG7iyBmaWx0ZXIgbeG6t2MgxJHhu4tuaCBjaG8gdOG7q25nIGPhu5l0XHJcbiAgICAgIHRoaXMuZmlsdGVyW2NvbHVtbi5maWVsZF0gPSB0aGlzLmZpbHRlcltjb2x1bW4uZmllbGRdID8/ICcnO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGluaXREaWN0aW9uYXJ5Q29sdW1uVmFsdWVzKCkge1xyXG4gICAgdGhpcy5ncmlkT3B0aW9uLmNvbHVtbnMuZm9yRWFjaChjb2x1bW4gPT4ge1xyXG4gICAgICBpZiAoY29sdW1uLnR5cGUgPT09ICd2YWx1ZXMnKSB7XHJcbiAgICAgICAgY29sdW1uLmRpY3Rpb25hcnkgPSB7fTtcclxuICAgICAgICBpZiAoY29sdW1uLnZhbHVlcykge1xyXG4gICAgICAgICAgY29sdW1uLnZhbHVlcy5mb3JFYWNoKGUgPT4ge1xyXG4gICAgICAgICAgICBjb2x1bW4uZGljdGlvbmFyeVtlLnZhbHVlLnRvU3RyaW5nKCldID0ge1xyXG4gICAgICAgICAgICAgIHRleHQ6IGUudGV4dCxcclxuICAgICAgICAgICAgICBpY29uOiBlLmljb24sXHJcbiAgICAgICAgICAgICAgY29sb3I6IGUuY29sb3IsXHJcbiAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiBlLmJhY2tncm91bmRDb2xvclxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb2x1bW4udHlwZSA9PT0gJ2NoaWxkcmVuJykge1xyXG4gICAgICAgIGNvbHVtbi5jaGlsZHJlbi5mb3JFYWNoKGNoaWxkQ29sdW1uID0+IHtcclxuICAgICAgICAgIGlmIChjaGlsZENvbHVtbi50eXBlID09PSAndmFsdWVzJykge1xyXG4gICAgICAgICAgICBjaGlsZENvbHVtbi5kaWN0aW9uYXJ5ID0ge307XHJcbiAgICAgICAgICAgIGlmIChjaGlsZENvbHVtbi52YWx1ZXMpIHtcclxuICAgICAgICAgICAgICBjaGlsZENvbHVtbi52YWx1ZXMuZm9yRWFjaChlID0+IHtcclxuICAgICAgICAgICAgICAgIGNoaWxkQ29sdW1uLmRpY3Rpb25hcnlbZS52YWx1ZS50b1N0cmluZygpXSA9IHtcclxuICAgICAgICAgICAgICAgICAgdGV4dDogZS50ZXh0LFxyXG4gICAgICAgICAgICAgICAgICBpY29uOiBlLmljb24sXHJcbiAgICAgICAgICAgICAgICAgIGNvbG9yOiBlLmNvbG9yLFxyXG4gICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IGUuYmFja2dyb3VuZENvbG9yXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIHByaXZhdGUgZ2VuZXJhdGVFZGl0b3JIYW5kbGVycygpIHtcclxuICAgIHRoaXMudmlld0l0ZW1zLmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgIHRoaXMuZ2VuZXJhdGVFZGl0b3JIYW5sZGVyKGl0ZW0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdlbmVyYXRlRWRpdG9ySGFubGRlcihpdGVtOiBHcmlkSXRlbSkge1xyXG4gICAgLy8gaXRlbS5lZGl0b3JIYW5kbGVyID0gaXRlbS5lZGl0b3JIYW5kbGVyIHx8IHt9O1xyXG4gICAgdGhpcy5lZGl0b3JWaXNpYmxlUGlwZS50cmFuc2Zvcm0obnVsbCwgaXRlbSwgdGhpcy5ncmlkT3B0aW9uKTtcclxuICB9XHJcbiAgdHJhY2tCeUlkKGluZGV4LCBpdGVtKSB7XHJcbiAgICByZXR1cm4gaXRlbS5pZDtcclxuICB9XHJcblxyXG4gIGdldCBpc0ZpbHRlcmluZygpIHtcclxuICAgIHJldHVybiBPYmplY3QudmFsdWVzKHRoaXMuZmlsdGVyKS5zb21lKHZhbHVlID0+ICEhdmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgb25GaWx0ZXJQb3B1cCgpIHtcclxuICAgIGNvbnN0IGYxID0gSlNPTi5zdHJpbmdpZnkodGhpcy5maWx0ZXIpO1xyXG4gICAgY29uc3QgZjIgPSBKU09OLnN0cmluZ2lmeSh0aGlzLmV4dGVybmFsRmlsdGVyKTtcclxuICAgIGNvbnN0IGZpbHRlciA9IEpTT04ucGFyc2UoZjEpO1xyXG4gICAgY29uc3QgZXh0ZXJuYWxGaWx0ZXIgPSBKU09OLnBhcnNlKGYyKTtcclxuICAgIHRoaXMuc2RHcmlkUG9wdXBGaWx0ZXIub3Blbih0aGlzLmZpeGVkQ29sdW1ucywgdGhpcy5ub3JtYWxDb2x1bW5zLCBmaWx0ZXIsIGV4dGVybmFsRmlsdGVyLCB0aGlzLmdyaWRPcHRpb24uZmlsdGVyPy5leHRlcm5hbEZpbHRlcnMpO1xyXG4gIH1cclxuXHJcbiAgY2xlYXJGaWx0ZXIgPSAoKSA9PiB7XHJcbiAgICB0aGlzLmZpbHRlciA9IHt9O1xyXG4gICAgdGhpcy5leHRlcm5hbEZpbHRlciA9IHt9O1xyXG4gICAgdGhpcy5pbml0RmlsdGVyKCk7XHJcbiAgICB0aGlzLmluaXRFeHRlcm5hbEZpbHRlcigpO1xyXG4gICAgaWYgKHRoaXMuc2RHcmlkUG9wdXBGaWx0ZXIpIHtcclxuICAgICAgdGhpcy5zZEdyaWRQb3B1cEZpbHRlci5maWx0ZXIgPSB0aGlzLmZpbHRlcjtcclxuICAgICAgdGhpcy5zZEdyaWRQb3B1cEZpbHRlci5leHRlcm5hbEZpbHRlciA9IHRoaXMuZXh0ZXJuYWxGaWx0ZXI7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkNsZWFyRmlsdGVyID0gKCkgPT4ge1xyXG4gICAgdGhpcy5jbGVhckZpbHRlcigpO1xyXG4gICAgdGhpcy5yZWxvYWQoKTtcclxuICB9XHJcblxyXG4gIGV4cGFuZE9yQ29sbGFwc2UgPSBhc3luYyAoZ3JpZEl0ZW06IEdyaWRJdGVtKSA9PiB7XHJcbiAgICBjb25zdCB7IHRlbXBvcmFyeSxcclxuICAgICAgb3JpZ2luSXRlbSxcclxuICAgICAgZWRpdG9ySGFuZGxlcixcclxuICAgICAgZWRpdGluZ1N0YXR1cyxcclxuICAgICAgaXNDaGVja2VkLFxyXG4gICAgICBzdWJJbmZvcm1hdGlvbixcclxuICAgICAgLi4uaXRlbSB9ID0gZ3JpZEl0ZW07XHJcbiAgICBpZiAoIXRoaXMuZ3JpZE9wdGlvbi5zdWJJbmZvcm1hdGlvbikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAoZ3JpZEl0ZW0uc3ViSW5mb3JtYXRpb24/LmlzT3BlbmVkKSB7XHJcbiAgICAgIGdyaWRJdGVtLnN1YkluZm9ybWF0aW9uLmlzT3BlbmVkID0gZmFsc2U7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmdyaWRPcHRpb24uc3ViSW5mb3JtYXRpb24ubGF6eUxvYWRpbmcgJiYgIWdyaWRJdGVtLnN1YkluZm9ybWF0aW9uPy5pc0xvYWRlZCkge1xyXG4gICAgICBncmlkSXRlbS5zdWJJbmZvcm1hdGlvbi5pc0xvYWRpbmcgPSB0cnVlO1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGdyaWRJdGVtLnN1YkluZm9ybWF0aW9uLnN1Ykl0ZW1zID0gYXdhaXQgdGhpcy5ncmlkT3B0aW9uLnN1YkluZm9ybWF0aW9uLm9uTG9hZChpdGVtKTtcclxuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoZ3JpZEl0ZW0uc3ViSW5mb3JtYXRpb24uc3ViSXRlbXMpKSB7XHJcbiAgICAgICAgICB0aGlzLm5vdGlmeVNlcnZpY2UuYWxlcnQud2FybmluZyhgRGF0YSBpcyBub3QgYW4gYXJyYXlgKTtcclxuICAgICAgICAgIGdyaWRJdGVtLnN1YkluZm9ybWF0aW9uLnN1Ykl0ZW1zID0gW107XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGdyaWRJdGVtLnN1YkluZm9ybWF0aW9uLmlzTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIGdyaWRJdGVtLnN1YkluZm9ybWF0aW9uLmlzTG9hZGVkID0gdHJ1ZTtcclxuICAgICAgICBncmlkSXRlbS5zdWJJbmZvcm1hdGlvbi5pc09wZW5lZCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgICB0aGlzLm5vdGlmeVNlcnZpY2UuaGFuZGxlLmVycm9yKGVycik7XHJcbiAgICAgICAgZ3JpZEl0ZW0uc3ViSW5mb3JtYXRpb24uaXNMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmdyaWRPcHRpb24uc3ViSW5mb3JtYXRpb24ubGF6eUxvYWRpbmcgPT09IGZhbHNlICYmICFncmlkSXRlbS5zdWJJbmZvcm1hdGlvbi5pc0xvYWRlZCkge1xyXG4gICAgICBncmlkSXRlbS5zdWJJbmZvcm1hdGlvbi5zdWJJdGVtcyA9IGdyaWRJdGVtW3RoaXMuZ3JpZE9wdGlvbi5zdWJJbmZvcm1hdGlvbi5maWVsZF07XHJcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShncmlkSXRlbS5zdWJJbmZvcm1hdGlvbi5zdWJJdGVtcykpIHtcclxuICAgICAgICB0aGlzLm5vdGlmeVNlcnZpY2UuYWxlcnQud2FybmluZyhgRGF0YSBpcyBub3QgYW4gYXJyYXlgKTtcclxuICAgICAgICBncmlkSXRlbS5zdWJJbmZvcm1hdGlvbi5zdWJJdGVtcyA9IFtdO1xyXG4gICAgICB9XHJcbiAgICAgIGdyaWRJdGVtLnN1YkluZm9ybWF0aW9uLmlzTG9hZGVkID0gdHJ1ZTtcclxuICAgICAgZ3JpZEl0ZW0uc3ViSW5mb3JtYXRpb24uaXNPcGVuZWQgPSB0cnVlO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBncmlkSXRlbS5zdWJJbmZvcm1hdGlvbi5pc09wZW5lZCA9IHRydWU7XHJcbiAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG4gIC8vI3JlZ2lvbiBFZGl0YWJsZVxyXG4gIG9uQ3JlYXRlID0gKCkgPT4ge1xyXG4gICAgY29uc3QgeyB0eXBlLCBlZGl0b3IsIGNvbHVtbnMgfSA9IHRoaXMuZ3JpZE9wdGlvbjtcclxuICAgIGlmICghZWRpdG9yPy5hZGRhYmxlKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IGl0ZW06IEdyaWRJdGVtID0ge307XHJcbiAgICAvLyBHw6FuIGdpw6EgdHLhu4sgbeG6t2MgxJHhu4tuaFxyXG4gICAgY29sdW1ucy5mb3JFYWNoKGNvbHVtbiA9PiB7XHJcbiAgICAgIGlmIChjb2x1bW4udHlwZSA9PT0gJ3ZhbHVlcycpIHtcclxuICAgICAgICBpdGVtW2NvbHVtbi5maWVsZF0gPSAnJztcclxuICAgICAgfSBlbHNlIGlmIChjb2x1bW4udHlwZSA9PT0gJ2Jvb2wnKSB7XHJcbiAgICAgICAgaXRlbVtjb2x1bW4uZmllbGRdID0gdHJ1ZTtcclxuICAgICAgfSBlbHNlIGlmIChjb2x1bW4udHlwZSA9PT0gJ251bWJlcicpIHtcclxuICAgICAgICBpdGVtW2NvbHVtbi5maWVsZF0gPSBudWxsO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIGVkaXRvci5vbkFkZD8uKGl0ZW0pO1xyXG4gICAgLy8gxJDGsGEgaXRlbSBsw6puIGTDsm5nIMSR4bqndSB0acOqbiBu4bq/dSB0eXBlIGtow6FjIHBvcHVwXHJcbiAgICBpZiAoZWRpdG9yLnR5cGUgIT09ICdwb3B1cCcpIHtcclxuICAgICAgaWYgKHR5cGUgPT09ICdsb2NhbCcpIHtcclxuICAgICAgICB0aGlzLml0ZW1zLnNwbGljZSgwLCAwLCBpdGVtKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnZpZXdJdGVtcy5zcGxpY2UoMCwgMCwgaXRlbSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLm9uVXBkYXRlKGl0ZW0sIGZhbHNlKTtcclxuICB9XHJcbiAgb25VcGRhdGUgPSAoaXRlbTogR3JpZEl0ZW0sIGlzTW9kaWZpZWQ/OiBib29sZWFuKSA9PiB7XHJcbiAgICBjb25zdCB7IGVkaXRvciwgY29sdW1ucyB9ID0gdGhpcy5ncmlkT3B0aW9uO1xyXG4gICAgaXRlbS5lZGl0aW5nU3RhdHVzID0gaXNNb2RpZmllZCA/ICd1cGRhdGUnIDogJ2NyZWF0ZSc7XHJcbiAgICBpdGVtLnRlbXBvcmFyeSA9IHsgLi4uaXRlbSB9O1xyXG4gICAgdGhpcy5nZW5lcmF0ZUVkaXRvckhhbmxkZXIoaXRlbSk7XHJcbiAgICBpZiAoZWRpdG9yLnR5cGUgPT09ICdwb3B1cCcpIHtcclxuICAgICAgdGhpcy5zZEdyaWRQb3B1cEVkaXRvci5vcGVuKGl0ZW0sIGNvbHVtbnMsIGlzTW9kaWZpZWQpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuICBvblNhdmUgPSBhc3luYyAoaXRlbTogR3JpZEl0ZW0pID0+IHtcclxuICAgIGNvbnN0IHsgZWRpdG9yIH0gPSB0aGlzLmdyaWRPcHRpb247XHJcbiAgICB0cnkge1xyXG4gICAgICBpdGVtLmVkaXRvckhhbmRsZXIuc2F2aW5nID0gdHJ1ZTtcclxuICAgICAgaWYgKGVkaXRvci52YWxpZGF0ZSkge1xyXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGVkaXRvci52YWxpZGF0ZShpdGVtKTtcclxuICAgICAgICBpZiAocmVzdWx0IGluc3RhbmNlb2YgUHJvbWlzZSkge1xyXG4gICAgICAgICAgY29uc3QgbWVzc2FnZSA9IGF3YWl0IHJlc3VsdDtcclxuICAgICAgICAgIGlmIChtZXNzYWdlKSB7XHJcbiAgICAgICAgICAgIHRocm93IG1lc3NhZ2U7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgICAgICAgdGhyb3cgcmVzdWx0O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAoZWRpdG9yLm9uU2F2ZSkge1xyXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGVkaXRvci5vblNhdmUoaXRlbSk7XHJcbiAgICAgICAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIFByb21pc2UpIHtcclxuICAgICAgICAgIGF3YWl0IHJlc3VsdDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChpdGVtLmVkaXRpbmdTdGF0dXMgPT09ICdjcmVhdGUnICYmIGVkaXRvci50eXBlID09PSAncG9wdXAnKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZ3JpZE9wdGlvbi50eXBlID09PSAnbG9jYWwnKSB7XHJcbiAgICAgICAgICB0aGlzLml0ZW1zLnNwbGljZSgwLCAwLCBpdGVtKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy52aWV3SXRlbXMuc3BsaWNlKDAsIDAsIGl0ZW0pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpdGVtLmVkaXRpbmdTdGF0dXMgPSB1bmRlZmluZWQ7XHJcbiAgICAgIHRoaXMuZ2VuZXJhdGVFZGl0b3JIYW5sZGVyKGl0ZW0pO1xyXG4gICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgIHRoaXMubm90aWZ5U2VydmljZS5ub3RpZnkud2FybmluZyhlcnIpO1xyXG4gICAgfSBmaW5hbGx5IHtcclxuICAgICAgaXRlbS5lZGl0b3JIYW5kbGVyLnNhdmluZyA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkNhbmNlbCA9IChpdGVtOiBHcmlkSXRlbSkgPT4ge1xyXG4gICAgY29uc3QgeyBlZGl0b3IgfSA9IHRoaXMuZ3JpZE9wdGlvbjtcclxuICAgIGlmIChlZGl0b3IudHlwZSA9PT0gJ2lubGluZScpIHtcclxuICAgICAgaWYgKHRoaXMuZ3JpZE9wdGlvbi50eXBlID09PSAnbG9jYWwnKSB7XHJcbiAgICAgICAgY29uc3QgaWR4MSA9IHRoaXMuaXRlbXMuaW5kZXhPZihpdGVtKTtcclxuICAgICAgICB0aGlzLml0ZW1zLnNwbGljZShpZHgxLCAxKTtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBpZHgyID0gdGhpcy52aWV3SXRlbXMuaW5kZXhPZihpdGVtKTtcclxuICAgICAgdGhpcy52aWV3SXRlbXMuc3BsaWNlKGlkeDIsIDEpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAoaXRlbS5lZGl0aW5nU3RhdHVzID09PSAnY3JlYXRlJykge1xyXG4gICAgICBpZiAoZWRpdG9yLnR5cGUgIT09ICdwb3B1cCcpIHtcclxuICAgICAgICBpZiAodGhpcy5ncmlkT3B0aW9uLnR5cGUgPT09ICdsb2NhbCcpIHtcclxuICAgICAgICAgIHRoaXMuaXRlbXMuc3BsaWNlKDAsIDEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnZpZXdJdGVtcy5zcGxpY2UoMCwgMSk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIE9iamVjdC5hc3NpZ24oaXRlbSwgaXRlbS50ZW1wb3JhcnkpO1xyXG4gICAgICBpdGVtLmVkaXRpbmdTdGF0dXMgPSB1bmRlZmluZWQ7XHJcbiAgICAgIHRoaXMuZ2VuZXJhdGVFZGl0b3JIYW5sZGVyKGl0ZW0pO1xyXG4gICAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGluaXRFeHRlcm5hbEZpbHRlciA9ICgpID0+IHtcclxuICAgIGlmICh0aGlzLmdyaWRPcHRpb24uZmlsdGVyPy5leHRlcm5hbEZpbHRlcnM/Lmxlbmd0aCkge1xyXG4gICAgICB0aGlzLmdyaWRPcHRpb24uZmlsdGVyLmV4dGVybmFsRmlsdGVycy5mb3JFYWNoKGV4dGVybmFsRmlsdGVyID0+IHtcclxuICAgICAgICBpZiAoZXh0ZXJuYWxGaWx0ZXIudHlwZSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgIGlmIChleHRlcm5hbEZpbHRlci5kZWZhdWx0KSB7XHJcbiAgICAgICAgICAgIHRoaXMuZXh0ZXJuYWxGaWx0ZXJbZXh0ZXJuYWxGaWx0ZXIuZmllbGRdID0gZXh0ZXJuYWxGaWx0ZXIuZGVmYXVsdCA/PyAnJztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGV4dGVybmFsRmlsdGVyLnR5cGUgPT09ICdudW1iZXInKSB7XHJcbiAgICAgICAgICBpZiAoZXh0ZXJuYWxGaWx0ZXIuZGVmYXVsdCkge1xyXG4gICAgICAgICAgICB0aGlzLmV4dGVybmFsRmlsdGVyW2V4dGVybmFsRmlsdGVyLmZpZWxkXSA9IGV4dGVybmFsRmlsdGVyLmRlZmF1bHQgPz8gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZXh0ZXJuYWxGaWx0ZXIudHlwZSA9PT0gJ2RhdGVyYW5nZScpIHtcclxuICAgICAgICAgIHRoaXMuZXh0ZXJuYWxGaWx0ZXJbZXh0ZXJuYWxGaWx0ZXIuZmllbGRdID0ge1xyXG4gICAgICAgICAgICBmcm9tOiBleHRlcm5hbEZpbHRlci5kZWZhdWx0RnJvbSA/PyB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgIHRvOiBleHRlcm5hbEZpbHRlci5kZWZhdWx0VG8gPz8gdW5kZWZpbmVkXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZXh0ZXJuYWxGaWx0ZXIudHlwZSA9PT0gJ251bWJlcnJhbmdlJykge1xyXG4gICAgICAgICAgdGhpcy5leHRlcm5hbEZpbHRlcltleHRlcm5hbEZpbHRlci5maWVsZF0gPSB7XHJcbiAgICAgICAgICAgIGZyb206IGV4dGVybmFsRmlsdGVyLmRlZmF1bHRGcm9tID8/IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgdG86IGV4dGVybmFsRmlsdGVyLmRlZmF1bHRUbyA/PyB1bmRlZmluZWRcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChleHRlcm5hbEZpbHRlci50eXBlID09PSAnZGF0ZXJhbmdlZnVsbCcpIHtcclxuICAgICAgICAgIHRoaXMuZXh0ZXJuYWxGaWx0ZXJbZXh0ZXJuYWxGaWx0ZXIuZmllbGRdID0ge1xyXG4gICAgICAgICAgICBmcm9tOiBleHRlcm5hbEZpbHRlci5kZWZhdWx0RnJvbSA/PyB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgIHRvOiBleHRlcm5hbEZpbHRlci5kZWZhdWx0VG8gPz8gdW5kZWZpbmVkXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZXh0ZXJuYWxGaWx0ZXIudHlwZSA9PT0gJ3ZhbHVlcycpIHsgLy8gYW5kbjFcclxuICAgICAgICAgIGlmIChleHRlcm5hbEZpbHRlci5kZWZhdWx0KSB7XHJcbiAgICAgICAgICAgIHRoaXMuZXh0ZXJuYWxGaWx0ZXJbZXh0ZXJuYWxGaWx0ZXIuZmllbGRdID0gZXh0ZXJuYWxGaWx0ZXIuZGVmYXVsdCA/PyAnJztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIG9uU2VhcmNoID0gKHNlYXJjaFZhbHVlOiBzdHJpbmcsIGl0ZW06IEdyaWRJdGVtLCBjb2x1bW46IFNkR3JpZENvbHVtbikgPT4ge1xyXG4gICAgaXRlbVtjb2x1bW4uZmllbGRdID0gc2VhcmNoVmFsdWU7XHJcbiAgfVxyXG5cclxuICBvbkZpbHRlckNvbmZpZ3VyYXRpb25Mb2FkZWQgPSAocGFyYW06IEZpbHRlckNvbmZpZ3VyYXRpb24pID0+IHtcclxuICAgIHRoaXMucXVpY2tGaWx0ZXJzID0gcGFyYW0ucXVpY2tGaWx0ZXJzIHx8IFtdO1xyXG4gICAgdGhpcy5zZWxlY3RlZFF1aWNrRmlsdGVyID0gcGFyYW0uc2VsZWN0ZWRRdWlja0ZpbHRlciB8fCAnJztcclxuICAgIGlmICh0aGlzLnNlbGVjdGVkUXVpY2tGaWx0ZXIpIHtcclxuICAgICAgY29uc3QgcXVpY2tGaWx0ZXIgPSB0aGlzLnF1aWNrRmlsdGVycy5maW5kKGUgPT4gZS5jb2RlID09PSB0aGlzLnNlbGVjdGVkUXVpY2tGaWx0ZXIpO1xyXG4gICAgICBpZiAocXVpY2tGaWx0ZXIpIHtcclxuICAgICAgICBjb25zdCBmMSA9IEpTT04uc3RyaW5naWZ5KHF1aWNrRmlsdGVyLmZpbHRlcik7XHJcbiAgICAgICAgY29uc3QgZjIgPSBKU09OLnN0cmluZ2lmeShxdWlja0ZpbHRlci5leHRlcm5hbEZpbHRlcik7XHJcbiAgICAgICAgdGhpcy5maWx0ZXIgPSBKU09OLnBhcnNlKGYxKTtcclxuICAgICAgICB0aGlzLmV4dGVybmFsRmlsdGVyID0gdGhpcy5yZWZyZXNoRXh0ZXJuYWxGaWx0ZXIodGhpcy5ncmlkT3B0aW9uPy5maWx0ZXI/LmV4dGVybmFsRmlsdGVycywgSlNPTi5wYXJzZShmMikpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLmlubGluZUV4dGVybmFsID0gcGFyYW0uaW5saW5lRXh0ZXJuYWwgfHwge307XHJcbiAgICB0aGlzLmlubGluZUNvbHVtbiA9IHBhcmFtLmlubGluZUNvbHVtbiB8fCB7fTtcclxuICAgIHRoaXMucmVzaXplKCk7XHJcbiAgfVxyXG5cclxuICBvblNlbGVjdFF1aWNrRmlsdGVyID0gKHZhbHVlOiBzdHJpbmcpID0+IHtcclxuICAgIGNvbnN0IHF1aWNrRmlsdGVyID0gdGhpcy5xdWlja0ZpbHRlcnMuZmluZChlID0+IGUuY29kZSA9PT0gdmFsdWUpO1xyXG4gICAgaWYgKHF1aWNrRmlsdGVyPy5jb2RlKSB7XHJcbiAgICAgIGNvbnN0IGYxID0gSlNPTi5zdHJpbmdpZnkocXVpY2tGaWx0ZXIuZmlsdGVyKTtcclxuICAgICAgY29uc3QgZjIgPSBKU09OLnN0cmluZ2lmeShxdWlja0ZpbHRlci5leHRlcm5hbEZpbHRlcik7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRRdWlja0ZpbHRlciA9IHF1aWNrRmlsdGVyPy5jb2RlO1xyXG4gICAgICB0aGlzLmZpbHRlciA9IEpTT04ucGFyc2UoZjEpO1xyXG4gICAgICB0aGlzLmV4dGVybmFsRmlsdGVyID0gdGhpcy5yZWZyZXNoRXh0ZXJuYWxGaWx0ZXIodGhpcy5ncmlkT3B0aW9uPy5maWx0ZXI/LmV4dGVybmFsRmlsdGVycywgSlNPTi5wYXJzZShmMikpO1xyXG4gICAgICB0aGlzLnVwZGF0ZUZpbHRlcigpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZFF1aWNrRmlsdGVyID0gJyc7XHJcbiAgICAgIHRoaXMub25DbGVhckZpbHRlcigpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zZEdyaWRQb3B1cEZpbHRlcj8udXBkYXRlQ29uZmlndXJhdGlvbih0aGlzLnNlbGVjdGVkUXVpY2tGaWx0ZXIpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRFeHBvcnRJdGVtcyA9IGFzeW5jIChwYWdlTnVtYmVyOiBudW1iZXIgPSAxLCBwYWdlU2l6ZTogbnVtYmVyID0gMTAwMDApID0+IHtcclxuICAgIGlmICh0aGlzLmlzTG9hZGluZykge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7XHJcbiAgICB0cnkge1xyXG4gICAgICBpZiAodGhpcy5ncmlkT3B0aW9uLnR5cGUgIT09ICdsb2NhbCcpIHtcclxuICAgICAgICBjb25zdCBoYW5kbGVyID0gdGhpcy5oYW5kbGVyIGFzIElIYW5kbGVyU2VydmVyO1xyXG4gICAgICAgIGNvbnN0IGZpbHRlciA9IGhhbmRsZXIubWFwUmVxdWVzdCh0aGlzLmdldEZpbHRlckluZm8ocGFnZU51bWJlciwgcGFnZVNpemUpKTtcclxuICAgICAgICBpZiAodGhpcy5ncmlkT3B0aW9uLm1ldGhvZCA9PT0gJ0dFVCcpIHtcclxuICAgICAgICAgIGNvbnN0IHF1ZXJ5U3RyaW5nID0gT2JqZWN0LmtleXMoZmlsdGVyKS5maWx0ZXIoa2V5ID0+IGZpbHRlcltrZXldICE9PSBudWxsICYmIGZpbHRlcltrZXldICE9PSB1bmRlZmluZWQpXHJcbiAgICAgICAgICAgIC5tYXAoa2V5ID0+IGtleSArICc9JyArIGZpbHRlcltrZXldKS5qb2luKCcmJyk7XHJcbiAgICAgICAgICBjb25zdCB1cmwgPSB0aGlzLmdyaWRPcHRpb24udXJsLmluY2x1ZGVzKCc/JykgPyBgJHt0aGlzLmdyaWRPcHRpb24udXJsfSYke3F1ZXJ5U3RyaW5nfWAgOiBgJHt0aGlzLmdyaWRPcHRpb24udXJsfT8ke3F1ZXJ5U3RyaW5nfWA7XHJcbiAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuYXBpU2VydmljZS5nZXQodXJsKTtcclxuICAgICAgICAgIHJldHVybiBoYW5kbGVyLm1hcFJlc3BvbnNlKHJlc3BvbnNlKS5pdGVtcztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmFwaVNlcnZpY2UucG9zdCh0aGlzLmdyaWRPcHRpb24udXJsLCBmaWx0ZXIpO1xyXG4gICAgICAgICAgcmV0dXJuIGhhbmRsZXIubWFwUmVzcG9uc2UocmVzcG9uc2UpLml0ZW1zO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBsZXQgbG9jYWxJdGVtcyA9IFtdO1xyXG4gICAgICAgIGNvbnN0IGhhbmRsZXIgPSB0aGlzLmhhbmRsZXIgYXMgSUhhbmRsZXJMb2NhbDtcclxuICAgICAgICBpZiAodHlwZW9mICh0aGlzLmdyaWRPcHRpb24uaXRlbXMpID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICBjb25zdCByZXN1bHRzID0gdGhpcy5ncmlkT3B0aW9uLml0ZW1zKCk7XHJcbiAgICAgICAgICBpZiAocmVzdWx0cyBpbnN0YW5jZW9mIFByb21pc2UpIHtcclxuICAgICAgICAgICAgbG9jYWxJdGVtcyA9IGF3YWl0IHJlc3VsdHM7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBsb2NhbEl0ZW1zID0gcmVzdWx0cztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgbG9jYWxJdGVtcyA9IHRoaXMuZ3JpZE9wdGlvbi5pdGVtcztcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBoYW5kbGVyLmZpbHRlcihsb2NhbEl0ZW1zLCB7XHJcbiAgICAgICAgICBjdXN0b21GaWx0ZXI6IHRoaXMuZ3JpZE9wdGlvbi5maWx0ZXIuY3VzdG9tRmlsdGVyLFxyXG4gICAgICAgICAgcmF3RmlsdGVyOiB0aGlzLmZpbHRlcixcclxuICAgICAgICAgIGNvbHVtbnM6IHRoaXMuZ3JpZE9wdGlvbi5jb2x1bW5zLFxyXG4gICAgICAgICAgcmF3RXh0ZXJuYWxGaWx0ZXI6IHRoaXMuZXh0ZXJuYWxGaWx0ZXIsXHJcbiAgICAgICAgICBleHRlcm5hbEZpbHRlcnM6IHRoaXMuZ3JpZE9wdGlvbi5maWx0ZXI/LmV4dGVybmFsRmlsdGVycyxcclxuICAgICAgICAgIG9yZGVyQnk6IHRoaXMub3JkZXJCeSxcclxuICAgICAgICAgIG9yZGVyRGlyZWN0aW9uOiB0aGlzLm9yZGVyRGlyZWN0aW9uLFxyXG4gICAgICAgICAgcGFnZU51bWJlcixcclxuICAgICAgICAgIHBhZ2VTaXplXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlLml0ZW1zO1xyXG4gICAgICB9XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICB0aGlzLm5vdGlmeVNlcnZpY2UuaGFuZGxlLmVycm9yKGVycm9yKTtcclxuICAgIH0gZmluYWxseSB7XHJcbiAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0RmlsdGVySW5mbyA9IChwYWdlTnVtYmVyOiBudW1iZXIsIHBhZ2VTaXplOiBudW1iZXIpOiBTZEdyaWRGaWx0ZXJJbmZvID0+IHtcclxuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHRoaXMuZmlsdGVyKSkge1xyXG4gICAgICBpZiAodHlwZW9mICh0aGlzLmZpbHRlcltrZXldKSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICB0aGlzLmZpbHRlcltrZXldID0gdGhpcy5maWx0ZXJba2V5XS50cmltKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHRoaXMuZXh0ZXJuYWxGaWx0ZXIpKSB7XHJcbiAgICAgIGlmICh0eXBlb2YgKHRoaXMuZXh0ZXJuYWxGaWx0ZXJba2V5XSkgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgdGhpcy5leHRlcm5hbEZpbHRlcltrZXldID0gdGhpcy5leHRlcm5hbEZpbHRlcltrZXldLnRyaW0oKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgY3VzdG9tRmlsdGVyOiB0aGlzLmdyaWRPcHRpb24uZmlsdGVyLmN1c3RvbUZpbHRlcixcclxuICAgICAgcmF3RmlsdGVyOiB0aGlzLmZpbHRlcixcclxuICAgICAgY29sdW1uczogdGhpcy5ncmlkT3B0aW9uLmNvbHVtbnMsXHJcbiAgICAgIHJhd0V4dGVybmFsRmlsdGVyOiB0aGlzLmV4dGVybmFsRmlsdGVyLFxyXG4gICAgICBleHRlcm5hbEZpbHRlcnM6IHRoaXMuZ3JpZE9wdGlvbi5maWx0ZXI/LmV4dGVybmFsRmlsdGVycyxcclxuICAgICAgb3JkZXJCeTogdGhpcy5vcmRlckJ5LFxyXG4gICAgICBvcmRlckRpcmVjdGlvbjogdGhpcy5vcmRlckRpcmVjdGlvbixcclxuICAgICAgcGFnZU51bWJlcixcclxuICAgICAgcGFnZVNpemVcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBvbkV4cG9ydEJ5VGVtcGxhdGUgPSBhc3luYyAocGFyYW1zOiB7IGV4Y2VsQ29uZmlnOiBhbnksIGV4Y2VsQ29sdW1uczogYW55W10gfSkgPT4ge1xyXG4gICAgdGhpcy5sb2FkaW5nU2VydmljZS5zdGFydCgpO1xyXG4gICAgbGV0IGV4cG9ydEl0ZW1zID0gW107XHJcbiAgICBpZiAodGhpcy5ncmlkT3B0aW9uLmV4cG9ydD8uaXRlbXMpIHtcclxuICAgICAgZXhwb3J0SXRlbXMgPSBhd2FpdCB0aGlzLmdyaWRPcHRpb24uZXhwb3J0Py5pdGVtcyh0aGlzLmdldEZpbHRlckluZm8oMSwgMTAwMDApKS5maW5hbGx5KHRoaXMubG9hZGluZ1NlcnZpY2Uuc3RvcCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBleHBvcnRJdGVtcyA9IGF3YWl0IHRoaXMuZ2V0RXhwb3J0SXRlbXMoKS5maW5hbGx5KHRoaXMubG9hZGluZ1NlcnZpY2Uuc3RvcCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5ncmlkT3B0aW9uLmV4cG9ydD8ubWFwcGluZykge1xyXG4gICAgICBjb25zdCByZXN1bHRzID0gdGhpcy5ncmlkT3B0aW9uLmV4cG9ydC5tYXBwaW5nKGV4cG9ydEl0ZW1zLCBwYXJhbXMuZXhjZWxDb25maWcubmFtZSk7XHJcbiAgICAgIGlmIChyZXN1bHRzIGluc3RhbmNlb2YgUHJvbWlzZSkge1xyXG4gICAgICAgIGV4cG9ydEl0ZW1zID0gYXdhaXQgcmVzdWx0cztcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBleHBvcnRJdGVtcyA9IHJlc3VsdHM7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGNvbnN0IGNvbHVtbnMgPSBbLi4udGhpcy5ncmlkT3B0aW9uLmNvbHVtbnMsIC4uLih0aGlzLmdyaWRPcHRpb24uZXhwb3J0Py5jb2x1bW5zIHx8IFtdKV07XHJcbiAgICBjb25zdCBpdGVtcyA9IGV4cG9ydEl0ZW1zLm1hcChpdGVtID0+IHtcclxuICAgICAgY29uc3Qgb2JqOiBhbnkgPSB7fTtcclxuICAgICAgY29uc3QgaGFuZGxlID0gKGNvbHVtbjogU2RHcmlkQ29sdW1uKSA9PiB7XHJcbiAgICAgICAgaWYgKGNvbHVtbi50eXBlID09PSAnY2hpbGRyZW4nKSB7XHJcbiAgICAgICAgICBjb2x1bW4uY2hpbGRyZW4uZm9yRWFjaChoYW5kbGUpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoY29sdW1uLnRyYW5zZm9ybSkge1xyXG4gICAgICAgICAgb2JqW2NvbHVtbi5maWVsZF0gPSBjb2x1bW4udHJhbnNmb3JtKGl0ZW1bY29sdW1uLmZpZWxkXSwgaXRlbSk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChpdGVtW2NvbHVtbi5maWVsZF0gPT09IHVuZGVmaW5lZCB8fCBpdGVtW2NvbHVtbi5maWVsZF0gPT09IG51bGwgfHwgaXRlbVtjb2x1bW4uZmllbGRdID09PSAnJykge1xyXG4gICAgICAgICAgb2JqW2NvbHVtbi5maWVsZF0gPSAnJztcclxuICAgICAgICB9IGVsc2UgaWYgKGNvbHVtbi50eXBlID09PSAnc3RyaW5nJyB8fCBjb2x1bW4udHlwZSA9PT0gJ251bWJlcicgfHwgY29sdW1uLnR5cGUgPT09ICdjb2xvcicpIHtcclxuICAgICAgICAgIC8vIE7hur91IGNlbGwgbMOgIHN0cmluZyBob+G6t2MgbnVtYmVyIHRow6wgZ8OhbiBi4bqxbmcgY2jDrW5oIG7Ds1xyXG4gICAgICAgICAgb2JqW2NvbHVtbi5maWVsZF0gPSBpdGVtW2NvbHVtbi5maWVsZF07XHJcbiAgICAgICAgfSBlbHNlIGlmIChjb2x1bW4udHlwZSA9PT0gJ2Jvb2wnKSB7XHJcbiAgICAgICAgICAvLyBO4bq/dSBsw6AgYm9vbCB0aMOsIGfDoW4gYuG6sW5nIGdpw6EgdHLhu4sgdHJ1ZVZhbHVlIHbDoCBmYWxzZVZhbHVlIChu4bq/dSBjw7MpLCBt4bq3YyDEkeG7i25oIGzDoCBUUlVFL0ZBTFNFXHJcbiAgICAgICAgICBpZiAoaXRlbVtjb2x1bW4uZmllbGRdKSB7XHJcbiAgICAgICAgICAgIG9ialtjb2x1bW4uZmllbGRdID0gY29sdW1uLnRydWVWYWx1ZSB8fCAnVHJ1ZSc7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBvYmpbY29sdW1uLmZpZWxkXSA9IGNvbHVtbi5mYWxzZVZhbHVlIHx8ICdGYWxzZSc7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmIChjb2x1bW4udHlwZSA9PT0gJ2RhdGUnKSB7XHJcbiAgICAgICAgICAvLyBO4bq/dSBsw6AgZGF0ZSB0aMOsIGNvbnZlcnQgdGhlbyDEkcO6bmcgZm9ybWF0XHJcbiAgICAgICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoaXRlbVtjb2x1bW4uZmllbGRdKTtcclxuICAgICAgICAgIG9ialtjb2x1bW4uZmllbGRdID0gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oZGF0ZSwgJ2RkL01NL3l5eXknKTtcclxuICAgICAgICB9IGVsc2UgaWYgKGNvbHVtbi50eXBlID09PSAnZGF0ZXRpbWUnKSB7XHJcbiAgICAgICAgICAvLyBO4bq/dSBsw6AgZGF0ZXRpbWUgdGjDrCBjb252ZXJ0IHRoZW8gxJHDum5nIGZvcm1hdFxyXG4gICAgICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKGl0ZW1bY29sdW1uLmZpZWxkXSk7XHJcbiAgICAgICAgICBvYmpbY29sdW1uLmZpZWxkXSA9IHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKGRhdGUsICdkZC9NTS95eXl5IEhIOm1tOnNzJyk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChjb2x1bW4udHlwZSA9PT0gJ3RpbWUnKSB7XHJcbiAgICAgICAgICAvLyBO4bq/dSBsw6AgdGltZSB0aMOsIGNvbnZlcnQgdGhlbyDEkcO6bmcgZm9ybWF0XHJcbiAgICAgICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoaXRlbVtjb2x1bW4uZmllbGRdKTtcclxuICAgICAgICAgIG9ialtjb2x1bW4uZmllbGRdID0gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oZGF0ZSwgJ0hIOm1tOnNzJyk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChjb2x1bW4udHlwZSA9PT0gJ3ZhbHVlcycpIHtcclxuICAgICAgICAgIC8vIE7hur91IGzDoCB2YWx1ZXMgdGjDrCBs4bqleSBnacOhIHRy4buLIGPhu6dhIHZhbHVlIMSRxrDhu6NjIGNo4buNblxyXG4gICAgICAgICAgY29uc3QgZGF0YSA9IGNvbHVtbi52YWx1ZXMuZmluZChlID0+IGUudmFsdWUgPT09IGl0ZW1bY29sdW1uLmZpZWxkXSk7XHJcbiAgICAgICAgICBpZiAoZGF0YSkge1xyXG4gICAgICAgICAgICBvYmpbY29sdW1uLmZpZWxkXSA9IGRhdGEudGV4dDtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIG9ialtjb2x1bW4uZmllbGRdID0gaXRlbVtjb2x1bW4uZmllbGRdO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSBpZiAoY29sdW1uLnR5cGUgPT09ICdyYWRpbycpIHtcclxuICAgICAgICAgIGNvbnN0IGRhdGEgPSBjb2x1bW4udmFsdWVzLmZpbmQoZSA9PiBlW2NvbHVtbi52YWx1ZUZpZWxkXSA9PT0gaXRlbVtjb2x1bW4uZmllbGRdKTtcclxuICAgICAgICAgIGlmIChkYXRhKSB7XHJcbiAgICAgICAgICAgIG9ialtjb2x1bW4uZmllbGRdID0gZGF0YVtjb2x1bW4uZGlzcGxheUZpZWxkXTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIG9ialtjb2x1bW4uZmllbGRdID0gaXRlbVtjb2x1bW4uZmllbGRdO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfTtcclxuICAgICAgY29sdW1ucy5mb3JFYWNoKGhhbmRsZSk7XHJcbiAgICAgIHJldHVybiBvYmo7XHJcbiAgICB9KTtcclxuICAgIHRoaXMuZXhwb3J0U2VydmljZS5leHBvcnRCeVRlbXBsYXRlKHtcclxuICAgICAgZmlsZVBhdGg6IHBhcmFtcy5leGNlbENvbmZpZy5mdWxsUGF0aCxcclxuICAgICAgY29sdW1uczogcGFyYW1zLmV4Y2VsQ29sdW1ucyxcclxuICAgICAgaXRlbXNcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGludmFsaWRJdGVtcygpIHtcclxuICAgIHJldHVybiB0aGlzLml0ZW1zLmZpbHRlcihlID0+IGUuZWRpdG9ySGFuZGxlcj8uZXJyb3JNZXNzYWdlKS5tYXAoZSA9PiB7XHJcbiAgICAgIGNvbnN0IHsgdGVtcG9yYXJ5LFxyXG4gICAgICAgIG9yaWdpbkl0ZW0sXHJcbiAgICAgICAgZWRpdG9ySGFuZGxlcixcclxuICAgICAgICBlZGl0aW5nU3RhdHVzLFxyXG4gICAgICAgIGlzQ2hlY2tlZCxcclxuICAgICAgICBzdWJJbmZvcm1hdGlvbixcclxuICAgICAgICBibGlua2VyLFxyXG4gICAgICAgIC4uLml0ZW0gfSA9IGU7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgaXRlbSxcclxuICAgICAgICBtZXNzYWdlOiBlLmVkaXRvckhhbmRsZXIuZXJyb3JNZXNzYWdlXHJcbiAgICAgIH07XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGdldCBncmlkSXRlbXMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5pdGVtcy5tYXAoZSA9PiB7XHJcbiAgICAgIGNvbnN0IHsgdGVtcG9yYXJ5LFxyXG4gICAgICAgIG9yaWdpbkl0ZW0sXHJcbiAgICAgICAgZWRpdG9ySGFuZGxlcixcclxuICAgICAgICBlZGl0aW5nU3RhdHVzLFxyXG4gICAgICAgIGlzQ2hlY2tlZCxcclxuICAgICAgICBzdWJJbmZvcm1hdGlvbixcclxuICAgICAgICBibGlua2VyLFxyXG4gICAgICAgIC4uLml0ZW0gfSA9IGU7XHJcbiAgICAgIHJldHVybiBpdGVtO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBvbkVkaXRvckNoYW5nZSA9ICgpID0+IHtcclxuICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcbiAgb25TZWxlY3RQYWdlU2l6ZSA9ICgpID0+IHtcclxuICAgIHRoaXMucmVsb2FkKCk7XHJcbiAgfVxyXG4gIHByaXZhdGUgcmVmcmVzaEV4dGVybmFsRmlsdGVyID0gKGV4dGVybmFsRmlsdGVyczogU2RHcmlkRXh0ZXJuYWxGaWx0ZXJbXSwgZXh0ZXJuYWxGaWx0ZXI6IGFueSkgPT4ge1xyXG4gICAgZXh0ZXJuYWxGaWx0ZXIgPSBleHRlcm5hbEZpbHRlciB8fCB7fTtcclxuICAgIGV4dGVybmFsRmlsdGVycyA9IGV4dGVybmFsRmlsdGVycyB8fCBbXTtcclxuICAgIGV4dGVybmFsRmlsdGVycy5mb3JFYWNoKGUgPT4ge1xyXG4gICAgICBpZiAoZS50eXBlID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgIGV4dGVybmFsRmlsdGVyW2UuZmllbGRdID0gZXh0ZXJuYWxGaWx0ZXJbZS5maWVsZF0gPz8gZS5kZWZhdWx0ID8/ICcnO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBpZiAoZS50eXBlID09PSAnbnVtYmVyJykge1xyXG4gICAgICAgIGV4dGVybmFsRmlsdGVyW2UuZmllbGRdID0gZXh0ZXJuYWxGaWx0ZXJbZS5maWVsZF0gPz8gZS5kZWZhdWx0ID8/IHVuZGVmaW5lZDtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGUudHlwZSA9PT0gJ2RhdGVyYW5nZScpIHtcclxuICAgICAgICBleHRlcm5hbEZpbHRlcltlLmZpZWxkXSA9IHtcclxuICAgICAgICAgIGZyb206IGV4dGVybmFsRmlsdGVyW2UuZmllbGRdPy5mcm9tID8/IGUuZGVmYXVsdEZyb20gPz8gdW5kZWZpbmVkLFxyXG4gICAgICAgICAgdG86IGV4dGVybmFsRmlsdGVyW2UuZmllbGRdPy50byA/PyBlLmRlZmF1bHRUbyA/PyB1bmRlZmluZWRcclxuICAgICAgICB9O1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBpZiAoZS50eXBlID09PSAnbnVtYmVycmFuZ2UnKSB7XHJcbiAgICAgICAgZXh0ZXJuYWxGaWx0ZXJbZS5maWVsZF0gPSB7XHJcbiAgICAgICAgICBmcm9tOiBleHRlcm5hbEZpbHRlcltlLmZpZWxkXT8uZnJvbSA/PyBlLmRlZmF1bHRGcm9tID8/IHVuZGVmaW5lZCxcclxuICAgICAgICAgIHRvOiBleHRlcm5hbEZpbHRlcltlLmZpZWxkXT8udG8gPz8gZS5kZWZhdWx0VG8gPz8gdW5kZWZpbmVkXHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGUudHlwZSA9PT0gJ2RhdGVyYW5nZWZ1bGwnKSB7XHJcbiAgICAgICAgZXh0ZXJuYWxGaWx0ZXJbZS5maWVsZF0gPSB7XHJcbiAgICAgICAgICBmcm9tOiBleHRlcm5hbEZpbHRlcltlLmZpZWxkXT8uZnJvbSA/PyBlLmRlZmF1bHRGcm9tID8/IHVuZGVmaW5lZCxcclxuICAgICAgICAgIHRvOiBleHRlcm5hbEZpbHRlcltlLmZpZWxkXT8udG8gPz8gZS5kZWZhdWx0VG8gPz8gdW5kZWZpbmVkXHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGUudHlwZSA9PT0gJ3ZhbHVlcycpIHsgLy8gYW5kbjFcclxuICAgICAgICBleHRlcm5hbEZpbHRlcltlLmZpZWxkXSA9IChleHRlcm5hbEZpbHRlcltlLmZpZWxkXSB8fCBlLmRlZmF1bHQpID8/ICcnO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gZXh0ZXJuYWxGaWx0ZXI7XHJcbiAgfVxyXG5cclxuICBvbkNyZWF0ZVF1aWNrRmlsdGVyID0gKGV2PzogRXZlbnQpID0+IHtcclxuICAgIHRoaXMubWF0U2VsZWN0Py5jbG9zZSgpO1xyXG4gICAgdGhpcy5vbkZpbHRlclBvcHVwKCk7XHJcbiAgICB0aGlzLnNkR3JpZFBvcHVwRmlsdGVyPy5jbG9zZSgpO1xyXG4gICAgdGhpcy5zZEdyaWRQb3B1cEZpbHRlcj8ub25DcmVhdGVRdWlja0ZpbHRlcihldik7XHJcbiAgfVxyXG5cclxuICBvbkVkaXRRdWlja0ZpbHRlciA9IChldjogRXZlbnQsIHF1aWNrRmlsdGVyPzogUXVpY2tGaWx0ZXIpID0+IHtcclxuICAgIHRoaXMubWF0U2VsZWN0Py5jbG9zZSgpO1xyXG4gICAgdGhpcy5vbkZpbHRlclBvcHVwKCk7XHJcbiAgICB0aGlzLnNkR3JpZFBvcHVwRmlsdGVyPy5jbG9zZSgpO1xyXG4gICAgdGhpcy5zZEdyaWRQb3B1cEZpbHRlcj8ub25FZGl0UXVpY2tGaWx0ZXIoZXYsIHF1aWNrRmlsdGVyKTtcclxuICB9XHJcblxyXG4gIG9uRGVsZXRlUXVpY2tGaWx0ZXIgPSAoZXY6IEV2ZW50LCBxdWlja0ZpbHRlcj86IFF1aWNrRmlsdGVyKSA9PiB7XHJcbiAgICB0aGlzLm1hdFNlbGVjdD8uY2xvc2UoKTtcclxuICAgIHRoaXMub25GaWx0ZXJQb3B1cCgpO1xyXG4gICAgdGhpcy5zZEdyaWRQb3B1cEZpbHRlcj8uY2xvc2UoKTtcclxuICAgIHRoaXMuc2RHcmlkUG9wdXBGaWx0ZXI/Lm9uRGVsZXRlUXVpY2tGaWx0ZXIoZXYsIHF1aWNrRmlsdGVyKTtcclxuICB9XHJcbn1cclxuIl19
|